diff options
Diffstat (limited to 'filters/kword/pdf/xpdf/xpdf/XPDFViewer.cc')
-rw-r--r-- | filters/kword/pdf/xpdf/xpdf/XPDFViewer.cc | 2318 |
1 files changed, 0 insertions, 2318 deletions
diff --git a/filters/kword/pdf/xpdf/xpdf/XPDFViewer.cc b/filters/kword/pdf/xpdf/xpdf/XPDFViewer.cc deleted file mode 100644 index a8c8f8f0f..000000000 --- a/filters/kword/pdf/xpdf/xpdf/XPDFViewer.cc +++ /dev/null @@ -1,2318 +0,0 @@ -//======================================================================== -// -// XPDFViewer.cc -// -// Copyright 2002 Glyph & Cog, LLC -// -//======================================================================== - -#include <aconf.h> - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include <stdlib.h> -#include <string.h> -#include <ctype.h> -#include <X11/cursorfont.h> -#ifdef HAVE_X11_XPM_H -#include <X11/xpm.h> -#endif -#include "gmem.h" -#include "gfile.h" -#include "GString.h" -#include "GList.h" -#include "Error.h" -#include "GlobalParams.h" -#include "PDFDoc.h" -#include "ErrorCodes.h" -#include "Outline.h" -#include "UnicodeMap.h" -#ifndef DISABLE_OUTLINE -#define Object XtObject -#include "XPDFTree.h" -#undef Object -#endif -#include "XPDFApp.h" -#include "XPDFViewer.h" -#include "XPixmapOutputDev.h" -#include "PSOutputDev.h" -#include "config.h" - -// these macro defns conflict with xpdf's Object class -#ifdef LESSTIF_VERSION -#undef XtDisplay -#undef XtScreen -#undef XtWindow -#undef XtParent -#undef XtIsRealized -#endif - -#if XmVERSION <= 1 -#define XmSET True -#define XmUNSET False -#endif - -//------------------------------------------------------------------------ -// GUI includes -//------------------------------------------------------------------------ - -#include "xpdfIcon.xpm" -#include "leftArrow.xbm" -#include "leftArrowDis.xbm" -#include "dblLeftArrow.xbm" -#include "dblLeftArrowDis.xbm" -#include "rightArrow.xbm" -#include "rightArrowDis.xbm" -#include "dblRightArrow.xbm" -#include "dblRightArrowDis.xbm" -#include "backArrow.xbm" -#include "backArrowDis.xbm" -#include "forwardArrow.xbm" -#include "forwardArrowDis.xbm" -#include "find.xbm" -#include "findDis.xbm" -#include "print.xbm" -#include "printDis.xbm" -#include "about.xbm" -#include "about-text.h" - -//------------------------------------------------------------------------ - -XPDFViewer::XPDFViewer(XPDFApp *appA, GString *fileName, - int pageA, GString *destName, - GString *ownerPassword, GString *userPassword) { - LinkDest *dest; - int pg, z; - GString *dir; - - app = appA; - win = NULL; - core = NULL; - password = NULL; - ok = gFalse; -#ifndef DISABLE_OUTLINE - outlineLabels = NULL; - outlineLabelsLength = outlineLabelsSize = 0; -#endif - - // do Motif-specific initialization and create the window; - // this also creates the core object - initWindow(); - initAboutDialog(); - initOpenDialog(); - initFindDialog(); - initSaveAsDialog(); - initPrintDialog(); - initPasswordDialog(); - - dest = NULL; // make gcc happy - pg = pageA; // make gcc happy - - if (fileName) { - if (loadFile(fileName, ownerPassword, userPassword)) { - getPageAndDest(pageA, destName, &pg, &dest); - if (pg > 0) { - core->resizeToPage(pg); - } - dir = makePathAbsolute(grabPath(fileName->getCString())); - setOpenDialogDir(dir->getCString()); - setSaveAsDialogDir(dir->getCString()); - delete dir; - } else { - return; - } - } - - // map the window -- we do this after calling resizeToPage to avoid - // an annoying on-screen resize - mapWindow(); - - // display the first page - z = app->getFullScreen() ? zoomPage : core->getZoom(); - if (dest) { - displayDest(dest, z, core->getRotate(), gTrue); - delete dest; - } else { - displayPage(pg, z, core->getRotate(), gTrue, gTrue); - } - - ok = gTrue; -} - -XPDFViewer::~XPDFViewer() { - delete core; - XmFontListFree(aboutBigFont); - XmFontListFree(aboutVersionFont); - XmFontListFree(aboutFixedFont); - closeWindow(); -#ifndef DISABLE_OUTLINE - if (outlineLabels) { - gfree(outlineLabels); - } -#endif - if (password) { - delete password; - } -} - -void XPDFViewer::open(GString *fileName, int pageA, GString *destName) { - LinkDest *dest; - int pg, z; - - if (!core->getDoc() || fileName->cmp(core->getDoc()->getFileName())) { - if (!loadFile(fileName, NULL, NULL)) { - return; - } - } - getPageAndDest(pageA, destName, &pg, &dest); - z = app->getFullScreen() ? zoomPage : core->getZoom(); - if (dest) { - displayDest(dest, z, core->getRotate(), gTrue); - delete dest; - } else { - displayPage(pg, z, core->getRotate(), gTrue, gTrue); - } -} - -void XPDFViewer::clear() { - char *title; - XmString s; - - core->clear(); - - // set up title, number-of-pages display - title = app->getTitle() ? app->getTitle()->getCString() - : (char *)xpdfAppName; - XtVaSetValues(win, XmNtitle, title, XmNiconName, title, NULL); - s = XmStringCreateLocalized(""); - XtVaSetValues(pageNumText, XmNlabelString, s, NULL); - XmStringFree(s); - s = XmStringCreateLocalized(" of 0"); - XtVaSetValues(pageCountLabel, XmNlabelString, s, NULL); - XmStringFree(s); - - // disable buttons - XtVaSetValues(prevTenPageBtn, XmNsensitive, False, NULL); - XtVaSetValues(prevPageBtn, XmNsensitive, False, NULL); - XtVaSetValues(nextTenPageBtn, XmNsensitive, False, NULL); - XtVaSetValues(nextPageBtn, XmNsensitive, False, NULL); -} - -//------------------------------------------------------------------------ -// load / display -//------------------------------------------------------------------------ - -GBool XPDFViewer::loadFile(GString *fileName, GString *ownerPassword, - GString *userPassword) { - return core->loadFile(fileName, ownerPassword, userPassword) == errNone; -} - -void XPDFViewer::reloadFile() { - int pg; - - if (!core->getDoc()) { - return; - } - pg = core->getPageNum(); - loadFile(core->getDoc()->getFileName()); - if (pg > core->getDoc()->getNumPages()) { - pg = core->getDoc()->getNumPages(); - } - displayPage(pg, core->getZoom(), core->getRotate(), gFalse, gFalse); -} - -void XPDFViewer::displayPage(int pageA, int zoomA, int rotateA, - GBool scrollToTop, GBool addToHist) { - core->displayPage(pageA, zoomA, rotateA, scrollToTop, addToHist); -} - -void XPDFViewer::displayDest(LinkDest *dest, int zoomA, int rotateA, - GBool addToHist) { - core->displayDest(dest, zoomA, rotateA, addToHist); -} - -void XPDFViewer::getPageAndDest(int pageA, GString *destName, - int *pageOut, LinkDest **destOut) { - Ref pageRef; - - // find the page number for a named destination - *pageOut = pageA; - *destOut = NULL; - if (destName && (*destOut = core->getDoc()->findDest(destName))) { - if ((*destOut)->isPageRef()) { - pageRef = (*destOut)->getPageRef(); - *pageOut = core->getDoc()->findPage(pageRef.num, pageRef.gen); - } else { - *pageOut = (*destOut)->getPageNum(); - } - } - - if (*pageOut <= 0) { - *pageOut = 1; - } - if (*pageOut > core->getDoc()->getNumPages()) { - *pageOut = core->getDoc()->getNumPages(); - } -} - -//------------------------------------------------------------------------ -// password dialog -//------------------------------------------------------------------------ - -GString *XPDFViewer::reqPasswordCbk(void *data, GBool again) { - XPDFViewer *viewer = (XPDFViewer *)data; - - viewer->getPassword(again); - return viewer->password; -} - -//------------------------------------------------------------------------ -// actions -//------------------------------------------------------------------------ - -void XPDFViewer::actionCbk(void *data, char *action) { - XPDFViewer *viewer = (XPDFViewer *)data; - - if (!strcmp(action, "Quit")) { - viewer->app->quit(); - } -} - -//------------------------------------------------------------------------ -// keyboard/mouse input -//------------------------------------------------------------------------ - -void XPDFViewer::keyPressCbk(void *data, char *s, KeySym key, - Guint modifiers) { - XPDFViewer *viewer = (XPDFViewer *)data; - int z; - - if (s[0]) { - switch (s[0]) { - case 'O': - case 'o': - viewer->mapOpenDialog(gFalse); - break; - case 'R': - case 'r': - viewer->reloadFile(); - break; - case 'F': - case 'f': - case '\006': // ctrl-F - if (viewer->core->getDoc()) { - XtManageChild(viewer->findDialog); - } - break; - case '\007': // ctrl-G - if (viewer->core->getDoc()) { - XPDFViewer::findFindCbk(None, viewer, NULL); - } - break; - case '\020': // ctrl-P - if (viewer->core->getDoc()) { - XtManageChild(viewer->printDialog); - } - break; - case 'N': - case 'n': - viewer->core->gotoNextPage(1, !(modifiers & Mod5Mask)); - break; - case 'P': - case 'p': - viewer->core->gotoPrevPage(1, !(modifiers & Mod5Mask), gFalse); - break; - case ' ': - if (viewer->app->getFullScreen()) { - viewer->core->gotoNextPage(1, gTrue); - } else { - viewer->core->scrollPageDown(); - } - break; - case '\b': // bs - case '\177': // del - if (viewer->app->getFullScreen()) { - viewer->core->gotoPrevPage(1, gTrue, gFalse); - } else { - viewer->core->scrollPageUp(); - } - break; - case 'v': - viewer->core->goForward(); - break; - case 'b': - viewer->core->goBackward(); - break; - case 'g': - if (!viewer->app->getFullScreen()) { - XmTextFieldSetSelection( - viewer->pageNumText, 0, - strlen(XmTextFieldGetString(viewer->pageNumText)), - XtLastTimestampProcessed(viewer->display)); - XmProcessTraversal(viewer->pageNumText, XmTRAVERSE_CURRENT); - } - break; - case 'h': // vi-style left - if (!viewer->app->getFullScreen() && viewer->app->getViKeys()) { - viewer->core->scrollLeft(); - } - break; - case 'l': // vi-style right - if (!viewer->app->getFullScreen() && viewer->app->getViKeys()) { - viewer->core->scrollRight(); - } - break; - case 'k': // vi-style up - if (!viewer->app->getFullScreen() && viewer->app->getViKeys()) { - viewer->core->scrollUp(); - } - break; - case 'j': // vi-style down - if (!viewer->app->getFullScreen() && viewer->app->getViKeys()) { - viewer->core->scrollDown(); - } - break; - case '0': - if (!viewer->app->getFullScreen() && - viewer->core->getZoom() != defZoom) { - XtVaSetValues(viewer->zoomMenu, - XmNmenuHistory, viewer->getZoomMenuBtn(defZoom), - NULL); - viewer->displayPage(viewer->core->getPageNum(), defZoom, - viewer->core->getRotate(), gTrue, gFalse); - } - break; - case '+': - if (!viewer->app->getFullScreen() && - viewer->core->getZoom() >= minZoom && - viewer->core->getZoom() < maxZoom) { - z = viewer->core->getZoom() + 1; - XtVaSetValues(viewer->zoomMenu, - XmNmenuHistory, viewer->getZoomMenuBtn(z), - NULL); - viewer->displayPage(viewer->core->getPageNum(), z, - viewer->core->getRotate(), gTrue, gFalse); - } - break; - case '-': - if (!viewer->app->getFullScreen() && - viewer->core->getZoom() > minZoom && - viewer->core->getZoom() <= maxZoom) { - z = viewer->core->getZoom() - 1; - XtVaSetValues(viewer->zoomMenu, - XmNmenuHistory, viewer->getZoomMenuBtn(z), - NULL); - viewer->displayPage(viewer->core->getPageNum(), z, - viewer->core->getRotate(), gTrue, gFalse); - } - break; - case 'z': - if (!viewer->app->getFullScreen() && - viewer->core->getZoom() != zoomPage) { - XtVaSetValues(viewer->zoomMenu, - XmNmenuHistory, viewer->getZoomMenuBtn(zoomPage), - NULL); - viewer->displayPage(viewer->core->getPageNum(), zoomPage, - viewer->core->getRotate(), gTrue, gFalse); - } - break; - case 'w': - if (!viewer->app->getFullScreen() && - viewer->core->getZoom() != zoomWidth) { - XtVaSetValues(viewer->zoomMenu, - XmNmenuHistory, viewer->getZoomMenuBtn(zoomWidth), - NULL); - viewer->displayPage(viewer->core->getPageNum(), zoomWidth, - viewer->core->getRotate(), gTrue, gFalse); - } - break; - case '\014': // ^L - viewer->displayPage(viewer->core->getPageNum(), viewer->core->getZoom(), - viewer->core->getRotate(), gFalse, gFalse); - break; - case '\027': // ^W - viewer->app->close(viewer, gFalse); - break; - case '?': - XtManageChild(viewer->aboutDialog); - break; - case 'Q': - case 'q': - viewer->app->quit(); - break; - } - } -} - -void XPDFViewer::mouseCbk(void *data, XEvent *event) { - XPDFViewer *viewer = (XPDFViewer *)data; - - if (event->type == ButtonPress && event->xbutton.button == 3) { - XmMenuPosition(viewer->popupMenu, &event->xbutton); - XtManageChild(viewer->popupMenu); - } -} - -//------------------------------------------------------------------------ -// GUI code: main window -//------------------------------------------------------------------------ - -void XPDFViewer::initWindow() { - Widget btn, label, menuPane, lastBtn; -#ifndef DISABLE_OUTLINE - Widget clipWin; -#endif - Colormap colormap; - XColor xcol; - Arg args[20]; - int n; - char *title; - XmString s, s2, emptyString; - char buf[16]; - int i; - - display = XtDisplay(app->getAppShell()); - screenNum = XScreenNumberOfScreen(XtScreen(app->getAppShell())); - - // private colormap - if (app->getInstallCmap()) { - XtVaGetValues(app->getAppShell(), XmNcolormap, &colormap, NULL); - // ensure that BlackPixel and WhitePixel are reserved in the - // new colormap - xcol.red = xcol.green = xcol.blue = 0; - XAllocColor(display, colormap, &xcol); - xcol.red = xcol.green = xcol.blue = 65535; - XAllocColor(display, colormap, &xcol); - colormap = XCopyColormapAndFree(display, colormap); - } - - // top-level window - n = 0; - title = app->getTitle() ? app->getTitle()->getCString() - : (char *)xpdfAppName; - XtSetArg(args[n], XmNtitle, title); ++n; - XtSetArg(args[n], XmNiconName, title); ++n; - XtSetArg(args[n], XmNminWidth, 100); ++n; - XtSetArg(args[n], XmNminHeight, 100); ++n; - XtSetArg(args[n], XmNbaseWidth, 0); ++n; - XtSetArg(args[n], XmNbaseHeight, 0); ++n; - XtSetArg(args[n], XmNdeleteResponse, XmDO_NOTHING); ++n; - if (app->getFullScreen()) { - XtSetArg(args[n], XmNmwmDecorations, 0); ++n; - XtSetArg(args[n], XmNgeometry, "+0+0"); ++n; - } else if (app->getGeometry()) { - XtSetArg(args[n], XmNgeometry, app->getGeometry()->getCString()); ++n; - } - win = XtCreatePopupShell("win", topLevelShellWidgetClass, - app->getAppShell(), args, n); - if (app->getInstallCmap()) { - XtVaSetValues(win, XmNcolormap, colormap, NULL); - } - XmAddWMProtocolCallback(win, XInternAtom(display, "WM_DELETE_WINDOW", False), - &closeMsgCbk, this); - - // form - n = 0; - form = XmCreateForm(win, "form", args, n); - XtManageChild(form); - - // toolbar - n = 0; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - toolBar = XmCreateForm(form, "toolBar", args, n); - XtManageChild(toolBar); - - // create an empty string -- this is used for buttons that will get - // pixmaps later - emptyString = XmStringCreateLocalized(""); - - // page movement buttons - n = 0; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNmarginWidth, 6); ++n; - XtSetArg(args[n], XmNsensitive, False); ++n; - XtSetArg(args[n], XmNlabelString, emptyString); ++n; - backBtn = XmCreatePushButton(toolBar, "back", args, n); - XtManageChild(backBtn); - XtAddCallback(backBtn, XmNactivateCallback, - &backCbk, (XtPointer)this); - n = 0; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNleftWidget, backBtn); ++n; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNmarginWidth, 6); ++n; - XtSetArg(args[n], XmNsensitive, False); ++n; - XtSetArg(args[n], XmNlabelString, emptyString); ++n; - prevTenPageBtn = XmCreatePushButton(toolBar, "prevTenPage", args, n); - XtManageChild(prevTenPageBtn); - XtAddCallback(prevTenPageBtn, XmNactivateCallback, - &prevTenPageCbk, (XtPointer)this); - n = 0; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNleftWidget, prevTenPageBtn); ++n; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNmarginWidth, 6); ++n; - XtSetArg(args[n], XmNsensitive, False); ++n; - XtSetArg(args[n], XmNlabelString, emptyString); ++n; - prevPageBtn = XmCreatePushButton(toolBar, "prevPage", args, n); - XtManageChild(prevPageBtn); - XtAddCallback(prevPageBtn, XmNactivateCallback, - &prevPageCbk, (XtPointer)this); - n = 0; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNleftWidget, prevPageBtn); ++n; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNmarginWidth, 6); ++n; - XtSetArg(args[n], XmNsensitive, False); ++n; - XtSetArg(args[n], XmNlabelString, emptyString); ++n; - nextPageBtn = XmCreatePushButton(toolBar, "nextPage", args, n); - XtManageChild(nextPageBtn); - XtAddCallback(nextPageBtn, XmNactivateCallback, - &nextPageCbk, (XtPointer)this); - n = 0; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNleftWidget, nextPageBtn); ++n; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNmarginWidth, 6); ++n; - XtSetArg(args[n], XmNsensitive, False); ++n; - XtSetArg(args[n], XmNlabelString, emptyString); ++n; - nextTenPageBtn = XmCreatePushButton(toolBar, "nextTenPage", args, n); - XtManageChild(nextTenPageBtn); - XtAddCallback(nextTenPageBtn, XmNactivateCallback, - &nextTenPageCbk, (XtPointer)this); - n = 0; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNleftWidget, nextTenPageBtn); ++n; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNmarginWidth, 6); ++n; - XtSetArg(args[n], XmNsensitive, False); ++n; - XtSetArg(args[n], XmNlabelString, emptyString); ++n; - forwardBtn = XmCreatePushButton(toolBar, "forward", args, n); - XtManageChild(forwardBtn); - XtAddCallback(forwardBtn, XmNactivateCallback, - &forwardCbk, (XtPointer)this); - - // page number display - n = 0; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNleftWidget, forwardBtn); ++n; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - s = XmStringCreateLocalized("Page "); - XtSetArg(args[n], XmNlabelString, s); ++n; - label = XmCreateLabel(toolBar, "pageLabel", args, n); - XmStringFree(s); - XtManageChild(label); - n = 0; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNleftWidget, label); ++n; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNmarginWidth, 3); ++n; - XtSetArg(args[n], XmNmarginHeight, 3); ++n; - XtSetArg(args[n], XmNcolumns, 5); ++n; - pageNumText = XmCreateTextField(toolBar, "pageNum", args, n); - XtManageChild(pageNumText); - XtAddCallback(pageNumText, XmNactivateCallback, - &pageNumCbk, (XtPointer)this); - n = 0; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNleftWidget, pageNumText); ++n; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - s = XmStringCreateLocalized(" of 00000"); - XtSetArg(args[n], XmNlabelString, s); ++n; - XtSetArg(args[n], XmNalignment, XmALIGNMENT_BEGINNING); ++n; - XtSetArg(args[n], XmNrecomputeSize, False); ++n; - pageCountLabel = XmCreateLabel(toolBar, "pageCountLabel", args, n); - XmStringFree(s); - XtManageChild(pageCountLabel); - s = XmStringCreateLocalized(" of 0"); - XtVaSetValues(pageCountLabel, XmNlabelString, s, NULL); - XmStringFree(s); - - // zoom menu - n = 0; - menuPane = XmCreatePulldownMenu(toolBar, "zoomMenuPane", args, n); - for (i = minZoom; i <= maxZoom; ++i) { - n = 0; - sprintf(buf, "%s%d", i > 0 ? "+" : "", i); - s = XmStringCreateLocalized(buf); - XtSetArg(args[n], XmNlabelString, s); ++n; - XtSetArg(args[n], XmNuserData, (XtPointer)i); ++n; - sprintf(buf, "zoom%s%d", i < 0 ? "M" : "", i < 0 ? -i : i); - btn = XmCreatePushButton(menuPane, buf, args, n); - XmStringFree(s); - XtManageChild(btn); - XtAddCallback(btn, XmNactivateCallback, - &zoomMenuCbk, (XtPointer)this); - zoomMenuBtns[i - minZoom] = btn; - } - n = 0; - s = XmStringCreateLocalized("fit page"); - XtSetArg(args[n], XmNlabelString, s); ++n; - XtSetArg(args[n], XmNuserData, (XtPointer)zoomPage); ++n; - btn = XmCreatePushButton(menuPane, "zoomPage", args, n); - XmStringFree(s); - XtManageChild(btn); - XtAddCallback(btn, XmNactivateCallback, - &zoomMenuCbk, (XtPointer)this); - zoomMenuBtns[maxZoom - minZoom + 1] = btn; - n = 0; - s = XmStringCreateLocalized("fit width"); - XtSetArg(args[n], XmNlabelString, s); ++n; - XtSetArg(args[n], XmNuserData, (XtPointer)zoomWidth); ++n; - btn = XmCreatePushButton(menuPane, "zoomWidth", args, n); - XmStringFree(s); - XtManageChild(btn); - XtAddCallback(btn, XmNactivateCallback, - &zoomMenuCbk, (XtPointer)this); - zoomMenuBtns[maxZoom - minZoom + 2] = btn; - n = 0; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNleftWidget, pageCountLabel); ++n; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNmarginWidth, 0); ++n; - XtSetArg(args[n], XmNmarginHeight, 0); ++n; - XtSetArg(args[n], XmNsubMenuId, menuPane); ++n; - zoomMenu = XmCreateOptionMenu(toolBar, "zoomMenu", args, n); - XtManageChild(zoomMenu); - - // find/print/about buttons - n = 0; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNleftWidget, zoomMenu); ++n; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNmarginWidth, 6); ++n; - XtSetArg(args[n], XmNlabelString, emptyString); ++n; - findBtn = XmCreatePushButton(toolBar, "find", args, n); - XtManageChild(findBtn); - XtAddCallback(findBtn, XmNactivateCallback, - &findCbk, (XtPointer)this); - n = 0; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNleftWidget, findBtn); ++n; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNmarginWidth, 6); ++n; - XtSetArg(args[n], XmNlabelString, emptyString); ++n; - printBtn = XmCreatePushButton(toolBar, "print", args, n); - XtManageChild(printBtn); - XtAddCallback(printBtn, XmNactivateCallback, - &printCbk, (XtPointer)this); - n = 0; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNleftWidget, printBtn); ++n; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNmarginWidth, 6); ++n; - XtSetArg(args[n], XmNlabelString, emptyString); ++n; - aboutBtn = XmCreatePushButton(toolBar, "about", args, n); - XtManageChild(aboutBtn); - XtAddCallback(aboutBtn, XmNactivateCallback, - &aboutCbk, (XtPointer)this); - lastBtn = aboutBtn; - - // quit button - n = 0; - XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNmarginWidth, 6); ++n; - s = XmStringCreateLocalized("Quit"); - XtSetArg(args[n], XmNlabelString, s); ++n; - quitBtn = XmCreatePushButton(toolBar, "quit", args, n); - XmStringFree(s); - XtManageChild(quitBtn); - XtAddCallback(quitBtn, XmNactivateCallback, - &quitCbk, (XtPointer)this); - - // link label - n = 0; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNleftWidget, lastBtn); ++n; - XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNrightWidget, btn); ++n; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - s = XmStringCreateLocalized(""); - XtSetArg(args[n], XmNlabelString, s); ++n; - XtSetArg(args[n], XmNrecomputeSize, True); ++n; - XtSetArg(args[n], XmNalignment, XmALIGNMENT_BEGINNING); ++n; - linkLabel = XmCreateLabel(toolBar, "linkLabel", args, n); - XmStringFree(s); - XtManageChild(linkLabel); - -#ifndef DISABLE_OUTLINE - if (app->getFullScreen()) { -#endif - - // core - core = new XPDFCore(win, form, app->getPaperColor(), - app->getFullScreen(), app->getReverseVideo(), - app->getInstallCmap(), app->getRGBCubeSize()); - core->setUpdateCbk(&updateCbk, this); - core->setActionCbk(&actionCbk, this); - core->setKeyPressCbk(&keyPressCbk, this); - core->setMouseCbk(&mouseCbk, this); - core->setReqPasswordCbk(&reqPasswordCbk, this); - n = 0; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNbottomWidget, toolBar); ++n; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n; - XtSetValues(core->getWidget(), args, n); - -#ifndef DISABLE_OUTLINE - } else { - - // paned window - n = 0; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNbottomWidget, toolBar); ++n; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNorientation, XmHORIZONTAL); ++n; - panedWin = XmCreatePanedWindow(form, "panedWin", args, n); - XtManageChild(panedWin); - - // scrolled window for outline container - n = 0; - XtSetArg(args[n], XmNpositionIndex, 0); ++n; - XtSetArg(args[n], XmNallowResize, True); ++n; - XtSetArg(args[n], XmNpaneMinimum, 1); ++n; - XtSetArg(args[n], XmNpaneMaximum, 10000); ++n; - XtSetArg(args[n], XmNwidth, 1); ++n; - XtSetArg(args[n], XmNscrollingPolicy, XmAUTOMATIC); ++n; - outlineScroll = XmCreateScrolledWindow(panedWin, "outlineScroll", args, n); - XtManageChild(outlineScroll); - XtVaGetValues(outlineScroll, XmNclipWindow, &clipWin, NULL); - XtVaSetValues(clipWin, XmNbackground, app->getPaperColor(), NULL); - - // outline tree - n = 0; - XtSetArg(args[n], XmNbackground, app->getPaperColor()); ++n; - outlineTree = XPDFCreateTree(outlineScroll, "outlineTree", args, n); - XtManageChild(outlineTree); - XtAddCallback(outlineTree, XPDFNselectionCallback, &outlineSelectCbk, - (XtPointer)this); - - // core - core = new XPDFCore(win, panedWin, app->getPaperColor(), - app->getFullScreen(), app->getReverseVideo(), - app->getInstallCmap(), app->getRGBCubeSize()); - core->setUpdateCbk(&updateCbk, this); - core->setActionCbk(&actionCbk, this); - core->setKeyPressCbk(&keyPressCbk, this); - core->setMouseCbk(&mouseCbk, this); - core->setReqPasswordCbk(&reqPasswordCbk, this); - n = 0; - XtSetArg(args[n], XmNpositionIndex, 1); ++n; - XtSetArg(args[n], XmNallowResize, True); ++n; - XtSetArg(args[n], XmNpaneMinimum, 1); ++n; - XtSetArg(args[n], XmNpaneMaximum, 10000); ++n; - XtSetValues(core->getWidget(), args, n); - } -#endif - - // set the zoom menu to match the initial zoom setting - XtVaSetValues(zoomMenu, XmNmenuHistory, - getZoomMenuBtn(core->getZoom()), NULL); - - // set traversal order - XtVaSetValues(core->getDrawAreaWidget(), - XmNnavigationType, XmEXCLUSIVE_TAB_GROUP, NULL); - XtVaSetValues(backBtn, XmNnavigationType, XmEXCLUSIVE_TAB_GROUP, - NULL); - XtVaSetValues(prevTenPageBtn, XmNnavigationType, XmEXCLUSIVE_TAB_GROUP, - NULL); - XtVaSetValues(prevPageBtn, XmNnavigationType, XmEXCLUSIVE_TAB_GROUP, - NULL); - XtVaSetValues(nextPageBtn, XmNnavigationType, XmEXCLUSIVE_TAB_GROUP, - NULL); - XtVaSetValues(nextTenPageBtn, XmNnavigationType, XmEXCLUSIVE_TAB_GROUP, - NULL); - XtVaSetValues(forwardBtn, XmNnavigationType, XmEXCLUSIVE_TAB_GROUP, - NULL); - XtVaSetValues(pageNumText, XmNnavigationType, XmEXCLUSIVE_TAB_GROUP, - NULL); - XtVaSetValues(zoomMenu, XmNnavigationType, XmEXCLUSIVE_TAB_GROUP, - NULL); - XtVaSetValues(findBtn, XmNnavigationType, XmEXCLUSIVE_TAB_GROUP, - NULL); - XtVaSetValues(printBtn, XmNnavigationType, XmEXCLUSIVE_TAB_GROUP, - NULL); - XtVaSetValues(aboutBtn, XmNnavigationType, XmEXCLUSIVE_TAB_GROUP, - NULL); - XtVaSetValues(quitBtn, XmNnavigationType, XmEXCLUSIVE_TAB_GROUP, - NULL); - - // popup menu - n = 0; - XtSetArg(args[n], XmNmenuPost, "<Btn3Down>"); ++n; - popupMenu = XmCreatePopupMenu(core->getDrawAreaWidget(), "popupMenu", - args, n); - n = 0; - s = XmStringCreateLocalized("Open..."); - XtSetArg(args[n], XmNlabelString, s); ++n; - s2 = XmStringCreateLocalized("O"); - XtSetArg(args[n], XmNacceleratorText, s2); ++n; - btn = XmCreatePushButton(popupMenu, "open", args, n); - XmStringFree(s); - XmStringFree(s2); - XtManageChild(btn); - XtAddCallback(btn, XmNactivateCallback, - &openCbk, (XtPointer)this); - n = 0; - s = XmStringCreateLocalized("Open in new window..."); - XtSetArg(args[n], XmNlabelString, s); ++n; - btn = XmCreatePushButton(popupMenu, "openInNewWindow", args, n); - XmStringFree(s); - XtManageChild(btn); - XtAddCallback(btn, XmNactivateCallback, - &openInNewWindowCbk, (XtPointer)this); - n = 0; - s = XmStringCreateLocalized("Reload"); - XtSetArg(args[n], XmNlabelString, s); ++n; - s2 = XmStringCreateLocalized("R"); - XtSetArg(args[n], XmNacceleratorText, s2); ++n; - btn = XmCreatePushButton(popupMenu, "reload", args, n); - XmStringFree(s); - XmStringFree(s2); - XtManageChild(btn); - XtAddCallback(btn, XmNactivateCallback, - &reloadCbk, (XtPointer)this); - n = 0; - s = XmStringCreateLocalized("Save as..."); - XtSetArg(args[n], XmNlabelString, s); ++n; - btn = XmCreatePushButton(popupMenu, "saveAs", args, n); - XmStringFree(s); - XtManageChild(btn); - XtAddCallback(btn, XmNactivateCallback, - &saveAsCbk, (XtPointer)this); - n = 0; - btn = XmCreateSeparator(popupMenu, "sep1", args, n); - XtManageChild(btn); - n = 0; - s = XmStringCreateLocalized("Rotate counterclockwise"); - XtSetArg(args[n], XmNlabelString, s); ++n; - btn = XmCreatePushButton(popupMenu, "rotateCCW", args, n); - XmStringFree(s); - XtManageChild(btn); - XtAddCallback(btn, XmNactivateCallback, - &rotateCCWCbk, (XtPointer)this); - n = 0; - s = XmStringCreateLocalized("Rotate clockwise"); - XtSetArg(args[n], XmNlabelString, s); ++n; - btn = XmCreatePushButton(popupMenu, "rotateCW", args, n); - XmStringFree(s); - XtManageChild(btn); - XtAddCallback(btn, XmNactivateCallback, - &rotateCWCbk, (XtPointer)this); - n = 0; - btn = XmCreateSeparator(popupMenu, "sep2", args, n); - XtManageChild(btn); - n = 0; - s = XmStringCreateLocalized("Close"); - XtSetArg(args[n], XmNlabelString, s); ++n; - s2 = XmStringCreateLocalized("Ctrl+W"); - XtSetArg(args[n], XmNacceleratorText, s2); ++n; - btn = XmCreatePushButton(popupMenu, "close", args, n); - XmStringFree(s); - XmStringFree(s2); - XtManageChild(btn); - XtAddCallback(btn, XmNactivateCallback, - &closeCbk, (XtPointer)this); - n = 0; - s = XmStringCreateLocalized("Quit"); - XtSetArg(args[n], XmNlabelString, s); ++n; - s2 = XmStringCreateLocalized("Q"); - XtSetArg(args[n], XmNacceleratorText, s2); ++n; - btn = XmCreatePushButton(popupMenu, "quit", args, n); - XmStringFree(s); - XmStringFree(s2); - XtManageChild(btn); - XtAddCallback(btn, XmNactivateCallback, - &quitCbk, (XtPointer)this); - - XmStringFree(emptyString); -} - -void XPDFViewer::mapWindow() { -#ifdef HAVE_X11_XPM_H - Pixmap iconPixmap; -#endif - int depth; - Pixel bg, arm; - - // show the window - XtPopup(win, XtGrabNone); - core->takeFocus(); - - // create the icon -#ifdef HAVE_X11_XPM_H - if (XpmCreatePixmapFromData(display, XtWindow(win), xpdfIcon, - &iconPixmap, NULL, NULL) == XpmSuccess) { - XtVaSetValues(win, XmNiconPixmap, iconPixmap, NULL); - } -#endif - - // set button bitmaps (must be done after the window is mapped) - XtVaGetValues(backBtn, XmNdepth, &depth, - XmNbackground, &bg, XmNarmColor, &arm, NULL); - XtVaSetValues(backBtn, XmNlabelType, XmPIXMAP, - XmNlabelPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)backArrow_bits, - backArrow_width, - backArrow_height, - BlackPixel(display, screenNum), - bg, depth), - XmNarmPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)backArrow_bits, - backArrow_width, - backArrow_height, - BlackPixel(display, screenNum), - arm, depth), - XmNlabelInsensitivePixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)backArrowDis_bits, - backArrowDis_width, - backArrowDis_height, - BlackPixel(display, screenNum), - bg, depth), - NULL); - XtVaSetValues(prevTenPageBtn, XmNlabelType, XmPIXMAP, - XmNlabelPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)dblLeftArrow_bits, - dblLeftArrow_width, - dblLeftArrow_height, - BlackPixel(display, screenNum), - bg, depth), - XmNarmPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)dblLeftArrow_bits, - dblLeftArrow_width, - dblLeftArrow_height, - BlackPixel(display, screenNum), - arm, depth), - XmNlabelInsensitivePixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)dblLeftArrowDis_bits, - dblLeftArrowDis_width, - dblLeftArrowDis_height, - BlackPixel(display, screenNum), - bg, depth), - NULL); - XtVaSetValues(prevPageBtn, XmNlabelType, XmPIXMAP, - XmNlabelPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)leftArrow_bits, - leftArrow_width, - leftArrow_height, - BlackPixel(display, screenNum), - bg, depth), - XmNarmPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)leftArrow_bits, - leftArrow_width, - leftArrow_height, - BlackPixel(display, screenNum), - arm, depth), - XmNlabelInsensitivePixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)leftArrowDis_bits, - leftArrowDis_width, - leftArrowDis_height, - BlackPixel(display, screenNum), - bg, depth), - NULL); - XtVaSetValues(nextPageBtn, XmNlabelType, XmPIXMAP, - XmNlabelPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)rightArrow_bits, - rightArrow_width, - rightArrow_height, - BlackPixel(display, screenNum), - bg, depth), - XmNarmPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)rightArrow_bits, - rightArrow_width, - rightArrow_height, - BlackPixel(display, screenNum), - arm, depth), - XmNlabelInsensitivePixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)rightArrowDis_bits, - rightArrowDis_width, - rightArrowDis_height, - BlackPixel(display, screenNum), - bg, depth), - NULL); - XtVaSetValues(nextTenPageBtn, XmNlabelType, XmPIXMAP, - XmNlabelPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)dblRightArrow_bits, - dblRightArrow_width, - dblRightArrow_height, - BlackPixel(display, screenNum), - bg, depth), - XmNarmPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)dblRightArrow_bits, - dblRightArrow_width, - dblRightArrow_height, - BlackPixel(display, screenNum), - arm, depth), - XmNlabelInsensitivePixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)dblRightArrowDis_bits, - dblRightArrowDis_width, - dblRightArrowDis_height, - BlackPixel(display, screenNum), - bg, depth), - NULL); - XtVaSetValues(forwardBtn, XmNlabelType, XmPIXMAP, - XmNlabelPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)forwardArrow_bits, - forwardArrow_width, - forwardArrow_height, - BlackPixel(display, screenNum), - bg, depth), - XmNarmPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)forwardArrow_bits, - forwardArrow_width, - forwardArrow_height, - BlackPixel(display, screenNum), - arm, depth), - XmNlabelInsensitivePixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)forwardArrowDis_bits, - forwardArrowDis_width, - forwardArrowDis_height, - BlackPixel(display, screenNum), - bg, depth), - NULL); - XtVaSetValues(findBtn, XmNlabelType, XmPIXMAP, - XmNlabelPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)find_bits, - find_width, - find_height, - BlackPixel(display, screenNum), - bg, depth), - XmNarmPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)find_bits, - find_width, - find_height, - BlackPixel(display, screenNum), - arm, depth), - XmNlabelInsensitivePixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)findDis_bits, - findDis_width, - findDis_height, - BlackPixel(display, screenNum), - bg, depth), - NULL); - XtVaSetValues(printBtn, XmNlabelType, XmPIXMAP, - XmNlabelPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)print_bits, - print_width, - print_height, - BlackPixel(display, screenNum), - bg, depth), - XmNarmPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)print_bits, - print_width, - print_height, - BlackPixel(display, screenNum), - arm, depth), - XmNlabelInsensitivePixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)printDis_bits, - printDis_width, - printDis_height, - BlackPixel(display, screenNum), - bg, depth), - NULL); - XtVaSetValues(aboutBtn, XmNlabelType, XmPIXMAP, - XmNlabelPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)about_bits, - about_width, - about_height, - BlackPixel(display, screenNum), - bg, depth), - XmNarmPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)about_bits, - about_width, - about_height, - BlackPixel(display, screenNum), - arm, depth), - NULL); -} - -void XPDFViewer::closeWindow() { - XtPopdown(win); - XtDestroyWidget(win); -} - -Widget XPDFViewer::getZoomMenuBtn(int z) { - if (z >= minZoom && z <= maxZoom) { - return zoomMenuBtns[z - minZoom]; - } - if (z == zoomPage) { - return zoomMenuBtns[maxZoom - minZoom + 1]; - } - if (z == zoomWidth) { - return zoomMenuBtns[maxZoom - minZoom + 2]; - } - return zoomMenuBtns[0]; -} - -void XPDFViewer::prevPageCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - - viewer->core->gotoPrevPage(1, gTrue, gFalse); - viewer->core->takeFocus(); -} - -void XPDFViewer::prevTenPageCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - - viewer->core->gotoPrevPage(10, gTrue, gFalse); - viewer->core->takeFocus(); -} - -void XPDFViewer::nextPageCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - - viewer->core->gotoNextPage(1, gTrue); - viewer->core->takeFocus(); -} - -void XPDFViewer::nextTenPageCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - - viewer->core->gotoNextPage(10, gTrue); - viewer->core->takeFocus(); -} - -void XPDFViewer::backCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - - viewer->core->goBackward(); - viewer->core->takeFocus(); -} - -void XPDFViewer::forwardCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - - viewer->core->goForward(); - viewer->core->takeFocus(); -} - -void XPDFViewer::zoomMenuCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - XtPointer userData; - - XtVaGetValues(widget, XmNuserData, &userData, NULL); - if ((int)userData != viewer->core->getZoom()) { - viewer->displayPage(viewer->core->getPageNum(), (int)userData, - viewer->core->getRotate(), gTrue, gFalse); - } - viewer->core->takeFocus(); -} - -void XPDFViewer::findCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - - if (!viewer->core->getDoc()) { - return; - } - XtManageChild(viewer->findDialog); -} - -void XPDFViewer::printCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - - if (!viewer->core->getDoc()) { - return; - } - XtManageChild(viewer->printDialog); -} - -void XPDFViewer::aboutCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - - XtManageChild(viewer->aboutDialog); -} - -void XPDFViewer::quitCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - - viewer->app->quit(); -} - -void XPDFViewer::openCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - - viewer->mapOpenDialog(gFalse); -} - -void XPDFViewer::openInNewWindowCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - - viewer->mapOpenDialog(gTrue); -} - -void XPDFViewer::reloadCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - - viewer->reloadFile(); -} - -void XPDFViewer::saveAsCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - - if (!viewer->core->getDoc()) { - return; - } - viewer->mapSaveAsDialog(); -} - -void XPDFViewer::rotateCCWCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - int r; - - r = viewer->core->getRotate(); - r = (r == 0) ? 270 : r - 90; - viewer->displayPage(viewer->core->getPageNum(), viewer->core->getZoom(), - r, gTrue, gFalse); -} - -void XPDFViewer::rotateCWCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - int r; - - r = viewer->core->getRotate(); - r = (r == 270) ? 0 : r + 90; - viewer->displayPage(viewer->core->getPageNum(), viewer->core->getZoom(), - r, gTrue, gFalse); -} - -void XPDFViewer::closeCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - - viewer->app->close(viewer, gFalse); -} - -void XPDFViewer::closeMsgCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - - viewer->app->close(viewer, gTrue); -} - -void XPDFViewer::pageNumCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - char *s, *p; - int pg; - char buf[20]; - - if (!viewer->core->getDoc()) { - goto err; - } - s = XmTextFieldGetString(viewer->pageNumText); - for (p = s; *p; ++p) { - if (!isdigit(*p)) { - goto err; - } - } - pg = atoi(s); - if (pg < 1 || pg > viewer->core->getDoc()->getNumPages()) { - goto err; - } - viewer->displayPage(pg, viewer->core->getZoom(), - viewer->core->getRotate(), gFalse, gTrue); - viewer->core->takeFocus(); - return; - - err: - XBell(viewer->display, 0); - sprintf(buf, "%d", viewer->core->getPageNum()); - XmTextFieldSetString(viewer->pageNumText, buf); -} - -void XPDFViewer::updateCbk(void *data, GString *fileName, - int pageNum, int numPages, char *linkLabel) { - XPDFViewer *viewer = (XPDFViewer *)data; - GString *title; - char buf[20]; - XmString s; - - if (fileName) { - if (!(title = viewer->app->getTitle())) { - title = (new GString(xpdfAppName))->append(": ")->append(fileName); - } - XtVaSetValues(viewer->win, XmNtitle, title->getCString(), - XmNiconName, title->getCString(), NULL); - if (!viewer->app->getTitle()) { - delete title; - } -#ifndef DISABLE_OUTLINE - if (!viewer->app->getFullScreen()) { - viewer->setupOutline(); - } -#endif - viewer->setupPrintDialog(); - } - - if (pageNum >= 0) { - s = XmStringCreateLocalized(""); - XtVaSetValues(viewer->linkLabel, XmNlabelString, s, NULL); - XmStringFree(s); - sprintf(buf, "%d", pageNum); - XmTextFieldSetString(viewer->pageNumText, buf); - XtVaSetValues(viewer->prevTenPageBtn, XmNsensitive, - pageNum > 1, NULL); - XtVaSetValues(viewer->prevPageBtn, XmNsensitive, - pageNum > 1, NULL); - XtVaSetValues(viewer->nextTenPageBtn, XmNsensitive, - pageNum < viewer->core->getDoc()->getNumPages(), NULL); - XtVaSetValues(viewer->nextPageBtn, XmNsensitive, - pageNum < viewer->core->getDoc()->getNumPages(), NULL); - XtVaSetValues(viewer->backBtn, XmNsensitive, - viewer->core->canGoBack(), NULL); - XtVaSetValues(viewer->forwardBtn, XmNsensitive, - viewer->core->canGoForward(), NULL); - } - - if (numPages >= 0) { - sprintf(buf, " of %d", numPages); - s = XmStringCreateLocalized(buf); - XtVaSetValues(viewer->pageCountLabel, XmNlabelString, s, NULL); - XmStringFree(s); - } - - if (linkLabel) { - s = XmStringCreateLocalized(linkLabel); - XtVaSetValues(viewer->linkLabel, XmNlabelString, s, NULL); - XmStringFree(s); - } -} - - -//------------------------------------------------------------------------ -// GUI code: outline -//------------------------------------------------------------------------ - -#ifndef DISABLE_OUTLINE - -void XPDFViewer::setupOutline() { - GList *items; - UnicodeMap *uMap; - GString *enc; - int i; - - // unmanage and destroy the old labels - if (outlineLabels) { - XtUnmanageChildren(outlineLabels, outlineLabelsLength); - for (i = 0; i < outlineLabelsLength; ++i) { - XtDestroyWidget(outlineLabels[i]); - } - gfree(outlineLabels); - outlineLabels = NULL; - outlineLabelsLength = outlineLabelsSize = 0; - } - - // create the new labels - items = core->getDoc()->getOutline()->getItems(); - if (items && items->getLength() > 0) { - enc = new GString("Latin1"); - uMap = globalParams->getUnicodeMap(enc); - delete enc; - setupOutlineItems(items, NULL, uMap); - uMap->decRefCnt(); - } - - // manage the new labels - XtManageChildren(outlineLabels, outlineLabelsLength); -} - -void XPDFViewer::setupOutlineItems(GList *items, Widget parent, - UnicodeMap *uMap) { - OutlineItem *item; - GList *kids; - Widget label; - Arg args[20]; - GString *title; - char buf[8]; - XmString s; - int i, j, n; - - for (i = 0; i < items->getLength(); ++i) { - item = (OutlineItem *)items->get(i); - title = new GString(); - for (j = 0; j < item->getTitleLength(); ++j) { - n = uMap->mapUnicode(item->getTitle()[j], buf, sizeof(buf)); - title->append(buf, n); - } - n = 0; - XtSetArg(args[n], XPDFNentryPosition, i); ++n; - if (parent) { - XtSetArg(args[n], XPDFNentryParent, parent); ++n; - } - XtSetArg(args[n], XPDFNentryExpanded, item->isOpen()); ++n; - s = XmStringCreateLocalized(title->getCString()); - delete title; - XtSetArg(args[n], XmNlabelString, s); ++n; - XtSetArg(args[n], XmNuserData, item); ++n; - XtSetArg(args[n], XmNmarginWidth, 0); ++n; - XtSetArg(args[n], XmNmarginHeight, 2); ++n; - XtSetArg(args[n], XmNshadowThickness, 0); ++n; - XtSetArg(args[n], XmNforeground, - app->getReverseVideo() ? WhitePixel(display, screenNum) - : BlackPixel(display, screenNum)); ++n; - XtSetArg(args[n], XmNbackground, app->getPaperColor()); ++n; - label = XmCreateLabelGadget(outlineTree, "label", args, n); - XmStringFree(s); - if (outlineLabelsLength == outlineLabelsSize) { - outlineLabelsSize += 64; - outlineLabels = (Widget *)grealloc(outlineLabels, - outlineLabelsSize * sizeof(Widget *)); - } - outlineLabels[outlineLabelsLength++] = label; - item->open(); - if ((kids = item->getKids())) { - setupOutlineItems(kids, label, uMap); - } - } -} - -void XPDFViewer::outlineSelectCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - XPDFTreeSelectCallbackStruct *data = - (XPDFTreeSelectCallbackStruct *)callData; - OutlineItem *item; - - XtVaGetValues(data->selectedItem, XmNuserData, &item, NULL); - if (item) { - viewer->core->doAction(item->getAction()); - } - viewer->core->takeFocus(); -} - -#endif // !DISABLE_OUTLINE - -//------------------------------------------------------------------------ -// GUI code: "about" dialog -//------------------------------------------------------------------------ - -void XPDFViewer::initAboutDialog() { - Widget scrolledWin, col, label, sep, closeBtn; - Arg args[20]; - int n, i; - XmString s; - char buf[20]; - - //----- dialog - n = 0; - s = XmStringCreateLocalized(xpdfAppName ": About"); - XtSetArg(args[n], XmNdialogTitle, s); ++n; - XtSetArg(args[n], XmNwidth, 450); ++n; - XtSetArg(args[n], XmNheight, 300); ++n; - aboutDialog = XmCreateFormDialog(win, "aboutDialog", args, n); - XmStringFree(s); - - //----- "close" button - n = 0; - XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNrightOffset, 4); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomOffset, 4); ++n; - closeBtn = XmCreatePushButton(aboutDialog, "Close", args, n); - XtManageChild(closeBtn); - n = 0; - XtSetArg(args[n], XmNdefaultButton, closeBtn); ++n; - XtSetArg(args[n], XmNcancelButton, closeBtn); ++n; - XtSetValues(aboutDialog, args, n); - - //----- scrolled window and RowColumn - n = 0; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNbottomWidget, closeBtn); ++n; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNscrollingPolicy, XmAUTOMATIC); ++n; - scrolledWin = XmCreateScrolledWindow(aboutDialog, "scrolledWin", args, n); - XtManageChild(scrolledWin); - n = 0; - XtSetArg(args[n], XmNorientation, XmVERTICAL); ++n; - XtSetArg(args[n], XmNpacking, XmPACK_TIGHT); ++n; - col = XmCreateRowColumn(scrolledWin, "col", args, n); - XtManageChild(col); - - //----- fonts - aboutBigFont = XmFontListAppendEntry(NULL, - XmFontListEntryCreate(XmFONTLIST_DEFAULT_TAG, XmFONT_IS_FONT, - XLoadQueryFont(display, - "-*-times-bold-i-normal--20-*-*-*-*-*-iso8859-1"))); - aboutVersionFont = XmFontListAppendEntry(NULL, - XmFontListEntryCreate(XmFONTLIST_DEFAULT_TAG, XmFONT_IS_FONT, - XLoadQueryFont(display, - "-*-times-medium-r-normal--16-*-*-*-*-*-iso8859-1"))); - aboutFixedFont = XmFontListAppendEntry(NULL, - XmFontListEntryCreate(XmFONTLIST_DEFAULT_TAG, XmFONT_IS_FONT, - XLoadQueryFont(display, - "-*-courier-medium-r-normal--12-*-*-*-*-*-iso8859-1"))); - - //----- heading - n = 0; - s = XmStringCreateLocalized("Xpdf"); - XtSetArg(args[n], XmNlabelString, s); ++n; - XtSetArg(args[n], XmNfontList, aboutBigFont); ++n; - label = XmCreateLabel(col, "h0", args, n); - XmStringFree(s); - XtManageChild(label); - n = 0; - s = XmStringCreateLocalized("Version " xpdfVersion); - XtSetArg(args[n], XmNlabelString, s); ++n; - XtSetArg(args[n], XmNfontList, aboutVersionFont); ++n; - label = XmCreateLabel(col, "h1", args, n); - XmStringFree(s); - XtManageChild(label); - n = 0; - s = XmStringCreateLocalized(xpdfCopyright); - XtSetArg(args[n], XmNlabelString, s); ++n; - XtSetArg(args[n], XmNfontList, aboutVersionFont); ++n; - label = XmCreateLabel(col, "h2", args, n); - XmStringFree(s); - XtManageChild(label); - n = 0; - s = XmStringCreateLocalized(" "); - XtSetArg(args[n], XmNlabelString, s); ++n; - XtSetArg(args[n], XmNfontList, aboutVersionFont); ++n; - label = XmCreateLabel(col, "h3", args, n); - XmStringFree(s); - XtManageChild(label); - n = 0; - XtSetArg(args[n], XmNorientation, XmHORIZONTAL); ++n; - sep = XmCreateSeparator(col, "sep", args, n); - XtManageChild(sep); - n = 0; - s = XmStringCreateLocalized(" "); - XtSetArg(args[n], XmNlabelString, s); ++n; - XtSetArg(args[n], XmNfontList, aboutVersionFont); ++n; - label = XmCreateLabel(col, "h4", args, n); - XmStringFree(s); - XtManageChild(label); - n = 0; - - //----- text - for (i = 0; aboutWinText[i]; ++i) { - n = 0; - s = XmStringCreateLocalized(aboutWinText[i]); - XtSetArg(args[n], XmNlabelString, s); ++n; - XtSetArg(args[n], XmNfontList, aboutFixedFont); ++n; - sprintf(buf, "t%d", i); - label = XmCreateLabel(col, buf, args, n); - XtManageChild(label); - XmStringFree(s); - } -} - -//------------------------------------------------------------------------ -// GUI code: "open" dialog -//------------------------------------------------------------------------ - -void XPDFViewer::initOpenDialog() { - Arg args[20]; - int n; - XmString s1, s2, s3; - - n = 0; - s1 = XmStringCreateLocalized("Open"); - XtSetArg(args[n], XmNokLabelString, s1); ++n; - s2 = XmStringCreateLocalized("*.[Pp][Dd][Ff]"); - XtSetArg(args[n], XmNpattern, s2); ++n; - s3 = XmStringCreateLocalized(xpdfAppName ": Open"); - XtSetArg(args[n], XmNdialogTitle, s3); ++n; - XtSetArg(args[n], XmNdialogStyle, XmDIALOG_PRIMARY_APPLICATION_MODAL); ++n; - XtSetArg(args[n], XmNautoUnmanage, True); ++n; - openDialog = XmCreateFileSelectionDialog(win, "openDialog", args, n); - XmStringFree(s1); - XmStringFree(s2); - XmStringFree(s3); - XtUnmanageChild(XmFileSelectionBoxGetChild(openDialog, - XmDIALOG_HELP_BUTTON)); - XtAddCallback(openDialog, XmNokCallback, - &openOkCbk, (XtPointer)this); -} - -void XPDFViewer::setOpenDialogDir(char *dir) { - XmString s; - - s = XmStringCreateLocalized(dir); - XtVaSetValues(openDialog, XmNdirectory, s, NULL); - XmStringFree(s); -} - -void XPDFViewer::mapOpenDialog(GBool openInNewWindowA) { - openInNewWindow = openInNewWindowA; - XmFileSelectionDoSearch(openDialog, NULL); - XtManageChild(openDialog); -} - -void XPDFViewer::openOkCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - XmFileSelectionBoxCallbackStruct *data = - (XmFileSelectionBoxCallbackStruct *)callData; - char *fileName; - XmStringContext context; - XmStringCharSet charSet; - XmStringDirection dir; - Boolean sep; - GString *fileNameStr; - - XmStringInitContext(&context, data->value); - if (XmStringGetNextSegment(context, &fileName, &charSet, &dir, &sep)) { - fileNameStr = new GString(fileName); - if (viewer->openInNewWindow) { - viewer->app->open(fileNameStr); - } else { - if (viewer->loadFile(fileNameStr)) { - viewer->displayPage(1, viewer->core->getZoom(), - viewer->core->getRotate(), gTrue, gTrue); - } - } - delete fileNameStr; - XtFree(charSet); - XtFree(fileName); - } - XmStringFreeContext(context); -} - -//------------------------------------------------------------------------ -// GUI code: "find" dialog -//------------------------------------------------------------------------ - -void XPDFViewer::initFindDialog() { - Widget row1, label, okBtn, closeBtn; - Arg args[20]; - int n; - XmString s; - - //----- dialog - n = 0; - s = XmStringCreateLocalized(xpdfAppName ": Find"); - XtSetArg(args[n], XmNdialogTitle, s); ++n; - XtSetArg(args[n], XmNnavigationType, XmNONE); ++n; - XtSetArg(args[n], XmNautoUnmanage, False); ++n; - findDialog = XmCreateFormDialog(win, "findDialog", args, n); - XmStringFree(s); - - //----- top row: search string entry - n = 0; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNtopOffset, 4); ++n; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNorientation, XmHORIZONTAL); ++n; - XtSetArg(args[n], XmNpacking, XmPACK_TIGHT); ++n; - row1 = XmCreateRowColumn(findDialog, "row1", args, n); - XtManageChild(row1); - n = 0; - s = XmStringCreateLocalized("Find text: "); - XtSetArg(args[n], XmNlabelString, s); ++n; - label = XmCreateLabel(row1, "label", args, n); - XmStringFree(s); - XtManageChild(label); - n = 0; - XtSetArg(args[n], XmNnavigationType, XmEXCLUSIVE_TAB_GROUP); ++n; - findText = XmCreateTextField(row1, "text", args, n); - XtManageChild(findText); - - //----- "find" and "close" buttons - n = 0; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNtopWidget, row1); ++n; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNleftOffset, 4); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomOffset, 4); ++n; - XtSetArg(args[n], XmNnavigationType, XmEXCLUSIVE_TAB_GROUP); ++n; - okBtn = XmCreatePushButton(findDialog, "Find", args, n); - XtManageChild(okBtn); - XtAddCallback(okBtn, XmNactivateCallback, - &findFindCbk, (XtPointer)this); - n = 0; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNtopWidget, row1); ++n; - XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNrightOffset, 4); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomOffset, 4); ++n; - XtSetArg(args[n], XmNnavigationType, XmEXCLUSIVE_TAB_GROUP); ++n; - closeBtn = XmCreatePushButton(findDialog, "Close", args, n); - XtManageChild(closeBtn); - XtAddCallback(closeBtn, XmNactivateCallback, - &findCloseCbk, (XtPointer)this); - n = 0; - XtSetArg(args[n], XmNdefaultButton, okBtn); ++n; - XtSetArg(args[n], XmNcancelButton, closeBtn); ++n; - XtSetArg(args[n], XmNinitialFocus, findText); ++n; - XtSetValues(findDialog, args, n); -} - -void XPDFViewer::findFindCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - - viewer->core->find(XmTextFieldGetString(viewer->findText)); -} - -void XPDFViewer::findCloseCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - - XtUnmanageChild(viewer->findDialog); -} - -//------------------------------------------------------------------------ -// GUI code: "save as" dialog -//------------------------------------------------------------------------ - -void XPDFViewer::initSaveAsDialog() { - Arg args[20]; - int n; - XmString s1, s2, s3; - - n = 0; - s1 = XmStringCreateLocalized("Save"); - XtSetArg(args[n], XmNokLabelString, s1); ++n; - s2 = XmStringCreateLocalized("*.[Pp][Dd][Ff]"); - XtSetArg(args[n], XmNpattern, s2); ++n; - s3 = XmStringCreateLocalized(xpdfAppName ": Save as"); - XtSetArg(args[n], XmNdialogTitle, s3); ++n; - XtSetArg(args[n], XmNdialogStyle, XmDIALOG_PRIMARY_APPLICATION_MODAL); ++n; - XtSetArg(args[n], XmNautoUnmanage, True); ++n; - saveAsDialog = XmCreateFileSelectionDialog(win, "saveAsDialog", args, n); - XmStringFree(s1); - XmStringFree(s2); - XmStringFree(s3); - XtUnmanageChild(XmFileSelectionBoxGetChild(saveAsDialog, - XmDIALOG_HELP_BUTTON)); - XtAddCallback(saveAsDialog, XmNokCallback, - &saveAsOkCbk, (XtPointer)this); -} - -void XPDFViewer::setSaveAsDialogDir(char *dir) { - XmString s; - - s = XmStringCreateLocalized(dir); - XtVaSetValues(saveAsDialog, XmNdirectory, s, NULL); - XmStringFree(s); -} - -void XPDFViewer::mapSaveAsDialog() { - XmFileSelectionDoSearch(saveAsDialog, NULL); - XtManageChild(saveAsDialog); -} - -void XPDFViewer::saveAsOkCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - XmFileSelectionBoxCallbackStruct *data = - (XmFileSelectionBoxCallbackStruct *)callData; - char *fileName; - GString *fileNameStr; - XmStringContext context; - XmStringCharSet charSet; - XmStringDirection dir; - Boolean sep; - - XmStringInitContext(&context, data->value); - if (XmStringGetNextSegment(context, &fileName, &charSet, &dir, &sep)) { - fileNameStr = new GString(fileName); - viewer->core->getDoc()->saveAs(fileNameStr); - delete fileNameStr; - XtFree(charSet); - XtFree(fileName); - } - XmStringFreeContext(context); -} - -//------------------------------------------------------------------------ -// GUI code: "print" dialog -//------------------------------------------------------------------------ - -void XPDFViewer::initPrintDialog() { - Widget sep1, sep2, row, label1, label2, okBtn, cancelBtn; - Arg args[20]; - int n; - XmString s; - - //----- dialog - n = 0; - s = XmStringCreateLocalized(xpdfAppName ": Print"); - XtSetArg(args[n], XmNdialogTitle, s); ++n; - XtSetArg(args[n], XmNdialogStyle, XmDIALOG_PRIMARY_APPLICATION_MODAL); ++n; - printDialog = XmCreateFormDialog(win, "printDialog", args, n); - XmStringFree(s); - - //----- "print with command" - n = 0; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNtopOffset, 4); ++n; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNindicatorType, XmONE_OF_MANY); ++n; - XtSetArg(args[n], XmNset, XmSET); ++n; - s = XmStringCreateLocalized("Print with command:"); - XtSetArg(args[n], XmNlabelString, s); ++n; - printWithCmdBtn = XmCreateToggleButton(printDialog, "printWithCmd", args, n); - XmStringFree(s); - XtManageChild(printWithCmdBtn); - XtAddCallback(printWithCmdBtn, XmNvalueChangedCallback, - &printWithCmdBtnCbk, (XtPointer)this); - n = 0; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNtopWidget, printWithCmdBtn); ++n; - XtSetArg(args[n], XmNtopOffset, 2); ++n; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNleftOffset, 16); ++n; - XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNrightOffset, 4); ++n; - XtSetArg(args[n], XmNcolumns, 40); ++n; - printCmdText = XmCreateTextField(printDialog, "printCmd", args, n); - XtManageChild(printCmdText); - - //----- "print with command" - n = 0; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNtopWidget, printCmdText); ++n; - XtSetArg(args[n], XmNtopOffset, 4); ++n; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNindicatorType, XmONE_OF_MANY); ++n; - XtSetArg(args[n], XmNset, XmUNSET); ++n; - s = XmStringCreateLocalized("Print to file:"); - XtSetArg(args[n], XmNlabelString, s); ++n; - printToFileBtn = XmCreateToggleButton(printDialog, "printToFile", args, n); - XmStringFree(s); - XtManageChild(printToFileBtn); - XtAddCallback(printToFileBtn, XmNvalueChangedCallback, - &printToFileBtnCbk, (XtPointer)this); - n = 0; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNtopWidget, printToFileBtn); ++n; - XtSetArg(args[n], XmNtopOffset, 2); ++n; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNleftOffset, 16); ++n; - XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNrightOffset, 4); ++n; - XtSetArg(args[n], XmNcolumns, 40); ++n; - XtSetArg(args[n], XmNsensitive, False); ++n; - printFileText = XmCreateTextField(printDialog, "printFile", args, n); - XtManageChild(printFileText); - - //----- separator - n = 0; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNtopWidget, printFileText); ++n; - XtSetArg(args[n], XmNtopOffset, 8); ++n; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNleftOffset, 8); ++n; - XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNrightOffset, 8); ++n; - XtSetArg(args[n], XmNorientation, XmHORIZONTAL); ++n; - sep1 = XmCreateSeparator(printDialog, "sep1", args, n); - XtManageChild(sep1); - - //----- page range - n = 0; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNtopWidget, sep1); ++n; - XtSetArg(args[n], XmNtopOffset, 8); ++n; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNleftOffset, 4); ++n; - XtSetArg(args[n], XmNorientation, XmHORIZONTAL); ++n; - XtSetArg(args[n], XmNpacking, XmPACK_TIGHT); ++n; - row = XmCreateRowColumn(printDialog, "row", args, n); - XtManageChild(row); - n = 0; - s = XmStringCreateLocalized("Pages:"); - XtSetArg(args[n], XmNlabelString, s); ++n; - label1 = XmCreateLabel(row, "label1", args, n); - XmStringFree(s); - XtManageChild(label1); - n = 0; - XtSetArg(args[n], XmNcolumns, 5); ++n; - printFirstPage = XmCreateTextField(row, "printFirstPage", args, n); - XtManageChild(printFirstPage); - n = 0; - s = XmStringCreateLocalized("to"); - XtSetArg(args[n], XmNlabelString, s); ++n; - label2 = XmCreateLabel(row, "label2", args, n); - XmStringFree(s); - XtManageChild(label2); - n = 0; - XtSetArg(args[n], XmNcolumns, 5); ++n; - printLastPage = XmCreateTextField(row, "printLastPage", args, n); - XtManageChild(printLastPage); - - //----- separator - n = 0; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNtopWidget, row); ++n; - XtSetArg(args[n], XmNtopOffset, 8); ++n; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNleftOffset, 8); ++n; - XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNrightOffset, 8); ++n; - XtSetArg(args[n], XmNorientation, XmHORIZONTAL); ++n; - sep2 = XmCreateSeparator(printDialog, "sep2", args, n); - XtManageChild(sep2); - - //----- "print" and "cancel" buttons - n = 0; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNtopWidget, sep2); ++n; - XtSetArg(args[n], XmNtopOffset, 8); ++n; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNleftOffset, 4); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomOffset, 4); ++n; - okBtn = XmCreatePushButton(printDialog, "Print", args, n); - XtManageChild(okBtn); - XtAddCallback(okBtn, XmNactivateCallback, - &printPrintCbk, (XtPointer)this); - n = 0; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNtopWidget, sep2); ++n; - XtSetArg(args[n], XmNtopOffset, 8); ++n; - XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNrightOffset, 4); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomOffset, 4); ++n; - cancelBtn = XmCreatePushButton(printDialog, "Cancel", args, n); - XtManageChild(cancelBtn); - n = 0; - XtSetArg(args[n], XmNdefaultButton, okBtn); ++n; - XtSetArg(args[n], XmNcancelButton, cancelBtn); ++n; - XtSetValues(printDialog, args, n); -} - -void XPDFViewer::setupPrintDialog() { - PDFDoc *doc; - char buf[20]; - GString *pdfFileName, *psFileName; - char *p; - - doc = core->getDoc(); - - psFileName = globalParams->getPSFile(); - if (psFileName && psFileName->getChar(0) != '|') { - XmTextFieldSetString(printFileText, psFileName->getCString()); - } else { - pdfFileName = doc->getFileName(); - p = pdfFileName->getCString() + pdfFileName->getLength() - 4; - if (!strcmp(p, ".pdf") || !strcmp(p, ".PDF")) { - psFileName = new GString(pdfFileName->getCString(), - pdfFileName->getLength() - 4); - } else { - psFileName = pdfFileName->copy(); - } - psFileName->append(".ps"); - XmTextFieldSetString(printFileText, psFileName->getCString()); - delete psFileName; - } - - psFileName = globalParams->getPSFile(); - if (psFileName && psFileName->getChar(0) == '|') { - XmTextFieldSetString(printCmdText, - psFileName->getCString() + 1); - } - - sprintf(buf, "%d", doc->getNumPages()); - XmTextFieldSetString(printFirstPage, "1"); - XmTextFieldSetString(printLastPage, buf); -} - -void XPDFViewer::printWithCmdBtnCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - XmToggleButtonCallbackStruct *data = - (XmToggleButtonCallbackStruct *)callData; - - if (data->set != XmSET) { - XmToggleButtonSetState(viewer->printWithCmdBtn, True, False); - } - XmToggleButtonSetState(viewer->printToFileBtn, False, False); - XtVaSetValues(viewer->printCmdText, XmNsensitive, True, NULL); - XtVaSetValues(viewer->printFileText, XmNsensitive, False, NULL); -} - -void XPDFViewer::printToFileBtnCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - XmToggleButtonCallbackStruct *data = - (XmToggleButtonCallbackStruct *)callData; - - if (data->set != XmSET) { - XmToggleButtonSetState(viewer->printToFileBtn, True, False); - } - XmToggleButtonSetState(viewer->printWithCmdBtn, False, False); - XtVaSetValues(viewer->printFileText, XmNsensitive, True, NULL); - XtVaSetValues(viewer->printCmdText, XmNsensitive, False, NULL); -} - -void XPDFViewer::printPrintCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - unsigned char withCmd; - GString *psFileName; - int firstPage, lastPage; - PDFDoc *doc; - PSOutputDev *psOut; - - doc = viewer->core->getDoc(); - if (!doc->okToPrint()) { - error(-1, "Printing this document is not allowed."); - return; - } - - viewer->core->setBusyCursor(gTrue); - - XtVaGetValues(viewer->printWithCmdBtn, XmNset, &withCmd, NULL); - if (withCmd) { - psFileName = new GString(XmTextFieldGetString(viewer->printCmdText)); - psFileName->insert(0, '|'); - } else { - psFileName = new GString(XmTextFieldGetString(viewer->printFileText)); - } - - firstPage = atoi(XmTextFieldGetString(viewer->printFirstPage)); - lastPage = atoi(XmTextFieldGetString(viewer->printLastPage)); - if (firstPage < 1) { - firstPage = 1; - } else if (firstPage > doc->getNumPages()) { - firstPage = doc->getNumPages(); - } - if (lastPage < firstPage) { - lastPage = firstPage; - } else if (lastPage > doc->getNumPages()) { - lastPage = doc->getNumPages(); - } - - psOut = new PSOutputDev(psFileName->getCString(), doc->getXRef(), - doc->getCatalog(), firstPage, lastPage, - psModePS); - if (psOut->isOk()) { - doc->displayPages(psOut, firstPage, lastPage, 72, 0, gFalse); - } - delete psOut; - delete psFileName; - - viewer->core->setBusyCursor(gFalse); -} - -//------------------------------------------------------------------------ -// GUI code: password dialog -//------------------------------------------------------------------------ - -void XPDFViewer::initPasswordDialog() { - Widget row, label, okBtn, cancelBtn; - Arg args[20]; - int n; - XmString s; - - //----- dialog - n = 0; - s = XmStringCreateLocalized(xpdfAppName ": Password"); - XtSetArg(args[n], XmNdialogTitle, s); ++n; - XtSetArg(args[n], XmNdialogStyle, XmDIALOG_PRIMARY_APPLICATION_MODAL); ++n; - passwordDialog = XmCreateFormDialog(win, "passwordDialog", args, n); - XmStringFree(s); - - //----- message - n = 0; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNtopOffset, 4); ++n; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNleftOffset, 4); ++n; - s = XmStringCreateLocalized(" "); - XtSetArg(args[n], XmNlabelString, s); ++n; - passwordMsg = XmCreateLabel(passwordDialog, "msg", args, n); - XmStringFree(s); - XtManageChild(passwordMsg); - - //----- label and password entry - n = 0; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNtopWidget, passwordMsg); ++n; - XtSetArg(args[n], XmNtopOffset, 4); ++n; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNleftOffset, 4); ++n; - XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNleftOffset, 4); ++n; - XtSetArg(args[n], XmNorientation, XmHORIZONTAL); ++n; - XtSetArg(args[n], XmNpacking, XmPACK_TIGHT); ++n; - row = XmCreateRowColumn(passwordDialog, "row", args, n); - XtManageChild(row); - n = 0; - s = XmStringCreateLocalized("Password: "); - XtSetArg(args[n], XmNlabelString, s); ++n; - label = XmCreateLabel(row, "label", args, n); - XmStringFree(s); - XtManageChild(label); - n = 0; - XtSetArg(args[n], XmNcolumns, 16); ++n; - passwordText = XmCreateTextField(row, "text", args, n); - XtManageChild(passwordText); - XtAddCallback(passwordText, XmNmodifyVerifyCallback, - &passwordTextVerifyCbk, this); - - //----- "Ok" and "Cancel" buttons - n = 0; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNtopWidget, row); ++n; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNleftOffset, 4); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomOffset, 4); ++n; - XtSetArg(args[n], XmNnavigationType, XmEXCLUSIVE_TAB_GROUP); ++n; - okBtn = XmCreatePushButton(passwordDialog, "Ok", args, n); - XtManageChild(okBtn); - XtAddCallback(okBtn, XmNactivateCallback, - &passwordOkCbk, (XtPointer)this); - n = 0; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNtopWidget, row); ++n; - XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNrightOffset, 4); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomOffset, 4); ++n; - XtSetArg(args[n], XmNnavigationType, XmEXCLUSIVE_TAB_GROUP); ++n; - cancelBtn = XmCreatePushButton(passwordDialog, "Cancel", args, n); - XtManageChild(cancelBtn); - XtAddCallback(cancelBtn, XmNactivateCallback, - &passwordCancelCbk, (XtPointer)this); - n = 0; - XtSetArg(args[n], XmNdefaultButton, okBtn); ++n; - XtSetArg(args[n], XmNcancelButton, cancelBtn); ++n; - XtSetArg(args[n], XmNinitialFocus, passwordText); ++n; - XtSetValues(passwordDialog, args, n); -} - -void XPDFViewer::passwordTextVerifyCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - XmTextVerifyCallbackStruct *data = - (XmTextVerifyCallbackStruct *)callData; - int i, n; - - i = (int)data->startPos; - n = (int)data->endPos - i; - if (i > viewer->password->getLength()) { - i = viewer->password->getLength(); - } - if (i + n > viewer->password->getLength()) { - n = viewer->password->getLength() - i; - } - viewer->password->del(i, n); - viewer->password->insert(i, data->text->ptr, data->text->length); - - for (i = 0; i < data->text->length; ++i) { - data->text->ptr[i] = '*'; - } - data->doit = True; -} - -void XPDFViewer::passwordOkCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - - viewer->passwordDone = 1; -} - -void XPDFViewer::passwordCancelCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - - viewer->passwordDone = -1; -} - -void XPDFViewer::getPassword(GBool again) { - XmString s; - XEvent event; - - if (password) { - delete password; - } - password = new GString(); - - XmTextFieldSetString(passwordText, ""); - s = XmStringCreateLocalized( - again ? (char *)"Incorrect password. Please try again." - : (char *)"This document requires a password."); - XtVaSetValues(passwordMsg, XmNlabelString, s, NULL); - XmStringFree(s); - XtManageChild(passwordDialog); - passwordDone = 0; - do { - XtAppNextEvent(app->getAppContext(), &event); - XtDispatchEvent(&event); - } while (!passwordDone); - - if (passwordDone < 0) { - delete password; - password = NULL; - } -} |