diff --git a/sys/widgets/data_grid.php b/sys/widgets/data_grid.php index f241df9..8290ab1 100644 --- a/sys/widgets/data_grid.php +++ b/sys/widgets/data_grid.php @@ -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 \ No newline at end of file diff --git a/sys/widgets/db_tabs.php b/sys/widgets/db_tabs.php index 7da5f2f..c9b1d61 100644 --- a/sys/widgets/db_tabs.php +++ b/sys/widgets/db_tabs.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); } diff --git a/sys/windows/db_table_data.php b/sys/windows/db_table_data.php index fa6bc6c..e0a7f3d 100644 --- a/sys/windows/db_table_data.php +++ b/sys/windows/db_table_data.php @@ -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);