void eel_gtk_message_dialog_set_details_label (GtkMessageDialog *dialog, const gchar *details_text) { GtkWidget *content_area, *expander, *label; content_area = gtk_message_dialog_get_message_area (dialog); expander = gtk_expander_new_with_mnemonic (_("Show more _details")); gtk_expander_set_spacing (GTK_EXPANDER (expander), 6); label = gtk_label_new (details_text); gtk_label_set_line_wrap (GTK_LABEL (label), TRUE); gtk_label_set_selectable (GTK_LABEL (label), TRUE); #if GTK_CHECK_VERSION (3, 16, 0) gtk_label_set_xalign (GTK_LABEL (label), 0); #else gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); #endif gtk_container_add (GTK_CONTAINER (expander), label); gtk_box_pack_start (GTK_BOX (content_area), expander, FALSE, FALSE, 0); gtk_widget_show (label); gtk_widget_show (expander); }
static void gtk_expander_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { GtkExpander *expander = GTK_EXPANDER (object); switch (prop_id) { case PROP_EXPANDED: gtk_expander_set_expanded (expander, g_value_get_boolean (value)); break; case PROP_LABEL: gtk_expander_set_label (expander, g_value_get_string (value)); break; case PROP_USE_UNDERLINE: gtk_expander_set_use_underline (expander, g_value_get_boolean (value)); break; case PROP_USE_MARKUP: gtk_expander_set_use_markup (expander, g_value_get_boolean (value)); break; case PROP_SPACING: gtk_expander_set_spacing (expander, g_value_get_int (value)); break; case PROP_LABEL_WIDGET: gtk_expander_set_label_widget (expander, g_value_get_object (value)); break; case PROP_LABEL_FILL: gtk_expander_set_label_fill (expander, g_value_get_boolean (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }
GtkWidget *addTitle(gchar *temp) { GtkWidget *exp = gtk_expander_new (temp); gtk_expander_set_spacing(GTK_EXPANDER(exp), 5); return exp; }
GtkWidget* pref_frame(PurplePlugin *plugin) { GtkWidget *align, *frame, *align2, *vbox2; GtkWidget *vbox, *hbox; GtkWidget *widget, *widget2; GtkWidget *expand; GtkWidget *treeview; GtkListStore *liststore; GtkCellRenderer *renderer; int i; // Root container vbox = gtk_vbox_new(FALSE, 10); align = gtk_alignment_new(0, 0, 1, 1); gtk_alignment_set_padding(GTK_ALIGNMENT(align), 10, 10, 10, 10); gtk_container_add(GTK_CONTAINER(align), vbox); // Player selection hbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new(_("Player:")), FALSE, FALSE, 0); widget = gtk_combo_box_new_text(); gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 0); widget2 = gtk_button_new_from_stock(GTK_STOCK_PROPERTIES); gtk_box_pack_start(GTK_BOX(hbox), widget2, FALSE, FALSE, 0); gtk_combo_box_append_text(GTK_COMBO_BOX(widget), _("Auto-detect")); for (i=0; *g_players[i].name; ++i) gtk_combo_box_append_text(GTK_COMBO_BOX(widget), g_players[i].name); g_signal_connect(G_OBJECT(widget), "changed", G_CALLBACK(cb_player_changed), (gpointer) widget2); g_signal_connect(G_OBJECT(widget2), "clicked", G_CALLBACK(cb_player_properties), 0); gtk_combo_box_set_active(GTK_COMBO_BOX(widget), purple_prefs_get_int(PREF_PLAYER) + 1); // Popup menu for format format_menu = gtk_menu_new(); char buf[100]; APPEND_FORMAT_MENU(_("Artist"), "%p"); APPEND_FORMAT_MENU(_("Album"), "%a"); APPEND_FORMAT_MENU(_("Title"), "%t"); APPEND_FORMAT_MENU(_("Track Duration"), "%d"); APPEND_FORMAT_MENU(_("Elapsed Track Time"), "%c"); APPEND_FORMAT_MENU(_("Progress Bar"), "%b"); APPEND_FORMAT_MENU(_("Player"), "%r"); APPEND_FORMAT_MENU(_("Music Symbol (may not display on some networks)"), "%m"); gtk_widget_show_all(format_menu); // Format selection frame = gtk_frame_new(_("Status Format")); gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 0); align2 = gtk_alignment_new(0, 0, 1, 1); gtk_alignment_set_padding(GTK_ALIGNMENT(align2), 5, 5, 5, 5); gtk_container_add(GTK_CONTAINER(frame), align2); vbox2 = gtk_vbox_new(FALSE, 5); gtk_container_add(GTK_CONTAINER(align2), vbox2); ADD_FORMAT_ENTRY(vbox2, _("Playing:"), PREF_FORMAT); ADD_FORMAT_ENTRY(vbox2, _("Paused:"), PREF_PAUSED); ADD_FORMAT_ENTRY(vbox2, _("Stopped/Off:"), PREF_OFF); // Protocol-specific formats liststore = gtk_list_store_new(6, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_POINTER); GList *accounts = purple_accounts_get_all(); while (accounts) { PurpleAccount *account = (PurpleAccount*) accounts->data; GtkTreeIter iter; const char *username = purple_account_get_username(account); const char *protocolname = purple_account_get_protocol_name(account); char buf1[100], buf2[100], buf3[100]; build_pref(buf1, PREF_CUSTOM_FORMAT, username, protocolname); build_pref(buf2, PREF_CUSTOM_DISABLED, username, protocolname); build_pref(buf3, PREF_BROKEN_NOWLISTENING, username, protocolname); trace("%s %s", buf1, purple_prefs_get_string(buf1)); gtk_list_store_append(liststore, &iter); gtk_list_store_set(liststore, &iter, 0, username, 1, purple_account_get_protocol_name(account), 2, purple_prefs_get_string(buf1), 3, purple_prefs_get_bool(buf2), 4, purple_prefs_get_bool(buf3), 5, account, -1); accounts = accounts->next; } treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(liststore)); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(treeview), -1, _("Screen Name"), gtk_cell_renderer_text_new(), "text", 0, NULL); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(treeview), -1, _("Protocol"), gtk_cell_renderer_text_new(), "text", 1, NULL); renderer = gtk_cell_renderer_text_new(); g_signal_connect(G_OBJECT(renderer), "edited", G_CALLBACK(cb_custom_edited), (gpointer) GTK_TREE_MODEL(liststore)); g_object_set(G_OBJECT(renderer), "editable", TRUE, NULL); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(treeview), -1, _("Playing Status Format"), renderer, "text", 2, NULL); renderer = gtk_cell_renderer_toggle_new(); g_signal_connect(G_OBJECT(renderer), "toggled", G_CALLBACK(cb_custom_toggled), (gpointer) GTK_TREE_MODEL(liststore)); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(treeview), -1, _("Disable"), renderer, "active", 3, NULL); renderer = gtk_cell_renderer_toggle_new(); g_signal_connect(G_OBJECT(renderer), "toggled", G_CALLBACK(cb_broken_nowlistening_toggled), (gpointer) GTK_TREE_MODEL(liststore)); gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(treeview), -1, _("Broken 'now listening'"), renderer, "active", 4, NULL); expand = gtk_expander_new(_("Customize playing status format, or disable status changing altogether for specific accounts")); gtk_expander_set_spacing(GTK_EXPANDER(expand), 5); gtk_box_pack_start(GTK_BOX(vbox), expand, TRUE, TRUE, 0); widget = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(widget), GTK_SHADOW_ETCHED_IN); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(widget), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_container_add(GTK_CONTAINER(expand), widget); gtk_container_add(GTK_CONTAINER(widget), treeview); // Misc settings frame = gtk_frame_new(_("Other settings")); gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 0); align2 = gtk_alignment_new(0, 0, 1, 1); gtk_alignment_set_padding(GTK_ALIGNMENT(align2), 5, 5, 5, 5); gtk_container_add(GTK_CONTAINER(frame), align2); vbox2 = gtk_vbox_new(FALSE, 5); gtk_container_add(GTK_CONTAINER(align2), vbox2); hbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(vbox2), hbox, FALSE, FALSE, 0); widget = gtk_check_button_new_with_label(_("Don't change status message when away")); gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 0); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), purple_prefs_get_bool(PREF_DISABLE_WHEN_AWAY)); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(cb_misc_toggled), (gpointer) PREF_DISABLE_WHEN_AWAY); hbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(vbox2), hbox, FALSE, FALSE, 0); widget = gtk_check_button_new_with_label(_("Don't change status message if protocol has working 'now listening'")); gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 0); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), purple_prefs_get_bool(PREF_NOW_LISTENING_ONLY)); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(cb_misc_toggled), (gpointer) PREF_NOW_LISTENING_ONLY); // Filter frame = gtk_frame_new(_("Status Filter")); gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 0); align2 = gtk_alignment_new(0, 0, 1, 1); gtk_alignment_set_padding(GTK_ALIGNMENT(align2), 5, 5, 5, 5); gtk_container_add(GTK_CONTAINER(frame), align2); vbox2 = gtk_vbox_new(FALSE, 5); gtk_container_add(GTK_CONTAINER(align2), vbox2); hbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(vbox2), hbox, FALSE, FALSE, 0); widget = gtk_check_button_new_with_label(_("Enable status filter")); gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 0); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), purple_prefs_get_bool(PREF_FILTER_ENABLE)); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(cb_filter_toggled), 0); hbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(vbox2), hbox, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new(_("Blacklist (comma-delimited):")), FALSE, FALSE, 0); widget = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(widget), purple_prefs_get_string(PREF_FILTER)); gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 0); g_signal_connect(G_OBJECT(widget), "changed", G_CALLBACK(cb_filter_changed), 0); filter_list = widget; hbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(vbox2), hbox, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new(_("Mask character:")), FALSE, FALSE, 0); widget = gtk_entry_new_with_max_length(1); gtk_entry_set_text(GTK_ENTRY(widget), purple_prefs_get_string(PREF_MASK)); gtk_box_pack_start(GTK_BOX(hbox), widget, TRUE, TRUE, 0); g_signal_connect(G_OBJECT(widget), "changed", G_CALLBACK(cb_filter_mask_changed), 0); filter_mask = widget; gboolean state = purple_prefs_get_bool(PREF_FILTER_ENABLE); gtk_widget_set_sensitive(filter_list, state); gtk_widget_set_sensitive(filter_mask, state); gtk_widget_show_all(align); return align; }
GtkWidget * progress_create_widget (GtkWidget * dlg) { GtkWidget *w; GIOChannel *channel; // fix it when vertical specified #if GTK_CHECK_VERSION(3,0,0) w = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); #else w = gtk_vbox_new (FALSE, 0); #endif progress_bar = gtk_progress_bar_new (); gtk_widget_set_name (progress_bar, "yad-progress-widget"); if (options.progress_data.log_on_top) gtk_box_pack_end (GTK_BOX (w), progress_bar, FALSE, FALSE, 0); else gtk_box_pack_start (GTK_BOX (w), progress_bar, FALSE, FALSE, 0); if (options.progress_data.percentage > 100) options.progress_data.percentage = 100; gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progress_bar), options.progress_data.percentage / 100.0); if (options.progress_data.progress_text) gtk_progress_bar_set_text (GTK_PROGRESS_BAR (progress_bar), options.progress_data.progress_text); #if GTK_CHECK_VERSION(3,0,0) gtk_progress_bar_set_inverted (GTK_PROGRESS_BAR (progress_bar), options.progress_data.rtl); #else if (options.progress_data.rtl) gtk_progress_bar_set_orientation (GTK_PROGRESS_BAR (progress_bar), GTK_PROGRESS_RIGHT_TO_LEFT); #endif if (options.progress_data.log) { GtkWidget *ex, *sw; ex = gtk_expander_new (options.progress_data.log); gtk_expander_set_spacing (GTK_EXPANDER (ex), 2); gtk_expander_set_expanded (GTK_EXPANDER (ex), options.progress_data.log_expanded); gtk_box_pack_start (GTK_BOX (w), ex, TRUE, TRUE, 2); sw = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw), GTK_SHADOW_ETCHED_IN); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw), options.hscroll_policy, options.vscroll_policy); gtk_container_add (GTK_CONTAINER (ex), sw); progress_log = gtk_text_view_new (); gtk_widget_set_name (progress_log, "yad-text-widget"); gtk_widget_set_size_request (progress_log, -1, options.progress_data.log_height); gtk_container_add (GTK_CONTAINER (sw), progress_log); log_buffer = gtk_text_buffer_new (NULL); gtk_text_view_set_buffer (GTK_TEXT_VIEW (progress_log), log_buffer); gtk_text_view_set_left_margin (GTK_TEXT_VIEW (progress_log), 5); gtk_text_view_set_right_margin (GTK_TEXT_VIEW (progress_log), 5); gtk_text_view_set_editable (GTK_TEXT_VIEW (progress_log), FALSE); gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (progress_log), FALSE); } #if GTK_CHECK_VERSION(3,0,0) else gtk_progress_bar_set_show_text (GTK_PROGRESS_BAR (progress_bar), TRUE); #endif channel = g_io_channel_unix_new (0); g_io_channel_set_encoding (channel, NULL, NULL); g_io_channel_set_flags (channel, G_IO_FLAG_NONBLOCK, NULL); g_io_add_watch (channel, G_IO_IN | G_IO_HUP, handle_stdin, dlg); return w; }