⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gvxdlg.c

📁 GSview 4.6 PostScript previewer。Ghostscript在MS-Windows, OS/2 and Unix下的图形化接口
💻 C
📖 第 1 页 / 共 4 页
字号:


#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 + -