Author: akv
Date: 2010-01-08 00:13:57 +0100 (Fri, 08 Jan 2010)
New Revision: 2974

Modified:
   branches/rawstudio-ng-color/librawstudio/rs-lens-db-editor.c
   branches/rawstudio-ng-color/librawstudio/rs-lens-db-editor.h
Log:
Added editor for single lens.

Modified: branches/rawstudio-ng-color/librawstudio/rs-lens-db-editor.c
===================================================================
--- branches/rawstudio-ng-color/librawstudio/rs-lens-db-editor.c        
2010-01-07 20:09:53 UTC (rev 2973)
+++ branches/rawstudio-ng-color/librawstudio/rs-lens-db-editor.c        
2010-01-07 23:13:57 UTC (rev 2974)
@@ -36,16 +36,50 @@
 
 static void fill_model(RSLensDb *lens_db, GtkTreeModel *tree_model);
 static gboolean rs_lens_db_editor_update_lensfun();
+void rs_lens_db_editor_single_lens(RSLens *lens);
 
 typedef struct {
+       GtkWidget *lensfun_make;
+       GtkWidget *lensfun_model;
+       GtkWidget *button;
+       RSLens *lens;
+} SingleLensData;
+
+typedef struct {
        /* The menu used to choose lens - either full or limited by search 
criteria */
        GtkWidget *LensMenu;
        /* The GtkTreeView */
        GtkTreeView *tree_view;
+       SingleLensData *single_lens_data;
 } lens_data;
 
 static void lens_set (lens_data *data, const lfLens *lens)
 {
+       if (data->single_lens_data)
+       {
+               /* Set Maker and Model to the selected RSLens */
+               rs_lens_set_lensfun_make(data->single_lens_data->lens, 
lens->Maker);
+               rs_lens_set_lensfun_model(data->single_lens_data->lens, 
lens->Model);
+               rs_lens_set_lensfun_enabled(data->single_lens_data->lens, TRUE);
+
+               
gtk_label_set_text(GTK_LABEL(data->single_lens_data->lensfun_make), 
lens->Maker);
+               
gtk_label_set_text(GTK_LABEL(data->single_lens_data->lensfun_model), 
lens->Model);
+
+               gtk_widget_show(data->single_lens_data->lensfun_make);
+               gtk_widget_show(data->single_lens_data->lensfun_model);
+               gtk_widget_hide(data->single_lens_data->button);
+
+               RSLensDb *lens_db = rs_lens_db_get_default();
+
+               /* Force save of RSLensDb */
+               rs_lens_db_save(lens_db);
+
+               if (data)
+                       g_free(data);
+
+               return;
+       }
+
        GtkTreeSelection *selection = 
gtk_tree_view_get_selection(data->tree_view);
        GtkTreeModel *model = NULL;
        GtkTreeIter iter;
@@ -276,6 +310,7 @@
 
        lens_data *data = g_malloc(sizeof(lens_data));
        data->tree_view = tree_view;
+       data->single_lens_data = NULL;
 
        lensdb = lf_db_new ();
        lf_db_load (lensdb);
@@ -643,3 +678,217 @@
 
        return TRUE;
 }
