Archive / / / / / Echo.UI.MainWindow.vala
2008-12-19 05:20:11 UTC
previous next
/* vim: set noexpandtab tabstop=4 shiftwidth=4 nowrap textwidth=100 * * Echo Media Player * Copyright (C) 2008 Shane O'Connell * * [ The original file includes a copyright header in this location describing * the file as being released under the terms of the GNU General Public * License. It has been removed in order to display the file as part of the * archive. ] */ using Echo.Core; using Echo.UI.Tabs; using Echo.UI.Widgets; public class Echo.UI.MainWindow : Gtk.Window { private SourcesPane _sources_pane; private BrowserPane _browser_pane; private TabPane _tab_pane; private Gtk.Statusbar _statusbar; private uint _statusbar_context_id; public SourcesPane sources_pane { get { return _sources_pane; } } public BrowserPane browser_pane { get { return _browser_pane; } } public TabPane tab_pane { get { return _tab_pane; } } public MainWindow(ActionManager action_manager) { action_manager.add_menubar("main-menu", """ <menu action="file-menu"> <menuitem action="new-playlist"/> <menuitem action="new-smart-playlist"/> <separator/> <menuitem action="open-file"/> <menuitem action="open-url"/> <separator/> <menuitem action="refresh-libraries"/> <separator/> <menuitem action="close"/> <menuitem action="quit"/> </menu> <menu action="edit-menu"> <menuitem action="edit-preferences"/> </menu> <menu action="view-menu"> <menuitem action="view-browser"/> <menuitem action="view-fullscreen"/> </menu> <menu action="playback-menu"> <menuitem action="play-pause"/> <menuitem action="next-track"/> <menuitem action="previous-track"/> <separator/> <menuitem action="stop-when-finished"/> <separator/> <menuitem action="shuffle"/> <menu action="repeat-menu"> <menuitem action="repeat-off"/> <separator/> <menuitem action="repeat-all"/> <menuitem action="repeat-single"/> </menu> <!--<menu action="shuffle-menu"> <menuitem action="shuffle-off"/> <separator/> <menuitem action="shuffle-all"/> <menuitem action="shuffle-by-artist"/> <menuitem action="shuffle-by-album"/> </menu>--> </menu> <menu action="help-menu"> <menuitem action="about"/> </menu> """); action_manager.add_menu("next-track-popup", """ <menuitem action="shuffle"/> <menu action="repeat-menu"> <menuitem action="repeat-off"/> <separator/> <menuitem action="repeat-all"/> <menuitem action="repeat-single"/> </menu> """); this.set_title("Echo Media Player"); this.set_default_size(800, 600); this.set_icon_name("applications-multimedia"); this.delete_event += this.hide_on_delete; // Create main window widgets _sources_pane = new SourcesPane(); _browser_pane = new BrowserPane(); _tab_pane = new TabPane(); _statusbar = new Gtk.Statusbar(); _statusbar_context_id = _statusbar.get_context_id("status"); // Create toolbar var toolbar = new Gtk.Toolbar(); toolbar.set_style(Gtk.ToolbarStyle.ICONS); toolbar.insert(action_manager.get_toolbutton_proxy("previous-track"), -1); toolbar.insert(action_manager.get_toolbutton_proxy("play-pause"), -1); toolbar.insert(action_manager.get_menutoolbutton_proxy("next-track", "next-track-popup"), -1); toolbar.insert(new Gtk.SeparatorToolItem(), -1); var track_info = new TrackInfoToolItem(); track_info.set_expand(true); toolbar.insert(track_info, -1); toolbar.insert(new Gtk.SeparatorToolItem(), -1); toolbar.insert(new TrackSliderToolItem(), -1); toolbar.insert(new Gtk.SeparatorToolItem(), -1); toolbar.insert(new VolumeControlToolItem(), -1); // Create sizers var browser_sizer = new Gtk.HPaned(); browser_sizer.set_position(200); browser_sizer.add1(_browser_pane); browser_sizer.add2(_tab_pane); var main_sizer = new Gtk.HPaned(); main_sizer.set_position(160); main_sizer.add1(_sources_pane); main_sizer.add2(browser_sizer); // Create main VBox and add it var vbox = new Gtk.VBox(false, 0); vbox.pack_start(action_manager.get_menubar("main-menu"), false, false, 0); vbox.pack_start(toolbar, false, false, 0); vbox.pack_start(main_sizer, true, true, 2); vbox.pack_start(_statusbar, false, false, 0); this.add(vbox); // Don't show the resize grip if we don't need to this.window_state_event += (window, event) => { _statusbar.set_has_resize_grip( (event.new_window_state & (Gdk.WindowState.MAXIMIZED | Gdk.WindowState.FULLSCREEN)) == 0); return false; }; // TODO set everything visible except the window itself, instead of show_all this.show_all(); // TODO set browser visible based on user preferences _browser_pane.visible = false; } public void show_status_message(string message) { _statusbar.pop(_statusbar_context_id); _statusbar.push(_statusbar_context_id, message); } }