📄 gvccmd.c
字号:
/* Copyright (C) 1993-2003, Ghostgum Software Pty Ltd. All rights reserved.
This file is part of GSview.
This program is distributed with NO WARRANTY OF ANY KIND. No author
or distributor accepts any responsibility for the consequences of using it,
or for whether it serves any particular purpose or works at all, unless he
or she says so in writing. Refer to the GSview Licence (the "Licence")
for full details.
Every copy of GSview must include a copy of the Licence, normally in a
plain ASCII text file named LICENCE. The Licence grants you the right
to copy, modify and redistribute GSview, but only under certain conditions
described in the Licence. Among other things, the Licence requires that
the copyright notice and this notice be preserved on all copies.
*/
/* gvccmd.c */
/* Menu command module of PM and Windows GSview */
#include "gvc.h"
void gsview_drawmethod(int new_drawmethod);
BOOL gsview_usersize(void);
void gsview_unzoom(void);
/* gsview menu commands */
int
gsview_command(int command)
{
switch (command) {
case IDM_NEXTHOME:
case IDM_NEXT:
case IDM_NEXTSKIP:
case IDM_REDISPLAY:
case IDM_PREVHOME:
case IDM_PREVSKIP:
case IDM_PREV:
case IDM_GOBACK:
case IDM_GOFWD:
case IDM_MAGPLUS:
case IDM_MAGMINUS:
case IDM_FITWIN:
case IDM_ZOOM:
case IDM_FULLSCREEN:
/* These don't close the full screen window */
break;
default:
gsview_fullscreen_end();
}
switch (command) {
case IDM_FULLSCREEN:
gsview_fullscreen();
return 0;
case IDM_OPEN:
if (pending.psfile) {
play_sound(SOUND_BUSY);
return 0;
}
gsview_display();
return 0;
case IDM_LASTFILE1:
case IDM_LASTFILE2:
case IDM_LASTFILE3:
case IDM_LASTFILE4:
if (pending.psfile) {
play_sound(SOUND_BUSY);
return 0;
}
make_cwd(last_files[command-IDM_LASTFILE1]);
gsview_displayfile(last_files[command-IDM_LASTFILE1]);
return 0;
case IDM_CLOSE:
/* doesn't unload DLL */
/* close file */
if (gsdll.open && (gsdll.state != GS_UNINIT)) {
PSFILE *tpsfile;
if (pending.psfile) {
play_sound(SOUND_BUSY);
return 0;
}
tpsfile = (PSFILE *)malloc(sizeof(PSFILE));
if (tpsfile == NULL)
return 0;
memset((char *)tpsfile, 0, sizeof(PSFILE));
pending.psfile = tpsfile;
pending.now = TRUE;
if (psfile.name[0] && psfile.dsc==(CDSC *)NULL)
pending.abort = TRUE;
}
else {
/* DLL isn't loaded */
if (psfile.file)
dfclose(); /* just to make sure */
psfile_free(&psfile);
post_img_message(WM_GSTITLE, 0);
info_wait(IDS_NOWAIT);
}
return 0;
case IDM_CLOSE_DONE:
if (selectname[0] != '\0') {
/* pending IDM_SELECT */
PSFILE *tpsfile;
tpsfile = gsview_openfile(selectname);
if (tpsfile) {
psfile = *tpsfile;
free(tpsfile);
}
selectname[0] = '\0';
post_img_message(WM_GSTITLE, 0);
info_wait(IDS_NOWAIT);
}
return 0;
case IDM_NEXTHOME:
#ifdef UNIX
set_scroll(-1, 0);
#else
#ifdef _Windows
PostMessage(hwnd_image ,WM_VSCROLL,SB_TOP,0L);
#else
WinPostMsg(hwnd_frame, WM_VSCROLL, MPFROMLONG(0), MPFROM2SHORT(0, SB_TOP));
#endif
#endif
/* fall thru */
case IDM_NEXT:
if (not_open())
return 0;
gs_page_skip(1);
return 0;
case IDM_NEXTSKIP:
if (not_dsc())
return 0;
if (order_is_special())
return 0;
gs_page_skip(page_skip);
return 0;
case IDM_REDISPLAY:
if (dfchanged()) {
PSFILE *tpsfile;
if (dfchanged() < 0) {
gs_addmess("File has been deleted\n");
gsview_command(IDM_CLOSE);
pending.unload = TRUE;
pending.now = FALSE;
return 0;
}
if (pending.psfile)
tpsfile = pending.psfile; /* new file, old file deleted */
else
tpsfile = gsview_openfile(psfile.name);
if (tpsfile) {
tpsfile->pagenum = psfile.pagenum;
request_mutex();
pending.psfile = tpsfile;
if ( gsdll.hmodule && (psfile.dsc==(CDSC *)NULL) &&
(gsdll.state != GS_IDLE) )
/* don't know where we are so close and reopen */
pending.abort = TRUE;
pending.now = TRUE;
release_mutex();
}
}
if (not_open())
return 0;
if (psfile.dsc==(CDSC *)NULL) {
/* don't know where we are so close and reopen */
if (gsdll.state != GS_IDLE) {
if (!pending.psfile) {
pending.psfile = (PSFILE *)malloc(sizeof(PSFILE));
if (pending.psfile)
*pending.psfile = psfile;
}
pending.psfile->pagenum = pending.pagenum = 1;
pending.abort = TRUE;
pending.now = TRUE;
}
}
else {
pending.pagenum = -1; /* default page number is current page */
if (psfile.dsc->page_order == CDSC_SPECIAL)
pending.pagenum = 1; /* restart */
}
gsview_unzoom();
pending.now = TRUE;
return 0;
case IDM_PREVHOME:
#ifdef UNIX
set_scroll(-1, 0);
#else
#ifdef _Windows
PostMessage(hwnd_image ,WM_VSCROLL,SB_TOP,0L);
#else
WinPostMsg(hwnd_frame, WM_VSCROLL, MPFROMLONG(0), MPFROM2SHORT(0, SB_TOP));
#endif
#endif
/* fall thru */
case IDM_PREV:
if (not_dsc())
return 0;
if (order_is_special())
return 0;
gs_page_skip(-1);
return 0;
case IDM_PREVSKIP:
if (not_dsc())
return 0;
if (order_is_special())
return 0;
gs_page_skip(-page_skip);
return 0;
case IDM_GOTO:
if (not_dsc())
return 0;
if (order_is_special())
return 0;
if (psfile.dsc->page_count == 0) {
gserror(IDS_NOPAGE, NULL, MB_ICONEXCLAMATION, SOUND_NONUMBER);
return 0;
}
nHelpTopic = IDS_TOPICGOTO;
{ int pagenum;
pagenum = psfile.pagenum;
if (get_page(&pagenum, FALSE, FALSE)) {
gsview_goto_page(pagenum);
}
}
return 0;
case IDM_GOBACK:
if (not_dsc())
return 0;
if (order_is_special())
return 0;
history_back();
return 0;
case IDM_GOFWD:
if (not_open())
return 0;
if (psfile.dsc == (CDSC *)NULL)
gsview_command(IDM_NEXT);
else
history_forward();
return 0;
case IDM_INFO:
show_info();
return 0;
case IDM_SELECT:
if (pending.psfile) {
play_sound(SOUND_BUSY);
return 0;
}
gsview_select();
return 0;
#ifndef VIEWONLY
case IDM_PRINT:
case IDM_PRINTTOFILE:
case IDM_CONVERTFILE:
if (psfile.name[0] == '\0')
gsview_select();
if (gsdll.state == GS_BUSY) {
play_sound(SOUND_BUSY);
return 0;
}
if (dfreopen() != 0)
return 0;
if (command == IDM_PRINTTOFILE)
option.print_to_file = TRUE;
if (psfile.name[0] != '\0')
gsview_print(command == IDM_CONVERTFILE);
dfclose();
return 0;
case IDM_SPOOL:
gsview_spool((char *)NULL, (char *)NULL);
return 0;
case IDM_SAVEAS:
if (gsdll.state == GS_BUSY) {
play_sound(SOUND_BUSY);
return 0;
}
if (psfile.name[0] == '\0')
gsview_select();
if (psfile.name[0] != '\0')
gsview_saveas();
return 0;
case IDM_EXTRACT:
if (gsdll.state == GS_BUSY) {
play_sound(SOUND_BUSY);
return 0;
}
if (psfile.name[0] == '\0')
gsview_select();
if (order_is_special())
return 0;
if (psfile.name[0] != '\0')
gsview_extract();
return 0;
case IDM_PSTOEDIT:
if (gsdll.state == GS_BUSY) {
play_sound(SOUND_BUSY);
return 0;
}
if (psfile.name[0] == '\0')
gsview_select();
(void)order_is_special(); /* warn, but allow it anyway */
if (dfreopen() != 0)
return 0;
if (psfile.name[0] != '\0')
gsview_pstoedit();
dfclose();
return 0;
case IDM_TEXTEXTRACT:
if (psfile.name[0] == '\0')
gsview_select();
if (psfile.name[0] != '\0')
gsview_text_extract();
return 0;
case IDM_TEXTEXTRACT_SLOW:
gsview_text_extract_slow();
return 0;
case IDM_TEXTFIND:
gsview_text_find();
return 0;
case IDM_TEXTFINDNEXT:
gsview_text_findnext();
return 0;
case IDM_COPYCLIP:
copy_clipboard();
return 0;
case IDM_PASTETO:
paste_to_file();
return 0;
case IDM_CONVERT:
clip_convert();
return 0;
case IDM_MEASURE:
if (gsdll.state == GS_BUSY) {
play_sound(SOUND_BUSY);
return 0;
}
measure_show();
return 0;
#endif /* !VIEWONLY */
case IDM_GSMESS:
gs_showmess(); /* show messages from Ghostscript */
return 0;
case IDM_EXIT:
if (print_count) {
/* Still busy printing. Warn user. */
TCHAR buf[MAXSTR];
load_string(IDS_BUSYPRINTING, buf,
sizeof(buf)/sizeof(TCHAR)-1);
if (message_box(buf, MB_OKCANCEL) != IDOK)
return 0;
}
post_img_message(WM_CLOSE, 0);
return 0;
case IDM_CFG: /* Easy configure */
config_wizard(TRUE);
return 0;
case IDM_GSCOMMAND: /* Advanced configure */
if (install_gsdll() && gsdll.open)
pending.unload = TRUE;
return 0;
case IDM_UNITPT:
case IDM_UNITMM:
case IDM_UNITINCH:
gsview_unit(command);
return 0;
case IDM_UNITFINE:
option.unitfine = !option.unitfine;
check_menu_item(IDM_UNITMENU, IDM_UNITFINE, option.unitfine);
return 0;
case IDM_LANGMENU+1:
case IDM_LANGMENU+2:
case IDM_LANGMENU+3:
case IDM_LANGMENU+4:
case IDM_LANGMENU+5:
case IDM_LANGMENU+6:
case IDM_LANGMENU+7:
case IDM_LANGMENU+8:
case IDM_LANGMENU+9:
case IDM_LANGMENU+10:
case IDM_LANGMENU+11:
case IDM_LANGMENU+12:
case IDM_LANGMENU+13:
case IDM_LANGMENU+14:
case IDM_LANGMENU+15:
case IDM_LANGMENU+16:
case IDM_LANGMENU+17:
case IDM_LANGMENU+18:
case IDM_LANGMENU+19:
gsview_language(command);
return 0;
case IDM_SAFER:
option.safer = !option.safer;
check_menu_item(IDM_OPTIONMENU, IDM_SAFER, option.safer);
return 0;
case IDM_SAVEDIR:
option.save_dir = !option.save_dir;
check_menu_item(IDM_OPTIONMENU, IDM_SAVEDIR, option.save_dir);
return 0;
case IDM_BUTTONSHOW:
option.button_show = !option.button_show;
check_menu_item(IDM_OPTIONMENU, IDM_BUTTONSHOW, option.button_show);
show_buttons();
return 0;
case IDM_FITPAGE:
option.fit_page = !option.fit_page;
check_menu_item(IDM_OPTIONMENU, IDM_FITPAGE, option.fit_page);
/* should cause WM_SIZE message to be sent */
return 0;
case IDM_PSTOTEXTDIS:
case IDM_PSTOTEXTNORM:
case IDM_PSTOTEXTCORK:
check_menu_item(IDM_PSTOTEXTMENU, option.pstotext + IDM_PSTOTEXTMENU + 1, FALSE);
option.pstotext = command - IDM_PSTOTEXTMENU - 1;
check_menu_item(IDM_PSTOTEXTMENU, option.pstotext + IDM_PSTOTEXTMENU + 1, TRUE);
return 0;
case IDM_AUTOREDISPLAY:
option.redisplay = !option.redisplay;
check_menu_item(IDM_OPTIONMENU, IDM_AUTOREDISPLAY, option.redisplay);
return 0;
case IDM_EPSFCLIP:
option.epsf_clip = !option.epsf_clip;
check_menu_item(IDM_OPTIONMENU, IDM_EPSFCLIP, option.epsf_clip);
gs_resize();
return 0;
case IDM_EPSFWARN:
option.epsf_warn = !option.epsf_warn;
check_menu_item(IDM_OPTIONMENU, IDM_EPSFWARN, option.epsf_warn);
return 0;
case IDM_IGNOREDSC:
option.ignore_dsc = !option.ignore_dsc;
check_menu_item(IDM_OPTIONMENU, IDM_IGNOREDSC, option.ignore_dsc);
if (psfile.name[0]) {
if (option.redisplay)
gsview_displayfile(psfile.name);
else
gsview_selectfile(psfile.name);
}
return 0;
case IDM_SHOWBBOX:
option.show_bbox = !option.show_bbox;
check_menu_item(IDM_OPTIONMENU, IDM_SHOWBBOX, option.show_bbox);
#ifdef UNIX
gtk_widget_draw(img, NULL);
#else
#ifdef _Windows
PostMessage(hwndimg, WM_GSSYNC, 0, 0L);
#else
if (!WinInvalidateRect(hwnd_bmp, (PRECTL)NULL, TRUE))
error_message("error invalidating rect");
if (!WinUpdateWindow(hwnd_bmp))
error_message("error updating window");
#endif
#endif
return 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -