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 + -
显示快捷键?