📄 gvxdlg.c
字号:
#define TWLENGTH 61440
#define TWSCROLL 1024
char twbuf[TWLENGTH];
int twend;
void gs_showmess(void)
{
GtkWidget *window; /* main dialog window */
GtkWidget *hbox;
GtkWidget *vbox;
GtkWidget *text;
GtkWidget *table;
GtkWidget *vscrollbar;
GtkWidget *button_ok, *button_help;
int rc = 0;
nHelpTopic = IDS_TOPICMESS;
window=gtk_window_new(GTK_WINDOW_DIALOG);
gtk_window_set_title(GTK_WINDOW(window), get_string(IDS_AAGSMESSX11));
gtk_widget_set_usize(GTK_WIDGET(window), 450, 300);
gtk_signal_connect(GTK_OBJECT(window), "delete-event",
GTK_SIGNAL_FUNC(modal_delete), &rc);
vbox = gtk_vbox_new(FALSE, 5);
gtk_container_set_border_width(GTK_CONTAINER(vbox), 5);
gtk_container_add(GTK_CONTAINER(window), vbox);
gtk_widget_show(vbox);
table = gtk_table_new(2, 2, FALSE);
gtk_table_set_row_spacing(GTK_TABLE(table), 0, 2);
gtk_table_set_col_spacing(GTK_TABLE(table), 0, 2);
gtk_widget_show(table);
/* Create text */
text = gtk_text_new(NULL, NULL);
gtk_table_attach(GTK_TABLE(table), text, 0, 1, 0, 1,
(GtkAttachOptions)(GTK_EXPAND | GTK_SHRINK | GTK_FILL),
(GtkAttachOptions)(GTK_EXPAND | GTK_SHRINK | GTK_FILL), 0, 0);
gtk_widget_show(text);
/* Add a vertical scroll bar to the GtkText widget */
vscrollbar = gtk_vscrollbar_new(GTK_TEXT(text)->vadj);
gtk_table_attach(GTK_TABLE(table), vscrollbar, 1, 2, 0, 1,
(GtkAttachOptions)(GTK_FILL),
(GtkAttachOptions)(GTK_EXPAND | GTK_SHRINK | GTK_FILL), 0, 0);
gtk_widget_show(vscrollbar);
gtk_text_insert(GTK_TEXT(text), NULL, NULL, NULL, twbuf, twend);
/* connect to realize handler so we can scroll to
* the end when the window is created
*/
gtk_signal_connect_object(GTK_OBJECT(window), "show",
GTK_SIGNAL_FUNC(showmess_realize),
GTK_OBJECT(text));
gtk_box_pack_start(GTK_BOX(vbox), table, TRUE, TRUE, 5);
/* Create and place the buttons across the bottom */
hbox = gtk_hbox_new(TRUE, 0);
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);
gtk_widget_show(hbox);
button_ok = gtk_button_new_with_label(get_string(IDS_AAOK));
gtk_box_pack_start(GTK_BOX(hbox), button_ok, TRUE, FALSE, 10);
gtk_signal_connect(GTK_OBJECT(button_ok), "clicked",
GTK_SIGNAL_FUNC(modal_ok), &rc);
gtk_widget_show(button_ok);
button_help = gtk_button_new_with_label(get_string(IDS_AAHELP));
gtk_box_pack_start(GTK_BOX(hbox), button_help, TRUE, FALSE, 10);
gtk_signal_connect(GTK_OBJECT(button_help), "clicked",
GTK_SIGNAL_FUNC(modal_help), &rc);
gtk_widget_show(button_help);
/* show dialog and wait for OK, close */
gtk_window_set_focus(GTK_WINDOW(window), button_ok);
gtk_window_set_modal(GTK_WINDOW(window), TRUE);
gtk_widget_show(window);
gtk_main();
gtk_widget_destroy(window);
}
HWND gs_showmess_modeless(void)
{
gs_addmess("gs_showmess_modeless: not implemented\n");
return NULL;
}
/* Add string for Ghostscript message window */
/* Unix version removes all "\r" */
void
gs_addmess_count(const char *str, int count)
{
const char *s;
char *p;
int i, cr_count;
/* if debugging, write to stdout */
if (debug & DEBUG_LOG)
fwrite(str, 1, count ,stdout);
/* Count the \r that we need to remove */
cr_count = 0;
s = str;
for (i=0; i<count; i++) {
if (*s == '\r')
cr_count++;
s++;
}
if (count - cr_count >= TWSCROLL)
return; /* too large */
if (count - cr_count + twend >= TWLENGTH-1) {
/* scroll buffer */
twend -= TWSCROLL;
memmove(twbuf, twbuf+TWSCROLL, twend);
}
p = twbuf+twend;
for (i=0; i<count; i++) {
if (*str == '\0') {
*p++ = ' '; /* ignore null characters */
str++;
}
else if (*str == '\r') {
/* ignore \r */
}
else
*p++ = *str++;
}
twend += (count - cr_count);
*(twbuf+twend) = '\0';
}
void
gs_addmess(const char *str)
{
gs_addmess_count(str, strlen(str));
}
int get_dsc_response(char *message)
{
GtkWidget *window; /* main dialog window */
GtkWidget *hbox;
GtkWidget *vbox;
GtkWidget *label;
GtkWidget *button_ok, *button_cancel;
GtkWidget *button_ignore, *button_help;
int rc;
nHelpTopic = IDS_TOPICDSCWARN;
window=gtk_window_new(GTK_WINDOW_DIALOG);
gtk_window_set_title(GTK_WINDOW(window), get_string(IDS_AADSC));
gtk_signal_connect(GTK_OBJECT(window), "delete-event",
GTK_SIGNAL_FUNC(modal_delete), &rc);
vbox = gtk_vbox_new(FALSE, 5);
gtk_container_set_border_width(GTK_CONTAINER(vbox), 5);
gtk_container_add(GTK_CONTAINER(window), vbox);
gtk_widget_show(vbox);
/* Create a label */
label = gtk_label_new(message);
gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 5);
gtk_widget_show(label);
/* Create and place the buttons across the bottom */
hbox = gtk_hbox_new(TRUE, 0);
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);
gtk_widget_show(hbox);
button_ok = gtk_button_new_with_label(get_string(IDS_AAOK));
gtk_box_pack_start(GTK_BOX(hbox), button_ok, TRUE, TRUE, 10);
gtk_signal_connect(GTK_OBJECT(button_ok), "clicked",
GTK_SIGNAL_FUNC(modal_ok), &rc);
gtk_widget_show(button_ok);
button_cancel = gtk_button_new_with_label(get_string(IDS_AACANCEL));
gtk_box_pack_start(GTK_BOX(hbox), button_cancel, TRUE, TRUE, 10);
gtk_signal_connect(GTK_OBJECT(button_cancel), "clicked",
GTK_SIGNAL_FUNC(modal_cancel), &rc);
gtk_widget_show(button_cancel);
button_ignore = gtk_button_new_with_label(get_string(IDS_AAIGNOREALLDSC));
gtk_box_pack_start(GTK_BOX(hbox), button_ignore, TRUE, TRUE, 10);
gtk_signal_connect(GTK_OBJECT(button_ignore), "clicked",
GTK_SIGNAL_FUNC(modal_ignore), &rc);
gtk_widget_show(button_ignore);
button_help = gtk_button_new_with_label(get_string(IDS_AAHELP));
gtk_box_pack_start(GTK_BOX(hbox), button_help, TRUE, TRUE, 10);
gtk_signal_connect(GTK_OBJECT(button_help), "clicked",
GTK_SIGNAL_FUNC(modal_help), &rc);
gtk_widget_show(button_help);
/* show dialog and wait for OK, Cancel, Ignore or close */
gtk_window_set_focus(GTK_WINDOW(window), button_ok);
gtk_window_set_modal(GTK_WINDOW(window), TRUE);
gtk_widget_show(window);
gtk_main();
gtk_widget_destroy(window);
if (rc == IDOK) {
rc = CDSC_RESPONSE_OK;
}
else if (rc == DSC_IGNORE_ALL) {
rc = CDSC_RESPONSE_IGNORE_ALL;
}
else {
rc = CDSC_RESPONSE_CANCEL;
}
return rc;
}
typedef struct {
GtkWidget *gsver;
GtkWidget *gsdll;
GtkWidget *gsexe;
GtkWidget *gslib;
GtkWidget *gsopt;
} CFGENTRY;
void cfg_defaults(GtkWidget *w, gpointer data)
{
CFGENTRY *entry = (CFGENTRY *)data;
char buf[MAXSTR];
sprintf(buf, "%d", GS_REVISION);
gtk_entry_set_text(GTK_ENTRY(entry->gsver), buf);
default_gsdll(buf);
gtk_entry_set_text(GTK_ENTRY(entry->gsdll), buf);
default_gsexe(buf);
gtk_entry_set_text(GTK_ENTRY(entry->gsexe), buf);
gtk_entry_set_text(GTK_ENTRY(entry->gslib), "");
gtk_entry_set_text(GTK_ENTRY(entry->gsopt), "");
}
/* configure Ghostscript */
BOOL
install_gsdll(void)
{
GtkWidget *window; /* main dialog window */
GtkWidget *vbox;
GtkWidget *hbox; /* for buttons */
GtkWidget *gsver_label;
GtkWidget *gsdll_label;
GtkWidget *gsexe_label;
GtkWidget *gslib_label;
GtkWidget *gsopt_label;
GtkWidget *printerdef_checkbox;
GtkWidget *con;
GtkWidget *button_ok, *button_cancel, *button_help;
GtkWidget *button_defaults;
CFGENTRY entry;
char buf[MAXSTR];
int rc = 0;
nHelpTopic = IDS_TOPICADVANCEDCFG;
window=gtk_window_new(GTK_WINDOW_DIALOG);
gtk_window_set_title(GTK_WINDOW(window), get_string(IDS_AACONFIGUREGS));
gtk_signal_connect(GTK_OBJECT(window), "delete-event",
GTK_SIGNAL_FUNC(modal_delete), &rc);
vbox = gtk_vbox_new(FALSE, 5);
gtk_container_set_border_width(GTK_CONTAINER(vbox), 5);
gtk_container_add(GTK_CONTAINER(window), vbox);
gtk_widget_show(vbox);
/* Ghostscript Version */
gsver_label = gtk_label_new("Ghostscript Version");
gtk_widget_show(gsver_label);
con = gtk_alignment_new(0, 0, 0, 0);
gtk_widget_show(con);
gtk_container_add(GTK_CONTAINER(con), gsver_label);
gtk_box_pack_start(GTK_BOX(vbox), con, FALSE, FALSE, 0);
entry.gsver = gtk_entry_new();
gtk_entry_set_max_length(GTK_ENTRY(entry.gsver), 255);
sprintf(buf, "%d", option.gsversion);
gtk_entry_set_text(GTK_ENTRY(entry.gsver), buf);
gtk_box_pack_start(GTK_BOX(vbox), entry.gsver, FALSE, FALSE, 0);
gtk_widget_show(entry.gsver);
gtk_signal_connect(GTK_OBJECT(entry.gsver), "activate",
GTK_SIGNAL_FUNC(modal_ok), &rc);
/* show dialog and wait for OK, Cancel or close */
/* Ghostscript EXE */
gsdll_label = gtk_label_new(get_string(IDS_AAGHOSTSCRIPTSOC));
gtk_widget_show(gsdll_label);
con = gtk_alignment_new(0, 0, 0, 0);
gtk_widget_show(con);
gtk_container_add(GTK_CONTAINER(con), gsdll_label);
gtk_box_pack_start(GTK_BOX(vbox), con, FALSE, FALSE, 0);
entry.gsdll = gtk_entry_new();
gtk_entry_set_max_length(GTK_ENTRY(entry.gsdll), 255);
gtk_entry_set_text(GTK_ENTRY(entry.gsdll), option.gsdll);
gtk_box_pack_start(GTK_BOX(vbox), entry.gsdll, FALSE, FALSE, 0);
gtk_widget_show(entry.gsdll);
gtk_signal_connect(GTK_OBJECT(entry.gsdll), "activate",
GTK_SIGNAL_FUNC(modal_ok), &rc);
/* Ghostscript EXE */
gsexe_label = gtk_label_new(get_string(IDS_AAGHOSTSCRIPTEXEC));
gtk_widget_show(gsexe_label);
con = gtk_alignment_new(0, 0, 0, 0);
gtk_widget_show(con);
gtk_container_add(GTK_CONTAINER(con), gsexe_label);
gtk_box_pack_start(GTK_BOX(vbox), con, FALSE, FALSE, 0);
entry.gsexe = gtk_entry_new();
gtk_entry_set_max_length(GTK_ENTRY(entry.gsexe), 255);
gtk_entry_set_text(GTK_ENTRY(entry.gsexe), option.gsexe);
gtk_box_pack_start(GTK_BOX(vbox), entry.gsexe, FALSE, FALSE, 0);
gtk_widget_show(entry.gsexe);
gtk_signal_connect(GTK_OBJECT(entry.gsexe), "activate",
GTK_SIGNAL_FUNC(modal_ok), &rc);
/* Ghostscript Include Path */
gslib_label = gtk_label_new(get_string(IDS_AAGHOSTSCRIPTINCC));
gtk_widget_show(gslib_label);
con = gtk_alignment_new(0, 0, 0, 0);
gtk_widget_show(con);
gtk_container_add(GTK_CONTAINER(con), gslib_label);
gtk_box_pack_start(GTK_BOX(vbox), con, FALSE, FALSE, 0);
entry.gslib = gtk_entry_new();
gtk_entry_set_max_length(GTK_ENTRY(entry.gslib), 255);
gtk_entry_set_text(GTK_ENTRY(entry.gslib), option.gsinclude);
gtk_box_pack_start(GTK_BOX(vbox), entry.gslib, FALSE, FALSE, 0);
gtk_widget_show(entry.gslib);
gtk_signal_connect(GTK_OBJECT(entry.gslib), "activate",
GTK_SIGNAL_FUNC(modal_ok), &rc);
/* Ghostscript Options */
gsopt_label = gtk_label_new(get_string(IDS_AAGHOSTSCRIPTOTHERC));
gtk_widget_show(gsopt_label);
con = gtk_alignment_new(0, 0, 0, 0);
gtk_widget_show(con);
gtk_container_add(GTK_CONTAINER(con), gsopt_label);
gtk_box_pack_start(GTK_BOX(vbox), con, FALSE, FALSE, 0);
entry.gsopt = gtk_entry_new();
gtk_entry_set_max_length(GTK_ENTRY(entry.gsopt), 255);
gtk_entry_set_text(GTK_ENTRY(entry.gsopt), option.gsother);
gtk_box_pack_start(GTK_BOX(vbox), entry.gsopt, FALSE, FALSE, 0);
gtk_widget_show(entry.gsopt);
gtk_signal_connect(GTK_OBJECT(entry.gsopt), "activate",
GTK_SIGNAL_FUNC(modal_ok), &rc);
printerdef_checkbox = gtk_check_button_new_with_label(get_string(IDS_AACOPYPRINTERDEF));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(printerdef_checkbox),
FALSE);
gtk_widget_show(printerdef_checkbox);
gtk_box_pack_start(GTK_BOX(vbox), printerdef_checkbox, FALSE, FALSE, 0);
/* Create and place the buttons across the bottom */
button_ok = gtk_button_new_with_label(get_string(IDS_AAOK));
button_cancel = gtk_button_new_with_label(get_string(IDS_AACANCEL));
button_help = gtk_button_new_with_label(get_string(IDS_AAHELP));
button_defaults = gtk_button_new_with_label(get_string(IDS_AADEFAULTS));
hbox = gtk_hbox_new(TRUE, 0);
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);
gtk_widget_show(hbox);
gtk_box_pack_start(GTK_BOX(hbox), button_ok, TRUE, TRUE, 5);
gtk_box_pack_start(GTK_BOX(hbox), button_cancel, TRUE, TRUE, 5);
gtk_box_pack_start(GTK_BOX(hbox), button_help, TRUE, TRUE, 5);
gtk_box_pack_start(GTK_BOX(hbox), button_defaults, TRUE, TRUE, 5);
/* Connect our callbacks to the buttons */
gtk_signal_connect(GTK_OBJECT(button_ok), "clicked",
GTK_SIGNAL_FUNC(modal_ok), &rc);
gtk_signal_connect(GTK_OBJECT(button_cancel), "clicked",
GTK_SIGNAL_FUNC(modal_cancel), &rc);
gtk_signal_connect(GTK_OBJECT(button_help), "clicked",
GTK_SIGNAL_FUNC(modal_help), &rc);
gtk_signal_connect(GTK_OBJECT(button_defaults), "clicked",
GTK_SIGNAL_FUNC(cfg_defaults), &entry);
gtk_widget_show(button_ok);
gtk_widget_show(button_cancel);
gtk_widget_show(button_help);
gtk_widget_show(button_defaults);
/* show dialog and wait for OK, Cancel or close */
gtk_window_set_focus(GTK_WINDOW(window), entry.gsver);
gtk_window_set_modal(GTK_WINDOW(window), TRUE);
gtk_widget_show(window);
gtk_main();
if (rc == IDOK) {
option.gsversion = atoi(gtk_entry_get_text(GTK_ENTRY(entry.gsver)));
if (option.gsversion < 510)
option.gsversion = 510;
strncpy(option.gsdll, gtk_entry_get_text(GTK_ENTRY(entry.gsdll)),
sizeof(option.gsdll));
strncpy(option.gsexe, gtk_entry_get_text(GTK_ENTRY(entry.gsexe)),
sizeof(option.gsexe));
strncpy(option.gsinclude, gtk_entry_get_text(GTK_ENTRY(entry.gslib)),
sizeof(option.gsinclude));
strncpy(option.gsother, gtk_entry_get_text(GTK_ENTRY(entry.gsopt)),
sizeof(option.gsother));
if (gtk_toggle_button_get_active(
GTK_TOGGLE_BUTTON(printerdef_checkbox)))
gsview_printer_profiles();
}
gtk_widget_destroy(window);
return (rc == IDOK);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -