dialogs.c
来自「ANFY特效」· C语言 代码 · 共 1,547 行 · 第 1/5 页
C
1,547 行
//// Anfy dialogs//#include <gtk/gtk.h>#include <stdio.h>#include <string.h>#include "callback.h"#include "support.h"#include "main.h"#include "misc.h"// =========================================================// Message box functionsvoid on_dlg_ok (GtkWidget *widget, gpointer user_data){ *((int*)user_data) = 1; gtk_main_quit ();}void on_msgbox_ok (GtkWidget *widget, gpointer user_data){ *((int*)user_data) = 1; gtk_widget_destroy (widget->parent->parent->parent);}void dlg_destroy (GtkWidget *widget, gpointer data){ gtk_grab_remove (widget); gtk_main_quit ();}int message_box (char* text, int yesno){ GtkWidget *dlg, *w, *vbox, *hbox; int ret = 0; dlg = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (dlg), "Anfy"); gtk_container_border_width (GTK_CONTAINER (dlg), 10); gtk_signal_connect (GTK_OBJECT (dlg), "destroy", GTK_SIGNAL_FUNC (dlg_destroy), NULL); vbox = gtk_vbox_new (FALSE, 10); gtk_container_add (GTK_CONTAINER (dlg), vbox); gtk_widget_show (vbox); w = gtk_label_new (text); gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 2); gtk_label_set_justify (GTK_LABEL (w), GTK_JUSTIFY_LEFT); gtk_widget_show (w); w = gtk_hseparator_new (); gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 2); gtk_widget_show (w); hbox = gtk_hbox_new (TRUE, 10); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2); gtk_widget_show (hbox); if (yesno == 0) { w = gtk_button_new_with_label ("Ok"); gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); gtk_signal_connect_object (GTK_OBJECT (w), "clicked", (GtkSignalFunc) gtk_widget_destroy, GTK_OBJECT (dlg)); GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT); gtk_widget_grab_default (w); gtk_widget_show (w); } else { w = gtk_button_new_with_label ("Yes"); gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); gtk_signal_connect (GTK_OBJECT (w), "clicked", (GtkSignalFunc) on_msgbox_ok, &ret); GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT); gtk_widget_grab_default (w); gtk_widget_show (w); w = gtk_button_new_with_label ("No"); gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); gtk_signal_connect_object (GTK_OBJECT (w), "clicked", (GtkSignalFunc) gtk_widget_destroy, GTK_OBJECT (dlg)); gtk_widget_show (w); } gtk_widget_show(dlg); gtk_grab_add(dlg); gtk_main (); // gtk_grab_remove(dlg); // gtk_widget_destroy(dlg); return ret;}void file_browse (char* caption, char** filename){ GtkWidget* dlg; int ret = 0; dlg = gtk_file_selection_new (caption); gtk_widget_show(dlg); gtk_grab_add(dlg); gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (dlg)->ok_button), "clicked", (GtkSignalFunc)on_dlg_ok, &ret); gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION (dlg)->cancel_button), "clicked", (GtkSignalFunc) gtk_widget_destroy, GTK_OBJECT (dlg)); gtk_main (); if (ret == 1) *filename = g_strdup (gtk_file_selection_get_filename (GTK_FILE_SELECTION (dlg))); else *filename = NULL; gtk_grab_remove(dlg); gtk_widget_destroy(dlg);}static void info_dlg_link (GtkWidget *widget, gpointer user_data){ if (current_applet == APPLET_ANFY3D) { StartBrowser(_("http://www.anfyteam.com/panfy3d.html")); } /* else if(m_strApplet == _T("STEP1")) ShowHelp(TOPIC_INSTRUCTION); else if(m_strApplet == APPLET_0) { strLink.LoadString(IDS_HOMEPAGE); StartBrowser(strLink, m_hWnd); } */}void info_dlg (char* text, char* textlink, char* caption){ GtkWidget *dlg, *hbox, *w, *link; GtkStyle *style; GdkCursor *cursor; const GdkColor LBLUE = {0, 0x0000, 0x0000, 0xffff}; dlg = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (dlg), caption); gtk_window_set_default_size (GTK_WINDOW (dlg), 350, 80); hbox = gtk_vbox_new (FALSE, 10); gtk_widget_show (hbox); gtk_container_add (GTK_CONTAINER (dlg), hbox); gtk_container_set_border_width (GTK_CONTAINER (hbox), 5); w = gtk_label_new (text); gtk_widget_show (w); gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, TRUE, 0); link = gtk_label_new (textlink); style = gtk_style_new (); style->fg[GTK_STATE_NORMAL] = LBLUE; style->fg[GTK_STATE_INSENSITIVE] = LBLUE; gtk_widget_set_style (link, style); gtk_widget_set_sensitive (link, FALSE); gtk_widget_show (link); // gtk_box_pack_start (GTK_BOX (hbox), link, TRUE, TRUE, 0); w = gtk_button_new (); gtk_button_set_relief (GTK_BUTTON (w), GTK_RELIEF_NONE); gtk_widget_show (w); gtk_widget_set_usize (w, -1, 24); // hbox = h_box (button_lnk, FALSE, 0, 0);{ GtkWidget *alert_box = gtk_hbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (w), alert_box); gtk_container_border_width (GTK_CONTAINER (alert_box), 0); gtk_widget_show (alert_box); gtk_box_pack_start (GTK_BOX (alert_box), link, TRUE, TRUE, 0);} gtk_box_pack_start (GTK_BOX (hbox), w, FALSE, FALSE, 0); gtk_signal_connect (GTK_OBJECT (w), "clicked", (GtkSignalFunc)info_dlg_link, NULL); w = gtk_button_new_with_label (_("OK")); gtk_widget_show (w); gtk_box_pack_end (GTK_BOX (hbox), w, FALSE, FALSE, 0); gtk_widget_set_usize (w, 75, -2); gtk_signal_connect_object (GTK_OBJECT (w), "clicked", (GtkSignalFunc) gtk_widget_destroy, GTK_OBJECT (dlg)); gtk_widget_show(dlg); gtk_grab_add(dlg); cursor = gdk_cursor_new (GDK_HAND2); gdk_window_set_cursor (link->window, cursor); gdk_cursor_destroy (cursor); gtk_main (); gtk_grab_remove(dlg); gtk_widget_destroy(dlg);}// =========================================================// Helper functionsgint delete_event (GtkWidget *widget, GdkEvent *event, gpointer data){ if (message_box (_("Do you really want to exit?"), 1) == 1) return FALSE; return TRUE;}void destroy (GtkWidget *widget, gpointer data){ gtk_main_quit();}// Creates a basic dialogGtkWidget* init_dialog (GtkAccelGroup **_accel_group, GtkTooltips **_tooltips, GtkWidget **_vbox){ GtkAccelGroup *file_menu_accels, *options_menu_accels, *help_menu_accels; GtkWidget *file, *file_menu, *open_project, *save_project, *save_all, *exit; GtkWidget *options, *options_menu, *change_browser, *insert_regcode; GtkWidget *help, *help_menu, *applet, *instructions, *tech_faq, *scrolltext_parameters; GtkWidget *home_page, *registration_info, *online_registration, *copyright, *about; GtkWidget *dlg, *vbox1, *separator; GtkAccelGroup *accel_group; GtkTooltips *tooltips; GtkWidget *menubar; guint tmp_key; char title[64]; if (main_dlg == NULL) { main_dlg = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_signal_connect (GTK_OBJECT (main_dlg), "delete_event", GTK_SIGNAL_FUNC (delete_event), NULL); gtk_signal_connect (GTK_OBJECT (main_dlg), "destroy", GTK_SIGNAL_FUNC (destroy), NULL); gtk_widget_set_usize (main_dlg, 515, 390); gtk_widget_show (main_dlg); } else { vbox1 = lookup_widget (main_dlg, "vbox1"); gtk_widget_destroy (vbox1); } dlg = main_dlg; tooltips = gtk_object_get_data (GTK_OBJECT (dlg), "tooltips"); if (tooltips == NULL) tooltips = gtk_tooltips_new (); *_tooltips = tooltips; *_accel_group = accel_group = gtk_accel_group_new (); strcpy (title, "Anfy"); if (current_applet != -1) { strcat (title, " - "); strcat (title, applet_info[current_applet].name); } gtk_window_set_title (GTK_WINDOW (dlg), title); *_vbox = vbox1 = gtk_vbox_new (FALSE, 0); gtk_widget_set_name (vbox1, "vbox1"); gtk_widget_ref (vbox1); gtk_object_set_data_full (GTK_OBJECT (dlg), "vbox1", vbox1, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (vbox1); gtk_container_add (GTK_CONTAINER (dlg), vbox1); menubar = gtk_menu_bar_new (); gtk_widget_set_name (menubar, "menubar"); gtk_widget_ref (menubar); gtk_object_set_data_full (GTK_OBJECT (dlg), "menubar", menubar, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (menubar); gtk_box_pack_start (GTK_BOX (vbox1), menubar, FALSE, FALSE, 0); file = gtk_menu_item_new_with_label (""); tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (file)->child), _("_File")); gtk_widget_add_accelerator (file, "activate_item", accel_group, tmp_key, GDK_MOD1_MASK, 0); gtk_widget_set_name (file, "file"); gtk_widget_ref (file); gtk_object_set_data_full (GTK_OBJECT (dlg), "file", file, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_show (file); gtk_container_add (GTK_CONTAINER (menubar), file); file_menu = gtk_menu_new (); gtk_widget_set_name (file_menu, "file_menu"); gtk_widget_ref (file_menu); gtk_object_set_data_full (GTK_OBJECT (dlg), "file_menu", file_menu, (GtkDestroyNotify) gtk_widget_unref); gtk_menu_item_set_submenu (GTK_MENU_ITEM (file), file_menu); file_menu_accels = gtk_menu_ensure_uline_accel_group (GTK_MENU (file_menu)); open_project = gtk_menu_item_new_with_label (""); tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (open_project)->child),
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?