📄 ngconf.c
字号:
g_signal_connect (w, "toggled", G_CALLBACK (&radio_update), pos); i++; } gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (choice), TRUE); break; case GNUNET_GNS_TYPE_DOUBLE: GNUNET_snprintf (defStr, 128, "%llf", pos->value.Double.val); w = gtk_entry_new (); tooltip (w, pos->help); label = gtk_label_new (pos->description); gtk_label_set_mnemonic_widget (GTK_LABEL (label), w); gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 10); g_signal_connect (w, "changed", G_CALLBACK (&string_update), pos); gtk_entry_set_text (GTK_ENTRY (w), defStr); gtk_box_pack_start (GTK_BOX (box), w, FALSE, FALSE, 0); break; case GNUNET_GNS_TYPE_UINT64: w = gtk_spin_button_new_with_range (pos->value.UInt64.min, pos->value.UInt64.max, 1); tooltip (w, pos->help); label = gtk_label_new (pos->description); gtk_label_set_mnemonic_widget (GTK_LABEL (label), w); gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 10); gtk_spin_button_set_value (GTK_SPIN_BUTTON (w), pos->value.UInt64.val); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (w), TRUE); gtk_spin_button_set_digits (GTK_SPIN_BUTTON (w), 0); g_signal_connect (w, "changed", G_CALLBACK (&string_update), pos); gtk_box_pack_start (GTK_BOX (box), w, FALSE, FALSE, 0); break; default: GNUNET_GE_ASSERT (NULL, 0); return 0; } gtk_box_pack_start (GTK_BOX (parent), box, FALSE, FALSE, 10); return 1;}static intaddNodeToTree (GtkNotebook * parent, struct GNUNET_GNS_TreeNode *pos){ int i; struct GNUNET_GNS_TreeNode *child; GtkNotebook *notebook; GtkWidget *vbox; GtkWidget *label; GtkWidget *scroll; int have; have = 0; i = 0; vbox = gtk_vbox_new (FALSE, 0); notebook = NULL; while (NULL != (child = pos->children[i])) { switch (child->type & GNUNET_GNS_KIND_MASK) { case GNUNET_GNS_KIND_NODE: if (notebook == NULL) { notebook = GTK_NOTEBOOK (gtk_notebook_new ()); gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (notebook), TRUE, TRUE, 0); } have = have | addNodeToTree (notebook, child); break; case GNUNET_GNS_KIND_LEAF: gtk_container_set_border_width (GTK_CONTAINER (vbox), 10); have = have | addLeafToTree (vbox, child); break; case GNUNET_GNS_KIND_ROOT: default: GNUNET_GE_ASSERT (NULL, 0); break; } i++; } if (have != 0) { label = gtk_label_new (pos->description); gtk_widget_show_all (vbox); gtk_widget_show_all (label); scroll = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); link_visibility (pos, scroll); link_visibility (pos, label); gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scroll), vbox); gtk_notebook_append_page (parent, scroll, label); } else { g_object_unref (vbox); } return have;}static voidinitView (struct GNUNET_GNS_Context *gns){ GtkNotebook *notebook; notebook = GTK_NOTEBOOK (lookup_widget ("configNotebook")); addNodeToTree (notebook, GNUNET_GNS_get_tree_root (gns)); gtk_widget_show_all (GTK_WIDGET (notebook)); update_visibility ();}/** * User requested save manually. Save configuration. */voidon_saveButton_activatesetup_gtk (){ GtkWidget *dialog; if (0 == GNUNET_GC_write_configuration (cfg, cfg_filename)) { dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, _("Configuration saved.")); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } else { dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Failed to save configuration.")); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); }}/** * User clicked to close window. Check if configuration * needs saving and possibly save configuration or do not * exit. * * @return TRUE to NOT exit (i.e. user hits cancel on save GNUNET_YES/GNUNET_NO/CANCEL). */gbooleanon_main_window_delete_eventsetup_gtk (){ GtkWidget *dialog; gint ret; if (GNUNET_GC_test_dirty (cfg)) { dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, _("Configuration changed. Save?")); ret = gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); switch (ret) { case GTK_RESPONSE_YES: if (0 != GNUNET_GC_write_configuration (cfg, cfg_filename)) { dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _ ("Error saving configuration.")); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } return FALSE; case GTK_RESPONSE_NO: return FALSE; case GTK_RESPONSE_CANCEL: default: return TRUE; } } return FALSE;}/** * We're really exiting. Final cleanup code (in GTK). */voidgtk_main_quitsetup_gtk (){ gtk_main_quit ();}intgconf_main_post_init (struct GNUNET_PluginHandle *self, struct GNUNET_GE_Context *e, struct GNUNET_GC_Configuration *c, struct GNUNET_GNS_Context *gns, const char *filename, int is_daemon){ GtkWidget *mainWindow; cfg = c; ectx = e; cfg_filename = filename; no_model = gtk_list_store_new (1, G_TYPE_STRING); setLibrary (self);#if GTK_MAJOR_VERSION >= 2 && GTK_MINOR_VERSION >= 12#else tips = gtk_tooltips_new ();#endif mainWindow = get_xml ("setupWindow"); initView (gns); gtk_window_maximize (GTK_WINDOW (mainWindow)); gtk_widget_show (mainWindow); gdk_threads_enter ();#ifdef WINDOWS SetCursor (LoadCursor (NULL, IDC_ARROW));#endif gtk_main (); gdk_threads_leave (); destroyMainXML (); setLibrary (NULL); g_object_unref (G_OBJECT (no_model)); no_model = NULL; return 0;}/* Main */intgconf_mainsetup_gtk (int argc, const char **argv, struct GNUNET_PluginHandle *self, struct GNUNET_GE_Context *ectx, struct GNUNET_GC_Configuration *cfg, struct GNUNET_GNS_Context *gns, const char *filename, int is_daemon){ g_thread_init (NULL); gtk_init (&argc, (char ***) &argv);#if ENABLE_NLS bind_textdomain_codeset (PACKAGE, "UTF-8"); /* for gtk */#endif#ifdef WINDOWS FreeConsole ();#endif return gconf_main_post_init (self, ectx, cfg, gns, filename, is_daemon);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -