Archive / / / / / MainWindow.cs
2008-11-13 23:23:02 UTC
previous next
// MainWindow.cs is part of 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 System; using Echo; namespace Echo.UI { public class MainWindow : Gtk.Window { private Gtk.StatusIcon status_icon; public MainWindow() : base(Gtk.WindowType.Toplevel) { Gtk.ActionGroup action_group = new Gtk.ActionGroup("default"); Gtk.ActionEntry[] actions = new Gtk.ActionEntry[] { new Gtk.ActionEntry("file-menu", null, "_File", null, null, null), new Gtk.ActionEntry("view-menu", null, "_View", null, null, null), new Gtk.ActionEntry("playback-menu", null, "_Playback", null, null, null), new Gtk.ActionEntry("repeat-menu", null, "_Repeat", null, null, null), new Gtk.ActionEntry("shuffle-menu", null, "_Shuffle", null, null, null), new Gtk.ActionEntry("help-menu", null, "_Help", null, null, null), new Gtk.ActionEntry("new-playlist", null, "_New Playlist", null, null, null), new Gtk.ActionEntry("new-smart-playlist", null, "New _Smart Playlist", null, null, null), new Gtk.ActionEntry("open-file", Gtk.Stock.Open, null, null, null, null), new Gtk.ActionEntry("open-url", null, "Open _URL", null, null, null), new Gtk.ActionEntry("refresh-libraries", null, "Refresh _Libraries", null, null, null), new Gtk.ActionEntry("close", Gtk.Stock.Close, delegate(object o, EventArgs e) { this.Hide(); }), new Gtk.ActionEntry("quit", Gtk.Stock.Quit, delegate(object o, EventArgs e) { Gtk.Application.Quit(); }), new Gtk.ActionEntry("view-fullscreen", null, "_Full Screen", null, null, null), new Gtk.ActionEntry("play-pause", Gtk.Stock.MediaPlay, null), new Gtk.ActionEntry("next-track", Gtk.Stock.MediaNext, null), new Gtk.ActionEntry("previous-track", Gtk.Stock.MediaPrevious, null), new Gtk.ActionEntry("stop-when-finished", null, "_Stop When Finished", null, null, null), new Gtk.ActionEntry("about", Gtk.Stock.About, null) }; action_group.Add(actions); Gtk.ToggleActionEntry[] toggle_actions = new Gtk.ToggleActionEntry[] { new Gtk.ToggleActionEntry("view-browser", null, "_Browser Pane", null, null, null, true) }; action_group.Add(toggle_actions); Gtk.RadioActionEntry[] shuffle_actions = new Gtk.RadioActionEntry[] { new Gtk.RadioActionEntry("shuffle-off", null, "Shuffle _Off", null, null, 0), new Gtk.RadioActionEntry("shuffle-by-song", null, "Shuffle By _Song", null, null, 1), new Gtk.RadioActionEntry("shuffle-by-artist", null, "Shuffle By _Artist", null, null, 2), new Gtk.RadioActionEntry("shuffle-by-album", null, "Shuffle By Al_bum", null, null, 3) }; action_group.Add(shuffle_actions, 0, null); Gtk.RadioActionEntry[] repeat_actions = new Gtk.RadioActionEntry[] { new Gtk.RadioActionEntry("repeat-off", null, "Repeat _Off", null, null, 0), new Gtk.RadioActionEntry("repeat-all", null, "Repeat _All", null, null, 1), new Gtk.RadioActionEntry("repeat-single", null, "Repeat _Single", null, null, 2) }; action_group.Add(repeat_actions, 0, null); string ui_info = "<ui>" + " <menubar name='main-menubar'>" + " <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='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'/>" + " <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-by-song'/>" + " <menuitem action='shuffle-by-artist'/>" + " <menuitem action='shuffle-by-album'/>" + " </menu>" + " </menu>" + " <menu action='help-menu'>" + " <menuitem action='about'/>" + " </menu>" + " </menubar>" + " <toolbar name='main-toolbar'>" + " <toolitem action='previous-track'/>" + " <toolitem action='play-pause'/>" + " </toolbar>" + " <popup name='status-icon-popup'>" + " <menuitem action='play-pause'/>" + " <menuitem action='previous-track'/>" + " <menuitem action='next-track'/>" + " <separator/>" + " <menuitem action='quit'/>" + " </popup>" + " <popup name='next-track-popup'>" + " <menuitem action='shuffle-off'/>" + " <separator/>" + " <menuitem action='shuffle-by-song'/>" + " <menuitem action='shuffle-by-artist'/>" + " <menuitem action='shuffle-by-album'/>" + " </popup>" + "</ui>"; Gtk.UIManager ui_manager = new Gtk.UIManager(); ui_manager.InsertActionGroup(action_group, 0); ui_manager.AddUiFromString(ui_info); Gtk.Menu status_icon_menu = (Gtk.Menu)ui_manager.GetWidget("/status-icon-popup"); this.status_icon = Gtk.StatusIcon.NewFromStock(Gtk.Stock.Execute); this.status_icon.PopupMenu += delegate(object o, Gtk.PopupMenuArgs args) { this.status_icon.PresentMenu(status_icon_menu, (uint)args.Args[0], (uint)args.Args[1]); }; this.status_icon.Activate += delegate(object o, EventArgs args) { if (this.Visible) this.Hide(); else this.Show(); }; this.Title = "Echo Media Player"; this.DefaultWidth = 800; this.DefaultHeight = 600; Gtk.MenuBar menubar = (Gtk.MenuBar)ui_manager.GetWidget("/main-menubar"); Gtk.Statusbar statusbar = new Gtk.Statusbar(); Gtk.Toolbar toolbar = (Gtk.Toolbar)ui_manager.GetWidget("/main-toolbar"); toolbar.ToolbarStyle = Gtk.ToolbarStyle.Icons; Gtk.MenuToolButton next_track_button = new Gtk.MenuToolButton(Gtk.Stock.MediaNext); action_group.GetAction("next-track").ConnectProxy(next_track_button); next_track_button.Menu = ui_manager.GetWidget("/next-track-popup"); toolbar.Insert(next_track_button, toolbar.NItems); toolbar.Insert(new Gtk.SeparatorToolItem(), toolbar.NItems); Gtk.HPaned browser_sizer = new Gtk.HPaned(); browser_sizer.Add1(new Gtk.Label("Browser")); browser_sizer.Add2(new TabPane()); browser_sizer.Position = 200; Gtk.HPaned main_sizer = new Gtk.HPaned(); main_sizer.Add1(new Gtk.Label("Sources")); main_sizer.Add2(browser_sizer); main_sizer.Position = 160; Gtk.VBox vbox = new Gtk.VBox(false, 0); vbox.PackStart(menubar, false, true, 0); vbox.PackStart(toolbar, false, true, 0); vbox.PackStart(main_sizer, true, true, 0); vbox.PackStart(statusbar, false, true, 0); this.Add(vbox); this.ShowAll(); } protected override bool OnDeleteEvent (Gdk.Event evnt) { // TODO why do I have to do this? this.Hide(); return true; } } }