diff options
author | Joakim Sindholt <opensource@zhasha.com> | 2010-04-09 22:55:58 +0200 |
---|---|---|
committer | Joakim Sindholt <opensource@zhasha.com> | 2010-04-09 22:55:58 +0200 |
commit | 01f1ef23893b6e2fc24c1f6695d1eb9704fb3cd0 (patch) | |
tree | 8cc74e5bb566af89621a14e272b1dc63e4d3a5d3 | |
parent | 1db9644c4c6ba887688c81b91a3a4f61dfeb314c (diff) |
-rw-r--r-- | Makefile.am | 1 | ||||
-rw-r--r-- | src/csexport.c | 12 | ||||
-rw-r--r-- | src/csimport.c | 148 | ||||
-rw-r--r-- | src/csimport.vala | 11 | ||||
-rw-r--r-- | src/csview.c | 12 | ||||
-rw-r--r-- | src/main.c | 638 | ||||
-rw-r--r-- | src/main.vala | 452 | ||||
-rw-r--r-- | src/project.c | 1181 | ||||
-rw-r--r-- | src/project.vala | 534 | ||||
-rw-r--r-- | src/registers.c | 72 |
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_); @@ -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 © 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 <http://www.gnu.org/licenses/>.</property>\n <property name=\"authors\">Joakim Sindholt <opensource@zhasha.com></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 © 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 <http://www.gnu.org/licenses/>.</property> - <property name="authors">Joakim Sindholt <opensource@zhasha.com></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 © 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 <http://www.gnu.org/licenses/>.</property>\n <property name=\"authors\">Joakim Sindholt <opensource@zhasha.com></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 © 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 <http://www.gnu.org/licenses/>.</property> + <property name="authors">Joakim Sindholt <opensource@zhasha.com></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; } |