MenuButton (JavaScript) Anna Zacchi azzurroverde@gmail.com 2012 Tlačítko, které po kliknutí zobrazí nabídku MenuButton

Widget GtkMenuButton se používá k zobrazení nabídky po kliknutí na něj. Nabídka může být poskytnuta v podobě GtkMenu nebo jako abstraktní GMenuModel. Tlačítko může obsahovat libovolný platný synovský widget. To znamená, že může obsahovat většinu ostatních standardních potomků GtkWidget. Nejčastěji používaným vloženým widgetem je GtkArrow.

Musíte používat GNOME 3.6 nebo novější, aby widget MenuButton fungoval.

#!/usr/bin/gjs imports.gi.versions.Gtk = '3.0'; const Gio = imports.gi.Gio; const GLib = imports.gi.GLib; const Gtk = imports.gi.Gtk; class Application { // Vytvoří aplikaci constructor() { this.application = new Gtk.Application({ application_id: 'org.example.myapp', flags: Gio.ApplicationFlags.FLAGS_NONE }); // Napojí signály "activate" a "startup" k funkcím zpětného volání this.application.connect('activate', this._onActivate.bind(this)); this.application.connect('startup', this._onStartup.bind(this)); } // Vytvoří uživatelské rozhraní (v tomto případě jen ApplicationWindow) _buildUI() { this._window = new Gtk.ApplicationWindow({ application: this.application, window_position: Gtk.WindowPosition.CENTER, title: "MenuButton Example" }); this._window.set_default_size(600, 400); this.grid = new Gtk.Grid(); this._window.add(this.grid); this._menuButton = new Gtk.MenuButton(); this.grid.attach(this._menuButton, 0, 0, 1, 1 ); this.menu = Gtk.Menu.new_from_model(this.menuModel); this.menu.show(); this._menuButton.set_menu_model (this.menuModel); this._menuButton.set_size_request(80, 35); this._menuButton.show(); this._window.show_all(); } _showNew() { print("You clicked \"New\""); } _showAbout() { print("You clicked \"About\""); } // Vytvoří položky nabídky a napojí signály na funkce zpětného volání _initMenus() { let newAction = new Gio.SimpleAction({ name: 'new' }); newAction.connect('activate', () => { this._showNew(); }); this.application.add_action(newAction); let aboutAction = new Gio.SimpleAction({ name: 'about' }); aboutAction.connect('activate', () => { this._showAbout(); }); this.application.add_action(aboutAction); let quitAction = new Gio.SimpleAction({ name: 'quit' }); quitAction.connect('activate', () => { this._window.destroy(); }); this.application.add_action(quitAction); this.menuModel = new Gio.Menu(); this.menuItemNew = Gio.MenuItem.new("New", 'app.new'); this.menuItemAbout = Gio.MenuItem.new("About", 'app.about'); this.fileMenuItem = Gio.MenuItem.new("Other", null); this.menuModel.append_item(this.menuItemNew); this.menuModel.append_item(this.menuItemAbout); // Podnabídka this.subMenu = new Gio.Menu(); this.fileMenuItem.set_submenu(this.subMenu); this.menuItemQuit = Gio.MenuItem.new("Quit", 'app.quit'); this.subMenu.append_item(this.menuItemQuit); this.menuModel.append_item(this.fileMenuItem); } // Funkce zpětného volání pro signál "activate" _onActivate() { this._window.present(); } // Funkce zpětného volání pro signál "startup" _onStartup() { //Před voláním _buildUI() musíte zavolat _initMenus() this._initMenus(); this._buildUI(); } }; // Spustí aplikaci let app = new Application(); app.application.run(ARGV);

V této ukázce se používá následující:

MenuButton