Mercurial > geeqie
view src/typedefs.h @ 1651:8966e72ae99a
ufraw-batch script
added a more complicated script that demonstrates advanced
features of external editors:
- create a jpeg + ufraw id file for each raw file
- update the jpeg if the id file was modified
author | nadvornik |
---|---|
date | Thu, 18 Jun 2009 20:46:33 +0000 |
parents | 66bf394d162a |
children | da8afd03152f |
line wrap: on
line source
/* * Geeqie * (C) 2006 John Ellis * Copyright (C) 2008 - 2009 The Geeqie Team * * Author: John Ellis * * This software is released under the GNU General Public License (GNU GPL). * Please read the included file COPYING for more information. * This software comes with no warranty of any kind, use at your own risk! */ #ifndef TYPEDEFS_H #define TYPEDEFS_H typedef enum { ZOOM_RESET_ORIGINAL = 0, ZOOM_RESET_FIT_WINDOW = 1, ZOOM_RESET_NONE = 2 } ZoomMode; typedef enum { MOUSE_BUTTON_LEFT = 1, MOUSE_BUTTON_MIDDLE = 2, MOUSE_BUTTON_RIGHT = 3, MOUSE_BUTTON_WHEEL_UP = 4, MOUSE_BUTTON_WHEEL_DOWN = 5 } MouseButton; typedef enum { DIRVIEW_LIST, DIRVIEW_TREE } DirViewType; typedef enum { FILEVIEW_LIST, FILEVIEW_ICON } FileViewType; #define CMD_COPY "geeqie-copy-command.desktop" #define CMD_MOVE "geeqie-move-command.desktop" #define CMD_RENAME "geeqie-rename-command.desktop" #define CMD_DELETE "geeqie-delete-command.desktop" #define CMD_FOLDER "geeqie-folder-command.desktop" typedef enum { SORT_NONE, SORT_NAME, SORT_SIZE, SORT_TIME, SORT_PATH, SORT_NUMBER } SortType; typedef enum { ALTER_NONE, /* do nothing */ ALTER_ROTATE_90, ALTER_ROTATE_90_CC, /* counterclockwise */ ALTER_ROTATE_180, ALTER_MIRROR, ALTER_FLIP, } AlterType; typedef enum { LAYOUT_HIDE = 0, LAYOUT_LEFT = 1 << 0, LAYOUT_RIGHT = 1 << 1, LAYOUT_TOP = 1 << 2, LAYOUT_BOTTOM = 1 << 3 } LayoutLocation; typedef enum { IMAGE_STATE_NONE = 0, IMAGE_STATE_IMAGE = 1 << 0, IMAGE_STATE_LOADING = 1 << 1, IMAGE_STATE_ERROR = 1 << 2, IMAGE_STATE_COLOR_ADJ = 1 << 3, IMAGE_STATE_ROTATE_AUTO = 1 << 4, IMAGE_STATE_ROTATE_USER = 1 << 5, IMAGE_STATE_DELAY_FLIP = 1 << 6 } ImageState; typedef enum { SPLIT_NONE = 0, SPLIT_VERT, SPLIT_HOR, SPLIT_QUAD, } ImageSplitMode; typedef enum { FILEDATA_CHANGE_DELETE, FILEDATA_CHANGE_MOVE, FILEDATA_CHANGE_RENAME, FILEDATA_CHANGE_COPY, FILEDATA_CHANGE_UNSPECIFIED, FILEDATA_CHANGE_WRITE_METADATA } FileDataChangeType; typedef enum { MTS_MODE_MINUS, MTS_MODE_SET, MTS_MODE_OR, MTS_MODE_AND } MarkToSelectionMode; typedef enum { STM_MODE_RESET, STM_MODE_SET, STM_MODE_TOGGLE } SelectionToMarkMode; typedef enum { FORMAT_CLASS_UNKNOWN, FORMAT_CLASS_IMAGE, FORMAT_CLASS_RAWIMAGE, FORMAT_CLASS_META, FILE_FORMAT_CLASSES } FileFormatClass; typedef enum { SS_ERR_NONE = 0, SS_ERR_DISABLED, /**< secsave is disabled. */ SS_ERR_OUT_OF_MEM, /**< memory allocation failure */ /* see err field in SecureSaveInfo */ SS_ERR_OPEN_READ, SS_ERR_OPEN_WRITE, SS_ERR_STAT, SS_ERR_ACCESS, SS_ERR_MKSTEMP, SS_ERR_RENAME, SS_ERR_OTHER, } SecureSaveErrno; typedef enum { NOTIFY_PRIORITY_HIGH = 0, NOTIFY_PRIORITY_MEDIUM, NOTIFY_PRIORITY_LOW } NotifyPriority; typedef enum { NOTIFY_MARKS = 1 << 1, /* changed marks */ NOTIFY_PIXBUF = 1 << 2, /* image was read into fd->pixbuf */ NOTIFY_HISTMAP = 1 << 3, /* histmap was read into fd->histmap */ NOTIFY_ORIENTATION = 1 << 4, /* image was rotated */ NOTIFY_METADATA = 1 << 5, /* changed image metadata, not yet written */ NOTIFY_GROUPING = 1 << 6, /* change in fd->sidecar_files or fd->parent */ NOTIFY_REREAD = 1 << 7, /* changed file size, date, etc., file name remains unchanged */ NOTIFY_CHANGE = 1 << 8 /* generic change described by fd->change */ } NotifyType; typedef enum { CHANGE_OK = 0, CHANGE_WARN_DEST_EXISTS = 1 << 0, CHANGE_WARN_NO_WRITE_PERM = 1 << 1, CHANGE_WARN_SAME = 1 << 2, CHANGE_WARN_CHANGED_EXT = 1 << 3, CHANGE_ERROR_MASK = (~0) << 4, /* the values below are fatal errors */ CHANGE_NO_READ_PERM = 1 << 4, CHANGE_NO_WRITE_PERM_DIR = 1 << 5, CHANGE_NO_DEST_DIR = 1 << 6, CHANGE_NO_WRITE_PERM_DEST_DIR = 1 << 7, CHANGE_NO_WRITE_PERM_DEST = 1 << 8, CHANGE_DEST_EXISTS = 1 << 9, CHANGE_NO_SRC = 1 << 10, CHANGE_GENERIC_ERROR = 1 << 16 } ChangeError; typedef enum { METADATA_PLAIN = 0, /* format that can be edited and written back */ METADATA_FORMATTED = 1 /* for display only */ } MetadataFormat; typedef enum { STARTUP_PATH_CURRENT = 0, STARTUP_PATH_LAST, STARTUP_PATH_HOME, } StartUpPath; typedef enum { TOOLBAR_MAIN, TOOLBAR_STATUS, TOOLBAR_COUNT } ToolbarType; #define MAX_SPLIT_IMAGES 4 typedef struct _ImageLoader ImageLoader; typedef struct _ThumbLoader ThumbLoader; typedef struct _CollectInfo CollectInfo; typedef struct _CollectionData CollectionData; typedef struct _CollectTable CollectTable; typedef struct _CollectWindow CollectWindow; typedef struct _ImageWindow ImageWindow; typedef struct _FileData FileData; typedef struct _FileDataChangeInfo FileDataChangeInfo; typedef struct _LayoutWindow LayoutWindow; typedef struct _LayoutOptions LayoutOptions; typedef struct _ViewDir ViewDir; typedef struct _ViewDirInfoList ViewDirInfoList; typedef struct _ViewDirInfoTree ViewDirInfoTree; typedef struct _ViewFile ViewFile; typedef struct _ViewFileInfoList ViewFileInfoList; typedef struct _ViewFileInfoIcon ViewFileInfoIcon; typedef struct _SlideShowData SlideShowData; typedef struct _FullScreenData FullScreenData; typedef struct _PixmapFolders PixmapFolders; typedef struct _Histogram Histogram; typedef struct _HistMap HistMap; typedef struct _SecureSaveInfo SecureSaveInfo; typedef struct _ExifData ExifData; typedef struct _EditorDescription EditorDescription; typedef struct _CommandLine CommandLine; struct _Histogram { gint histogram_channel; /* drawing mode for histogram */ gint histogram_mode; /* logarithmical or not */ guint vgrid; /* number of vertical divisions, 0 for none */ guint hgrid; /* number of horizontal divisions, 0 for none */ struct { int R; /* red */ int G; /* green */ int B; /* blue */ int A; /* alpha */ } grid_color; /* grid color */ }; struct _ImageLoader; typedef void (* ThumbLoaderFunc)(ThumbLoader *tl, gpointer data); typedef void (* FileUtilDoneFunc)(gboolean success, const gchar *done_path, gpointer data); struct _ThumbLoader { gboolean standard_loader; ImageLoader *il; FileData *fd; /* fd->pixbuf contains final (scaled) image when done */ gboolean cache_enable; gboolean cache_hit; gdouble percent_done; gint max_w; gint max_h; ThumbLoaderFunc func_done; ThumbLoaderFunc func_error; ThumbLoaderFunc func_progress; gpointer data; guint idle_done_id; /* event source id */ }; struct _CollectInfo { FileData *fd; GdkPixbuf *pixbuf; guint flag_mask; }; struct _CollectionData { gchar *path; gchar *name; GList *list; SortType sort_method; ThumbLoader *thumb_loader; CollectInfo *thumb_info; void (*info_updated_func)(CollectionData *, CollectInfo *, gpointer); gpointer info_updated_data; gint ref; /* geometry */ gint window_read; gint window_x; gint window_y; gint window_w; gint window_h; /* contents changed since save flag */ gboolean changed; GHashTable *existence; }; struct _CollectTable { GtkWidget *scrolled; GtkWidget *listview; gint columns; gint rows; CollectionData *cd; GList *selection; CollectInfo *prev_selection; CollectInfo *click_info; GtkWidget *tip_window; guint tip_delay_id; /* event source id */ CollectInfo *tip_info; GdkWindow *marker_window; CollectInfo *marker_info; GtkWidget *status_label; GtkWidget *extra_label; gint focus_row; gint focus_column; CollectInfo *focus_info; GtkWidget *popup; CollectInfo *drop_info; GList *drop_list; guint sync_idle_id; /* event source id */ guint drop_idle_id; /* event source id */ gboolean show_text; /* file list for edit menu */ GList *editmenu_fd_list; }; struct _CollectWindow { GtkWidget *window; CollectTable *table; GtkWidget *status_box; GList *list; GtkWidget *close_dialog; CollectionData *cd; }; typedef gint (* ImageTileRequestFunc)(ImageWindow *imd, gint x, gint y, gint width, gint height, GdkPixbuf *pixbuf, gpointer); typedef void (* ImageTileDisposeFunc)(ImageWindow *imd, gint x, gint y, gint width, gint height, GdkPixbuf *pixbuf, gpointer); struct _ImageWindow { GtkWidget *widget; /* use this to add it and show it */ GtkWidget *pr; GtkWidget *frame; FileData *image_fd; gboolean unknown; /* failed to load image */ ImageLoader *il; /* FIXME - image loader should probably go to FileData, but it must first support sending callbacks to multiple ImageWindows in parallel */ gint has_frame; /* not boolean, see image_new() */ /* top level (not necessarily parent) window */ gboolean top_window_sync; /* resize top_window when image dimensions change */ GtkWidget *top_window; /* window that gets title, and window to resize when 'fitting' */ gchar *title; /* window title to display left of file name */ gchar *title_right; /* window title to display right of file name */ gboolean title_show_zoom; /* option to include zoom in window title */ gboolean completed; ImageState state; /* mask of IMAGE_STATE_* flags about current image */ void (*func_update)(ImageWindow *imd, gpointer data); void (*func_complete)(ImageWindow *imd, gint preload, gpointer data); void (*func_state)(ImageWindow *imd, ImageState state, gpointer data); ImageTileRequestFunc func_tile_request; ImageTileDisposeFunc func_tile_dispose; gpointer data_update; gpointer data_complete; gpointer data_state; gpointer data_tile; /* button, scroll functions */ void (*func_button)(ImageWindow *, GdkEventButton *event, gpointer); void (*func_drag)(ImageWindow *, GdkEventButton *event, gdouble dx, gdouble dy, gpointer); void (*func_scroll)(ImageWindow *, GdkEventScroll *event, gpointer); void (*func_focus_in)(ImageWindow *, gpointer); gpointer data_button; gpointer data_drag; gpointer data_scroll; gpointer data_focus_in; /* scroll notification (for scroll bar implementation) */ void (*func_scroll_notify)(ImageWindow *, gint x, gint y, gint width, gint height, gpointer); gpointer data_scroll_notify; /* collection info */ CollectionData *collection; CollectInfo *collection_info; /* color profiles */ gboolean color_profile_enable; gint color_profile_input; gboolean color_profile_use_image; gint color_profile_from_image; gpointer cm; AlterType delay_alter_type; FileData *read_ahead_fd; ImageLoader *read_ahead_il; gint prev_color_row; gboolean auto_refresh; gboolean delay_flip; gint orientation; gboolean desaturate; gboolean overlay_show_zoom; /* set to true if overlay is showing zoom ratio */ }; #define FILEDATA_MARKS_SIZE 6 struct _FileDataChangeInfo { FileDataChangeType type; gchar *source; gchar *dest; gint error; gboolean regroup_when_finished; }; struct _FileData { gint magick; gint type; gchar *original_path; /* key to file_data_pool hash table */ gchar *path; const gchar *name; const gchar *extension; gchar *collate_key_name; gchar *collate_key_name_nocase; gint64 size; time_t date; mode_t mode; /* this is needed at least for notification in view_dir because it is preserved after the file/directory is deleted */ guint marks; /* each bit represents one mark */ guint valid_marks; /* zero bit means that the corresponding mark needs to be reread */ GList *sidecar_files; FileData *parent; /* parent file if this is a sidecar file, NULL otherwise */ FileDataChangeInfo *change; /* for rename, move ... */ GdkPixbuf *thumb_pixbuf; GdkPixbuf *pixbuf; /* full-size image, only complete images, NULL during loading all FileData with non-NULL pixbuf are referenced by image_cache */ HistMap *histmap; gint ref; gint version; /* increased when any field in this structure is changed */ gboolean disable_grouping; gint user_orientation; gint exif_orientation; ExifData *exif; GHashTable *modified_xmp; // hash table which contains unwritten xmp metadata in format: key->list of string values }; struct _LayoutOptions { gchar *id; gchar *order; gint style; DirViewType dir_view_type; FileViewType file_view_type; gboolean show_thumbnails; gboolean show_marks; gboolean show_directory_date; gboolean show_info_pixel; struct { gint w; gint h; gint x; gint y; gboolean maximized; gint hdivider_pos; gint vdivider_pos; } main_window; struct { gint w; gint h; gint x; gint y; gint vdivider_pos; } float_window; struct { gint w; gint h; } properties_window; struct { guint state; gint histogram_channel; gint histogram_mode; } image_overlay; gboolean tools_float; gboolean tools_hidden; gboolean toolbar_hidden; gchar *home_path; gchar *last_path; StartUpPath startup_path; gboolean exit_on_close; }; struct _LayoutWindow { LayoutOptions options; FileData *dir_fd; /* base */ GtkWidget *window; GtkWidget *main_box; GtkWidget *group_box; GtkWidget *h_pane; GtkWidget *v_pane; /* menus, path selector */ GtkActionGroup *action_group; GtkActionGroup *action_group_editors; guint ui_editors_id; GtkUIManager *ui_manager; guint toolbar_merge_id[TOOLBAR_COUNT]; GList *toolbar_actions[TOOLBAR_COUNT]; GtkWidget *path_entry; /* image */ LayoutLocation image_location; ImageWindow *image; ImageWindow *split_images[MAX_SPLIT_IMAGES]; ImageSplitMode split_mode; gint active_split_image; GtkWidget *split_image_widget; GtkSizeGroup *split_image_sizegroup; /* tools window (float) */ GtkWidget *tools; GtkWidget *tools_pane; // gint tools_float; // gint tools_hidden; GtkWidget *menu_bar; /* referenced by lw, exist during whole lw lifetime */ /* toolbar */ GtkWidget *toolbar[TOOLBAR_COUNT]; /* referenced by lw, exist during whole lw lifetime */ // gint toolbar_hidden; // GtkWidget *thumb_button; // gint thumbs_enabled; // gint marks_enabled; GtkWidget *back_button; /* dir view */ LayoutLocation dir_location; ViewDir *vd; GtkWidget *dir_view; // DirViewType dir_view_type; /* file view */ LayoutLocation file_location; ViewFile *vf; // FileViewType file_view_type; GtkWidget *file_view; SortType sort_method; gboolean sort_ascend; /* status bar */ GtkWidget *info_box; GtkWidget *info_progress_bar; GtkWidget *info_sort; GtkWidget *info_status; GtkWidget *info_details; GtkWidget *info_zoom; GtkWidget *info_pixel; /* slide show */ SlideShowData *slideshow; /* full screen */ FullScreenData *full_screen; /* dividers */ // gint div_h; // gint div_v; // gint div_float; /* misc */ GtkWidget *utility_box; /* referenced by lw, exist during whole lw lifetime */ GtkWidget *utility_paned; /* between image and bar */ GtkWidget *bar_sort; GtkWidget *bar; // gint bar_sort_enabled; // gint bar_enabled; // gint bar_width; GtkWidget *exif_window; /* file list for edit menu */ GList *editmenu_fd_list; }; struct _ViewDir { DirViewType type; gpointer info; GtkWidget *widget; GtkWidget *view; FileData *dir_fd; FileData *click_fd; FileData *drop_fd; GList *drop_list; guint drop_scroll_id; /* event source id */ /* func list */ void (*select_func)(ViewDir *vd, FileData *fd, gpointer data); gpointer select_data; void (*dnd_drop_update_func)(ViewDir *vd); void (*dnd_drop_leave_func)(ViewDir *vd); LayoutWindow *layout; GtkWidget *popup; PixmapFolders *pf; }; struct _ViewDirInfoList { GList *list; }; struct _ViewDirInfoTree { guint drop_expand_id; /* event source id */ gint busy_ref; }; struct _ViewFile { FileViewType type; gpointer info; GtkWidget *widget; GtkWidget *listview; GtkWidget *scrolled; GtkWidget *filter; GtkWidget *filter_check[FILEDATA_MARKS_SIZE]; FileData *dir_fd; GList *list; SortType sort_method; gboolean sort_ascend; /* func list */ void (*func_thumb_status)(ViewFile *vf, gdouble val, const gchar *text, gpointer data); gpointer data_thumb_status; void (*func_status)(ViewFile *vf, gpointer data); gpointer data_status; LayoutWindow *layout; GtkWidget *popup; /* thumbs updates*/ gboolean thumbs_running; ThumbLoader *thumbs_loader; FileData *thumbs_filedata; /* marks */ gboolean marks_enabled; gint active_mark; gint clicked_mark; /* refresh */ guint refresh_idle_id; /* event source id */ /* file list for edit menu */ GList *editmenu_fd_list; }; struct _ViewFileInfoList { FileData *click_fd; FileData *select_fd; gboolean thumbs_enabled; guint select_idle_id; /* event source id */ }; struct _IconData; struct _ViewFileInfoIcon { /* table stuff */ gint columns; gint rows; GList *selection; struct _IconData *prev_selection; GtkWidget *tip_window; guint tip_delay_id; /* event source id */ struct _IconData *tip_id; struct _IconData *click_id; struct _IconData *focus_id; gint focus_row; gint focus_column; gboolean show_text; }; struct _SlideShowData { LayoutWindow *lw; /* use this window to display the slideshow */ ImageWindow *imd; /* use this window only if lw is not available, FIXME: it is probably required only by img-view.c and should be dropped with it */ GList *filelist; CollectionData *cd; FileData *dir_fd; GList *list; GList *list_done; FileData *slide_fd; guint slide_count; guint timeout_id; /* event source id */ gboolean from_selection; void (*stop_func)(SlideShowData *, gpointer); gpointer stop_data; gboolean paused; }; struct _FullScreenData { GtkWidget *window; ImageWindow *imd; GtkWidget *normal_window; ImageWindow *normal_imd; guint hide_mouse_id; /* event source id */ guint busy_mouse_id; /* event source id */ gint cursor_state; guint saver_block_id; /* event source id */ void (*stop_func)(FullScreenData *, gpointer); gpointer stop_data; }; struct _PixmapFolders { GdkPixbuf *close; GdkPixbuf *open; GdkPixbuf *deny; GdkPixbuf *parent; }; struct _SecureSaveInfo { FILE *fp; /**< file stream pointer */ gchar *file_name; /**< final file name */ gchar *tmp_file_name; /**< temporary file name */ gint err; /**< set to non-zero value in case of error */ gboolean secure_save; /**< use secure save for this file, internal use only */ gboolean preserve_perms; /**< whether to preserve perms, TRUE by default */ gboolean preserve_mtime; /**< whether to preserve mtime, FALSE by default */ gboolean unlink_on_error; /**< whether to remove temporary file on save failure, TRUE by default */ }; struct _CommandLine { int argc; gchar **argv; gboolean startup_blank; gboolean startup_full_screen; gboolean startup_in_slideshow; gboolean startup_command_line_collection; gboolean tools_hide; gboolean tools_show; gchar *path; gchar *file; GList *cmd_list; GList *collection_list; gchar *geometry; }; #endif /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */