correct menu_bar.ui

This commit is contained in:
Pcornat 2024-10-28 18:58:19 +01:00
parent a328b57c3c
commit 77b14d2fe3
Signed by: Pcornat
GPG Key ID: E0326CC678A00BDD
4 changed files with 86 additions and 8 deletions

View File

@ -6,15 +6,15 @@
#include <iostream> #include <iostream>
namespace learn_gtkmm4 { namespace learn_gtkmm4 {
HelloWorld::HelloWorld() : m_button("Hello world!") { HelloWorld::HelloWorld(const Glib::RefPtr<Gio::Menu>& menuModel) :
m_VBox(Gtk::Orientation::VERTICAL), m_menu_bar(menuModel), m_button("Hello world!") {
set_title("Hello world!"); set_title("Hello world!");
set_default_size(720, 1280); set_default_size(1280, 720);
add_action("Open");
add_action("Quit");
set_show_menubar();
m_button.set_margin(10); m_button.set_margin(10);
m_button.signal_clicked().connect(sigc::mem_fun(*this, &HelloWorld::on_button_clicked)); m_button.signal_clicked().connect(sigc::mem_fun(*this, &HelloWorld::on_button_clicked));
set_child(m_button); m_VBox.append(m_menu_bar);
m_VBox.append(m_button);
set_child(m_VBox);
} }
void HelloWorld::on_button_clicked() { void HelloWorld::on_button_clicked() {

View File

@ -9,18 +9,21 @@
#include <gtkmm/glarea.h> #include <gtkmm/glarea.h>
#include <gtkmm/box.h> #include <gtkmm/box.h>
#include <gtkmm/applicationwindow.h> #include <gtkmm/applicationwindow.h>
#include <gtkmm/popovermenubar.h>
#include <gtkmm/popovermenu.h>
namespace learn_gtkmm4 { namespace learn_gtkmm4 {
class HelloWorld : public Gtk::ApplicationWindow { class HelloWorld : public Gtk::ApplicationWindow {
public: public:
HelloWorld(); explicit HelloWorld(const Glib::RefPtr<Gio::Menu>& menuModel);
~HelloWorld() override = default; ~HelloWorld() override = default;
protected: protected:
void on_button_clicked(); void on_button_clicked();
Gtk::Box m_VBox; Gtk::Box m_VBox;
Gtk::PopoverMenuBar m_menu_bar;
Gtk::Button m_button; Gtk::Button m_button;
Gtk::GLArea gl_area; Gtk::GLArea gl_area;
}; };

View File

@ -1,7 +1,24 @@
#include "hello_world.hpp" #include "hello_world.hpp"
#include <gtkmm/application.h> #include <gtkmm/application.h>
#include <gtkmm/builder.h>
#include <iostream>
#include <memory>
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
auto app = Gtk::Application::create("org.gtkmm.example"); auto app = Gtk::Application::create("org.gtkmm.example");
return app->make_window_and_run<learn_gtkmm4::HelloWorld>(argc, argv);
const auto menu_model = []() -> Glib::RefPtr<Gio::Menu> {
try {
const auto builder = Gtk::Builder::create_from_file("menu_bar.ui");
return std::dynamic_pointer_cast<Gio::Menu>(builder->get_object("menu"));
} catch (const std::exception &e) {
std::cerr << e.what() << '\n';
return nullptr;
}
}();
if (menu_model == nullptr) {
std::cerr << "Menu model object is null. Down-cast failed.\n";
return EXIT_FAILURE;
}
return app->make_window_and_run<learn_gtkmm4::HelloWorld>(argc, argv, menu_model);
} }

58
menu_bar.ui Normal file
View File

@ -0,0 +1,58 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gio" version="2.0"/>
<menu id="menu">
<submenu id="file_submenu">
<attribute name="label" translatable="yes" context="&quot;Files&quot; menu used here">Fichiers</attribute>
<section>
<item>
<attribute name="action">file.new</attribute>
<attribute name="icon">document-new</attribute>
<attribute name="label" translatable="yes" context="It means New File in french">Nouveau fichier</attribute>
</item>
<item>
<attribute name="action">file.open</attribute>
<attribute name="icon">document-open</attribute>
<attribute name="label" translatable="yes" context="It means Open in french">Ouvrir</attribute>
</item>
<item>
<attribute name="action">file.save</attribute>
<attribute name="icon">document-save</attribute>
<attribute name="label" translatable="yes" context="It means Save">Enregistrer</attribute>
</item>
<item>
<attribute name="action">file.save_as</attribute>
<attribute name="icon">document-save-as</attribute>
<attribute name="label" translatable="yes" context="It means Save">Enregistrer sous</attribute>
</item>
</section>
<section>
<item>
<attribute name="action">file.quit</attribute>
<attribute name="icon">application-exit</attribute>
<attribute name="label" translatable="yes" context="It means Quit">Quitter</attribute>
</item>
</section>
</submenu>
<submenu id="edit_submenu">
<attribute name="label" translatable="yes" context="It means Edit">Éditer</attribute>
<section>
<item>
<attribute name="action">edit.copy</attribute>
<attribute name="icon">edit-copy</attribute>
<attribute name="label" translatable="yes">Copier</attribute>
</item>
<item>
<attribute name="action">edit.cut</attribute>
<attribute name="icon">edit-cut</attribute>
<attribute name="label" translatable="yes">Couper</attribute>
</item>
<item>
<attribute name="action">edit.paste</attribute>
<attribute name="icon">edit-paste</attribute>
<attribute name="label" translatable="yes">Coller</attribute>
</item>
</section>
</submenu>
</menu>
</interface>