+
+void set_lens (GtkButton *button, SingleLensData *single_lens_data)
+{
+       struct lfDatabase *lensdb = NULL;
+       const lfCamera *camera = NULL;
+       const lfCamera **cameras = NULL;
+
+       lens_data *data = g_malloc(sizeof(lens_data));
+       data->single_lens_data = single_lens_data;
+
+       lensdb = lf_db_new ();
+       lf_db_load (lensdb);
+
+       RSLens *rs_lens = RS_LENS(single_lens_data->lens);
+
+       gchar *camera_make;
+       gchar *camera_model;
+       gdouble min_focal;
+       gdouble max_focal;
+
+       g_assert(RS_IS_LENS(rs_lens));
+       g_object_get(rs_lens,
+                    "camera-make", &camera_make,
+                    "camera-model", &camera_model,
+                    "min-focal", &min_focal,
+                    "max-focal", &max_focal,
+                    NULL);
+
+       gchar *lens_search = g_strdup_printf("%.0f-%.0f", min_focal, max_focal);
+
+       cameras = lf_db_find_cameras(lensdb, camera_make, camera_model);
+       if (cameras)
+               camera = cameras[0];
+
+       if (camera)
+       {
+               const lfLens **lenslist = lf_db_find_lenses_hd (
+                       lensdb, camera, NULL, lens_search, 0);
+               const lfLens **full_lenslist = lf_db_find_lenses_hd (
+                       lensdb, camera, NULL, NULL, 0);
+
+               if (!lenslist && !full_lenslist)
+                       return;
+
+               lens_menu_fill (data, lenslist, full_lenslist);
+               lf_free (lenslist);
+       }
+       else
+       {
+               const lfLens **lenslist = lf_db_find_lenses_hd (
+                       lensdb, NULL, NULL, lens_search, 0);
+               const lfLens *const *full_lenslist = lf_db_get_lenses (lensdb);
+
+               if (!lenslist)
+                       return;
+               lens_menu_fill (data, lenslist, full_lenslist);
+       }
+
+       g_free(lens_search);
+
+       gtk_menu_popup (GTK_MENU (data->LensMenu), NULL, NULL, NULL, NULL,
+                       0, gtk_get_current_event_time ());
+}
+
+
+void
+rs_lens_db_editor_single_lens(RSLens *lens)
+{
+
+       gchar *identifier;
+       gchar *lensfun_make;
+       gchar *lensfun_model;
+       gdouble min_focal, max_focal, min_aperture, max_aperture;
+       gchar *camera_make;
+       gchar *camera_model;
+       gboolean enabled;
+
+       g_assert(RS_IS_LENS(lens));
+       g_object_get(lens,
+                    "identifier", &identifier,
+                    "lensfun-make", &lensfun_make,
+                    "lensfun-model", &lensfun_model,
+                    "min-focal", &min_focal,
+                    "max-focal", &max_focal,
+                    "min-aperture", &min_aperture,
+                    "max-aperture", &max_aperture,
+                    "camera-make", &camera_make,
+                    "camera-model", &camera_model,
+                    "enabled", &enabled,
+                    NULL);
+       
+       GtkWidget *editor = gtk_dialog_new();
+       gtk_window_set_title(GTK_WINDOW(editor), _("Rawstudio Lens Editor"));
+       gtk_dialog_set_has_separator (GTK_DIALOG(editor), FALSE);
+       g_signal_connect_swapped(editor, "delete_event",
+                                G_CALLBACK (gtk_widget_destroy), editor);
+       g_signal_connect_swapped(editor, "response",
+                                G_CALLBACK (gtk_widget_destroy), editor);
+
+       GtkWidget *frame = gtk_frame_new("");
+       GtkWidget *table = gtk_table_new(2, 8, FALSE);
+
+       GtkWidget *label1 = gtk_label_new("");
+       gtk_label_set_markup(GTK_LABEL(label1), "<b>Lens make</b>");
+       gtk_misc_set_alignment(GTK_MISC(label1), 0, 0);
+
+       GtkWidget *label2 = gtk_label_new("");
+       gtk_label_set_markup(GTK_LABEL(label2), "<b>Lens model</b>");
+       gtk_misc_set_alignment(GTK_MISC(label2), 0, 0);
+
+       GtkWidget *label3 = gtk_label_new("");
+       gtk_label_set_markup(GTK_LABEL(label3), "<b>Focal</b>");
+       gtk_misc_set_alignment(GTK_MISC(label3), 0, 0);
+
+       GtkWidget *label4 = gtk_label_new("");
+       gtk_label_set_markup(GTK_LABEL(label4), "<b>Aperture</b>");
+       gtk_misc_set_alignment(GTK_MISC(label4), 0, 0);
+
+       GtkWidget *label5 = gtk_label_new("");
+       gtk_label_set_markup(GTK_LABEL(label5), "<b>Camera make</b>");
+       gtk_misc_set_alignment(GTK_MISC(label5), 0, 0);
+
+       GtkWidget *label6 = gtk_label_new("");
+       gtk_label_set_markup(GTK_LABEL(label6), "<b>Camera model</b>");
+       gtk_misc_set_alignment(GTK_MISC(label6), 0, 0);
+
+//     GtkWidget *label7 = gtk_label_new("");
+//     gtk_label_set_markup(GTK_LABEL(label7), "<b>Enabled</b>");
+//     gtk_misc_set_alignment(GTK_MISC(label7), 0, 0);
+
+       gtk_table_attach_defaults(GTK_TABLE(table), label5, 0,1,0,1);
+       gtk_table_attach_defaults(GTK_TABLE(table), label6, 0,1,1,2);
+       gtk_table_attach_defaults(GTK_TABLE(table), label3, 0,1,2,3);
+       gtk_table_attach_defaults(GTK_TABLE(table), label4, 0,1,3,4);
+//     gtk_table_attach_defaults(GTK_TABLE(table), label7, 0,1,4,5);
+       gtk_table_attach_defaults(GTK_TABLE(table), label1, 0,1,6,7);
+       gtk_table_attach_defaults(GTK_TABLE(table), label2, 0,1,7,8);
+
+       GtkWidget *label_lensfun_make = gtk_label_new(lensfun_make);
+       GtkWidget *label_lensfun_model = gtk_label_new(lensfun_model);
+       GtkWidget *label_focal;
+       if (min_focal == max_focal)
+               label_focal = gtk_label_new(g_strdup_printf("%.0fmm", 
min_focal));
+       else
+               label_focal = gtk_label_new(g_strdup_printf("%.0f-%.0fmm", 
min_focal, max_focal));
+       GtkWidget *label_aperture = gtk_label_new(g_strdup_printf("f/%.1f", 
max_aperture));
+       GtkWidget *label_camera_make = gtk_label_new(camera_make);
+       GtkWidget *label_camera_model = gtk_label_new(camera_model);
+//     GtkWidget *checkbutton_enabled = gtk_toggle_button_new();
+
+       GtkWidget *button_set_lens = gtk_button_new_with_label("Set lens");
+
+       GtkWidget *sep = gtk_hseparator_new();
+
+       SingleLensData *single_lens_data = g_malloc(sizeof(SingleLensData));
+       single_lens_data->lensfun_make = label_lensfun_make;
+       single_lens_data->lensfun_model = label_lensfun_model;
+       single_lens_data->lens = lens;
+       single_lens_data->button = button_set_lens;
+
+       g_signal_connect(button_set_lens, "clicked", G_CALLBACK(set_lens), 
single_lens_data);
+
+       gtk_misc_set_alignment(GTK_MISC(label_lensfun_make), 1, 0);
+       gtk_misc_set_alignment(GTK_MISC(label_lensfun_model), 1, 0);
+       gtk_misc_set_alignment(GTK_MISC(label_focal), 1, 0);
+       gtk_misc_set_alignment(GTK_MISC(label_aperture), 1, 0);
+       gtk_misc_set_alignment(GTK_MISC(label_camera_make), 1, 0);
+       gtk_misc_set_alignment(GTK_MISC(label_camera_model), 1, 0);
+//     gtk_button_set_alignment(GTK_BUTTON(checkbutton_enabled), 1, 0);
+
+       gtk_table_attach_defaults(GTK_TABLE(table), label_camera_make, 1,2,0,1);
+       gtk_table_attach_defaults(GTK_TABLE(table), label_camera_model, 
1,2,1,2);
+       gtk_table_attach_defaults(GTK_TABLE(table), label_focal, 1,2,2,3);
+       gtk_table_attach_defaults(GTK_TABLE(table), label_aperture, 1,2,3,4);
+//     gtk_table_attach_defaults(GTK_TABLE(table), checkbutton_enabled, 
1,2,4,5);
+       gtk_table_attach_defaults(GTK_TABLE(table), sep, 0,2,5,6);
+       gtk_table_attach_defaults(GTK_TABLE(table), label_lensfun_make, 
1,2,6,7);
+       gtk_table_attach_defaults(GTK_TABLE(table), label_lensfun_model, 
1,2,7,8);
+       gtk_table_attach_defaults(GTK_TABLE(table), button_set_lens, 1,2,6,8);
+
+       /* Set spacing around separator in table */
+       gtk_table_set_row_spacing(GTK_TABLE(table), 4, 10);
+       gtk_table_set_row_spacing(GTK_TABLE(table), 5, 10);
+
+       gtk_window_resize(GTK_WINDOW(editor), 300, 1);
+
+        gtk_container_set_border_width (GTK_CONTAINER (frame), 6);
+        gtk_container_set_border_width (GTK_CONTAINER (table), 6);
+
+        gtk_box_pack_start (GTK_BOX (GTK_DIALOG(editor)->vbox), frame, TRUE, 
TRUE, 0);
+       gtk_container_add (GTK_CONTAINER (frame), table);
+
+       /* FIXME: Put lensfun update button in editor - for this to work, we 
cannot close the window when updating */
+//     GtkWidget *button_update_lensfun = gtk_button_new_with_label(_("Update 
lensfun database"));
+//     g_signal_connect(button_update_lensfun, "clicked", 
G_CALLBACK(update_lensfun), NULL);
+//     gtk_dialog_add_action_widget (GTK_DIALOG (editor), 
button_update_lensfun, GTK_RESPONSE_NONE);
+
+        GtkWidget *button_close = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
+        gtk_dialog_add_action_widget (GTK_DIALOG (editor), button_close, 
GTK_RESPONSE_CLOSE);
+
+        gtk_widget_show_all(GTK_WIDGET(editor));
+       if (!rs_lens_get_lensfun_model(lens) || !rs_lens_get_lensfun_make(lens))
+       {
+               gtk_widget_hide(label_lensfun_make);
+               gtk_widget_hide(label_lensfun_model);
+               gtk_widget_show(button_set_lens);
+       }
+       else
+       {
+               gtk_widget_show(label_lensfun_make);
+               gtk_widget_show(label_lensfun_model);
+               gtk_widget_hide(button_set_lens);
+       }
+}

Modified: branches/rawstudio-ng-color/librawstudio/rs-lens-db-editor.h
===================================================================
--- branches/rawstudio-ng-color/librawstudio/rs-lens-db-editor.h        
2010-01-07 20:09:53 UTC (rev 2973)
+++ branches/rawstudio-ng-color/librawstudio/rs-lens-db-editor.h        
2010-01-07 23:13:57 UTC (rev 2974)
@@ -35,5 +35,6 @@
 
 
 extern void rs_lens_db_editor();
+extern void rs_lens_db_editor_single_lens(RSLens *lens);
 
 #endif /* RS_LENS_DB_EDITOR_H */


_______________________________________________
Rawstudio-commit mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit

Reply via email to