UIManager

Έπειτα θα πρέπει να δημιουργήσετε μια UIManager και να προσθέσετε την ActionGroup στην UIManager με την insert_action_group(). Σε αυτό το σημείο είναι επίσης καλή ιδέα να πείτε στο γονικό παράθυρο να απαντήσει στις καθορισμένες συντομεύσεις πληκτρολογίου, χρησιμοποιώντας add_accel_group().

Για παράδειγμα,

Glib::RefPtr<Gtk::UIManager> m_refUIManager =
    Gtk::UIManager::create();
m_refUIManager->insert_action_group(m_refActionGroup);
add_accel_group(m_refUIManager->get_accel_group());

Έπειτα, μπορείτε να ορίσετε την ενεργή ορατή διάταξη των μενού και εργαλειοθηκών και να προσθέσετε τη διάταξη γραφικής διεπαφής στην UIManager. Αυτή η "συμβολοσειρά γραφικής διεπαφής" χρησιμοποιεί μια μορφή XML, στην οποία θα πρέπει να αναφέρετε τα ονόματα των ενεργειών που έχετε ήδη δημιουργήσει. Για παράδειγμα:

Glib::ustring ui_info =
    "<ui>"
    "  <menubar name='MenuBar'>"
    "    <menu action='MenuFile'>"
    "      <menuitem action='New'/>"
    "      <menuitem action='Open'/>"
    "      <separator/>"
    "      <menuitem action='Quit'/>"
    "    </menu>"
    "    <menu action='MenuEdit'>"
    "      <menuitem action='Cut'/>"
    "      <menuitem action='Copy'/>"
    "      <menuitem action='Paste'/>"
    "    </menu>"
    "  </menubar>"
    "  <toolbar  name='ToolBar'>"
    "    <toolitem action='Open'/>"
    "    <toolitem action='Quit'/>"
    "  </toolbar>"
    "</ui>";

m_refUIManager->add_ui_from_string(ui_info);

Να θυμάστε ότι αυτά τα ονόματα είναι απλά αναγνωριστικά που χρησιμοποιούμε όταν δημιουργούμε τις ενέργειες. Δεν είναι το κείμενο που θα δει ο χρήστης στα μενού και τις εργαλειοθήκες. Δίνουμε αυτά τα αναγνώσιμα από άνθρωπο ονόματα όταν δημιουργούμε τις ενέργειες.

Για δημιουργία μιας Gtk::MenuBar ή Gtk::Toolbar την οποία μπορείτε στην πραγματικότητα να εμφανίσετε, θα πρέπει να χρησιμοποιήσετε τη μέθοδο UIManager::get_widget() και έπειτα να προσθέσετε το γραφικό συστατικό σε έναν περιέκτη. Για παράδειγμα:

Gtk::Widget* pMenubar = m_refUIManager->get_widget("/MenuBar");
pBox->add(*pMenuBar, Gtk::PACK_SHRINK);