summaryrefslogtreecommitdiff
path: root/src/csview.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/csview.c')
-rw-r--r--src/csview.c181
1 files changed, 142 insertions, 39 deletions
diff --git a/src/csview.c b/src/csview.c
index 512f4df..ab4d7e8 100644
--- a/src/csview.c
+++ b/src/csview.c
@@ -154,6 +154,9 @@ typedef struct _GUICSView GUICSView;
typedef struct _GUICSViewClass GUICSViewClass;
typedef struct _GUICSViewPrivate GUICSViewPrivate;
+#define EMULATION_TYPE_SPEC_ENTRY (emulation_spec_entry_get_type ())
+typedef struct _EmulationSpecEntry EmulationSpecEntry;
+
struct _GUICSListModel {
GObject parent_instance;
GUICSListModelPrivate * priv;
@@ -239,12 +242,20 @@ struct _GUICSViewClass {
};
struct _GUICSViewPrivate {
- GtkButton* m_pkgup;
- GtkButton* m_pkgdown;
- GUICSListModel* m_pkg_store;
+ GtkButton* up_btn;
+ GtkButton* down_btn;
+ GUICSListModel** models;
+ gint models_length1;
+ gint models_size;
+ GtkTreeView* cs_view;
guint m_pos;
};
+struct _EmulationSpecEntry {
+ EmulationSpec* spec;
+ char* name;
+};
+
static char** gui_cs_list_model_packet_strings;
static gint gui_cs_list_model_packet_strings_length1;
@@ -284,6 +295,9 @@ static gint gui_cs_list_model_packet_headers_length_size = 0;
static gpointer gui_cs_list_model_cs_iter_parent_class = NULL;
static gpointer gui_cs_list_model_parent_class = NULL;
static GtkTreeModelIface* gui_cs_list_model_gtk_tree_model_parent_iface = NULL;
+extern EmulationSpecEntry* emulation_specs;
+extern gint emulation_specs_length1;
+extern guint emulation_spec_default;
static gpointer gui_cs_view_parent_class = NULL;
GType gui_cs_list_model_get_type (void);
@@ -395,9 +409,18 @@ enum {
};
static void gui_cs_view_current_dword_renderer (GUICSView* self, GtkTreeViewColumn* tree_column, GtkCellRenderer* cell, GtkTreeModel* model, GtkTreeIter* iter);
static void _gui_cs_view_current_dword_renderer_gtk_tree_cell_data_func (GtkTreeViewColumn* tree_column, GtkCellRenderer* cell, GtkTreeModel* tree_model, GtkTreeIter* iter, gpointer self);
-GUICSView* gui_cs_view_new (EmulationCS* cs, EmulationSpec* spec);
-GUICSView* gui_cs_view_construct (GType object_type, EmulationCS* cs, EmulationSpec* spec);
+GType emulation_spec_entry_get_type (void);
+EmulationSpecEntry* emulation_spec_entry_dup (const EmulationSpecEntry* self);
+void emulation_spec_entry_free (EmulationSpecEntry* self);
+void emulation_spec_entry_copy (const EmulationSpecEntry* self, EmulationSpecEntry* dest);
+void emulation_spec_entry_destroy (EmulationSpecEntry* self);
+static void _lambda8_ (GtkComboBox* combo, GUICSView* self);
+static void __lambda8__gtk_combo_box_changed (GtkComboBox* _sender, gpointer self);
+GUICSView* gui_cs_view_new (EmulationCS* cs);
+GUICSView* gui_cs_view_construct (GType object_type, EmulationCS* cs);
static void gui_cs_view_finalize (GObject* obj);
+static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func);
+static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func);
@@ -2047,66 +2070,127 @@ static void _gui_cs_view_current_dword_renderer_gtk_tree_cell_data_func (GtkTree
}
-GUICSView* gui_cs_view_construct (GType object_type, EmulationCS* cs, EmulationSpec* spec) {
+static void _lambda8_ (GtkComboBox* combo, GUICSView* self) {
+ g_return_if_fail (combo != NULL);
+ gtk_tree_view_set_model (self->priv->cs_view, (GtkTreeModel*) self->priv->models[gtk_combo_box_get_active (combo)]);
+}
+
+
+static void __lambda8__gtk_combo_box_changed (GtkComboBox* _sender, gpointer self) {
+ _lambda8_ (_sender, self);
+}
+
+
+GUICSView* gui_cs_view_construct (GType object_type, EmulationCS* cs) {
GUICSView * self;
- GtkTreeView* cs_list;
- GtkCellRendererPixbuf* _tmp0_;
- GtkCellRendererText* _tmp1_;
- GtkTreeViewColumn* _tmp2_;
+ GtkTreeView* _tmp0_;
+ GtkCellRendererPixbuf* _tmp1_;
+ GtkCellRendererText* _tmp2_;
+ GtkTreeViewColumn* _tmp3_;
GtkTreeViewColumn* ec_name;
- GtkCellRendererText* _tmp3_;
- GtkTreeViewColumn* _tmp4_;
+ GtkCellRendererText* _tmp4_;
+ GtkTreeViewColumn* _tmp5_;
GtkTreeViewColumn* ec_value;
- GtkCellRendererText* _tmp5_;
- GtkTreeViewColumn* _tmp6_;
+ GtkCellRendererText* _tmp6_;
+ GtkTreeViewColumn* _tmp7_;
GtkTreeViewColumn* ec_target;
- GUICSListModel* _tmp7_;
+ GUICSListModel** _tmp8_;
+ GtkComboBox* chips;
GtkScrolledWindow* cs_sw;
+ GtkLabel* chip_label;
+ GtkHBox* chips_box;
+ GtkButton* _tmp11_;
+ GtkImage* _tmp12_;
+ GtkButton* _tmp13_;
+ GtkImage* _tmp14_;
+ GtkVBox* btnbox;
+ GtkHBox* hbl;
GtkVBox* vbl;
- GtkButton* _tmp8_;
- GtkButton* _tmp9_;
g_return_val_if_fail (cs != NULL, NULL);
- g_return_val_if_fail (spec != NULL, NULL);
self = g_object_newv (object_type, 0, NULL);
self->priv->m_pos = (guint) 0;
- cs_list = g_object_ref_sink ((GtkTreeView*) gtk_tree_view_new ());
- gtk_tree_view_insert_column_with_data_func (cs_list, -1, "", (GtkCellRenderer*) (_tmp0_ = g_object_ref_sink ((GtkCellRendererPixbuf*) gtk_cell_renderer_pixbuf_new ())), _gui_cs_view_current_dword_renderer_gtk_tree_cell_data_func, g_object_ref (self), g_object_unref);
- _g_object_unref0 (_tmp0_);
- ec_name = (_tmp2_ = g_object_ref_sink (gtk_tree_view_column_new_with_attributes ("Name", (GtkCellRenderer*) (_tmp1_ = g_object_ref_sink ((GtkCellRendererText*) gtk_cell_renderer_text_new ())), "text", GUI_CS_LIST_MODEL_COLUMNS_NAME, NULL, NULL)), _g_object_unref0 (_tmp1_), _tmp2_);
- ec_value = (_tmp4_ = g_object_ref_sink (gtk_tree_view_column_new_with_attributes ("Value", (GtkCellRenderer*) (_tmp3_ = g_object_ref_sink ((GtkCellRendererText*) gtk_cell_renderer_text_new ())), "text", GUI_CS_LIST_MODEL_COLUMNS_VALUE, NULL, NULL)), _g_object_unref0 (_tmp3_), _tmp4_);
- ec_target = (_tmp6_ = g_object_ref_sink (gtk_tree_view_column_new_with_attributes ("Target", (GtkCellRenderer*) (_tmp5_ = g_object_ref_sink ((GtkCellRendererText*) gtk_cell_renderer_text_new ())), "text", GUI_CS_LIST_MODEL_COLUMNS_TARGET, NULL, NULL)), _g_object_unref0 (_tmp5_), _tmp6_);
- gtk_tree_view_insert_column (cs_list, ec_name, -1);
- gtk_tree_view_insert_column (cs_list, ec_value, -1);
- gtk_tree_view_insert_column (cs_list, ec_target, -1);
+ self->priv->cs_view = (_tmp0_ = g_object_ref_sink ((GtkTreeView*) gtk_tree_view_new ()), _g_object_unref0 (self->priv->cs_view), _tmp0_);
+ gtk_tree_view_insert_column_with_data_func (self->priv->cs_view, -1, "", (GtkCellRenderer*) (_tmp1_ = g_object_ref_sink ((GtkCellRendererPixbuf*) gtk_cell_renderer_pixbuf_new ())), _gui_cs_view_current_dword_renderer_gtk_tree_cell_data_func, g_object_ref (self), g_object_unref);
+ _g_object_unref0 (_tmp1_);
+ ec_name = (_tmp3_ = g_object_ref_sink (gtk_tree_view_column_new_with_attributes ("Name", (GtkCellRenderer*) (_tmp2_ = g_object_ref_sink ((GtkCellRendererText*) gtk_cell_renderer_text_new ())), "text", GUI_CS_LIST_MODEL_COLUMNS_NAME, NULL, NULL)), _g_object_unref0 (_tmp2_), _tmp3_);
+ ec_value = (_tmp5_ = g_object_ref_sink (gtk_tree_view_column_new_with_attributes ("Value", (GtkCellRenderer*) (_tmp4_ = g_object_ref_sink ((GtkCellRendererText*) gtk_cell_renderer_text_new ())), "text", GUI_CS_LIST_MODEL_COLUMNS_VALUE, NULL, NULL)), _g_object_unref0 (_tmp4_), _tmp5_);
+ ec_target = (_tmp7_ = g_object_ref_sink (gtk_tree_view_column_new_with_attributes ("Target", (GtkCellRenderer*) (_tmp6_ = g_object_ref_sink ((GtkCellRendererText*) gtk_cell_renderer_text_new ())), "text", GUI_CS_LIST_MODEL_COLUMNS_TARGET, NULL, NULL)), _g_object_unref0 (_tmp6_), _tmp7_);
+ gtk_tree_view_insert_column (self->priv->cs_view, ec_name, -1);
+ gtk_tree_view_insert_column (self->priv->cs_view, ec_value, -1);
+ gtk_tree_view_insert_column (self->priv->cs_view, ec_target, -1);
gtk_tree_view_column_set_resizable (ec_name, TRUE);
gtk_tree_view_column_set_resizable (ec_value, TRUE);
gtk_tree_view_column_set_resizable (ec_target, TRUE);
- gtk_tree_view_set_model (cs_list, (GtkTreeModel*) (self->priv->m_pkg_store = (_tmp7_ = gui_cs_list_model_new (cs, spec), _g_object_unref0 (self->priv->m_pkg_store), _tmp7_)));
- gtk_tree_view_set_expander_column (cs_list, ec_name);
+ self->priv->models = (_tmp8_ = g_new0 (GUICSListModel*, emulation_specs_length1 + 1), self->priv->models = (_vala_array_free (self->priv->models, self->priv->models_length1, (GDestroyNotify) g_object_unref), NULL), self->priv->models_length1 = emulation_specs_length1, self->priv->models_size = self->priv->models_length1, _tmp8_);
+ chips = g_object_ref_sink ((GtkComboBox*) gtk_combo_box_new_text ());
+ {
+ guint i;
+ i = (guint) 0;
+ {
+ gboolean _tmp9_;
+ _tmp9_ = TRUE;
+ while (TRUE) {
+ GUICSListModel* _tmp10_;
+ if (!_tmp9_) {
+ i++;
+ }
+ _tmp9_ = FALSE;
+ if (!(i < emulation_specs_length1)) {
+ break;
+ }
+ gtk_combo_box_append_text (chips, emulation_specs[i].name);
+ self->priv->models[i] = (_tmp10_ = gui_cs_list_model_new (cs, emulation_specs[i].spec), _g_object_unref0 (self->priv->models[i]), _tmp10_);
+ }
+ }
+ }
+ gtk_combo_box_set_active (chips, (gint) emulation_spec_default);
+ g_signal_connect_object (chips, "changed", (GCallback) __lambda8__gtk_combo_box_changed, self, 0);
+ gtk_tree_view_set_model (self->priv->cs_view, (GtkTreeModel*) self->priv->models[emulation_spec_default]);
+ gtk_tree_view_set_expander_column (self->priv->cs_view, ec_name);
cs_sw = g_object_ref_sink ((GtkScrolledWindow*) gtk_scrolled_window_new (NULL, NULL));
- gtk_container_add ((GtkContainer*) cs_sw, (GtkWidget*) cs_list);
+ gtk_container_add ((GtkContainer*) cs_sw, (GtkWidget*) self->priv->cs_view);
gtk_scrolled_window_set_shadow_type (cs_sw, GTK_SHADOW_ETCHED_IN);
g_object_set (cs_sw, "hscrollbar-policy", GTK_POLICY_AUTOMATIC, NULL);
g_object_set (cs_sw, "vscrollbar-policy", GTK_POLICY_AUTOMATIC, NULL);
+ chip_label = g_object_ref_sink ((GtkLabel*) gtk_label_new (NULL));
+ gtk_label_set_markup (chip_label, "<b>Emulated chip:</b>");
+ chips_box = g_object_ref_sink ((GtkHBox*) gtk_hbox_new (FALSE, 4));
+ gtk_box_pack_start ((GtkBox*) chips_box, (GtkWidget*) chip_label, FALSE, FALSE, (guint) 0);
+ gtk_box_pack_start ((GtkBox*) chips_box, (GtkWidget*) chips, FALSE, FALSE, (guint) 0);
+ self->priv->up_btn = (_tmp11_ = g_object_ref_sink ((GtkButton*) gtk_button_new ()), _g_object_unref0 (self->priv->up_btn), _tmp11_);
+ gtk_container_add ((GtkContainer*) self->priv->up_btn, (GtkWidget*) (_tmp12_ = g_object_ref_sink ((GtkImage*) gtk_image_new_from_stock ("gtk-go-up", GTK_ICON_SIZE_BUTTON))));
+ _g_object_unref0 (_tmp12_);
+ self->priv->down_btn = (_tmp13_ = g_object_ref_sink ((GtkButton*) gtk_button_new ()), _g_object_unref0 (self->priv->down_btn), _tmp13_);
+ gtk_container_add ((GtkContainer*) self->priv->down_btn, (GtkWidget*) (_tmp14_ = g_object_ref_sink ((GtkImage*) gtk_image_new_from_stock ("gtk-go-down", GTK_ICON_SIZE_BUTTON))));
+ _g_object_unref0 (_tmp14_);
+ btnbox = g_object_ref_sink ((GtkVBox*) gtk_vbox_new (FALSE, 0));
+ gtk_box_pack_start ((GtkBox*) btnbox, (GtkWidget*) self->priv->up_btn, FALSE, FALSE, (guint) 0);
+ gtk_box_pack_end ((GtkBox*) btnbox, (GtkWidget*) self->priv->down_btn, FALSE, FALSE, (guint) 0);
+ hbl = g_object_ref_sink ((GtkHBox*) gtk_hbox_new (FALSE, 4));
+ gtk_box_pack_start ((GtkBox*) hbl, (GtkWidget*) cs_sw, TRUE, TRUE, (guint) 0);
+ gtk_box_pack_start ((GtkBox*) hbl, (GtkWidget*) btnbox, FALSE, TRUE, (guint) 0);
vbl = g_object_ref_sink ((GtkVBox*) gtk_vbox_new (FALSE, 4));
- gtk_box_pack_start ((GtkBox*) vbl, (GtkWidget*) (self->priv->m_pkgup = (_tmp8_ = g_object_ref_sink ((GtkButton*) gtk_button_new_from_stock ("gtk-go-up")), _g_object_unref0 (self->priv->m_pkgup), _tmp8_)), FALSE, TRUE, (guint) 0);
- gtk_box_pack_start ((GtkBox*) vbl, (GtkWidget*) cs_sw, TRUE, TRUE, (guint) 0);
- gtk_box_pack_start ((GtkBox*) vbl, (GtkWidget*) (self->priv->m_pkgdown = (_tmp9_ = g_object_ref_sink ((GtkButton*) gtk_button_new_from_stock ("gtk-go-down")), _g_object_unref0 (self->priv->m_pkgdown), _tmp9_)), FALSE, TRUE, (guint) 0);
+ gtk_box_pack_start ((GtkBox*) vbl, (GtkWidget*) chips_box, FALSE, TRUE, (guint) 0);
+ gtk_box_pack_start ((GtkBox*) vbl, (GtkWidget*) hbl, TRUE, TRUE, (guint) 0);
gtk_container_add ((GtkContainer*) self, (GtkWidget*) vbl);
gtk_container_set_border_width ((GtkContainer*) self, (guint) 10);
gtk_window_set_default_size ((GtkWindow*) self, 640, 480);
- _g_object_unref0 (cs_list);
_g_object_unref0 (ec_name);
_g_object_unref0 (ec_value);
_g_object_unref0 (ec_target);
+ _g_object_unref0 (chips);
_g_object_unref0 (cs_sw);
+ _g_object_unref0 (chip_label);
+ _g_object_unref0 (chips_box);
+ _g_object_unref0 (btnbox);
+ _g_object_unref0 (hbl);
_g_object_unref0 (vbl);
return self;
}
-GUICSView* gui_cs_view_new (EmulationCS* cs, EmulationSpec* spec) {
- return gui_cs_view_construct (GUI_TYPE_CS_VIEW, cs, spec);
+GUICSView* gui_cs_view_new (EmulationCS* cs) {
+ return gui_cs_view_construct (GUI_TYPE_CS_VIEW, cs);
}
@@ -2133,9 +2217,10 @@ static void gui_cs_view_instance_init (GUICSView * self) {
static void gui_cs_view_finalize (GObject* obj) {
GUICSView * self;
self = GUI_CS_VIEW (obj);
- _g_object_unref0 (self->priv->m_pkgup);
- _g_object_unref0 (self->priv->m_pkgdown);
- _g_object_unref0 (self->priv->m_pkg_store);
+ _g_object_unref0 (self->priv->up_btn);
+ _g_object_unref0 (self->priv->down_btn);
+ self->priv->models = (_vala_array_free (self->priv->models, self->priv->models_length1, (GDestroyNotify) g_object_unref), NULL);
+ _g_object_unref0 (self->priv->cs_view);
G_OBJECT_CLASS (gui_cs_view_parent_class)->finalize (obj);
}
@@ -2150,5 +2235,23 @@ GType gui_cs_view_get_type (void) {
}
+static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func) {
+ if ((array != NULL) && (destroy_func != NULL)) {
+ int i;
+ for (i = 0; i < array_length; i = i + 1) {
+ if (((gpointer*) array)[i] != NULL) {
+ destroy_func (((gpointer*) array)[i]);
+ }
+ }
+ }
+}
+
+
+static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func) {
+ _vala_array_destroy (array, array_length, destroy_func);
+ g_free (array);
+}
+
+