Made Connection Sidebar a singleton
This commit is contained in:
parent
2fefe6e949
commit
4cd7932f9b
@ -112,7 +112,7 @@ class Main extends GtkWindow {
|
||||
$scrolled_win->add(new DataGrid());
|
||||
|
||||
// Add the connection sidebar
|
||||
$this->connection_sidebar = new Connection_Sidebar();
|
||||
$this->connection_sidebar =& Connection_Sidebar::get_instance();
|
||||
|
||||
// Add the left column to the hpane
|
||||
$hpane->pack1($this->connection_sidebar, FALSE);
|
||||
|
@ -14,8 +14,23 @@
|
||||
|
||||
class Connection_Sidebar extends GtkVBox {
|
||||
|
||||
protected $settings, $menu;
|
||||
protected $settings, $menu, $treeview, $model;
|
||||
private static $instance;
|
||||
|
||||
public static function &get_instance()
|
||||
{
|
||||
if( ! isset(self::$instance))
|
||||
{
|
||||
$name = __CLASS__;
|
||||
self::$instance = new $name();
|
||||
}
|
||||
|
||||
return self::$instance;
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor method
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
@ -36,8 +51,29 @@ class Connection_Sidebar extends GtkVBox {
|
||||
// Treeview to show database connections
|
||||
{
|
||||
// Create a Storage object for connection list
|
||||
$model = new GtkListStore(GObject::TYPE_PHP_VALUE, GObject::TYPE_STRING);
|
||||
$this->model = new GtkListStore(GObject::TYPE_PHP_VALUE, GObject::TYPE_STRING);
|
||||
|
||||
// Render the treeview
|
||||
$this->_render();
|
||||
|
||||
// Set up context menu event
|
||||
$this->treeview->connect('button-press-event', array(&$this, 'on_button'));
|
||||
|
||||
|
||||
$selection = $this->treeview->get_selection();
|
||||
$selection->set_mode(GTK::SELECTION_SINGLE);
|
||||
}
|
||||
|
||||
|
||||
$this->pack_start($this->treeview);
|
||||
$this->pack_start($add_button, FALSE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders the connection sidebar widget
|
||||
*/
|
||||
protected function _render()
|
||||
{
|
||||
// Add the existing connections to the model
|
||||
$db_conns = $this->settings->get_dbs();
|
||||
if( ! empty($db_conns))
|
||||
@ -47,32 +83,21 @@ class Connection_Sidebar extends GtkVBox {
|
||||
$db = $props;
|
||||
$db->name = $name;
|
||||
|
||||
$iter = $model->append();
|
||||
$model->set($iter, 0, $db);
|
||||
$iter = $this->model->append();
|
||||
$this->model->set($iter, 0, $db);
|
||||
}
|
||||
}
|
||||
|
||||
// Initialize the treeview with the data
|
||||
$treeview = new GtkTreeView($model);
|
||||
$this->treeview = new GtkTreeView($this->model);
|
||||
|
||||
// Icon column
|
||||
$cell_renderer = new GtkCellRendererPixbuf();
|
||||
$treeview->insert_column_with_data_func(0, 'Type', $cell_renderer, array(&$this, 'set_icon'));
|
||||
$this->treeview->insert_column_with_data_func(0, 'Type', $cell_renderer, array(&$this, 'set_icon'));
|
||||
|
||||
// Label column
|
||||
$cell_renderer = new GtkCellRendererText();
|
||||
$treeview->insert_column_with_data_func(1, 'Connection name', $cell_renderer, array(&$this, 'set_label'));
|
||||
|
||||
$treeview->connect('button-press-event', array(&$this, 'on_button'));
|
||||
|
||||
|
||||
$selection = $treeview->get_selection();
|
||||
$selection->set_mode(GTK::SELECTION_SINGLE);
|
||||
}
|
||||
|
||||
|
||||
$this->pack_start($treeview);
|
||||
$this->pack_start($add_button, FALSE);
|
||||
$this->treeview->insert_column_with_data_func(1, 'Connection name', $cell_renderer, array(&$this, 'set_label'));
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
@ -82,13 +107,13 @@ class Connection_Sidebar extends GtkVBox {
|
||||
*
|
||||
* @param GtkTreeView Column $col
|
||||
* @param GtkCellRenderer $cell
|
||||
* @param GtkTreeModel $model
|
||||
* @param GtkTreeModel $this->model
|
||||
* @param GtkTreeIter $iter
|
||||
*/
|
||||
public function set_icon($col, $cell, $model, $iter)
|
||||
{
|
||||
$col->set_reorderable(TRUE);
|
||||
$info = $model->get_value($iter, 0);
|
||||
$info = $this->model->get_value($iter, 0);
|
||||
$db_type = strtolower($info->type);
|
||||
$img_file = BASE_DIR."/images/{$db_type}-logo-32.png";
|
||||
|
||||
@ -111,13 +136,13 @@ class Connection_Sidebar extends GtkVBox {
|
||||
*
|
||||
* @param GtkTreeViewColumn $col
|
||||
* @param GtkCellRenderer $cell
|
||||
* @param GtkTreeModel $model
|
||||
* @param GtkTreeModel $this->model
|
||||
* @param GtkTreeIter $iter
|
||||
*/
|
||||
public function set_label($col, $cell, $model, $iter)
|
||||
{
|
||||
$col->set_reorderable(TRUE);
|
||||
$info = $model->get_value($iter, 0);
|
||||
$info = $this->model->get_value($iter, 0);
|
||||
$cell->set_property('text', $info->name);
|
||||
}
|
||||
|
||||
@ -148,9 +173,9 @@ class Connection_Sidebar extends GtkVBox {
|
||||
if($event->button == 3)
|
||||
{
|
||||
// get the row and column
|
||||
$path_array = $view->get_path_at_pos($event->x, $event->y);
|
||||
$path = $path_array[0][0];
|
||||
$col = $path_array[1];
|
||||
list($path_array, $col, $x, $y)= $view->get_path_at_pos($event->x, $event->y);
|
||||
$path = $path_array[0];
|
||||
//$col = $path_array[1];
|
||||
$col_title = $col->get_title();
|
||||
}
|
||||
|
||||
@ -160,12 +185,12 @@ class Connection_Sidebar extends GtkVBox {
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Creates a context menu for the selected connection
|
||||
* Creates and displays a context menu for the selected connection
|
||||
*
|
||||
* @param [type] $pos [description]
|
||||
* @param [type] $title [description]
|
||||
* @param [type] $event [description]
|
||||
* @return [type]
|
||||
* @param aray $pos
|
||||
* @param string $title
|
||||
* @param object $event
|
||||
* @return void
|
||||
*/
|
||||
public function conn_popup_menu($pos, $title, $event)
|
||||
{
|
||||
@ -181,19 +206,28 @@ class Connection_Sidebar extends GtkVBox {
|
||||
|
||||
/**
|
||||
* Remove a connection from the connection manager
|
||||
*
|
||||
* @param string $key
|
||||
* @return void
|
||||
*/
|
||||
public function remove_connection()
|
||||
public function remove_connection($key)
|
||||
{
|
||||
|
||||
$model = $this->treeview->get_model();
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Add a connection to the connection manager
|
||||
*
|
||||
* @param string $key
|
||||
* @param array $vals
|
||||
* @return void
|
||||
*/
|
||||
public function add_connection()
|
||||
public function add_connection($key, $vals)
|
||||
{
|
||||
$model = $this->treeview->get_model();
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
@ -215,6 +215,9 @@ class DB_Info_Widget extends GtkTable {
|
||||
|
||||
$this->settings->add_db($this->conn->get_text(), $data);
|
||||
|
||||
// Pass to connection sidebar to update
|
||||
|
||||
|
||||
// Destroy the parent window
|
||||
$parent_window =& $this->get_parent_window();
|
||||
|
||||
|
Reference in New Issue
Block a user