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

📄 gvxdlg.c

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

    /* Create the CList for the pages */
    clist = gtk_clist_new(1);

    gtk_clist_set_shadow_type (GTK_CLIST(clist), GTK_SHADOW_OUT);

    /* We must set the default columnn width, in pixels */
    gtk_clist_set_column_width (GTK_CLIST(clist), 0, 64);

    /* Add the CList widget to the horizontal box and show it. */
    gtk_container_add(GTK_CONTAINER(scrolled_window), clist);
    gtk_widget_show(clist);

    /* Create and place the buttons in a vbox at the right */
    vbox = gtk_vbox_new(FALSE, 0);
    gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 5);
    gtk_widget_show(vbox);

    button_ok = gtk_button_new_with_label(get_string(IDS_AAOK));
    button_cancel = gtk_button_new_with_label(get_string(IDS_AACANCEL));
    if (multiple) {
	button_all = gtk_button_new_with_label(get_string(IDS_AAALL));
	button_odd = gtk_button_new_with_label(get_string(IDS_AAODD));
	button_even = gtk_button_new_with_label(get_string(IDS_AAEVEN));
	button_reverse = gtk_check_button_new_with_label(get_string(IDS_AAREVERSE));
	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button_reverse), 
		psfile.page_list.reverse);
    }

    gtk_box_pack_start(GTK_BOX(vbox), button_ok, FALSE, FALSE, 5);
    gtk_box_pack_start(GTK_BOX(vbox), button_cancel, FALSE, FALSE, 5);
    if (multiple) {
	gtk_box_pack_start(GTK_BOX(vbox), button_all, FALSE, FALSE, 5);
	gtk_box_pack_start(GTK_BOX(vbox), button_odd, FALSE, FALSE, 5);
	gtk_box_pack_start(GTK_BOX(vbox), button_even, FALSE, FALSE, 5);
	gtk_box_pack_start(GTK_BOX(vbox), button_reverse, FALSE, FALSE, 5);
    }

    /* Connect our callbacks to the three 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);

    if (multiple) {
	gtk_signal_connect(GTK_OBJECT(button_all), "clicked",
				  GTK_SIGNAL_FUNC(selpage_all),
				  (gpointer) clist);
	gtk_signal_connect(GTK_OBJECT(button_odd), "clicked",
				  GTK_SIGNAL_FUNC(selpage_odd),
				  (gpointer) clist);
	gtk_signal_connect(GTK_OBJECT(button_even), "clicked",
				  GTK_SIGNAL_FUNC(selpage_even),
				  (gpointer) clist);
    }

    gtk_widget_show(button_ok);
    gtk_widget_show(button_cancel);
    if (multiple) {
	gtk_widget_show(button_all);
	gtk_widget_show(button_odd);
	gtk_widget_show(button_even);
	gtk_widget_show(button_reverse);
    }

    if (multiple)
	gtk_clist_set_selection_mode(GTK_CLIST(clist), GTK_SELECTION_EXTENDED);

    p = buf;
    for (i=0; i< (int)(psfile.dsc->page_count); i++) {
	page_ordlabel(buf, i);
	gtk_clist_append( (GtkCList *) clist, &p);
        if ((multiple && psfile.page_list.select[i])
	    || (i == psfile.page_list.current)) {
	    gtk_clist_select_row(GTK_CLIST(clist), i, 0);
	}
    }

    /* show dialog and wait for OK, Cancel 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();

    if (rc == IDOK) {
	GList *l = GTK_CLIST(clist)->selection;
	for (i = 0; i < (int)psfile.dsc->page_count; i++)
	    psfile.page_list.select[i] = FALSE;
	while (l) {
	    psfile.page_list.current = (int)(l->data);
	    psfile.page_list.select[(int)(l->data)] = TRUE;
	    l = g_list_next(l);
	}
	if (psfile.page_list.current >= 0)
	    *ppage = psfile.page_list.current + 1;
	if (multiple)
	    psfile.page_list.reverse = 
	        gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button_reverse));
    }

    gtk_widget_destroy(window);

    return (rc == IDOK);
}

void info_add(GtkWidget *table, const char *str1, const char *str2, int *y)
{
    GtkWidget *label1 = gtk_label_new(str1);
    GtkWidget *label2 = gtk_label_new(str2);
    GtkWidget *con1, *con2;
    con1 = gtk_alignment_new(1, 0, 0, 0);
    gtk_container_add(GTK_CONTAINER(con1), label1);
    con2 = gtk_alignment_new(0, 0, 0, 0);
    gtk_container_add(GTK_CONTAINER(con2), label2);
    gtk_widget_show(label1);
    gtk_widget_show(label2);
    gtk_widget_show(con1);
    gtk_widget_show(con2);
    gtk_table_attach_defaults(GTK_TABLE(table), con1, 0, 1, *y, (*y)+1);
    gtk_table_attach_defaults(GTK_TABLE(table), con2, 2, 3, *y, (*y)+1);
    (*y)++;
}

void show_info(void)
{
    GtkWidget *window;		/* main dialog window */
    GtkWidget *table;
    GtkWidget *button_ok;
    GtkWidget *spacer;
    CDSC *dsc = psfile.dsc;
    char buf[MAXSTR];
    char *p;
    int y = 0;
    int n;

    window=gtk_window_new(GTK_WINDOW_DIALOG);
    gtk_container_set_border_width(GTK_CONTAINER(window), 10);
    gtk_window_set_title(GTK_WINDOW(window), get_string(IDS_AAINFO));

    table = gtk_table_new(12, 3, FALSE);
    gtk_container_add(GTK_CONTAINER(window), table);

    if (psfile.name[0] != '\0') {
	info_add(table, get_string(IDS_AAFILEC), psfile.name, &y);
	if (dsc) {
	    p = buf;
	    *p = '\0';
	    if (psfile.gzip) {
		strcpy(p, "gzip ");
	        p += strlen(p);
	    }
	    if (psfile.bzip2) {
		strcpy(p, "bzip2 ");
	        p += strlen(p);
	    }
	    if (psfile.ctrld)
		load_string(IDS_CTRLD, p, sizeof(buf));
	    if (psfile.pjl)
		load_string(IDS_PJL, p, sizeof(buf));
	    p += strlen(p);
	    if (psfile.ispdf) {
		load_string(IDS_PDF, p, sizeof(buf)-strlen(buf));
	    }
	    else if (dsc->epsf) {
		switch (psfile.preview) {
		    case IDS_EPSI:
		      load_string(IDS_EPSI, p, sizeof(buf)-strlen(buf));
		      break;
		    case IDS_EPST:
		      load_string(IDS_EPST, p, sizeof(buf)-strlen(buf));
		      break;
		    case IDS_EPSW:
		      load_string(IDS_EPSW, p, sizeof(buf)-strlen(buf));
		      break;
		    default:
		      load_string(IDS_EPSF, p, sizeof(buf)-strlen(buf));
		}
	    }
	    else
		load_string(IDS_DSC, p, sizeof(buf)-strlen(buf));
	    info_add(table, get_string(IDS_AATYPEC), buf, &y);
	    info_add(table, get_string(IDS_AATITLEC), dsc->dsc_title ? dsc->dsc_title : "", &y);
	    info_add(table, get_string(IDS_AADATEC), dsc->dsc_date ? dsc->dsc_date : "", &y);
	    if (dsc->bbox)
		sprintf(buf, "%d %d %d %d", dsc->bbox->llx, dsc->bbox->lly, 
		    dsc->bbox->urx, dsc->bbox->ury);
	    else
		buf[0]='\0';
	    info_add(table, get_string(IDS_AABOUNDINGBOXC), buf, &y);
	    switch(dsc->page_orientation) {
		case CDSC_LANDSCAPE:
			load_string(IDS_LANDSCAPE, buf, sizeof(buf));
			break;
		case CDSC_PORTRAIT:
			load_string(IDS_PORTRAIT, buf, sizeof(buf));
			break;
		default:
			buf[0] = '\0';
	    }
	    info_add(table, get_string(IDS_AAORIENTATIONC), buf, &y);
	    switch(dsc->page_order) {
		case CDSC_ASCEND: 
			load_string(IDS_ASCEND, buf, sizeof(buf));
			break;
		case CDSC_DESCEND: 
			load_string(IDS_DESCEND, buf, sizeof(buf));
			break;
		case CDSC_SPECIAL:
			load_string(IDS_SPECIAL, buf, sizeof(buf));
			break;
		default:
			buf[0] = '\0';
	    }
	    info_add(table, get_string(IDS_AAPAGEORDERC), buf, &y);
	    if (dsc->page_media && dsc->page_media->name) {
		sprintf(buf,"%.200s %g %g",dsc->page_media->name,
		    dsc->page_media->width, dsc->page_media->height);
	    }
	    else {
		buf[0] = '\0';
	    }
	    info_add(table, get_string(IDS_AADEFAULTMEDIAC), buf, &y);
	    sprintf(buf, "%d", dsc->page_count);
	    info_add(table, get_string(IDS_AAPAGESC), buf, &y);
	    n = map_page(psfile.pagenum - 1);
	    if (dsc->page_count)
		    sprintf(buf, "\"%.200s\"   %d", dsc->page[n].label ? 
			dsc->page[n].label : "", psfile.pagenum);
	    else
		    buf[0] = '\0';
	    info_add(table, get_string(IDS_AAPAGEC), buf, &y);
	}
    }
    else
	info_add(table, get_string(IDS_AAFILEC), get_string(IDS_NOFILE), &y);

    /* add a blank line and set minimum spacing */
    spacer = gtk_label_new("   ");
    gtk_widget_show(spacer);
    gtk_table_attach_defaults(GTK_TABLE(table), spacer, 1, 2, y, y+1);
    info_add(table, "        ", "                              ", &y);

    button_ok = gtk_button_new_with_label("OK");
    gtk_widget_show(button_ok);
    gtk_table_attach_defaults(GTK_TABLE(table), button_ok, 0, 1, y, y+1);

    gtk_widget_show(GTK_WIDGET(table));
    modal_dialog(window, button_ok, NULL);
    gtk_widget_destroy(window);
}


void add_about(GtkWidget *w, const char *str)
{
    GtkWidget *label = label = gtk_label_new(str);
    GtkWidget *align = gtk_alignment_new(0, 0, 0, 0);
    gtk_container_add(GTK_CONTAINER(align), label);
    gtk_box_pack_start(GTK_BOX(w), align, FALSE, FALSE, 0);
    gtk_widget_show(label);
    gtk_widget_show(align);
}

void show_about(void)
{
    GtkWidget *window;		/* main dialog window */
    GtkWidget *vbox;
    GtkWidget *button_ok = NULL;
    char buf[MAXSTR];
    int rc = 0;

    gs_addmess("show_about: not implemented fully\n");

    window=gtk_window_new(GTK_WINDOW_DIALOG);

    gtk_window_set_title(GTK_WINDOW(window), get_string(IDS_AAABOUTX11));
    gtk_signal_connect(GTK_OBJECT(window), "delete-event",
                       GTK_SIGNAL_FUNC(modal_delete), &rc);
    
    vbox = gtk_vbox_new(FALSE, 0);
    gtk_container_set_border_width(GTK_CONTAINER(vbox), 5);
    gtk_container_add(GTK_CONTAINER(window), vbox);
    gtk_widget_show(vbox);
   
    sprintf(buf, "GSview   %s %s    %s", get_string(IDS_AACOPY1), GSVIEW_DOT_VERSION,
	GSVIEW_DATE);
    add_about(vbox, buf);
    add_about(vbox, get_string(IDS_AACOPY2));
    add_about(vbox,"");
    add_about(vbox, GSVIEW_COPYRIGHT1);
    add_about(vbox, GSVIEW_COPYRIGHT2);
    add_about(vbox,"");
    add_about(vbox, get_string(IDS_AACOPY4));
    add_about(vbox, get_string(IDS_AACOPY5));
    add_about(vbox, get_string(IDS_AACOPY6));
    add_about(vbox, get_string(IDS_AACOPY7));
    add_about(vbox, get_string(IDS_AACOPY8));
    add_about(vbox, get_string(IDS_AACOPY9));
    add_about(vbox, get_string(IDS_AACOPY10));
    add_about(vbox, get_string(IDS_AACOPY11));
    add_about(vbox, get_string(IDS_AACOPY12));
    add_about(vbox, get_string(IDS_AACOPY13));
    add_about(vbox, get_string(IDS_AACOPY14));
    add_about(vbox,"");
    add_about(vbox, get_string(IDS_AACOPY19));
    add_about(vbox,"");
/*
ICON ID_GSVIEW, ABOUT_ICON, 8, 8, 18, 20
*/
    sprintf(buf, "%s  %s", get_string(IDS_AAREGTOC), registration_name);
    add_about(vbox, buf);
    strcpy(buf, get_string(IDS_AANUMBERC));
    if (registration_receipt != 0)
	sprintf(buf, "%s  %u", get_string(IDS_AANUMBERC), registration_receipt);
    add_about(vbox, buf);

    /* Create and place OK button at the bottom */
    button_ok = gtk_button_new_with_label(get_string(IDS_AAOK));
    gtk_box_pack_start(GTK_BOX(vbox), button_ok, FALSE, FALSE, 5);
    gtk_signal_connect(GTK_OBJECT(button_ok), "clicked",
			  GTK_SIGNAL_FUNC(modal_ok), &rc);
    gtk_widget_show(button_ok);

    /* show dialog and wait for OK 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);
}

typedef struct {
    PSBBOX *bbox;
    GtkWidget *label;
    int bboxindex;
} GETBBOX;

GETBBOX bbox_data;

void bbox_click(void)
{
    float x, y;
    GETBBOX *gb = &bbox_data;
    if (debug & DEBUG_GENERAL)
	gs_addmessf("bbox_click: index=%d\n", gb->bboxindex);
    if (!get_cursorpos(&x, &y)) {
	gtk_main_quit();
    }
    switch(gb->bboxindex) {
	case 0:
	    gb->bbox->llx = (int)x;
	    break;
	case 1:
	    gb->bbox->lly = (int)y;
	    break;
	case 2:
	    gb->bbox->urx = (int)x;
	    break;
	case 3:
	    gb->bbox->ury = (int)y;
	    gb->bbox->valid = TRUE;
	    gtk_main_quit();
	    break;
    }
    gb->bboxindex++;
    if (gb->bboxindex <= 3) {
        gtk_label_set_text(GTK_LABEL(gb->label), 
		get_string(IDS_BBPROMPT+gb->bboxindex));
    }
}


BOOL get_bbox(void)
{
    int rc;
    GtkWidget *window;
    GETBBOX *gb = &bbox_data;

    gb->bbox = &bbox;
    gb->bbox->valid = FALSE;
    gb->bbox->llx = gb->bbox->lly = gb->bbox->urx = gb->bbox->ury = 0;
    gb->bboxindex = 0;
    if ((gsdll.state != GS_PAGE) && (gsdll.state != GS_IDLE)) {
	gserror(IDS_EPSNOBBOX, NULL, MB_ICONEXCLAMATION, SOUND_ERROR);
	return FALSE;
    }

    /* display modeless dialog */
    window=gtk_window_new(GTK_WINDOW_DIALOG);
    gtk_window_set_title(GTK_WINDOW(window), get_string(IDS_AABOUNDINGBOX));
    gtk_signal_connect(GTK_OBJECT(window), "delete-event",
                       GTK_SIGNAL_FUNC(modal_delete), &rc);

    gb->label = gtk_label_new(get_string(IDS_BBPROMPT+gb->bboxindex));
    gtk_container_set_border_width(GTK_CONTAINER(gb->label), 10);
    gtk_container_add(GTK_CONTAINER(window), gb->label);
    gtk_widget_show(gb->label);
    gtk_widget_show(window);
    /* this is not modal, since we want the image scroll bars to work */

    getting_bbox = TRUE;
    gtk_main();
    gtk_widget_destroy(window);
    getting_bbox = FALSE;

    return bbox.valid;
}



BOOL pstoeps_warn(void)
{
    GtkWidget *window;		/* main dialog window */
    GtkWidget *hbox;
    GtkWidget *vbox;
    GtkWidget *label;
    GtkWidget *check;
    GtkWidget *button_yes = NULL, *button_no = NULL, *button_help;
    int rc = 0;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -