summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoakim Sindholt <opensource@zhasha.com>2010-04-06 03:11:58 +0200
committerJoakim Sindholt <opensource@zhasha.com>2010-04-06 03:11:58 +0200
commit6edcb6a03aec76a99181cd77e8b38ea3e027ed23 (patch)
tree195614888a04e93e001a2848807b58d2bef0cfef
parente9f96e863deb3cdf1bea48aba71ca7b0b89fa30b (diff)
csview: support different chips and allow on-the-fly switching
-rw-r--r--src/csview.c181
-rw-r--r--src/csview.vala73
-rw-r--r--src/main.c424
-rw-r--r--src/main.vala193
4 files changed, 542 insertions, 329 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);
+}
+
+
diff --git a/src/csview.vala b/src/csview.vala
index b2c0374..18371fe 100644
--- a/src/csview.vala
+++ b/src/csview.vala
@@ -3,6 +3,10 @@ using Emulation;
namespace GUI
{
+ /* The fantastic thing about this model is that it doesn't copy the
+ * contents of the given CS, and has virtually no creation overhead. This
+ * means that we can create as many as we want of them and not really waste
+ * any space or CPU time. It makes the code a little cumbersome though. */
public class CSListModel : GLib.Object, TreeModel
{
public enum Columns
@@ -669,42 +673,72 @@ namespace GUI
public class CSView : Window
{
//private CS m_cs;
- private Button m_pkgup;
- private Button m_pkgdown;
- private CSListModel m_pkg_store;
+ private Button up_btn;
+ private Button down_btn;
+ private CSListModel[] models;
+ private TreeView cs_view;
//private ListStore m_reg_store;
//private ListStore m_raw_store;
private uint m_pos;
- public CSView(CS cs, Spec spec)
+ public CSView(CS cs)
{
//m_cs = cs;
m_pos = 0;
- var cs_list = new TreeView();
- cs_list.insert_column_with_data_func(-1, "", new Gtk.CellRendererPixbuf(), current_dword_renderer);
+ cs_view = new TreeView();
+ cs_view.insert_column_with_data_func(-1, "", new Gtk.CellRendererPixbuf(), current_dword_renderer);
var ec_name = new Gtk.TreeViewColumn.with_attributes("Name", new Gtk.CellRendererText(), "text", CSListModel.Columns.NAME, null);
var ec_value = new Gtk.TreeViewColumn.with_attributes("Value", new Gtk.CellRendererText(), "text", CSListModel.Columns.VALUE, null);
var ec_target = new Gtk.TreeViewColumn.with_attributes("Target", new Gtk.CellRendererText(), "text", CSListModel.Columns.TARGET, null);
- cs_list.insert_column(ec_name, -1);
- cs_list.insert_column(ec_value, -1);
- cs_list.insert_column(ec_target, -1);
+ cs_view.insert_column(ec_name, -1);
+ cs_view.insert_column(ec_value, -1);
+ cs_view.insert_column(ec_target, -1);
ec_name.resizable = true;
ec_value.resizable = true;
ec_target.resizable = true;
- cs_list.set_model(m_pkg_store = new CSListModel(cs, spec));
- cs_list.set_expander_column(ec_name);
+
+ models = new CSListModel[specs.length];
+ var chips = new ComboBox.text();
+ for (uint i = 0; i < specs.length; i++) {
+ chips.append_text(specs[i].name);
+ models[i] = new CSListModel(cs, specs[i].spec);
+ }
+ chips.set_active((int)spec_default);
+ chips.changed.connect((combo) => { cs_view.set_model(models[combo.get_active()]); });
+
+ cs_view.set_model(models[spec_default]);
+ cs_view.set_expander_column(ec_name);
var cs_sw = new ScrolledWindow(null, null);
- cs_sw.add(cs_list);
+ cs_sw.add(cs_view);
cs_sw.shadow_type = ShadowType.ETCHED_IN;
cs_sw.hscrollbar_policy = PolicyType.AUTOMATIC;
cs_sw.vscrollbar_policy = PolicyType.AUTOMATIC;
+ var chip_label = new Label(null);
+ chip_label.set_markup("<b>Emulated chip:</b>");
+
+ var chips_box = new HBox(false, 4);
+ chips_box.pack_start(chip_label, false, false, 0);
+ chips_box.pack_start(chips, false, false, 0);
+
+ up_btn = new Button();
+ up_btn.add(new Image.from_stock("gtk-go-up", IconSize.BUTTON));
+ down_btn = new Button();
+ down_btn.add(new Image.from_stock("gtk-go-down", IconSize.BUTTON));
+
+ var btnbox = new VBox(false, 0);
+ btnbox.pack_start(up_btn, false, false, 0);
+ btnbox.pack_end(down_btn, false, false, 0);
+
+ var hbl = new HBox(false, 4);
+ hbl.pack_start(cs_sw, true, true, 0);
+ hbl.pack_start(btnbox, false, true, 0);
+
var vbl = new VBox(false, 4);
- vbl.pack_start(m_pkgup = new Button.from_stock("gtk-go-up"), false, true, 0);
- vbl.pack_start(cs_sw, true, true, 0);
- vbl.pack_start(m_pkgdown = new Button.from_stock("gtk-go-down"), false, true, 0);
+ vbl.pack_start(chips_box, false, true, 0);
+ vbl.pack_start(hbl, true, true, 0);
/*var state_reg_list = new TreeView();
state_reg_list.set_model(m_reg_store = new ListStore(2, typeof(string), typeof(uint32)));
@@ -735,12 +769,12 @@ namespace GUI
paned.position = 400;*/
//this.add(paned);
- this.add(vbl);
- this.border_width = 10;
- this.set_default_size(640, 480);
+ add(vbl);
+ border_width = 10;
+ set_default_size(640, 480);
}
- private void current_dword_renderer(Gtk.TreeViewColumn tree_column, Gtk.CellRenderer cell, Gtk.TreeModel model, Gtk.TreeIter iter)
+ private void current_dword_renderer(TreeViewColumn tree_column, CellRenderer cell, TreeModel model, TreeIter iter)
{
/*if (m_pos == (model as CSListModel).get_packet_num(iter)) {
(cell as Gtk.CellRendererPixbuf).stock_id = "gtk-media-record";
@@ -750,4 +784,3 @@ namespace GUI
}
}
}
-
diff --git a/src/main.c b/src/main.c
index 5130078..2e62872 100644
--- a/src/main.c
+++ b/src/main.c
@@ -24,8 +24,6 @@ typedef struct _GUICActionsClass GUICActionsClass;
typedef struct _GUICActionsPrivate GUICActionsPrivate;
#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
-#define EMULATION_TYPE_CHIP (emulation_chip_get_type ())
-
#define GUI_TYPE_CS_IMPORT (gui_cs_import_get_type ())
#define GUI_CS_IMPORT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GUI_TYPE_CS_IMPORT, GUICSImport))
#define GUI_CS_IMPORT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GUI_TYPE_CS_IMPORT, GUICSImportClass))
@@ -82,16 +80,6 @@ typedef struct _EmulationPacketBase EmulationPacketBase;
typedef struct _EmulationPacketBaseClass EmulationPacketBaseClass;
#define _g_free0(var) (var = (g_free (var), NULL))
-#define EMULATION_TYPE_SPEC (emulation_spec_get_type ())
-#define EMULATION_SPEC(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EMULATION_TYPE_SPEC, EmulationSpec))
-#define EMULATION_SPEC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EMULATION_TYPE_SPEC, EmulationSpecClass))
-#define EMULATION_IS_SPEC(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EMULATION_TYPE_SPEC))
-#define EMULATION_IS_SPEC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EMULATION_TYPE_SPEC))
-#define EMULATION_SPEC_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EMULATION_TYPE_SPEC, EmulationSpecClass))
-
-typedef struct _EmulationSpec EmulationSpec;
-typedef struct _EmulationSpecClass EmulationSpecClass;
-
#define GUI_TYPE_CS_VIEW (gui_cs_view_get_type ())
#define GUI_CS_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GUI_TYPE_CS_VIEW, GUICSView))
#define GUI_CS_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GUI_TYPE_CS_VIEW, GUICSViewClass))
@@ -101,18 +89,31 @@ typedef struct _EmulationSpecClass EmulationSpecClass;
typedef struct _GUICSView GUICSView;
typedef struct _GUICSViewClass GUICSViewClass;
+#define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
-#define TYPE_SPEC_LOAD_DIALOG (spec_load_dialog_get_type ())
-#define SPEC_LOAD_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_SPEC_LOAD_DIALOG, SpecLoadDialog))
-#define SPEC_LOAD_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_SPEC_LOAD_DIALOG, SpecLoadDialogClass))
-#define IS_SPEC_LOAD_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_SPEC_LOAD_DIALOG))
-#define IS_SPEC_LOAD_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_SPEC_LOAD_DIALOG))
-#define SPEC_LOAD_DIALOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_SPEC_LOAD_DIALOG, SpecLoadDialogClass))
+#define EMULATION_TYPE_SPEC_LOAD_DIALOG (emulation_spec_load_dialog_get_type ())
+#define EMULATION_SPEC_LOAD_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EMULATION_TYPE_SPEC_LOAD_DIALOG, EmulationSpecLoadDialog))
+#define EMULATION_SPEC_LOAD_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EMULATION_TYPE_SPEC_LOAD_DIALOG, EmulationSpecLoadDialogClass))
+#define EMULATION_IS_SPEC_LOAD_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EMULATION_TYPE_SPEC_LOAD_DIALOG))
+#define EMULATION_IS_SPEC_LOAD_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EMULATION_TYPE_SPEC_LOAD_DIALOG))
+#define EMULATION_SPEC_LOAD_DIALOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EMULATION_TYPE_SPEC_LOAD_DIALOG, EmulationSpecLoadDialogClass))
-typedef struct _SpecLoadDialog SpecLoadDialog;
-typedef struct _SpecLoadDialogClass SpecLoadDialogClass;
-#define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
-typedef struct _SpecLoadDialogPrivate SpecLoadDialogPrivate;
+typedef struct _EmulationSpecLoadDialog EmulationSpecLoadDialog;
+typedef struct _EmulationSpecLoadDialogClass EmulationSpecLoadDialogClass;
+
+#define EMULATION_TYPE_SPEC_ENTRY (emulation_spec_entry_get_type ())
+
+#define EMULATION_TYPE_SPEC (emulation_spec_get_type ())
+#define EMULATION_SPEC(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EMULATION_TYPE_SPEC, EmulationSpec))
+#define EMULATION_SPEC_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EMULATION_TYPE_SPEC, EmulationSpecClass))
+#define EMULATION_IS_SPEC(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EMULATION_TYPE_SPEC))
+#define EMULATION_IS_SPEC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EMULATION_TYPE_SPEC))
+#define EMULATION_SPEC_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EMULATION_TYPE_SPEC, EmulationSpecClass))
+
+typedef struct _EmulationSpec EmulationSpec;
+typedef struct _EmulationSpecClass EmulationSpecClass;
+typedef struct _EmulationSpecEntry EmulationSpecEntry;
+typedef struct _EmulationSpecLoadDialogPrivate EmulationSpecLoadDialogPrivate;
struct _GUICActions {
GObject parent_instance;
@@ -125,26 +126,18 @@ struct _GUICActions {
GtkAction* ImportCS;
GtkAction* ExportCS;
GtkAction* Quit;
- GtkRadioAction* EmulateR300;
- GtkRadioAction* EmulateR500;
};
struct _GUICActionsClass {
GObjectClass parent_class;
};
-typedef enum {
- EMULATION_CHIP_R300,
- EMULATION_CHIP_R500
-} EmulationChip;
-
struct _GUICMenus {
GTypeInstance parent_instance;
volatile int ref_count;
GUICMenusPrivate * priv;
GtkMenu* file;
GtkMenu* edit;
- GtkMenu* emulation;
};
struct _GUICMenusClass {
@@ -182,16 +175,21 @@ struct _EmulationCSClass {
GObjectClass parent_class;
};
-struct _SpecLoadDialog {
+struct _EmulationSpecEntry {
+ EmulationSpec* spec;
+ char* name;
+};
+
+struct _EmulationSpecLoadDialog {
GtkWindow parent_instance;
- SpecLoadDialogPrivate * priv;
+ EmulationSpecLoadDialogPrivate * priv;
};
-struct _SpecLoadDialogClass {
+struct _EmulationSpecLoadDialogClass {
GtkWindowClass parent_class;
};
-struct _SpecLoadDialogPrivate {
+struct _EmulationSpecLoadDialogPrivate {
GtkLabel* loading;
GtkProgressBar* progress;
gboolean done;
@@ -200,16 +198,18 @@ struct _SpecLoadDialogPrivate {
static gpointer gui_cactions_parent_class = NULL;
static gpointer gui_cmenus_parent_class = NULL;
-extern EmulationSpec* r500_registers;
extern GUICActions* gui_actions;
static gpointer gui_cmain_parent_class = NULL;
GUICActions* gui_actions = NULL;
extern GUICMain* gui_main;
GUICMain* gui_main = NULL;
-extern EmulationSpec* r300_registers;
-EmulationSpec* r300_registers = NULL;
-EmulationSpec* r500_registers = NULL;
-static gpointer spec_load_dialog_parent_class = NULL;
+extern EmulationSpecEntry* emulation_specs;
+extern gint emulation_specs_length1;
+EmulationSpecEntry* emulation_specs = NULL;
+gint emulation_specs_length1 = 0;
+extern guint emulation_spec_default;
+guint emulation_spec_default = (guint) 1;
+static gpointer emulation_spec_load_dialog_parent_class = NULL;
GType gui_cactions_get_type (void);
enum {
@@ -217,12 +217,11 @@ enum {
};
GUICActions* gui_cactions_new (void);
GUICActions* gui_cactions_construct (GType object_type);
-GType emulation_chip_get_type (void);
GUICSImport* gui_cs_import_new (void);
GUICSImport* gui_cs_import_construct (GType object_type);
GType gui_cs_import_get_type (void);
-static void _lambda8_ (GtkAction* source, GUICActions* self);
-static void __lambda8__gtk_action_activate (GtkAction* _sender, gpointer self);
+static void _lambda9_ (GtkAction* source, GUICActions* self);
+static void __lambda9__gtk_action_activate (GtkAction* _sender, gpointer self);
static GObject * gui_cactions_constructor (GType type, guint n_construct_properties, GObjectConstructParam * construct_properties);
static void gui_cactions_finalize (GObject* obj);
gpointer gui_cmenus_ref (gpointer instance);
@@ -245,9 +244,8 @@ static void gui_cmain_add_toolitem (GUICMain* self, GtkAction* action);
GType emulation_cs_get_type (void);
GType emulation_packet_base_get_type (void);
static void gui_cmain_dwords_cellrenderer (GUICMain* self, GtkTreeViewColumn* tree_column, GtkCellRenderer* cell, GtkTreeModel* model, GtkTreeIter* iter);
-GType emulation_spec_get_type (void);
-GUICSView* gui_cs_view_new (EmulationCS* cs, EmulationSpec* spec);
-GUICSView* gui_cs_view_construct (GType object_type, EmulationCS* cs, EmulationSpec* spec);
+GUICSView* gui_cs_view_new (EmulationCS* cs);
+GUICSView* gui_cs_view_construct (GType object_type, EmulationCS* cs);
GType gui_cs_view_get_type (void);
static void gui_cmain_open_csview (GUICMain* self, GtkTreePath* path, GtkTreeViewColumn* column);
GUICMain* gui_cmain_new (void);
@@ -257,23 +255,30 @@ static void _gui_cmain_open_csview_gtk_tree_view_row_activated (GtkTreeView* _se
static void _gtk_main_quit_gtk_object_destroy (GtkObject* _sender, gpointer self);
static GObject * gui_cmain_constructor (GType type, guint n_construct_properties, GObjectConstructParam * construct_properties);
static void gui_cmain_finalize (GObject* obj);
-SpecLoadDialog* spec_load_dialog_new (GtkWindow* parent);
-SpecLoadDialog* spec_load_dialog_construct (GType object_type, GtkWindow* parent);
-GType spec_load_dialog_get_type (void);
-void* spec_load_dialog_run (SpecLoadDialog* self);
-static void* _spec_load_dialog_run_gthread_func (gpointer self);
+EmulationSpecLoadDialog* emulation_spec_load_dialog_new (GtkWindow* parent);
+EmulationSpecLoadDialog* emulation_spec_load_dialog_construct (GType object_type, GtkWindow* parent);
+GType emulation_spec_load_dialog_get_type (void);
+void* emulation_spec_load_dialog_run (EmulationSpecLoadDialog* self);
+static void* _emulation_spec_load_dialog_run_gthread_func (gpointer self);
void gui_init (char*** args, int* args_length1);
-#define SPEC_LOAD_DIALOG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_SPEC_LOAD_DIALOG, SpecLoadDialogPrivate))
+GType emulation_spec_entry_get_type (void);
+GType emulation_spec_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);
+#define EMULATION_SPEC_LOAD_DIALOG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), EMULATION_TYPE_SPEC_LOAD_DIALOG, EmulationSpecLoadDialogPrivate))
enum {
- SPEC_LOAD_DIALOG_DUMMY_PROPERTY
+ EMULATION_SPEC_LOAD_DIALOG_DUMMY_PROPERTY
};
-static void* spec_load_dialog_pulse_thread (SpecLoadDialog* self);
-static void* _spec_load_dialog_pulse_thread_gthread_func (gpointer self);
-static void* spec_load_dialog_specload_thread (SpecLoadDialog* self);
-static void* _spec_load_dialog_specload_thread_gthread_func (gpointer self);
+static void _vala_EmulationSpecEntry_array_free (EmulationSpecEntry* array, gint array_length);
+static void* emulation_spec_load_dialog_pulse_thread (EmulationSpecLoadDialog* self);
+static void* _emulation_spec_load_dialog_pulse_thread_gthread_func (gpointer self);
+static void* emulation_spec_load_dialog_specload_thread (EmulationSpecLoadDialog* self);
+static void* _emulation_spec_load_dialog_specload_thread_gthread_func (gpointer self);
EmulationSpec* emulation_spec_new (const char* filename, const char* variant);
EmulationSpec* emulation_spec_construct (GType object_type, const char* filename, const char* variant);
-static void spec_load_dialog_finalize (GObject* obj);
+static void emulation_spec_load_dialog_finalize (GObject* obj);
gint _main (char** args, int args_length1);
@@ -290,7 +295,7 @@ GUICActions* gui_cactions_new (void) {
}
-static void _lambda8_ (GtkAction* source, GUICActions* self) {
+static void _lambda9_ (GtkAction* source, GUICActions* self) {
GUICSImport* d;
g_return_if_fail (source != NULL);
d = g_object_ref_sink (gui_cs_import_new ());
@@ -299,8 +304,8 @@ static void _lambda8_ (GtkAction* source, GUICActions* self) {
}
-static void __lambda8__gtk_action_activate (GtkAction* _sender, gpointer self) {
- _lambda8_ (_sender, self);
+static void __lambda9__gtk_action_activate (GtkAction* _sender, gpointer self) {
+ _lambda9_ (_sender, self);
}
@@ -320,8 +325,6 @@ static GObject * gui_cactions_constructor (GType type, guint n_construct_propert
GtkAction* _tmp5_;
GtkAction* _tmp6_;
GtkAction* _tmp7_;
- GtkRadioAction* _tmp8_;
- GtkRadioAction* _tmp9_;
self->New = (_tmp0_ = gtk_action_new ("New", NULL, NULL, "gtk-new"), _g_object_unref0 (self->New), _tmp0_);
self->Open = (_tmp1_ = gtk_action_new ("Open", NULL, NULL, "gtk-open"), _g_object_unref0 (self->Open), _tmp1_);
self->Save = (_tmp2_ = gtk_action_new ("Save", NULL, NULL, "gtk-save"), _g_object_unref0 (self->Save), _tmp2_);
@@ -330,11 +333,7 @@ static GObject * gui_cactions_constructor (GType type, guint n_construct_propert
self->ImportCS = (_tmp5_ = gtk_action_new ("ImportCS", "Import", "Import a command stream to the list", "gtk-add"), _g_object_unref0 (self->ImportCS), _tmp5_);
self->ExportCS = (_tmp6_ = gtk_action_new ("ExportCS", "Export", "Export a CS to a file", "gtk-convert"), _g_object_unref0 (self->ExportCS), _tmp6_);
self->Quit = (_tmp7_ = gtk_action_new ("Quit", NULL, NULL, "gtk-quit"), _g_object_unref0 (self->Quit), _tmp7_);
- self->EmulateR300 = (_tmp8_ = gtk_radio_action_new ("EmulateR300", "R300", "Emulate the R300 register space", NULL, (gint) EMULATION_CHIP_R300), _g_object_unref0 (self->EmulateR300), _tmp8_);
- self->EmulateR500 = (_tmp9_ = gtk_radio_action_new ("EmulateR500", "R500", "Emulate the R500 register space", NULL, (gint) EMULATION_CHIP_R500), _g_object_unref0 (self->EmulateR500), _tmp9_);
- gtk_radio_action_set_group (self->EmulateR500, gtk_radio_action_get_group (self->EmulateR300));
- gtk_radio_action_set_current_value (self->EmulateR300, (gint) EMULATION_CHIP_R300);
- g_signal_connect_object (self->ImportCS, "activate", (GCallback) __lambda8__gtk_action_activate, self, 0);
+ g_signal_connect_object (self->ImportCS, "activate", (GCallback) __lambda9__gtk_action_activate, self, 0);
}
return obj;
}
@@ -362,8 +361,6 @@ static void gui_cactions_finalize (GObject* obj) {
_g_object_unref0 (self->ImportCS);
_g_object_unref0 (self->ExportCS);
_g_object_unref0 (self->Quit);
- _g_object_unref0 (self->EmulateR300);
- _g_object_unref0 (self->EmulateR500);
G_OBJECT_CLASS (gui_cactions_parent_class)->finalize (obj);
}
@@ -499,7 +496,6 @@ static void gui_cmenus_finalize (GUICMenus* obj) {
self = GUI_CMENUS (obj);
_g_object_unref0 (self->file);
_g_object_unref0 (self->edit);
- _g_object_unref0 (self->emulation);
}
@@ -577,7 +573,7 @@ static void gui_cmain_open_csview (GUICMain* self, GtkTreePath* path, GtkTreeVie
cs = NULL;
gtk_tree_model_get_iter ((GtkTreeModel*) self->cs_store, &iter, path);
gtk_tree_model_get ((GtkTreeModel*) self->cs_store, &iter, 1, &cs, -1, -1);
- csv = g_object_ref_sink (gui_cs_view_new (cs, r500_registers));
+ csv = g_object_ref_sink (gui_cs_view_new (cs));
gtk_widget_show_all ((GtkWidget*) csv);
_g_object_unref0 (cs);
_g_object_unref0 (csv);
@@ -621,76 +617,66 @@ static GObject * gui_cmain_constructor (GType type, guint n_construct_properties
self = GUI_CMAIN (obj);
_inner_error_ = NULL;
{
- GUICMenus* _tmp10_;
- GtkToolbar* _tmp11_;
- GtkToolItem* _tmp13_;
- GtkSeparatorToolItem* _tmp12_;
- GtkMenu* _tmp14_;
+ GUICMenus* _tmp8_;
+ GtkToolbar* _tmp9_;
+ GtkToolItem* _tmp11_;
+ GtkSeparatorToolItem* _tmp10_;
+ GtkMenu* _tmp12_;
+ GtkWidget* _tmp13_;
+ GtkWidget* _tmp14_;
GtkWidget* _tmp15_;
GtkWidget* _tmp16_;
- GtkWidget* _tmp17_;
- GtkWidget* _tmp18_;
- GtkMenuItem* _tmp20_;
- GtkSeparatorMenuItem* _tmp19_;
- GtkWidget* _tmp21_;
+ GtkMenuItem* _tmp18_;
+ GtkSeparatorMenuItem* _tmp17_;
+ GtkWidget* _tmp19_;
GtkMenuItem* menu_file_item;
- GtkMenu* _tmp22_;
+ GtkMenu* _tmp20_;
+ GtkWidget* _tmp21_;
+ GtkWidget* _tmp22_;
GtkWidget* _tmp23_;
- GtkWidget* _tmp24_;
- GtkWidget* _tmp25_;
GtkMenuItem* menu_edit_item;
- GtkMenu* _tmp26_;
- GtkWidget* _tmp27_;
- GtkWidget* _tmp28_;
- GtkMenuItem* menu_emulation_item;
- GtkMenuBar* _tmp29_;
- GtkListStore* _tmp30_;
+ GtkMenuBar* _tmp24_;
+ GtkListStore* _tmp25_;
GtkTreeView* cslist;
- GtkCellRendererText* _tmp31_;
- GtkCellRendererText* _tmp32_;
+ GtkCellRendererText* _tmp26_;
+ GtkCellRendererText* _tmp27_;
GtkScrolledWindow* sw;
GtkVBox* mainbox;
- self->menu = (_tmp10_ = gui_cmenus_new (), _gui_cmenus_unref0 (self->menu), _tmp10_);
- self->toolbar = (_tmp11_ = g_object_ref_sink ((GtkToolbar*) gtk_toolbar_new ()), _g_object_unref0 (self->toolbar), _tmp11_);
+ self->menu = (_tmp8_ = gui_cmenus_new (), _gui_cmenus_unref0 (self->menu), _tmp8_);
+ self->toolbar = (_tmp9_ = g_object_ref_sink ((GtkToolbar*) gtk_toolbar_new ()), _g_object_unref0 (self->toolbar), _tmp9_);
gui_cmain_add_toolitem (self, gui_actions->New);
gui_cmain_add_toolitem (self, gui_actions->Open);
gui_cmain_add_toolitem (self, gui_actions->Save);
- gtk_toolbar_insert (self->toolbar, _tmp13_ = (_tmp12_ = g_object_ref_sink ((GtkSeparatorToolItem*) gtk_separator_tool_item_new ()), GTK_IS_TOOL_ITEM (_tmp12_) ? ((GtkToolItem*) _tmp12_) : NULL), -1);
- _g_object_unref0 (_tmp13_);
+ gtk_toolbar_insert (self->toolbar, _tmp11_ = (_tmp10_ = g_object_ref_sink ((GtkSeparatorToolItem*) gtk_separator_tool_item_new ()), GTK_IS_TOOL_ITEM (_tmp10_) ? ((GtkToolItem*) _tmp10_) : NULL), -1);
+ _g_object_unref0 (_tmp11_);
gui_cmain_add_toolitem (self, gui_actions->RemoveCS);
gui_cmain_add_toolitem (self, gui_actions->ImportCS);
gui_cmain_add_toolitem (self, gui_actions->ExportCS);
- self->menu->file = (_tmp14_ = g_object_ref_sink ((GtkMenu*) gtk_menu_new ()), _g_object_unref0 (self->menu->file), _tmp14_);
- gtk_menu_shell_append ((GtkMenuShell*) self->menu->file, (GtkWidget*) (_tmp15_ = gtk_action_create_menu_item (gui_actions->New), GTK_IS_MENU_ITEM (_tmp15_) ? ((GtkMenuItem*) _tmp15_) : NULL));
- gtk_menu_shell_append ((GtkMenuShell*) self->menu->file, (GtkWidget*) (_tmp16_ = gtk_action_create_menu_item (gui_actions->Open), GTK_IS_MENU_ITEM (_tmp16_) ? ((GtkMenuItem*) _tmp16_) : NULL));
- gtk_menu_shell_append ((GtkMenuShell*) self->menu->file, (GtkWidget*) (_tmp17_ = gtk_action_create_menu_item (gui_actions->Save), GTK_IS_MENU_ITEM (_tmp17_) ? ((GtkMenuItem*) _tmp17_) : NULL));
- gtk_menu_shell_append ((GtkMenuShell*) self->menu->file, (GtkWidget*) (_tmp18_ = gtk_action_create_menu_item (gui_actions->SaveAs), GTK_IS_MENU_ITEM (_tmp18_) ? ((GtkMenuItem*) _tmp18_) : NULL));
- gtk_menu_shell_append ((GtkMenuShell*) self->menu->file, (GtkWidget*) (_tmp20_ = (_tmp19_ = g_object_ref_sink ((GtkSeparatorMenuItem*) gtk_separator_menu_item_new ()), GTK_IS_MENU_ITEM (_tmp19_) ? ((GtkMenuItem*) _tmp19_) : NULL)));
- _g_object_unref0 (_tmp20_);
- gtk_menu_shell_append ((GtkMenuShell*) self->menu->file, (GtkWidget*) (_tmp21_ = gtk_action_create_menu_item (gui_actions->Quit), GTK_IS_MENU_ITEM (_tmp21_) ? ((GtkMenuItem*) _tmp21_) : NULL));
+ self->menu->file = (_tmp12_ = g_object_ref_sink ((GtkMenu*) gtk_menu_new ()), _g_object_unref0 (self->menu->file), _tmp12_);
+ gtk_menu_shell_append ((GtkMenuShell*) self->menu->file, (GtkWidget*) (_tmp13_ = gtk_action_create_menu_item (gui_actions->New), GTK_IS_MENU_ITEM (_tmp13_) ? ((GtkMenuItem*) _tmp13_) : NULL));
+ gtk_menu_shell_append ((GtkMenuShell*) self->menu->file, (GtkWidget*) (_tmp14_ = gtk_action_create_menu_item (gui_actions->Open), GTK_IS_MENU_ITEM (_tmp14_) ? ((GtkMenuItem*) _tmp14_) : NULL));
+ gtk_menu_shell_append ((GtkMenuShell*) self->menu->file, (GtkWidget*) (_tmp15_ = gtk_action_create_menu_item (gui_actions->Save), GTK_IS_MENU_ITEM (_tmp15_) ? ((GtkMenuItem*) _tmp15_) : NULL));
+ gtk_menu_shell_append ((GtkMenuShell*) self->menu->file, (GtkWidget*) (_tmp16_ = gtk_action_create_menu_item (gui_actions->SaveAs), GTK_IS_MENU_ITEM (_tmp16_) ? ((GtkMenuItem*) _tmp16_) : NULL));
+ gtk_menu_shell_append ((GtkMenuShell*) self->menu->file, (GtkWidget*) (_tmp18_ = (_tmp17_ = g_object_ref_sink ((GtkSeparatorMenuItem*) gtk_separator_menu_item_new ()), GTK_IS_MENU_ITEM (_tmp17_) ? ((GtkMenuItem*) _tmp17_) : NULL)));
+ _g_object_unref0 (_tmp18_);
+ gtk_menu_shell_append ((GtkMenuShell*) self->menu->file, (GtkWidget*) (_tmp19_ = gtk_action_create_menu_item (gui_actions->Quit), GTK_IS_MENU_ITEM (_tmp19_) ? ((GtkMenuItem*) _tmp19_) : NULL));
menu_file_item = g_object_ref_sink ((GtkMenuItem*) gtk_menu_item_new_with_label ("File"));
gtk_menu_item_set_submenu (menu_file_item, self->menu->file);
- self->menu->edit = (_tmp22_ = g_object_ref_sink ((GtkMenu*) gtk_menu_new ()), _g_object_unref0 (self->menu->edit), _tmp22_);
- gtk_menu_shell_append ((GtkMenuShell*) self->menu->edit, (GtkWidget*) (_tmp23_ = gtk_action_create_menu_item (gui_actions->RemoveCS), GTK_IS_MENU_ITEM (_tmp23_) ? ((GtkMenuItem*) _tmp23_) : NULL));
- gtk_menu_shell_append ((GtkMenuShell*) self->menu->edit, (GtkWidget*) (_tmp24_ = gtk_action_create_menu_item (gui_actions->ImportCS), GTK_IS_MENU_ITEM (_tmp24_) ? ((GtkMenuItem*) _tmp24_) : NULL));
- gtk_menu_shell_append ((GtkMenuShell*) self->menu->edit, (GtkWidget*) (_tmp25_ = gtk_action_create_menu_item (gui_actions->ExportCS), GTK_IS_MENU_ITEM (_tmp25_) ? ((GtkMenuItem*) _tmp25_) : NULL));
+ self->menu->edit = (_tmp20_ = g_object_ref_sink ((GtkMenu*) gtk_menu_new ()), _g_object_unref0 (self->menu->edit), _tmp20_);
+ gtk_menu_shell_append ((GtkMenuShell*) self->menu->edit, (GtkWidget*) (_tmp21_ = gtk_action_create_menu_item (gui_actions->RemoveCS), GTK_IS_MENU_ITEM (_tmp21_) ? ((GtkMenuItem*) _tmp21_) : NULL));
+ gtk_menu_shell_append ((GtkMenuShell*) self->menu->edit, (GtkWidget*) (_tmp22_ = gtk_action_create_menu_item (gui_actions->ImportCS), GTK_IS_MENU_ITEM (_tmp22_) ? ((GtkMenuItem*) _tmp22_) : NULL));
+ gtk_menu_shell_append ((GtkMenuShell*) self->menu->edit, (GtkWidget*) (_tmp23_ = gtk_action_create_menu_item (gui_actions->ExportCS), GTK_IS_MENU_ITEM (_tmp23_) ? ((GtkMenuItem*) _tmp23_) : NULL));
menu_edit_item = g_object_ref_sink ((GtkMenuItem*) gtk_menu_item_new_with_label ("Edit"));
gtk_menu_item_set_submenu (menu_edit_item, self->menu->edit);
- self->menu->emulation = (_tmp26_ = g_object_ref_sink ((GtkMenu*) gtk_menu_new ()), _g_object_unref0 (self->menu->emulation), _tmp26_);
- gtk_menu_shell_append ((GtkMenuShell*) self->menu->emulation, (GtkWidget*) (_tmp27_ = gtk_action_create_menu_item ((GtkAction*) gui_actions->EmulateR300), GTK_IS_MENU_ITEM (_tmp27_) ? ((GtkMenuItem*) _tmp27_) : NULL));
- gtk_menu_shell_append ((GtkMenuShell*) self->menu->emulation, (GtkWidget*) (_tmp28_ = gtk_action_create_menu_item ((GtkAction*) gui_actions->EmulateR500), GTK_IS_MENU_ITEM (_tmp28_) ? ((GtkMenuItem*) _tmp28_) : NULL));
- menu_emulation_item = g_object_ref_sink ((GtkMenuItem*) gtk_menu_item_new_with_label ("Emulation"));
- gtk_menu_item_set_submenu (menu_emulation_item, self->menu->emulation);
- self->menubar = (_tmp29_ = g_object_ref_sink ((GtkMenuBar*) gtk_menu_bar_new ()), _g_object_unref0 (self->menubar), _tmp29_);
+ self->menubar = (_tmp24_ = g_object_ref_sink ((GtkMenuBar*) gtk_menu_bar_new ()), _g_object_unref0 (self->menubar), _tmp24_);
gtk_menu_shell_append ((GtkMenuShell*) self->menubar, (GtkWidget*) menu_file_item);
gtk_menu_shell_append ((GtkMenuShell*) self->menubar, (GtkWidget*) menu_edit_item);
- gtk_menu_shell_append ((GtkMenuShell*) self->menubar, (GtkWidget*) menu_emulation_item);
- self->cs_store = (_tmp30_ = gtk_list_store_new (2, G_TYPE_STRING, EMULATION_TYPE_CS, NULL), _g_object_unref0 (self->cs_store), _tmp30_);
+ self->cs_store = (_tmp25_ = gtk_list_store_new (2, G_TYPE_STRING, EMULATION_TYPE_CS, NULL), _g_object_unref0 (self->cs_store), _tmp25_);
cslist = g_object_ref_sink ((GtkTreeView*) gtk_tree_view_new ());
- gtk_tree_view_insert_column_with_data_func (cslist, -1, "DWORDs", (GtkCellRenderer*) (_tmp31_ = g_object_ref_sink ((GtkCellRendererText*) gtk_cell_renderer_text_new ())), _gui_cmain_dwords_cellrenderer_gtk_tree_cell_data_func, g_object_ref (self), g_object_unref);
- _g_object_unref0 (_tmp31_);
- gtk_tree_view_insert_column_with_attributes (cslist, -1, "Name", (GtkCellRenderer*) (_tmp32_ = g_object_ref_sink ((GtkCellRendererText*) gtk_cell_renderer_text_new ())), "text", 0, NULL, NULL);
- _g_object_unref0 (_tmp32_);
+ gtk_tree_view_insert_column_with_data_func (cslist, -1, "DWORDs", (GtkCellRenderer*) (_tmp26_ = g_object_ref_sink ((GtkCellRendererText*) gtk_cell_renderer_text_new ())), _gui_cmain_dwords_cellrenderer_gtk_tree_cell_data_func, g_object_ref (self), g_object_unref);
+ _g_object_unref0 (_tmp26_);
+ gtk_tree_view_insert_column_with_attributes (cslist, -1, "Name", (GtkCellRenderer*) (_tmp27_ = g_object_ref_sink ((GtkCellRendererText*) gtk_cell_renderer_text_new ())), "text", 0, NULL, NULL);
+ _g_object_unref0 (_tmp27_);
gtk_tree_view_set_model (cslist, (GtkTreeModel*) self->cs_store);
g_signal_connect_object (cslist, "row-activated", (GCallback) _gui_cmain_open_csview_gtk_tree_view_row_activated, self, 0);
sw = g_object_ref_sink ((GtkScrolledWindow*) gtk_scrolled_window_new (NULL, NULL));
@@ -705,11 +691,26 @@ static GObject * gui_cmain_constructor (GType type, guint n_construct_properties
gtk_window_set_title ((GtkWindow*) self, "Radeon Simulator");
gtk_container_add ((GtkContainer*) self, (GtkWidget*) mainbox);
g_signal_connect ((GtkObject*) self, "destroy", (GCallback) _gtk_main_quit_gtk_object_destroy, NULL);
- gtk_window_set_icon_from_file ((GtkWindow*) self, "/usr/share/pixmaps/rsim.png", &_inner_error_);
+ {
+ gtk_window_set_icon_from_file ((GtkWindow*) self, "/usr/share/pixmaps/rsim.png", &_inner_error_);
+ if (_inner_error_ != NULL) {
+ goto __catch0_g_error;
+ }
+ }
+ goto __finally0;
+ __catch0_g_error:
+ {
+ GError * e;
+ e = _inner_error_;
+ _inner_error_ = NULL;
+ {
+ _g_error_free0 (e);
+ }
+ }
+ __finally0:
if (_inner_error_ != NULL) {
_g_object_unref0 (menu_file_item);
_g_object_unref0 (menu_edit_item);
- _g_object_unref0 (menu_emulation_item);
_g_object_unref0 (cslist);
_g_object_unref0 (sw);
_g_object_unref0 (mainbox);
@@ -719,7 +720,6 @@ static GObject * gui_cmain_constructor (GType type, guint n_construct_properties
gtk_widget_show_all ((GtkWidget*) self);
_g_object_unref0 (menu_file_item);
_g_object_unref0 (menu_edit_item);
- _g_object_unref0 (menu_emulation_item);
_g_object_unref0 (cslist);
_g_object_unref0 (sw);
_g_object_unref0 (mainbox);
@@ -760,8 +760,8 @@ GType gui_cmain_get_type (void) {
}
-static void* _spec_load_dialog_run_gthread_func (gpointer self) {
- return spec_load_dialog_run (self);
+static void* _emulation_spec_load_dialog_run_gthread_func (gpointer self) {
+ return emulation_spec_load_dialog_run (self);
}
@@ -774,14 +774,14 @@ void gui_init (char*** args, int* args_length1) {
gui_actions = (_tmp0_ = gui_cactions_new (), _g_object_unref0 (gui_actions), _tmp0_);
gui_main = (_tmp1_ = g_object_ref_sink (gui_cmain_new ()), _g_object_unref0 (gui_main), _tmp1_);
{
- SpecLoadDialog* specload;
+ EmulationSpecLoadDialog* specload;
gdk_threads_init ();
- specload = g_object_ref_sink (spec_load_dialog_new ((GtkWindow*) gui_main));
+ specload = g_object_ref_sink (emulation_spec_load_dialog_new ((GtkWindow*) gui_main));
{
- g_thread_create (_spec_load_dialog_run_gthread_func, specload, FALSE, &_inner_error_);
+ g_thread_create (_emulation_spec_load_dialog_run_gthread_func, specload, FALSE, &_inner_error_);
if (_inner_error_ != NULL) {
if (_inner_error_->domain == G_THREAD_ERROR) {
- goto __catch0_g_thread_error;
+ goto __catch1_g_thread_error;
}
_g_object_unref0 (specload);
g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
@@ -789,8 +789,8 @@ void gui_init (char*** args, int* args_length1) {
return;
}
}
- goto __finally0;
- __catch0_g_thread_error:
+ goto __finally1;
+ __catch1_g_thread_error:
{
GError * e;
e = _inner_error_;
@@ -801,7 +801,7 @@ void gui_init (char*** args, int* args_length1) {
_g_error_free0 (e);
}
}
- __finally0:
+ __finally1:
if (_inner_error_ != NULL) {
_g_object_unref0 (specload);
g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
@@ -814,10 +814,57 @@ void gui_init (char*** args, int* args_length1) {
}
-SpecLoadDialog* spec_load_dialog_construct (GType object_type, GtkWindow* parent) {
- SpecLoadDialog * self;
- GtkLabel* _tmp0_;
- GtkProgressBar* _tmp1_;
+void emulation_spec_entry_copy (const EmulationSpecEntry* self, EmulationSpecEntry* dest) {
+ dest->spec = _g_object_ref0 (self->spec);
+ dest->name = g_strdup (self->name);
+}
+
+
+void emulation_spec_entry_destroy (EmulationSpecEntry* self) {
+ _g_object_unref0 (self->spec);
+ _g_free0 (self->name);
+}
+
+
+EmulationSpecEntry* emulation_spec_entry_dup (const EmulationSpecEntry* self) {
+ EmulationSpecEntry* dup;
+ dup = g_new0 (EmulationSpecEntry, 1);
+ emulation_spec_entry_copy (self, dup);
+ return dup;
+}
+
+
+void emulation_spec_entry_free (EmulationSpecEntry* self) {
+ emulation_spec_entry_destroy (self);
+ g_free (self);
+}
+
+
+GType emulation_spec_entry_get_type (void) {
+ static GType emulation_spec_entry_type_id = 0;
+ if (emulation_spec_entry_type_id == 0) {
+ emulation_spec_entry_type_id = g_boxed_type_register_static ("EmulationSpecEntry", (GBoxedCopyFunc) emulation_spec_entry_dup, (GBoxedFreeFunc) emulation_spec_entry_free);
+ }
+ return emulation_spec_entry_type_id;
+}
+
+
+static void _vala_EmulationSpecEntry_array_free (EmulationSpecEntry* array, gint array_length) {
+ if (array != NULL) {
+ int i;
+ for (i = 0; i < array_length; i = i + 1) {
+ emulation_spec_entry_destroy (&array[i]);
+ }
+ }
+ g_free (array);
+}
+
+
+EmulationSpecLoadDialog* emulation_spec_load_dialog_construct (GType object_type, GtkWindow* parent) {
+ EmulationSpecLoadDialog * self;
+ EmulationSpecEntry* _tmp0_;
+ GtkLabel* _tmp1_;
+ GtkProgressBar* _tmp2_;
GtkVBox* box;
self = g_object_newv (object_type, 0, NULL);
if (parent != NULL) {
@@ -826,8 +873,9 @@ SpecLoadDialog* spec_load_dialog_construct (GType object_type, GtkWindow* parent
gtk_window_set_destroy_with_parent ((GtkWindow*) self, TRUE);
}
gtk_window_set_deletable ((GtkWindow*) self, FALSE);
- self->priv->loading = (_tmp0_ = g_object_ref_sink ((GtkLabel*) gtk_label_new ("Loading...")), _g_object_unref0 (self->priv->loading), _tmp0_);
- self->priv->progress = (_tmp1_ = g_object_ref_sink ((GtkProgressBar*) gtk_progress_bar_new ()), _g_object_unref0 (self->priv->progress), _tmp1_);
+ emulation_specs = (_tmp0_ = g_new0 (EmulationSpecEntry, 2), emulation_specs = (_vala_EmulationSpecEntry_array_free (emulation_specs, emulation_specs_length1), NULL), emulation_specs_length1 = 2, _tmp0_);
+ self->priv->loading = (_tmp1_ = g_object_ref_sink ((GtkLabel*) gtk_label_new ("Loading...")), _g_object_unref0 (self->priv->loading), _tmp1_);
+ self->priv->progress = (_tmp2_ = g_object_ref_sink ((GtkProgressBar*) gtk_progress_bar_new ()), _g_object_unref0 (self->priv->progress), _tmp2_);
self->priv->progress->pulse_fraction = 0.1;
box = g_object_ref_sink ((GtkVBox*) gtk_vbox_new (FALSE, 5));
gtk_box_pack_start ((GtkBox*) box, (GtkWidget*) self->priv->loading, FALSE, TRUE, (guint) 0);
@@ -840,22 +888,22 @@ SpecLoadDialog* spec_load_dialog_construct (GType object_type, GtkWindow* parent
}
-SpecLoadDialog* spec_load_dialog_new (GtkWindow* parent) {
- return spec_load_dialog_construct (TYPE_SPEC_LOAD_DIALOG, parent);
+EmulationSpecLoadDialog* emulation_spec_load_dialog_new (GtkWindow* parent) {
+ return emulation_spec_load_dialog_construct (EMULATION_TYPE_SPEC_LOAD_DIALOG, parent);
}
-static void* _spec_load_dialog_pulse_thread_gthread_func (gpointer self) {
- return spec_load_dialog_pulse_thread (self);
+static void* _emulation_spec_load_dialog_pulse_thread_gthread_func (gpointer self) {
+ return emulation_spec_load_dialog_pulse_thread (self);
}
-static void* _spec_load_dialog_specload_thread_gthread_func (gpointer self) {
- return spec_load_dialog_specload_thread (self);
+static void* _emulation_spec_load_dialog_specload_thread_gthread_func (gpointer self) {
+ return emulation_spec_load_dialog_specload_thread (self);
}
-void* spec_load_dialog_run (SpecLoadDialog* self) {
+void* emulation_spec_load_dialog_run (EmulationSpecLoadDialog* self) {
void* result;
GError * _inner_error_;
GThread* load;
@@ -872,20 +920,20 @@ void* spec_load_dialog_run (SpecLoadDialog* self) {
{
GThread* _tmp0_;
GThread* _tmp1_;
- _tmp0_ = g_thread_create (_spec_load_dialog_pulse_thread_gthread_func, self, TRUE, &_inner_error_);
+ _tmp0_ = g_thread_create (_emulation_spec_load_dialog_pulse_thread_gthread_func, self, TRUE, &_inner_error_);
if (_inner_error_ != NULL) {
if (_inner_error_->domain == G_THREAD_ERROR) {
- goto __catch1_g_thread_error;
+ goto __catch2_g_thread_error;
}
g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
g_clear_error (&_inner_error_);
return NULL;
}
pulse = _tmp0_;
- _tmp1_ = g_thread_create (_spec_load_dialog_specload_thread_gthread_func, self, TRUE, &_inner_error_);
+ _tmp1_ = g_thread_create (_emulation_spec_load_dialog_specload_thread_gthread_func, self, TRUE, &_inner_error_);
if (_inner_error_ != NULL) {
if (_inner_error_->domain == G_THREAD_ERROR) {
- goto __catch1_g_thread_error;
+ goto __catch2_g_thread_error;
}
g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
g_clear_error (&_inner_error_);
@@ -893,8 +941,8 @@ void* spec_load_dialog_run (SpecLoadDialog* self) {
}
load = _tmp1_;
}
- goto __finally1;
- __catch1_g_thread_error:
+ goto __finally2;
+ __catch2_g_thread_error:
{
GError * e;
e = _inner_error_;
@@ -907,7 +955,7 @@ void* spec_load_dialog_run (SpecLoadDialog* self) {
return result;
}
}
- __finally1:
+ __finally2:
if (_inner_error_ != NULL) {
g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
g_clear_error (&_inner_error_);
@@ -924,7 +972,7 @@ void* spec_load_dialog_run (SpecLoadDialog* self) {
}
-static void* spec_load_dialog_pulse_thread (SpecLoadDialog* self) {
+static void* emulation_spec_load_dialog_pulse_thread (EmulationSpecLoadDialog* self) {
void* result;
g_return_val_if_fail (self != NULL, NULL);
while (TRUE) {
@@ -941,55 +989,65 @@ static void* spec_load_dialog_pulse_thread (SpecLoadDialog* self) {
}
-static void* spec_load_dialog_specload_thread (SpecLoadDialog* self) {
+static void* emulation_spec_load_dialog_specload_thread (EmulationSpecLoadDialog* self) {
void* result;
+ EmulationSpec* r300_registers;
+ EmulationSpec* r500_registers;
EmulationSpec* _tmp0_;
- EmulationSpec* _tmp1_;
+ char* _tmp1_;
+ EmulationSpec* _tmp2_;
+ char* _tmp3_;
g_return_val_if_fail (self != NULL, NULL);
gdk_threads_enter ();
gtk_label_set_label (self->priv->loading, "Loading r300 registers...");
gdk_threads_leave ();
- r300_registers = (_tmp0_ = emulation_spec_new ("/usr/share/rsim/r300reg.xml", "r300"), _g_object_unref0 (r300_registers), _tmp0_);
+ r300_registers = emulation_spec_new ("/usr/share/rsim/r300reg.xml", "r300");
gdk_threads_enter ();
gtk_label_set_label (self->priv->loading, "Loading r500 registers...");
gdk_threads_leave ();
- r500_registers = (_tmp1_ = emulation_spec_new ("/usr/share/rsim/r300reg.xml", "r500"), _g_object_unref0 (r500_registers), _tmp1_);
+ r500_registers = emulation_spec_new ("/usr/share/rsim/r300reg.xml", "r500");
gdk_threads_enter ();
gtk_label_set_label (self->priv->loading, "Done");
gdk_threads_leave ();
+ emulation_specs[0].spec = (_tmp0_ = _g_object_ref0 (r300_registers), _g_object_unref0 (emulation_specs[0].spec), _tmp0_);
+ emulation_specs[0].name = (_tmp1_ = g_strdup ("r300"), _g_free0 (emulation_specs[0].name), _tmp1_);
+ emulation_specs[1].spec = (_tmp2_ = _g_object_ref0 (r500_registers), _g_object_unref0 (emulation_specs[1].spec), _tmp2_);
+ emulation_specs[1].name = (_tmp3_ = g_strdup ("r500"), _g_free0 (emulation_specs[1].name), _tmp3_);
result = (void*) 123;
+ _g_object_unref0 (r300_registers);
+ _g_object_unref0 (r500_registers);
return result;
}
-static void spec_load_dialog_class_init (SpecLoadDialogClass * klass) {
- spec_load_dialog_parent_class = g_type_class_peek_parent (klass);
- g_type_class_add_private (klass, sizeof (SpecLoadDialogPrivate));
- G_OBJECT_CLASS (klass)->finalize = spec_load_dialog_finalize;
+static void emulation_spec_load_dialog_class_init (EmulationSpecLoadDialogClass * klass) {
+ emulation_spec_load_dialog_parent_class = g_type_class_peek_parent (klass);
+ g_type_class_add_private (klass, sizeof (EmulationSpecLoadDialogPrivate));
+ G_OBJECT_CLASS (klass)->finalize = emulation_spec_load_dialog_finalize;
}
-static void spec_load_dialog_instance_init (SpecLoadDialog * self) {
- self->priv = SPEC_LOAD_DIALOG_GET_PRIVATE (self);
+static void emulation_spec_load_dialog_instance_init (EmulationSpecLoadDialog * self) {
+ self->priv = EMULATION_SPEC_LOAD_DIALOG_GET_PRIVATE (self);
}
-static void spec_load_dialog_finalize (GObject* obj) {
- SpecLoadDialog * self;
- self = SPEC_LOAD_DIALOG (obj);
+static void emulation_spec_load_dialog_finalize (GObject* obj) {
+ EmulationSpecLoadDialog * self;
+ self = EMULATION_SPEC_LOAD_DIALOG (obj);
_g_object_unref0 (self->priv->loading);
_g_object_unref0 (self->priv->progress);
- G_OBJECT_CLASS (spec_load_dialog_parent_class)->finalize (obj);
+ G_OBJECT_CLASS (emulation_spec_load_dialog_parent_class)->finalize (obj);
}
-GType spec_load_dialog_get_type (void) {
- static GType spec_load_dialog_type_id = 0;
- if (spec_load_dialog_type_id == 0) {
- static const GTypeInfo g_define_type_info = { sizeof (SpecLoadDialogClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) spec_load_dialog_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (SpecLoadDialog), 0, (GInstanceInitFunc) spec_load_dialog_instance_init, NULL };
- spec_load_dialog_type_id = g_type_register_static (GTK_TYPE_WINDOW, "SpecLoadDialog", &g_define_type_info, 0);
+GType emulation_spec_load_dialog_get_type (void) {
+ static GType emulation_spec_load_dialog_type_id = 0;
+ if (emulation_spec_load_dialog_type_id == 0) {
+ static const GTypeInfo g_define_type_info = { sizeof (EmulationSpecLoadDialogClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) emulation_spec_load_dialog_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (EmulationSpecLoadDialog), 0, (GInstanceInitFunc) emulation_spec_load_dialog_instance_init, NULL };
+ emulation_spec_load_dialog_type_id = g_type_register_static (GTK_TYPE_WINDOW, "EmulationSpecLoadDialog", &g_define_type_info, 0);
}
- return spec_load_dialog_type_id;
+ return emulation_spec_load_dialog_type_id;
}
@@ -1001,8 +1059,24 @@ gint _main (char** args, int args_length1) {
return result;
}
gui_init (&args, &args_length1);
- g_object_unref ((GObject*) r300_registers);
- g_object_unref ((GObject*) r500_registers);
+ {
+ guint i;
+ i = (guint) 0;
+ {
+ gboolean _tmp0_;
+ _tmp0_ = TRUE;
+ while (TRUE) {
+ if (!_tmp0_) {
+ i++;
+ }
+ _tmp0_ = FALSE;
+ if (!(i < emulation_specs_length1)) {
+ break;
+ }
+ g_object_unref ((GObject*) emulation_specs[i].spec);
+ }
+ }
+ }
g_object_unref ((GObject*) gui_actions);
g_object_unref ((GObject*) gui_main);
result = 0;
diff --git a/src/main.vala b/src/main.vala
index 399893c..177a198 100644
--- a/src/main.vala
+++ b/src/main.vala
@@ -14,9 +14,6 @@ namespace GUI
public Action ExportCS;
public Action Quit;
- public RadioAction EmulateR300;
- public RadioAction EmulateR500;
-
construct {
New = new Action("New", null, null, "gtk-new");
Open = new Action("Open", null, null, "gtk-open");
@@ -27,11 +24,6 @@ namespace GUI
ExportCS = new Action("ExportCS", "Export", "Export a CS to a file", "gtk-convert");
Quit = new Action("Quit", null, null, "gtk-quit");
- EmulateR300 = new RadioAction("EmulateR300", "R300", "Emulate the R300 register space", null, Chip.R300);
- EmulateR500 = new RadioAction("EmulateR500", "R500", "Emulate the R500 register space", null, Chip.R500);
- EmulateR500.set_group(EmulateR300.get_group());
- EmulateR300.set_current_value(Chip.R300);
-
ImportCS.activate.connect((source) => { var d = new CSImport(); d.run(); });
}
}
@@ -40,7 +32,6 @@ namespace GUI
{
public Menu file;
public Menu edit;
- public Menu emulation;
}
public class CMain : Window
@@ -79,16 +70,9 @@ namespace GUI
var menu_edit_item = new MenuItem.with_label("Edit");
menu_edit_item.submenu = menu.edit;
- menu.emulation = new Menu();
- menu.emulation.append(actions.EmulateR300.create_menu_item() as MenuItem);
- menu.emulation.append(actions.EmulateR500.create_menu_item() as MenuItem);
- var menu_emulation_item = new MenuItem.with_label("Emulation");
- menu_emulation_item.submenu = menu.emulation;
-
menubar = new MenuBar();
menubar.append(menu_file_item);
menubar.append(menu_edit_item);
- menubar.append(menu_emulation_item);
cs_store = new ListStore(2, typeof(string), typeof(CS));
var cslist = new TreeView();
@@ -111,8 +95,11 @@ namespace GUI
title = "Radeon Simulator";
add(mainbox);
destroy.connect(main_quit);
- /* XXX This shouldn't be hardcoded */
- set_icon_from_file("/usr/share/pixmaps/rsim.png");
+
+ try {
+ /* XXX This shouldn't be hardcoded */
+ set_icon_from_file("/usr/share/pixmaps/rsim.png");
+ } catch (Error e) { /* don't care */ }
show_all();
}
@@ -139,7 +126,7 @@ namespace GUI
cs_store.get_iter(out iter, path);
cs_store.get(iter, 1, out cs, -1);
- var csv = new CSView(cs, r500_registers);
+ var csv = new CSView(cs);
csv.show_all();
}
}
@@ -169,99 +156,114 @@ namespace GUI
}
}
-public Spec r300_registers;
-public Spec r500_registers;
-
-class SpecLoadDialog : Window
+namespace Emulation
{
- private Label loading;
- private ProgressBar progress;
- private bool done;
+ public struct SpecEntry
+ {
+ Spec spec;
+ string name;
+ }
- public SpecLoadDialog(Window? parent = null)
+ public SpecEntry[] specs;
+ public uint spec_default = 1;
+
+ internal class SpecLoadDialog : Window
{
- if (parent != null) {
- set_transient_for(parent);
- modal = true;
- destroy_with_parent = true;
- }
- deletable = false;
+ private Label loading;
+ private ProgressBar progress;
+ private bool done;
- loading = new Label("Loading...");
+ public SpecLoadDialog(Window? parent = null)
+ {
+ if (parent != null) {
+ set_transient_for(parent);
+ modal = true;
+ destroy_with_parent = true;
+ }
+ deletable = false;
- progress = new ProgressBar();
- progress.pulse_fraction = 0.1;
+ specs = new SpecEntry[2];
+ loading = new Label("Loading...");
- var box = new VBox(false, 5);
- box.pack_start(loading, false, true, 0);
- box.pack_start(progress, false, true, 0);
+ progress = new ProgressBar();
+ progress.pulse_fraction = 0.1;
- border_width = 10;
- set_default_size(300, 10);
+ var box = new VBox(false, 5);
+ box.pack_start(loading, false, true, 0);
+ box.pack_start(progress, false, true, 0);
- add(box);
- }
+ border_width = 10;
+ set_default_size(300, 10);
- public void *run()
- {
- Gdk.threads_enter();
- show_all();
- Gdk.threads_leave();
-
- done = false;
- weak Thread load;
- weak Thread pulse;
-
- try {
- pulse = Thread.create(pulse_thread, true);
- load = Thread.create(specload_thread, true);
- } catch (ThreadError e) {
- stderr.printf("Unable to start loading thread.\n");
- assert(false);
- return null; /* appease vala */
+ add(box);
}
- void *result = load.join();
- done = true;
- pulse.join();
+ public void *run()
+ {
+ Gdk.threads_enter();
+ show_all();
+ Gdk.threads_leave();
- Gdk.threads_enter();
- hide_all();
- Gdk.threads_leave();
+ done = false;
+ weak Thread load;
+ weak Thread pulse;
- return result;
- }
+ try {
+ pulse = Thread.create(pulse_thread, true);
+ load = Thread.create(specload_thread, true);
+ } catch (ThreadError e) {
+ stderr.printf("Unable to start loading thread.\n");
+ assert(false);
+ return null; /* appease vala */
+ }
+
+ void *result = load.join();
+ done = true;
+ pulse.join();
- private void *pulse_thread()
- {
- while (!done) {
Gdk.threads_enter();
- progress.pulse();
+ hide_all();
Gdk.threads_leave();
- Thread.usleep(50000);
+ return result;
}
- return null;
- }
- private void *specload_thread()
- {
- /* XXX This shouldn't be hardcoded */
- Gdk.threads_enter();
- loading.label = "Loading r300 registers...";
- Gdk.threads_leave();
- r300_registers = new Spec("/usr/share/rsim/r300reg.xml", "r300");
-
- Gdk.threads_enter();
- loading.label = "Loading r500 registers...";
- Gdk.threads_leave();
- r500_registers = new Spec("/usr/share/rsim/r300reg.xml", "r500");
-
- Gdk.threads_enter();
- loading.label = "Done";
- Gdk.threads_leave();
-
- return (void *)123;
+ private void *pulse_thread()
+ {
+ while (!done) {
+ Gdk.threads_enter();
+ progress.pulse();
+ Gdk.threads_leave();
+
+ Thread.usleep(50000);
+ }
+ return null;
+ }
+
+ private void *specload_thread()
+ {
+ /* XXX This shouldn't be hardcoded */
+ Gdk.threads_enter();
+ loading.label = "Loading r300 registers...";
+ Gdk.threads_leave();
+ var r300_registers = new Spec("/usr/share/rsim/r300reg.xml", "r300");
+
+ Gdk.threads_enter();
+ loading.label = "Loading r500 registers...";
+ Gdk.threads_leave();
+ var r500_registers = new Spec("/usr/share/rsim/r300reg.xml", "r500");
+
+ Gdk.threads_enter();
+ loading.label = "Done";
+ Gdk.threads_leave();
+
+ specs[0].spec = r300_registers;
+ specs[0].name = "r300";
+ specs[1].spec = r500_registers;
+ specs[1].name = "r500";
+
+ return (void *)123;
+ }
}
}
@@ -275,8 +277,9 @@ public static int main(string[] args)
GUI.init(ref args);
/* vala doesn't unref globals */
- r300_registers.unref();
- r500_registers.unref();
+ for (uint i = 0; i < specs.length; i++) {
+ specs[i].spec.unref();
+ }
GUI.actions.unref();
GUI.main.unref();