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);
}
}