1 //======================================================================== 2 // 3 // XPDFViewer.h 4 // 5 // Copyright 2002-2003 Glyph & Cog, LLC 6 // 7 //======================================================================== 8 9 #ifndef XPDFVIEWER_H 10 #define XPDFVIEWER_H 11 12 #include <aconf.h> 13 14 #ifdef USE_GCC_PRAGMAS 15 #pragma interface 16 #endif 17 18 #define Object XtObject 19 #include <Xm/XmAll.h> 20 #undef Object 21 #include "gtypes.h" 22 #include "XPDFCore.h" 23 24 #if (XmVERSION <= 1) && !defined(__sgi) 25 #define DISABLE_OUTLINE 26 #endif 27 28 #if (XmVERSION >= 2 && !defined(LESSTIF_VERSION)) 29 # define USE_COMBO_BOX 1 30 #else 31 # define USE_COMBO_BOX 1 32 #endif 33 34 class GString; 35 class GList; 36 class UnicodeMap; 37 class LinkDest; 38 class XPDFApp; 39 class XPDFViewer; 40 41 //------------------------------------------------------------------------ 42 43 // NB: this must match the defn of zoomMenuBtnInfo in XPDFViewer.cc 44 #define nZoomMenuItems 10 45 46 //------------------------------------------------------------------------ 47 48 struct XPDFViewerCmd { 49 const char *name; 50 int nArgs; 51 GBool requiresDoc; 52 GBool requiresEvent; 53 void (XPDFViewer::*func)(GString *args[], int nArgs, XEvent *event); 54 }; 55 56 //------------------------------------------------------------------------ 57 // XPDFViewer 58 //------------------------------------------------------------------------ 59 60 class XPDFViewer { 61 public: 62 63 XPDFViewer(XPDFApp *appA, GString *fileName, 64 int pageA, GString *destName, GBool fullScreen, 65 GString *ownerPassword, GString *userPassword); 66 XPDFViewer(XPDFApp *appA, PDFDoc *doc, int pageA, 67 GString *destName, GBool fullScreen); isOk()68 GBool isOk() { return ok; } 69 ~XPDFViewer(); 70 71 void open(GString *fileName, int pageA, GString *destName); 72 void clear(); 73 void reloadFile(); 74 75 void execCmd(GString *cmd, XEvent *event); 76 getWindow()77 Widget getWindow() { return win; } 78 79 private: 80 81 //----- load / display 82 GBool loadFile(GString *fileName, GString *ownerPassword = NULL, 83 GString *userPassword = NULL); 84 void displayPage(int pageA, double zoomA, int rotateA, 85 GBool scrollToTop, GBool addToHist); 86 void displayDest(LinkDest *dest, double zoomA, int rotateA, 87 GBool addToHist); 88 void getPageAndDest(int pageA, GString *destName, 89 int *pageOut, LinkDest **destOut); 90 91 //----- hyperlinks / actions 92 void doLink(int wx, int wy, GBool onlyIfNoSelection, GBool newWin); 93 static void actionCbk(void *data, char *action); 94 95 //----- keyboard/mouse input 96 static void keyPressCbk(void *data, KeySym key, Guint modifiers, 97 XEvent *event); 98 static void mouseCbk(void *data, XEvent *event); 99 int getModifiers(Guint modifiers); 100 int getContext(Guint modifiers); 101 102 //----- command functions 103 void cmdAbout(GString *args[], int nArgs, XEvent *event); 104 void cmdCloseOutline(GString *args[], int nArgs, XEvent *event); 105 void cmdCloseWindow(GString *args[], int nArgs, XEvent *event); 106 void cmdCloseWindowOrQuit(GString *args[], int nArgs, XEvent *event); 107 void cmdContinuousMode(GString *args[], int nArgs, XEvent *event); 108 void cmdEndPan(GString *args[], int nArgs, XEvent *event); 109 void cmdEndSelection(GString *args[], int nArgs, XEvent *event); 110 void cmdFind(GString *args[], int nArgs, XEvent *event); 111 void cmdFindNext(GString *args[], int nArgs, XEvent *event); 112 void cmdFocusToDocWin(GString *args[], int nArgs, XEvent *event); 113 void cmdFocusToPageNum(GString *args[], int nArgs, XEvent *event); 114 void cmdFollowLink(GString *args[], int nArgs, XEvent *event); 115 void cmdFollowLinkInNewWin(GString *args[], int nArgs, XEvent *event); 116 void cmdFollowLinkInNewWinNoSel(GString *args[], int nArgs, XEvent *event); 117 void cmdFollowLinkNoSel(GString *args[], int nArgs, XEvent *event); 118 void cmdFullScreenMode(GString *args[], int nArgs, XEvent *event); 119 void cmdGoBackward(GString *args[], int nArgs, XEvent *event); 120 void cmdGoForward(GString *args[], int nArgs, XEvent *event); 121 void cmdGotoDest(GString *args[], int nArgs, XEvent *event); 122 void cmdGotoLastPage(GString *args[], int nArgs, XEvent *event); 123 void cmdGotoLastPageNoScroll(GString *args[], int nArgs, XEvent *event); 124 void cmdGotoPage(GString *args[], int nArgs, XEvent *event); 125 void cmdGotoPageNoScroll(GString *args[], int nArgs, XEvent *event); 126 void cmdNextPage(GString *args[], int nArgs, XEvent *event); 127 void cmdNextPageNoScroll(GString *args[], int nArgs, XEvent *event); 128 void cmdOpen(GString *args[], int nArgs, XEvent *event); 129 void cmdOpenFile(GString *args[], int nArgs, XEvent *event); 130 void cmdOpenFileAtDest(GString *args[], int nArgs, XEvent *event); 131 void cmdOpenFileAtDestInNewWin(GString *args[], int nArgs, XEvent *event); 132 void cmdOpenFileAtPage(GString *args[], int nArgs, XEvent *event); 133 void cmdOpenFileAtPageInNewWin(GString *args[], int nArgs, XEvent *event); 134 void cmdOpenFileInNewWin(GString *args[], int nArgs, XEvent *event); 135 void cmdOpenInNewWin(GString *args[], int nArgs, XEvent *event); 136 void cmdOpenOutline(GString *args[], int nArgs, XEvent *event); 137 void cmdPageDown(GString *args[], int nArgs, XEvent *event); 138 void cmdPageUp(GString *args[], int nArgs, XEvent *event); 139 void cmdPostPopupMenu(GString *args[], int nArgs, XEvent *event); 140 void cmdPrevPage(GString *args[], int nArgs, XEvent *event); 141 void cmdPrevPageNoScroll(GString *args[], int nArgs, XEvent *event); 142 void cmdPrint(GString *args[], int nArgs, XEvent *event); 143 void cmdQuit(GString *args[], int nArgs, XEvent *event); 144 void cmdRaise(GString *args[], int nArgs, XEvent *event); 145 void cmdRedraw(GString *args[], int nArgs, XEvent *event); 146 void cmdReload(GString *args[], int nArgs, XEvent *event); 147 void cmdRotateCCW(GString *args[], int nArgs, XEvent *event); 148 void cmdRotateCW(GString *args[], int nArgs, XEvent *event); 149 void cmdRun(GString *args[], int nArgs, XEvent *event); 150 void cmdScrollDown(GString *args[], int nArgs, XEvent *event); 151 void cmdScrollDownNextPage(GString *args[], int nArgs, XEvent *event); 152 void cmdScrollLeft(GString *args[], int nArgs, XEvent *event); 153 void cmdScrollOutlineDown(GString *args[], int nArgs, XEvent *event); 154 void cmdScrollOutlineUp(GString *args[], int nArgs, XEvent *event); 155 void cmdScrollRight(GString *args[], int nArgs, XEvent *event); 156 void cmdScrollToBottomEdge(GString *args[], int nArgs, XEvent *event); 157 void cmdScrollToBottomRight(GString *args[], int nArgs, XEvent *event); 158 void cmdScrollToLeftEdge(GString *args[], int nArgs, XEvent *event); 159 void cmdScrollToRightEdge(GString *args[], int nArgs, XEvent *event); 160 void cmdScrollToTopEdge(GString *args[], int nArgs, XEvent *event); 161 void cmdScrollToTopLeft(GString *args[], int nArgs, XEvent *event); 162 void cmdScrollUp(GString *args[], int nArgs, XEvent *event); 163 void cmdScrollUpPrevPage(GString *args[], int nArgs, XEvent *event); 164 void cmdSetSelection(GString *args[], int nArgs, XEvent *event); 165 void cmdSinglePageMode(GString *args[], int nArgs, XEvent *event); 166 void cmdStartPan(GString *args[], int nArgs, XEvent *event); 167 void cmdStartSelection(GString *args[], int nArgs, XEvent *event); 168 void cmdToggleContinuousMode(GString *args[], int nArgs, XEvent *event); 169 void cmdToggleFullScreenMode(GString *args[], int nArgs, XEvent *event); 170 void cmdToggleOutline(GString *args[], int nArgs, XEvent *event); 171 void cmdWindowMode(GString *args[], int nArgs, XEvent *event); 172 void cmdZoomFitPage(GString *args[], int nArgs, XEvent *event); 173 void cmdZoomFitWidth(GString *args[], int nArgs, XEvent *event); 174 void cmdZoomIn(GString *args[], int nArgs, XEvent *event); 175 void cmdZoomOut(GString *args[], int nArgs, XEvent *event); 176 void cmdZoomPercent(GString *args[], int nArgs, XEvent *event); 177 void cmdZoomToSelection(GString *args[], int nArgs, XEvent *event); 178 179 //----- GUI code: main window 180 void initWindow(GBool fullScreen); 181 void initToolbar(Widget parent); 182 #ifndef DISABLE_OUTLINE 183 void initPanedWin(Widget parent); 184 #endif 185 void initCore(Widget parent, GBool fullScreen); 186 void initPopupMenu(); 187 void addToolTip(Widget widget, char *text); 188 void mapWindow(); 189 void closeWindow(); 190 int getZoomIdx(); 191 void setZoomIdx(int idx); 192 void setZoomVal(double z); 193 static void prevPageCbk(Widget widget, XtPointer ptr, 194 XtPointer callData); 195 static void prevTenPageCbk(Widget widget, XtPointer ptr, 196 XtPointer callData); 197 static void nextPageCbk(Widget widget, XtPointer ptr, 198 XtPointer callData); 199 static void nextTenPageCbk(Widget widget, XtPointer ptr, 200 XtPointer callData); 201 static void backCbk(Widget widget, XtPointer ptr, 202 XtPointer callData); 203 static void forwardCbk(Widget widget, XtPointer ptr, 204 XtPointer callData); 205 #if USE_COMBO_BOX 206 static void zoomComboBoxCbk(Widget widget, XtPointer ptr, 207 XtPointer callData); 208 #else 209 static void zoomMenuCbk(Widget widget, XtPointer ptr, 210 XtPointer callData); 211 #endif 212 static void findCbk(Widget widget, XtPointer ptr, 213 XtPointer callData); 214 static void printCbk(Widget widget, XtPointer ptr, 215 XtPointer callData); 216 static void aboutCbk(Widget widget, XtPointer ptr, 217 XtPointer callData); 218 static void quitCbk(Widget widget, XtPointer ptr, 219 XtPointer callData); 220 static void openCbk(Widget widget, XtPointer ptr, 221 XtPointer callData); 222 static void openInNewWindowCbk(Widget widget, XtPointer ptr, 223 XtPointer callData); 224 static void reloadCbk(Widget widget, XtPointer ptr, 225 XtPointer callData); 226 static void saveAsCbk(Widget widget, XtPointer ptr, 227 XtPointer callData); 228 static void continuousModeToggleCbk(Widget widget, XtPointer ptr, 229 XtPointer callData); 230 static void fullScreenToggleCbk(Widget widget, XtPointer ptr, 231 XtPointer callData); 232 static void rotateCCWCbk(Widget widget, XtPointer ptr, 233 XtPointer callData); 234 static void rotateCWCbk(Widget widget, XtPointer ptr, 235 XtPointer callData); 236 static void zoomToSelectionCbk(Widget widget, XtPointer ptr, 237 XtPointer callData); 238 static void closeCbk(Widget widget, XtPointer ptr, 239 XtPointer callData); 240 static void closeMsgCbk(Widget widget, XtPointer ptr, 241 XtPointer callData); 242 static void pageNumCbk(Widget widget, XtPointer ptr, 243 XtPointer callData); 244 static void updateCbk(void *data, GString *fileName, 245 int pageNum, int numPages, const char *linkString); 246 247 //----- GUI code: outline 248 #ifndef DISABLE_OUTLINE 249 void setupOutline(); 250 void setupOutlineItems(GList *items, Widget parent, UnicodeMap *uMap); 251 static void outlineSelectCbk(Widget widget, XtPointer ptr, 252 XtPointer callData); 253 #endif 254 255 //----- GUI code: "about" dialog 256 void initAboutDialog(); 257 258 //----- GUI code: "open" dialog 259 void initOpenDialog(); 260 void mapOpenDialog(GBool openInNewWindowA); 261 static void openOkCbk(Widget widget, XtPointer ptr, 262 XtPointer callData); 263 264 //----- GUI code: "find" dialog 265 void initFindDialog(); 266 static void findFindCbk(Widget widget, XtPointer ptr, 267 XtPointer callData); 268 void mapFindDialog(); 269 void doFind(GBool next); 270 static void findCloseCbk(Widget widget, XtPointer ptr, 271 XtPointer callData); 272 273 //----- GUI code: "save as" dialog 274 void initSaveAsDialog(); 275 void mapSaveAsDialog(); 276 static void saveAsOkCbk(Widget widget, XtPointer ptr, 277 XtPointer callData); 278 279 //----- GUI code: "print" dialog 280 void initPrintDialog(); 281 void setupPrintDialog(); 282 static void printWithCmdBtnCbk(Widget widget, XtPointer ptr, 283 XtPointer callData); 284 static void printToFileBtnCbk(Widget widget, XtPointer ptr, 285 XtPointer callData); 286 static void printPrintCbk(Widget widget, XtPointer ptr, 287 XtPointer callData); 288 289 //----- Motif support 290 XmFontList createFontList(char *xlfd); 291 292 static XPDFViewerCmd cmdTab[]; 293 294 XPDFApp *app; 295 GBool ok; 296 297 Display *display; 298 int screenNum; 299 Widget win; // top-level window 300 Widget form; 301 Widget panedWin; 302 #ifndef DISABLE_OUTLINE 303 Widget outlineScroll; 304 Widget outlineTree; 305 Widget *outlineLabels; 306 int outlineLabelsLength; 307 int outlineLabelsSize; 308 Dimension outlinePaneWidth; 309 #endif 310 XPDFCore *core; 311 Widget toolBar; 312 Widget backBtn; 313 Widget prevTenPageBtn; 314 Widget prevPageBtn; 315 Widget nextPageBtn; 316 Widget nextTenPageBtn; 317 Widget forwardBtn; 318 Widget pageNumText; 319 Widget pageCountLabel; 320 #if USE_COMBO_BOX 321 Widget zoomComboBox; 322 #else 323 Widget zoomMenu; 324 Widget zoomMenuBtns[nZoomMenuItems]; 325 #endif 326 Widget zoomWidget; 327 Widget findBtn; 328 Widget printBtn; 329 Widget aboutBtn; 330 Widget linkLabel; 331 Widget quitBtn; 332 Widget popupMenu; 333 334 Widget aboutDialog; 335 XmFontList aboutBigFont, aboutVersionFont, aboutFixedFont; 336 337 Widget openDialog; 338 GBool openInNewWindow; 339 340 Widget findDialog; 341 Widget findText; 342 Widget findBackwardToggle; 343 Widget findCaseSensitiveToggle; 344 Widget findWholeWordToggle; 345 346 Widget saveAsDialog; 347 348 Widget printDialog; 349 Widget printWithCmdBtn; 350 Widget printToFileBtn; 351 Widget printCmdText; 352 Widget printFileText; 353 Widget printFirstPage; 354 Widget printLastPage; 355 }; 356 357 #endif 358