aboutsummaryrefslogtreecommitdiffstats
path: root/src/beaver-settings-page.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/beaver-settings-page.c')
-rw-r--r--src/beaver-settings-page.c124
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));