diff --git a/res/gtk/connection-view.blp b/res/gtk/connection-view.blp index cc2d737..af03784 100644 --- a/res/gtk/connection-view.blp +++ b/res/gtk/connection-view.blp @@ -14,11 +14,13 @@ template $PsequelConnectionView : Adw.Bin { [start] $PsequelConnectionSidebar sidebar { + window: bind template.window; width-request: 300; } [end] $PsequelConnectionForm form { + window: bind template.window; } } diff --git a/res/gtk/query-view.blp b/res/gtk/query-view.blp index 896e3d5..699e8f1 100644 --- a/res/gtk/query-view.blp +++ b/res/gtk/query-view.blp @@ -239,7 +239,7 @@ template $PsequelQueryView : Adw.Bin { icon-name: "library-symbolic"; title: "Structure"; child: $PsequelTableStructure { - + window: bind template.window; }; } @@ -248,7 +248,7 @@ template $PsequelQueryView : Adw.Bin { title: "Data"; icon-name: "object-rows-symbolic"; child: $PsequelTableData { - + window: bind template.window; }; } @@ -257,7 +257,7 @@ template $PsequelQueryView : Adw.Bin { icon-name: "terminal-symbolic"; title: "Query"; child: $PsequelQueryEditor { - + window: bind template.window; }; } } diff --git a/res/gtk/window.blp b/res/gtk/window.blp index b11cfaa..baf0009 100644 --- a/res/gtk/window.blp +++ b/res/gtk/window.blp @@ -14,14 +14,14 @@ template $PsequelWindow : Adw.ApplicationWindow { StackPage { name: "connection-view"; child: $PsequelConnectionView { - + window: bind template; }; } StackPage { name: "query-view"; child: $PsequelQueryView { - + window: bind template; }; } } diff --git a/src/application.vala b/src/application.vala index 563fa8f..945157d 100644 --- a/src/application.vala +++ b/src/application.vala @@ -73,7 +73,7 @@ namespace Psequel { app_signals = new AppSignals (); app.app_signals = app_signals; - // query_service = new QueryService (background); + // query_service = new QueryService (background); table_list = new ObservableArrayList (); load_user_data (); @@ -145,7 +145,6 @@ namespace Psequel { window.present (); } - private void on_preferences_action () { if (this.preference == null) { @@ -158,12 +157,18 @@ namespace Psequel { this.preference.present (); } + /** + * Create a window and inject resources. + * + * Because child widget is created before window, signals can only be connect when window is init. + * This result to another event to notify window is ready and widget should setup signals + */ private Window new_window () { var signals = new WindowSignals (); var window = new Window (this); var query_service = new QueryService (ResourceManager.instance ().background); - window.signals = (owned)signals; - window.query_service = (owned)query_service; + window.signals = (owned) signals; + window.query_service = (owned) query_service; app_signals.window_ready (); return window; diff --git a/src/services/signal.vala b/src/services/signal.vala index 7f9a091..da0f2b2 100644 --- a/src/services/signal.vala +++ b/src/services/signal.vala @@ -41,6 +41,7 @@ namespace Psequel { */ public class AppSignals : Object { + /** Signal emit when window is created and {@link WindowSignals} can be used. */ public signal void window_ready (); public AppSignals () { diff --git a/src/ui/connection/connection_form.vala b/src/ui/connection/connection_form.vala index 1adc7ed..b9e3b7e 100644 --- a/src/ui/connection/connection_form.vala +++ b/src/ui/connection/connection_form.vala @@ -8,6 +8,9 @@ namespace Psequel { private unowned QueryService query_service; private unowned WindowSignals signals; + /** Binded in blueprints file */ + public Window window { get; set; } + private Connection _conn; public Connection mapped_conn { get { @@ -21,39 +24,33 @@ namespace Psequel { public ConnectionSidebar sidebar { get; set; } - public ConnectionForm (ConnectionView parent) { - Object (); + public ConnectionForm (Window window) { + Object (window: window); } construct { debug ("[CONTRUCT] %s", this.name); - // Create group to maped the entry widget to connection data. this.binddings = new BindingGroup (); set_up_bindings (binddings); - setup_signals (); + + ResourceManager.instance ().app_signals.window_ready.connect (setup_signals); } private void setup_signals () { - // signals can only be connected after the window is ready. - // because widget access window to get signals. - ResourceManager.instance ().app_signals.window_ready.connect (() => { - var window = get_parrent_window (this); - signals = window.signals; + signals = window.signals; - signals.selection_changed.connect ((conn) => { - mapped_conn = conn; - }); - - signals.request_database_conn.connect ((conn) => { - mapped_conn = conn; - connect_btn.clicked (); - }); + signals.selection_changed.connect ((conn) => { + mapped_conn = conn; + }); - query_service = window.query_service; + signals.request_database_conn.connect ((conn) => { + mapped_conn = conn; + connect_btn.clicked (); }); + query_service = window.query_service; } private void set_up_bindings (BindingGroup group) { @@ -92,7 +89,6 @@ namespace Psequel { debug ("Emit database_connected"); signals.database_connected (); - } catch (PsequelError err) { var dialog = create_dialog ("Connection error", err.message); dialog.present (); diff --git a/src/ui/connection/connection_recent.vala b/src/ui/connection/connection_recent.vala index dd67018..d7070bf 100644 --- a/src/ui/connection/connection_recent.vala +++ b/src/ui/connection/connection_recent.vala @@ -19,6 +19,8 @@ namespace Psequel { { "export", on_export_connection }, }; + /** Binded in blueprints file */ + public Window window { get; set; } private Application app; /* This is null ultil window ready event, which after contruct block */ @@ -26,27 +28,24 @@ namespace Psequel { private unowned ObservableArrayList model; - public ConnectionSidebar (ConnectionView parent) { - Object (); + public ConnectionSidebar (Window window) { + Object (window: window); } construct { debug ("[CONTRUCT] %s", this.name); - this.app = ResourceManager.instance ().app; - this.model = ResourceManager.instance ().recent_connections; - - setup_signals (); + with (ResourceManager.instance ()) { + this.app = app; + this.model = recent_connections; + app_signals.window_ready.connect (setup_signals); + } } private void setup_signals () { - // signals can only be connected after the window is ready. - // because widget access window to get signals. - ResourceManager.instance ().app_signals.window_ready.connect (() => { - signals = get_parrent_window (this).signals; - this.setup_bindings (); - this.setup_action (); - }); + signals = window.signals; + this.setup_bindings (); + this.setup_action (); } private void setup_action () { diff --git a/src/ui/connection/connection_view.vala b/src/ui/connection/connection_view.vala index 8938fd2..6d4162b 100644 --- a/src/ui/connection/connection_view.vala +++ b/src/ui/connection/connection_view.vala @@ -6,15 +6,13 @@ namespace Psequel { [GtkTemplate (ui = "/me/ppvan/psequel/gtk/connection-view.ui")] public class ConnectionView : Adw.Bin { - public void hello () { - debug ("Hello"); - } + public Window window {get; set;} public ConnectionView (Application app) { Object (); - sidebar = new ConnectionSidebar (this); - form = new ConnectionForm (this); + sidebar = new ConnectionSidebar (window); + form = new ConnectionForm (window); } // Connect event. diff --git a/src/ui/query/query_editor.vala b/src/ui/query/query_editor.vala index c74daf1..fc50992 100644 --- a/src/ui/query/query_editor.vala +++ b/src/ui/query/query_editor.vala @@ -9,6 +9,8 @@ namespace Psequel { private LanguageManager lang_manager; private StyleSchemeManager style_manager; + /** Binded in blueprints file */ + public Window window { get; set; } public class QueryEditor () { Object (); @@ -16,22 +18,18 @@ namespace Psequel { construct { debug ("[CONTRUCT] %s", this.name); - debug ("Contruct view"); lang_manager = LanguageManager.get_default (); style_manager = StyleSchemeManager.get_default (); default_setttings (); - setup_signals (); + ResourceManager.instance ().app_signals.window_ready.connect (setup_signals); } private void setup_signals () { - ResourceManager.instance ().app_signals.window_ready.connect (() => { - query_service = get_parrent_window (this).query_service; - }); + query_service = window.query_service; } - void default_setttings () { var lang = lang_manager.get_language ("sql"); @@ -58,6 +56,7 @@ namespace Psequel { query_results.show_loading (); int64 exec_time = 0; var relation = yield query_service.exec_query (query, out exec_time); + query_results.show_result (relation); update_status (relation, exec_time); @@ -66,7 +65,6 @@ namespace Psequel { } } - [GtkCallback] private void run_query_cb (Gtk.Button btn) { @@ -79,7 +77,6 @@ namespace Psequel { debug ("Exec query: %s", text); run_query.begin (text); - } private void update_status (Relation relation, int64 exec_time) { diff --git a/src/ui/query/query_view.vala b/src/ui/query/query_view.vala index 998f53b..3cba147 100644 --- a/src/ui/query/query_view.vala +++ b/src/ui/query/query_view.vala @@ -10,8 +10,10 @@ namespace Psequel { public const string TABLE_STRUCTURE = "structure-view"; public const string QUERY_EDITOR = "query-editor"; + public Window window {get; set;} private unowned QueryService query_service; private unowned WindowSignals signals; + private SchemaService schema_service; private ObservableArrayList schemas; @@ -45,8 +47,8 @@ namespace Psequel { tbname_filter = new Gtk.StringFilter (exp); vname_filter = new Gtk.StringFilter (exp); - setup_signals (); set_up_schema (); + ResourceManager.instance ().app_signals.window_ready.connect (setup_signals); } @@ -149,12 +151,8 @@ namespace Psequel { } private void setup_signals () { - // signals can only be connected after the window is ready. - // because widget access window to get signals. - ResourceManager.instance ().app_signals.window_ready.connect (() => { - var window = get_parrent_window (this); - signals = window.signals; + signals = window.signals; signals.database_connected.connect (() => { debug ("Handle database_connected."); @@ -168,7 +166,6 @@ namespace Psequel { schema_service = new SchemaService (query_service); schemas = new ObservableArrayList (); - }); } [GtkCallback] diff --git a/src/ui/query/table_data_view.vala b/src/ui/query/table_data_view.vala index b8e8b74..3174eaf 100644 --- a/src/ui/query/table_data_view.vala +++ b/src/ui/query/table_data_view.vala @@ -4,6 +4,7 @@ namespace Psequel { [GtkTemplate (ui = "/me/ppvan/psequel/gtk/table-data-view.ui")] public class TableData : Gtk.Box { + public Window window {get; set;} private unowned WindowSignals signals; private QueryService query_service; @@ -26,7 +27,7 @@ namespace Psequel { var setting = ResourceManager.instance ().settings; setting.bind ("query-limit", this, "query-limit", SettingsBindFlags.DEFAULT); - setup_signals (); + ResourceManager.instance ().app_signals.window_ready.connect (setup_signals); } @@ -74,7 +75,7 @@ namespace Psequel { // signals can only be connected after the window is ready. // because widget access window to get signals. ResourceManager.instance ().app_signals.window_ready.connect (() => { - signals = get_parrent_window (this).signals; + signals = window.signals; signals.table_selected_changed.connect ((tbname) => { this.tbname = tbname; @@ -92,7 +93,7 @@ namespace Psequel { this.schema = schema; }); - query_service = get_parrent_window (this).query_service; + query_service = window.query_service; }); } diff --git a/src/ui/table/table_structure_view.vala b/src/ui/table/table_structure_view.vala index affbda3..aed2a3e 100644 --- a/src/ui/table/table_structure_view.vala +++ b/src/ui/table/table_structure_view.vala @@ -5,13 +5,11 @@ namespace Psequel { private unowned WindowSignals signals; + /** Binded in blueprints file */ + public Window window { get; set; } + private Schema _cur_schema; - // Keep ref for the factory to exist. - // private Gee.ArrayList facts; - // private Gtk.StringFilter col_filter; - // private Gtk.StringFilter idx_filter; - // private Gtk.StringFilter fk_filter; private Schema cur_schema { get { @@ -31,36 +29,29 @@ namespace Psequel { construct { debug ("[CONTRUCT] %s", this.name); - setup_signals (); + ResourceManager.instance ().app_signals.window_ready.connect (setup_signals); } private void setup_signals () { + signals = window.signals; - // signals can only be connected after the window is ready. - // because widget access window to get signals. - ResourceManager.instance ().app_signals.window_ready.connect (() => { - signals = get_parrent_window (this).signals; + signals.schema_changed.connect ((schema) => { + debug ("%s", schema.name); + cur_schema = schema; - signals.schema_changed.connect ((schema) => { - debug ("%s", schema.name); - cur_schema = schema; - - columns.table = " "; - indexes.table = " "; - foreign_keys.table = " "; - }); - - signals.table_selected_changed.connect ((tbname) => { - debug ("Handle table_selected_changed: %s", tbname); - columns.table = tbname; - indexes.table = tbname; - foreign_keys.table = tbname; - }); + columns.table = " "; + indexes.table = " "; + foreign_keys.table = " "; }); + signals.table_selected_changed.connect ((tbname) => { + debug ("Handle table_selected_changed: %s", tbname); + columns.table = tbname; + indexes.table = tbname; + foreign_keys.table = tbname; + }); } - [GtkChild] private unowned TableColInfo columns; [GtkChild] @@ -68,5 +59,4 @@ namespace Psequel { [GtkChild] private unowned TableFKInfo foreign_keys; } - } \ No newline at end of file diff --git a/src/ui/window.vala b/src/ui/window.vala index 235229d..d546981 100644 --- a/src/ui/window.vala +++ b/src/ui/window.vala @@ -36,22 +36,16 @@ namespace Psequel { debug ("[CONTRUCT] %s", this.name); with (ResourceManager.instance ()) { - settings.bind ("window-width", this, - "default-width", SettingsBindFlags.DEFAULT); - settings.bind ("window-height", this, - "default-height", SettingsBindFlags.DEFAULT); - } + settings.bind ("window-width", this, "default-width", SettingsBindFlags.DEFAULT); + settings.bind ("window-height", this, "default-height", SettingsBindFlags.DEFAULT); - setup_signals (); + app_signals.window_ready.connect (setup_signals); + } } private void setup_signals () { - // signals can only be connected after the window is ready. - // because widget access window to get signals. - ResourceManager.instance ().app_signals.window_ready.connect (() => { - signals.database_connected.connect (() => { - navigate_to (Views.QUERY); - }); + signals.database_connected.connect (() => { + navigate_to (Views.QUERY); }); }