32 memset(
out, 0, outsize);
37 char str[400] = { 0 };
40 sscanf(buf,
"%d", &num_rules);
41 while(buf[0] !=
'\0' && buf[0] !=
':') buf++;
42 if(buf[0] ==
':') buf++;
44 for(
int k = 0;
k < num_rules;
k++)
46 const int n = sscanf(buf,
"%d:%d:%399[^$]", &mode, &item, str);
50 if(
k > 0)
switch(mode)
53 c = g_strlcpy(
out, _(
" and "), outsize);
58 c = g_strlcpy(
out, _(
" or "), outsize);
63 c = g_strlcpy(
out, _(
" but not "), outsize);
69 while(str[
i] !=
'\0' && str[
i] !=
'$')
i++;
70 if(str[
i] ==
'$') str[
i] =
'\0';
77 while(buf[0] !=
'$' && buf[0] !=
'\0') buf++;
78 if(buf[0] ==
'$') buf++;
83static gboolean
update_collection_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
86 const int index = GPOINTER_TO_INT(
get_custom_data(GTK_WIDGET(user_data)));
90 snprintf(confname,
sizeof(confname),
"plugins/lighttable/recentcollect/line%1d", index);
93 snprintf(confname,
sizeof(confname),
"plugins/lighttable/recentcollect/pos%1d", index);
107 GtkWidget *widget = GTK_WIDGET(user_data);
114 snprintf(confname,
sizeof(confname),
"plugins/lighttable/recentcollect/line%1d", index);
120 if(collection && collection[0] !=
'\0')
122 char label[2048] = { 0 };
128 GtkWidget *child = gtk_bin_get_child(GTK_BIN(widget));
129 gchar *escaped = g_markup_escape_text(label, -1);
130 gtk_label_set_markup(GTK_LABEL(child), escaped);
146static gboolean
export_files_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
170#ifdef GDK_WINDOWING_QUARTZ
177 gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER_ON_PARENT);
179 gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_CANCEL);
180 gtk_window_set_modal(GTK_WINDOW(dialog),
FALSE);
182 gtk_window_set_title(GTK_WINDOW(dialog), _(
"Ansel - Export images"));
191 GtkWidget *content = gtk_dialog_get_content_area(GTK_DIALOG(dialog));
192 gtk_box_pack_start(GTK_BOX(content), w,
TRUE,
TRUE, 0);
193 gtk_widget_set_visible(w,
TRUE);
194 gtk_widget_show_all(dialog);
217 NULL, GDK_KEY_i, GDK_CONTROL_MASK | GDK_SHIFT_MASK);
220 NULL, GDK_KEY_e, GDK_CONTROL_MASK | GDK_SHIFT_MASK);
230 gchar *item_label = g_strdup_printf(_(
"Most recent collection #%i"),
i);
231 add_sub_sub_menu_entry(menus, parent, lists, item_label, index, GINT_TO_POINTER(
i),
update_collection_callback, NULL, NULL, NULL, 0, 0);
272 add_sub_menu_entry(menus, lists, _(
"Quit"), index, NULL,
GET_ACCEL_WRAPPER(
dt_control_quit), NULL, NULL, NULL, GDK_KEY_q, GDK_CONTROL_MASK);
@ DT_LIB_COLLECT_MODE_AND
const char * dt_collection_name(dt_collection_properties_t prop)
void dt_collection_deserialize(const char *buf)
dt_collection_properties_t
@ DT_COLLECTION_PROP_LAST
@ DT_COLLECTION_PROP_UNDEF
@ DT_COLLECTION_CHANGE_NONE
#define NUM_LAST_COLLECTIONS
const dt_colormatrix_t dt_aligned_pixel_t out
typedef void((*dt_cache_allocate_t)(void *userdata, dt_cache_entry_t *entry))
const char * dt_image_film_roll_name(const char *path)
const char * dt_conf_get_string_const(const char *name)
void dt_control_delete_images()
void dt_control_move_images()
void dt_control_reset_local_copy_images()
void dt_control_set_local_copy_images()
gboolean dt_control_remove_images()
void dt_control_merge_hdr()
void dt_control_copy_images()
#define IS_NULL_PTR(p)
C is way too permissive with !=, == and if(var) checks, which can mean too many things depending on w...
void init_collection_line(gpointer instance, dt_collection_change_t query_change, dt_collection_properties_t changed_property, gpointer imgs, int next, gpointer user_data)
static gboolean export_files_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
static gboolean update_collection_callback(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)
void _close_export_popup(GtkWidget *dialog, gint response_id, gpointer data)
static void pretty_print_collection(const char *buf, char *out, size_t outsize)
void append_file(GtkWidget **menus, GList **lists, const dt_menus_t index)
void dt_capitalize_label(gchar *text)
void dt_gui_add_help_link(GtkWidget *widget, char *link)
GtkWidget * dt_ui_main_window(dt_ui_t *ui)
get the main window widget
#define DT_PIXEL_APPLY_DPI(value)
void dt_lib_gui_set_expanded(dt_lib_module_t *module, gboolean expanded)
GtkWidget * dt_lib_gui_get_expander(dt_lib_module_t *module)
float *const restrict const size_t k
void dt_osx_disallow_fullscreen(GtkWidget *widget)
@ DT_SIGNAL_COLLECTION_CHANGED
This signal is raised when collection changed. To avoid leaking the list, dt_collection_t is connecte...
#define DT_DEBUG_CONTROL_SIGNAL_CONNECT(ctlsig, signal, cb, user_data)
struct _GtkWidget GtkWidget
struct dt_gui_gtk_t * gui
struct dt_control_signal_t * signals
struct dt_gui_gtk_t::@48 export_popup
char * dt_get_help_url(char *name)