Author: akv
Date: 2010-01-13 23:41:06 +0100 (Wed, 13 Jan 2010)
New Revision: 2982
Modified:
branches/rawstudio-ng-color/src/rs-toolbox.c
Log:
Added lens information in 'Lens corrections'.
Modified: branches/rawstudio-ng-color/src/rs-toolbox.c
===================================================================
--- branches/rawstudio-ng-color/src/rs-toolbox.c 2010-01-12 21:48:35 UTC
(rev 2981)
+++ branches/rawstudio-ng-color/src/rs-toolbox.c 2010-01-13 22:41:06 UTC
(rev 2982)
@@ -32,6 +32,7 @@
#include "rs-photo.h"
#include "conf_interface.h"
#include "rs-actions.h"
+#include "rs-lens-db-editor.h"
/* Some helpers for creating the basic sliders */
typedef struct {
@@ -60,11 +61,12 @@
#define NCHANNELMIXER (3)
const static BasicSettings lens[] = {
+ { "empty", 0.000 }, /* Hack to have space to put in a label */
{ "tca_kr", 0.001 },
{ "tca_kb", 0.001 },
{ "vignetting_k2", 0.01 },
};
-#define NLENS (3)
+#define NLENS (4)
struct _RSToolbox {
GtkScrolledWindow parent;
@@ -76,6 +78,9 @@
GtkRange *ranges[3][NBASICS];
GtkRange *channelmixer[3][NCHANNELMIXER];
GtkRange *lens[3][NLENS];
+ GtkWidget *lenslabel[3][1];
+ GtkWidget *lensbutton[3][1];
+ RSLens *rs_lens;
RSSettings *settings[3];
GtkWidget *curve[3];
@@ -115,6 +120,7 @@
static void photo_spatial_changed(RS_PHOTO *photo, gpointer user_data);
static void photo_finalized(gpointer data, GObject *where_the_object_was);
static void toolbox_copy_from_photo(RSToolbox *toolbox, const gint snapshot,
const RSSettingsMask mask, RS_PHOTO *photo);
+static void toolbox_lens_set_label(RSToolbox *toolbox, gint snapshot);
static void
rs_toolbox_finalize (GObject *object)
@@ -595,6 +601,40 @@
gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 0,
GDK_CURRENT_TIME);
}
+static GtkWidget*
+basic_label(RSToolbox *toolbox, const gint snapshot, GtkTable *table, const
gint row, GtkWidget *widget)
+{
+ GtkWidget *label = gtk_label_new(NULL);
+ if (widget)
+ {
+ GtkWidget *hbox = gtk_hbox_new(FALSE, 2);
+
+ gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 2);
+ gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 2);
+ gtk_table_attach(table, hbox, 0, 5, 0, 1, GTK_EXPAND, GTK_FILL,
0, 0);
+ }
+ else
+ {
+ gtk_table_attach(table, label, 0, 5, 0, 1, GTK_EXPAND,
GTK_FILL, 0, 0);
+ }
+
+ return label;
+}
+
+void
+toolbox_edit_lens_clicked(GtkButton *button, gpointer user_data)
+{
+ gint i;
+ RSToolbox *toolbox = user_data;
+ gtk_dialog_run(rs_lens_db_editor_single_lens(toolbox->rs_lens));
+ /* Make sure we set to all 3 snapshots */
+ for(i=0; i<3; i++) toolbox_lens_set_label(toolbox, i);
+ RSLensDb *lens_db = rs_lens_db_get_default();
+ rs_lens_db_save(lens_db);
+ /* FIXME: set lensfun plugin dirty */
+ /* FIXME: set photo dirty (force update) */
+}
+
static GtkWidget *
new_snapshot_page(RSToolbox *toolbox, const gint snapshot)
{
@@ -611,7 +651,15 @@
toolbox->ranges[snapshot][row] = basic_slider(toolbox,
snapshot, table, row, &basic[row]);
for(row=0;row<NCHANNELMIXER;row++)
toolbox->channelmixer[snapshot][row] = basic_slider(toolbox,
snapshot, channelmixertable, row, &channelmixer[row]);
- for(row=0;row<NLENS;row++)
+
+ /* ROW HARDCODED TO 0 */
+ toolbox->lensbutton[snapshot][0] = gtk_button_new_with_label(_("Edit
lens"));
+ toolbox->lenslabel[snapshot][0] = basic_label(toolbox, snapshot,
lenstable, row, toolbox->lensbutton[snapshot][0]);
+ toolbox_lens_set_label(toolbox, snapshot);
+
+ gtk_signal_connect(GTK_OBJECT(toolbox->lensbutton[snapshot][0]),
"clicked", G_CALLBACK(toolbox_edit_lens_clicked), toolbox);
+
+ for(row=1;row<NLENS;row++)
toolbox->lens[snapshot][row] = basic_slider(toolbox, snapshot,
lenstable, row, &lens[row]);
/* Add curve editor */
@@ -749,7 +797,7 @@
{
gtk_widget_set_sensitive(GTK_WIDGET(toolbox->channelmixer[snapshot][i]), FALSE);
}
- for(i=0;i<NLENS;i++)
+ for(i=1;i<NLENS;i++)
{
gtk_widget_set_sensitive(GTK_WIDGET(toolbox->lens[snapshot][i]), FALSE);
}
@@ -787,7 +835,7 @@
}
/* Update lens */
- for(i=0;i<NLENS;i++)
+ for(i=1;i<NLENS;i++)
if (mask)
{
gfloat value;
@@ -809,6 +857,41 @@
}
void
+toolbox_lens_set_label(RSToolbox *toolbox, gint snapshot)
+{
+ const gchar *lens_text = NULL;
+
+ if(toolbox->rs_lens)
+ {
+ if (!rs_lens_get_lensfun_model(toolbox->rs_lens))
+ lens_text = _("Lens unknown");
+ else if (!rs_lens_get_lensfun_enabled(toolbox->rs_lens))
+ lens_text = _("Lens disabled");
+ else
+ lens_text = rs_lens_get_lensfun_model(toolbox->rs_lens);
+ }
+ else if(toolbox->photo)
+ {
+ lens_text = _("Camera unknown");
+ }
+ else
+ {
+ lens_text = _("No photo");
+ }
+
+ GString *temp = g_string_new(lens_text);
+ if (strlen(temp->str) > 25)
+ {
+ temp = g_string_set_size(temp, 22);
+ temp = g_string_append(temp, "...");
+ }
+
+ gtk_label_set_markup(GTK_LABEL(toolbox->lenslabel[snapshot][0]),
g_strdup_printf("<small>%s</small>", temp->str));
+ GtkTooltips *tooltips = gtk_tooltips_new();
+ gtk_tooltips_set_tip(tooltips, toolbox->lenslabel[snapshot][0],
lens_text, NULL);
+}
+
+void
rs_toolbox_set_photo(RSToolbox *toolbox, RS_PHOTO *photo)
{
gint snapshot;
@@ -839,7 +922,14 @@
gtk_widget_set_sensitive(GTK_WIDGET(toolbox->ranges[snapshot][i]), TRUE);
for(i=0;i<NCHANNELMIXER;i++)
gtk_widget_set_sensitive(GTK_WIDGET(toolbox->channelmixer[snapshot][i]), TRUE);
- for(i=0;i<NLENS;i++)
+
+ if (photo->metadata->lens_identifier) {
+ RSLensDb *lens_db = rs_lens_db_get_default();
+ toolbox->rs_lens =
rs_lens_db_get_from_identifier(lens_db, photo->metadata->lens_identifier);
+ toolbox_lens_set_label(toolbox, snapshot);
+ }
+
+ for(i=1;i<NLENS;i++)
gtk_widget_set_sensitive(GTK_WIDGET(toolbox->lens[snapshot][i]), TRUE);
}
photo_spatial_changed(toolbox->photo, toolbox);
_______________________________________________
Rawstudio-commit mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit