//-------------------------------------------------------------------------------- void DbMySQLTableEditorIndexPage::set_value(const Gtk::TreeModel::iterator& iter, int column, GType type, const Glib::ValueBase& value) { bec::IndexColumnsListBE *columns_be = _be->get_indexes()->get_columns(); bec::NodeId node(_indexes_columns_model->node_for_iter(iter)); if ( node.is_valid() ) { switch ( column ) { case -2: { Glib::Value<std::string> v; v.init(value.gobj()); columns_be->set_field(node, ::bec::IndexColumnsListBE::Descending, v.get() == "ASC" ? 0 : 1); break; } case -8: { Glib::Value<bool> v; v.init(value.gobj()); columns_be->set_column_enabled(node, v.get()); recreate_order_model(); break; } } } }
//------------------------------------------------------------------------------ void DbMySQLTableEditorIndexPage::update_index_details() { MySQLTableIndexListBE *indices_be = _be->get_indexes(); if (indices_be) { std::string index_name; indices_be->refresh(); Gtk::TreeView *tv = 0; _xml->get_widget("index_columns", tv); tv->remove_all_columns(); tv->unset_model(); const bool got_indices = indices_be->count() > 1; if (_index_node.is_valid() && got_indices && _index_node.back() < indices_be->real_count()) { indices_be->get_field(_index_node, 0, index_name); if (!index_name.empty()) { indices_be->select_index(_index_node); indices_be->refresh(); } _indexes_columns_model = ListModelWrapper::create(indices_be->get_columns(), tv, "IndexesColumnsModel"); // negative column means value getting/setting is delegated back to us _indexes_columns_model->model().append_check_column(-8, "", EDITABLE); _indexes_columns_model->model().append_string_column(::bec::IndexColumnsListBE::Name, "Column", RO, NO_ICON); _indexes_columns_model->model().append_combo_column(::bec::IndexColumnsListBE::OrderIndex, "#", recreate_order_model(), EDITABLE); _indexes_columns_model->model().append_combo_column(-2, "Order", _sort_order_model, EDITABLE, true); _indexes_columns_model->model().append_int_column(::bec::IndexColumnsListBE::Length, "Length", EDITABLE); _indexes_columns_model->set_fake_column_value_getter( sigc::mem_fun(this, &DbMySQLTableEditorIndexPage::get_value)); _indexes_columns_model->set_fake_column_value_setter( sigc::mem_fun(this, &DbMySQLTableEditorIndexPage::set_value)); tv->set_model(_indexes_columns_model); std::string text; indices_be->get_field(_index_node, ::MySQLTableIndexListBE::StorageType, text); _index_storage_combo_conn.block(); set_selected_combo_item(_index_storage_combo, text); _index_storage_combo_conn.unblock(); } else { set_selected_combo_item(_index_storage_combo, ""); } Gtk::Entry *entry(0); std::string text; // Update row block size _xml->get_widget("index_key_block_size", entry); indices_be->get_field(_index_node, ::MySQLTableIndexListBE::RowBlockSize, text); entry->set_text(text); // Update index parser _xml->get_widget("index_parser", entry); indices_be->get_field(_index_node, ::MySQLTableIndexListBE::Parser, text); entry->set_text(text); Gtk::TextView *textview(0); // update index comment _xml->get_widget("index_comment", textview); indices_be->get_field(_index_node, ::MySQLTableIndexListBE::Comment, text); textview->get_buffer()->set_text(text); _xml->get_widget("index_key_block_size", entry); entry->set_sensitive(got_indices && _index_node.is_valid() && _index_node.back() < indices_be->real_count()); _xml->get_widget("index_parser", entry); entry->set_sensitive(got_indices && _index_node.is_valid() && _index_node.back() < indices_be->real_count()); _xml->get_widget("index_comment", textview); textview->set_sensitive(got_indices && _index_node.is_valid() && _index_node.back() < indices_be->real_count()); this->update_gui_for_server(); _index_storage_combo->set_sensitive(got_indices && _index_node.is_valid() && _index_node.back() < indices_be->real_count()); } }