📄 xpdfviewer.cc
字号:
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->getPaperPixel()); ++n; label = XmCreateLabelGadget(outlineTree, "label", args, n); XmStringFree(s); if (outlineLabelsLength == outlineLabelsSize) { outlineLabelsSize += 64; outlineLabels = (Widget *)greallocn(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) { if (item->getAction()) { 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 = createFontList("-*-times-bold-i-normal--20-*-*-*-*-*-iso8859-1"); aboutVersionFont = createFontList("-*-times-medium-r-normal--16-*-*-*-*-*-iso8859-1"); aboutFixedFont = createFontList("-*-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; GString *dir; 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); if (core->getDoc() && core->getDoc()->getFileName()) { dir = makePathAbsolute(grabPath( core->getDoc()->getFileName()->getCString())); s1 = XmStringCreateLocalized(dir->getCString()); XtVaSetValues(openDialog, XmNdirectory, s1, NULL); XmStringFree(s1); delete dir; }}void XPDFViewer::mapOpenDialog(GBool openInNewWindowA) { if (!openDialog) { initOpenDialog(); } 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 form1, 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); //----- "find" and "close" buttons n = 0; 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], 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); //----- checkboxes n = 0; XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; XtSetArg(args[n], XmNleftOffset, 4); ++n; XtSetArg(args[n], XmNbottomAttachment, XmATTACH_WIDGET); ++n; XtSetArg(args[n], XmNbottomWidget, okBtn); ++n; XtSetArg(args[n], XmNindicatorType, XmN_OF_MANY); ++n;#if XmVERSION <= 1 XtSetArg(args[n], XmNindicatorOn, True); ++n;#else XtSetArg(args[n], XmNindicatorOn, XmINDICATOR_FILL); ++n;#endif XtSetArg(args[n], XmNset, XmUNSET); ++n; s = XmStringCreateLocalized("Search backward"); XtSetArg(args[n], XmNlabelString, s); ++n; findBackwardToggle = XmCreateToggleButton(findDialog, "backward", args, n); XmStringFree(s); XtManageChild(findBackwardToggle); n = 0; XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); ++n; XtSetArg(args[n], XmNleftWidget, findBackwardToggle); ++n; XtSetArg(args[n], XmNleftOffset, 16); ++n; XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n; XtSetArg(args[n], XmNrightOffset, 4); ++n; XtSetArg(args[n], XmNbottomAttachment, XmATTACH_WIDGET); ++n; XtSetArg(args[n], XmNbottomWidget, okBtn); ++n; XtSetArg(args[n], XmNindicatorType, XmN_OF_MANY); ++n;#if XmVERSION <= 1 XtSetArg(args[n], XmNindicatorOn, True); ++n;#else XtSetArg(args[n], XmNindicatorOn, XmINDICATOR_FILL); ++n;#endif XtSetArg(args[n], XmNset, XmUNSET); ++n; s = XmStringCreateLocalized("Match case"); XtSetArg(args[n], XmNlabelString, s); ++n; findCaseSensitiveToggle = XmCreateToggleButton(findDialog, "matchCase", args, n); XmStringFree(s); XtManageChild(findCaseSensitiveToggle); //----- search string entry n = 0; XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; XtSetArg(args[n], XmNtopOffset, 4); ++n; XtSetArg(args[n], XmNbottomAttachment, XmATTACH_WIDGET); ++n; XtSetArg(args[n], XmNbottomWidget, findBackwardToggle); ++n; XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; XtSetArg(args[n], XmNleftOffset, 2); ++n; XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n; XtSetArg(args[n], XmNrightOffset, 2); ++n; form1 = XmCreateForm(findDialog, "form", args, n); XtManageChild(form1); n = 0; XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; s = XmStringCreateLocalized("Find text: "); XtSetArg(args[n], XmNlabelString, s); ++n; label = XmCreateLabel(form1, "label", args, n); XmStringFree(s); XtManageChild(label); n = 0; XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); ++n; XtSetArg(args[n], XmNleftWidget, label); ++n; XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n; findText = XmCreateTextField(form1, "text", args, n); XtManageChild(findText);#ifdef LESSTIF_VERSION XtAddCallback(findText, XmNactivateCallback, &findFindCbk, (XtPointer)this);#endif //----- dialog parameters n = 0; XtSetArg(args[n], XmNdefaultButton, okBtn); ++n; XtSetArg(args[n], XmNcancelButton, closeBtn); ++n;#if XmVersion > 1001 XtSetArg(args[n], XmNinitialFocus, findText); ++n;#endif XtSetValues(findDialog, args, n);}void XPDFViewer::findFindCbk(Widget widget, XtPointer ptr, XtPointer callData) { XPDFViewer *viewer = (XPDFViewer *)ptr; viewer->doFind(gFalse);}void XPDFViewer::mapFindDialog() { XmTextFieldSetSelection(findText, 0, XmTextFieldGetLastPosition(findText), XtLastTimestampProcessed(display)); XmTextFieldSetInsertionPosition(findText, 0); XtManageChild(findDialog);}void XPDFViewer::doFind(GBool next) { if (XtWindow(findDialog)) { XDefineCursor(display, XtWindow(findDialog), core->getBusyCursor()); } core->find(XmTextFieldGetString(findText), XmToggleButtonGetState(findCaseSensitiveToggle), next, XmToggleButtonGetState(findBackwardToggle), gFalse); if (XtWindow(findDialog)) { XUndefineCursor(display, XtWindow(findDialog)); }}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; GString *dir; 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,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -