public void CreateMenu() { this.context_menu = new ContextMenu (); this.state_item = new OrangeMenuItem () { Header = Controller.StateText, IsEnabled = false }; this.notify_icon.HeaderText = "OrangeShare\n" + Controller.StateText; Image folder_image = new Image () { Source = OrangeUIHelpers.GetImageSource ("folder-sparkleshare-windows-16"), Width = 16, Height = 16 }; OrangeMenuItem folder_item = new OrangeMenuItem () { Header = "OrangeShare", Icon = folder_image }; folder_item.Click += delegate { Controller.OrangeShareClicked (); }; OrangeMenuItem add_item = new OrangeMenuItem () { Header = "Add hosted project…" }; add_item.Click += delegate { Controller.AddHostedProjectClicked (); }; this.log_item = new OrangeMenuItem () { Header = "View recent changes…", IsEnabled = Controller.OpenRecentEventsItemEnabled }; this.log_item.Click += delegate { Controller.OpenRecentEventsClicked (); }; OrangeMenuItem notify_item = new OrangeMenuItem () { Header = "Notifications" }; CheckBox notify_check_box = new CheckBox () { Margin = new Thickness (6, 0, 0, 0), IsChecked = (Controller.Folders.Length > 0 && Program.Controller.NotificationsEnabled) }; notify_item.Icon = notify_check_box; notify_item.Click += delegate { Program.Controller.ToggleNotifications (); notify_check_box.IsChecked = Program.Controller.NotificationsEnabled; }; OrangeMenuItem about_item = new OrangeMenuItem () { Header = "About OrangeShare" }; about_item.Click += delegate { Controller.AboutClicked (); }; this.exit_item = new OrangeMenuItem () { Header = "Exit" }; this.exit_item.Click += delegate { this.notify_icon.Dispose (); Controller.QuitClicked (); }; this.context_menu.Items.Add (this.state_item); this.context_menu.Items.Add (new Separator ()); this.context_menu.Items.Add (folder_item); if (Controller.Folders.Length > 0) { foreach (string folder_name in Controller.Folders) { OrangeMenuItem subfolder_item = new OrangeMenuItem () { Header = folder_name }; subfolder_item.Click += OpenFolderDelegate (folder_name); Image subfolder_image = new Image () { Source = OrangeUIHelpers.GetImageSource ("folder-windows-16"), Width = 16, Height = 16 }; if (Program.Controller.UnsyncedFolders.Contains (folder_name)) { subfolder_item.Icon = new Image () { Source = (BitmapSource) Imaging.CreateBitmapSourceFromHIcon ( System.Drawing.SystemIcons.Exclamation.Handle, Int32Rect.Empty, BitmapSizeOptions.FromWidthAndHeight (16,16) ) }; } else { subfolder_item.Icon = subfolder_image; } this.context_menu.Items.Add (subfolder_item); } OrangeMenuItem more_item = new OrangeMenuItem () { Header = "More projects" }; foreach (string folder_name in Controller.OverflowFolders) { OrangeMenuItem subfolder_item = new OrangeMenuItem () { Header = folder_name }; subfolder_item.Click += OpenFolderDelegate (folder_name); Image subfolder_image = new Image () { Source = OrangeUIHelpers.GetImageSource ("folder-windows-16"), Width = 16, Height = 16 }; if (Program.Controller.UnsyncedFolders.Contains (folder_name)) { subfolder_item.Icon = new Image () { Source = (BitmapSource) Imaging.CreateBitmapSourceFromHIcon ( System.Drawing.SystemIcons.Exclamation.Handle, Int32Rect.Empty, BitmapSizeOptions.FromWidthAndHeight (16,16) ) }; } else { subfolder_item.Icon = subfolder_image; } more_item.Items.Add (subfolder_item); } if (more_item.Items.Count > 0) { this.context_menu.Items.Add (new Separator ()); this.context_menu.Items.Add (more_item); } } this.context_menu.Items.Add (new Separator ()); this.context_menu.Items.Add (add_item); this.context_menu.Items.Add (this.log_item); this.context_menu.Items.Add (new Separator ()); this.context_menu.Items.Add (notify_item); this.context_menu.Items.Add (new Separator ()); this.context_menu.Items.Add (about_item); this.context_menu.Items.Add (new Separator ()); this.context_menu.Items.Add (this.exit_item); this.notify_icon.ContextMenu = this.context_menu; }
public void CreateMenu() { this.menu = new Menu (); this.state_item = new MenuItem (Controller.StateText) { Sensitive = false }; this.menu.Add (this.state_item); this.menu.Add (new SeparatorMenuItem ()); ImageMenuItem folder_item = new OrangeMenuItem ("OrangeShare"){ Image = new Image (OrangeUIHelpers.GetIcon ("folder-sparkleshare", 16)) }; folder_item.Activated += delegate { Controller.OrangeShareClicked (); }; this.menu.Add (folder_item); if (Program.Controller.Folders.Count > 0) { foreach (string folder_name in Controller.Folders) { Gdk.Pixbuf folder_icon; if (Program.Controller.UnsyncedFolders.Contains (folder_name)) { folder_icon = IconTheme.Default.LoadIcon ("dialog-error", 16, IconLookupFlags.GenericFallback); } else { folder_icon = IconTheme.Default.LoadIcon ("folder", 16, IconLookupFlags.GenericFallback); } ImageMenuItem subfolder_item = new OrangeMenuItem (folder_name) { Image = new Image (folder_icon) }; subfolder_item.Activated += OpenFolderDelegate (folder_name); this.menu.Add (subfolder_item); } Menu submenu = new Menu (); foreach (string folder_name in Controller.OverflowFolders) { Gdk.Pixbuf folder_icon; if (Program.Controller.UnsyncedFolders.Contains (folder_name)) { folder_icon = IconTheme.Default.LoadIcon ("dialog-error", 16, IconLookupFlags.GenericFallback); } else { folder_icon = IconTheme.Default.LoadIcon ("folder", 16, IconLookupFlags.GenericFallback); } ImageMenuItem subfolder_item = new OrangeMenuItem (folder_name) { Image = new Image (folder_icon) }; subfolder_item.Activated += OpenFolderDelegate (folder_name); submenu.Add (subfolder_item); } if (submenu.Children.Length > 0) { OrangeMenuItem more_item = new OrangeMenuItem ("More Projects") { Submenu = submenu }; this.menu.Add (new SeparatorMenuItem ()); this.menu.Add (more_item); } } this.menu.Add (new SeparatorMenuItem ()); MenuItem sync_item = new MenuItem (_("Add Hosted Project…")); sync_item.Activated += delegate { Controller.AddHostedProjectClicked (); }; this.menu.Add (sync_item); this.recent_events_item = new MenuItem (_("View Recent Changes…")); this.recent_events_item.Sensitive = Controller.OpenRecentEventsItemEnabled; this.recent_events_item.Activated += delegate { Controller.OpenRecentEventsClicked (); }; this.menu.Add (this.recent_events_item); this.menu.Add (new SeparatorMenuItem ()); CheckMenuItem notify_item = new CheckMenuItem (_("Notifications")) { Active = (Controller.Folders.Length > 0 && Program.Controller.NotificationsEnabled) }; notify_item.Activated += delegate { Program.Controller.ToggleNotifications (); }; this.menu.Add (notify_item); this.menu.Add (new SeparatorMenuItem ()); MenuItem about_item = new MenuItem (_("About OrangeShare")); about_item.Activated += delegate { Controller.AboutClicked (); }; this.menu.Add (about_item); this.menu.Add (new SeparatorMenuItem ()); this.quit_item = new MenuItem (_("Quit")) { Sensitive = Controller.QuitItemEnabled }; this.quit_item.Activated += delegate { Controller.QuitClicked (); }; this.menu.Add (this.quit_item); this.menu.ShowAll (); #if HAVE_APP_INDICATOR this.indicator.Menu = this.menu; #endif }