spek

Acoustic spectrum analyser
git clone http://git.hanabi.in/repos/spek.git
Log | Files | Refs | README

commit 7e5ca1765a057aee5d65bd9df83dd34fe4618fb3
parent 44cb6f587d72ba148678d3e68a320669e602c303
Author: Alexander Kojevnikov <alexander@kojevnikov.com>
Date:   Fri, 10 Aug 2012 19:38:01 -0700

Main menu and toolbar

Diffstat:
Msrc/spek-window.cc | 84+++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------
Msrc/spek-window.hh | 7+++++--
Msrc/spek-window.vala | 65-----------------------------------------------------------------
Msrc/spek.cc | 2+-
4 files changed, 67 insertions(+), 91 deletions(-)

diff --git a/src/spek-window.cc b/src/spek-window.cc @@ -16,44 +16,82 @@ * along with Spek. If not, see <http://www.gnu.org/licenses/>. */ -#include "spek-window.hh" +#include <wx/artprov.h> -enum -{ - ID_Quit = 1, - ID_About, -}; +#include "spek-window.hh" BEGIN_EVENT_TABLE(SpekWindow, wxFrame) - EVT_MENU(ID_Quit, SpekWindow::OnQuit) - EVT_MENU(ID_About, SpekWindow::OnAbout) + EVT_MENU(wxID_OPEN, SpekWindow::OnOpen) + EVT_MENU(wxID_SAVE, SpekWindow::OnSave) + EVT_MENU(wxID_EXIT, SpekWindow::OnExit) + EVT_MENU(wxID_PREFERENCES, SpekWindow::OnPreferences) + EVT_MENU(wxID_ABOUT, SpekWindow::OnAbout) END_EVENT_TABLE() -SpekWindow::SpekWindow(const wxString& title, const wxPoint& pos, const wxSize& size) - : wxFrame(NULL, -1, title, pos, size) +SpekWindow::SpekWindow(const wxString& title) : wxFrame(NULL, -1, title) { - wxMenu *menuFile = new wxMenu(); + // TODO: test on all platforms + SetIcon(wxIcon(wxT("spek"))); + + wxMenuBar *menu = new wxMenuBar(); + + wxMenu *menu_file = new wxMenu(); + wxMenuItem *menu_file_open = new wxMenuItem(menu_file, wxID_OPEN); + menu_file->Append(menu_file_open); + wxMenuItem *menu_file_save = new wxMenuItem(menu_file, wxID_SAVE); + menu_file->Append(menu_file_save); + menu_file->AppendSeparator(); + menu_file->Append(wxID_EXIT); + menu->Append(menu_file, _("&File")); // TODO: stock text - menuFile->Append(ID_About, wxT("&About...")); - menuFile->AppendSeparator(); - menuFile->Append(ID_Quit, wxT("E&xit")); + wxMenu *menu_edit = new wxMenu(); + wxMenuItem *menu_edit_prefs = new wxMenuItem(menu_edit, wxID_PREFERENCES); + // TODO: check if this is needed + menu_edit_prefs->SetItemLabel(menu_edit_prefs->GetItemLabelText() + wxT("\tCtrl+E")); + menu_edit->Append(menu_edit_prefs); + menu->Append(menu_edit, _("&Edit")); // TODO: stock text + + wxMenu *menu_help = new wxMenu(); + wxMenuItem *menu_help_about = new wxMenuItem(menu_help, wxID_ABOUT); + // TODO: check if this is needed + menu_help_about->SetItemLabel(menu_help_about->GetItemLabelText() + wxT("\tF1")); + menu_help->Append(menu_help_about); + menu->Append(menu_help, _("&Help")); // TODO: stock text + + SetMenuBar(menu); + + wxToolBar *toolbar = CreateToolBar(); + // TODO: bundled file open/save icons suck, provide our own (tango?) + toolbar->AddTool( + wxID_OPEN, + menu_file_open->GetItemLabelText(), + wxArtProvider::GetBitmap(wxART_FILE_OPEN) + ); + toolbar->AddTool( + wxID_SAVE, + menu_file_save->GetItemLabelText(), + wxArtProvider::GetBitmap(wxART_FILE_SAVE) + ); + toolbar->Realize(); +} - wxMenuBar *menuBar = new wxMenuBar(); - menuBar->Append(menuFile, wxT("&File")); +void SpekWindow::OnOpen(wxCommandEvent& WXUNUSED(event)) +{ +} - SetMenuBar(menuBar); +void SpekWindow::OnSave(wxCommandEvent& WXUNUSED(event)) +{ } -void SpekWindow::OnQuit(wxCommandEvent& WXUNUSED(event)) +void SpekWindow::OnExit(wxCommandEvent& WXUNUSED(event)) { Close(true); } +void SpekWindow::OnPreferences(wxCommandEvent& WXUNUSED(event)) +{ +} + void SpekWindow::OnAbout(wxCommandEvent& WXUNUSED(event)) { - wxMessageBox( - wxT("This is a wxWidgets' Hello world sample"), - wxT("About Hello World"), - wxOK | wxICON_INFORMATION - ); } diff --git a/src/spek-window.hh b/src/spek-window.hh @@ -24,10 +24,13 @@ class SpekWindow : public wxFrame { public: - SpekWindow(const wxString& title, const wxPoint& pos, const wxSize& size); + SpekWindow(const wxString& title); protected: - void OnQuit(wxCommandEvent& event); + void OnOpen(wxCommandEvent& event); + void OnSave(wxCommandEvent& event); + void OnExit(wxCommandEvent& event); + void OnPreferences(wxCommandEvent& event); void OnAbout(wxCommandEvent& event); private: diff --git a/src/spek-window.vala b/src/spek-window.vala @@ -31,72 +31,12 @@ namespace Spek { private FileFilter filter_audio; private FileFilter filter_png; - private const Gtk.ActionEntry[] ACTION_ENTRIES = { - { "File", null, N_("_File") }, - { "FileOpen", Stock.OPEN, null, null, null, on_file_open }, - { "FileSave", Stock.SAVE, null, null, null, on_file_save }, - { "FileQuit", Stock.QUIT, null, null, null, on_file_quit }, - { "Edit", null, N_("_Edit") }, - { "EditPreferences", Stock.PREFERENCES, null, "<Ctrl>E", null, on_edit_preferences }, - { "Help", null, N_("_Help") }, - { "HelpAbout", Stock.ABOUT, null, "F1", null, on_help_about } - }; - - private const string UI = """ -<ui> - <menubar name='MenuBar'> - <menu action='File'> - <menuitem action='FileOpen'/> - <menuitem action='FileSave'/> - <separator/> - <menuitem action='FileQuit'/> - </menu> - <menu action='Edit'> - <menuitem action='EditPreferences'/> - </menu> - <menu action='Help'> - <menuitem action='HelpAbout'/> - </menu> - </menubar> - - <toolbar name='ToolBar'> - <toolitem action='FileOpen'/> - <toolitem action='FileSave'/> - <separator expand='true'/> - <toolitem action='HelpAbout'/> - </toolbar> -</ui> -"""; private const Gtk.TargetEntry[] DEST_TARGET_ENTRIES = { { "text/uri-list", 0, 0 } }; public Window (string? file_name) { - description = title = _("Spek - Acoustic Spectrum Analyser"); - set_default_icon_name ("spek"); - set_default_size (640, 480); - destroy.connect (Gtk.main_quit); - - var actions = new Gtk.ActionGroup ("Actions"); - actions.set_translation_domain (Config.GETTEXT_PACKAGE); - actions.add_actions (ACTION_ENTRIES, this); - ui = new UIManager (); - ui.insert_action_group (actions, 0); - add_accel_group (ui.get_accel_group ()); - try { - ui.add_ui_from_string (UI, -1); - } catch (Error e) { - warning ("Could not load the UI: %s\n", e.message); - } - - var menubar = ui.get_widget ("/MenuBar"); - var toolbar = (Toolbar) ui.get_widget ("/ToolBar"); - toolbar.set_style (ToolbarStyle.BOTH_HORIZ); - ((ToolItem) ui.get_widget ("/ToolBar/FileOpen")).is_important = true; - ((ToolItem) ui.get_widget ("/ToolBar/FileSave")).is_important = true; - ((ToolItem) ui.get_widget ("/ToolBar/HelpAbout")).is_important = true; - info_bar = new InfoBar.with_buttons (Stock.OK, ResponseType.OK); var label = new Label (null); label.use_markup = true; @@ -126,17 +66,12 @@ namespace Spek { } var vbox = new VBox (false, 0); - vbox.pack_start (menubar, false, true, 0); - vbox.pack_start (toolbar, false, true, 0); vbox.pack_start (info_bar, false, true, 0); vbox.pack_start (spectrogram, true, true, 0); add (vbox); - menubar.show_all (); - toolbar.show_all (); spectrogram.show_all (); vbox.show (); - Platform.fix_ui (ui); show (); // Set up Drag and Drop diff --git a/src/spek.cc b/src/spek.cc @@ -43,7 +43,7 @@ bool Spek::OnInit() return false; } - SpekWindow *window = new SpekWindow(wxT("Hello World"), wxPoint(50,50), wxSize(450,340)); + SpekWindow *window = new SpekWindow(_("Spek - Acoustic Spectrum Analyser")); window->Show(true); SetTopWindow(window); return true;