parent
cb6cc58655
commit
91edf09ff7
@ -43,6 +43,11 @@ class Data_Grid extends GtkTreeView {
|
|||||||
*/
|
*/
|
||||||
public function get($pos = 0)
|
public function get($pos = 0)
|
||||||
{
|
{
|
||||||
|
if ( ! is_numeric($pos))
|
||||||
|
{
|
||||||
|
return parent::get($pos);
|
||||||
|
}
|
||||||
|
|
||||||
// Get the selection object of the row
|
// Get the selection object of the row
|
||||||
$sel = $this->get_selection();
|
$sel = $this->get_selection();
|
||||||
|
|
||||||
@ -75,5 +80,30 @@ class Data_Grid extends GtkTreeView {
|
|||||||
$this->remove_column($c);
|
$this->remove_column($c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a column of data to the model
|
||||||
|
*
|
||||||
|
* @param GtkTreeViewColumn $col
|
||||||
|
* @param GtkCellRenderer $cell
|
||||||
|
* @param GtkTreeModel $model
|
||||||
|
* @param GtkTreeIter $iter
|
||||||
|
* @param int $i
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function add_data_col($col, $cell, $model, $iter, $i=0)
|
||||||
|
{
|
||||||
|
$data = $model->get_value($iter, $i);
|
||||||
|
|
||||||
|
if (empty($data))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$col->set_visible(TRUE);
|
||||||
|
$cell->set_property('text', $data);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// End of data_grid.php
|
// End of data_grid.php
|
@ -96,7 +96,13 @@ class DB_tabs extends GTKNotebook {
|
|||||||
|
|
||||||
// 'Tables' Tab
|
// 'Tables' Tab
|
||||||
{
|
{
|
||||||
self::_add_tab($conn, 'Tables', 'Table Name', 'get_tables');
|
self::_add_tab($conn, 'Tables', 'Table Name', 'get_tables', array(
|
||||||
|
array(
|
||||||
|
'row-activated',
|
||||||
|
array(self::$instance, 'show_table_data'),
|
||||||
|
$conn
|
||||||
|
)
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
// 'System Tables' Tab
|
// 'System Tables' Tab
|
||||||
@ -106,7 +112,13 @@ class DB_tabs extends GTKNotebook {
|
|||||||
|
|
||||||
// 'Views' Tab
|
// 'Views' Tab
|
||||||
{
|
{
|
||||||
self::_add_tab($conn, 'Views', 'View Name', 'get_views');
|
self::_add_tab($conn, 'Views', 'View Name', 'get_views', array(
|
||||||
|
array(
|
||||||
|
'row-activated',
|
||||||
|
array(self::$instance, 'show_table_data'),
|
||||||
|
$conn
|
||||||
|
)
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
// 'Sequences' Tab
|
// 'Sequences' Tab
|
||||||
@ -136,31 +148,6 @@ class DB_tabs extends GTKNotebook {
|
|||||||
|
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
/**
|
|
||||||
* Adds a column of data to the model
|
|
||||||
*
|
|
||||||
* @param GtkTreeViewColumn $col
|
|
||||||
* @param GtkCellRenderer $cell
|
|
||||||
* @param GtkTreeModel $model
|
|
||||||
* @param GtkTreeIter $iter
|
|
||||||
* @param int $i
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function add_data_col($col, $cell, $model, $iter, $i=0)
|
|
||||||
{
|
|
||||||
$data = $model->get_value($iter, $i);
|
|
||||||
|
|
||||||
if (empty($data))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$col->set_visible(TRUE);
|
|
||||||
$cell->set_property('text', $data);
|
|
||||||
}
|
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Remove current tabs
|
* Remove current tabs
|
||||||
*/
|
*/
|
||||||
@ -217,13 +204,13 @@ class DB_tabs extends GTKNotebook {
|
|||||||
|
|
||||||
$cell_renderer = new GtkCellRendererText();
|
$cell_renderer = new GtkCellRendererText();
|
||||||
$cell_renderer->set_property('editable', FALSE);
|
$cell_renderer->set_property('editable', FALSE);
|
||||||
$tab->insert_column_with_data_func(0, $col_name, $cell_renderer, array(self::$instance, 'add_data_col'));
|
$tab->insert_column_with_data_func(0, $col_name, $cell_renderer, array($tab, 'add_data_col'));
|
||||||
|
|
||||||
if ( ! empty($events))
|
if ( ! empty($events))
|
||||||
{
|
{
|
||||||
foreach($events as $name => $method)
|
foreach($events as $method)
|
||||||
{
|
{
|
||||||
$tab->connect($name, $method);
|
call_user_func_array(array($tab, 'connect'), $method);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -298,7 +285,7 @@ class DB_tabs extends GTKNotebook {
|
|||||||
{
|
{
|
||||||
$renderer = new GtkCellRendererText();
|
$renderer = new GtkCellRendererText();
|
||||||
$renderer->set_property('editable', TRUE);
|
$renderer->set_property('editable', TRUE);
|
||||||
$tab->insert_column_with_data_func($i, $c, $renderer, array(self::$instance, 'add_data_col'), $i);
|
$tab->insert_column_with_data_func($i, $c, $renderer, array($tab, 'add_data_col'), $i);
|
||||||
}
|
}
|
||||||
|
|
||||||
self::$instance->add_tab($tab_name, $tab);
|
self::$instance->add_tab($tab_name, $tab);
|
||||||
@ -306,5 +293,26 @@ class DB_tabs extends GTKNotebook {
|
|||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create popup window with table data
|
||||||
|
*
|
||||||
|
* @param GTKTreeView $view
|
||||||
|
* @param array $path
|
||||||
|
* @param GtkTreeviewColumn $col
|
||||||
|
* @param Query_Builder $conn
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function show_table_data($view, $path, $col, &$conn)
|
||||||
|
{
|
||||||
|
$table = $view->get(0);
|
||||||
|
|
||||||
|
$query = $conn->get($table);
|
||||||
|
$data = $query->fetchAll(PDO::FETCH_ASSOC);
|
||||||
|
|
||||||
|
return new DB_Table_data($data);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// End of db_tabs.php
|
// End of db_tabs.php
|
||||||
|
100
sys/windows/db_table_data.php
Normal file
100
sys/windows/db_table_data.php
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* OpenSQLManager
|
||||||
|
*
|
||||||
|
* Free Database manager for Open Source Databases
|
||||||
|
*
|
||||||
|
* @author Timothy J. Warren
|
||||||
|
* @copyright Copyright (c) 2012
|
||||||
|
* @link https://github.com/aviat4ion/OpenSQLManager
|
||||||
|
* @license http://philsturgeon.co.uk/code/dbad-license
|
||||||
|
*/
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Popup window to display database table data
|
||||||
|
*/
|
||||||
|
class DB_Table_Data extends GTKWindow {
|
||||||
|
|
||||||
|
protected $win;
|
||||||
|
|
||||||
|
public function __construct($data)
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
|
||||||
|
|
||||||
|
$this->set_title("Table Data");
|
||||||
|
$this->set_position(Gtk::WIN_POS_CENTER_ALWAYS);
|
||||||
|
$this->set_destroy_with_parent(TRUE);
|
||||||
|
$this->win = new GTKScrolledWindow();
|
||||||
|
$this->win->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
|
||||||
|
$this->add($this->win);
|
||||||
|
|
||||||
|
$this->_render($data);
|
||||||
|
|
||||||
|
// Resize to a sane size
|
||||||
|
|
||||||
|
$this->set_size_request(640, 480);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Layout the window
|
||||||
|
*
|
||||||
|
* @param array $data
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
protected function _render($data)
|
||||||
|
{
|
||||||
|
if ( ! is_array($data))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$model = new StdClass();
|
||||||
|
|
||||||
|
$cols = ( ! empty($data)) ? array_keys($data[0]) : array();
|
||||||
|
|
||||||
|
// Add columns to model
|
||||||
|
$col_num = (count($cols) > 0) ? count($cols) : 1;
|
||||||
|
$model_args = array_fill(0, $col_num, Gobject::TYPE_PHP_VALUE);
|
||||||
|
$eval_string = '$model = new GTKTreeStore('.implode(',', $model_args).');';
|
||||||
|
|
||||||
|
// Shame, shame, but how else?
|
||||||
|
eval($eval_string);
|
||||||
|
$view = new Data_Grid($model);
|
||||||
|
$view->set_headers_clickable(TRUE);
|
||||||
|
|
||||||
|
// Set the data in the model
|
||||||
|
for($i=0, $c = count($data); $i < $c; $i++)
|
||||||
|
{
|
||||||
|
// Add a row
|
||||||
|
$row = $model->insert($i);
|
||||||
|
|
||||||
|
$j = -1;
|
||||||
|
$vals = array($row);
|
||||||
|
foreach($data[$i] as $v)
|
||||||
|
{
|
||||||
|
$vals[] = ++$j;
|
||||||
|
$vals[] = trim($v);
|
||||||
|
}
|
||||||
|
|
||||||
|
call_user_func_array(array($model, 'set'), $vals);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add columns to view
|
||||||
|
foreach($cols as $i => $c)
|
||||||
|
{
|
||||||
|
$renderer = new GtkCellRendererText();
|
||||||
|
$renderer->set_property('editable', TRUE);
|
||||||
|
$view->insert_column_with_data_func($i, $c, $renderer, array($view, 'add_data_col'), $i);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add the grid to the window
|
||||||
|
$this->win->add_with_viewport($view);
|
||||||
|
|
||||||
|
$this->show_all();
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user