static NmtNewtForm * nmt_edit_main_connection_list (gboolean is_top) { int screen_width, screen_height; NmtNewtForm *form; NmtNewtWidget *quit, *list; newtGetScreenSize (&screen_width, &screen_height); form = g_object_new (NMT_TYPE_NEWT_FORM, "y", 2, "height", screen_height - 4, "escape-exits", TRUE, NULL); quit = nmt_newt_button_new (is_top ? _("Quit") : _("Back")); nmt_newt_widget_set_exit_on_activate (quit, TRUE); list = g_object_new (NMT_TYPE_EDIT_CONNECTION_LIST, "extra-widget", quit, "connection-filter", edit_connection_list_filter, NULL); g_signal_connect (list, "add-connection", G_CALLBACK (list_add_connection), form); g_signal_connect (list, "edit-connection", G_CALLBACK (list_edit_connection), form); g_signal_connect (list, "remove-connection", G_CALLBACK (list_remove_connection), form); nmt_newt_form_set_content (form, list); return form; }
/** * nmt_newt_button_box_add_start: * @bbox: an #NmtNewtButtonBox * @label: the label for the newt button * * Creates a new #NmtNewtButton with the given @label, adds it * to the "start" section of @bbox, and returns the newly-created * button. * * Returns: the newly-created button, already added to @bbox */ NmtNewtWidget * nmt_newt_button_box_add_start (NmtNewtButtonBox *bbox, const char *label) { NmtNewtWidget *button; button = nmt_newt_button_new (label); nmt_newt_button_box_add_widget_start (bbox, button); return button; }
static void nmt_page_team_constructed (GObject *object) { NmtPageTeam *team = NMT_PAGE_TEAM (object); NmtPageTeamPrivate *priv = NMT_PAGE_TEAM_GET_PRIVATE (team); NmtEditorSection *section; NmtNewtGrid *grid; NMSettingTeam *s_team; NmtNewtWidget *widget; NMConnection *conn; conn = nmt_editor_page_get_connection (NMT_EDITOR_PAGE (team)); s_team = nm_connection_get_setting_team (conn); if (!s_team) { nm_connection_add_setting (conn, nm_setting_team_new ()); s_team = nm_connection_get_setting_team (conn); } priv->s_team = s_team; section = nmt_editor_section_new (_("TEAM"), NULL, TRUE); widget = nmt_newt_grid_new (); nmt_editor_grid_append (nmt_editor_section_get_body (section), NULL, widget, NULL); grid = NMT_NEWT_GRID (widget); widget = nmt_newt_label_new (_("Slaves")); nmt_newt_grid_add (grid, widget, 0, 0); widget = nmt_slave_list_new (conn, team_connection_type_filter, team); g_signal_connect (widget, "notify::connections", G_CALLBACK (slaves_changed), team); nmt_newt_grid_add (grid, widget, 0, 1); nmt_newt_widget_set_padding (widget, 0, 0, 0, 1); priv->slaves = NMT_SLAVE_LIST (widget); slaves_changed (G_OBJECT (priv->slaves), NULL, team); widget = nmt_newt_label_new (_("JSON configuration")); nmt_newt_grid_add (grid, widget, 0, 2); widget = nmt_newt_textbox_new (NMT_NEWT_TEXTBOX_SCROLLABLE | NMT_NEWT_TEXTBOX_SET_BACKGROUND, 60); g_object_bind_property (s_team, NM_SETTING_TEAM_CONFIG, widget, "text", G_BINDING_SYNC_CREATE); nmt_newt_grid_add (grid, widget, 0, 3); nmt_newt_widget_set_padding (widget, 2, 0, 2, 1); widget = nmt_newt_button_new (_("Edit...")); g_signal_connect (widget, "clicked", G_CALLBACK (edit_clicked), team); nmt_newt_grid_add (grid, widget, 0, 4); nmt_editor_page_add_section (NMT_EDITOR_PAGE (team), section); G_OBJECT_CLASS (nmt_page_team_parent_class)->constructed (object); }
static void nmt_add_connection_init (NmtAddConnection *form) { NmtAddConnectionPrivate *priv = NMT_ADD_CONNECTION_GET_PRIVATE (form); NmtNewtWidget *textbox, *listbox, *button; NmtNewtGrid *grid, *buttons; grid = NMT_NEWT_GRID (nmt_newt_grid_new ()); textbox = nmt_newt_textbox_new (0, 60); priv->textbox = NMT_NEWT_TEXTBOX (textbox); nmt_newt_grid_add (grid, textbox, 0, 0); listbox = nmt_newt_listbox_new (5, NMT_NEWT_LISTBOX_SCROLL); priv->listbox = NMT_NEWT_LISTBOX (listbox); g_signal_connect (priv->listbox, "activated", G_CALLBACK (create_connection), form); nmt_newt_grid_add (grid, listbox, 0, 1); nmt_newt_widget_set_padding (listbox, 0, 1, 0, 0); nmt_newt_grid_set_flags (grid, listbox, NMT_NEWT_GRID_EXPAND_X); // FIXME: VPN description textbox buttons = NMT_NEWT_GRID (nmt_newt_grid_new ()); nmt_newt_grid_add (grid, NMT_NEWT_WIDGET (buttons), 0, 2); nmt_newt_widget_set_padding (NMT_NEWT_WIDGET (buttons), 0, 1, 0, 0); button = g_object_ref_sink (nmt_newt_button_new (_("Cancel"))); nmt_newt_widget_set_exit_on_activate (button, TRUE); nmt_newt_grid_add (NMT_NEWT_GRID (buttons), button, 0, 0); nmt_newt_widget_set_padding (button, 0, 0, 1, 0); nmt_newt_grid_set_flags (NMT_NEWT_GRID (buttons), button, NMT_NEWT_GRID_EXPAND_X | NMT_NEWT_GRID_ANCHOR_RIGHT | NMT_NEWT_GRID_FILL_Y); button = g_object_ref_sink (nmt_newt_button_new (_("Create"))); g_signal_connect (button, "clicked", G_CALLBACK (create_connection), form); nmt_newt_grid_add (NMT_NEWT_GRID (buttons), button, 1, 0); nmt_newt_form_set_content (NMT_NEWT_FORM (form), NMT_NEWT_WIDGET (grid)); }
static void nmt_widget_list_init (NmtWidgetList *list) { NmtWidgetListPrivate *priv = NMT_WIDGET_LIST_GET_PRIVATE (list); priv->widgets = g_ptr_array_new (); priv->remove_buttons = g_ptr_array_new (); priv->add_button = nmt_newt_button_new (_("Add...")); g_signal_connect (priv->add_button, "clicked", G_CALLBACK (add_clicked), list); nmt_newt_grid_add (NMT_NEWT_GRID (list), priv->add_button, 0, 0); }
static void nmt_device_entry_init (NmtDeviceEntry *deventry) { NmtDeviceEntryPrivate *priv = NMT_DEVICE_ENTRY_GET_PRIVATE (deventry); NmtNewtWidget *entry; priv->hardware_type = G_TYPE_NONE; entry = nmt_newt_entry_new (-1, 0); priv->entry = NMT_NEWT_ENTRY (entry); nmt_newt_entry_set_validator (priv->entry, device_entry_validate, deventry); g_signal_connect (priv->entry, "notify::text", G_CALLBACK (entry_text_changed), deventry); #if 0 priv->button = nmt_newt_button_new (_("Select...")); g_signal_connect (priv->button, "clicked", G_CALLBACK (do_select_dialog), deventry); #endif }
static void nmt_page_team_port_constructed (GObject *object) { NmtPageTeamPort *team = NMT_PAGE_TEAM_PORT (object); NmtPageTeamPortPrivate *priv = NMT_PAGE_TEAM_PORT_GET_PRIVATE (team); NmtNewtGrid *grid; NMSettingTeamPort *s_port; NmtNewtWidget *widget; NMConnection *conn; conn = nmt_editor_page_get_connection (NMT_EDITOR_PAGE (team)); s_port = nm_connection_get_setting_team_port (conn); if (!s_port) { nm_connection_add_setting (conn, nm_setting_team_port_new ()); s_port = nm_connection_get_setting_team_port (conn); } priv->s_port = s_port; widget = nmt_newt_grid_new (); nmt_page_grid_append (NMT_PAGE_GRID (team), NULL, widget, NULL); grid = NMT_NEWT_GRID (widget); widget = nmt_newt_label_new (_("JSON configuration")); nmt_newt_grid_add (grid, widget, 0, 2); widget = nmt_newt_textbox_new (NMT_NEWT_TEXTBOX_SCROLLABLE | NMT_NEWT_TEXTBOX_SET_BACKGROUND, 60); g_object_bind_property (s_port, NM_SETTING_TEAM_PORT_CONFIG, widget, "text", G_BINDING_SYNC_CREATE); nmt_newt_grid_add (grid, widget, 0, 3); nmt_newt_widget_set_padding (widget, 2, 0, 2, 1); widget = nmt_newt_button_new (_("Edit...")); g_signal_connect (widget, "clicked", G_CALLBACK (edit_clicked), team); nmt_newt_grid_add (grid, widget, 0, 4); G_OBJECT_CLASS (nmt_page_team_port_parent_class)->constructed (object); }
static void nmt_page_ip4_constructed (GObject *object) { NmtPageIP4 *ip4 = NMT_PAGE_IP4 (object); gboolean show_by_default; NmtEditorSection *section; NmtEditorGrid *grid; NMSettingIPConfig *s_ip4; NmtNewtWidget *widget, *button; NMConnection *conn; conn = nmt_editor_page_get_connection (NMT_EDITOR_PAGE (ip4)); s_ip4 = nm_connection_get_setting_ip4_config (conn); if (!s_ip4) { s_ip4 = (NMSettingIPConfig *) nm_setting_ip4_config_new (); g_object_set (G_OBJECT (s_ip4), NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL); nm_connection_add_setting (conn, (NMSetting *) s_ip4); } widget = nmt_newt_popup_new (ip4methods); g_object_bind_property (s_ip4, NM_SETTING_IP_CONFIG_METHOD, widget, "active-id", G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE); if (!g_strcmp0 (nm_setting_ip_config_get_method (s_ip4), NM_SETTING_IP4_CONFIG_METHOD_MANUAL)) show_by_default = TRUE; else if (nm_setting_ip_config_get_num_addresses (s_ip4)) show_by_default = TRUE; else show_by_default = FALSE; section = nmt_editor_section_new (_("IPv4 CONFIGURATION"), widget, show_by_default); grid = nmt_editor_section_get_body (section); widget = nmt_address_list_new (NMT_ADDRESS_LIST_IP4_WITH_PREFIX); nm_editor_bind_ip_addresses_with_prefix_to_strv (AF_INET, s_ip4, NM_SETTING_IP_CONFIG_ADDRESSES, widget, "strings", G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE); nmt_editor_grid_append (grid, _("Addresses"), widget, NULL); widget = nmt_ip_entry_new (25, AF_INET, FALSE, TRUE); nm_editor_bind_ip_gateway_to_string (AF_INET, s_ip4, widget, "text", "sensitive", G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE); nmt_editor_grid_append (grid, _("Gateway"), widget, NULL); widget = nmt_address_list_new (NMT_ADDRESS_LIST_IP4); nm_editor_bind_ip_addresses_to_strv (AF_INET, s_ip4, NM_SETTING_IP_CONFIG_DNS, widget, "strings", G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE); nmt_editor_grid_append (grid, _("DNS servers"), widget, NULL); widget = nmt_address_list_new (NMT_ADDRESS_LIST_HOSTNAME); g_object_bind_property (s_ip4, NM_SETTING_IP_CONFIG_DNS_SEARCH, widget, "strings", G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE); nmt_editor_grid_append (grid, _("Search domains"), widget, NULL); nmt_editor_grid_append (grid, NULL, nmt_newt_separator_new (), NULL); widget = g_object_new (NMT_TYPE_NEWT_LABEL, "text", "", "style", NMT_NEWT_LABEL_PLAIN, NULL); g_object_bind_property_full (s_ip4, NM_SETTING_IP_CONFIG_ROUTES, widget, "text", G_BINDING_SYNC_CREATE, ip4_routes_transform_to_description, NULL, NULL, NULL); button = nmt_newt_button_new (_("Edit...")); g_signal_connect (button, "clicked", G_CALLBACK (edit_routes), s_ip4); nmt_editor_grid_append (grid, _("Routing"), widget, button); widget = nmt_newt_checkbox_new (_("Never use this network for default route")); g_object_bind_property (s_ip4, NM_SETTING_IP_CONFIG_NEVER_DEFAULT, widget, "active", G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL); nmt_editor_grid_append (grid, NULL, widget, NULL); widget = nmt_newt_checkbox_new (_("Ignore automatically obtained routes")); g_object_bind_property (s_ip4, NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES, widget, "active", G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL); nmt_editor_grid_append (grid, NULL, widget, NULL); nmt_editor_grid_append (grid, NULL, nmt_newt_separator_new (), NULL); widget = nmt_newt_checkbox_new (_("Require IPv4 addressing for this connection")); g_object_bind_property (s_ip4, NM_SETTING_IP_CONFIG_MAY_FAIL, widget, "active", G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL | G_BINDING_INVERT_BOOLEAN); nmt_editor_grid_append (grid, NULL, widget, NULL); nmt_editor_page_add_section (NMT_EDITOR_PAGE (ip4), section); G_OBJECT_CLASS (nmt_page_ip4_parent_class)->constructed (object); }
static void ensure_widgets (NmtWidgetList *list) { NmtWidgetListPrivate *priv = NMT_WIDGET_LIST_GET_PRIVATE (list); NmtNewtWidget *widget, *button, *focus; gboolean was_empty; NmtNewtForm *form; int i; was_empty = priv->widgets->len == 0; if (priv->length < priv->widgets->len) { /* remove excess widgets */ for (i = priv->length; i < priv->widgets->len; i++) { nmt_newt_container_remove (NMT_NEWT_CONTAINER (list), priv->widgets->pdata[i]); nmt_newt_container_remove (NMT_NEWT_CONTAINER (list), priv->remove_buttons->pdata[i]); } g_ptr_array_set_size (priv->widgets, priv->length); g_ptr_array_set_size (priv->remove_buttons, priv->length); } else if (priv->length > priv->widgets->len) { /* add new widgets */ for (i = priv->widgets->len; i < priv->length; i++) { widget = NMT_WIDGET_LIST_GET_CLASS (list)->create_widget (list, i); nmt_newt_grid_add (NMT_NEWT_GRID (list), widget, 0, i); g_ptr_array_add (priv->widgets, widget); button = nmt_newt_button_new (_("Remove")); g_signal_connect (button, "clicked", G_CALLBACK (remove_clicked), list); nmt_newt_grid_add (NMT_NEWT_GRID (list), button, 1, i); nmt_newt_widget_set_padding (button, 1, 0, 0, 0); g_ptr_array_add (priv->remove_buttons, button); } } else return; if (priv->widgets->len == 0 && priv->empty_widget) { nmt_newt_widget_set_visible (priv->empty_widget, TRUE); nmt_newt_grid_move (NMT_NEWT_GRID (list), priv->add_button, 0, 1); } else { if (was_empty && priv->empty_widget) nmt_newt_widget_set_visible (priv->empty_widget, FALSE); nmt_newt_grid_move (NMT_NEWT_GRID (list), priv->add_button, 0, priv->length); } form = nmt_newt_widget_get_form (NMT_NEWT_WIDGET (list)); if (form) { if (priv->widgets->len) { if (was_empty) focus = priv->widgets->pdata[0]; else focus = priv->widgets->pdata[priv->widgets->len - 1]; } else focus = priv->add_button; nmt_newt_form_set_focus (form, focus); } g_clear_object (&priv->add_sensitivity); if (priv->widgets->len) { widget = priv->widgets->pdata[priv->widgets->len - 1]; priv->add_sensitivity = g_object_bind_property (widget, "valid", priv->add_button, "sensitive", G_BINDING_SYNC_CREATE); g_object_add_weak_pointer (G_OBJECT (priv->add_sensitivity), (gpointer *)&priv->add_sensitivity); } }