📄 xpdfviewer.cc
字号:
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_OUTLINEvoid 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]; XmFontListEntry entry; //----- 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 entry = XmFontListEntryLoad( display, "-*-times-bold-i-normal--20-*-*-*-*-*-iso8859-1", XmFONT_IS_FONT, XmFONTLIST_DEFAULT_TAG); aboutBigFont = XmFontListAppendEntry(NULL, entry); XmFontListEntryFree(&entry); entry = XmFontListEntryLoad( display, "-*-times-medium-r-normal--16-*-*-*-*-*-iso8859-1", XmFONT_IS_FONT, XmFONTLIST_DEFAULT_TAG); aboutVersionFont = XmFontListAppendEntry(NULL, entry); XmFontListEntryFree(&entry); entry = XmFontListEntryLoad( display, "-*-courier-medium-r-normal--12-*-*-*-*-*-iso8859-1", XmFONT_IS_FONT, XmFONTLIST_DEFAULT_TAG); aboutFixedFont = XmFontListAppendEntry(NULL, entry); XmFontListEntryFree(&entry); //----- heading n = 0; s = XmStringCreateLocalized("Xpdf"); XtSetArg(args[n], XmNlabelString, s); ++n; XtSetArg(args[n], XmNfontList, aboutBigFont); ++n; label = XmCreateLabel(col, "h0", args, n);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -