GTKMM 3 - InputDialog?
-
Hi,
ich brauche einen Input-Dialog für GTKMM ... also etwas in der Form:
- action X -> Input Dialog (modal!!) öffnet sich -> user Eingabe -> wenn OK geklickt wird: User-Eingabe zurückgeben -> wenn schließen geklickt wird User-EIngabe ignorieren.Offensichtlich gibt es so etwas nicht (??) ... deshalb habe ich versucht es selbst zu bauen ...
class InputDialog : public Gtk::Window { public: InputDialog(); virtual ~InputDialog(); protected: //Signal handlers: void on_button_close(); //Child widgets: Gtk::Box m_HBox; Gtk::Box m_VBox; Gtk::Entry m_Entry; Gtk::Button m_Button_Close; };
#include "InputDialog.h" #include <iostream> InputDialog::InputDialog() : m_VBox(Gtk::ORIENTATION_VERTICAL), m_Button_Close("Ok") { set_size_request(200, 100); set_title("Rechnungsnummer setzen"); add(m_VBox); m_Entry.set_max_length(50); m_Entry.set_text(*s); m_Entry.select_region(0, m_Entry.get_text_length()); m_VBox.pack_start(m_Entry); // Note that add() can also be used instead of pack_xxx() m_VBox.add(m_HBox); m_Button_Close.signal_clicked().connect( sigc::mem_fun(*this, &InputDialog::on_button_close) ); m_VBox.pack_start(m_Button_Close); m_Button_Close.set_can_default(); m_Button_Close.grab_default(); show_all_children(); } InputDialog::~InputDialog() { } void InputDialog::on_button_close() { std::string s = m_Entry.get_text(); std::cerr << s << std::endl; hide(); }
und im "Hauptprogramm":
void ExampleWindow::on_menu_test() { InputDialog* c = new InputDialog(); c->show(); }
Das ist noch nicht so befriedigend ...
1. wie bekomme ich c modal?
2. wie kann ich zwischen dem Hauptprogramm und c kommunizieren?
3. wie kann ich nach c->show warten bis der "Dialog" wieder geschlossen wird?
4. Gibts vielleicht doch irgendwo was vorgefertigtest? Ist doch eigentlich eine Standard-Operation ...Danke!