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!


Anmelden zum Antworten