Put multi-dimension table rendering into a generic method in Data_grid class
This commit is contained in:
parent
91edf09ff7
commit
8c49715a55
@ -105,5 +105,61 @@ class Data_Grid extends GtkTreeView {
|
||||
$col->set_visible(TRUE);
|
||||
$cell->set_property('text', $data);
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Create a datagrid from the provided data array
|
||||
*
|
||||
* @param array $data
|
||||
* @return void
|
||||
*/
|
||||
public function render_data($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);
|
||||
$this->set_model($model);
|
||||
$this->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);
|
||||
$this->insert_column_with_data_func($i, $c, $renderer, array($this, 'add_data_col'), $i);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
// End of data_grid.php
|
@ -251,42 +251,8 @@ class DB_tabs extends GTKNotebook {
|
||||
|
||||
if ( ! empty($tab_data))
|
||||
{
|
||||
$tab_model = new StdClass();
|
||||
|
||||
$cols = array_keys($tab_data[0]);
|
||||
|
||||
// Add columns to model
|
||||
$model_args = array_fill(0, count($cols), Gobject::TYPE_PHP_VALUE);
|
||||
$eval_string = '$tab_model = new GTKTreeStore('.implode(',', $model_args).');';
|
||||
|
||||
// Shame, shame, but how else?
|
||||
eval($eval_string);
|
||||
$tab= new Data_Grid($tab_model);
|
||||
|
||||
// Set the data in the model
|
||||
for($i=0, $c = count($tab_data); $i < $c; $i++)
|
||||
{
|
||||
// Add a row
|
||||
$row = $tab_model->insert($i);
|
||||
|
||||
$j = -1;
|
||||
$vals = array($row);
|
||||
foreach($tab_data[$i] as $v)
|
||||
{
|
||||
$vals[] = ++$j;
|
||||
$vals[] = trim($v);
|
||||
}
|
||||
|
||||
call_user_func_array(array($tab_model, 'set'), $vals);
|
||||
}
|
||||
|
||||
// Add columns to view
|
||||
foreach($cols as $i => $c)
|
||||
{
|
||||
$renderer = new GtkCellRendererText();
|
||||
$renderer->set_property('editable', TRUE);
|
||||
$tab->insert_column_with_data_func($i, $c, $renderer, array($tab, 'add_data_col'), $i);
|
||||
}
|
||||
$tab = new Data_Grid();
|
||||
$tab->render_data($tab_data);
|
||||
|
||||
self::$instance->add_tab($tab_name, $tab);
|
||||
}
|
||||
|
@ -48,49 +48,8 @@ class DB_Table_Data extends GTKWindow {
|
||||
*/
|
||||
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);
|
||||
}
|
||||
$view = new Data_Grid();
|
||||
$view->render_data($data);
|
||||
|
||||
// Add the grid to the window
|
||||
$this->win->add_with_viewport($view);
|
||||
|
Reference in New Issue
Block a user