From 87fd4dfb9862c493a0ad91c4981bc3dbf38d7b8a Mon Sep 17 00:00:00 2001 From: Timothy Warren Date: Thu, 31 May 2012 14:18:37 -0400 Subject: [PATCH] Miscellaneous improvements --- OpenSQLManager.php | 5 +- sys/common/settings.php | 4 +- sys/widgets/connection_sidebar.php | 9 +-- sys/windows/connection_manager.php | 116 ++++++++++++++++++++++++++--- sys/windows/main.php | 8 +- 5 files changed, 120 insertions(+), 22 deletions(-) diff --git a/OpenSQLManager.php b/OpenSQLManager.php index aab6408..d3fd383 100644 --- a/OpenSQLManager.php +++ b/OpenSQLManager.php @@ -93,7 +93,7 @@ function exception_error_handler($errno, $errstr, $errfile, $errline) // Do this after the two compatibility checks for cleaner output // Note that this will throw exceptions on notices -// set_error_handler("OpenSQLManager\exception_error_handler", E_ERROR | E_WARNING | E_NOTICE); +set_error_handler("OpenSQLManager\exception_error_handler", -1); // -------------------------------------------------------------------------- @@ -139,7 +139,7 @@ function osm_autoload($class) // -------------------------------------------------------------------------- // Load everything so that we don't have to do requires later -require_once(BASE_DIR . '/common/functions.php'); +array_map('OpenSQLManager\do_include', glob(BASE_DIR.'/common/*.php')); spl_autoload_register('OpenSQLManager\osm_autoload'); // -------------------------------------------------------------------------- @@ -179,6 +179,7 @@ class OpenSQLManager extends \wxApp { */ public function OnExit() { + \wxExit(); return 0; } } diff --git a/sys/common/settings.php b/sys/common/settings.php index 56ba2bb..320bd40 100644 --- a/sys/common/settings.php +++ b/sys/common/settings.php @@ -69,7 +69,7 @@ class Settings { { //Create the file! touch($path); - $this->current = new stdClass(); + $this->current = new \stdClass(); } else { @@ -79,7 +79,7 @@ class Settings { // Add the DB object under the settings if it doesn't already exist if( ! isset($this->current->dbs)) { - $this->current->dbs = new stdClass(); + $this->current->dbs = new \stdClass(); } } diff --git a/sys/widgets/connection_sidebar.php b/sys/widgets/connection_sidebar.php index 4daf409..0df5c3d 100644 --- a/sys/widgets/connection_sidebar.php +++ b/sys/widgets/connection_sidebar.php @@ -27,7 +27,7 @@ class Connection_Sidebar extends \wxPanel { const MENU_DISCONNECT = 2; const MENU_EDIT_CONNECT = 3; const MENU_DELETE_CONNECT = 4; - const BUTTON_ADD = 5; + const BTN_ADD = 5; /** * Reference to Settings instance @@ -97,18 +97,17 @@ class Connection_Sidebar extends \wxPanel { $this->settings =& Settings::get_instance(); // Create a button for adding new connections - $new_conn = new \wxButton($this, self::BUTTON_ADD, 'New Connection'); + $new_conn = new \wxButton($this, self::BTN_ADD, 'New Connection'); $new_conn->Connect(wxEVT_COMMAND_BUTTON_CLICKED, array($this, 'add_conn')); // Add a sizer $sizer = new \wxBoxSizer(wxVERTICAL); $sizer->add($this->list, 1, wxALL|wxEXPAND); - $sizer->add($new_conn, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_BOTTOM|wxEXPAND); + $sizer->add($new_conn, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_BOTTOM|wxEXPAND, 5); $this->SetSizer($sizer); $this->Layout(); - - $this->Centre(wxBOTH); + $this->Fit(); } // -------------------------------------------------------------------------- diff --git a/sys/windows/connection_manager.php b/sys/windows/connection_manager.php index 7609832..d976125 100644 --- a/sys/windows/connection_manager.php +++ b/sys/windows/connection_manager.php @@ -31,6 +31,7 @@ class Connection_Manager extends \wxFrame { const TXT_DB_PORT = 6; const TXT_DB_USER = 7; const TXT_DB_PASS = 8; + const BTN_TEST = 9; /** * Array of fields for Connection Information manipulation @@ -47,7 +48,7 @@ class Connection_Manager extends \wxFrame { */ public function __construct($parent, $params = array()) { - parent::__construct($parent, 32, "Connection Manager", wxDefaultPosition, new \wxSize(640, 480));//, wxCAPTION|wxCLOSE_BOX); + parent::__construct($parent, 32, "Connection Manager", wxDefaultPosition); // Layout the window $this->_layout($params); @@ -62,8 +63,12 @@ class Connection_Manager extends \wxFrame { */ protected function _layout($params) { + $container_sizer = new \wxBoxSizer(wxVERTICAL); + // Use a table-like sizer $sizer = new \wxFlexGridSizer(2, 5, 5); + $sizer->SetHGap(5); + $sizer->SetVGap(5); $sizer->SetFlexibleDirection(wxBOTH); $sizer->AddGrowableCol(0, 1); $sizer->AddGrowableCol(1, 1); @@ -79,9 +84,9 @@ class Connection_Manager extends \wxFrame { // Create the controls // label => control $this->fields = array( - 'Connection name' => new \wxTextCtrl($this, self::TXT_CONN_NAME), + 'Connection Name' => new \wxTextCtrl($this, self::TXT_CONN_NAME), 'Database Type' => $choice = new \wxChoice(), - 'Database File' => new \wxFilePickerCtrl($this, self::FILE_DB_FILE, wxEmptyString, "Select the database file", wxFileSelectorDefaultWildcardStr), + 'Database File' => new \wxFilePickerCtrl($this, self::FILE_DB_FILE, wxEmptyString, "Select the database file", '*.*'), 'Database Name' => new \wxTextCtrl($this, self::TXT_DB_NAME), 'Host' => new \wxTextCtrl($this, self::TXT_DB_HOST), 'Port' => new \wxTextCtrl($this, self::TXT_DB_PORT), @@ -103,10 +108,25 @@ class Connection_Manager extends \wxFrame { $i++; } - $this->SetSizer($sizer); + // Test Connection Button + $test_button = new \wxButton($this, self::BTN_TEST, 'Test Connection'); + $test_button->Connect(wxEVT_COMMAND_BUTTON_CLICKED, array($this, 'test_conn')); + + // Add Connection Button + // TODO: Add connection button + + // Add the buttons to the sizer + $sizer->Add($test_button, 1, wxEXPAND); + + // Add the sizer to the window + // Add it inside of another sizer for padding. + $container_sizer->Add($sizer, 1, wxALL|wxEXPAND, 10); + $this->SetSizer($container_sizer); $this->Layout(); - $this->Center(wxBOTH); + // Autosize the window to fit the controls + $this->Fit(); + $this->CenterOnScreen(wxBOTH); } // -------------------------------------------------------------------------- @@ -118,7 +138,7 @@ class Connection_Manager extends \wxFrame { */ protected function get_available_dbs() { - $drivers = array(); + $drivers = array(""); $pdo_drivers = \pdo_drivers(); @@ -126,13 +146,13 @@ class Connection_Manager extends \wxFrame { foreach ($pdo_drivers as &$d) { // Skip sqlite2 as opposed to sqlite3 - if($d === 'sqlite2' && (in_array('sqlite', $pdo_drivers) || in_array('sqlite3', $pdo_drivers))) + if ($d === 'sqlite2' && (in_array('sqlite', $pdo_drivers) || in_array('sqlite3', $pdo_drivers))) { continue; } // Use the ibase_functions over PDO::Firebird, at least for now - if($d === 'firebird') + if ($d === 'firebird') { continue; } @@ -147,7 +167,7 @@ class Connection_Manager extends \wxFrame { } // Add firebird support, if exists - if(function_exists('fbird_connect') && ! in_array('firebird', $pdo_drivers)) + if (function_exists('fbird_connect')) { $drivers[] = "Firebird"; } @@ -156,6 +176,84 @@ class Connection_Manager extends \wxFrame { return $drivers; } + + // -------------------------------------------------------------------------- + + /** + * Set defaults for new database type + * + * @return void + */ + public function change_db() + { + + } + + // -------------------------------------------------------------------------- + + /** + * Test a db connection, and display a popup with the result + * + * @return void + */ + public function test_conn() + { + // Get the connection parameters + $params = $this->_get_vals(); + + // Smart alek error for smart alek behavior + if (empty($params->type)) + { + error("You need to select the correct database type"); + return; + } + + // Catch connection exceptions, and + // display the error message to the + // user so they can edit the db + // parameters + try + { + new \Query_Builder($params); + } + catch (\PDOException $e) + { + error("Error connecting to database: \n\n" . $e->getMessage()); + return; + } + + // Successful Connection? + // Tell the user! + alert("Successfully Connected."); + } + + // -------------------------------------------------------------------------- + + /** + * Get the values of the widgets in the window + * + * @return object + */ + private function _get_vals() + { + $params = new \stdClass(); + $fields =& $this->fields; + + $types = $this->get_available_dbs(); + $type_id = $fields['Database Type']->GetSelection(); + $type = $types[$type_id]; + + $params->name = $fields['Connection Name']->GetValue(); + $params->type = $type; + $params->file = $fields['Database File']->GetPath(); + $params->conn_db = $fields['Database Name']->GetValue(); + $params->host = $fields['Host']->GetValue(); + $params->port = $fields['Port']->GetValue(); + $params->user = $fields['User']->GetValue(); + $params->pass = $fields['Password']->GetValue(); + + return $params; + } } // End of connection_manager.php \ No newline at end of file diff --git a/sys/windows/main.php b/sys/windows/main.php index dc0c98e..0be5a85 100644 --- a/sys/windows/main.php +++ b/sys/windows/main.php @@ -62,6 +62,8 @@ class Main extends \wxFrame { // Layout the interface $this->_main_layout(); + $this->SetThemeEnabled(TRUE); + $this->CenterOnScreen(wxBOTH); } // -------------------------------------------------------------------------- @@ -129,10 +131,9 @@ class Main extends \wxFrame { $this->_create_menu(); // Create a split window - $win = new \wxSplitterWindow($this, wxID_ANY, wxDefaultPosition, wxDefaultSize); + $win = new \wxSplitterWindow($this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_THIN_SASH); $win->setSplitMode(wxSPLIT_HORIZONTAL); - // Add the connection sidebar $this->connection_sidebar =& Connection_Sidebar::get_instance($win); $win2 = new Data_Grid($win); @@ -140,10 +141,9 @@ class Main extends \wxFrame { // Add the widgets to the split window $win->SplitVertically($this->connection_sidebar, $win2); $win->SetSashPosition(200, TRUE); - + // Save a reference for later use $this->split =& $win; - } // --------------------------------------------------------------------------