/* Copyright (C) 1999 Southern Gold Development * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "intl.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef HAVE_SGC #include #else #define MAX_BUFF 1024 #endif /* HAVE_SGC */ #ifdef IS_PIC_USER #include "icons/back.xpm" #endif /* IS_PIC_USER */ #define ZOOMFACTOR 1.09544511501 #define MAX_DIR_STACK 64 #define MATCH_REGEX "\\.jpg|\\.jpeg|\\.png|\\.gif|\\.ps|\\.bmp|\\.xpm|\\.tif|\\.tiff|\\.ppm" typedef struct _sgview sgview; typedef struct _sgtype sgtype; typedef struct _viewer viewer; typedef struct _config config; typedef struct _ren ren; typedef struct _msgbuffer nmsg; struct _sgview { /* Browser window widgets */ GtkWidget *main; GtkWidget *mscr; GtkWidget *clist; GtkWidget *dirlabel; GtkWidget *slideBtn; GtkWidget *preview; GtkWidget *imgPrev; GtkWidget *bMenu; GtkWidget *browFix; gint sigBKey; gint sigBMouse; gint currFocus; /* Viewer window widgets */ GtkWidget *setrsp; GtkWidget *disp; GtkWidget *scr; GtkWidget *draw; GtkObject *adj; GtkWidget *vMenu; GdkImlibImage *currPic; GdkImlibImage *backPic; gint sigSlide; gint sigConf; gint sigKey; gint currX; gint currY; /* General stuff */ GList *extTools; regex_t *isImg; regex_t *isExt; gchar *currPath; gshort upDir[MAX_DIR_STACK]; gshort depth; GtkWidget *slideList; GList *slide; GList *currSlide; guint timeout; gint slideTime; guchar statCh; gfloat defGamma; GtkTooltips *tips; gchar *defBackColor; gfloat factor; gchar matchPath[MAX_DIR_STACK]; gshort matchDepth; guint matchTimer; #ifdef HAVE_WORKING_MSG gint dqueue; guint msgTimer; #endif /* HAVE_WORKING_MSG */ }; struct _sgtype { gchar *app; gchar *regex; }; struct _config { sgview *view; GtkWidget *rsp; GtkWidget *timeOut; GtkWidget *hiddenFiles; GtkWidget *persistZoom; GtkWidget *defaultGamma; GtkWidget *backColor; GtkWidget *colDiag; GSList *defaultRender; }; struct _ren { sgview *view; GtkWidget *rsp; GtkWidget *ent; GtkWidget *browser; }; #ifdef USE_DND static GtkTargetEntry target_table[] = { {"STRING", 0, 0}, {"text/plain", 0, 0}, {"text/uri-list", 0, 0}, {"application/x-rootwin-drop", 0, 0}}; #endif /* USE_DND */ typedef enum { GVIEW_UP_STEP, GVIEW_DOWN_STEP, GVIEW_UP_PAGE, GVIEW_DOWN_PAGE } GViewMoveType; #ifdef HAVE_WORKING_MSG struct _msgbuffer { long mtype; gchar mtext[MAX_BUFF]; }; #endif /* HAVE_WORKING_MSG */ typedef void (*sgImageSetFunc) (GdkImlibImage *, GdkImlibColorModifier *); /* Cross file function prototypes */ /* General operations and tools */ gchar *getLine(FILE *); void sortRel(gchar **); void handleFile(sgview *, gchar *); gint ipcIncoming(gpointer); gint isImage(const sgview *, const gchar *); gint isExtern(const sgview *, const gchar *); gint matchType(const gchar *, const gchar *); void killDiag(GtkWidget *, gpointer); void gloaddir(sgview *); void loadPic(sgview *, gchar *); void popupPic(sgview *, GdkEventButton *); void createWin(sgview *); void getExternal(sgview *); void runExtern(sgview *, const gchar *); void genRegexComp(sgview *); void queueSlide(sgview *, const gchar *); void moveSlide(sgview *, GtkCList *, gint, gint); void loadInfo(sgview *, const gchar *); void getGVComment(sgview *, const gchar *); void setGVComment(sgview *, const gchar *); void doMatchFile(sgview *, guint); #ifdef HAVE_NET void netload(sgview *, const gchar *); #endif /* HAVE_NET */ void gAddMenu(sgview *, GtkMenu *, gchar *, GtkSignalFunc); void gAddSubMenu(sgview *, GtkMenu *, GtkWidget *, gchar *); void gAddToolbar(sgview *, GtkToolbar *, char **, gchar *, gchar *, GtkSignalFunc); GtkWidget *gAddButtonFix(sgview *, gpointer, GtkFixed *, gchar *, gchar *, GtkSignalFunc, gint, gint, gint, gint); GtkWidget *gAddButtonBox(sgview *, gpointer, GtkBox *, gchar *, gchar *, GtkSignalFunc); /* Viewer window */ void configWin(GtkWidget *, gpointer); void setBack(GtkWidget *, gpointer); void setDialog(GtkWidget *, gpointer); void redDialog(GtkWidget *, gpointer); void blueDialog(GtkWidget *, gpointer); void greenDialog(GtkWidget *, gpointer); void gammaSet(GtkWidget *, gpointer); void saveImageDialog(GtkWidget *, gpointer); gint doDragPic(GtkWidget *, GdkEventMotion *, gpointer); gint startDragPic(GtkWidget *, GdkEventButton *, gpointer); gint stopDragPic(GtkWidget *, GdkEventButton *, gpointer); /* Drag 'n' Drop */ void dropDragFile(GtkWidget *, GdkDragContext *, gint, gint, GtkSelectionData *, guint, guint, gpointer); void dropDragSlide(GtkWidget *, GdkDragContext *, gint, gint, GtkSelectionData *, guint, guint, gpointer); void startDragFile(GtkWidget *, GdkDragContext *, GtkSelectionData *, guint, guint, gpointer); void startDragSlide(GtkWidget *, GdkDragContext *, GtkSelectionData *, guint, guint, gpointer); /* Browser window */ void enqueueSlide(GtkWidget *, gpointer); void startSlide(GtkWidget *, gpointer); void stopSlide(GtkWidget *, gpointer); void pauseSlide(GtkWidget *, gpointer); void resumeSlide(GtkWidget *, gpointer); void clearSlide(GtkWidget *, gpointer); void viewSlide(GtkWidget *, gpointer); void navImage(sgview *, gboolean); void refreshSlideList(sgview *); void menuOpenURL(GtkWidget *, gpointer); void menuDelete(GtkWidget *, gpointer); void menuRename(GtkWidget *, gpointer);