summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoakim Sindholt <opensource@zhasha.com>2010-04-09 22:55:58 +0200
committerJoakim Sindholt <opensource@zhasha.com>2010-04-09 22:55:58 +0200
commit01f1ef23893b6e2fc24c1f6695d1eb9704fb3cd0 (patch)
tree8cc74e5bb566af89621a14e272b1dc63e4d3a5d3
parent1db9644c4c6ba887688c81b91a3a4f61dfeb314c (diff)
project: implement preliminary project managerHEADmaster
-rw-r--r--Makefile.am1
-rw-r--r--src/csexport.c12
-rw-r--r--src/csimport.c148
-rw-r--r--src/csimport.vala11
-rw-r--r--src/csview.c12
-rw-r--r--src/main.c638
-rw-r--r--src/main.vala452
-rw-r--r--src/project.c1181
-rw-r--r--src/project.vala534
-rw-r--r--src/registers.c72
10 files changed, 1924 insertions, 1137 deletions
diff --git a/Makefile.am b/Makefile.am
index c674fde..6cfe59f 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -19,6 +19,7 @@ rsim_SOURCES = \
src/csexport.vala \
src/csview.vala \
src/main.vala \
+ src/project.vala \
src/registers.vala \
$(NULL)
diff --git a/src/csexport.c b/src/csexport.c
index cad3468..6d6461b 100644
--- a/src/csexport.c
+++ b/src/csexport.c
@@ -259,8 +259,8 @@ GType emulation_cs_get_type (void);
enum {
GUI_CS_EXPORT_DUMMY_PROPERTY
};
-static void _lambda13_ (GtkToggleButton* source, GUICSExport* self);
-static void __lambda13__gtk_toggle_button_toggled (GtkToggleButton* _sender, gpointer self);
+static void _lambda3_ (GtkToggleButton* source, GUICSExport* self);
+static void __lambda3__gtk_toggle_button_toggled (GtkToggleButton* _sender, gpointer self);
GType emulation_spec_entry_get_type (void);
GType emulation_spec_get_type (void);
EmulationSpecEntry* emulation_spec_entry_dup (const EmulationSpecEntry* self);
@@ -360,14 +360,14 @@ static gpointer _g_object_ref0 (gpointer self) {
}
-static void _lambda13_ (GtkToggleButton* source, GUICSExport* self) {
+static void _lambda3_ (GtkToggleButton* source, GUICSExport* self) {
g_return_if_fail (source != NULL);
gtk_widget_set_sensitive ((GtkWidget*) self->priv->info_frame, gtk_toggle_button_get_active ((GtkToggleButton*) self->priv->tree_radio));
}
-static void __lambda13__gtk_toggle_button_toggled (GtkToggleButton* _sender, gpointer self) {
- _lambda13_ (_sender, self);
+static void __lambda3__gtk_toggle_button_toggled (GtkToggleButton* _sender, gpointer self) {
+ _lambda3_ (_sender, self);
}
@@ -460,7 +460,7 @@ GUICSExport* gui_cs_export_construct (GType object_type, EmulationCS* cs) {
self->priv->check_pkt3_opcode = (_tmp22_ = _g_object_ref0 ((_tmp21_ = gtk_builder_get_object (builder, "check_pkt3_opcode"), GTK_IS_CHECK_BUTTON (_tmp21_) ? ((GtkCheckButton*) _tmp21_) : NULL)), _g_object_unref0 (self->priv->check_pkt3_opcode), _tmp22_);
self->priv->check_pkt3_opcode_text = (_tmp24_ = _g_object_ref0 ((_tmp23_ = gtk_builder_get_object (builder, "check_pkt3_opcode_text"), GTK_IS_CHECK_BUTTON (_tmp23_) ? ((GtkCheckButton*) _tmp23_) : NULL)), _g_object_unref0 (self->priv->check_pkt3_opcode_text), _tmp24_);
self->priv->check_pkt3_count = (_tmp26_ = _g_object_ref0 ((_tmp25_ = gtk_builder_get_object (builder, "check_pkt3_count"), GTK_IS_CHECK_BUTTON (_tmp25_) ? ((GtkCheckButton*) _tmp25_) : NULL)), _g_object_unref0 (self->priv->check_pkt3_count), _tmp26_);
- g_signal_connect_object ((GtkToggleButton*) self->priv->plain_radio, "toggled", (GCallback) __lambda13__gtk_toggle_button_toggled, self, 0);
+ g_signal_connect_object ((GtkToggleButton*) self->priv->plain_radio, "toggled", (GCallback) __lambda3__gtk_toggle_button_toggled, self, 0);
chip_combo_align = _g_object_ref0 ((_tmp27_ = gtk_builder_get_object (builder, "chip_combo_align"), GTK_IS_ALIGNMENT (_tmp27_) ? ((GtkAlignment*) _tmp27_) : NULL));
gtk_container_add ((GtkContainer*) chip_combo_align, (GtkWidget*) (self->priv->chip_combo = (_tmp28_ = g_object_ref_sink ((GtkComboBox*) gtk_combo_box_new_text ()), _g_object_unref0 (self->priv->chip_combo), _tmp28_)));
{
diff --git a/src/csimport.c b/src/csimport.c
index d2dffbc..4b21308 100644
--- a/src/csimport.c
+++ b/src/csimport.c
@@ -42,21 +42,26 @@
typedef struct _GUICSImport GUICSImport;
typedef struct _GUICSImportClass GUICSImportClass;
typedef struct _GUICSImportPrivate GUICSImportPrivate;
-#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
-#define _g_array_free0(var) ((var == NULL) ? NULL : (var = (g_array_free (var, TRUE), NULL)))
-#define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
-#define _g_free0(var) (var = (g_free (var), NULL))
-#define _gtk_tree_path_free0(var) ((var == NULL) ? NULL : (var = (gtk_tree_path_free (var), NULL)))
-#define GUI_TYPE_MAIN_WINDOW (gui_main_window_get_type ())
-#define GUI_MAIN_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GUI_TYPE_MAIN_WINDOW, GUIMainWindow))
-#define GUI_MAIN_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GUI_TYPE_MAIN_WINDOW, GUIMainWindowClass))
-#define GUI_IS_MAIN_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GUI_TYPE_MAIN_WINDOW))
-#define GUI_IS_MAIN_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GUI_TYPE_MAIN_WINDOW))
-#define GUI_MAIN_WINDOW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GUI_TYPE_MAIN_WINDOW, GUIMainWindowClass))
+#define PROJECT_TYPE_MANAGER (project_manager_get_type ())
+#define PROJECT_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PROJECT_TYPE_MANAGER, ProjectManager))
+#define PROJECT_IS_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PROJECT_TYPE_MANAGER))
+#define PROJECT_MANAGER_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), PROJECT_TYPE_MANAGER, ProjectManagerIface))
-typedef struct _GUIMainWindow GUIMainWindow;
-typedef struct _GUIMainWindowClass GUIMainWindowClass;
+typedef struct _ProjectManager ProjectManager;
+typedef struct _ProjectManagerIface ProjectManagerIface;
+
+#define PROJECT_MANAGER_TYPE_ITERATOR (project_manager_iterator_get_type ())
+#define PROJECT_MANAGER_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PROJECT_MANAGER_TYPE_ITERATOR, ProjectManagerIterator))
+#define PROJECT_MANAGER_ITERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PROJECT_MANAGER_TYPE_ITERATOR, ProjectManagerIteratorClass))
+#define PROJECT_MANAGER_IS_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PROJECT_MANAGER_TYPE_ITERATOR))
+#define PROJECT_MANAGER_IS_ITERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PROJECT_MANAGER_TYPE_ITERATOR))
+#define PROJECT_MANAGER_ITERATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PROJECT_MANAGER_TYPE_ITERATOR, ProjectManagerIteratorClass))
+
+typedef struct _ProjectManagerIterator ProjectManagerIterator;
+typedef struct _ProjectManagerIteratorClass ProjectManagerIteratorClass;
+
+#define PROJECT_MANAGER_TYPE_CS_ENTRY (project_manager_cs_entry_get_type ())
#define EMULATION_TYPE_CS (emulation_cs_get_type ())
#define EMULATION_CS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EMULATION_TYPE_CS, EmulationCS))
@@ -67,6 +72,13 @@ typedef struct _GUIMainWindowClass GUIMainWindowClass;
typedef struct _EmulationCS EmulationCS;
typedef struct _EmulationCSClass EmulationCSClass;
+typedef struct _ProjectManagerCSEntry ProjectManagerCSEntry;
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+#define _g_array_free0(var) ((var == NULL) ? NULL : (var = (g_array_free (var, TRUE), NULL)))
+#define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
+#define _g_free0(var) (var = (g_free (var), NULL))
+#define _gtk_tree_path_free0(var) ((var == NULL) ? NULL : (var = (gtk_tree_path_free (var), NULL)))
+#define _project_manager_iterator_unref0(var) ((var == NULL) ? NULL : (var = (project_manager_iterator_unref (var), NULL)))
#define _fclose0(var) ((var == NULL) ? NULL : (var = (fclose (var), NULL)))
#define EMULATION_TYPE_PACKET (emulation_packet_get_type ())
@@ -88,6 +100,21 @@ struct _GUICSImportClass {
GtkDialogClass parent_class;
};
+struct _ProjectManagerCSEntry {
+ char* name;
+ EmulationCS* cs;
+};
+
+struct _ProjectManagerIface {
+ GTypeInterface parent_iface;
+ ProjectManagerIterator* (*iterator) (ProjectManager* self);
+ void (*get) (ProjectManager* self, guint index, ProjectManagerCSEntry* result);
+ ProjectManagerIterator* (*add_cs) (ProjectManager* self, const char* name, EmulationCS* cs);
+ void (*remove_cs) (ProjectManager* self, ProjectManagerIterator* iter);
+ void (*clear) (ProjectManager* self);
+ guint (*get_length) (ProjectManager* self);
+};
+
struct _GUICSImportPrivate {
GtkEntry* name_entry;
GtkLabel* status_label;
@@ -95,6 +122,7 @@ struct _GUICSImportPrivate {
GtkButton* ok_button;
GArray* dwords;
gboolean validcs;
+ ProjectManager* manager;
};
@@ -105,10 +133,22 @@ static gint gui_cs_import_packets_length1;
static char** gui_cs_import_packets = NULL;
static gint gui_cs_import_packets_length1 = 0;
static gint gui_cs_import_packets_size = 0;
-extern GUIMainWindow* gui_main;
static gpointer gui_cs_import_parent_class = NULL;
GType gui_cs_import_get_type (void);
+gpointer project_manager_iterator_ref (gpointer instance);
+void project_manager_iterator_unref (gpointer instance);
+GParamSpec* project_manager_param_spec_iterator (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void project_manager_value_set_iterator (GValue* value, gpointer v_object);
+gpointer project_manager_value_get_iterator (const GValue* value);
+GType project_manager_iterator_get_type (void);
+GType project_manager_cs_entry_get_type (void);
+GType emulation_cs_get_type (void);
+ProjectManagerCSEntry* project_manager_cs_entry_dup (const ProjectManagerCSEntry* self);
+void project_manager_cs_entry_free (ProjectManagerCSEntry* self);
+void project_manager_cs_entry_copy (const ProjectManagerCSEntry* self, ProjectManagerCSEntry* dest);
+void project_manager_cs_entry_destroy (ProjectManagerCSEntry* self);
+GType project_manager_get_type (void);
#define GUI_CS_IMPORT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GUI_TYPE_CS_IMPORT, GUICSImportPrivate))
enum {
GUI_CS_IMPORT_DUMMY_PROPERTY
@@ -120,15 +160,13 @@ static void _lambda1_ (GtkButton* source, GUICSImport* self);
static void __lambda1__gtk_button_clicked (GtkButton* _sender, gpointer self);
static void gui_cs_import_update_ok_button (GUICSImport* self);
static void _gui_cs_import_update_ok_button_gtk_editable_changed (GtkEditable* _sender, gpointer self);
-GType gui_main_window_get_type (void);
-GType emulation_cs_get_type (void);
-void gui_main_window_add_cs (GUIMainWindow* self, const char* name, EmulationCS* cs);
+ProjectManagerIterator* project_manager_add_cs (ProjectManager* self, const char* name, EmulationCS* cs);
EmulationCS* emulation_cs_new (guint32* dwords, guint len);
EmulationCS* emulation_cs_construct (GType object_type, guint32* dwords, guint len);
static void _lambda2_ (GtkDialog* source, gint id, GUICSImport* self);
static void __lambda2__gtk_dialog_response (GtkDialog* _sender, gint response_id, gpointer self);
-GUICSImport* gui_cs_import_new (void);
-GUICSImport* gui_cs_import_construct (GType object_type);
+GUICSImport* gui_cs_import_new (ProjectManager* _manager);
+GUICSImport* gui_cs_import_construct (GType object_type, ProjectManager* _manager);
GType emulation_packet_get_type (void);
EmulationPacket* emulation_packet_make (guint32 header, guint32* dwords);
guint emulation_packet_get_length (EmulationPacket* self);
@@ -137,6 +175,11 @@ static void gui_cs_import_finalize (GObject* obj);
+static gpointer _g_object_ref0 (gpointer self) {
+ return self ? g_object_ref (self) : NULL;
+}
+
+
static glong string_get_length (const char* self) {
glong result;
g_return_val_if_fail (self != NULL, 0L);
@@ -145,11 +188,6 @@ static glong string_get_length (const char* self) {
}
-static gpointer _g_object_ref0 (gpointer self) {
- return self ? g_object_ref (self) : NULL;
-}
-
-
static void _lambda0_ (GtkCellLayout* coll, GtkCellRenderer* celll, GtkTreeModel* model, GtkTreeIter* iter, GUICSImport* self) {
GtkTreePath* path;
gint* indices;
@@ -200,8 +238,10 @@ static void _gui_cs_import_update_ok_button_gtk_editable_changed (GtkEditable* _
static void _lambda2_ (GtkDialog* source, gint id, GUICSImport* self) {
g_return_if_fail (source != NULL);
if (id == GTK_RESPONSE_OK) {
+ ProjectManagerIterator* _tmp1_;
EmulationCS* _tmp0_;
- gui_main_window_add_cs (gui_main, gtk_entry_get_text (self->priv->name_entry), _tmp0_ = emulation_cs_new (&g_array_index (self->priv->dwords, guint32, (guint) 0), self->priv->dwords->len));
+ _tmp1_ = project_manager_add_cs (self->priv->manager, gtk_entry_get_text (self->priv->name_entry), _tmp0_ = emulation_cs_new (&g_array_index (self->priv->dwords, guint32, (guint) 0), self->priv->dwords->len));
+ _project_manager_iterator_unref0 (_tmp1_);
_g_object_unref0 (_tmp0_);
}
gtk_object_destroy ((GtkObject*) self);
@@ -213,30 +253,33 @@ static void __lambda2__gtk_dialog_response (GtkDialog* _sender, gint response_id
}
-GUICSImport* gui_cs_import_construct (GType object_type) {
+GUICSImport* gui_cs_import_construct (GType object_type, ProjectManager* _manager) {
GError * _inner_error_;
GUICSImport * self;
+ ProjectManager* _tmp0_;
GtkBuilder* builder;
- GObject* _tmp0_;
- GtkTreeViewColumn* col;
GObject* _tmp1_;
- GtkCellRendererText* cell;
- GtkListStore* _tmp3_;
+ GtkTreeViewColumn* col;
GObject* _tmp2_;
- GtkButton* _tmp5_;
- GtkWidget* _tmp4_;
- GObject* _tmp6_;
+ GtkCellRendererText* cell;
+ GtkListStore* _tmp4_;
+ GObject* _tmp3_;
+ GtkButton* _tmp6_;
+ GtkWidget* _tmp5_;
+ GObject* _tmp7_;
GtkButton* load_button;
- GArray* _tmp7_;
- GtkEntry* _tmp9_;
- GObject* _tmp8_;
- GdkColor _tmp10_ = {0};
+ GArray* _tmp8_;
+ GtkEntry* _tmp10_;
+ GObject* _tmp9_;
+ GdkColor _tmp11_ = {0};
GdkColor color;
- GtkLabel* _tmp12_;
- GObject* _tmp11_;
- GObject* _tmp13_;
+ GtkLabel* _tmp13_;
+ GObject* _tmp12_;
+ GObject* _tmp14_;
+ g_return_val_if_fail (_manager != NULL, NULL);
_inner_error_ = NULL;
self = g_object_newv (object_type, 0, NULL);
+ self->priv->manager = (_tmp0_ = _g_object_ref0 (_manager), _g_object_unref0 (self->priv->manager), _tmp0_);
builder = gtk_builder_new ();
{
gtk_builder_add_from_string (builder, gui_cs_import_xml_ui, (gsize) string_get_length (gui_cs_import_xml_ui), &_inner_error_);
@@ -265,26 +308,26 @@ GUICSImport* gui_cs_import_construct (GType object_type) {
return NULL;
}
gtk_window_set_title ((GtkWindow*) self, "Import CS");
- col = _g_object_ref0 ((_tmp0_ = gtk_builder_get_object (builder, "value_column"), GTK_IS_TREE_VIEW_COLUMN (_tmp0_) ? ((GtkTreeViewColumn*) _tmp0_) : NULL));
- cell = _g_object_ref0 ((_tmp1_ = gtk_builder_get_object (builder, "value_cell"), GTK_IS_CELL_RENDERER_TEXT (_tmp1_) ? ((GtkCellRendererText*) _tmp1_) : NULL));
+ col = _g_object_ref0 ((_tmp1_ = gtk_builder_get_object (builder, "value_column"), GTK_IS_TREE_VIEW_COLUMN (_tmp1_) ? ((GtkTreeViewColumn*) _tmp1_) : NULL));
+ cell = _g_object_ref0 ((_tmp2_ = gtk_builder_get_object (builder, "value_cell"), GTK_IS_CELL_RENDERER_TEXT (_tmp2_) ? ((GtkCellRendererText*) _tmp2_) : NULL));
gtk_cell_layout_set_cell_data_func ((GtkCellLayout*) col, (GtkCellRenderer*) cell, __lambda0__gtk_cell_layout_data_func, g_object_ref (self), g_object_unref);
- self->priv->meta_store = (_tmp3_ = _g_object_ref0 ((_tmp2_ = gtk_builder_get_object (builder, "meta_store"), GTK_IS_LIST_STORE (_tmp2_) ? ((GtkListStore*) _tmp2_) : NULL)), _g_object_unref0 (self->priv->meta_store), _tmp3_);
+ self->priv->meta_store = (_tmp4_ = _g_object_ref0 ((_tmp3_ = gtk_builder_get_object (builder, "meta_store"), GTK_IS_LIST_STORE (_tmp3_) ? ((GtkListStore*) _tmp3_) : NULL)), _g_object_unref0 (self->priv->meta_store), _tmp4_);
gtk_dialog_add_button ((GtkDialog*) self, GTK_STOCK_CANCEL, (gint) GTK_RESPONSE_CANCEL);
- self->priv->ok_button = (_tmp5_ = _g_object_ref0 ((_tmp4_ = gtk_dialog_add_button ((GtkDialog*) self, GTK_STOCK_OK, (gint) GTK_RESPONSE_OK), GTK_IS_BUTTON (_tmp4_) ? ((GtkButton*) _tmp4_) : NULL)), _g_object_unref0 (self->priv->ok_button), _tmp5_);
+ self->priv->ok_button = (_tmp6_ = _g_object_ref0 ((_tmp5_ = gtk_dialog_add_button ((GtkDialog*) self, GTK_STOCK_OK, (gint) GTK_RESPONSE_OK), GTK_IS_BUTTON (_tmp5_) ? ((GtkButton*) _tmp5_) : NULL)), _g_object_unref0 (self->priv->ok_button), _tmp6_);
gtk_widget_set_sensitive ((GtkWidget*) self->priv->ok_button, FALSE);
- load_button = _g_object_ref0 ((_tmp6_ = gtk_builder_get_object (builder, "load_button"), GTK_IS_BUTTON (_tmp6_) ? ((GtkButton*) _tmp6_) : NULL));
+ load_button = _g_object_ref0 ((_tmp7_ = gtk_builder_get_object (builder, "load_button"), GTK_IS_BUTTON (_tmp7_) ? ((GtkButton*) _tmp7_) : NULL));
g_signal_connect_object (load_button, "clicked", (GCallback) __lambda1__gtk_button_clicked, self, 0);
self->priv->validcs = FALSE;
- self->priv->dwords = (_tmp7_ = g_array_new (FALSE, FALSE, (guint) sizeof (guint32)), _g_array_free0 (self->priv->dwords), _tmp7_);
- self->priv->name_entry = (_tmp9_ = _g_object_ref0 ((_tmp8_ = gtk_builder_get_object (builder, "name_entry"), GTK_IS_ENTRY (_tmp8_) ? ((GtkEntry*) _tmp8_) : NULL)), _g_object_unref0 (self->priv->name_entry), _tmp9_);
+ self->priv->dwords = (_tmp8_ = g_array_new (FALSE, FALSE, (guint) sizeof (guint32)), _g_array_free0 (self->priv->dwords), _tmp8_);
+ self->priv->name_entry = (_tmp10_ = _g_object_ref0 ((_tmp9_ = gtk_builder_get_object (builder, "name_entry"), GTK_IS_ENTRY (_tmp9_) ? ((GtkEntry*) _tmp9_) : NULL)), _g_object_unref0 (self->priv->name_entry), _tmp10_);
g_signal_connect_object ((GtkEditable*) self->priv->name_entry, "changed", (GCallback) _gui_cs_import_update_ok_button_gtk_editable_changed, self, 0);
- color = (memset (&_tmp10_, 0, sizeof (GdkColor)), _tmp10_);
+ color = (memset (&_tmp11_, 0, sizeof (GdkColor)), _tmp11_);
color.red = (guint16) 0xFFFF;
color.green = (guint16) 0x0000;
color.blue = (guint16) 0x0000;
- self->priv->status_label = (_tmp12_ = _g_object_ref0 ((_tmp11_ = gtk_builder_get_object (builder, "status_label"), GTK_IS_LABEL (_tmp11_) ? ((GtkLabel*) _tmp11_) : NULL)), _g_object_unref0 (self->priv->status_label), _tmp12_);
+ self->priv->status_label = (_tmp13_ = _g_object_ref0 ((_tmp12_ = gtk_builder_get_object (builder, "status_label"), GTK_IS_LABEL (_tmp12_) ? ((GtkLabel*) _tmp12_) : NULL)), _g_object_unref0 (self->priv->status_label), _tmp13_);
gtk_widget_modify_fg ((GtkWidget*) self->priv->status_label, GTK_STATE_NORMAL, &color);
- gtk_box_pack_start ((GtkBox*) ((GtkDialog*) self)->vbox, (GtkWidget*) (_tmp13_ = gtk_builder_get_object (builder, "mainbox"), GTK_IS_VBOX (_tmp13_) ? ((GtkVBox*) _tmp13_) : NULL), TRUE, TRUE, (guint) 0);
+ gtk_box_pack_start ((GtkBox*) ((GtkDialog*) self)->vbox, (GtkWidget*) (_tmp14_ = gtk_builder_get_object (builder, "mainbox"), GTK_IS_VBOX (_tmp14_) ? ((GtkVBox*) _tmp14_) : NULL), TRUE, TRUE, (guint) 0);
g_signal_connect_object ((GtkDialog*) self, "response", (GCallback) __lambda2__gtk_dialog_response, self, 0);
gtk_window_set_default_size ((GtkWindow*) self, 300, 400);
_g_object_unref0 (builder);
@@ -295,8 +338,8 @@ GUICSImport* gui_cs_import_construct (GType object_type) {
}
-GUICSImport* gui_cs_import_new (void) {
- return gui_cs_import_construct (GUI_TYPE_CS_IMPORT);
+GUICSImport* gui_cs_import_new (ProjectManager* _manager) {
+ return gui_cs_import_construct (GUI_TYPE_CS_IMPORT, _manager);
}
@@ -401,6 +444,7 @@ static void gui_cs_import_finalize (GObject* obj) {
_g_object_unref0 (self->priv->meta_store);
_g_object_unref0 (self->priv->ok_button);
_g_array_free0 (self->priv->dwords);
+ _g_object_unref0 (self->priv->manager);
G_OBJECT_CLASS (gui_cs_import_parent_class)->finalize (obj);
}
diff --git a/src/csimport.vala b/src/csimport.vala
index dbf9cd4..caf2702 100644
--- a/src/csimport.vala
+++ b/src/csimport.vala
@@ -199,9 +199,12 @@ namespace GUI
private Button ok_button;
private Array<uint32> dwords;
private bool validcs;
+ private Project.Manager manager;
- public CSImport()
+ public CSImport(Project.Manager _manager)
{
+ this.manager = _manager;
+
var builder = new Builder();
try {
builder.add_from_string(xml_ui, xml_ui.length);
@@ -251,9 +254,9 @@ namespace GUI
response.connect((source, id) => {
if (id == ResponseType.OK) {
- main.add_cs(name_entry.text,
- new Emulation.CS(&dwords.index(0),
- dwords.length));
+ manager.add_cs(name_entry.text,
+ new Emulation.CS(&dwords.index(0),
+ dwords.length));
}
destroy();
});
diff --git a/src/csview.c b/src/csview.c
index 00c237c..8f5956a 100644
--- a/src/csview.c
+++ b/src/csview.c
@@ -439,8 +439,8 @@ 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 _lambda12_ (GtkComboBox* combo, GUICSView* self);
-static void __lambda12__gtk_combo_box_changed (GtkComboBox* _sender, gpointer self);
+static void _lambda13_ (GtkComboBox* combo, GUICSView* self);
+static void __lambda13__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);
@@ -2101,14 +2101,14 @@ static glong string_get_length (const char* self) {
}
-static void _lambda12_ (GtkComboBox* combo, GUICSView* self) {
+static void _lambda13_ (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 __lambda12__gtk_combo_box_changed (GtkComboBox* _sender, gpointer self) {
- _lambda12_ (_sender, self);
+static void __lambda13__gtk_combo_box_changed (GtkComboBox* _sender, gpointer self) {
+ _lambda13_ (_sender, self);
}
@@ -2189,7 +2189,7 @@ GUICSView* gui_cs_view_construct (GType object_type, EmulationCS* cs) {
}
}
gtk_combo_box_set_active (chips, (gint) emulation_spec_default);
- g_signal_connect_object (chips, "changed", (GCallback) __lambda12__gtk_combo_box_changed, self, 0);
+ g_signal_connect_object (chips, "changed", (GCallback) __lambda13__gtk_combo_box_changed, self, 0);
chips_box = _g_object_ref0 ((_tmp3_ = gtk_builder_get_object (builder, "chips_box"), GTK_IS_HBOX (_tmp3_) ? ((GtkHBox*) _tmp3_) : NULL));
gtk_box_pack_start ((GtkBox*) chips_box, (GtkWidget*) chips, FALSE, FALSE, (guint) 0);
self->priv->cs_view = (_tmp5_ = _g_object_ref0 ((_tmp4_ = gtk_builder_get_object (builder, "packet_tree"), GTK_IS_TREE_VIEW (_tmp4_) ? ((GtkTreeView*) _tmp4_) : NULL)), _g_object_unref0 (self->priv->cs_view), _tmp5_);
diff --git a/src/main.c b/src/main.c
index 53145c0..f14d648 100644
--- a/src/main.c
+++ b/src/main.c
@@ -25,66 +25,10 @@
#include <glib.h>
#include <glib-object.h>
-#include <gtk/gtk.h>
#include <stdlib.h>
#include <string.h>
-#include <stdio.h>
-#include <gdk/gdk.h>
-
-
-#define GUI_TYPE_MAIN_WINDOW (gui_main_window_get_type ())
-#define GUI_MAIN_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GUI_TYPE_MAIN_WINDOW, GUIMainWindow))
-#define GUI_MAIN_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GUI_TYPE_MAIN_WINDOW, GUIMainWindowClass))
-#define GUI_IS_MAIN_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GUI_TYPE_MAIN_WINDOW))
-#define GUI_IS_MAIN_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GUI_TYPE_MAIN_WINDOW))
-#define GUI_MAIN_WINDOW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GUI_TYPE_MAIN_WINDOW, GUIMainWindowClass))
-
-typedef struct _GUIMainWindow GUIMainWindow;
-typedef struct _GUIMainWindowClass GUIMainWindowClass;
-typedef struct _GUIMainWindowPrivate GUIMainWindowPrivate;
-#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
-
-#define EMULATION_TYPE_CS (emulation_cs_get_type ())
-#define EMULATION_CS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EMULATION_TYPE_CS, EmulationCS))
-#define EMULATION_CS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EMULATION_TYPE_CS, EmulationCSClass))
-#define EMULATION_IS_CS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EMULATION_TYPE_CS))
-#define EMULATION_IS_CS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EMULATION_TYPE_CS))
-#define EMULATION_CS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EMULATION_TYPE_CS, EmulationCSClass))
-
-typedef struct _EmulationCS EmulationCS;
-typedef struct _EmulationCSClass EmulationCSClass;
-#define _g_free0(var) (var = (g_free (var), NULL))
+#include <gtk/gtk.h>
-#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))
-#define GUI_IS_CS_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GUI_TYPE_CS_VIEW))
-#define GUI_IS_CS_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GUI_TYPE_CS_VIEW))
-#define GUI_CS_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GUI_TYPE_CS_VIEW, GUICSViewClass))
-
-typedef struct _GUICSView GUICSView;
-typedef struct _GUICSViewClass GUICSViewClass;
-
-#define GUI_TYPE_CS_EXPORT (gui_cs_export_get_type ())
-#define GUI_CS_EXPORT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GUI_TYPE_CS_EXPORT, GUICSExport))
-#define GUI_CS_EXPORT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GUI_TYPE_CS_EXPORT, GUICSExportClass))
-#define GUI_IS_CS_EXPORT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GUI_TYPE_CS_EXPORT))
-#define GUI_IS_CS_EXPORT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GUI_TYPE_CS_EXPORT))
-#define GUI_CS_EXPORT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GUI_TYPE_CS_EXPORT, GUICSExportClass))
-
-typedef struct _GUICSExport GUICSExport;
-typedef struct _GUICSExportClass GUICSExportClass;
-#define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
-
-#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))
-#define GUI_IS_CS_IMPORT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GUI_TYPE_CS_IMPORT))
-#define GUI_IS_CS_IMPORT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GUI_TYPE_CS_IMPORT))
-#define GUI_CS_IMPORT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GUI_TYPE_CS_IMPORT, GUICSImportClass))
-
-typedef struct _GUICSImport GUICSImport;
-typedef struct _GUICSImportClass GUICSImportClass;
#define EMULATION_TYPE_SPEC_ENTRY (emulation_spec_entry_get_type ())
@@ -98,24 +42,18 @@ typedef struct _GUICSImportClass GUICSImportClass;
typedef struct _EmulationSpec EmulationSpec;
typedef struct _EmulationSpecClass EmulationSpecClass;
typedef struct _EmulationSpecEntry EmulationSpecEntry;
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+#define _g_free0(var) (var = (g_free (var), NULL))
-struct _GUIMainWindow {
- GtkWindow parent_instance;
- GUIMainWindowPrivate * priv;
-};
+#define PROJECT_TYPE_WINDOW (project_window_get_type ())
+#define PROJECT_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PROJECT_TYPE_WINDOW, ProjectWindow))
+#define PROJECT_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PROJECT_TYPE_WINDOW, ProjectWindowClass))
+#define PROJECT_IS_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PROJECT_TYPE_WINDOW))
+#define PROJECT_IS_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PROJECT_TYPE_WINDOW))
+#define PROJECT_WINDOW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PROJECT_TYPE_WINDOW, ProjectWindowClass))
-struct _GUIMainWindowClass {
- GtkWindowClass parent_class;
-};
-
-struct _GUIMainWindowPrivate {
- GtkListStore* cs_store;
- GtkTreeView* cs_list;
- GtkMenu* edit_menu;
- GtkAction* action_viewcs;
- GtkAction* action_exportcs;
- GtkAction* action_removecs;
-};
+typedef struct _ProjectWindow ProjectWindow;
+typedef struct _ProjectWindowClass ProjectWindowClass;
struct _EmulationSpecEntry {
EmulationSpec* spec;
@@ -123,9 +61,6 @@ struct _EmulationSpecEntry {
};
-static gpointer gui_main_window_parent_class = NULL;
-extern GUIMainWindow* gui_main;
-GUIMainWindow* gui_main = NULL;
extern EmulationSpecEntry* emulation_specs;
extern gint emulation_specs_length1;
EmulationSpecEntry* emulation_specs = NULL;
@@ -133,53 +68,6 @@ gint emulation_specs_length1 = 0;
extern guint emulation_spec_default;
guint emulation_spec_default = (guint) 1;
-GType gui_main_window_get_type (void);
-#define GUI_MAIN_WINDOW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GUI_TYPE_MAIN_WINDOW, GUIMainWindowPrivate))
-enum {
- GUI_MAIN_WINDOW_DUMMY_PROPERTY
-};
-#define GUI_MAIN_WINDOW_xml_ui "\n <?xml version=\"1.0\"?>\n <interface>\n <requires lib=\"gtk+\" version=\"2.16\"/>\n <!-- interface-naming-policy project-wide -->\n <object class=\"GtkUIManager\" id=\"uimanager1\">\n <child>\n <object class=\"GtkActionGroup\" id=\"actiongroup1\">\n <child>\n <object class=\"GtkAction\" id=\"New\">\n <property name=\"name\">New</property>\n <property name=\"stock_id\">gtk-new</property>\n </object>\n </child>\n <child>\n <object class=\"GtkAction\" id=\"Open\">\n <property name=\"name\">Open</property>\n <property name=\"stock_id\">gtk-open</property>\n </object>\n </child>\n <child>\n <object class=\"GtkAction\" id=\"Save\">\n <property name=\"name\">Save</property>\n <property name=\"stock_id\">gtk-save</property>\n </object>\n </child>\n <child>\n <object class=\"GtkAction\" id=\"SaveAs\">\n <property name=\"name\">SaveAs</property>\n <property name=\"stock_id\">gtk-save-as</property>\n </object>\n </child>\n <child>\n <object class=\"GtkAction\" id=\"Quit\">\n <property name=\"name\">Quit</property>\n <property name=\"stock_id\">gtk-quit</property>\n </object>\n </child>\n <child>\n <object class=\"GtkAction\" id=\"ViewCS\">\n <property name=\"name\">ViewCS</property>\n <property name=\"label\">_View CS</property>\n <property name=\"tooltip\">View the selected command stream.</property>\n <property name=\"icon_name\">gtk-open</property>\n </object>\n </child>\n <child>\n <object class=\"GtkAction\" id=\"RemoveCS\">\n <property name=\"name\">RemoveCS</property>\n <property name=\"label\">_Remove CS</property>\n <property name=\"tooltip\">Remove the selected command stream from the current project.</property>\n <property name=\"icon_name\">gtk-delete</property>\n </object>\n <accelerator key=\"Delete\"/>\n </child>\n <child>\n <object class=\"GtkAction\" id=\"ImportCS\">\n <property name=\"name\">ImportCS</property>\n <property name=\"label\">_Import CS</property>\n <property name=\"tooltip\">Import a new command stream to the current project.</property>\n <property name=\"icon_name\">gtk-add</property>\n </object>\n <accelerator key=\"i\" modifiers=\"GDK_CONTROL_MASK\"/>\n </child>\n <child>\n <object class=\"GtkAction\" id=\"ExportCS\">\n <property name=\"name\">ExportCS</property>\n <property name=\"label\">_Export CS</property>\n <property name=\"tooltip\">Export the selected command stream to a file.</property>\n <property name=\"icon_name\">gtk-convert</property>\n </object>\n <accelerator key=\"e\" modifiers=\"GDK_CONTROL_MASK\"/>\n </child>\n <child>\n <object class=\"GtkAction\" id=\"About\">\n <property name=\"name\">About</property>\n <property name=\"stock_id\">gtk-about</property>\n </object>\n <accelerator key=\"F1\"/>\n </child>\n <child>\n <object class=\"GtkAction\" id=\"FileMenu\">\n <property name=\"name\">FileMenu</property>\n <property name=\"label\" translatable=\"yes\">_File</property>\n </object>\n </child>\n <child>\n <object class=\"GtkAction\" id=\"EditMenu\">\n <property name=\"name\">EditMenu</property>\n <property name=\"label\" translatable=\"yes\">_Edit</property>\n </object>\n </child>\n <child>\n <object class=\"GtkAction\" id=\"HelpMenu\">\n <property name=\"name\">HelpMenu</property>\n <property name=\"label\" translatable=\"yes\">_Help</property>\n </object>\n </child>\n </object>\n </child>\n <ui>\n <menubar name=\"menubar1\">\n <menu action=\"FileMenu\" name=\"FileMenu\">\n <menuitem action=\"New\" name=\"New\"/>\n <menuitem action=\"Open\" name=\"Open\"/>\n <menuitem action=\"Save\" name=\"Save\"/>\n <menuitem action=\"SaveAs\" name=\"SaveAs\"/>\n <separator/>\n <menuitem action=\"Quit\" name=\"Quit\"/>\n </menu>\n <menu action=\"EditMenu\" name=\"EditMenu\">\n <menuitem action=\"ViewCS\" name=\"ViewCS\"/>\n <menuitem action=\"ImportCS\" name=\"ImportCS\"/>\n <menuitem action=\"ExportCS\" name=\"ExportCS\"/>\n <separator/>\n <menuitem action=\"RemoveCS\" name=\"RemoveCS\"/>\n </menu>\n <menu action=\"HelpMenu\" name=\"HelpMenu\">\n <menuitem action=\"About\" name=\"About\"/>\n </menu>\n </menubar>\n <toolbar name=\"toolbar1\">\n <toolitem action=\"New\" name=\"New\"/>\n <toolitem action=\"Open\" name=\"Open\"/>\n <toolitem action=\"Save\" name=\"Save\"/>\n <separator/>\n <toolitem action=\"ImportCS\" name=\"ImportCS\"/>\n <toolitem action=\"ExportCS\" name=\"ExportCS\"/>\n <separator/>\n <toolitem action=\"RemoveCS\" name=\"RemoveCS\"/>\n </toolbar>\n <popup name=\"popup1\">\n <menuitem action=\"ViewCS\" name=\"ViewCS\"/>\n <menuitem action=\"ExportCS\" name=\"ExportCS\"/>\n <separator/>\n <menuitem action=\"RemoveCS\" name=\"RemoveCS\"/>\n </popup>\n </ui>\n </object>\n <object class=\"GtkVBox\" id=\"mainbox\">\n <property name=\"visible\">True</property>\n <property name=\"orientation\">vertical</property>\n <child>\n <object constructor=\"uimanager1\" class=\"GtkMenuBar\" id=\"menubar1\">\n <property name=\"visible\">True</property>\n <child internal-child=\"accessible\">\n <object class=\"AtkObject\" id=\"a11y-menubar\">\n <property name=\"AtkObject::accessible-name\">The menubar</property>\n </object>\n </child>\n </object>\n <packing>\n <property name=\"expand\">False</property>\n </packing>\n </child>\n <child>\n <object constructor=\"uimanager1\" class=\"GtkToolbar\" id=\"toolbar1\">\n <property name=\"visible\">True</property>\n <child internal-child=\"accessible\">\n <object class=\"AtkObject\" id=\"a11y-toolbar\">\n <property name=\"AtkObject::accessible-name\">The toolbar</property>\n </object>\n </child>\n </object>\n <packing>\n <property name=\"expand\">False</property>\n <property name=\"position\">1</property>\n </packing>\n </child>\n <child>\n <object class=\"GtkScrolledWindow\" id=\"scrolledwindow1\">\n <property name=\"visible\">True</property>\n <property name=\"can_focus\">True</property>\n <property name=\"hscrollbar_policy\">automatic</property>\n <property name=\"vscrollbar_policy\">automatic</property>\n <child>\n <object class=\"GtkTreeView\" id=\"cs_list\">\n <property name=\"visible\">True</property>\n <property name=\"can_focus\">True</property>\n <property name=\"reorderable\">True</property>\n <property name=\"model\">cs_store</property>\n <child>\n <object class=\"GtkTreeViewColumn\" id=\"pkts_column\">\n <property name=\"title\">Packets</property>\n <child>\n <object class=\"GtkCellRendererText\" id=\"pkts_cell\"/>\n </child>\n </object>\n </child>\n <child>\n <object class=\"GtkTreeViewColumn\" id=\"treeviewcolumn1\">\n <property name=\"title\">Name</property>\n <child>\n <object class=\"GtkCellRendererText\" id=\"cellrenderertext1\"/>\n <attributes>\n <attribute name=\"text\">0</attribute>\n </attributes>\n </child>\n </object>\n </child>\n </object>\n </child>\n </object>\n <packing>\n <property name=\"position\">2</property>\n </packing>\n </child>\n </object>\n <object class=\"GtkListStore\" id=\"cs_store\">\n <columns>\n <!-- column-name Name -->\n <column type=\"gchararray\"/>\n <!-- column-name CS -->\n <column type=\"GObject\"/>\n </columns>\n </object>\n <object constructor=\"uimanager1\" class=\"GtkMenu\" id=\"popup1\">\n <child internal-child=\"accessible\">\n <object class=\"AtkObject\" id=\"a11y-popup\">\n <property name=\"AtkObject::accessible-name\">The popup menu</property>\n </object>\n </child>\n </object>\n </interface>\n "
-#define GUI_MAIN_WINDOW_about_xml_ui "\n <?xml version=\"1.0\"?>\n <interface>\n <requires lib=\"gtk+\" version=\"2.16\"/>\n <!-- interface-naming-policy project-wide -->\n <object class=\"GtkAboutDialog\" id=\"about_dialog\">\n <property name=\"border_width\">5</property>\n <property name=\"type_hint\">normal</property>\n <property name=\"skip_taskbar_hint\">True</property>\n <property name=\"has_separator\">False</property>\n <property name=\"program_name\">Radeon Simulator</property>\n <property name=\"copyright\" translatable=\"yes\">Copyright &#xA9; 2010 Joakim Sindholt</property>\n <property name=\"comments\" translatable=\"yes\">A simulator for Radeon GPUs</property>\n <property name=\"website\">http://cgit.freedesktop.org/~jsindholt/rsim</property>\n <property name=\"license\" translatable=\"yes\">This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.</property>\n <property name=\"authors\">Joakim Sindholt &lt;opensource@zhasha.com&gt;</property>\n <property name=\"logo\">/usr/share/pixmaps/rsim.png</property>\n <property name=\"wrap_license\">True</property>\n <child internal-child=\"vbox\">\n <object class=\"GtkVBox\" id=\"dialog-vbox1\">\n <property name=\"visible\">True</property>\n <property name=\"orientation\">vertical</property>\n <property name=\"spacing\">2</property>\n <child internal-child=\"action_area\">\n <object class=\"GtkHButtonBox\" id=\"dialog-action_area1\">\n <property name=\"visible\">True</property>\n <property name=\"layout_style\">end</property>\n </object>\n <packing>\n <property name=\"expand\">False</property>\n <property name=\"pack_type\">end</property>\n <property name=\"position\">0</property>\n </packing>\n </child>\n </object>\n </child>\n </object>\n </interface>\n "
-static void gui_main_window_edit_set_sensitive (GUIMainWindow* self, gboolean setting);
-GType emulation_cs_get_type (void);
-static EmulationCS* gui_main_window_get_selected_cs (GUIMainWindow* self);
-void gui_main_window_add_cs (GUIMainWindow* self, const char* name, EmulationCS* cs);
-void gui_main_window_remove_cs (GUIMainWindow* self);
-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_main_window_open_csview (GUIMainWindow* self);
-GUICSExport* gui_cs_export_new (EmulationCS* cs);
-GUICSExport* gui_cs_export_construct (GType object_type, EmulationCS* cs);
-GType gui_cs_export_get_type (void);
-static void gui_main_window_open_csexport (GUIMainWindow* self);
-GUIMainWindow* gui_main_window_new (void);
-GUIMainWindow* gui_main_window_construct (GType object_type);
-guint emulation_cs_get_length (EmulationCS* self);
-static void _lambda14_ (GtkCellLayout* col, GtkCellRenderer* cell, GtkTreeModel* model, GtkTreeIter* iter, GUIMainWindow* self);
-static void __lambda14__gtk_cell_layout_data_func (GtkCellLayout* cell_layout, GtkCellRenderer* cell, GtkTreeModel* tree_model, GtkTreeIter* iter, gpointer self);
-static void _lambda15_ (GtkAction* source, GUIMainWindow* self);
-static void __lambda15__gtk_action_activate (GtkAction* _sender, gpointer self);
-GUICSImport* gui_cs_import_new (void);
-GUICSImport* gui_cs_import_construct (GType object_type);
-GType gui_cs_import_get_type (void);
-static void _lambda16_ (GtkAction* source, GUIMainWindow* self);
-static void __lambda16__gtk_action_activate (GtkAction* _sender, gpointer self);
-static void _lambda17_ (GtkAction* source, GUIMainWindow* self);
-static void __lambda17__gtk_action_activate (GtkAction* _sender, gpointer self);
-static void _lambda18_ (GtkAction* source, GUIMainWindow* self);
-static void __lambda18__gtk_action_activate (GtkAction* _sender, gpointer self);
-static void _lambda19_ (GtkAction* source, GUIMainWindow* self);
-static void __lambda19__gtk_action_activate (GtkAction* _sender, gpointer self);
-static void _lambda20_ (GtkTreePath* path, GtkTreeViewColumn* column, GUIMainWindow* self);
-static void __lambda20__gtk_tree_view_row_activated (GtkTreeView* _sender, GtkTreePath* path, GtkTreeViewColumn* column, gpointer self);
-static gboolean _lambda21_ (GdkEventButton* event, GUIMainWindow* self);
-static gboolean __lambda21__gtk_widget_button_press_event (GtkWidget* _sender, GdkEventButton* event, gpointer self);
-static void _lambda22_ (GtkTreeView* source, GUIMainWindow* self);
-static void __lambda22__gtk_tree_view_cursor_changed (GtkTreeView* _sender, gpointer self);
-static void _gtk_main_quit_gtk_object_destroy (GtkObject* _sender, gpointer self);
-static GObject * gui_main_window_constructor (GType type, guint n_construct_properties, GObjectConstructParam * construct_properties);
-static void gui_main_window_finalize (GObject* obj);
GType emulation_spec_entry_get_type (void);
GType emulation_spec_get_type (void);
EmulationSpecEntry* emulation_spec_entry_dup (const EmulationSpecEntry* self);
@@ -189,448 +77,50 @@ void emulation_spec_entry_destroy (EmulationSpecEntry* self);
static void _vala_EmulationSpecEntry_array_free (EmulationSpecEntry* array, gint array_length);
EmulationSpec* emulation_spec_new (const char* filename, const char* variant);
EmulationSpec* emulation_spec_construct (GType object_type, const char* filename, const char* variant);
-void gui_init (char*** args, int* args_length1);
+ProjectWindow* project_window_new (void);
+ProjectWindow* project_window_construct (GType object_type);
+GType project_window_get_type (void);
gint _main (char** args, int args_length1);
-static void gui_main_window_edit_set_sensitive (GUIMainWindow* self, gboolean setting) {
- g_return_if_fail (self != NULL);
- gtk_action_set_sensitive (self->priv->action_viewcs, setting);
- gtk_action_set_sensitive (self->priv->action_exportcs, setting);
- gtk_action_set_sensitive (self->priv->action_removecs, setting);
-}
-
-
static gpointer _g_object_ref0 (gpointer self) {
return self ? g_object_ref (self) : NULL;
}
-static EmulationCS* gui_main_window_get_selected_cs (GUIMainWindow* self) {
- EmulationCS* result;
- GtkTreeIter iter = {0};
- EmulationCS* cs;
- GtkTreeSelection* selection;
- g_return_val_if_fail (self != NULL, NULL);
- cs = NULL;
- selection = _g_object_ref0 (gtk_tree_view_get_selection (self->priv->cs_list));
- if (!gtk_tree_selection_get_selected (selection, NULL, &iter)) {
- result = NULL;
- _g_object_unref0 (cs);
- _g_object_unref0 (selection);
- return result;
- }
- gtk_tree_model_get ((GtkTreeModel*) self->priv->cs_store, &iter, 1, &cs, -1, -1);
- result = cs;
- _g_object_unref0 (selection);
- return result;
-}
-
-
-void gui_main_window_add_cs (GUIMainWindow* self, const char* name, EmulationCS* cs) {
- GtkTreeIter iter = {0};
- g_return_if_fail (self != NULL);
- g_return_if_fail (name != NULL);
- g_return_if_fail (cs != NULL);
- gtk_list_store_append (self->priv->cs_store, &iter);
- gtk_list_store_set (self->priv->cs_store, &iter, 0, name, 1, cs, -1, -1);
-}
-
-
-void gui_main_window_remove_cs (GUIMainWindow* self) {
- GtkTreeIter iter = {0};
- char* name;
- GtkTreeSelection* selection;
- GtkMessageDialog* d;
- gint _result_;
- g_return_if_fail (self != NULL);
- name = NULL;
- selection = _g_object_ref0 (gtk_tree_view_get_selection (self->priv->cs_list));
- if (!gtk_tree_selection_get_selected (selection, NULL, &iter)) {
- _g_free0 (name);
- _g_object_unref0 (selection);
- return;
- }
- gtk_tree_model_get ((GtkTreeModel*) self->priv->cs_store, &iter, 0, &name, -1, -1);
- d = g_object_ref_sink ((GtkMessageDialog*) gtk_message_dialog_new ((GtkWindow*) self, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, "Are you sure you want to delete the command stream '%s'", name));
- _result_ = gtk_dialog_run ((GtkDialog*) d);
- gtk_object_destroy ((GtkObject*) d);
- if (_result_ != GTK_RESPONSE_YES) {
- _g_free0 (name);
- _g_object_unref0 (selection);
- _g_object_unref0 (d);
- return;
- }
- gtk_list_store_remove (self->priv->cs_store, &iter);
- _g_free0 (name);
- _g_object_unref0 (selection);
- _g_object_unref0 (d);
-}
-
-
-static void gui_main_window_open_csview (GUIMainWindow* self) {
- EmulationCS* cs;
- g_return_if_fail (self != NULL);
- cs = gui_main_window_get_selected_cs (self);
- if (cs != NULL) {
- GUICSView* csv;
- csv = g_object_ref_sink (gui_cs_view_new (cs));
- gtk_widget_show_all ((GtkWidget*) csv);
- _g_object_unref0 (csv);
- }
- _g_object_unref0 (cs);
-}
-
-
-static void gui_main_window_open_csexport (GUIMainWindow* self) {
- EmulationCS* cs;
- g_return_if_fail (self != NULL);
- cs = gui_main_window_get_selected_cs (self);
- if (cs != NULL) {
- GUICSExport* d;
- d = g_object_ref_sink (gui_cs_export_new (cs));
- gtk_dialog_run ((GtkDialog*) d);
- _g_object_unref0 (d);
- }
- _g_object_unref0 (cs);
-}
-
-
-GUIMainWindow* gui_main_window_construct (GType object_type) {
- GUIMainWindow * self;
- self = g_object_newv (object_type, 0, NULL);
- return self;
-}
-
-
-GUIMainWindow* gui_main_window_new (void) {
- return gui_main_window_construct (GUI_TYPE_MAIN_WINDOW);
-}
-
-
-static glong string_get_length (const char* self) {
- glong result;
- g_return_val_if_fail (self != NULL, 0L);
- result = g_utf8_strlen (self, -1);
- return result;
-}
-
-
-static void _lambda14_ (GtkCellLayout* col, GtkCellRenderer* cell, GtkTreeModel* model, GtkTreeIter* iter, GUIMainWindow* self) {
- EmulationCS* cs;
- char* _tmp0_;
- GtkCellRenderer* _tmp1_;
- g_return_if_fail (col != NULL);
- g_return_if_fail (cell != NULL);
- g_return_if_fail (model != NULL);
- cs = NULL;
- gtk_tree_model_get (model, iter, 1, &cs, -1, -1);
- g_assert (cs != NULL);
- g_object_set ((_tmp1_ = cell, GTK_IS_CELL_RENDERER_TEXT (_tmp1_) ? ((GtkCellRendererText*) _tmp1_) : NULL), "text", _tmp0_ = g_strdup_printf ("%u", emulation_cs_get_length (cs)), NULL);
- _g_free0 (_tmp0_);
- _g_object_unref0 (cs);
-}
-
-
-static void __lambda14__gtk_cell_layout_data_func (GtkCellLayout* cell_layout, GtkCellRenderer* cell, GtkTreeModel* tree_model, GtkTreeIter* iter, gpointer self) {
- _lambda14_ (cell_layout, cell, tree_model, iter, self);
-}
-
-
-static void _lambda15_ (GtkAction* source, GUIMainWindow* self) {
- g_return_if_fail (source != NULL);
- gui_main_window_open_csview (self);
-}
-
-
-static void __lambda15__gtk_action_activate (GtkAction* _sender, gpointer self) {
- _lambda15_ (_sender, self);
-}
-
-
-static void _lambda16_ (GtkAction* source, GUIMainWindow* self) {
- GUICSImport* d;
- g_return_if_fail (source != NULL);
- d = g_object_ref_sink (gui_cs_import_new ());
- gtk_dialog_run ((GtkDialog*) d);
- _g_object_unref0 (d);
-}
-
-
-static void __lambda16__gtk_action_activate (GtkAction* _sender, gpointer self) {
- _lambda16_ (_sender, self);
-}
-
-
-static void _lambda17_ (GtkAction* source, GUIMainWindow* self) {
- g_return_if_fail (source != NULL);
- gui_main_window_open_csexport (self);
-}
-
-
-static void __lambda17__gtk_action_activate (GtkAction* _sender, gpointer self) {
- _lambda17_ (_sender, self);
-}
-
-
-static void _lambda18_ (GtkAction* source, GUIMainWindow* self) {
- g_return_if_fail (source != NULL);
- gui_main_window_remove_cs (self);
-}
-
-
-static void __lambda18__gtk_action_activate (GtkAction* _sender, gpointer self) {
- _lambda18_ (_sender, self);
-}
-
-
-static void _lambda19_ (GtkAction* source, GUIMainWindow* self) {
- GError * _inner_error_;
- GtkBuilder* about;
- g_return_if_fail (source != NULL);
- _inner_error_ = NULL;
- about = gtk_builder_new ();
- {
- GObject* _tmp0_;
- GtkAboutDialog* dlg;
- gtk_builder_add_from_string (about, GUI_MAIN_WINDOW_about_xml_ui, (gsize) string_get_length (GUI_MAIN_WINDOW_about_xml_ui), &_inner_error_);
- if (_inner_error_ != NULL) {
- goto __catch4_g_error;
- }
- dlg = _g_object_ref0 ((_tmp0_ = gtk_builder_get_object (about, "about_dialog"), GTK_IS_ABOUT_DIALOG (_tmp0_) ? ((GtkAboutDialog*) _tmp0_) : NULL));
- gtk_dialog_run ((GtkDialog*) dlg);
- gtk_object_destroy ((GtkObject*) dlg);
- _g_object_unref0 (dlg);
- }
- goto __finally4;
- __catch4_g_error:
- {
- GError * e;
- e = _inner_error_;
- _inner_error_ = NULL;
- {
- _g_error_free0 (e);
- }
- }
- __finally4:
- if (_inner_error_ != NULL) {
- _g_object_unref0 (about);
- 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_);
- return;
- }
- _g_object_unref0 (about);
-}
-
-
-static void __lambda19__gtk_action_activate (GtkAction* _sender, gpointer self) {
- _lambda19_ (_sender, self);
-}
-
-
-static void _lambda20_ (GtkTreePath* path, GtkTreeViewColumn* column, GUIMainWindow* self) {
- g_return_if_fail (path != NULL);
- g_return_if_fail (column != NULL);
- gui_main_window_open_csview (self);
-}
-
-
-static void __lambda20__gtk_tree_view_row_activated (GtkTreeView* _sender, GtkTreePath* path, GtkTreeViewColumn* column, gpointer self) {
- _lambda20_ (path, column, self);
-}
-
-
-static gboolean _lambda21_ (GdkEventButton* event, GUIMainWindow* self) {
- gboolean result;
- EmulationCS* cs;
- gboolean _tmp0_ = FALSE;
- gboolean _tmp1_ = FALSE;
- cs = gui_main_window_get_selected_cs (self);
- if (cs != NULL) {
- _tmp1_ = (*event).type == GDK_BUTTON_PRESS;
- } else {
- _tmp1_ = FALSE;
- }
- if (_tmp1_) {
- _tmp0_ = (*event).button == 3;
- } else {
- _tmp0_ = FALSE;
- }
- if (_tmp0_) {
- gtk_menu_popup (self->priv->edit_menu, NULL, NULL, NULL, NULL, (*event).button, (*event).time);
- }
- _g_object_unref0 (cs);
-}
-
-
-static gboolean __lambda21__gtk_widget_button_press_event (GtkWidget* _sender, GdkEventButton* event, gpointer self) {
- return _lambda21_ (event, self);
-}
-
-
-static void _lambda22_ (GtkTreeView* source, GUIMainWindow* self) {
- g_return_if_fail (source != NULL);
- gui_main_window_edit_set_sensitive (self, gtk_tree_selection_get_selected (gtk_tree_view_get_selection (self->priv->cs_list), NULL, NULL));
-}
-
-
-static void __lambda22__gtk_tree_view_cursor_changed (GtkTreeView* _sender, gpointer self) {
- _lambda22_ (_sender, self);
-}
-
-
-static void _gtk_main_quit_gtk_object_destroy (GtkObject* _sender, gpointer self) {
- gtk_main_quit ();
-}
-
-
-static GObject * gui_main_window_constructor (GType type, guint n_construct_properties, GObjectConstructParam * construct_properties) {
- GObject * obj;
- GObjectClass * parent_class;
- GUIMainWindow * self;
- GError * _inner_error_;
- parent_class = G_OBJECT_CLASS (gui_main_window_parent_class);
- obj = parent_class->constructor (type, n_construct_properties, construct_properties);
- self = GUI_MAIN_WINDOW (obj);
- _inner_error_ = NULL;
- {
- GtkBuilder* builder;
- GObject* _tmp0_;
- GtkTreeViewColumn* col;
- GObject* _tmp1_;
- GtkCellRendererText* cell;
- GtkAction* _tmp3_;
- GObject* _tmp2_;
- GtkAction* _tmp5_;
- GObject* _tmp4_;
- GtkAction* _tmp7_;
- GObject* _tmp6_;
- GObject* _tmp8_;
- GtkAction* action_importcs;
- GObject* _tmp9_;
- GtkListStore* _tmp11_;
- GObject* _tmp10_;
- GtkTreeView* _tmp13_;
- GObject* _tmp12_;
- GtkMenu* _tmp15_;
- GObject* _tmp14_;
- GObject* _tmp16_;
- builder = gtk_builder_new ();
- {
- gtk_builder_add_from_string (builder, GUI_MAIN_WINDOW_xml_ui, (gsize) string_get_length (GUI_MAIN_WINDOW_xml_ui), &_inner_error_);
- if (_inner_error_ != NULL) {
- goto __catch3_g_error;
- }
- }
- goto __finally3;
- __catch3_g_error:
- {
- GError * e;
- e = _inner_error_;
- _inner_error_ = NULL;
- {
- fprintf (stderr, "Unable to construct main window: %s.\n", e->message);
- g_assert (FALSE);
- _g_error_free0 (e);
- }
- }
- __finally3:
- if (_inner_error_ != NULL) {
- _g_object_unref0 (builder);
- 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_);
- }
- gtk_widget_set_size_request ((GtkWidget*) self, 400, 200);
- gtk_window_set_title ((GtkWindow*) self, "Radeon Simulator");
- col = _g_object_ref0 ((_tmp0_ = gtk_builder_get_object (builder, "pkts_column"), GTK_IS_TREE_VIEW_COLUMN (_tmp0_) ? ((GtkTreeViewColumn*) _tmp0_) : NULL));
- cell = _g_object_ref0 ((_tmp1_ = gtk_builder_get_object (builder, "pkts_cell"), GTK_IS_CELL_RENDERER_TEXT (_tmp1_) ? ((GtkCellRendererText*) _tmp1_) : NULL));
- gtk_cell_layout_set_cell_data_func ((GtkCellLayout*) col, (GtkCellRenderer*) cell, __lambda14__gtk_cell_layout_data_func, g_object_ref (self), g_object_unref);
- self->priv->action_viewcs = (_tmp3_ = _g_object_ref0 ((_tmp2_ = gtk_builder_get_object (builder, "ViewCS"), GTK_IS_ACTION (_tmp2_) ? ((GtkAction*) _tmp2_) : NULL)), _g_object_unref0 (self->priv->action_viewcs), _tmp3_);
- self->priv->action_exportcs = (_tmp5_ = _g_object_ref0 ((_tmp4_ = gtk_builder_get_object (builder, "ExportCS"), GTK_IS_ACTION (_tmp4_) ? ((GtkAction*) _tmp4_) : NULL)), _g_object_unref0 (self->priv->action_exportcs), _tmp5_);
- self->priv->action_removecs = (_tmp7_ = _g_object_ref0 ((_tmp6_ = gtk_builder_get_object (builder, "RemoveCS"), GTK_IS_ACTION (_tmp6_) ? ((GtkAction*) _tmp6_) : NULL)), _g_object_unref0 (self->priv->action_removecs), _tmp7_);
- action_importcs = _g_object_ref0 ((_tmp8_ = gtk_builder_get_object (builder, "ImportCS"), GTK_IS_ACTION (_tmp8_) ? ((GtkAction*) _tmp8_) : NULL));
- g_signal_connect_object (self->priv->action_viewcs, "activate", (GCallback) __lambda15__gtk_action_activate, self, 0);
- g_signal_connect_object (action_importcs, "activate", (GCallback) __lambda16__gtk_action_activate, self, 0);
- g_signal_connect_object (self->priv->action_exportcs, "activate", (GCallback) __lambda17__gtk_action_activate, self, 0);
- g_signal_connect_object (self->priv->action_removecs, "activate", (GCallback) __lambda18__gtk_action_activate, self, 0);
- g_signal_connect_object ((_tmp9_ = gtk_builder_get_object (builder, "About"), GTK_IS_ACTION (_tmp9_) ? ((GtkAction*) _tmp9_) : NULL), "activate", (GCallback) __lambda19__gtk_action_activate, self, 0);
- self->priv->cs_store = (_tmp11_ = _g_object_ref0 ((_tmp10_ = gtk_builder_get_object (builder, "cs_store"), GTK_IS_LIST_STORE (_tmp10_) ? ((GtkListStore*) _tmp10_) : NULL)), _g_object_unref0 (self->priv->cs_store), _tmp11_);
- self->priv->cs_list = (_tmp13_ = _g_object_ref0 ((_tmp12_ = gtk_builder_get_object (builder, "cs_list"), GTK_IS_TREE_VIEW (_tmp12_) ? ((GtkTreeView*) _tmp12_) : NULL)), _g_object_unref0 (self->priv->cs_list), _tmp13_);
- self->priv->edit_menu = (_tmp15_ = _g_object_ref0 ((_tmp14_ = gtk_builder_get_object (builder, "popup1"), GTK_IS_MENU (_tmp14_) ? ((GtkMenu*) _tmp14_) : NULL)), _g_object_unref0 (self->priv->edit_menu), _tmp15_);
- g_signal_connect_object (self->priv->cs_list, "row-activated", (GCallback) __lambda20__gtk_tree_view_row_activated, self, 0);
- g_signal_connect_object ((GtkWidget*) self->priv->cs_list, "button-press-event", (GCallback) __lambda21__gtk_widget_button_press_event, self, 0);
- g_signal_connect_object (self->priv->cs_list, "cursor-changed", (GCallback) __lambda22__gtk_tree_view_cursor_changed, self, 0);
- gui_main_window_edit_set_sensitive (self, FALSE);
- gtk_container_add ((GtkContainer*) self, (_tmp16_ = gtk_builder_get_object (builder, "mainbox"), GTK_IS_WIDGET (_tmp16_) ? ((GtkWidget*) _tmp16_) : NULL));
- 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_);
- if (_inner_error_ != NULL) {
- goto __catch5_g_error;
- }
- }
- goto __finally5;
- __catch5_g_error:
- {
- GError * e;
- e = _inner_error_;
- _inner_error_ = NULL;
- {
- _g_error_free0 (e);
- }
- }
- __finally5:
- if (_inner_error_ != NULL) {
- _g_object_unref0 (builder);
- _g_object_unref0 (col);
- _g_object_unref0 (cell);
- _g_object_unref0 (action_importcs);
- 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_);
- }
- _g_object_unref0 (builder);
- _g_object_unref0 (col);
- _g_object_unref0 (cell);
- _g_object_unref0 (action_importcs);
- }
- return obj;
+void emulation_spec_entry_copy (const EmulationSpecEntry* self, EmulationSpecEntry* dest) {
+ dest->spec = _g_object_ref0 (self->spec);
+ dest->name = g_strdup (self->name);
}
-static void gui_main_window_class_init (GUIMainWindowClass * klass) {
- gui_main_window_parent_class = g_type_class_peek_parent (klass);
- g_type_class_add_private (klass, sizeof (GUIMainWindowPrivate));
- G_OBJECT_CLASS (klass)->constructor = gui_main_window_constructor;
- G_OBJECT_CLASS (klass)->finalize = gui_main_window_finalize;
+void emulation_spec_entry_destroy (EmulationSpecEntry* self) {
+ _g_object_unref0 (self->spec);
+ _g_free0 (self->name);
}
-static void gui_main_window_instance_init (GUIMainWindow * self) {
- self->priv = GUI_MAIN_WINDOW_GET_PRIVATE (self);
+EmulationSpecEntry* emulation_spec_entry_dup (const EmulationSpecEntry* self) {
+ EmulationSpecEntry* dup;
+ dup = g_new0 (EmulationSpecEntry, 1);
+ emulation_spec_entry_copy (self, dup);
+ return dup;
}
-static void gui_main_window_finalize (GObject* obj) {
- GUIMainWindow * self;
- self = GUI_MAIN_WINDOW (obj);
- _g_object_unref0 (self->priv->cs_store);
- _g_object_unref0 (self->priv->cs_list);
- _g_object_unref0 (self->priv->edit_menu);
- _g_object_unref0 (self->priv->action_viewcs);
- _g_object_unref0 (self->priv->action_exportcs);
- _g_object_unref0 (self->priv->action_removecs);
- G_OBJECT_CLASS (gui_main_window_parent_class)->finalize (obj);
+void emulation_spec_entry_free (EmulationSpecEntry* self) {
+ emulation_spec_entry_destroy (self);
+ g_free (self);
}
-GType gui_main_window_get_type (void) {
- static GType gui_main_window_type_id = 0;
- if (gui_main_window_type_id == 0) {
- static const GTypeInfo g_define_type_info = { sizeof (GUIMainWindowClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gui_main_window_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GUIMainWindow), 0, (GInstanceInitFunc) gui_main_window_instance_init, NULL };
- gui_main_window_type_id = g_type_register_static (GTK_TYPE_WINDOW, "GUIMainWindow", &g_define_type_info, 0);
+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 gui_main_window_type_id;
+ return emulation_spec_entry_type_id;
}
@@ -645,74 +135,34 @@ static void _vala_EmulationSpecEntry_array_free (EmulationSpecEntry* array, gint
}
-void gui_init (char*** args, int* args_length1) {
+gint _main (char** args, int args_length1) {
+ gint result;
EmulationSpecEntry* _tmp0_;
EmulationSpec* _tmp1_;
char* _tmp2_;
EmulationSpec* _tmp3_;
char* _tmp4_;
- GUIMainWindow* _tmp5_;
- gtk_init (args_length1, args);
+ ProjectWindow* main;
+ gtk_init (&args_length1, &args);
emulation_specs = (_tmp0_ = g_new0 (EmulationSpecEntry, 2), emulation_specs = (_vala_EmulationSpecEntry_array_free (emulation_specs, emulation_specs_length1), NULL), emulation_specs_length1 = 2, _tmp0_);
emulation_specs[0].spec = (_tmp1_ = emulation_spec_new ("/usr/share/rsim/r300reg.xml", "r300"), _g_object_unref0 (emulation_specs[0].spec), _tmp1_);
emulation_specs[0].name = (_tmp2_ = g_strdup ("r300"), _g_free0 (emulation_specs[0].name), _tmp2_);
emulation_specs[1].spec = (_tmp3_ = emulation_spec_new ("/usr/share/rsim/r300reg.xml", "r500"), _g_object_unref0 (emulation_specs[1].spec), _tmp3_);
emulation_specs[1].name = (_tmp4_ = g_strdup ("r500"), _g_free0 (emulation_specs[1].name), _tmp4_);
- gui_main = (_tmp5_ = g_object_ref_sink (gui_main_window_new ()), _g_object_unref0 (gui_main), _tmp5_);
- gtk_widget_show_all ((GtkWidget*) gui_main);
+ main = g_object_ref_sink (project_window_new ());
+ gtk_widget_show_all ((GtkWidget*) main);
gtk_main ();
-}
-
-
-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;
-}
-
-
-gint _main (char** args, int args_length1) {
- gint result;
- gui_init (&args, &args_length1);
{
guint i;
i = (guint) 0;
{
- gboolean _tmp0_;
- _tmp0_ = TRUE;
+ gboolean _tmp5_;
+ _tmp5_ = TRUE;
while (TRUE) {
- if (!_tmp0_) {
+ if (!_tmp5_) {
i++;
}
- _tmp0_ = FALSE;
+ _tmp5_ = FALSE;
if (!(i < emulation_specs_length1)) {
break;
}
@@ -720,8 +170,8 @@ gint _main (char** args, int args_length1) {
}
}
}
- g_object_unref ((GObject*) gui_main);
result = 0;
+ _g_object_unref0 (main);
return result;
}
diff --git a/src/main.vala b/src/main.vala
index 5c621b3..3329726 100644
--- a/src/main.vala
+++ b/src/main.vala
@@ -21,443 +21,6 @@
* USE OR OTHER DEALINGS IN THE SOFTWARE. */
using Emulation;
-using Gtk;
-
-namespace GUI
-{
- public class MainWindow : Window
- {
- private static const string xml_ui = """
- <?xml version="1.0"?>
- <interface>
- <requires lib="gtk+" version="2.16"/>
- <!-- interface-naming-policy project-wide -->
- <object class="GtkUIManager" id="uimanager1">
- <child>
- <object class="GtkActionGroup" id="actiongroup1">
- <child>
- <object class="GtkAction" id="New">
- <property name="name">New</property>
- <property name="stock_id">gtk-new</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="Open">
- <property name="name">Open</property>
- <property name="stock_id">gtk-open</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="Save">
- <property name="name">Save</property>
- <property name="stock_id">gtk-save</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="SaveAs">
- <property name="name">SaveAs</property>
- <property name="stock_id">gtk-save-as</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="Quit">
- <property name="name">Quit</property>
- <property name="stock_id">gtk-quit</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="ViewCS">
- <property name="name">ViewCS</property>
- <property name="label">_View CS</property>
- <property name="tooltip">View the selected command stream.</property>
- <property name="icon_name">gtk-open</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="RemoveCS">
- <property name="name">RemoveCS</property>
- <property name="label">_Remove CS</property>
- <property name="tooltip">Remove the selected command stream from the current project.</property>
- <property name="icon_name">gtk-delete</property>
- </object>
- <accelerator key="Delete"/>
- </child>
- <child>
- <object class="GtkAction" id="ImportCS">
- <property name="name">ImportCS</property>
- <property name="label">_Import CS</property>
- <property name="tooltip">Import a new command stream to the current project.</property>
- <property name="icon_name">gtk-add</property>
- </object>
- <accelerator key="i" modifiers="GDK_CONTROL_MASK"/>
- </child>
- <child>
- <object class="GtkAction" id="ExportCS">
- <property name="name">ExportCS</property>
- <property name="label">_Export CS</property>
- <property name="tooltip">Export the selected command stream to a file.</property>
- <property name="icon_name">gtk-convert</property>
- </object>
- <accelerator key="e" modifiers="GDK_CONTROL_MASK"/>
- </child>
- <child>
- <object class="GtkAction" id="About">
- <property name="name">About</property>
- <property name="stock_id">gtk-about</property>
- </object>
- <accelerator key="F1"/>
- </child>
- <child>
- <object class="GtkAction" id="FileMenu">
- <property name="name">FileMenu</property>
- <property name="label" translatable="yes">_File</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="EditMenu">
- <property name="name">EditMenu</property>
- <property name="label" translatable="yes">_Edit</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="HelpMenu">
- <property name="name">HelpMenu</property>
- <property name="label" translatable="yes">_Help</property>
- </object>
- </child>
- </object>
- </child>
- <ui>
- <menubar name="menubar1">
- <menu action="FileMenu" name="FileMenu">
- <menuitem action="New" name="New"/>
- <menuitem action="Open" name="Open"/>
- <menuitem action="Save" name="Save"/>
- <menuitem action="SaveAs" name="SaveAs"/>
- <separator/>
- <menuitem action="Quit" name="Quit"/>
- </menu>
- <menu action="EditMenu" name="EditMenu">
- <menuitem action="ViewCS" name="ViewCS"/>
- <menuitem action="ImportCS" name="ImportCS"/>
- <menuitem action="ExportCS" name="ExportCS"/>
- <separator/>
- <menuitem action="RemoveCS" name="RemoveCS"/>
- </menu>
- <menu action="HelpMenu" name="HelpMenu">
- <menuitem action="About" name="About"/>
- </menu>
- </menubar>
- <toolbar name="toolbar1">
- <toolitem action="New" name="New"/>
- <toolitem action="Open" name="Open"/>
- <toolitem action="Save" name="Save"/>
- <separator/>
- <toolitem action="ImportCS" name="ImportCS"/>
- <toolitem action="ExportCS" name="ExportCS"/>
- <separator/>
- <toolitem action="RemoveCS" name="RemoveCS"/>
- </toolbar>
- <popup name="popup1">
- <menuitem action="ViewCS" name="ViewCS"/>
- <menuitem action="ExportCS" name="ExportCS"/>
- <separator/>
- <menuitem action="RemoveCS" name="RemoveCS"/>
- </popup>
- </ui>
- </object>
- <object class="GtkVBox" id="mainbox">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <child>
- <object constructor="uimanager1" class="GtkMenuBar" id="menubar1">
- <property name="visible">True</property>
- <child internal-child="accessible">
- <object class="AtkObject" id="a11y-menubar">
- <property name="AtkObject::accessible-name">The menubar</property>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- </packing>
- </child>
- <child>
- <object constructor="uimanager1" class="GtkToolbar" id="toolbar1">
- <property name="visible">True</property>
- <child internal-child="accessible">
- <object class="AtkObject" id="a11y-toolbar">
- <property name="AtkObject::accessible-name">The toolbar</property>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkScrolledWindow" id="scrolledwindow1">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">automatic</property>
- <property name="vscrollbar_policy">automatic</property>
- <child>
- <object class="GtkTreeView" id="cs_list">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="reorderable">True</property>
- <property name="model">cs_store</property>
- <child>
- <object class="GtkTreeViewColumn" id="pkts_column">
- <property name="title">Packets</property>
- <child>
- <object class="GtkCellRendererText" id="pkts_cell"/>
- </child>
- </object>
- </child>
- <child>
- <object class="GtkTreeViewColumn" id="treeviewcolumn1">
- <property name="title">Name</property>
- <child>
- <object class="GtkCellRendererText" id="cellrenderertext1"/>
- <attributes>
- <attribute name="text">0</attribute>
- </attributes>
- </child>
- </object>
- </child>
- </object>
- </child>
- </object>
- <packing>
- <property name="position">2</property>
- </packing>
- </child>
- </object>
- <object class="GtkListStore" id="cs_store">
- <columns>
- <!-- column-name Name -->
- <column type="gchararray"/>
- <!-- column-name CS -->
- <column type="GObject"/>
- </columns>
- </object>
- <object constructor="uimanager1" class="GtkMenu" id="popup1">
- <child internal-child="accessible">
- <object class="AtkObject" id="a11y-popup">
- <property name="AtkObject::accessible-name">The popup menu</property>
- </object>
- </child>
- </object>
- </interface>
- """;
-
- private static const string about_xml_ui = """
- <?xml version="1.0"?>
- <interface>
- <requires lib="gtk+" version="2.16"/>
- <!-- interface-naming-policy project-wide -->
- <object class="GtkAboutDialog" id="about_dialog">
- <property name="border_width">5</property>
- <property name="type_hint">normal</property>
- <property name="skip_taskbar_hint">True</property>
- <property name="has_separator">False</property>
- <property name="program_name">Radeon Simulator</property>
- <property name="copyright" translatable="yes">Copyright &#xA9; 2010 Joakim Sindholt</property>
- <property name="comments" translatable="yes">A simulator for Radeon GPUs</property>
- <property name="website">http://cgit.freedesktop.org/~jsindholt/rsim</property>
- <property name="license" translatable="yes">This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.</property>
- <property name="authors">Joakim Sindholt &lt;opensource@zhasha.com&gt;</property>
- <property name="logo">/usr/share/pixmaps/rsim.png</property>
- <property name="wrap_license">True</property>
- <child internal-child="vbox">
- <object class="GtkVBox" id="dialog-vbox1">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">2</property>
- <child internal-child="action_area">
- <object class="GtkHButtonBox" id="dialog-action_area1">
- <property name="visible">True</property>
- <property name="layout_style">end</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="pack_type">end</property>
- <property name="position">0</property>
- </packing>
- </child>
- </object>
- </child>
- </object>
- </interface>
- """;
-
- private ListStore cs_store;
- private TreeView cs_list;
- private Menu edit_menu;
-
- private Action action_viewcs;
- private Action action_exportcs;
- private Action action_removecs;
-
- construct {
- var builder = new Builder();
- try {
- builder.add_from_string(xml_ui, xml_ui.length);
- } catch (Error e) {
- stderr.printf("Unable to construct main window: %s.\n", e.message);
- assert(false);
- }
- set_size_request(400, 200);
- title = "Radeon Simulator";
-
- /* Packets column */
- var col = builder.get_object("pkts_column") as TreeViewColumn;
- var cell = builder.get_object("pkts_cell") as CellRendererText;
- col.set_cell_data_func(cell, (col, cell, model, iter) => {
- CS cs;
- model.get(iter, 1, out cs, -1);
- assert(cs != null);
- (cell as CellRendererText).text = cs.length.to_string();
- });
-
- /* connect actions */
- action_viewcs = builder.get_object("ViewCS") as Action;
- action_exportcs = builder.get_object("ExportCS") as Action;
- action_removecs = builder.get_object("RemoveCS") as Action;
- var action_importcs = builder.get_object("ImportCS") as Action;
-
- action_viewcs.activate.connect((source) => { open_csview(); });
- action_importcs.activate.connect((source) => { var d = new CSImport(); d.run(); });
- action_exportcs.activate.connect((source) => { open_csexport(); });
- action_removecs.activate.connect((source) => { remove_cs(); });
-
- /* about dialog is kind of a special case. */
- (builder.get_object("About") as Action).activate.connect((source) => {
- var about = new Builder();
- try {
- about.add_from_string(about_xml_ui, about_xml_ui.length);
- var dlg = about.get_object("about_dialog") as AboutDialog;
- dlg.run();
- dlg.destroy();
- } catch (Error e) { }
- });
-
- /* menus */
- cs_store = builder.get_object("cs_store") as ListStore;
- cs_list = builder.get_object("cs_list") as TreeView;
- edit_menu = builder.get_object("popup1") as Menu;
- /* double clicking a row */
- cs_list.row_activated.connect((path, column) => { open_csview(); });
- /* right clicking */
- cs_list.button_press_event.connect((event) => {
- CS? cs = get_selected_cs();
- if (cs != null && event.type == Gdk.EventType.BUTTON_PRESS && event.button == 3) {
- edit_menu.popup(null, null, null, event.button, event.time);
- }
- });
- /* selecting something */
- cs_list.cursor_changed.connect((source) => {
- edit_set_sensitive(cs_list.get_selection().get_selected(null, null));
- });
- edit_set_sensitive(false);
-
- add(builder.get_object("mainbox") as Widget);
- destroy.connect(main_quit);
-
- try {
- /* XXX This shouldn't be hardcoded */
- set_icon_from_file("/usr/share/pixmaps/rsim.png");
- } catch (Error e) { /* don't care */ }
- }
-
- private void edit_set_sensitive(bool setting)
- {
- action_viewcs.sensitive = setting;
- action_exportcs.sensitive = setting;
- action_removecs.sensitive = setting;
- }
-
- private CS? get_selected_cs()
- {
- TreeIter iter;
- CS cs;
-
- var selection = cs_list.get_selection();
- if (!selection.get_selected(null, out iter)) { return null; }
-
- cs_store.get(iter, 1, out cs, -1);
- return cs;
- }
-
- public void add_cs(string name, CS cs)
- {
- TreeIter iter;
- cs_store.append(out iter);
- cs_store.set(iter, 0, name, 1, cs, -1);
- }
-
- public void remove_cs()
- {
- TreeIter iter;
- string name;
-
- var selection = cs_list.get_selection();
- if (!selection.get_selected(null, out iter)) { return; }
- cs_store.get(iter, 0, out name, -1);
-
- var d = new MessageDialog(this, DialogFlags.DESTROY_WITH_PARENT,
- MessageType.QUESTION, ButtonsType.YES_NO,
- "Are you sure you want to delete the command stream '%s'", name);
- int result = d.run();
- d.destroy();
- if (result != ResponseType.YES) { return; }
-
- cs_store.remove(iter);
- }
-
- private void open_csview()
- {
- CS? cs = get_selected_cs();
- if (cs != null) {
- var csv = new CSView(cs);
- csv.show_all();
- }
- }
-
- private void open_csexport()
- {
- CS? cs = get_selected_cs();
- if (cs != null) {
- var d = new CSExport(cs);
- d.run();
- }
- }
- }
-
- public static MainWindow main;
-
- static void init(ref weak string[] args)
- {
- Gtk.init(ref args);
-
- specs = new SpecEntry[2];
- specs[0].spec = new Spec("/usr/share/rsim/r300reg.xml", "r300");
- specs[0].name = "r300";
- specs[1].spec = new Spec("/usr/share/rsim/r300reg.xml", "r500");
- specs[1].name = "r500";
-
- main = new MainWindow();
- main.show_all();
-
- Gtk.main();
- }
-}
namespace Emulation
{
@@ -473,13 +36,24 @@ namespace Emulation
public static int main(string[] args)
{
- GUI.init(ref args);
+ Gtk.init(ref args);
+
+ /* XXX these paths shouldn't be hardcoded */
+ specs = new SpecEntry[2];
+ specs[0].spec = new Spec("/usr/share/rsim/r300reg.xml", "r300");
+ specs[0].name = "r300";
+ specs[1].spec = new Spec("/usr/share/rsim/r300reg.xml", "r500");
+ specs[1].name = "r500";
+
+ var main = new Project.Window();
+ main.show_all();
+
+ Gtk.main();
/* vala doesn't unref globals */
for (uint i = 0; i < specs.length; i++) {
specs[i].spec.unref();
}
- GUI.main.unref();
return 0;
}
diff --git a/src/project.c b/src/project.c
new file mode 100644
index 0000000..1536c50
--- /dev/null
+++ b/src/project.c
@@ -0,0 +1,1181 @@
+/* project.c generated by valac, the Vala compiler
+ * generated from project.vala, do not modify */
+
+
+#include <glib.h>
+#include <glib-object.h>
+#include <stdlib.h>
+#include <string.h>
+#include <gtk/gtk.h>
+#include <stdio.h>
+#include <gdk/gdk.h>
+#include <gobject/gvaluecollector.h>
+
+
+#define PROJECT_TYPE_MANAGER (project_manager_get_type ())
+#define PROJECT_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PROJECT_TYPE_MANAGER, ProjectManager))
+#define PROJECT_IS_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PROJECT_TYPE_MANAGER))
+#define PROJECT_MANAGER_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), PROJECT_TYPE_MANAGER, ProjectManagerIface))
+
+typedef struct _ProjectManager ProjectManager;
+typedef struct _ProjectManagerIface ProjectManagerIface;
+
+#define PROJECT_MANAGER_TYPE_ITERATOR (project_manager_iterator_get_type ())
+#define PROJECT_MANAGER_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PROJECT_MANAGER_TYPE_ITERATOR, ProjectManagerIterator))
+#define PROJECT_MANAGER_ITERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PROJECT_MANAGER_TYPE_ITERATOR, ProjectManagerIteratorClass))
+#define PROJECT_MANAGER_IS_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PROJECT_MANAGER_TYPE_ITERATOR))
+#define PROJECT_MANAGER_IS_ITERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PROJECT_MANAGER_TYPE_ITERATOR))
+#define PROJECT_MANAGER_ITERATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PROJECT_MANAGER_TYPE_ITERATOR, ProjectManagerIteratorClass))
+
+typedef struct _ProjectManagerIterator ProjectManagerIterator;
+typedef struct _ProjectManagerIteratorClass ProjectManagerIteratorClass;
+
+#define PROJECT_MANAGER_TYPE_CS_ENTRY (project_manager_cs_entry_get_type ())
+
+#define EMULATION_TYPE_CS (emulation_cs_get_type ())
+#define EMULATION_CS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EMULATION_TYPE_CS, EmulationCS))
+#define EMULATION_CS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EMULATION_TYPE_CS, EmulationCSClass))
+#define EMULATION_IS_CS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EMULATION_TYPE_CS))
+#define EMULATION_IS_CS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EMULATION_TYPE_CS))
+#define EMULATION_CS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EMULATION_TYPE_CS, EmulationCSClass))
+
+typedef struct _EmulationCS EmulationCS;
+typedef struct _EmulationCSClass EmulationCSClass;
+typedef struct _ProjectManagerCSEntry ProjectManagerCSEntry;
+typedef struct _ProjectManagerIteratorPrivate ProjectManagerIteratorPrivate;
+typedef struct _ProjectManagerParamSpecIterator ProjectManagerParamSpecIterator;
+#define _g_free0(var) (var = (g_free (var), NULL))
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+
+#define PROJECT_TYPE_WINDOW (project_window_get_type ())
+#define PROJECT_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PROJECT_TYPE_WINDOW, ProjectWindow))
+#define PROJECT_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PROJECT_TYPE_WINDOW, ProjectWindowClass))
+#define PROJECT_IS_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PROJECT_TYPE_WINDOW))
+#define PROJECT_IS_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PROJECT_TYPE_WINDOW))
+#define PROJECT_WINDOW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PROJECT_TYPE_WINDOW, ProjectWindowClass))
+
+typedef struct _ProjectWindow ProjectWindow;
+typedef struct _ProjectWindowClass ProjectWindowClass;
+typedef struct _ProjectWindowPrivate ProjectWindowPrivate;
+
+#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))
+#define GUI_IS_CS_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GUI_TYPE_CS_VIEW))
+#define GUI_IS_CS_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GUI_TYPE_CS_VIEW))
+#define GUI_CS_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GUI_TYPE_CS_VIEW, GUICSViewClass))
+
+typedef struct _GUICSView GUICSView;
+typedef struct _GUICSViewClass GUICSViewClass;
+
+#define GUI_TYPE_CS_EXPORT (gui_cs_export_get_type ())
+#define GUI_CS_EXPORT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GUI_TYPE_CS_EXPORT, GUICSExport))
+#define GUI_CS_EXPORT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GUI_TYPE_CS_EXPORT, GUICSExportClass))
+#define GUI_IS_CS_EXPORT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GUI_TYPE_CS_EXPORT))
+#define GUI_IS_CS_EXPORT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GUI_TYPE_CS_EXPORT))
+#define GUI_CS_EXPORT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GUI_TYPE_CS_EXPORT, GUICSExportClass))
+
+typedef struct _GUICSExport GUICSExport;
+typedef struct _GUICSExportClass GUICSExportClass;
+
+#define PROJECT_WINDOW_TYPE_ITERATOR (project_window_iterator_get_type ())
+#define PROJECT_WINDOW_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PROJECT_WINDOW_TYPE_ITERATOR, ProjectWindowIterator))
+#define PROJECT_WINDOW_ITERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PROJECT_WINDOW_TYPE_ITERATOR, ProjectWindowIteratorClass))
+#define PROJECT_WINDOW_IS_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PROJECT_WINDOW_TYPE_ITERATOR))
+#define PROJECT_WINDOW_IS_ITERATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PROJECT_WINDOW_TYPE_ITERATOR))
+#define PROJECT_WINDOW_ITERATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PROJECT_WINDOW_TYPE_ITERATOR, ProjectWindowIteratorClass))
+
+typedef struct _ProjectWindowIterator ProjectWindowIterator;
+typedef struct _ProjectWindowIteratorClass ProjectWindowIteratorClass;
+#define _project_manager_iterator_unref0(var) ((var == NULL) ? NULL : (var = (project_manager_iterator_unref (var), NULL)))
+#define _gtk_tree_path_free0(var) ((var == NULL) ? NULL : (var = (gtk_tree_path_free (var), NULL)))
+typedef struct _ProjectWindowIteratorPrivate ProjectWindowIteratorPrivate;
+#define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
+
+#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))
+#define GUI_IS_CS_IMPORT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GUI_TYPE_CS_IMPORT))
+#define GUI_IS_CS_IMPORT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GUI_TYPE_CS_IMPORT))
+#define GUI_CS_IMPORT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GUI_TYPE_CS_IMPORT, GUICSImportClass))
+
+typedef struct _GUICSImport GUICSImport;
+typedef struct _GUICSImportClass GUICSImportClass;
+
+struct _ProjectManagerCSEntry {
+ char* name;
+ EmulationCS* cs;
+};
+
+struct _ProjectManagerIface {
+ GTypeInterface parent_iface;
+ ProjectManagerIterator* (*iterator) (ProjectManager* self);
+ void (*get) (ProjectManager* self, guint index, ProjectManagerCSEntry* result);
+ ProjectManagerIterator* (*add_cs) (ProjectManager* self, const char* name, EmulationCS* cs);
+ void (*remove_cs) (ProjectManager* self, ProjectManagerIterator* iter);
+ void (*clear) (ProjectManager* self);
+ guint (*get_length) (ProjectManager* self);
+};
+
+struct _ProjectManagerIterator {
+ GTypeInstance parent_instance;
+ volatile int ref_count;
+ ProjectManagerIteratorPrivate * priv;
+};
+
+struct _ProjectManagerIteratorClass {
+ GTypeClass parent_class;
+ void (*finalize) (ProjectManagerIterator *self);
+ gboolean (*next) (ProjectManagerIterator* self);
+ void (*get) (ProjectManagerIterator* self, ProjectManagerCSEntry* result);
+};
+
+struct _ProjectManagerParamSpecIterator {
+ GParamSpec parent_instance;
+};
+
+struct _ProjectWindow {
+ GtkWindow parent_instance;
+ ProjectWindowPrivate * priv;
+};
+
+struct _ProjectWindowClass {
+ GtkWindowClass parent_class;
+};
+
+struct _ProjectWindowPrivate {
+ GtkListStore* cs_store;
+ GtkTreeView* cs_list;
+ GtkMenu* edit_menu;
+ GtkAction* action_viewcs;
+ GtkAction* action_exportcs;
+ GtkAction* action_removecs;
+};
+
+struct _ProjectWindowIterator {
+ ProjectManagerIterator parent_instance;
+ ProjectWindowIteratorPrivate * priv;
+ GtkTreeIter iter;
+};
+
+struct _ProjectWindowIteratorClass {
+ ProjectManagerIteratorClass parent_class;
+};
+
+struct _ProjectWindowIteratorPrivate {
+ GtkListStore* model;
+ gboolean first;
+ gboolean valid;
+};
+
+
+static gpointer project_manager_iterator_parent_class = NULL;
+static gpointer project_window_iterator_parent_class = NULL;
+static gpointer project_window_parent_class = NULL;
+static ProjectManagerIface* project_window_project_manager_parent_iface = NULL;
+
+gpointer project_manager_iterator_ref (gpointer instance);
+void project_manager_iterator_unref (gpointer instance);
+GParamSpec* project_manager_param_spec_iterator (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void project_manager_value_set_iterator (GValue* value, gpointer v_object);
+gpointer project_manager_value_get_iterator (const GValue* value);
+GType project_manager_iterator_get_type (void);
+GType project_manager_cs_entry_get_type (void);
+GType emulation_cs_get_type (void);
+ProjectManagerCSEntry* project_manager_cs_entry_dup (const ProjectManagerCSEntry* self);
+void project_manager_cs_entry_free (ProjectManagerCSEntry* self);
+void project_manager_cs_entry_copy (const ProjectManagerCSEntry* self, ProjectManagerCSEntry* dest);
+void project_manager_cs_entry_destroy (ProjectManagerCSEntry* self);
+GType project_manager_get_type (void);
+ProjectManagerIterator* project_manager_iterator (ProjectManager* self);
+void project_manager_get (ProjectManager* self, guint index, ProjectManagerCSEntry* result);
+ProjectManagerIterator* project_manager_add_cs (ProjectManager* self, const char* name, EmulationCS* cs);
+void project_manager_remove_cs (ProjectManager* self, ProjectManagerIterator* iter);
+void project_manager_clear (ProjectManager* self);
+gboolean project_manager_save (ProjectManager* self, const char* filename);
+gboolean project_manager_load (ProjectManager* self, const char* filename);
+guint project_manager_get_length (ProjectManager* self);
+enum {
+ PROJECT_MANAGER_ITERATOR_DUMMY_PROPERTY
+};
+gboolean project_manager_iterator_next (ProjectManagerIterator* self);
+static gboolean project_manager_iterator_real_next (ProjectManagerIterator* self);
+void project_manager_iterator_get (ProjectManagerIterator* self, ProjectManagerCSEntry* result);
+static void project_manager_iterator_real_get (ProjectManagerIterator* self, ProjectManagerCSEntry* result);
+ProjectManagerIterator* project_manager_iterator_construct (GType object_type);
+static void project_manager_iterator_finalize (ProjectManagerIterator* obj);
+void project_manager_cs_entry_init (ProjectManagerCSEntry *self, const char* name, EmulationCS* cs);
+GType project_window_get_type (void);
+#define PROJECT_WINDOW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), PROJECT_TYPE_WINDOW, ProjectWindowPrivate))
+enum {
+ PROJECT_WINDOW_DUMMY_PROPERTY,
+ PROJECT_WINDOW_LENGTH
+};
+#define PROJECT_WINDOW_xml_ui "\n <?xml version=\"1.0\"?>\n <interface>\n <requires lib=\"gtk+\" version=\"2.16\"/>\n <!-- interface-naming-policy project-wide -->\n <object class=\"GtkUIManager\" id=\"uimanager1\">\n <child>\n <object class=\"GtkActionGroup\" id=\"actiongroup1\">\n <child>\n <object class=\"GtkAction\" id=\"New\">\n <property name=\"name\">New</property>\n <property name=\"stock_id\">gtk-new</property>\n </object>\n </child>\n <child>\n <object class=\"GtkAction\" id=\"Open\">\n <property name=\"name\">Open</property>\n <property name=\"stock_id\">gtk-open</property>\n </object>\n </child>\n <child>\n <object class=\"GtkAction\" id=\"Save\">\n <property name=\"name\">Save</property>\n <property name=\"stock_id\">gtk-save</property>\n </object>\n </child>\n <child>\n <object class=\"GtkAction\" id=\"SaveAs\">\n <property name=\"name\">SaveAs</property>\n <property name=\"stock_id\">gtk-save-as</property>\n </object>\n </child>\n <child>\n <object class=\"GtkAction\" id=\"Quit\">\n <property name=\"name\">Quit</property>\n <property name=\"stock_id\">gtk-quit</property>\n </object>\n </child>\n <child>\n <object class=\"GtkAction\" id=\"ViewCS\">\n <property name=\"name\">ViewCS</property>\n <property name=\"label\">_View CS</property>\n <property name=\"tooltip\">View the selected command stream.</property>\n <property name=\"icon_name\">gtk-open</property>\n </object>\n </child>\n <child>\n <object class=\"GtkAction\" id=\"RemoveCS\">\n <property name=\"name\">RemoveCS</property>\n <property name=\"label\">_Remove CS</property>\n <property name=\"tooltip\">Remove the selected command stream from the current project.</property>\n <property name=\"icon_name\">gtk-delete</property>\n </object>\n <accelerator key=\"Delete\"/>\n </child>\n <child>\n <object class=\"GtkAction\" id=\"ImportCS\">\n <property name=\"name\">ImportCS</property>\n <property name=\"label\">_Import CS</property>\n <property name=\"tooltip\">Import a new command stream to the current project.</property>\n <property name=\"icon_name\">gtk-add</property>\n </object>\n <accelerator key=\"i\" modifiers=\"GDK_CONTROL_MASK\"/>\n </child>\n <child>\n <object class=\"GtkAction\" id=\"ExportCS\">\n <property name=\"name\">ExportCS</property>\n <property name=\"label\">_Export CS</property>\n <property name=\"tooltip\">Export the selected command stream to a file.</property>\n <property name=\"icon_name\">gtk-convert</property>\n </object>\n <accelerator key=\"e\" modifiers=\"GDK_CONTROL_MASK\"/>\n </child>\n <child>\n <object class=\"GtkAction\" id=\"About\">\n <property name=\"name\">About</property>\n <property name=\"stock_id\">gtk-about</property>\n </object>\n <accelerator key=\"F1\"/>\n </child>\n <child>\n <object class=\"GtkAction\" id=\"FileMenu\">\n <property name=\"name\">FileMenu</property>\n <property name=\"label\" translatable=\"yes\">_File</property>\n </object>\n </child>\n <child>\n <object class=\"GtkAction\" id=\"EditMenu\">\n <property name=\"name\">EditMenu</property>\n <property name=\"label\" translatable=\"yes\">_Edit</property>\n </object>\n </child>\n <child>\n <object class=\"GtkAction\" id=\"HelpMenu\">\n <property name=\"name\">HelpMenu</property>\n <property name=\"label\" translatable=\"yes\">_Help</property>\n </object>\n </child>\n </object>\n </child>\n <ui>\n <menubar name=\"menubar1\">\n <menu action=\"FileMenu\" name=\"FileMenu\">\n <menuitem action=\"New\" name=\"New\"/>\n <menuitem action=\"Open\" name=\"Open\"/>\n <menuitem action=\"Save\" name=\"Save\"/>\n <menuitem action=\"SaveAs\" name=\"SaveAs\"/>\n <separator/>\n <menuitem action=\"Quit\" name=\"Quit\"/>\n </menu>\n <menu action=\"EditMenu\" name=\"EditMenu\">\n <menuitem action=\"ViewCS\" name=\"ViewCS\"/>\n <menuitem action=\"ImportCS\" name=\"ImportCS\"/>\n <menuitem action=\"ExportCS\" name=\"ExportCS\"/>\n <separator/>\n <menuitem action=\"RemoveCS\" name=\"RemoveCS\"/>\n </menu>\n <menu action=\"HelpMenu\" name=\"HelpMenu\">\n <menuitem action=\"About\" name=\"About\"/>\n </menu>\n </menubar>\n <toolbar name=\"toolbar1\">\n <toolitem action=\"New\" name=\"New\"/>\n <toolitem action=\"Open\" name=\"Open\"/>\n <toolitem action=\"Save\" name=\"Save\"/>\n <separator/>\n <toolitem action=\"ImportCS\" name=\"ImportCS\"/>\n <toolitem action=\"ExportCS\" name=\"ExportCS\"/>\n <separator/>\n <toolitem action=\"RemoveCS\" name=\"RemoveCS\"/>\n </toolbar>\n <popup name=\"popup1\">\n <menuitem action=\"ViewCS\" name=\"ViewCS\"/>\n <menuitem action=\"ExportCS\" name=\"ExportCS\"/>\n <separator/>\n <menuitem action=\"RemoveCS\" name=\"RemoveCS\"/>\n </popup>\n </ui>\n </object>\n <object class=\"GtkVBox\" id=\"mainbox\">\n <property name=\"visible\">True</property>\n <property name=\"orientation\">vertical</property>\n <child>\n <object constructor=\"uimanager1\" class=\"GtkMenuBar\" id=\"menubar1\">\n <property name=\"visible\">True</property>\n <child internal-child=\"accessible\">\n <object class=\"AtkObject\" id=\"a11y-menubar\">\n <property name=\"AtkObject::accessible-name\">The menubar</property>\n </object>\n </child>\n </object>\n <packing>\n <property name=\"expand\">False</property>\n </packing>\n </child>\n <child>\n <object constructor=\"uimanager1\" class=\"GtkToolbar\" id=\"toolbar1\">\n <property name=\"visible\">True</property>\n <child internal-child=\"accessible\">\n <object class=\"AtkObject\" id=\"a11y-toolbar\">\n <property name=\"AtkObject::accessible-name\">The toolbar</property>\n </object>\n </child>\n </object>\n <packing>\n <property name=\"expand\">False</property>\n <property name=\"position\">1</property>\n </packing>\n </child>\n <child>\n <object class=\"GtkScrolledWindow\" id=\"scrolledwindow1\">\n <property name=\"visible\">True</property>\n <property name=\"can_focus\">True</property>\n <property name=\"hscrollbar_policy\">automatic</property>\n <property name=\"vscrollbar_policy\">automatic</property>\n <child>\n <object class=\"GtkTreeView\" id=\"cs_list\">\n <property name=\"visible\">True</property>\n <property name=\"can_focus\">True</property>\n <property name=\"reorderable\">True</property>\n <property name=\"model\">cs_store</property>\n <child>\n <object class=\"GtkTreeViewColumn\" id=\"pkts_column\">\n <property name=\"title\">Packets</property>\n <child>\n <object class=\"GtkCellRendererText\" id=\"pkts_cell\"/>\n </child>\n </object>\n </child>\n <child>\n <object class=\"GtkTreeViewColumn\" id=\"treeviewcolumn1\">\n <property name=\"title\">Name</property>\n <child>\n <object class=\"GtkCellRendererText\" id=\"cellrenderertext1\"/>\n <attributes>\n <attribute name=\"text\">0</attribute>\n </attributes>\n </child>\n </object>\n </child>\n </object>\n </child>\n </object>\n <packing>\n <property name=\"position\">2</property>\n </packing>\n </child>\n </object>\n <object class=\"GtkListStore\" id=\"cs_store\">\n <columns>\n <!-- column-name Name -->\n <column type=\"gchararray\"/>\n <!-- column-name CS -->\n <column type=\"GObject\"/>\n </columns>\n </object>\n <object constructor=\"uimanager1\" class=\"GtkMenu\" id=\"popup1\">\n <child internal-child=\"accessible\">\n <object class=\"AtkObject\" id=\"a11y-popup\">\n <property name=\"AtkObject::accessible-name\">The popup menu</property>\n </object>\n </child>\n </object>\n </interface>\n "
+#define PROJECT_WINDOW_about_xml_ui "\n <?xml version=\"1.0\"?>\n <interface>\n <requires lib=\"gtk+\" version=\"2.16\"/>\n <!-- interface-naming-policy project-wide -->\n <object class=\"GtkAboutDialog\" id=\"about_dialog\">\n <property name=\"border_width\">5</property>\n <property name=\"type_hint\">normal</property>\n <property name=\"skip_taskbar_hint\">True</property>\n <property name=\"has_separator\">False</property>\n <property name=\"program_name\">Radeon Simulator</property>\n <property name=\"copyright\" translatable=\"yes\">Copyright &#xA9; 2010 Joakim Sindholt</property>\n <property name=\"comments\" translatable=\"yes\">A simulator for Radeon GPUs</property>\n <property name=\"website\">http://cgit.freedesktop.org/~jsindholt/rsim</property>\n <property name=\"license\" translatable=\"yes\">This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.</property>\n <property name=\"authors\">Joakim Sindholt &lt;opensource@zhasha.com&gt;</property>\n <!-- This path shouldn't be hardcoded -->\n <property name=\"logo\">/usr/share/pixmaps/rsim.png</property>\n <property name=\"wrap_license\">True</property>\n <child internal-child=\"vbox\">\n <object class=\"GtkVBox\" id=\"dialog-vbox1\">\n <property name=\"visible\">True</property>\n <property name=\"orientation\">vertical</property>\n <property name=\"spacing\">2</property>\n <child internal-child=\"action_area\">\n <object class=\"GtkHButtonBox\" id=\"dialog-action_area1\">\n <property name=\"visible\">True</property>\n <property name=\"layout_style\">end</property>\n </object>\n <packing>\n <property name=\"expand\">False</property>\n <property name=\"pack_type\">end</property>\n <property name=\"position\">0</property>\n </packing>\n </child>\n </object>\n </child>\n </object>\n </interface>\n "
+static void project_window_edit_set_sensitive (ProjectWindow* self, gboolean setting);
+static EmulationCS* project_window_get_selected_cs (ProjectWindow* self);
+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 project_window_open_csview (ProjectWindow* self);
+GUICSExport* gui_cs_export_new (EmulationCS* cs);
+GUICSExport* gui_cs_export_construct (GType object_type, EmulationCS* cs);
+GType gui_cs_export_get_type (void);
+static void project_window_open_csexport (ProjectWindow* self);
+ProjectWindowIterator* project_window_iterator_new (GtkListStore* model, GtkTreeIter* iter, gboolean valid);
+ProjectWindowIterator* project_window_iterator_construct (GType object_type, GtkListStore* model, GtkTreeIter* iter, gboolean valid);
+GType project_window_iterator_get_type (void);
+static void project_window_remove_selected_cs (ProjectWindow* self);
+static ProjectManagerIterator* project_window_real_iterator (ProjectManager* base);
+static void project_window_real_get (ProjectManager* base, guint index, ProjectManagerCSEntry* result);
+static ProjectManagerIterator* project_window_real_add_cs (ProjectManager* base, const char* name, EmulationCS* cs);
+static void project_window_real_remove_cs (ProjectManager* base, ProjectManagerIterator* iter);
+static void project_window_real_clear (ProjectManager* base);
+ProjectWindow* project_window_new (void);
+ProjectWindow* project_window_construct (GType object_type);
+guint emulation_cs_get_length (EmulationCS* self);
+static void _lambda14_ (GtkCellLayout* col, GtkCellRenderer* cell, GtkTreeModel* model, GtkTreeIter* iter, ProjectWindow* self);
+static void __lambda14__gtk_cell_layout_data_func (GtkCellLayout* cell_layout, GtkCellRenderer* cell, GtkTreeModel* tree_model, GtkTreeIter* iter, gpointer self);
+static void _lambda15_ (GtkAction* source, ProjectWindow* self);
+static void __lambda15__gtk_action_activate (GtkAction* _sender, gpointer self);
+GUICSImport* gui_cs_import_new (ProjectManager* _manager);
+GUICSImport* gui_cs_import_construct (GType object_type, ProjectManager* _manager);
+GType gui_cs_import_get_type (void);
+static void _lambda16_ (GtkAction* source, ProjectWindow* self);
+static void __lambda16__gtk_action_activate (GtkAction* _sender, gpointer self);
+static void _lambda17_ (GtkAction* source, ProjectWindow* self);
+static void __lambda17__gtk_action_activate (GtkAction* _sender, gpointer self);
+static void _lambda18_ (GtkAction* source, ProjectWindow* self);
+static void __lambda18__gtk_action_activate (GtkAction* _sender, gpointer self);
+static void _lambda19_ (GtkAction* source, ProjectWindow* self);
+static void __lambda19__gtk_action_activate (GtkAction* _sender, gpointer self);
+static void _lambda20_ (GtkTreePath* path, GtkTreeViewColumn* column, ProjectWindow* self);
+static void __lambda20__gtk_tree_view_row_activated (GtkTreeView* _sender, GtkTreePath* path, GtkTreeViewColumn* column, gpointer self);
+static gboolean _lambda21_ (GdkEventButton* event, ProjectWindow* self);
+static gboolean __lambda21__gtk_widget_button_press_event (GtkWidget* _sender, GdkEventButton* event, gpointer self);
+static void _lambda22_ (GtkTreeView* source, ProjectWindow* self);
+static void __lambda22__gtk_tree_view_cursor_changed (GtkTreeView* _sender, gpointer self);
+static void _gtk_main_quit_gtk_object_destroy (GtkObject* _sender, gpointer self);
+static GObject * project_window_constructor (GType type, guint n_construct_properties, GObjectConstructParam * construct_properties);
+#define PROJECT_WINDOW_ITERATOR_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), PROJECT_WINDOW_TYPE_ITERATOR, ProjectWindowIteratorPrivate))
+enum {
+ PROJECT_WINDOW_ITERATOR_DUMMY_PROPERTY
+};
+static gboolean project_window_iterator_real_next (ProjectManagerIterator* base);
+static void project_window_iterator_real_get (ProjectManagerIterator* base, ProjectManagerCSEntry* result);
+static void project_window_iterator_finalize (ProjectManagerIterator* obj);
+static void project_window_finalize (GObject* obj);
+static void project_window_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec);
+
+
+
+ProjectManagerIterator* project_manager_iterator (ProjectManager* self) {
+ return PROJECT_MANAGER_GET_INTERFACE (self)->iterator (self);
+}
+
+
+void project_manager_get (ProjectManager* self, guint index, ProjectManagerCSEntry* result) {
+ PROJECT_MANAGER_GET_INTERFACE (self)->get (self, index, result);
+}
+
+
+ProjectManagerIterator* project_manager_add_cs (ProjectManager* self, const char* name, EmulationCS* cs) {
+ return PROJECT_MANAGER_GET_INTERFACE (self)->add_cs (self, name, cs);
+}
+
+
+void project_manager_remove_cs (ProjectManager* self, ProjectManagerIterator* iter) {
+ PROJECT_MANAGER_GET_INTERFACE (self)->remove_cs (self, iter);
+}
+
+
+void project_manager_clear (ProjectManager* self) {
+ PROJECT_MANAGER_GET_INTERFACE (self)->clear (self);
+}
+
+
+gboolean project_manager_save (ProjectManager* self, const char* filename) {
+ gboolean result;
+ g_return_val_if_fail (filename != NULL, FALSE);
+ result = FALSE;
+ return result;
+}
+
+
+gboolean project_manager_load (ProjectManager* self, const char* filename) {
+ gboolean result;
+ g_return_val_if_fail (filename != NULL, FALSE);
+ result = FALSE;
+ return result;
+}
+
+
+guint project_manager_get_length (ProjectManager* self) {
+ return PROJECT_MANAGER_GET_INTERFACE (self)->get_length (self);
+}
+
+
+static gboolean project_manager_iterator_real_next (ProjectManagerIterator* self) {
+ g_return_val_if_fail (self != NULL, FALSE);
+ g_critical ("Type `%s' does not implement abstract method `project_manager_iterator_next'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
+ return FALSE;
+}
+
+
+gboolean project_manager_iterator_next (ProjectManagerIterator* self) {
+ return PROJECT_MANAGER_ITERATOR_GET_CLASS (self)->next (self);
+}
+
+
+static void project_manager_iterator_real_get (ProjectManagerIterator* self, ProjectManagerCSEntry* result) {
+ g_return_if_fail (self != NULL);
+ g_critical ("Type `%s' does not implement abstract method `project_manager_iterator_get'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
+ return;
+}
+
+
+void project_manager_iterator_get (ProjectManagerIterator* self, ProjectManagerCSEntry* result) {
+ PROJECT_MANAGER_ITERATOR_GET_CLASS (self)->get (self, result);
+}
+
+
+ProjectManagerIterator* project_manager_iterator_construct (GType object_type) {
+ ProjectManagerIterator* self;
+ self = (ProjectManagerIterator*) g_type_create_instance (object_type);
+ return self;
+}
+
+
+static void project_manager_value_iterator_init (GValue* value) {
+ value->data[0].v_pointer = NULL;
+}
+
+
+static void project_manager_value_iterator_free_value (GValue* value) {
+ if (value->data[0].v_pointer) {
+ project_manager_iterator_unref (value->data[0].v_pointer);
+ }
+}
+
+
+static void project_manager_value_iterator_copy_value (const GValue* src_value, GValue* dest_value) {
+ if (src_value->data[0].v_pointer) {
+ dest_value->data[0].v_pointer = project_manager_iterator_ref (src_value->data[0].v_pointer);
+ } else {
+ dest_value->data[0].v_pointer = NULL;
+ }
+}
+
+
+static gpointer project_manager_value_iterator_peek_pointer (const GValue* value) {
+ return value->data[0].v_pointer;
+}
+
+
+static gchar* project_manager_value_iterator_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
+ if (collect_values[0].v_pointer) {
+ ProjectManagerIterator* object;
+ object = collect_values[0].v_pointer;
+ if (object->parent_instance.g_class == NULL) {
+ return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+ } else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
+ return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+ }
+ value->data[0].v_pointer = project_manager_iterator_ref (object);
+ } else {
+ value->data[0].v_pointer = NULL;
+ }
+ return NULL;
+}
+
+
+static gchar* project_manager_value_iterator_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
+ ProjectManagerIterator** object_p;
+ object_p = collect_values[0].v_pointer;
+ if (!object_p) {
+ return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
+ }
+ if (!value->data[0].v_pointer) {
+ *object_p = NULL;
+ } else if (collect_flags && G_VALUE_NOCOPY_CONTENTS) {
+ *object_p = value->data[0].v_pointer;
+ } else {
+ *object_p = project_manager_iterator_ref (value->data[0].v_pointer);
+ }
+ return NULL;
+}
+
+
+GParamSpec* project_manager_param_spec_iterator (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) {
+ ProjectManagerParamSpecIterator* spec;
+ g_return_val_if_fail (g_type_is_a (object_type, PROJECT_MANAGER_TYPE_ITERATOR), NULL);
+ spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
+ G_PARAM_SPEC (spec)->value_type = object_type;
+ return G_PARAM_SPEC (spec);
+}
+
+
+gpointer project_manager_value_get_iterator (const GValue* value) {
+ g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, PROJECT_MANAGER_TYPE_ITERATOR), NULL);
+ return value->data[0].v_pointer;
+}
+
+
+void project_manager_value_set_iterator (GValue* value, gpointer v_object) {
+ ProjectManagerIterator* old;
+ g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, PROJECT_MANAGER_TYPE_ITERATOR));
+ old = value->data[0].v_pointer;
+ if (v_object) {
+ g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, PROJECT_MANAGER_TYPE_ITERATOR));
+ g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
+ value->data[0].v_pointer = v_object;
+ project_manager_iterator_ref (value->data[0].v_pointer);
+ } else {
+ value->data[0].v_pointer = NULL;
+ }
+ if (old) {
+ project_manager_iterator_unref (old);
+ }
+}
+
+
+static void project_manager_iterator_class_init (ProjectManagerIteratorClass * klass) {
+ project_manager_iterator_parent_class = g_type_class_peek_parent (klass);
+ PROJECT_MANAGER_ITERATOR_CLASS (klass)->finalize = project_manager_iterator_finalize;
+ PROJECT_MANAGER_ITERATOR_CLASS (klass)->next = project_manager_iterator_real_next;
+ PROJECT_MANAGER_ITERATOR_CLASS (klass)->get = project_manager_iterator_real_get;
+}
+
+
+static void project_manager_iterator_instance_init (ProjectManagerIterator * self) {
+ self->ref_count = 1;
+}
+
+
+static void project_manager_iterator_finalize (ProjectManagerIterator* obj) {
+ ProjectManagerIterator * self;
+ self = PROJECT_MANAGER_ITERATOR (obj);
+}
+
+
+GType project_manager_iterator_get_type (void) {
+ static GType project_manager_iterator_type_id = 0;
+ if (project_manager_iterator_type_id == 0) {
+ static const GTypeValueTable g_define_type_value_table = { project_manager_value_iterator_init, project_manager_value_iterator_free_value, project_manager_value_iterator_copy_value, project_manager_value_iterator_peek_pointer, "p", project_manager_value_iterator_collect_value, "p", project_manager_value_iterator_lcopy_value };
+ static const GTypeInfo g_define_type_info = { sizeof (ProjectManagerIteratorClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) project_manager_iterator_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ProjectManagerIterator), 0, (GInstanceInitFunc) project_manager_iterator_instance_init, &g_define_type_value_table };
+ static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
+ project_manager_iterator_type_id = g_type_register_fundamental (g_type_fundamental_next (), "ProjectManagerIterator", &g_define_type_info, &g_define_type_fundamental_info, G_TYPE_FLAG_ABSTRACT);
+ }
+ return project_manager_iterator_type_id;
+}
+
+
+gpointer project_manager_iterator_ref (gpointer instance) {
+ ProjectManagerIterator* self;
+ self = instance;
+ g_atomic_int_inc (&self->ref_count);
+ return instance;
+}
+
+
+void project_manager_iterator_unref (gpointer instance) {
+ ProjectManagerIterator* self;
+ self = instance;
+ if (g_atomic_int_dec_and_test (&self->ref_count)) {
+ PROJECT_MANAGER_ITERATOR_GET_CLASS (self)->finalize (self);
+ g_type_free_instance ((GTypeInstance *) self);
+ }
+}
+
+
+static gpointer _g_object_ref0 (gpointer self) {
+ return self ? g_object_ref (self) : NULL;
+}
+
+
+void project_manager_cs_entry_init (ProjectManagerCSEntry *self, const char* name, EmulationCS* cs) {
+ char* _tmp0_;
+ EmulationCS* _tmp1_;
+ g_return_if_fail (name != NULL);
+ g_return_if_fail (cs != NULL);
+ memset (self, 0, sizeof (ProjectManagerCSEntry));
+ (*self).name = (_tmp0_ = g_strdup (name), _g_free0 ((*self).name), _tmp0_);
+ (*self).cs = (_tmp1_ = _g_object_ref0 (cs), _g_object_unref0 ((*self).cs), _tmp1_);
+}
+
+
+void project_manager_cs_entry_copy (const ProjectManagerCSEntry* self, ProjectManagerCSEntry* dest) {
+ dest->name = g_strdup (self->name);
+ dest->cs = _g_object_ref0 (self->cs);
+}
+
+
+void project_manager_cs_entry_destroy (ProjectManagerCSEntry* self) {
+ _g_free0 (self->name);
+ _g_object_unref0 (self->cs);
+}
+
+
+ProjectManagerCSEntry* project_manager_cs_entry_dup (const ProjectManagerCSEntry* self) {
+ ProjectManagerCSEntry* dup;
+ dup = g_new0 (ProjectManagerCSEntry, 1);
+ project_manager_cs_entry_copy (self, dup);
+ return dup;
+}
+
+
+void project_manager_cs_entry_free (ProjectManagerCSEntry* self) {
+ project_manager_cs_entry_destroy (self);
+ g_free (self);
+}
+
+
+GType project_manager_cs_entry_get_type (void) {
+ static GType project_manager_cs_entry_type_id = 0;
+ if (project_manager_cs_entry_type_id == 0) {
+ project_manager_cs_entry_type_id = g_boxed_type_register_static ("ProjectManagerCSEntry", (GBoxedCopyFunc) project_manager_cs_entry_dup, (GBoxedFreeFunc) project_manager_cs_entry_free);
+ }
+ return project_manager_cs_entry_type_id;
+}
+
+
+static void project_manager_base_init (ProjectManagerIface * iface) {
+ static gboolean initialized = FALSE;
+ if (!initialized) {
+ initialized = TRUE;
+ g_object_interface_install_property (iface, g_param_spec_uint ("length", "length", "length", 0, G_MAXUINT, 0U, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
+ }
+}
+
+
+GType project_manager_get_type (void) {
+ static GType project_manager_type_id = 0;
+ if (project_manager_type_id == 0) {
+ static const GTypeInfo g_define_type_info = { sizeof (ProjectManagerIface), (GBaseInitFunc) project_manager_base_init, (GBaseFinalizeFunc) NULL, (GClassInitFunc) NULL, (GClassFinalizeFunc) NULL, NULL, 0, 0, (GInstanceInitFunc) NULL, NULL };
+ project_manager_type_id = g_type_register_static (G_TYPE_INTERFACE, "ProjectManager", &g_define_type_info, 0);
+ g_type_interface_add_prerequisite (project_manager_type_id, G_TYPE_OBJECT);
+ }
+ return project_manager_type_id;
+}
+
+
+static void project_window_edit_set_sensitive (ProjectWindow* self, gboolean setting) {
+ g_return_if_fail (self != NULL);
+ gtk_action_set_sensitive (self->priv->action_viewcs, setting);
+ gtk_action_set_sensitive (self->priv->action_exportcs, setting);
+ gtk_action_set_sensitive (self->priv->action_removecs, setting);
+}
+
+
+static EmulationCS* project_window_get_selected_cs (ProjectWindow* self) {
+ EmulationCS* result;
+ GtkTreeIter iter = {0};
+ EmulationCS* cs;
+ GtkTreeSelection* selection;
+ g_return_val_if_fail (self != NULL, NULL);
+ cs = NULL;
+ selection = _g_object_ref0 (gtk_tree_view_get_selection (self->priv->cs_list));
+ if (!gtk_tree_selection_get_selected (selection, NULL, &iter)) {
+ result = NULL;
+ _g_object_unref0 (cs);
+ _g_object_unref0 (selection);
+ return result;
+ }
+ gtk_tree_model_get ((GtkTreeModel*) self->priv->cs_store, &iter, 1, &cs, -1, -1);
+ result = cs;
+ _g_object_unref0 (selection);
+ return result;
+}
+
+
+static void project_window_open_csview (ProjectWindow* self) {
+ EmulationCS* cs;
+ g_return_if_fail (self != NULL);
+ cs = project_window_get_selected_cs (self);
+ if (cs != NULL) {
+ GUICSView* csv;
+ csv = g_object_ref_sink (gui_cs_view_new (cs));
+ gtk_widget_show_all ((GtkWidget*) csv);
+ _g_object_unref0 (csv);
+ }
+ _g_object_unref0 (cs);
+}
+
+
+static void project_window_open_csexport (ProjectWindow* self) {
+ EmulationCS* cs;
+ g_return_if_fail (self != NULL);
+ cs = project_window_get_selected_cs (self);
+ if (cs != NULL) {
+ GUICSExport* d;
+ d = g_object_ref_sink (gui_cs_export_new (cs));
+ gtk_dialog_run ((GtkDialog*) d);
+ _g_object_unref0 (d);
+ }
+ _g_object_unref0 (cs);
+}
+
+
+static void project_window_remove_selected_cs (ProjectWindow* self) {
+ GtkTreeIter iter = {0};
+ GtkTreeSelection* selection;
+ ProjectWindowIterator* _tmp0_;
+ g_return_if_fail (self != NULL);
+ selection = _g_object_ref0 (gtk_tree_view_get_selection (self->priv->cs_list));
+ if (!gtk_tree_selection_get_selected (selection, NULL, &iter)) {
+ _g_object_unref0 (selection);
+ return;
+ }
+ project_manager_remove_cs ((ProjectManager*) self, (ProjectManagerIterator*) (_tmp0_ = project_window_iterator_new (self->priv->cs_store, &iter, TRUE)));
+ _project_manager_iterator_unref0 (_tmp0_);
+ _g_object_unref0 (selection);
+}
+
+
+static ProjectManagerIterator* project_window_real_iterator (ProjectManager* base) {
+ ProjectWindow * self;
+ ProjectManagerIterator* result;
+ GtkTreeIter iter = {0};
+ gboolean valid;
+ self = (ProjectWindow*) base;
+ valid = gtk_tree_model_get_iter_first ((GtkTreeModel*) self->priv->cs_store, &iter);
+ result = (ProjectManagerIterator*) project_window_iterator_new (self->priv->cs_store, &iter, valid);
+ return result;
+}
+
+
+static void project_window_real_get (ProjectManager* base, guint index, ProjectManagerCSEntry* result) {
+ ProjectWindow * self;
+ GtkTreeIter iter = {0};
+ GtkTreePath* path;
+ gboolean valid;
+ ProjectManagerCSEntry _tmp1_ = {0};
+ ProjectWindowIterator* _tmp0_;
+ ProjectManagerCSEntry _tmp2_;
+ self = (ProjectWindow*) base;
+ path = gtk_tree_path_new_from_indices ((gint) index, -1, -1);
+ valid = gtk_tree_model_get_iter ((GtkTreeModel*) self->priv->cs_store, &iter, path);
+ *result = (_tmp2_ = (project_manager_iterator_get ((ProjectManagerIterator*) (_tmp0_ = project_window_iterator_new (self->priv->cs_store, &iter, valid)), &_tmp1_), _tmp1_), _project_manager_iterator_unref0 (_tmp0_), _tmp2_);
+ _gtk_tree_path_free0 (path);
+ return;
+ _gtk_tree_path_free0 (path);
+}
+
+
+static ProjectManagerIterator* project_window_real_add_cs (ProjectManager* base, const char* name, EmulationCS* cs) {
+ ProjectWindow * self;
+ ProjectManagerIterator* result;
+ GtkTreeIter iter = {0};
+ self = (ProjectWindow*) base;
+ g_return_val_if_fail (name != NULL, NULL);
+ g_return_val_if_fail (cs != NULL, NULL);
+ gtk_list_store_append (self->priv->cs_store, &iter);
+ gtk_list_store_set (self->priv->cs_store, &iter, 0, name, 1, cs, -1, -1);
+ result = (ProjectManagerIterator*) project_window_iterator_new (self->priv->cs_store, &iter, TRUE);
+ return result;
+}
+
+
+static void project_window_real_remove_cs (ProjectManager* base, ProjectManagerIterator* iter) {
+ ProjectWindow * self;
+ ProjectManagerIterator* _tmp0_;
+ GtkTreeIter it;
+ char* name;
+ GtkMessageDialog* d;
+ gint _result_;
+ self = (ProjectWindow*) base;
+ g_return_if_fail (iter != NULL);
+ it = (_tmp0_ = iter, PROJECT_WINDOW_IS_ITERATOR (_tmp0_) ? ((ProjectWindowIterator*) _tmp0_) : NULL)->iter;
+ name = NULL;
+ gtk_tree_model_get ((GtkTreeModel*) self->priv->cs_store, &it, 0, &name, -1, -1);
+ d = g_object_ref_sink ((GtkMessageDialog*) gtk_message_dialog_new ((GtkWindow*) self, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, "Are you sure you want to delete the command stream '%s'", name));
+ _result_ = gtk_dialog_run ((GtkDialog*) d);
+ gtk_object_destroy ((GtkObject*) d);
+ if (_result_ != GTK_RESPONSE_YES) {
+ _g_free0 (name);
+ _g_object_unref0 (d);
+ return;
+ }
+ gtk_list_store_remove (self->priv->cs_store, &it);
+ _g_free0 (name);
+ _g_object_unref0 (d);
+}
+
+
+static void project_window_real_clear (ProjectManager* base) {
+ ProjectWindow * self;
+ GtkMessageDialog* d;
+ gint _result_;
+ self = (ProjectWindow*) base;
+ d = g_object_ref_sink ((GtkMessageDialog*) gtk_message_dialog_new ((GtkWindow*) self, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, "Are you sure you want to clear all command streams?"));
+ _result_ = gtk_dialog_run ((GtkDialog*) d);
+ gtk_object_destroy ((GtkObject*) d);
+ if (_result_ != GTK_RESPONSE_YES) {
+ _g_object_unref0 (d);
+ return;
+ }
+ gtk_list_store_clear (self->priv->cs_store);
+ _g_object_unref0 (d);
+}
+
+
+ProjectWindow* project_window_construct (GType object_type) {
+ ProjectWindow * self;
+ self = g_object_newv (object_type, 0, NULL);
+ return self;
+}
+
+
+ProjectWindow* project_window_new (void) {
+ return project_window_construct (PROJECT_TYPE_WINDOW);
+}
+
+
+static guint project_window_real_get_length (ProjectManager* base) {
+ guint result;
+ ProjectWindow* self;
+ self = (ProjectWindow*) base;
+ result = (guint) gtk_tree_model_iter_n_children ((GtkTreeModel*) self->priv->cs_store, NULL);
+ return result;
+}
+
+
+static glong string_get_length (const char* self) {
+ glong result;
+ g_return_val_if_fail (self != NULL, 0L);
+ result = g_utf8_strlen (self, -1);
+ return result;
+}
+
+
+static void _lambda14_ (GtkCellLayout* col, GtkCellRenderer* cell, GtkTreeModel* model, GtkTreeIter* iter, ProjectWindow* self) {
+ EmulationCS* cs;
+ char* _tmp0_;
+ GtkCellRenderer* _tmp1_;
+ g_return_if_fail (col != NULL);
+ g_return_if_fail (cell != NULL);
+ g_return_if_fail (model != NULL);
+ cs = NULL;
+ gtk_tree_model_get (model, iter, 1, &cs, -1, -1);
+ g_assert (cs != NULL);
+ g_object_set ((_tmp1_ = cell, GTK_IS_CELL_RENDERER_TEXT (_tmp1_) ? ((GtkCellRendererText*) _tmp1_) : NULL), "text", _tmp0_ = g_strdup_printf ("%u", emulation_cs_get_length (cs)), NULL);
+ _g_free0 (_tmp0_);
+ _g_object_unref0 (cs);
+}
+
+
+static void __lambda14__gtk_cell_layout_data_func (GtkCellLayout* cell_layout, GtkCellRenderer* cell, GtkTreeModel* tree_model, GtkTreeIter* iter, gpointer self) {
+ _lambda14_ (cell_layout, cell, tree_model, iter, self);
+}
+
+
+static void _lambda15_ (GtkAction* source, ProjectWindow* self) {
+ g_return_if_fail (source != NULL);
+ project_window_open_csview (self);
+}
+
+
+static void __lambda15__gtk_action_activate (GtkAction* _sender, gpointer self) {
+ _lambda15_ (_sender, self);
+}
+
+
+static void _lambda16_ (GtkAction* source, ProjectWindow* self) {
+ GUICSImport* d;
+ g_return_if_fail (source != NULL);
+ d = g_object_ref_sink (gui_cs_import_new ((ProjectManager*) self));
+ gtk_dialog_run ((GtkDialog*) d);
+ _g_object_unref0 (d);
+}
+
+
+static void __lambda16__gtk_action_activate (GtkAction* _sender, gpointer self) {
+ _lambda16_ (_sender, self);
+}
+
+
+static void _lambda17_ (GtkAction* source, ProjectWindow* self) {
+ g_return_if_fail (source != NULL);
+ project_window_open_csexport (self);
+}
+
+
+static void __lambda17__gtk_action_activate (GtkAction* _sender, gpointer self) {
+ _lambda17_ (_sender, self);
+}
+
+
+static void _lambda18_ (GtkAction* source, ProjectWindow* self) {
+ g_return_if_fail (source != NULL);
+ project_window_remove_selected_cs (self);
+}
+
+
+static void __lambda18__gtk_action_activate (GtkAction* _sender, gpointer self) {
+ _lambda18_ (_sender, self);
+}
+
+
+static void _lambda19_ (GtkAction* source, ProjectWindow* self) {
+ GError * _inner_error_;
+ GtkBuilder* about;
+ g_return_if_fail (source != NULL);
+ _inner_error_ = NULL;
+ about = gtk_builder_new ();
+ {
+ GObject* _tmp0_;
+ GtkAboutDialog* dlg;
+ gtk_builder_add_from_string (about, PROJECT_WINDOW_about_xml_ui, (gsize) string_get_length (PROJECT_WINDOW_about_xml_ui), &_inner_error_);
+ if (_inner_error_ != NULL) {
+ goto __catch4_g_error;
+ }
+ dlg = _g_object_ref0 ((_tmp0_ = gtk_builder_get_object (about, "about_dialog"), GTK_IS_ABOUT_DIALOG (_tmp0_) ? ((GtkAboutDialog*) _tmp0_) : NULL));
+ gtk_dialog_run ((GtkDialog*) dlg);
+ gtk_object_destroy ((GtkObject*) dlg);
+ _g_object_unref0 (dlg);
+ }
+ goto __finally4;
+ __catch4_g_error:
+ {
+ GError * e;
+ e = _inner_error_;
+ _inner_error_ = NULL;
+ {
+ _g_error_free0 (e);
+ }
+ }
+ __finally4:
+ if (_inner_error_ != NULL) {
+ _g_object_unref0 (about);
+ 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_);
+ return;
+ }
+ _g_object_unref0 (about);
+}
+
+
+static void __lambda19__gtk_action_activate (GtkAction* _sender, gpointer self) {
+ _lambda19_ (_sender, self);
+}
+
+
+static void _lambda20_ (GtkTreePath* path, GtkTreeViewColumn* column, ProjectWindow* self) {
+ g_return_if_fail (path != NULL);
+ g_return_if_fail (column != NULL);
+ project_window_open_csview (self);
+}
+
+
+static void __lambda20__gtk_tree_view_row_activated (GtkTreeView* _sender, GtkTreePath* path, GtkTreeViewColumn* column, gpointer self) {
+ _lambda20_ (path, column, self);
+}
+
+
+static gboolean _lambda21_ (GdkEventButton* event, ProjectWindow* self) {
+ gboolean result;
+ EmulationCS* cs;
+ gboolean _tmp0_ = FALSE;
+ gboolean _tmp1_ = FALSE;
+ cs = project_window_get_selected_cs (self);
+ if (cs != NULL) {
+ _tmp1_ = (*event).type == GDK_BUTTON_PRESS;
+ } else {
+ _tmp1_ = FALSE;
+ }
+ if (_tmp1_) {
+ _tmp0_ = (*event).button == 3;
+ } else {
+ _tmp0_ = FALSE;
+ }
+ if (_tmp0_) {
+ gtk_menu_popup (self->priv->edit_menu, NULL, NULL, NULL, NULL, (*event).button, (*event).time);
+ }
+ _g_object_unref0 (cs);
+}
+
+
+static gboolean __lambda21__gtk_widget_button_press_event (GtkWidget* _sender, GdkEventButton* event, gpointer self) {
+ return _lambda21_ (event, self);
+}
+
+
+static void _lambda22_ (GtkTreeView* source, ProjectWindow* self) {
+ g_return_if_fail (source != NULL);
+ project_window_edit_set_sensitive (self, gtk_tree_selection_get_selected (gtk_tree_view_get_selection (self->priv->cs_list), NULL, NULL));
+}
+
+
+static void __lambda22__gtk_tree_view_cursor_changed (GtkTreeView* _sender, gpointer self) {
+ _lambda22_ (_sender, self);
+}
+
+
+static void _gtk_main_quit_gtk_object_destroy (GtkObject* _sender, gpointer self) {
+ gtk_main_quit ();
+}
+
+
+static GObject * project_window_constructor (GType type, guint n_construct_properties, GObjectConstructParam * construct_properties) {
+ GObject * obj;
+ GObjectClass * parent_class;
+ ProjectWindow * self;
+ GError * _inner_error_;
+ parent_class = G_OBJECT_CLASS (project_window_parent_class);
+ obj = parent_class->constructor (type, n_construct_properties, construct_properties);
+ self = PROJECT_WINDOW (obj);
+ _inner_error_ = NULL;
+ {
+ GtkBuilder* builder;
+ GObject* _tmp0_;
+ GtkTreeViewColumn* col;
+ GObject* _tmp1_;
+ GtkCellRendererText* cell;
+ GtkAction* _tmp3_;
+ GObject* _tmp2_;
+ GtkAction* _tmp5_;
+ GObject* _tmp4_;
+ GtkAction* _tmp7_;
+ GObject* _tmp6_;
+ GObject* _tmp8_;
+ GtkAction* action_importcs;
+ GObject* _tmp9_;
+ GtkListStore* _tmp11_;
+ GObject* _tmp10_;
+ GtkTreeView* _tmp13_;
+ GObject* _tmp12_;
+ GtkMenu* _tmp15_;
+ GObject* _tmp14_;
+ GObject* _tmp16_;
+ builder = gtk_builder_new ();
+ {
+ gtk_builder_add_from_string (builder, PROJECT_WINDOW_xml_ui, (gsize) string_get_length (PROJECT_WINDOW_xml_ui), &_inner_error_);
+ if (_inner_error_ != NULL) {
+ goto __catch3_g_error;
+ }
+ }
+ goto __finally3;
+ __catch3_g_error:
+ {
+ GError * e;
+ e = _inner_error_;
+ _inner_error_ = NULL;
+ {
+ fprintf (stderr, "Unable to construct main window: %s.\n", e->message);
+ g_assert (FALSE);
+ _g_error_free0 (e);
+ }
+ }
+ __finally3:
+ if (_inner_error_ != NULL) {
+ _g_object_unref0 (builder);
+ 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_);
+ }
+ gtk_widget_set_size_request ((GtkWidget*) self, 400, 200);
+ gtk_window_set_title ((GtkWindow*) self, "Radeon Simulator");
+ col = _g_object_ref0 ((_tmp0_ = gtk_builder_get_object (builder, "pkts_column"), GTK_IS_TREE_VIEW_COLUMN (_tmp0_) ? ((GtkTreeViewColumn*) _tmp0_) : NULL));
+ cell = _g_object_ref0 ((_tmp1_ = gtk_builder_get_object (builder, "pkts_cell"), GTK_IS_CELL_RENDERER_TEXT (_tmp1_) ? ((GtkCellRendererText*) _tmp1_) : NULL));
+ gtk_cell_layout_set_cell_data_func ((GtkCellLayout*) col, (GtkCellRenderer*) cell, __lambda14__gtk_cell_layout_data_func, g_object_ref (self), g_object_unref);
+ self->priv->action_viewcs = (_tmp3_ = _g_object_ref0 ((_tmp2_ = gtk_builder_get_object (builder, "ViewCS"), GTK_IS_ACTION (_tmp2_) ? ((GtkAction*) _tmp2_) : NULL)), _g_object_unref0 (self->priv->action_viewcs), _tmp3_);
+ self->priv->action_exportcs = (_tmp5_ = _g_object_ref0 ((_tmp4_ = gtk_builder_get_object (builder, "ExportCS"), GTK_IS_ACTION (_tmp4_) ? ((GtkAction*) _tmp4_) : NULL)), _g_object_unref0 (self->priv->action_exportcs), _tmp5_);
+ self->priv->action_removecs = (_tmp7_ = _g_object_ref0 ((_tmp6_ = gtk_builder_get_object (builder, "RemoveCS"), GTK_IS_ACTION (_tmp6_) ? ((GtkAction*) _tmp6_) : NULL)), _g_object_unref0 (self->priv->action_removecs), _tmp7_);
+ action_importcs = _g_object_ref0 ((_tmp8_ = gtk_builder_get_object (builder, "ImportCS"), GTK_IS_ACTION (_tmp8_) ? ((GtkAction*) _tmp8_) : NULL));
+ g_signal_connect_object (self->priv->action_viewcs, "activate", (GCallback) __lambda15__gtk_action_activate, self, 0);
+ g_signal_connect_object (action_importcs, "activate", (GCallback) __lambda16__gtk_action_activate, self, 0);
+ g_signal_connect_object (self->priv->action_exportcs, "activate", (GCallback) __lambda17__gtk_action_activate, self, 0);
+ g_signal_connect_object (self->priv->action_removecs, "activate", (GCallback) __lambda18__gtk_action_activate, self, 0);
+ g_signal_connect_object ((_tmp9_ = gtk_builder_get_object (builder, "About"), GTK_IS_ACTION (_tmp9_) ? ((GtkAction*) _tmp9_) : NULL), "activate", (GCallback) __lambda19__gtk_action_activate, self, 0);
+ self->priv->cs_store = (_tmp11_ = _g_object_ref0 ((_tmp10_ = gtk_builder_get_object (builder, "cs_store"), GTK_IS_LIST_STORE (_tmp10_) ? ((GtkListStore*) _tmp10_) : NULL)), _g_object_unref0 (self->priv->cs_store), _tmp11_);
+ self->priv->cs_list = (_tmp13_ = _g_object_ref0 ((_tmp12_ = gtk_builder_get_object (builder, "cs_list"), GTK_IS_TREE_VIEW (_tmp12_) ? ((GtkTreeView*) _tmp12_) : NULL)), _g_object_unref0 (self->priv->cs_list), _tmp13_);
+ self->priv->edit_menu = (_tmp15_ = _g_object_ref0 ((_tmp14_ = gtk_builder_get_object (builder, "popup1"), GTK_IS_MENU (_tmp14_) ? ((GtkMenu*) _tmp14_) : NULL)), _g_object_unref0 (self->priv->edit_menu), _tmp15_);
+ g_signal_connect_object (self->priv->cs_list, "row-activated", (GCallback) __lambda20__gtk_tree_view_row_activated, self, 0);
+ g_signal_connect_object ((GtkWidget*) self->priv->cs_list, "button-press-event", (GCallback) __lambda21__gtk_widget_button_press_event, self, 0);
+ g_signal_connect_object (self->priv->cs_list, "cursor-changed", (GCallback) __lambda22__gtk_tree_view_cursor_changed, self, 0);
+ project_window_edit_set_sensitive (self, FALSE);
+ gtk_container_add ((GtkContainer*) self, (_tmp16_ = gtk_builder_get_object (builder, "mainbox"), GTK_IS_WIDGET (_tmp16_) ? ((GtkWidget*) _tmp16_) : NULL));
+ 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_);
+ if (_inner_error_ != NULL) {
+ goto __catch5_g_error;
+ }
+ }
+ goto __finally5;
+ __catch5_g_error:
+ {
+ GError * e;
+ e = _inner_error_;
+ _inner_error_ = NULL;
+ {
+ _g_error_free0 (e);
+ }
+ }
+ __finally5:
+ if (_inner_error_ != NULL) {
+ _g_object_unref0 (builder);
+ _g_object_unref0 (col);
+ _g_object_unref0 (cell);
+ _g_object_unref0 (action_importcs);
+ 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_);
+ }
+ _g_object_unref0 (builder);
+ _g_object_unref0 (col);
+ _g_object_unref0 (cell);
+ _g_object_unref0 (action_importcs);
+ }
+ return obj;
+}
+
+
+ProjectWindowIterator* project_window_iterator_construct (GType object_type, GtkListStore* model, GtkTreeIter* iter, gboolean valid) {
+ ProjectWindowIterator* self;
+ GtkListStore* _tmp0_;
+ g_return_val_if_fail (model != NULL, NULL);
+ self = (ProjectWindowIterator*) project_manager_iterator_construct (object_type);
+ self->priv->model = (_tmp0_ = _g_object_ref0 (model), _g_object_unref0 (self->priv->model), _tmp0_);
+ self->iter = *iter;
+ self->priv->first = TRUE;
+ self->priv->valid = valid;
+ return self;
+}
+
+
+ProjectWindowIterator* project_window_iterator_new (GtkListStore* model, GtkTreeIter* iter, gboolean valid) {
+ return project_window_iterator_construct (PROJECT_WINDOW_TYPE_ITERATOR, model, iter, valid);
+}
+
+
+static gboolean project_window_iterator_real_next (ProjectManagerIterator* base) {
+ ProjectWindowIterator * self;
+ gboolean result;
+ self = (ProjectWindowIterator*) base;
+ if (self->priv->first) {
+ self->priv->first = FALSE;
+ result = self->priv->valid;
+ return result;
+ }
+ result = gtk_tree_model_iter_next ((GtkTreeModel*) self->priv->model, &self->iter);
+ return result;
+}
+
+
+static void project_window_iterator_real_get (ProjectManagerIterator* base, ProjectManagerCSEntry* result) {
+ ProjectWindowIterator * self;
+ char* name;
+ EmulationCS* cs;
+ ProjectManagerCSEntry _tmp0_ = {0};
+ self = (ProjectWindowIterator*) base;
+ name = NULL;
+ cs = NULL;
+ gtk_tree_model_get ((GtkTreeModel*) self->priv->model, &self->iter, 0, &name, 1, &cs, -1, -1);
+ *result = (project_manager_cs_entry_init (&_tmp0_, name, cs), _tmp0_);
+ _g_free0 (name);
+ _g_object_unref0 (cs);
+ return;
+ _g_free0 (name);
+ _g_object_unref0 (cs);
+}
+
+
+static void project_window_iterator_class_init (ProjectWindowIteratorClass * klass) {
+ project_window_iterator_parent_class = g_type_class_peek_parent (klass);
+ PROJECT_MANAGER_ITERATOR_CLASS (klass)->finalize = project_window_iterator_finalize;
+ g_type_class_add_private (klass, sizeof (ProjectWindowIteratorPrivate));
+ PROJECT_MANAGER_ITERATOR_CLASS (klass)->next = project_window_iterator_real_next;
+ PROJECT_MANAGER_ITERATOR_CLASS (klass)->get = project_window_iterator_real_get;
+}
+
+
+static void project_window_iterator_instance_init (ProjectWindowIterator * self) {
+ self->priv = PROJECT_WINDOW_ITERATOR_GET_PRIVATE (self);
+}
+
+
+static void project_window_iterator_finalize (ProjectManagerIterator* obj) {
+ ProjectWindowIterator * self;
+ self = PROJECT_WINDOW_ITERATOR (obj);
+ _g_object_unref0 (self->priv->model);
+ PROJECT_MANAGER_ITERATOR_CLASS (project_window_iterator_parent_class)->finalize (obj);
+}
+
+
+GType project_window_iterator_get_type (void) {
+ static GType project_window_iterator_type_id = 0;
+ if (project_window_iterator_type_id == 0) {
+ static const GTypeInfo g_define_type_info = { sizeof (ProjectWindowIteratorClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) project_window_iterator_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ProjectWindowIterator), 0, (GInstanceInitFunc) project_window_iterator_instance_init, NULL };
+ project_window_iterator_type_id = g_type_register_static (PROJECT_MANAGER_TYPE_ITERATOR, "ProjectWindowIterator", &g_define_type_info, 0);
+ }
+ return project_window_iterator_type_id;
+}
+
+
+static void project_window_class_init (ProjectWindowClass * klass) {
+ project_window_parent_class = g_type_class_peek_parent (klass);
+ g_type_class_add_private (klass, sizeof (ProjectWindowPrivate));
+ G_OBJECT_CLASS (klass)->get_property = project_window_get_property;
+ G_OBJECT_CLASS (klass)->constructor = project_window_constructor;
+ G_OBJECT_CLASS (klass)->finalize = project_window_finalize;
+ g_object_class_override_property (G_OBJECT_CLASS (klass), PROJECT_WINDOW_LENGTH, "length");
+}
+
+
+static void project_window_project_manager_interface_init (ProjectManagerIface * iface) {
+ project_window_project_manager_parent_iface = g_type_interface_peek_parent (iface);
+ iface->iterator = project_window_real_iterator;
+ iface->get = project_window_real_get;
+ iface->add_cs = project_window_real_add_cs;
+ iface->remove_cs = project_window_real_remove_cs;
+ iface->clear = project_window_real_clear;
+ iface->get_length = project_window_real_get_length;
+}
+
+
+static void project_window_instance_init (ProjectWindow * self) {
+ self->priv = PROJECT_WINDOW_GET_PRIVATE (self);
+}
+
+
+static void project_window_finalize (GObject* obj) {
+ ProjectWindow * self;
+ self = PROJECT_WINDOW (obj);
+ _g_object_unref0 (self->priv->cs_store);
+ _g_object_unref0 (self->priv->cs_list);
+ _g_object_unref0 (self->priv->edit_menu);
+ _g_object_unref0 (self->priv->action_viewcs);
+ _g_object_unref0 (self->priv->action_exportcs);
+ _g_object_unref0 (self->priv->action_removecs);
+ G_OBJECT_CLASS (project_window_parent_class)->finalize (obj);
+}
+
+
+GType project_window_get_type (void) {
+ static GType project_window_type_id = 0;
+ if (project_window_type_id == 0) {
+ static const GTypeInfo g_define_type_info = { sizeof (ProjectWindowClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) project_window_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ProjectWindow), 0, (GInstanceInitFunc) project_window_instance_init, NULL };
+ static const GInterfaceInfo project_manager_info = { (GInterfaceInitFunc) project_window_project_manager_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
+ project_window_type_id = g_type_register_static (GTK_TYPE_WINDOW, "ProjectWindow", &g_define_type_info, 0);
+ g_type_add_interface_static (project_window_type_id, PROJECT_TYPE_MANAGER, &project_manager_info);
+ }
+ return project_window_type_id;
+}
+
+
+static void project_window_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) {
+ ProjectWindow * self;
+ self = PROJECT_WINDOW (object);
+ switch (property_id) {
+ case PROJECT_WINDOW_LENGTH:
+ g_value_set_uint (value, project_manager_get_length ((ProjectManager*) self));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+
+
+
diff --git a/src/project.vala b/src/project.vala
new file mode 100644
index 0000000..e7fab61
--- /dev/null
+++ b/src/project.vala
@@ -0,0 +1,534 @@
+using Emulation;
+using Gtk;
+using GUI;
+
+namespace Project
+{
+ public interface Manager : GLib.Object
+ {
+ public struct CSEntry
+ {
+ string name;
+ CS cs;
+
+ public CSEntry(string name, CS cs)
+ {
+ this.name = name;
+ this.cs = cs;
+ }
+ }
+
+ public abstract class Iterator
+ {
+ public abstract bool next();
+ public new abstract CSEntry get();
+ }
+
+ public abstract Iterator iterator();
+ public new abstract CSEntry get(uint index);
+ public abstract uint length { get; }
+
+ public abstract Iterator add_cs(string name, CS cs);
+ public abstract void remove_cs(Iterator iter);
+ public abstract void clear();
+
+ public bool save(string filename)
+ {
+ return false;
+ }
+
+ public bool load(string filename)
+ {
+ return false;
+ }
+ }
+
+ public class Window : Gtk.Window, Manager
+ {
+ private static const string xml_ui = """
+ <?xml version="1.0"?>
+ <interface>
+ <requires lib="gtk+" version="2.16"/>
+ <!-- interface-naming-policy project-wide -->
+ <object class="GtkUIManager" id="uimanager1">
+ <child>
+ <object class="GtkActionGroup" id="actiongroup1">
+ <child>
+ <object class="GtkAction" id="New">
+ <property name="name">New</property>
+ <property name="stock_id">gtk-new</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkAction" id="Open">
+ <property name="name">Open</property>
+ <property name="stock_id">gtk-open</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkAction" id="Save">
+ <property name="name">Save</property>
+ <property name="stock_id">gtk-save</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkAction" id="SaveAs">
+ <property name="name">SaveAs</property>
+ <property name="stock_id">gtk-save-as</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkAction" id="Quit">
+ <property name="name">Quit</property>
+ <property name="stock_id">gtk-quit</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkAction" id="ViewCS">
+ <property name="name">ViewCS</property>
+ <property name="label">_View CS</property>
+ <property name="tooltip">View the selected command stream.</property>
+ <property name="icon_name">gtk-open</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkAction" id="RemoveCS">
+ <property name="name">RemoveCS</property>
+ <property name="label">_Remove CS</property>
+ <property name="tooltip">Remove the selected command stream from the current project.</property>
+ <property name="icon_name">gtk-delete</property>
+ </object>
+ <accelerator key="Delete"/>
+ </child>
+ <child>
+ <object class="GtkAction" id="ImportCS">
+ <property name="name">ImportCS</property>
+ <property name="label">_Import CS</property>
+ <property name="tooltip">Import a new command stream to the current project.</property>
+ <property name="icon_name">gtk-add</property>
+ </object>
+ <accelerator key="i" modifiers="GDK_CONTROL_MASK"/>
+ </child>
+ <child>
+ <object class="GtkAction" id="ExportCS">
+ <property name="name">ExportCS</property>
+ <property name="label">_Export CS</property>
+ <property name="tooltip">Export the selected command stream to a file.</property>
+ <property name="icon_name">gtk-convert</property>
+ </object>
+ <accelerator key="e" modifiers="GDK_CONTROL_MASK"/>
+ </child>
+ <child>
+ <object class="GtkAction" id="About">
+ <property name="name">About</property>
+ <property name="stock_id">gtk-about</property>
+ </object>
+ <accelerator key="F1"/>
+ </child>
+ <child>
+ <object class="GtkAction" id="FileMenu">
+ <property name="name">FileMenu</property>
+ <property name="label" translatable="yes">_File</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkAction" id="EditMenu">
+ <property name="name">EditMenu</property>
+ <property name="label" translatable="yes">_Edit</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkAction" id="HelpMenu">
+ <property name="name">HelpMenu</property>
+ <property name="label" translatable="yes">_Help</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <ui>
+ <menubar name="menubar1">
+ <menu action="FileMenu" name="FileMenu">
+ <menuitem action="New" name="New"/>
+ <menuitem action="Open" name="Open"/>
+ <menuitem action="Save" name="Save"/>
+ <menuitem action="SaveAs" name="SaveAs"/>
+ <separator/>
+ <menuitem action="Quit" name="Quit"/>
+ </menu>
+ <menu action="EditMenu" name="EditMenu">
+ <menuitem action="ViewCS" name="ViewCS"/>
+ <menuitem action="ImportCS" name="ImportCS"/>
+ <menuitem action="ExportCS" name="ExportCS"/>
+ <separator/>
+ <menuitem action="RemoveCS" name="RemoveCS"/>
+ </menu>
+ <menu action="HelpMenu" name="HelpMenu">
+ <menuitem action="About" name="About"/>
+ </menu>
+ </menubar>
+ <toolbar name="toolbar1">
+ <toolitem action="New" name="New"/>
+ <toolitem action="Open" name="Open"/>
+ <toolitem action="Save" name="Save"/>
+ <separator/>
+ <toolitem action="ImportCS" name="ImportCS"/>
+ <toolitem action="ExportCS" name="ExportCS"/>
+ <separator/>
+ <toolitem action="RemoveCS" name="RemoveCS"/>
+ </toolbar>
+ <popup name="popup1">
+ <menuitem action="ViewCS" name="ViewCS"/>
+ <menuitem action="ExportCS" name="ExportCS"/>
+ <separator/>
+ <menuitem action="RemoveCS" name="RemoveCS"/>
+ </popup>
+ </ui>
+ </object>
+ <object class="GtkVBox" id="mainbox">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object constructor="uimanager1" class="GtkMenuBar" id="menubar1">
+ <property name="visible">True</property>
+ <child internal-child="accessible">
+ <object class="AtkObject" id="a11y-menubar">
+ <property name="AtkObject::accessible-name">The menubar</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ </packing>
+ </child>
+ <child>
+ <object constructor="uimanager1" class="GtkToolbar" id="toolbar1">
+ <property name="visible">True</property>
+ <child internal-child="accessible">
+ <object class="AtkObject" id="a11y-toolbar">
+ <property name="AtkObject::accessible-name">The toolbar</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolledwindow1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">automatic</property>
+ <property name="vscrollbar_policy">automatic</property>
+ <child>
+ <object class="GtkTreeView" id="cs_list">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="reorderable">True</property>
+ <property name="model">cs_store</property>
+ <child>
+ <object class="GtkTreeViewColumn" id="pkts_column">
+ <property name="title">Packets</property>
+ <child>
+ <object class="GtkCellRendererText" id="pkts_cell"/>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkTreeViewColumn" id="treeviewcolumn1">
+ <property name="title">Name</property>
+ <child>
+ <object class="GtkCellRendererText" id="cellrenderertext1"/>
+ <attributes>
+ <attribute name="text">0</attribute>
+ </attributes>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ <object class="GtkListStore" id="cs_store">
+ <columns>
+ <!-- column-name Name -->
+ <column type="gchararray"/>
+ <!-- column-name CS -->
+ <column type="GObject"/>
+ </columns>
+ </object>
+ <object constructor="uimanager1" class="GtkMenu" id="popup1">
+ <child internal-child="accessible">
+ <object class="AtkObject" id="a11y-popup">
+ <property name="AtkObject::accessible-name">The popup menu</property>
+ </object>
+ </child>
+ </object>
+ </interface>
+ """;
+
+ private static const string about_xml_ui = """
+ <?xml version="1.0"?>
+ <interface>
+ <requires lib="gtk+" version="2.16"/>
+ <!-- interface-naming-policy project-wide -->
+ <object class="GtkAboutDialog" id="about_dialog">
+ <property name="border_width">5</property>
+ <property name="type_hint">normal</property>
+ <property name="skip_taskbar_hint">True</property>
+ <property name="has_separator">False</property>
+ <property name="program_name">Radeon Simulator</property>
+ <property name="copyright" translatable="yes">Copyright &#xA9; 2010 Joakim Sindholt</property>
+ <property name="comments" translatable="yes">A simulator for Radeon GPUs</property>
+ <property name="website">http://cgit.freedesktop.org/~jsindholt/rsim</property>
+ <property name="license" translatable="yes">This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.</property>
+ <property name="authors">Joakim Sindholt &lt;opensource@zhasha.com&gt;</property>
+ <!-- This path shouldn't be hardcoded -->
+ <property name="logo">/usr/share/pixmaps/rsim.png</property>
+ <property name="wrap_license">True</property>
+ <child internal-child="vbox">
+ <object class="GtkVBox" id="dialog-vbox1">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">2</property>
+ <child internal-child="action_area">
+ <object class="GtkHButtonBox" id="dialog-action_area1">
+ <property name="visible">True</property>
+ <property name="layout_style">end</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </interface>
+ """;
+
+ private ListStore cs_store;
+ private TreeView cs_list;
+ private Menu edit_menu;
+
+ private Action action_viewcs;
+ private Action action_exportcs;
+ private Action action_removecs;
+
+ construct {
+ var builder = new Builder();
+ try {
+ builder.add_from_string(xml_ui, xml_ui.length);
+ } catch (Error e) {
+ stderr.printf("Unable to construct main window: %s.\n", e.message);
+ assert(false);
+ }
+ set_size_request(400, 200);
+ title = "Radeon Simulator";
+
+ /* Packets column */
+ var col = builder.get_object("pkts_column") as TreeViewColumn;
+ var cell = builder.get_object("pkts_cell") as CellRendererText;
+ col.set_cell_data_func(cell, (col, cell, model, iter) => {
+ CS cs;
+ model.get(iter, 1, out cs, -1);
+ assert(cs != null);
+ (cell as CellRendererText).text = cs.length.to_string();
+ });
+
+ /* connect actions */
+ action_viewcs = builder.get_object("ViewCS") as Action;
+ action_exportcs = builder.get_object("ExportCS") as Action;
+ action_removecs = builder.get_object("RemoveCS") as Action;
+ var action_importcs = builder.get_object("ImportCS") as Action;
+
+ action_viewcs.activate.connect((source) => { open_csview(); });
+ action_importcs.activate.connect((source) => { var d = new CSImport(this); d.run(); });
+ action_exportcs.activate.connect((source) => { open_csexport(); });
+ action_removecs.activate.connect((source) => { remove_selected_cs(); });
+
+ /* about dialog is kind of a special case. */
+ (builder.get_object("About") as Action).activate.connect((source) => {
+ var about = new Builder();
+ try {
+ about.add_from_string(about_xml_ui, about_xml_ui.length);
+ var dlg = about.get_object("about_dialog") as AboutDialog;
+ dlg.run();
+ dlg.destroy();
+ } catch (Error e) { }
+ });
+
+ /* menus */
+ cs_store = builder.get_object("cs_store") as ListStore;
+ cs_list = builder.get_object("cs_list") as TreeView;
+ edit_menu = builder.get_object("popup1") as Menu;
+ /* double clicking a row */
+ cs_list.row_activated.connect((path, column) => { open_csview(); });
+ /* right clicking */
+ cs_list.button_press_event.connect((event) => {
+ CS? cs = get_selected_cs();
+ if (cs != null && event.type == Gdk.EventType.BUTTON_PRESS && event.button == 3) {
+ edit_menu.popup(null, null, null, event.button, event.time);
+ }
+ });
+ /* selecting something */
+ cs_list.cursor_changed.connect((source) => {
+ edit_set_sensitive(cs_list.get_selection().get_selected(null, null));
+ });
+ edit_set_sensitive(false);
+
+ add(builder.get_object("mainbox") as Widget);
+ destroy.connect(main_quit);
+
+ try {
+ /* XXX This shouldn't be hardcoded */
+ set_icon_from_file("/usr/share/pixmaps/rsim.png");
+ } catch (Error e) { /* don't care */ }
+ }
+
+ /* helpers */
+ private void edit_set_sensitive(bool setting)
+ {
+ action_viewcs.sensitive = setting;
+ action_exportcs.sensitive = setting;
+ action_removecs.sensitive = setting;
+ }
+
+ private CS? get_selected_cs()
+ {
+ TreeIter iter;
+ CS cs;
+
+ var selection = cs_list.get_selection();
+ if (!selection.get_selected(null, out iter)) { return null; }
+
+ cs_store.get(iter, 1, out cs, -1);
+ return cs;
+ }
+
+ private void open_csview()
+ {
+ CS? cs = get_selected_cs();
+ if (cs != null) {
+ var csv = new CSView(cs);
+ csv.show_all();
+ }
+ }
+
+ private void open_csexport()
+ {
+ CS? cs = get_selected_cs();
+ if (cs != null) {
+ var d = new CSExport(cs);
+ d.run();
+ }
+ }
+
+ private void remove_selected_cs()
+ {
+ TreeIter iter;
+
+ var selection = cs_list.get_selection();
+ if (!selection.get_selected(null, out iter)) { return; }
+
+ remove_cs(new Iterator(cs_store, iter, true));
+ }
+
+ /*** BELOW: interface Manager ***/
+ public class Iterator : Manager.Iterator
+ {
+ private ListStore model;
+ internal TreeIter iter;
+ private bool first;
+ private bool valid;
+
+ public Iterator(ListStore model, TreeIter iter, bool valid = true)
+ {
+ this.model = model;
+ this.iter = iter;
+ this.first = true;
+ this.valid = valid;
+ }
+
+ public override bool next()
+ {
+ if (first) {
+ first = false;
+ return valid;
+ }
+ return model.iter_next(ref iter);
+ }
+
+ public new override Manager.CSEntry get()
+ {
+ string name;
+ CS cs;
+ model.get(iter, 0, out name, 1, out cs, -1);
+ return Manager.CSEntry(name, cs);
+ }
+ }
+
+ public Manager.Iterator iterator()
+ {
+ TreeIter iter;
+ var valid = cs_store.get_iter_first(out iter);
+ return new Iterator(cs_store, iter, valid);
+ }
+
+ public new Manager.CSEntry get(uint index)
+ {
+ TreeIter iter;
+ TreePath path = new TreePath.from_indices((int)index, -1);
+ var valid = cs_store.get_iter(out iter, path);
+ return (new Iterator(cs_store, iter, valid)).get();
+ }
+
+ public uint length { get { return (uint)cs_store.iter_n_children(null); } }
+
+ public Manager.Iterator add_cs(string name, CS cs)
+ {
+ TreeIter iter;
+ cs_store.append(out iter);
+ cs_store.set(iter, 0, name, 1, cs, -1);
+ return new Iterator(cs_store, iter);
+ }
+
+ public void remove_cs(Manager.Iterator iter)
+ {
+ TreeIter it = (iter as Iterator).iter;
+
+ string name;
+ cs_store.get(it, 0, out name, -1);
+
+ var d = new MessageDialog(this, DialogFlags.DESTROY_WITH_PARENT,
+ MessageType.QUESTION, ButtonsType.YES_NO,
+ "Are you sure you want to delete the command stream '%s'", name);
+ int result = d.run();
+ d.destroy();
+ if (result != ResponseType.YES) { return; }
+
+ cs_store.remove(it);
+ }
+
+ public void clear()
+ {
+ var d = new MessageDialog(this, DialogFlags.DESTROY_WITH_PARENT,
+ MessageType.QUESTION, ButtonsType.YES_NO,
+ "Are you sure you want to clear all command streams?");
+ int result = d.run();
+ d.destroy();
+ if (result != ResponseType.YES) { return; }
+
+ cs_store.clear();
+ }
+ }
+}
diff --git a/src/registers.c b/src/registers.c
index 9ff60ea..b61f0bc 100644
--- a/src/registers.c
+++ b/src/registers.c
@@ -368,10 +368,10 @@ static guint32* _uint32_dup (guint32* self);
void emulation_bitfield_enum_append (EmulationBitfieldEnum* self, EmulationBitfieldValue* v);
EmulationBitfieldEnum* emulation_bitfield_enum_new (void);
EmulationBitfieldEnum* emulation_bitfield_enum_construct (GType object_type);
-static void _lambda3_ (void* ptr);
-static void __lambda3__gdestroy_notify (void* data);
static void _lambda4_ (void* ptr);
static void __lambda4__gdestroy_notify (void* data);
+static void _lambda5_ (void* ptr);
+static void __lambda5__gdestroy_notify (void* data);
static GObject * emulation_bitfield_enum_constructor (GType type, guint n_construct_properties, GObjectConstructParam * construct_properties);
static void emulation_bitfield_enum_finalize (GObject* obj);
GType emulation_bitfield_get_type (void);
@@ -511,8 +511,6 @@ GType emulation_spec_parser_get_type (void);
enum {
EMULATION_SPEC_PARSER_DUMMY_PROPERTY
};
-static void _lambda5_ (void* ptr);
-static void __lambda5__gdestroy_notify (void* data);
static void _lambda6_ (void* ptr);
static void __lambda6__gdestroy_notify (void* data);
static void _lambda7_ (void* ptr);
@@ -525,6 +523,8 @@ static void _lambda10_ (void* ptr);
static void __lambda10__gdestroy_notify (void* data);
static void _lambda11_ (void* ptr);
static void __lambda11__gdestroy_notify (void* data);
+static void _lambda12_ (void* ptr);
+static void __lambda12__gdestroy_notify (void* data);
EmulationSpecParser* emulation_spec_parser_new (GHashTable** _info, GHashTable** _regs);
EmulationSpecParser* emulation_spec_parser_construct (GType object_type, GHashTable** _info, GHashTable** _regs);
static inline xmlNode* emulation_spec_parser_find_variant (EmulationSpecParser* self, const char* name);
@@ -762,24 +762,24 @@ EmulationBitfieldEnum* emulation_bitfield_enum_new (void) {
}
-static void _lambda3_ (void* ptr) {
+static void _lambda4_ (void* ptr) {
g_free (ptr);
}
-static void __lambda3__gdestroy_notify (void* data) {
- _lambda3_ (data);
+static void __lambda4__gdestroy_notify (void* data) {
+ _lambda4_ (data);
}
-static void _lambda4_ (void* ptr) {
+static void _lambda5_ (void* ptr) {
void* _tmp0_;
g_object_unref ((_tmp0_ = ptr, G_IS_OBJECT (_tmp0_) ? ((GObject*) _tmp0_) : NULL));
}
-static void __lambda4__gdestroy_notify (void* data) {
- _lambda4_ (data);
+static void __lambda5__gdestroy_notify (void* data) {
+ _lambda5_ (data);
}
@@ -792,7 +792,7 @@ static GObject * emulation_bitfield_enum_constructor (GType type, guint n_constr
self = EMULATION_BITFIELD_ENUM (obj);
{
GHashTable* _tmp0_;
- self->priv->vals = (_tmp0_ = g_hash_table_new_full (g_int_hash, g_int_equal, __lambda3__gdestroy_notify, __lambda4__gdestroy_notify), _g_hash_table_unref0 (self->priv->vals), _tmp0_);
+ self->priv->vals = (_tmp0_ = g_hash_table_new_full (g_int_hash, g_int_equal, __lambda4__gdestroy_notify, __lambda5__gdestroy_notify), _g_hash_table_unref0 (self->priv->vals), _tmp0_);
}
return obj;
}
@@ -1893,24 +1893,24 @@ static void emulation_register_list_get_property (GObject * object, guint proper
}
-static void _lambda5_ (void* ptr) {
+static void _lambda6_ (void* ptr) {
g_free (ptr);
}
-static void __lambda5__gdestroy_notify (void* data) {
- _lambda5_ (data);
+static void __lambda6__gdestroy_notify (void* data) {
+ _lambda6_ (data);
}
-static void _lambda6_ (void* ptr) {
+static void _lambda7_ (void* ptr) {
void* _tmp0_;
g_object_unref ((_tmp0_ = ptr, G_IS_OBJECT (_tmp0_) ? ((GObject*) _tmp0_) : NULL));
}
-static void __lambda6__gdestroy_notify (void* data) {
- _lambda6_ (data);
+static void __lambda7__gdestroy_notify (void* data) {
+ _lambda7_ (data);
}
@@ -1919,19 +1919,8 @@ static gpointer _g_hash_table_ref0 (gpointer self) {
}
-static void _lambda7_ (void* ptr) {
- g_free (ptr);
-}
-
-
-static void __lambda7__gdestroy_notify (void* data) {
- _lambda7_ (data);
-}
-
-
static void _lambda8_ (void* ptr) {
- void* _tmp0_;
- g_object_unref ((_tmp0_ = ptr, G_IS_OBJECT (_tmp0_) ? ((GObject*) _tmp0_) : NULL));
+ g_free (ptr);
}
@@ -1941,7 +1930,8 @@ static void __lambda8__gdestroy_notify (void* data) {
static void _lambda9_ (void* ptr) {
- g_free (ptr);
+ void* _tmp0_;
+ g_object_unref ((_tmp0_ = ptr, G_IS_OBJECT (_tmp0_) ? ((GObject*) _tmp0_) : NULL));
}
@@ -1961,8 +1951,7 @@ static void __lambda10__gdestroy_notify (void* data) {
static void _lambda11_ (void* ptr) {
- void* _tmp0_;
- g_object_unref ((_tmp0_ = ptr, G_IS_OBJECT (_tmp0_) ? ((GObject*) _tmp0_) : NULL));
+ g_free (ptr);
}
@@ -1971,6 +1960,17 @@ static void __lambda11__gdestroy_notify (void* data) {
}
+static void _lambda12_ (void* ptr) {
+ void* _tmp0_;
+ g_object_unref ((_tmp0_ = ptr, G_IS_OBJECT (_tmp0_) ? ((GObject*) _tmp0_) : NULL));
+}
+
+
+static void __lambda12__gdestroy_notify (void* data) {
+ _lambda12_ (data);
+}
+
+
EmulationSpecParser* emulation_spec_parser_construct (GType object_type, GHashTable** _info, GHashTable** _regs) {
EmulationSpecParser* self;
GHashTable* _tmp1_;
@@ -1986,10 +1986,10 @@ EmulationSpecParser* emulation_spec_parser_construct (GType object_type, GHashTa
*_regs = NULL;
}
self = (EmulationSpecParser*) g_type_create_instance (object_type);
- self->priv->info = (_tmp1_ = _g_hash_table_ref0 (*_info = (_tmp0_ = g_hash_table_new_full (g_str_hash, g_str_equal, __lambda5__gdestroy_notify, __lambda6__gdestroy_notify), _g_hash_table_unref0 (*_info), _tmp0_)), _g_hash_table_unref0 (self->priv->info), _tmp1_);
- self->priv->regs = (_tmp3_ = _g_hash_table_ref0 (*_regs = (_tmp2_ = g_hash_table_new_full (g_int_hash, g_int_equal, __lambda7__gdestroy_notify, __lambda8__gdestroy_notify), _g_hash_table_unref0 (*_regs), _tmp2_)), _g_hash_table_unref0 (self->priv->regs), _tmp3_);
- self->priv->groups_map = (_tmp4_ = g_hash_table_new_full (g_str_hash, g_str_equal, __lambda9__gdestroy_notify, NULL), _g_hash_table_unref0 (self->priv->groups_map), _tmp4_);
- self->priv->enums_map = (_tmp5_ = g_hash_table_new_full (g_str_hash, g_str_equal, __lambda10__gdestroy_notify, __lambda11__gdestroy_notify), _g_hash_table_unref0 (self->priv->enums_map), _tmp5_);
+ self->priv->info = (_tmp1_ = _g_hash_table_ref0 (*_info = (_tmp0_ = g_hash_table_new_full (g_str_hash, g_str_equal, __lambda6__gdestroy_notify, __lambda7__gdestroy_notify), _g_hash_table_unref0 (*_info), _tmp0_)), _g_hash_table_unref0 (self->priv->info), _tmp1_);
+ self->priv->regs = (_tmp3_ = _g_hash_table_ref0 (*_regs = (_tmp2_ = g_hash_table_new_full (g_int_hash, g_int_equal, __lambda8__gdestroy_notify, __lambda9__gdestroy_notify), _g_hash_table_unref0 (*_regs), _tmp2_)), _g_hash_table_unref0 (self->priv->regs), _tmp3_);
+ self->priv->groups_map = (_tmp4_ = g_hash_table_new_full (g_str_hash, g_str_equal, __lambda10__gdestroy_notify, NULL), _g_hash_table_unref0 (self->priv->groups_map), _tmp4_);
+ self->priv->enums_map = (_tmp5_ = g_hash_table_new_full (g_str_hash, g_str_equal, __lambda11__gdestroy_notify, __lambda12__gdestroy_notify), _g_hash_table_unref0 (self->priv->enums_map), _tmp5_);
return self;
}