Add Mode column

This commit is contained in:
daleclack 2024-01-19 19:21:04 +08:00
parent 5bb679604a
commit 138b674f94
2 changed files with 47 additions and 4 deletions

View File

@ -25,9 +25,9 @@ MyPrefs::MyPrefs(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &ref_
selection = Gtk::NoSelection::create(ver_list); selection = Gtk::NoSelection::create(ver_list);
// List content for test // List content for test
ver_list->append(ModelColumns::create("Longterm", "5.15")); ver_list->append(ModelColumns::create("Longterm", "5.15", 0));
ver_list->append(ModelColumns::create("Stable", "9.1")); ver_list->append(ModelColumns::create("Stable", "9.1", 1));
ver_list->append(ModelColumns::create("Develop", "-1")); ver_list->append(ModelColumns::create("Develop", "-1", 1));
version_view.set_model(selection); version_view.set_model(selection);
// Add Column View // Add Column View
@ -46,6 +46,16 @@ MyPrefs::MyPrefs(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &ref_
version_factory->signal_setup().connect(sigc::mem_fun(*this, &MyPrefs::setup_version)); version_factory->signal_setup().connect(sigc::mem_fun(*this, &MyPrefs::setup_version));
version_column = Gtk::ColumnViewColumn::create("Version", version_factory); version_column = Gtk::ColumnViewColumn::create("Version", version_factory);
version_view.append_column(version_column); version_view.append_column(version_column);
// Create list for mode column
drop_list = Gtk::StringList::create({"Mode0", "Mode1"});
// Add mode column
mode_factory = Gtk::SignalListItemFactory::create();
mode_factory->signal_bind().connect(sigc::mem_fun(*this, &MyPrefs::bind_mode));
mode_factory->signal_setup().connect(sigc::mem_fun(*this, &MyPrefs::setup_mode));
mode_column = Gtk::ColumnViewColumn::create("Mode", mode_factory);
version_view.append_column(mode_column);
} }
void MyPrefs::btnok_clicked() void MyPrefs::btnok_clicked()
@ -249,10 +259,36 @@ void MyPrefs::bind_version(const Glib::RefPtr<Gtk::ListItem> &item)
Glib::Binding::Flags::BIDIRECTIONAL); Glib::Binding::Flags::BIDIRECTIONAL);
} }
void MyPrefs::setup_mode(const Glib::RefPtr<Gtk::ListItem> &item)
{
// Add dropdown for mode selection
auto dropdown_mode = Gtk::make_managed<Gtk::DropDown>(drop_list);
item->set_child(*dropdown_mode);
}
void MyPrefs::bind_mode(const Glib::RefPtr<Gtk::ListItem> &item)
{
// Get Position
auto pos = item->get_position();
// Get Dropdown widget
auto dropdown_mode = dynamic_cast<Gtk::DropDown *>(item->get_child());
if (!dropdown_mode)
{
return;
}
// Bind mode
auto item1 = ver_list->get_item(pos);
dropdown_mode->set_selected(item1->get_branch_mode());
Glib::Binding::bind_property(item1->property_branch_mode(), dropdown_mode->property_selected(),
Glib::Binding::Flags::BIDIRECTIONAL);
}
void MyPrefs::btnadd_clicked() void MyPrefs::btnadd_clicked()
{ {
// Append a item to the list // Append a item to the list
ver_list->append(ModelColumns::create("<empty>", "<empty>")); ver_list->append(ModelColumns::create("<empty>", "<empty>", 1));
} }
void MyPrefs::btnremove_clicked() void MyPrefs::btnremove_clicked()

View File

@ -38,6 +38,7 @@ private:
// The Column View for versions // The Column View for versions
MyListStore ver_list; MyListStore ver_list;
Glib::RefPtr<Gtk::NoSelection> selection; Glib::RefPtr<Gtk::NoSelection> selection;
Glib::RefPtr<Gtk::StringList> drop_list;
// Factory to renderer branch string // Factory to renderer branch string
Glib::RefPtr<Gtk::ColumnViewColumn> branch_column; Glib::RefPtr<Gtk::ColumnViewColumn> branch_column;
@ -51,6 +52,12 @@ private:
void setup_version(const Glib::RefPtr<Gtk::ListItem> &item); void setup_version(const Glib::RefPtr<Gtk::ListItem> &item);
void bind_version(const Glib::RefPtr<Gtk::ListItem> &item); void bind_version(const Glib::RefPtr<Gtk::ListItem> &item);
// Factory to renderer the mode selection
Glib::RefPtr<Gtk::ColumnViewColumn> mode_column;
Glib::RefPtr<Gtk::SignalListItemFactory> mode_factory;
void setup_mode(const Glib::RefPtr<Gtk::ListItem> &item);
void bind_mode(const Glib::RefPtr<Gtk::ListItem> &item);
// Strings to store path on Windows and Unix-Like systems // Strings to store path on Windows and Unix-Like systems
std::string config_win32, config_unix, config_darwin; std::string config_win32, config_unix, config_darwin;
json data, data_backup; json data, data_backup;