diff options
Diffstat (limited to 'src/beaver-settings-page.c')
-rw-r--r-- | src/beaver-settings-page.c | 124 |
1 files changed, 98 insertions, 26 deletions
diff --git a/src/beaver-settings-page.c b/src/beaver-settings-page.c index ea9537a..ccf380a 100644 --- a/src/beaver-settings-page.c +++ b/src/beaver-settings-page.c @@ -146,14 +146,7 @@ preferences_timeout_cb (gpointer userdata) } static void -full_radio_toggled_cb (GtkToggleButton *toggle, gpointer userdata) -{ - gtk_widget_set_sensitive (GTK_WIDGET (userdata), - gtk_toggle_button_get_active (toggle)); -} - -static void -toolchain_radio_toggled_cb (GtkToggleButton *toggle, gpointer userdata) +radio_toggled_cb (GtkToggleButton *toggle, gpointer userdata) { gtk_widget_set_sensitive (GTK_WIDGET (userdata), gtk_toggle_button_get_active (toggle)); @@ -166,8 +159,8 @@ create_ui (BeaverSettingsPage *page) GtkSizeGroup *opts_labels_group; GtkSizeGroup *opts_fields_group; - GtkSizeGroup *qemu_labels_group; - GtkSizeGroup *qemu_fields_group; + GtkSizeGroup *target_labels_group; + GtkSizeGroup *target_fields_group; GtkWidget *frame; GtkWidget *inner_vbox; @@ -181,6 +174,9 @@ create_ui (BeaverSettingsPage *page) GtkWidget *toolchain_radio; GtkWidget *full_radio; + GtkWidget *qemu_radio; + GtkWidget *device_radio; + gboolean res; gchar *filename = NULL; @@ -208,7 +204,7 @@ create_ui (BeaverSettingsPage *page) /* Radio for external toolchain */ toolchain_radio = gtk_radio_button_new_with_label (NULL, - _("Use an external toolchain")); + _("Use an external toolchain:")); gtk_box_pack_start (GTK_BOX (inner_vbox), toolchain_radio, TRUE, FALSE, 0); /* Widgets for sdk root */ @@ -218,7 +214,7 @@ create_ui (BeaverSettingsPage *page) hbox = gtk_hbox_new (FALSE, 6); gtk_container_add (GTK_CONTAINER (inner_alignment), hbox); - g_signal_connect (toolchain_radio, "toggled", (GCallback)toolchain_radio_toggled_cb, + g_signal_connect (toolchain_radio, "toggled", (GCallback)radio_toggled_cb, hbox); /* label */ @@ -258,7 +254,7 @@ create_ui (BeaverSettingsPage *page) hbox = gtk_hbox_new (FALSE, 6); gtk_container_add (GTK_CONTAINER (inner_alignment), hbox); - g_signal_connect (full_radio, "toggled", (GCallback)full_radio_toggled_cb, + g_signal_connect (full_radio, "toggled", (GCallback)radio_toggled_cb, hbox); /* Make the full options insensitive since by default we used external @@ -312,7 +308,10 @@ create_ui (BeaverSettingsPage *page) /* Widgets for toolchain triplet */ hbox = gtk_hbox_new (FALSE, 6); - gtk_box_pack_start (GTK_BOX (inner_vbox), hbox, TRUE, FALSE, 0); + inner_alignment = gtk_alignment_new (0, 0.5, 1, 1); + g_object_set (inner_alignment, "top-padding", 6, NULL); + gtk_container_add (GTK_CONTAINER (inner_alignment), hbox); + gtk_box_pack_start (GTK_BOX (inner_vbox), inner_alignment, TRUE, FALSE, 0); /* label */ label = gtk_label_new (_("Toolchain triplet: ")); @@ -337,17 +336,13 @@ create_ui (BeaverSettingsPage *page) if (!res) g_warning ("Error adding preference for triplet"); - /* Frame for qemu */ - frame = gtk_frame_new ("<b>QEMU Options</b>"); + /* Frame for target */ + frame = gtk_frame_new (_("<b>Target Options</b>")); gtk_box_pack_start (GTK_BOX (page), frame, FALSE, FALSE, 2); gtk_label_set_use_markup (GTK_LABEL (gtk_frame_get_label_widget (GTK_FRAME (frame))), TRUE); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_NONE); - /* size groups for files */ - qemu_labels_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); - qemu_fields_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); - /* Pack inner vbox */ inner_vbox = gtk_vbox_new (FALSE, 6); inner_alignment = gtk_alignment_new (0, 0.5, 1, 1); @@ -355,20 +350,38 @@ create_ui (BeaverSettingsPage *page) gtk_container_add (GTK_CONTAINER (inner_alignment), inner_vbox); gtk_container_add (GTK_CONTAINER (frame), inner_alignment); + /* QEMU */ + qemu_radio = gtk_radio_button_new_with_label (NULL, _("Use QEMU Device Emulator")); + gtk_box_pack_start (GTK_BOX (inner_vbox), qemu_radio, TRUE, FALSE, 2); + + inner_alignment = gtk_alignment_new (0, 0.5, 1, 1); + g_object_set (inner_alignment, "left-padding", 24, NULL); + + qemu_vbox = gtk_vbox_new (FALSE, 6); + gtk_container_add (GTK_CONTAINER (inner_alignment), qemu_vbox); + gtk_box_pack_start (GTK_BOX (inner_vbox), inner_alignment, TRUE, FALSE, 2); + + g_signal_connect (qemu_radio, "toggled", (GCallback)radio_toggled_cb, + qemu_vbox); + + /* size groups for files */ + target_labels_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); + target_fields_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); + /* Widgets for kernel */ hbox = gtk_hbox_new (FALSE, 6); - gtk_box_pack_start (GTK_BOX (inner_vbox), hbox, TRUE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (qemu_vbox), hbox, TRUE, FALSE, 0); /* label */ label = gtk_label_new ("Kernel: "); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); - gtk_size_group_add_widget (qemu_labels_group, label); + gtk_size_group_add_widget (target_labels_group, label); gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5); /* chooser */ chooser = gtk_file_chooser_button_new (_("Select kernel file"), GTK_FILE_CHOOSER_ACTION_OPEN); gtk_box_pack_start (GTK_BOX (hbox), chooser, TRUE, TRUE, 0); - gtk_size_group_add_widget (qemu_fields_group, chooser); + gtk_size_group_add_widget (target_fields_group, chooser); anjuta_preferences_register_property_raw ( priv->prefs, @@ -383,19 +396,19 @@ create_ui (BeaverSettingsPage *page) /* Widgets for rootfs */ hbox = gtk_hbox_new (FALSE, 6); - gtk_box_pack_start (GTK_BOX (inner_vbox), hbox, TRUE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (qemu_vbox), hbox, TRUE, FALSE, 0); /* label */ label = gtk_label_new ("Root filesystem: "); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); - gtk_size_group_add_widget (qemu_labels_group, label); + gtk_size_group_add_widget (target_labels_group, label); gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5); /* chooser */ chooser = gtk_file_chooser_button_new (_("Select root filesystem file"), GTK_FILE_CHOOSER_ACTION_OPEN); gtk_box_pack_start (GTK_BOX (hbox), chooser, TRUE, TRUE, 0); - gtk_size_group_add_widget (qemu_fields_group, chooser); + gtk_size_group_add_widget (target_fields_group, chooser); priv->rootfs_chooser = chooser; anjuta_preferences_register_property_raw ( @@ -407,6 +420,65 @@ create_ui (BeaverSettingsPage *page) ANJUTA_PROPERTY_OBJECT_TYPE_FILE, ANJUTA_PROPERTY_DATA_TYPE_TEXT); + /* device */ + device_radio = gtk_radio_button_new_with_label_from_widget ( + GTK_RADIO_BUTTON (qemu_radio), _("Use an external device")); + gtk_box_pack_start (GTK_BOX (inner_vbox), device_radio, TRUE, FALSE, 2); + + /* widgets for device entry */ + inner_alignment = gtk_alignment_new (0, 0.5, 1, 1); + g_object_set (inner_alignment, "left-padding", 24, NULL); + gtk_box_pack_start (GTK_BOX (inner_vbox), inner_alignment, TRUE, FALSE, 0); + hbox = gtk_hbox_new (FALSE, 6); + gtk_container_add (GTK_CONTAINER (inner_alignment), hbox); + gtk_widget_set_sensitive (hbox, FALSE); + + g_signal_connect (device_radio, "toggled", (GCallback)radio_toggled_cb, + hbox); + + /* Register a preference for the toggle */ + + /* This is all a bit of a hack, we register the property on the second one + * in the group. If the mode is 1 then this gets selected and the world is a + * happy place. But if this is 0, then the group is in an inconsistent + * state...Ah, but actually when the widgets are created the first is + * toggled on by default. + */ + res = anjuta_preferences_register_property_raw ( + priv->prefs, + device_radio, + PREFS_PROP_TARGET_MODE, + NULL, + 0, + ANJUTA_PROPERTY_OBJECT_TYPE_TOGGLE, + ANJUTA_PROPERTY_DATA_TYPE_INT); + + if (!res) + g_warning ("Error adding preference for mode of operation"); + + /* label */ + label = gtk_label_new ("IP address:"); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); + gtk_size_group_add_widget (target_labels_group, label); + gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5); + + /* entry */ + entry = gtk_entry_new (); + gtk_box_pack_start (GTK_BOX (hbox), entry, TRUE, TRUE, 0); + gtk_size_group_add_widget (target_fields_group, label); + + /* register prop */ + res = anjuta_preferences_register_property_raw (priv->prefs, + entry, + PREFS_PROP_TARGET_IP, + NULL, + 0, + ANJUTA_PROPERTY_OBJECT_TYPE_ENTRY, + ANJUTA_PROPERTY_DATA_TYPE_TEXT); + + if (!res) + g_warning ("Error adding preference for target IP"); + /* add page */ gtk_widget_show_all (GTK_WIDGET (page)); |