diff options
Diffstat (limited to 'src/csview.c')
-rw-r--r-- | src/csview.c | 181 |
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); +} + + |