📄 xpdfviewer.cc
字号:
XtVaGetValues(zoomMenu, XmNmenuHistory, &w, NULL); for (i = 0; i < nZoomMenuItems; ++i) { if (w == zoomMenuBtns[i]) { return i; } } // this should never happen return 0;#endif}void XPDFViewer::setZoomIdx(int idx) {#if USE_COMBO_BOX XtVaSetValues(zoomComboBox, XmNselectedPosition, idx + 1, NULL);#else XtVaSetValues(zoomMenu, XmNmenuHistory, zoomMenuBtns[idx], NULL);#endif}void XPDFViewer::setZoomVal(double z) {#if USE_COMBO_BOX char buf[32]; XmString s; int i; for (i = 0; i < nZoomMenuItems; ++i) { if (z == zoomMenuInfo[i].zoom) { XtVaSetValues(zoomComboBox, XmNselectedPosition, i + 1, NULL); return; } } sprintf(buf, "%d", (int)z); s = XmStringCreateLocalized(buf); XtVaSetValues(zoomComboBox, XmNselectedItem, s, NULL); XmStringFree(s);#else int i; for (i = 0; i < nZoomMenuItems; ++i) { if (z == zoomMenuInfo[i].zoom) { XtVaSetValues(zoomMenu, XmNmenuHistory, zoomMenuBtns[i], NULL); return; } } for (i = maxZoomIdx; i < minZoomIdx; ++i) { if (z > zoomMenuInfo[i].zoom) { break; } } XtVaSetValues(zoomMenu, XmNmenuHistory, zoomMenuBtns[i], NULL);#endif}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();}#if USE_COMBO_BOXvoid XPDFViewer::zoomComboBoxCbk(Widget widget, XtPointer ptr, XtPointer callData) { XPDFViewer *viewer = (XPDFViewer *)ptr; XmComboBoxCallbackStruct *data = (XmComboBoxCallbackStruct *)callData; double z; char *s; XmStringContext context; XmStringCharSet charSet; XmStringDirection dir; Boolean sep; z = viewer->core->getZoom(); if (data->item_position == 0) { XmStringInitContext(&context, data->item_or_text); if (XmStringGetNextSegment(context, &s, &charSet, &dir, &sep)) { z = atof(s); if (z <= 1) { z = defZoom; } XtFree(charSet); XtFree(s); } XmStringFreeContext(context); } else { z = zoomMenuInfo[data->item_position - 1].zoom; } // only redraw if this was triggered by an event; otherwise // the caller is responsible for doing the redraw if (z != viewer->core->getZoom() && data->event) { viewer->displayPage(viewer->core->getPageNum(), z, viewer->core->getRotate(), gTrue, gFalse); } viewer->core->takeFocus();}#else // USE_COMBO_BOXvoid XPDFViewer::zoomMenuCbk(Widget widget, XtPointer ptr, XtPointer callData) { XPDFViewer *viewer = (XPDFViewer *)ptr; XmPushButtonCallbackStruct *data = (XmPushButtonCallbackStruct *)callData; XtPointer userData; double z; XtVaGetValues(widget, XmNuserData, &userData, NULL); z = zoomMenuInfo[(long)userData].zoom; // only redraw if this was triggered by an event; otherwise // the caller is responsible for doing the redraw if (z != viewer->core->getZoom() && data->event) { viewer->displayPage(viewer->core->getPageNum(), z, viewer->core->getRotate(), gTrue, gFalse); } viewer->core->takeFocus();}#endif // USE_COMBO_BOXvoid XPDFViewer::findCbk(Widget widget, XtPointer ptr, XtPointer callData) { XPDFViewer *viewer = (XPDFViewer *)ptr; if (!viewer->core->getDoc()) { return; } viewer->mapFindDialog();}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::continuousModeToggleCbk(Widget widget, XtPointer ptr, XtPointer callData) { XPDFViewer *viewer = (XPDFViewer *)ptr; XmToggleButtonCallbackStruct *data = (XmToggleButtonCallbackStruct *)callData; viewer->core->setContinuousMode(data->set == XmSET);}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 *linkString) { 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 (linkString) { s = XmStringCreateLocalized(linkString); 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; } if (core->getDoc()) { // 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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -