public void CreateMenu() { this.context_menu = new ContextMenu(); this.state_item = new SparkleMenuItem { Header = Controller.StateText, IsEnabled = false }; Image folder_image = new Image { Source = SparkleUIHelpers.GetImageSource("sparkleshare-folder"), Width = 16, Height = 16 }; SparkleMenuItem folder_item = new SparkleMenuItem { Header = "SparkleShare", Icon = folder_image }; SparkleMenuItem add_item = new SparkleMenuItem { Header = "Add hosted project…" }; this.log_item = new SparkleMenuItem { Header = "Recent changes…", IsEnabled = Controller.RecentEventsItemEnabled }; SparkleMenuItem link_code_item = new SparkleMenuItem { Header = "Client ID" }; if (Controller.LinkCodeItemEnabled) { SparkleMenuItem code_item = new SparkleMenuItem { Header = Program.Controller.CurrentUser.PublicKey.Substring(0, 20) + "..." }; SparkleMenuItem copy_item = new SparkleMenuItem { Header = "Copy to Clipboard" }; copy_item.Click += delegate { Controller.CopyToClipboardClicked(); }; link_code_item.Items.Add(code_item); link_code_item.Items.Add(new Separator()); link_code_item.Items.Add(copy_item); } CheckBox notify_check_box = new CheckBox { Margin = new Thickness(6, 0, 0, 0), IsChecked = Program.Controller.NotificationsEnabled }; SparkleMenuItem notify_item = new SparkleMenuItem { Header = "Notifications", Icon = notify_check_box }; SparkleMenuItem about_item = new SparkleMenuItem { Header = "About SparkleShare" }; this.exit_item = new SparkleMenuItem { Header = "Exit" }; add_item.Click += delegate { Controller.AddHostedProjectClicked(); }; this.log_item.Click += delegate { Controller.RecentEventsClicked(); }; about_item.Click += delegate { Controller.AboutClicked(); }; notify_check_box.Click += delegate { this.context_menu.IsOpen = false; Program.Controller.ToggleNotifications(); notify_check_box.IsChecked = Program.Controller.NotificationsEnabled; }; notify_item.Click += delegate { Program.Controller.ToggleNotifications(); notify_check_box.IsChecked = Program.Controller.NotificationsEnabled; }; 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); state_menu_items = new SparkleMenuItem[Controller.Projects.Length]; if (Controller.Projects.Length > 0) { int i = 0; foreach (ProjectInfo project in Controller.Projects) { SparkleMenuItem subfolder_item = new SparkleMenuItem { Header = project.Name.Replace("_", "__"), Icon = new Image { Source = SparkleUIHelpers.GetImageSource("folder"), Width = 16, Height = 16 } }; state_menu_items[i] = new SparkleMenuItem { Header = project.StatusMessage, IsEnabled = false }; subfolder_item.Items.Add(state_menu_items[i]); subfolder_item.Items.Add(new Separator()); SparkleMenuItem open_item = new SparkleMenuItem { Header = "Open folder", Icon = new Image { Source = SparkleUIHelpers.GetImageSource("folder"), Width = 16, Height = 16 } }; open_item.Click += new RoutedEventHandler(Controller.OpenFolderDelegate(project.Name)); subfolder_item.Items.Add(open_item); subfolder_item.Items.Add(new Separator()); if (project.IsPaused) { SparkleMenuItem resume_item; if (project.UnsyncedChangesInfo.Count > 0) { foreach (KeyValuePair <string, string> pair in project.UnsyncedChangesInfo) { subfolder_item.Items.Add(new SparkleMenuItem { Header = pair.Key, // TODO image IsEnabled = false }); } if (!string.IsNullOrEmpty(project.MoreUnsyncedChanges)) { subfolder_item.Items.Add(new SparkleMenuItem { Header = project.MoreUnsyncedChanges, IsEnabled = false }); } subfolder_item.Items.Add(new Separator()); resume_item = new SparkleMenuItem { Header = "Sync and Resume…" }; } else { resume_item = new SparkleMenuItem { Header = "Resume" }; } resume_item.Click += (sender, e) => Controller.ResumeDelegate(project.Name)(sender, e); subfolder_item.Items.Add(resume_item); } else { if (Controller.Projects[i].HasError) { subfolder_item.Icon = new Image { Source = Imaging.CreateBitmapSourceFromHIcon( Drawing.SystemIcons.Exclamation.Handle, Int32Rect.Empty, BitmapSizeOptions.FromWidthAndHeight(16, 16)) }; SparkleMenuItem try_again_item = new SparkleMenuItem { Header = "Try Again" }; try_again_item.Click += (sender, e) => Controller.TryAgainDelegate(project.Name)(sender, e); subfolder_item.Items.Add(try_again_item); } else { SparkleMenuItem pause_item = new SparkleMenuItem { Header = "Pause" }; pause_item.Click += (sender, e) => Controller.PauseDelegate(project.Name)(sender, e); subfolder_item.Items.Add(pause_item); } } this.context_menu.Items.Add(subfolder_item); i++; } ; } folder_item.Items.Add(this.log_item); folder_item.Items.Add(add_item); folder_item.Items.Add(new Separator()); folder_item.Items.Add(notify_item); folder_item.Items.Add(new Separator()); folder_item.Items.Add(link_code_item); folder_item.Items.Add(new Separator()); folder_item.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 }; ImageMenuItem folder_item = new SparkleMenuItem("SparkleShare"); folder_item.Image = new Image(SparkleUIHelpers.GetIcon("sparkleshare", 16)); this.menu.Add(this.state_item); this.menu.Add(new SeparatorMenuItem()); this.menu.Add(folder_item); this.state_menu_items = new SparkleMenuItem [Controller.Projects.Length]; if (Controller.Projects.Length > 0) { int i = 0; foreach (ProjectInfo project in Controller.Projects) { SparkleMenuItem item = new SparkleMenuItem(project.Name); Gdk.Pixbuf folder_icon; folder_icon = IconTheme.Default.LoadIcon("folder", 16, IconLookupFlags.GenericFallback); item.Submenu = new Menu(); this.state_menu_items [i] = new MenuItem(project.StatusMessage) { Sensitive = false }; (item.Submenu as Menu).Add(this.state_menu_items [i]); (item.Submenu as Menu).Add(new SeparatorMenuItem()); if (project.IsPaused) { MenuItem resume_item; if (project.UnsyncedChangesInfo.Count > 0) { string icons_path = new string [] { SparkleUI.AssetsPath, "icons", "hicolor", "12x12", "status" }.Combine(); foreach (KeyValuePair <string, string> pair in project.UnsyncedChangesInfo) { (item.Submenu as Menu).Add(new MenuItem(pair.Key) { Image = new Image() { File = new string [] { icons_path, pair.Value.Replace("-12", "") }.Combine() }, Sensitive = false }); } if (!string.IsNullOrEmpty(project.MoreUnsyncedChanges)) { (item.Submenu as Menu).Add(new MenuItem(MoreUnsyncedChanges) { Sensitive = false }); } (item.Submenu as Menu).Add(new SeparatorMenuItem()); resume_item = new MenuItem("Sync and Resume…"); } else { resume_item = new MenuItem("Resume"); } resume_item.Activated += Controller.ResumeDelegate(project.Name); (item.Submenu as Menu).Add(resume_item); } else { if (Controller.Projects [i].HasError) { folder_icon = IconTheme.Default.LoadIcon("dialog-warning", 16, IconLookupFlags.GenericFallback); MenuItem try_again_item = new MenuItem("Try Again"); try_again_item.Activated += Controller.TryAgainDelegate(project.Name); (item.Submenu as Menu).Add(try_again_item); } else { MenuItem pause_item = new MenuItem("Pause"); pause_item.Activated += Controller.PauseDelegate(project.Name); (item.Submenu as Menu).Add(pause_item); } } (item.Child as Label).UseUnderline = false; item.Image = new Image(folder_icon); this.menu.Add(item); i++; } ; } this.recent_events_item = new MenuItem("Recent Changes…"); this.recent_events_item.Sensitive = Controller.RecentEventsItemEnabled; this.quit_item = new MenuItem("Quit") { Sensitive = Controller.QuitItemEnabled }; MenuItem add_item = new MenuItem("Add Hosted Project…"); #if HAVE_APP_INDICATOR MenuItem notify_item; if (Program.Controller.NotificationsEnabled) { notify_item = new MenuItem("Turn Notifications Off"); } else { notify_item = new MenuItem("Turn Notifications On"); } notify_item.Activated += delegate { Program.Controller.ToggleNotifications(); Application.Invoke(delegate { if (Program.Controller.NotificationsEnabled) { (notify_item.Child as Label).Text = "Turn Notifications Off"; } else { (notify_item.Child as Label).Text = "Turn Notifications On"; } }); }; #endif MenuItem link_code_item = new MenuItem("Client ID"); if (Controller.LinkCodeItemEnabled) { link_code_item.Submenu = new Menu(); string link_code = Program.Controller.CurrentUser.PublicKey.Substring(0, 20) + "..."; MenuItem code_item = new MenuItem(link_code) { Sensitive = false }; MenuItem copy_item = new MenuItem("Copy to Clipboard"); copy_item.Activated += delegate { Controller.CopyToClipboardClicked(); }; (link_code_item.Submenu as Menu).Add(code_item); (link_code_item.Submenu as Menu).Add(new SeparatorMenuItem()); (link_code_item.Submenu as Menu).Add(copy_item); } MenuItem about_item = new MenuItem("About SparkleShare"); about_item.Activated += delegate { Controller.AboutClicked(); }; add_item.Activated += delegate { Controller.AddHostedProjectClicked(); }; this.recent_events_item.Activated += delegate { Controller.RecentEventsClicked(); }; this.quit_item.Activated += delegate { Controller.QuitClicked(); }; folder_item.Submenu = new Menu(); (folder_item.Submenu as Menu).Add(this.recent_events_item); (folder_item.Submenu as Menu).Add(add_item); #if HAVE_APP_INDICATOR (folder_item.Submenu as Menu).Add(new SeparatorMenuItem()); (folder_item.Submenu as Menu).Add(notify_item); #endif (folder_item.Submenu as Menu).Add(new SeparatorMenuItem()); (folder_item.Submenu as Menu).Add(link_code_item); (folder_item.Submenu as Menu).Add(new SeparatorMenuItem()); (folder_item.Submenu as Menu).Add(about_item); this.menu.Add(new SeparatorMenuItem()); this.menu.Add(this.quit_item); this.menu.ShowAll(); #if HAVE_APP_INDICATOR this.indicator.Menu = this.menu; #endif }
public void CreateMenu() { using (NSAutoreleasePool a = new NSAutoreleasePool()) { this.menu = new NSMenu(); this.menu.AutoEnablesItems = false; this.state_item = new NSMenuItem() { Title = Controller.StateText, Enabled = false }; this.folder_item = new NSMenuItem() { Title = "SparkleShare" }; this.folder_item.Activated += delegate { Controller.SparkleShareClicked(); }; this.folder_item.Image = this.sparkleshare_image; this.folder_item.Image.Size = new SizeF(16, 16); this.folder_item.Enabled = true; this.add_item = new NSMenuItem() { Title = "Add Hosted Project…", Enabled = true }; this.add_item.Activated += delegate { Controller.AddHostedProjectClicked(); }; this.recent_events_item = new NSMenuItem() { Title = "Recent Changes…", Enabled = Controller.RecentEventsItemEnabled }; if (Controller.Folders.Length > 0) { this.recent_events_item.Activated += delegate { Controller.RecentEventsClicked(); }; } this.notify_item = new NSMenuItem() { Enabled = (Controller.Folders.Length > 0) }; if (Program.Controller.NotificationsEnabled) { this.notify_item.Title = "Turn Notifications Off"; } else { this.notify_item.Title = "Turn Notifications On"; } this.notify_item.Activated += delegate { Program.Controller.ToggleNotifications(); InvokeOnMainThread(delegate { if (Program.Controller.NotificationsEnabled) { this.notify_item.Title = "Turn Notifications Off"; } else { this.notify_item.Title = "Turn Notifications On"; } }); }; this.about_item = new NSMenuItem() { Title = "About SparkleShare", Enabled = true }; this.about_item.Activated += delegate { Controller.AboutClicked(); }; this.quit_item = new NSMenuItem() { Title = "Quit", Enabled = Controller.QuitItemEnabled }; this.quit_item.Activated += delegate { Controller.QuitClicked(); }; this.menu.AddItem(this.state_item); this.menu.AddItem(NSMenuItem.SeparatorItem); this.menu.AddItem(this.folder_item); this.folder_menu_items = new NSMenuItem [Controller.Folders.Length]; this.submenu_items = new NSMenuItem [Controller.OverflowFolders.Length]; if (Controller.Folders.Length > 0) { this.folder_tasks = new EventHandler [Controller.Folders.Length]; this.overflow_tasks = new EventHandler [Controller.OverflowFolders.Length]; int i = 0; foreach (string folder_name in Controller.Folders) { NSMenuItem item = new NSMenuItem(); item.Title = folder_name; if (!string.IsNullOrEmpty(Controller.FolderErrors [i])) { item.Image = this.caution_image; item.Submenu = new NSMenu(); NSMenuItem error_item = new NSMenuItem() { Title = Controller.FolderErrors [i] }; item.Submenu.AddItem(error_item); } else { item.Image = this.folder_image; } item.Image.Size = new SizeF(16, 16); this.folder_tasks [i] = OpenFolderDelegate(folder_name); this.folder_menu_items [i] = item; this.folder_menu_items [i].Activated += this.folder_tasks [i]; i++; } ; i = 0; foreach (string folder_name in Controller.OverflowFolders) { NSMenuItem item = new NSMenuItem(); item.Title = folder_name; if (!string.IsNullOrEmpty(Controller.OverflowFolderErrors [i])) { item.Image = this.caution_image; item.Submenu = new NSMenu(); NSMenuItem error_item = new NSMenuItem() { Title = Controller.OverflowFolderErrors [i] }; item.Submenu.AddItem(error_item); } else { item.Image = this.folder_image; } item.Image.Size = new SizeF(16, 16); this.overflow_tasks [i] = OpenFolderDelegate(folder_name); this.submenu_items [i] = item; this.submenu_items [i].Activated += this.overflow_tasks [i]; i++; } ; } foreach (NSMenuItem item in this.folder_menu_items) { this.menu.AddItem(item); } if (this.submenu_items.Length > 0) { this.submenu = new NSMenu(); foreach (NSMenuItem item in this.submenu_items) { this.submenu.AddItem(item); } this.more_item = new NSMenuItem() { Title = "More Projects", Submenu = this.submenu }; this.menu.AddItem(NSMenuItem.SeparatorItem); this.menu.AddItem(this.more_item); } this.menu.AddItem(NSMenuItem.SeparatorItem); this.menu.AddItem(this.add_item); this.menu.AddItem(this.recent_events_item); this.menu.AddItem(NSMenuItem.SeparatorItem); this.menu.AddItem(this.notify_item); this.menu.AddItem(NSMenuItem.SeparatorItem); this.menu.AddItem(this.about_item); this.menu.AddItem(NSMenuItem.SeparatorItem); this.menu.AddItem(this.quit_item); this.menu.Delegate = new SparkleStatusIconMenuDelegate(); this.status_item.Menu = this.menu; } }
public void CreateMenu() { this.context_menu = new ContextMenu(); this.state_item = new SparkleMenuItem() { Header = Controller.StateText, IsEnabled = false }; Image folder_image = new Image() { Source = SparkleUIHelpers.GetImageSource("sparkleshare-folder"), Width = 16, Height = 16 }; SparkleMenuItem folder_item = new SparkleMenuItem() { Header = "SparkleShare", Icon = folder_image }; SparkleMenuItem add_item = new SparkleMenuItem() { Header = "Add hosted project…" }; this.log_item = new SparkleMenuItem() { Header = "Recent changes…", IsEnabled = Controller.RecentEventsItemEnabled }; SparkleMenuItem link_code_item = new SparkleMenuItem() { Header = "Client ID" }; if (Controller.LinkCodeItemEnabled) { SparkleMenuItem code_item = new SparkleMenuItem(); code_item.Header = Program.Controller.CurrentUser.PublicKey.Substring(0, 20) + "..."; SparkleMenuItem copy_item = new SparkleMenuItem() { Header = "Copy to Clipboard" }; copy_item.Click += delegate { Controller.CopyToClipboardClicked(); }; link_code_item.Items.Add(code_item); link_code_item.Items.Add(new Separator()); link_code_item.Items.Add(copy_item); } CheckBox notify_check_box = new CheckBox() { Margin = new Thickness(6, 0, 0, 0), IsChecked = Program.Controller.NotificationsEnabled }; SparkleMenuItem notify_item = new SparkleMenuItem() { Header = "Notifications" }; notify_item.Icon = notify_check_box; SparkleMenuItem about_item = new SparkleMenuItem() { Header = "About SparkleShare" }; this.exit_item = new SparkleMenuItem() { Header = "Exit" }; add_item.Click += delegate { Controller.AddHostedProjectClicked(); }; this.log_item.Click += delegate { Controller.RecentEventsClicked(); }; about_item.Click += delegate { Controller.AboutClicked(); }; notify_check_box.Click += delegate { this.context_menu.IsOpen = false; Program.Controller.ToggleNotifications(); notify_check_box.IsChecked = Program.Controller.NotificationsEnabled; }; notify_item.Click += delegate { Program.Controller.ToggleNotifications(); notify_check_box.IsChecked = Program.Controller.NotificationsEnabled; }; 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) { int i = 0; foreach (string folder_name in Controller.Folders) { SparkleMenuItem subfolder_item = new SparkleMenuItem() { Header = folder_name.Replace("_", "__") }; Image subfolder_image = new Image() { Source = SparkleUIHelpers.GetImageSource("folder"), Width = 16, Height = 16 }; if (!string.IsNullOrEmpty(Controller.FolderErrors [i])) { subfolder_item.Icon = new Image() { Source = (BitmapSource)Imaging.CreateBitmapSourceFromHIcon( System.Drawing.SystemIcons.Exclamation.Handle, Int32Rect.Empty, BitmapSizeOptions.FromWidthAndHeight(16, 16)) }; SparkleMenuItem error_item = new SparkleMenuItem() { Header = Controller.FolderErrors [i], IsEnabled = false }; SparkleMenuItem try_again_item = new SparkleMenuItem() { Header = "Try again" }; try_again_item.Click += delegate { Controller.TryAgainDelegate(folder_name); }; subfolder_item.Items.Add(error_item); subfolder_item.Items.Add(new Separator()); subfolder_item.Items.Add(try_again_item); } else { subfolder_item.Icon = subfolder_image; subfolder_item.Click += new RoutedEventHandler(Controller.OpenFolderDelegate(folder_name)); } this.context_menu.Items.Add(subfolder_item); i++; } } folder_item.Items.Add(this.log_item); folder_item.Items.Add(add_item); folder_item.Items.Add(new Separator()); folder_item.Items.Add(notify_item); folder_item.Items.Add(new Separator()); folder_item.Items.Add(link_code_item); folder_item.Items.Add(new Separator()); folder_item.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 }; ImageMenuItem folder_item = new SparkleMenuItem("SparkleShare"); folder_item.Image = new Image(SparkleUIHelpers.GetIcon("sparkleshare", 16)); this.menu.Add(this.state_item); this.menu.Add(new SeparatorMenuItem()); this.menu.Add(folder_item); if (Program.Controller.Folders.Count > 0) { int i = 0; foreach (string folder_name in Controller.Folders) { ImageMenuItem item = new SparkleMenuItem(folder_name); Gdk.Pixbuf folder_icon; if (!string.IsNullOrEmpty(Controller.FolderErrors [i])) { folder_icon = IconTheme.Default.LoadIcon("dialog-warning", 16, IconLookupFlags.GenericFallback); item.Submenu = new Menu(); MenuItem error_item = new MenuItem(Controller.FolderErrors [i]) { Sensitive = false }; MenuItem try_again_item = new MenuItem("Try Again"); try_again_item.Activated += Controller.TryAgainDelegate(folder_name); (item.Submenu as Menu).Add(error_item); (item.Submenu as Menu).Add(new SeparatorMenuItem()); (item.Submenu as Menu).Add(try_again_item); } else { folder_icon = IconTheme.Default.LoadIcon("folder", 16, IconLookupFlags.GenericFallback); item.Activated += Controller.OpenFolderDelegate(folder_name); } (item.Child as Label).UseUnderline = false; item.Image = new Image(folder_icon); this.menu.Add(item); i++; } } this.recent_events_item = new MenuItem("Recent Changes…"); this.recent_events_item.Sensitive = Controller.RecentEventsItemEnabled; this.quit_item = new MenuItem("Quit") { Sensitive = Controller.QuitItemEnabled }; MenuItem add_item = new MenuItem("Add Hosted Project…"); MenuItem notify_item; if (Program.Controller.NotificationsEnabled) { notify_item = new MenuItem("Turn Notifications Off"); } else { notify_item = new MenuItem("Turn Notifications On"); } notify_item.Activated += delegate { Program.Controller.ToggleNotifications(); Application.Invoke(delegate { if (Program.Controller.NotificationsEnabled) { (notify_item.Child as Label).Text = "Turn Notifications Off"; } else { (notify_item.Child as Label).Text = "Turn Notifications On"; } }); }; MenuItem link_code_item = new MenuItem("Client ID"); if (Controller.LinkCodeItemEnabled) { link_code_item.Submenu = new Menu(); string link_code = Program.Controller.CurrentUser.PublicKey.Substring(0, 20) + "..."; MenuItem code_item = new MenuItem(link_code) { Sensitive = false }; MenuItem copy_item = new MenuItem("Copy to Clipboard"); copy_item.Activated += delegate { Controller.CopyToClipboardClicked(); }; (link_code_item.Submenu as Menu).Add(code_item); (link_code_item.Submenu as Menu).Add(new SeparatorMenuItem()); (link_code_item.Submenu as Menu).Add(copy_item); } MenuItem about_item = new MenuItem("About SparkleShare"); about_item.Activated += delegate { Controller.AboutClicked(); }; add_item.Activated += delegate { Controller.AddHostedProjectClicked(); }; this.recent_events_item.Activated += delegate { Controller.RecentEventsClicked(); }; this.quit_item.Activated += delegate { Controller.QuitClicked(); }; folder_item.Submenu = new Menu(); (folder_item.Submenu as Menu).Add(this.recent_events_item); (folder_item.Submenu as Menu).Add(add_item); (folder_item.Submenu as Menu).Add(new SeparatorMenuItem()); (folder_item.Submenu as Menu).Add(notify_item); (folder_item.Submenu as Menu).Add(new SeparatorMenuItem()); (folder_item.Submenu as Menu).Add(link_code_item); (folder_item.Submenu as Menu).Add(new SeparatorMenuItem()); (folder_item.Submenu as Menu).Add(about_item); this.menu.Add(new SeparatorMenuItem()); this.menu.Add(this.quit_item); this.menu.ShowAll(); #if HAVE_APP_INDICATOR this.indicator.Menu = this.menu; #endif }
public void CreateMenu() { this.context_menu = new ContextMenu(); this.state_item = new SparkleMenuItem() { Header = Controller.StateText, IsEnabled = false }; this.notify_icon.HeaderText = "SparkleShare\n" + Controller.StateText; Image folder_image = new Image() { Source = SparkleUIHelpers.GetImageSource("sparkleshare-folder"), Width = 16, Height = 16 }; SparkleMenuItem folder_item = new SparkleMenuItem() { Header = "SparkleShare", Icon = folder_image }; folder_item.Click += delegate { Controller.SparkleShareClicked(); }; SparkleMenuItem add_item = new SparkleMenuItem() { Header = "Add hosted project…" }; add_item.Click += delegate { Controller.AddHostedProjectClicked(); }; this.log_item = new SparkleMenuItem() { Header = "Recent changes…", IsEnabled = Controller.RecentEventsItemEnabled }; this.log_item.Click += delegate { Controller.RecentEventsClicked(); }; SparkleMenuItem notify_item = new SparkleMenuItem() { 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_check_box.Click += delegate { this.context_menu.IsOpen = false; Program.Controller.ToggleNotifications(); notify_check_box.IsChecked = Program.Controller.NotificationsEnabled; }; notify_item.Click += delegate { Program.Controller.ToggleNotifications(); notify_check_box.IsChecked = Program.Controller.NotificationsEnabled; }; SparkleMenuItem about_item = new SparkleMenuItem() { Header = "About SparkleShare" }; about_item.Click += delegate { Controller.AboutClicked(); }; this.exit_item = new SparkleMenuItem() { 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) { int i = 0; foreach (string folder_name in Controller.Folders) { SparkleMenuItem subfolder_item = new SparkleMenuItem() { Header = folder_name }; subfolder_item.Click += OpenFolderDelegate(folder_name); Image subfolder_image = new Image() { Source = SparkleUIHelpers.GetImageSource("folder"), Width = 16, Height = 16 }; if (!string.IsNullOrEmpty(Controller.FolderErrors [i])) { subfolder_item.Icon = new Image() { Source = (BitmapSource)Imaging.CreateBitmapSourceFromHIcon( System.Drawing.SystemIcons.Exclamation.Handle, Int32Rect.Empty, BitmapSizeOptions.FromWidthAndHeight(16, 16) ) }; SparkleMenuItem error_item = new SparkleMenuItem() { Header = Controller.FolderErrors [i], IsEnabled = false }; subfolder_item.Items.Add(error_item); } else { subfolder_item.Icon = subfolder_image; } this.context_menu.Items.Add(subfolder_item); i++; } SparkleMenuItem more_item = new SparkleMenuItem() { Header = "More projects" }; i = 0; foreach (string folder_name in Controller.OverflowFolders) { SparkleMenuItem subfolder_item = new SparkleMenuItem() { Header = folder_name }; subfolder_item.Click += OpenFolderDelegate(folder_name); Image subfolder_image = new Image() { Source = SparkleUIHelpers.GetImageSource("folder"), Width = 16, Height = 16 }; if (!string.IsNullOrEmpty(Controller.OverflowFolderErrors [i])) { subfolder_item.Icon = new Image() { Source = (BitmapSource)Imaging.CreateBitmapSourceFromHIcon( System.Drawing.SystemIcons.Exclamation.Handle, Int32Rect.Empty, BitmapSizeOptions.FromWidthAndHeight(16, 16) ) }; SparkleMenuItem error_item = new SparkleMenuItem() { Header = Controller.OverflowFolderErrors [i], IsEnabled = false }; subfolder_item.Items.Add(error_item); } else { subfolder_item.Icon = subfolder_image; } more_item.Items.Add(subfolder_item); i++; } 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 SparkleMenuItem("SparkleShare") { Image = new Image(SparkleUIHelpers.GetIcon("sparkleshare", 16)) }; folder_item.Activated += delegate { Controller.SparkleShareClicked(); }; this.menu.Add(folder_item); if (Program.Controller.Folders.Count > 0) { int i = 0; foreach (string folder_name in Controller.Folders) { ImageMenuItem item = new SparkleMenuItem(folder_name); Gdk.Pixbuf folder_icon; if (!string.IsNullOrEmpty(Controller.FolderErrors [i])) { folder_icon = IconTheme.Default.LoadIcon("dialog-warning", 16, IconLookupFlags.GenericFallback); item.Submenu = new Menu(); MenuItem error_item = new MenuItem(Controller.FolderErrors [i]) { Sensitive = false }; (item.Submenu as Menu).Add(error_item); } else { folder_icon = IconTheme.Default.LoadIcon("folder", 16, IconLookupFlags.GenericFallback); } item.Image = new Image(folder_icon); item.Activated += OpenFolderDelegate(folder_name); this.menu.Add(item); i++; } Menu submenu = new Menu(); i = 0; foreach (string folder_name in Controller.OverflowFolders) { ImageMenuItem item = new SparkleMenuItem(folder_name); Gdk.Pixbuf folder_icon; if (!string.IsNullOrEmpty(Controller.OverflowFolderErrors [i])) { folder_icon = IconTheme.Default.LoadIcon("dialog-warning", 16, IconLookupFlags.GenericFallback); item.Submenu = new Menu(); MenuItem error_item = new MenuItem(Controller.OverflowFolderErrors [i]) { Sensitive = false }; (item.Submenu as Menu).Add(error_item); } else { folder_icon = IconTheme.Default.LoadIcon("folder", 16, IconLookupFlags.GenericFallback); } item.Image = new Image(folder_icon); item.Activated += OpenFolderDelegate(folder_name); submenu.Add(item); i++; } if (submenu.Children.Length > 0) { SparkleMenuItem more_item = new SparkleMenuItem("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("Recent Changes…"); this.recent_events_item.Sensitive = Controller.RecentEventsItemEnabled; this.recent_events_item.Activated += delegate { Controller.RecentEventsClicked(); }; this.menu.Add(this.recent_events_item); this.menu.Add(new SeparatorMenuItem()); MenuItem notify_item; if (Program.Controller.NotificationsEnabled) { notify_item = new MenuItem("Turn Notifications Off"); } else { notify_item = new MenuItem("Turn Notifications On"); } notify_item.Activated += delegate { Application.Invoke(delegate { Program.Controller.ToggleNotifications(); if (Program.Controller.NotificationsEnabled) { (notify_item.Child as Label).Text = "Turn Notifications Off"; } else { (notify_item.Child as Label).Text = "Turn Notifications On"; } }); }; this.menu.Add(notify_item); this.menu.Add(new SeparatorMenuItem()); MenuItem about_item = new MenuItem("About SparkleShare"); 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 }