Author: post
Date: 2010-05-28 15:38:53 +0200 (Fri, 28 May 2010)
New Revision: 3394
Modified:
trunk/src/rs-actions.c
Log:
Add Select All/None to copy dialog.
Modified: trunk/src/rs-actions.c
===================================================================
--- trunk/src/rs-actions.c 2010-05-28 10:26:11 UTC (rev 3393)
+++ trunk/src/rs-actions.c 2010-05-28 13:38:53 UTC (rev 3394)
@@ -54,6 +54,9 @@
#define RADIOACTION(Action) void rs_action_##Action(GtkRadioAction
*radioaction, GtkRadioAction *current, RS_BLOB *rs); \
void rs_action_##Action(GtkRadioAction *radioaction, GtkRadioAction
*current, RS_BLOB *rs)
+static gint copy_dialog_get_mask();
+static void copy_dialog_set_mask(gint mask);
+
ACTION(todo)
{
GString *gs = g_string_new("Action not implemented: ");
@@ -334,19 +337,30 @@
rs_cache_load(rs->photo);
}
-ACTION(copy_settings)
+static const gint COPY_MASK_ALL =
MASK_PROFILE|MASK_EXPOSURE|MASK_SATURATION|MASK_HUE|
+
MASK_CONTRAST|MASK_WB|MASK_SHARPEN|MASK_DENOISE_LUMA|MASK_DENOISE_CHROMA|
+ MASK_CHANNELMIXER|MASK_TCA|MASK_VIGNETTING|MASK_CURVE;
+
+/* Widgets for copy dialog */
+static GtkWidget *cb_profile, *cb_exposure, *cb_saturation, *cb_hue,
*cb_contrast, *cb_whitebalance, *cb_curve, *cb_sharpen, *cb_denoise_luma,
*cb_denoise_chroma, *cb_channelmixer, *cb_tca, *cb_vignetting, *b_all_none;
+
+static void
+all_none_clicked(GtkButton *button, gpointer user_data)
{
- gint mask = 0xffffff; /* Should be RSSettingsMask, is gint to satisfy
rs_conf_get_integer() */
- GtkWidget *dialog, *cb_box;
- GtkWidget *cb_profile, *cb_exposure, *cb_saturation, *cb_hue,
*cb_contrast, *cb_whitebalance, *cb_curve, *cb_sharpen, *cb_denoise_luma,
*cb_denoise_chroma, *cb_channelmixer, *cb_tca, *cb_vignetting;
+ gint mask= copy_dialog_get_mask();
+ if (mask == COPY_MASK_ALL)
+ mask = 0;
+ else
+ mask = COPY_MASK_ALL;
- if (!rs->settings_buffer)
- rs->settings_buffer = rs_settings_new();
- if (!rs->photo)
- return;
+ copy_dialog_set_mask(mask);
+}
- rs_conf_get_integer(CONF_PASTE_MASK, &mask);
-
+static GtkWidget *
+create_copy_dialog(gint mask)
+{
+ GtkWidget *cb_box;
+ GtkWidget *dialog;
/* Build GUI */
cb_profile = gtk_check_button_new_with_label (_("Profile"));
cb_exposure = gtk_check_button_new_with_label (_("Exposure"));
@@ -361,34 +375,11 @@
cb_tca = gtk_check_button_new_with_label (_("TCA"));
cb_vignetting = gtk_check_button_new_with_label (_("Vignetting"));
cb_curve = gtk_check_button_new_with_label (_("Curve"));
+ b_all_none = gtk_button_new_with_label (_("Select All/None"));
- if (mask & MASK_PROFILE)
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cb_profile),
TRUE);
- if (mask & MASK_EXPOSURE)
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cb_exposure),
TRUE);
- if (mask & MASK_SATURATION)
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cb_saturation),
TRUE);
- if (mask & MASK_HUE)
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cb_hue), TRUE);
- if (mask & MASK_CONTRAST)
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cb_contrast),
TRUE);
- if (mask & MASK_WARMTH && mask & MASK_TINT)
-
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cb_whitebalance), TRUE);
- if (mask & MASK_SHARPEN)
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cb_sharpen),
TRUE);
- if (mask & MASK_DENOISE_LUMA)
-
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cb_denoise_luma), TRUE);
- if (mask & MASK_DENOISE_CHROMA)
-
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cb_denoise_chroma), TRUE);
- if (mask & MASK_CHANNELMIXER)
-
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cb_channelmixer), TRUE);
- if (mask & MASK_TCA)
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cb_tca), TRUE);
- if (mask & MASK_VIGNETTING)
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cb_vignetting),
TRUE);
- if (mask & MASK_CURVE)
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cb_curve), TRUE);
+ g_signal_connect(b_all_none, "clicked", G_CALLBACK(all_none_clicked),
NULL);
+ copy_dialog_set_mask(mask);
cb_box = gtk_vbox_new(FALSE, 0);
gtk_box_pack_start (GTK_BOX (cb_box), cb_profile, FALSE, TRUE, 0);
@@ -404,59 +395,95 @@
gtk_box_pack_start (GTK_BOX (cb_box), cb_tca, FALSE, TRUE, 0);
gtk_box_pack_start (GTK_BOX (cb_box), cb_vignetting, FALSE, TRUE, 0);
gtk_box_pack_start (GTK_BOX (cb_box), cb_curve, FALSE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (cb_box), b_all_none, FALSE, TRUE, 0);
dialog = gui_dialog_make_from_widget(GTK_STOCK_DIALOG_QUESTION,
_("Select settings to copy"), cb_box);
gtk_dialog_add_buttons(GTK_DIALOG(dialog), GTK_STOCK_CANCEL,
GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL);
gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK);
+ return dialog;
+}
+static void
+copy_dialog_set_mask(gint mask)
+{
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cb_profile), !!(mask &
MASK_PROFILE));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cb_exposure), !!(mask &
MASK_EXPOSURE));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cb_saturation), !!(mask
& MASK_SATURATION));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cb_hue), !!(mask &
MASK_HUE));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cb_contrast), !!(mask &
MASK_CONTRAST));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cb_whitebalance),
!!(mask & MASK_WB));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cb_sharpen), !!(mask &
MASK_SHARPEN));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cb_denoise_luma),
!!(mask & MASK_DENOISE_LUMA));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cb_denoise_chroma),
!!(mask & MASK_DENOISE_CHROMA));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cb_channelmixer),
!!(mask & MASK_CHANNELMIXER));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cb_tca), !!(mask &
MASK_TCA));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cb_vignetting), !!(mask
& MASK_VIGNETTING));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cb_curve), !!(mask &
MASK_CURVE));
+}
+
+static gint
+copy_dialog_get_mask()
+{
+ gint mask = 0;
+ if (GTK_TOGGLE_BUTTON(cb_profile)->active)
+ mask |= MASK_PROFILE;
+ if (GTK_TOGGLE_BUTTON(cb_exposure)->active)
+ mask |= MASK_EXPOSURE;
+ if (GTK_TOGGLE_BUTTON(cb_saturation)->active)
+ mask |= MASK_SATURATION;
+ if (GTK_TOGGLE_BUTTON(cb_hue)->active)
+ mask |= MASK_HUE;
+ if (GTK_TOGGLE_BUTTON(cb_contrast)->active)
+ mask |= MASK_CONTRAST;
+ if (GTK_TOGGLE_BUTTON(cb_whitebalance)->active)
+ mask |= MASK_WB;
+ if (GTK_TOGGLE_BUTTON(cb_sharpen)->active)
+ mask |= MASK_SHARPEN;
+ if (GTK_TOGGLE_BUTTON(cb_denoise_luma)->active)
+ mask |= MASK_DENOISE_LUMA;
+ if (GTK_TOGGLE_BUTTON(cb_denoise_chroma)->active)
+ mask |= MASK_DENOISE_CHROMA;
+ if (GTK_TOGGLE_BUTTON(cb_channelmixer)->active)
+ mask |= MASK_CHANNELMIXER;
+ if (GTK_TOGGLE_BUTTON(cb_tca)->active)
+ mask |= MASK_TCA;
+ if (GTK_TOGGLE_BUTTON(cb_vignetting)->active)
+ mask |= MASK_VIGNETTING;
+ if (GTK_TOGGLE_BUTTON(cb_curve)->active)
+ mask |= MASK_CURVE;
+ return mask;
+}
+
+ACTION(copy_settings)
+{
+ gint mask = COPY_MASK_ALL; /* Should be RSSettingsMask, is gint to
satisfy rs_conf_get_integer() */
+ GtkWidget *dialog;
+
+ if (!rs->settings_buffer)
+ rs->settings_buffer = rs_settings_new();
+ if (!rs->photo)
+ return;
+
+ rs_conf_get_integer(CONF_PASTE_MASK, &mask);
+ dialog = create_copy_dialog(mask);
gtk_widget_show_all(dialog);
- mask=0;
-
if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_OK)
{
- if (GTK_TOGGLE_BUTTON(cb_profile)->active)
- mask |= MASK_PROFILE;
- if (GTK_TOGGLE_BUTTON(cb_exposure)->active)
- mask |= MASK_EXPOSURE;
- if (GTK_TOGGLE_BUTTON(cb_saturation)->active)
- mask |= MASK_SATURATION;
- if (GTK_TOGGLE_BUTTON(cb_hue)->active)
- mask |= MASK_HUE;
- if (GTK_TOGGLE_BUTTON(cb_contrast)->active)
- mask |= MASK_CONTRAST;
- if (GTK_TOGGLE_BUTTON(cb_whitebalance)->active)
- mask |= MASK_WB;
- if (GTK_TOGGLE_BUTTON(cb_sharpen)->active)
- mask |= MASK_SHARPEN;
- if (GTK_TOGGLE_BUTTON(cb_denoise_luma)->active)
- mask |= MASK_DENOISE_LUMA;
- if (GTK_TOGGLE_BUTTON(cb_denoise_chroma)->active)
- mask |= MASK_DENOISE_CHROMA;
- if (GTK_TOGGLE_BUTTON(cb_channelmixer)->active)
- mask |= MASK_CHANNELMIXER;
- if (GTK_TOGGLE_BUTTON(cb_tca)->active)
- mask |= MASK_TCA;
- if (GTK_TOGGLE_BUTTON(cb_vignetting)->active)
- mask |= MASK_VIGNETTING;
- if (GTK_TOGGLE_BUTTON(cb_curve)->active)
- mask |= MASK_CURVE;
+ mask = copy_dialog_get_mask();
rs_conf_set_integer(CONF_PASTE_MASK, mask);
-
rs_settings_copy(rs->photo->settings[rs->current_setting],
MASK_ALL, rs->settings_buffer);
rs->dcp_buffer = rs_photo_get_dcp_profile(rs->photo);
rs->icc_buffer = rs_photo_get_icc_profile(rs->photo);
gui_status_notify(_("Copied settings"));
}
gtk_widget_destroy (dialog);
-
-
}
ACTION(paste_settings)
{
- gint mask = 0xffffff; /* Should be RSSettingsMask, is gint to satisfy
rs_conf_get_integer() */
+ gint mask = COPY_MASK_ALL; /* Should be RSSettingsMask, is gint to
satisfy rs_conf_get_integer() */
gui_set_busy(TRUE);
GTK_CATCHUP();
@@ -535,8 +562,8 @@
}
else
gui_status_notify(_("Buffer empty"));
+ GTK_CATCHUP();
gui_set_busy(FALSE);
- GTK_CATCHUP();
}
ACTION(reset_settings)
_______________________________________________
Rawstudio-commit mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit