void enter(dt_view_t *self) { dt_print_t *prt=(dt_print_t*)self->data; /* scroll filmstrip to the first selected image */ GList *selected_images = dt_collection_get_selected(darktable.collection, 1); if(selected_images) { int imgid = GPOINTER_TO_INT(selected_images->data); prt->image_id = imgid; dt_view_filmstrip_scroll_to_image(darktable.view_manager, imgid, FALSE); } g_list_free(selected_images); _set_orientation(prt); dt_control_signal_connect(darktable.signals, DT_SIGNAL_DEVELOP_MIPMAP_UPDATED, G_CALLBACK(_print_mipmaps_updated_signal_callback), (gpointer)self); dt_control_signal_connect(darktable.signals, DT_SIGNAL_VIEWMANAGER_FILMSTRIP_ACTIVATE, G_CALLBACK(_view_print_filmstrip_activate_callback), self); gtk_widget_grab_focus(dt_ui_center(darktable.gui->ui)); // prefetch next few from first selected image on. dt_view_filmstrip_prefetch(); darktable.control->mouse_over_id = -1; dt_control_set_mouse_over_id(prt->image_id); }
void enter(dt_view_t *self) { dt_capture_t *lib = (dt_capture_t *)self->data; /* connect signal for mipmap update for a redraw */ dt_control_signal_connect(darktable.signals, DT_SIGNAL_DEVELOP_MIPMAP_UPDATED, G_CALLBACK(_capture_mipmaps_updated_signal_callback), (gpointer)self); /* connect signal for fimlstrip image activate */ dt_control_signal_connect(darktable.signals, DT_SIGNAL_VIEWMANAGER_FILMSTRIP_ACTIVATE, G_CALLBACK(_view_capture_filmstrip_activate_callback), self); dt_view_filmstrip_scroll_to_image(darktable.view_manager, lib->image_id, TRUE); /* initialize a session */ lib->session = dt_import_session_new(); char *tmp = dt_conf_get_string("plugins/capture/jobcode"); if(tmp != NULL) { _capture_view_set_jobcode(self, tmp); g_free(tmp); } // register listener lib->listener = g_malloc0(sizeof(dt_camctl_listener_t)); lib->listener->data = lib; lib->listener->image_downloaded = _camera_capture_image_downloaded; lib->listener->request_image_path = _camera_request_image_path; lib->listener->request_image_filename = _camera_request_image_filename; dt_camctl_register_listener(darktable.camctl, lib->listener); }
static void _do_select(int imgid) { // to select the duplicate, we reuse the filmstrip proxy dt_selection_select_single(darktable.selection, imgid); dt_control_set_mouse_over_id(imgid); dt_view_filmstrip_scroll_to_image(darktable.view_manager,imgid,TRUE); }
void enter(dt_view_t *self) { dt_capture_t *lib = (dt_capture_t *)self->data; lib->mode = dt_conf_get_int("plugins/capture/mode"); /* connect signal for mipmap update for a redraw */ dt_control_signal_connect(darktable.signals, DT_SIGNAL_DEVELOP_MIPMAP_UPDATED, G_CALLBACK(_capture_mipamps_updated_signal_callback), (gpointer)self); /* connect signal for fimlstrip image activate */ dt_control_signal_connect(darktable.signals, DT_SIGNAL_VIEWMANAGER_FILMSTRIP_ACTIVATE, G_CALLBACK(_view_capture_filmstrip_activate_callback), self); dt_view_filmstrip_scroll_to_image(darktable.view_manager, lib->image_id, TRUE); // initialize a default session... char* tmp = dt_conf_get_string("plugins/capture/jobcode"); _capture_view_set_jobcode(self, tmp); g_free(tmp); }
static void _lib_filter_update_query(dt_lib_module_t *self) { /* sometimes changes */ dt_collection_set_query_flags(darktable.collection, COLLECTION_QUERY_FULL); /* updates query */ dt_collection_update_query(darktable.collection); /* update film strip, jump to currently opened image, if any: */ dt_view_filmstrip_scroll_to_image(darktable.view_manager, darktable.develop->image_storage.id, FALSE); }
static void _lib_duplicate_new_clicked_callback(GtkWidget *widget, GdkEventButton *event, dt_lib_module_t *self) { dt_lib_duplicate_t *d = (dt_lib_duplicate_t *)self->data; d->select = DT_DUPLICATE_SELECT_NONE; const int imgid = darktable.develop->image_storage.id; const int newid = dt_image_duplicate(imgid); if (newid <= 0) return; dt_history_delete_on_image(newid); // to select the duplicate, we reuse the filmstrip proxy dt_view_filmstrip_scroll_to_image(darktable.view_manager,newid,TRUE); }
static void film_strip_activated(const int imgid, void *data) { // switch images in darkroom mode: dt_view_t *self = (dt_view_t *)data; dt_develop_t *dev = (dt_develop_t *)self->data; dt_dev_change_image(dev, imgid); dt_view_filmstrip_scroll_to_image(darktable.view_manager, imgid, FALSE); // force redraw dt_control_queue_redraw(); }
void dt_view_filmstrip_set_active_image(dt_view_manager_t *vm,int iid) { /* First off clear all selected images... */ DT_DEBUG_SQLITE3_EXEC(dt_database_get(darktable.db), "delete from selected_images", NULL, NULL, NULL); /* clear and reset statement */ DT_DEBUG_SQLITE3_CLEAR_BINDINGS(darktable.view_manager->statements.make_selected); DT_DEBUG_SQLITE3_RESET(darktable.view_manager->statements.make_selected); /* setup statement and execute */ DT_DEBUG_SQLITE3_BIND_INT(darktable.view_manager->statements.make_selected, 1, iid); sqlite3_step(darktable.view_manager->statements.make_selected); dt_view_filmstrip_scroll_to_image(vm, iid, TRUE); }
static void _film_strip_activated(const int imgid, void *data) { const dt_view_t *self = (dt_view_t *)data; dt_print_t *prt = (dt_print_t *)self->data; prt->image_id = imgid; prt->iwidth = prt->iheight = 0; // guess the image orientation _set_orientation(prt); dt_view_filmstrip_scroll_to_image(darktable.view_manager, imgid, FALSE); // record the imgid to display when going back to lighttable dt_view_lighttable_set_position(darktable.view_manager, dt_collection_image_offset(imgid)); // force redraw dt_control_queue_redraw(); }
static void dt_dev_jump_image(dt_develop_t *dev, int diff) { const gchar *qin = dt_collection_get_query (darktable.collection); int offset = 0; if(qin) { int orig_imgid = -1, imgid = -1; sqlite3_stmt *stmt; DT_DEBUG_SQLITE3_PREPARE_V2(dt_database_get(darktable.db), "select imgid from selected_images", -1, &stmt, NULL); if(sqlite3_step(stmt) == SQLITE_ROW) orig_imgid = sqlite3_column_int(stmt, 0); sqlite3_finalize(stmt); offset = dt_collection_image_offset (orig_imgid); DT_DEBUG_SQLITE3_PREPARE_V2(dt_database_get(darktable.db), qin, -1, &stmt, NULL); DT_DEBUG_SQLITE3_BIND_INT(stmt, 1, offset + diff); DT_DEBUG_SQLITE3_BIND_INT(stmt, 2, 1); if(sqlite3_step(stmt) == SQLITE_ROW) { imgid = sqlite3_column_int(stmt, 0); if (orig_imgid == imgid) { //nothing to do sqlite3_finalize(stmt); return; } if (!dev->image_loading) { dt_view_filmstrip_scroll_to_image(darktable.view_manager, imgid, FALSE); } dt_dev_change_image(dev, imgid); } sqlite3_finalize(stmt); } }
void enter(dt_view_t *self) { /* connect to ui pipe finished signal for redraw */ dt_control_signal_connect(darktable.signals, DT_SIGNAL_DEVELOP_UI_PIPE_FINISHED,G_CALLBACK(_darkroom_ui_pipe_finish_signal_callback), (gpointer)self); dt_print(DT_DEBUG_CONTROL, "[run_job+] 11 %f in darkroom mode\n", dt_get_wtime()); dt_develop_t *dev = (dt_develop_t *)self->data; dev->gui_leaving = 0; dev->gui_module = NULL; select_this_image(dev->image_storage.id); DT_CTL_SET_GLOBAL(dev_zoom, DT_ZOOM_FIT); DT_CTL_SET_GLOBAL(dev_zoom_x, 0); DT_CTL_SET_GLOBAL(dev_zoom_y, 0); DT_CTL_SET_GLOBAL(dev_closeup, 0); // take a copy of the image struct for convenience. dt_dev_load_image(darktable.develop, dev->image_storage.id); /* * Add view specific tool buttons */ /* create favorite plugin preset popup tool */ GtkWidget *favorite_presets = dtgtk_button_new(dtgtk_cairo_paint_presets, CPF_STYLE_FLAT|CPF_DO_NOT_USE_BORDER); g_object_set(G_OBJECT(favorite_presets), "tooltip-text", _("quick access to presets of your favorites"), (char *)NULL); g_signal_connect (G_OBJECT (favorite_presets), "clicked", G_CALLBACK (_darkroom_ui_favorite_presets_popupmenu), NULL); dt_view_manager_view_toolbox_add(darktable.view_manager, favorite_presets); /* add IOP modules to plugin list */ /* create quick styles popup menu tool */ GtkWidget *styles = dtgtk_button_new (dtgtk_cairo_paint_styles,CPF_STYLE_FLAT|CPF_DO_NOT_USE_BORDER); g_signal_connect (G_OBJECT (styles), "clicked", G_CALLBACK (_darkroom_ui_apply_style_popupmenu), NULL); g_object_set (G_OBJECT (styles), "tooltip-text", _("quick access for applying any of your styles"), (char *)NULL); dt_view_manager_view_toolbox_add(darktable.view_manager, styles); /* * add IOP modules to plugin list */ // avoid triggering of events before plugin is ready: darktable.gui->reset = 1; char option[1024]; GList *modules = g_list_last(dev->iop); while(modules) { dt_iop_module_t *module = (dt_iop_module_t *)(modules->data); /* initialize gui if iop have one defined */ if (!dt_iop_is_hidden(module)) { module->gui_init(module); dt_iop_reload_defaults(module); /* add module to right panel */ GtkWidget *expander = dt_iop_gui_get_expander(module); dt_ui_container_add_widget(darktable.gui->ui, DT_UI_CONTAINER_PANEL_RIGHT_CENTER, expander); snprintf(option, 1024, "plugins/darkroom/%s/expanded", module->op); dt_iop_gui_set_expanded(module, dt_conf_get_bool(option)); } /* setup key accelerators */ module->accel_closures = NULL; if(module->connect_key_accels) module->connect_key_accels(module); dt_iop_connect_common_accels(module); modules = g_list_previous(modules); } darktable.gui->reset = 0; /* signal that darktable.develop is initialized and ready to be used */ dt_control_signal_raise(darktable.signals,DT_SIGNAL_DEVELOP_INITIALIZE); // synch gui and flag gegl pipe as dirty // this is done here and not in dt_read_history, as it would else be triggered before module->gui_init. dt_dev_pop_history_items(dev, dev->history_end); /* ensure that filmstrip shows current image */ dt_view_filmstrip_scroll_to_image(darktable.view_manager, dev->image_storage.id, FALSE); // switch on groups as they where last time: dt_dev_modulegroups_set(dev, dt_conf_get_int("plugins/darkroom/groups")); // make signals work again: darktable.gui->reset = 0; // get last active plugin: gchar *active_plugin = dt_conf_get_string("plugins/darkroom/active"); if(active_plugin) { GList *modules = dev->iop; while(modules) { dt_iop_module_t *module = (dt_iop_module_t *)(modules->data); if(!strcmp(module->op, active_plugin)) dt_iop_request_focus(module); modules = g_list_next(modules); } g_free(active_plugin); } // image should be there now. float zoom_x, zoom_y; dt_dev_check_zoom_bounds(dev, &zoom_x, &zoom_y, DT_ZOOM_FIT, 0, NULL, NULL); DT_CTL_SET_GLOBAL(dev_zoom_x, zoom_x); DT_CTL_SET_GLOBAL(dev_zoom_y, zoom_y); /* connect signal for filmstrip image activate */ dt_control_signal_connect(darktable.signals, DT_SIGNAL_VIEWMANAGER_FILMSTRIP_ACTIVATE, G_CALLBACK(_view_darkroom_filmstrip_activate_callback), self); // prefetch next few from first selected image on. dt_view_filmstrip_prefetch(); }