This commit is contained in:
Timothy Warren 2012-04-10 15:42:12 -04:00
parent 05ec65091f
commit ace22357f6
3 changed files with 74 additions and 6 deletions

View File

@ -53,6 +53,9 @@ class Query_Builder {
// ) // )
private $query_map; private $query_map;
// Convenience property for connection management
public $conn_name;
/** /**
* Constructor * Constructor
* *
@ -111,6 +114,8 @@ class Query_Builder {
{ {
$this->db = new $dbtype($dsn); $this->db = new $dbtype($dsn);
} }
$this->conn_name = $params->name;
// Make things just slightly shorter // Make things just slightly shorter
$this->sql =& $this->db->sql; $this->sql =& $this->db->sql;

View File

@ -19,6 +19,7 @@ class Connection_Sidebar extends GtkVBox {
protected $settings, $menu, $treeview; protected $settings, $menu, $treeview;
private static $instance; private static $instance;
private $conn_name;
/** /**
* Return the current instance of the class * Return the current instance of the class
@ -120,6 +121,9 @@ class Connection_Sidebar extends GtkVBox {
// Status column // Status column
$cell_renderer = new GtkCellRendererPixbuf(); $cell_renderer = new GtkCellRendererPixbuf();
$this->treeview->insert_column_with_data_func(2, 'Status', $cell_renderer, array($this, 'set_status_icon')); $this->treeview->insert_column_with_data_func(2, 'Status', $cell_renderer, array($this, 'set_status_icon'));
// Connect event to change database tabs
$this->treeview->connect('cursor-changed', array($this, 'switch_tab'));
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
@ -361,6 +365,7 @@ class Connection_Sidebar extends GtkVBox {
try try
{ {
$conn =& DB_Reg::get_db($data->name); $conn =& DB_Reg::get_db($data->name);
$this->conn_name = $data->name;
} }
catch(PDOException $e) catch(PDOException $e)
{ {
@ -385,5 +390,29 @@ class Connection_Sidebar extends GtkVBox {
$this->refresh(); $this->refresh();
} }
// --------------------------------------------------------------------------
/**
* Change tabs based on db connection selected
*
* @param type $view
*/
public function switch_tab($view)
{
$data = $view->get(0);
$conns = DB_Reg::get_connections();
// Don't reset if you are over the same database
if ($data->name === $this->conn_name)
{
return;
}
if (in_array($data->name, $conns))
{
$this->db_connect();
}
}
} }
// End of connection_sidebar.php // End of connection_sidebar.php

View File

@ -22,6 +22,7 @@ class DB_tabs extends GTKNotebook {
* @var DB_Tabs * @var DB_Tabs
*/ */
private static $instance; private static $instance;
private $data;
/** /**
* Return the db tabs object if it exists, or create and return * Return the db tabs object if it exists, or create and return
@ -46,6 +47,7 @@ class DB_tabs extends GTKNotebook {
public function __construct() public function __construct()
{ {
parent::__construct(); parent::__construct();
$this->data = new StdClass();
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
@ -80,9 +82,11 @@ class DB_tabs extends GTKNotebook {
// Empty the tabs // Empty the tabs
self::reset(); self::reset();
self::$instance->hide_all();
// 'Databases' Tab // 'Databases' Tab
{ {
self::_add_tab($conn, 'Databases', 'Db Name', 'get_dbs', array(), array( self::_add_tab($conn, 'Databases', 'Db Name', 'get_dbs', array(
'row-activated' => array(self::$instance, '_switch_db'), 'row-activated' => array(self::$instance, '_switch_db'),
)); ));
} }
@ -164,10 +168,14 @@ class DB_tabs extends GTKNotebook {
*/ */
public static function reset() public static function reset()
{ {
self::$instance->hide_all();
for($i=self::$instance->get_n_pages(); $i >= 0; $i--) for($i=self::$instance->get_n_pages(); $i >= 0; $i--)
{ {
self::$instance->remove_page($i); self::$instance->remove_page($i);
} }
self::$instance->show_all();
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
@ -179,14 +187,28 @@ class DB_tabs extends GTKNotebook {
* @param string $tab_name * @param string $tab_name
* @param string $col_name * @param string $col_name
* @param string $method * @param string $method
* @param array $events
* @return void * @return void
*/ */
private static function _add_tab(&$conn, $tab_name, $col_name, $method, $params=array(), $events=array()) private static function _add_tab(&$conn, $tab_name, $col_name, $method, $events=array())
{ {
$tab = new Data_Grid(); $tab = new Data_Grid();
$tab_model = $tab->get_model(); $tab_model = $tab->get_model();
$tab_data = call_user_func_array(array($conn, $method), $params); $conn_name = $conn->conn_name;
if ( ! isset(self::$instance->data->{$conn_name}))
{
self::$instance->data->{$conn_name}= array();
}
$instance_data =& self::$instance->data->{$conn_name};
$tab_data = (empty($instance_data[$tab_name]))
? call_user_func_array(array($conn, $method), array())
: $instance_data[$tab_name];
$instance_data[$tab_name] = $tab_data;
if ($tab_data !== FALSE) if ($tab_data !== FALSE)
{ {
@ -225,7 +247,21 @@ class DB_tabs extends GTKNotebook {
*/ */
private static function _add_row_tab(&$conn, $tab_name, $method) private static function _add_row_tab(&$conn, $tab_name, $method)
{ {
$tab_data = call_user_func_array(array($conn, $method), array());
$conn_name = $conn->conn_name;
if ( ! isset(self::$instance->data->{$conn_name}))
{
self::$instance->data->{$conn_name}= array();
}
$instance_data =& self::$instance->data->{$conn_name};
$tab_data = (empty($instance_data[$tab_name]))
? call_user_func_array(array($conn, $method), array())
: $instance_data[$tab_name];
$instance_data[$tab_name] = $tab_data;
if ( ! empty($tab_data)) if ( ! empty($tab_data))
{ {
@ -296,8 +332,6 @@ class DB_tabs extends GTKNotebook {
} }
// @todo figure out how to single out the current db connection // @todo figure out how to single out the current db connection
} }
} }
// End of db_tabs.php // End of db_tabs.php