dialog_localsettings::dialog_localsettings() { this->set_size_request(350, -1); this->set_title("Local Settings"); this->add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); this->add_button(Gtk::Stock::OK, Gtk::RESPONSE_OK); Gtk::Frame *frame = Gtk::manage(new Gtk::Frame); frame->set_margin_top(5); frame->set_margin_left(5); frame->set_margin_right(5); frame->set_margin_bottom(5); frame->set_hexpand(true); frame->set_vexpand(true); Gtk::Grid *grid = Gtk::manage(new Gtk::Grid); grid->set_margin_top(15); grid->set_margin_left(15); grid->set_margin_right(15); grid->set_margin_bottom(15); grid->set_hexpand(true); grid->set_vexpand(true); grid->set_row_spacing(15); frame->add(*grid); Gtk::Label *label = Gtk::manage(new Gtk::Label("Host: ")); label->set_halign(Gtk::ALIGN_END); grid->attach(*label, 0, 0, 1, 1); eHost = Gtk::manage(new Gtk::Entry); eHost->set_hexpand(true); grid->attach(*eHost, 1, 0, 1, 1); label = Gtk::manage(new Gtk::Label("Username: "******"Password: "******"Update Interval: ")); label->set_halign(Gtk::ALIGN_END); grid->attach(*label, 0, 3, 1, 1); Gtk::Box *box = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL, 0)); grid->attach(*box, 1, 3, 1, 1); sUpdateInterval = Gtk::manage(new Gtk::SpinButton(Gtk::Adjustment::create(5.0, 1.0, 60.0, 1.0, 10.0, 0.0), 0.0, 0)); sUpdateInterval->set_hexpand(false); box->pack_start(*sUpdateInterval, Gtk::PACK_EXPAND_WIDGET, 2); label = Gtk::manage(new Gtk::Label("(seconds)")); label->set_halign(Gtk::ALIGN_END); box->pack_start(*label, Gtk::PACK_EXPAND_WIDGET, 2); frame->show_all(); this->get_content_area()->add(*frame); }
Gobby::StatusBar::MessageHandle Gobby::StatusBar::add_message(Gobby::StatusBar::MessageType type, const Glib::ustring& message, const Glib::ustring& dialog_message, unsigned int timeout) { if(m_visible_messages >= 12) { for(MessageHandle iter = m_list.begin(); iter != m_list.end(); ++iter) { if(*iter) { if((*iter)->is_error()) remove_message(iter); else // only hide message because whoever // installed it is expecting to be // able to call remove_message on it hide_message(iter); break; } } } Gtk::Grid* grid = Gtk::manage(new Gtk::Grid()); grid->set_column_spacing(6); grid->set_margin_start(2); grid->set_margin_end(2); Gtk::Image* image = Gtk::manage(new Gtk::Image); image->set_from_icon_name(message_type_to_icon_name(type), Gtk::ICON_SIZE_MENU); grid->attach(*image, 0, 0, 1, 1); image->show(); Gtk::Label* label = Gtk::manage( new Gtk::Label(message, Gtk::ALIGN_START)); label->set_ellipsize(Pango::ELLIPSIZE_END); // If we set halign instead, the label will not behave correctly // when ellipsized, because then it has always all space around it // allocated, and the alignment "jumps" around whin resizing the // window due to new characters appearing or disappearing as a result // of the ellipsization. #if GTK_CHECK_VERSION(3, 16, 0) gtk_label_set_xalign(label->gobj(), 0.0); #else label->set_alignment(0.0, 0.0); #endif label->show(); grid->attach(*label, 1, 0, 1, 1); Gtk::Frame* frame = Gtk::manage(new Gtk::Frame); m_list.push_back(0); Gobby::StatusBar::MessageHandle iter(--m_list.end()); sigc::connection timeout_conn; if(timeout) { timeout_conn = Glib::signal_timeout().connect_seconds( sigc::bind( sigc::bind_return( sigc::mem_fun( *this, &StatusBar::remove_message), false), iter), timeout); } *iter = new Message(frame, message, dialog_message, timeout_conn); ++m_visible_messages; if(dialog_message.empty()) { frame->add(*grid); } else { Gtk::EventBox *eventbox = Gtk::manage(new Gtk::EventBox); frame->add(*eventbox); eventbox->add(*grid); eventbox->signal_button_press_event().connect( sigc::bind_return(sigc::bind( sigc::mem_fun( *this, &StatusBar::on_message_clicked), iter), false)); eventbox->show(); } grid->show(); // Insert at front gtk_grid_attach_next_to( gobj(), GTK_WIDGET(frame->gobj()), NULL, GTK_POS_LEFT, 1, 1); frame->set_halign(Gtk::ALIGN_START); frame->set_hexpand(false); frame->set_shadow_type(Gtk::SHADOW_NONE); frame->show(); return iter; }