Gtk::ToggleButton * ToggleDucksDial::create_label_button(Gtk::IconSize iconsize, const char *stockid, const char * tooltip) { Gtk::ToggleButton *tbutton = manage(new class Gtk::ToggleButton()); Gtk::Image *icon = manage(new Gtk::Image(Gtk::StockID(stockid), iconsize)); tbutton->set_tooltip_text(tooltip); tbutton->add(*icon); icon->set_padding(0, 0); icon->show(); tbutton->set_relief(Gtk::RELIEF_NONE); tbutton->show(); return tbutton; }
//------------------------------------------------------------------------------ bool mforms::gtk::ToolBarImpl::create_tool_item(mforms::ToolBarItem *item, ToolBarItemType type) { Gtk::Widget *w = 0; switch (type) { case mforms::TextActionItem: case mforms::ActionItem: case mforms::SwitcherItem: { Gtk::Button *btn = Gtk::manage(new Gtk::Button()); btn->set_focus_on_click(false); btn->set_border_width(0); btn->set_relief(Gtk::RELIEF_NONE); btn->signal_clicked().connect(sigc::bind(sigc::ptr_fun(process_ctrl_action), btn, item)); if (type == mforms::SwitcherItem) btn->set_always_show_image(true); w = btn; break; } case mforms::SegmentedToggleItem: case mforms::ToggleItem: { Gtk::ToggleButton *btn = Gtk::manage(new Gtk::ToggleButton()); btn->set_focus_on_click(false); btn->set_relief(Gtk::RELIEF_NONE); btn->signal_toggled().connect(sigc::bind(sigc::ptr_fun(process_ctrl_action), btn, item)); btn->set_inconsistent(false); w = btn; break; } case mforms::SeparatorItem: { Gtk::Separator *sep = new Gtk::Separator(Gtk::ORIENTATION_VERTICAL); w = sep; break; } case mforms::SearchFieldItem: { #if GTK_VERSION_GE(2, 16) Gtk::Entry *entry = Gtk::manage(new Gtk::Entry()); w = entry; entry->set_icon_from_stock(Gtk::Stock::FIND); #else Gtk::Box *hbox = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL, 0)); w = hbox; Gtk::Image *image = Gtk::manage(new Gtk::Image(Gtk::Stock::FIND, Gtk::ICON_SIZE_MENU)); Gtk::Entry *entry = Gtk::manage(new Gtk::Entry()); hbox->pack_start(*image, false, true); hbox->pack_start(*entry, true, true); hbox->set_data("entry", entry); hbox->show_all(); #endif entry->signal_activate().connect(sigc::bind(sigc::ptr_fun(process_ctrl_action), entry, item)); break; } case mforms::TextEntryItem: { Gtk::Box *hbox = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL, 0)); w = hbox; Gtk::Entry *entry = Gtk::manage(new Gtk::Entry()); hbox->pack_start(*entry, true, true); hbox->set_data("entry", entry); hbox->show_all(); entry->signal_activate().connect(sigc::bind(sigc::ptr_fun(process_ctrl_action), entry, item)); break; } case mforms::FlatSelectorItem: case mforms::SelectorItem: { Gtk::ComboBoxText *ct = Gtk::manage(new Gtk::ComboBoxText()); ct->signal_changed().connect(sigc::bind(sigc::ptr_fun(process_ctrl_action), ct, item)); w = ct; break; } case mforms::ColorSelectorItem: { if (!color_combo_columns) { color_combo_columns = new ColorComboColumns(); } Gtk::ComboBox *ct = Gtk::manage(new Gtk::ComboBox()); ct->pack_start(color_combo_columns->image); ct->signal_changed().connect(sigc::bind(sigc::ptr_fun(process_ctrl_action), ct, item)); w = ct; break; } case mforms::ExpanderItem: case mforms::LabelItem: { Gtk::Label *label = Gtk::manage(new Gtk::Label("", 0.0, 0.5)); w = label; break; } case mforms::ImageBoxItem: { Gtk::Image *image = Gtk::manage(new Gtk::Image()); w = image; break; } case mforms::TitleItem: { Gtk::Label *label = Gtk::manage(new Gtk::Label("", 0.0, 0.5)); w = label; auto provider = Gtk::CssProvider::create(); provider->load_from_data("* { color: #333; font-weight: bold; }"); w->get_style_context()->add_provider(provider, GTK_STYLE_PROVIDER_PRIORITY_USER); break; } } if (w) { w->show(); } else logError("create_tool_item, widget is 0 for passed type %i\n", type); item->set_data(w); return w != 0; }
void StateBrush_Context::refresh_tool_options() { brush_buttons.clear(); App::dialog_tool_options->clear(); App::dialog_tool_options->set_local_name(_("Brush Tool")); App::dialog_tool_options->set_name("brush"); // create container Gtk::Table *table = Gtk::manage(new Gtk::Table(1, 2, false)); // create options table->attach(eraser_checkbox, 0, 1, 0, 1, Gtk::FILL, Gtk::SHRINK); // create brushes container widget int cols = 4; Gtk::Table *brushes_table = Gtk::manage(new Gtk::Table(1, cols)); // load brushes // scan directories std::set<String> files; for(std::set<String>::const_iterator i = paths.begin(); i != paths.end(); ++i) scan_directory(*i, 1, files); // load files int col = 0; int row = 0; Gtk::ToggleButton *first_button = NULL; Gtk::IconSize iconsize = Gtk::ICON_SIZE_LARGE_TOOLBAR; for(std::set<String>::const_iterator i = files.begin(); i != files.end(); ++i) { if (!brush_buttons.count(*i) && filename_extension(*i) == ".myb") { const String &brush_file = *i; const String icon_file = filename_sans_extension(brush_file) + "_prev.png"; if (files.count(icon_file)) { // create button Gtk::ToggleButton *button = brush_buttons[*i] = Gtk::manage(new Gtk::ToggleButton()); Glib::RefPtr<Gdk::Pixbuf> pixbuf, pixbuf_scaled; pixbuf = Gdk::Pixbuf::create_from_file(icon_file); pixbuf_scaled = pixbuf->scale_simple(48, 48, Gdk::INTERP_BILINEAR); button->set_image(*Gtk::manage(new Gtk::Image(pixbuf_scaled))); button->set_relief(Gtk::RELIEF_NONE); button->signal_toggled().connect( sigc::bind(sigc::mem_fun(*this, &StateBrush_Context::select_brush), button, brush_file) ); if (first_button == NULL) first_button = button; if (col >= cols) { // add row col = 0; ++row; brushes_table->resize(row + 1, cols); } // add button brushes_table->attach(*button, col, col+1, row, row+1); ++col; } } } Gtk::ScrolledWindow *brushes_scroll = Gtk::manage(new Gtk::ScrolledWindow()); brushes_scroll->add(*brushes_table); table->attach(*brushes_scroll, 0, 1, 1, 2); table->show_all(); App::dialog_tool_options->add(*table); // select first brush if (first_button != NULL) first_button->set_active(true); }