Inheritance: Gtk.ImageMenuItem
        // Creates the menu that is popped up when the
        // user clicks the status icon
        public void CreateMenu()
        {
            this.menu = new Menu ();

                // The menu item showing the status and size of the SparkleShare folder
                MenuItem status_menu_item = new MenuItem (this.state_text) {
                    Sensitive = false
                };

            this.menu.Add (status_menu_item);
            this.menu.Add (new SeparatorMenuItem ());

                ImageMenuItem folder_item = new SparkleMenuItem ("SparkleShare"){
                    Image = new Image (SparkleUIHelpers.GetIcon ("folder-sparkleshare", 16))
                };

                folder_item.Activated += delegate {
                    Controller.SparkleShareClicked ();
                };

            this.menu.Add (folder_item);

                if (Program.Controller.Folders.Count > 0) {

                    // Creates a menu item for each repository with a link to their logs
                    foreach (string folder_name in Program.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 SparkleMenuItem (folder_name) {
                            Image = new Image (folder_icon)
                        };

                        subfolder_item.Activated += OpenFolderDelegate (folder_name);
                        this.menu.Add (subfolder_item);
                    }

                } else {
                    MenuItem no_folders_item = new MenuItem (_("No projects yet")) {
                        Sensitive   = false
                    };

                    this.menu.Add (no_folders_item);
                }

                this.menu.Add (new SeparatorMenuItem ());

                // Opens the wizard to add a new remote folder
                MenuItem sync_item = new MenuItem (_("Add Hosted Project…"));

                sync_item.Activated += delegate {
                    Controller.AddHostedProjectClicked ();
                };

            this.menu.Add (sync_item);
            this.menu.Add (new SeparatorMenuItem ());

            MenuItem recent_events_item = new MenuItem (_("View Recent Changes…"));

                recent_events_item.Sensitive = (Controller.Folders.Length > 0);

                recent_events_item.Activated += delegate {
                    Controller.OpenRecentEventsClicked ();
                };

            this.menu.Add (recent_events_item);

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

            this.menu.Add (notify_item);
            this.menu.Add (new SeparatorMenuItem ());

                // A menu item that takes the user to http://www.sparkleshare.org/
                MenuItem about_item = new MenuItem (_("About SparkleShare"));

                about_item.Activated += delegate {
                    Controller.AboutClicked ();
                };

            this.menu.Add (about_item);
            this.menu.Add (new SeparatorMenuItem ());

                // A menu item that quits the application
                this.quit_item = new MenuItem (_("Quit")) {
                    Sensitive = Controller.QuitItemEnabled
                };

                this.quit_item.Activated += delegate {
                    Program.Controller.Quit ();
                };

            this.menu.Add (this.quit_item);
            this.menu.ShowAll ();

            #if HAVE_APP_INDICATOR
            this.indicator.Menu = this.menu;
            #endif
        }
        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 ("folder-sparkleshare", 16))
                };

                folder_item.Activated += delegate {
                    Controller.SparkleShareClicked ();
                };

            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 SparkleMenuItem (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 SparkleMenuItem (folder_name) {
                            Image = new Image (folder_icon)
                        };

                        subfolder_item.Activated += OpenFolderDelegate (folder_name);
                        submenu.Add (subfolder_item);
                    }

                    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.OpenRecentEventsItemEnabled;

                this.recent_events_item.Activated += delegate {
                    Controller.OpenRecentEventsClicked ();
                };

            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
        }
        public void CreateMenu()
        {
            this.context_menu = new ContextMenu ();

            status_item = new SparkleMenuItem () {
                Header    = StateText,
                IsEnabled = false
            };

            Image folder_image = new Image () {
                Source = SparkleUIHelpers.GetImageSource ("folder-sparkleshare-windows-16"),
                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 ();
                };

            SparkleMenuItem log_item = new SparkleMenuItem () {
                Header    = "View recent changes…",
                IsEnabled = (Program.Controller.Folders.Count > 0)
            };

                log_item.Click += delegate {
                    Controller.OpenRecentEventsClicked ();
                };

            SparkleMenuItem notify_item = new SparkleMenuItem () {
                Header      = "Notifications"
            };

                CheckBox notify_check_box = new CheckBox () {
                    Margin = new Thickness (6,0,0,0),
                    IsChecked   = Program.Controller.NotificationsEnabled
                };

                notify_item.Icon = notify_check_box;

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

            exit_item = new SparkleMenuItem () {
                Header = "Exit"
            };

                this.exit_item.Click += delegate {
                    this.notify_icon.Dispose ();
                    Controller.QuitClicked ();
                };

            this.context_menu.Items.Add (status_item);
            this.context_menu.Items.Add (new Separator ());
            this.context_menu.Items.Add (folder_item);

            if (Program.Controller.Folders.Count > 0) {
                foreach (string folder_name in Program.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-windows-16"),
                        Width  = 16,
                        Height = 16
                    };

                    subfolder_item.Icon = subfolder_image;

                    /* TODO
                    if (Program.Controller.UnsyncedFolders.Contains (folder_name))
                        subfolder_item.Icon = Icons.dialog_error_16;
                    else
                        subfolder_item.Icon = Icons.sparkleshare_windows_status;
                     */

                    this.context_menu.Items.Add (subfolder_item);
                }

            } else {
                SparkleMenuItem no_folders_item = new SparkleMenuItem () {
                    Header    = "No projects yet",
                    IsEnabled = false
                };

                this.context_menu.Items.Add (no_folders_item);
            }

            this.context_menu.Items.Add (new Separator ());
            this.context_menu.Items.Add (add_item);
            this.context_menu.Items.Add (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 };

            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 ("Link Code");

            if (Controller.LinkCodeItemEnabled) {
                link_code_item.Submenu = new Menu ();

                MenuItem code_item = new MenuItem ();
                (code_item.Child as Label).Text = Program.Controller.CurrentUser.PublicKey.Substring (0, 20) + "...";

                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 SeperatorMenuItem ());
                (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
        }
Beispiel #5
0
        // Creates the menu that is popped up when the
        // user clicks the status icon
        public void CreateMenu()
        {
            Menu = new Menu();

            // The menu item showing the status and size of the SparkleShare folder
            MenuItem status_menu_item = new MenuItem(StateText)
            {
                Sensitive = false
            };

            Menu.Add(status_menu_item);
            Menu.Add(new SeparatorMenuItem());

            ImageMenuItem folder_item = new SparkleMenuItem("SparkleShare")
            {
                Image = new Image(SparkleUIHelpers.GetIcon("folder-sparkleshare", 16))
            };

            folder_item.Activated += delegate {
                SparkleShare.Controller.OpenSparkleShareFolder();
            };

            Menu.Add(folder_item);

            if (SparkleShare.Controller.Folders.Count > 0)
            {
                // Creates a menu item for each repository with a link to their logs
                foreach (string path in SparkleShare.Controller.Folders)
                {
                    Gdk.Pixbuf folder_icon = IconTheme.Default.LoadIcon("folder", 16,
                                                                        IconLookupFlags.GenericFallback);

                    ImageMenuItem subfolder_item = new SparkleMenuItem(Path.GetFileName(path))
                    {
                        Image = new Image(folder_icon)
                    };

//						if (repo.HasUnsyncedChanges)
//							folder_action.IconName = "dialog-error";

                    subfolder_item.Activated += OpenEventLogDelegate(path);

                    Menu.Add(subfolder_item);
                }
            }
            else
            {
                MenuItem no_folders_item = new MenuItem(_("No Remote Folders Yet"))
                {
                    Sensitive = false
                };

                Menu.Add(no_folders_item);
            }

            // Opens the wizard to add a new remote folder
            MenuItem sync_item = new MenuItem(_("Add Remote Folder…"));

            if (SparkleShare.Controller.FirstRun)
            {
                sync_item.Sensitive = false;
            }

            sync_item.Activated += delegate {
                Application.Invoke(delegate {
                    if (SparkleUI.Intro == null)
                    {
                        SparkleUI.Intro = new SparkleIntro();
                        SparkleUI.Intro.ShowServerForm(true);
                    }

                    if (!SparkleUI.Intro.Visible)
                    {
                        SparkleUI.Intro.ShowServerForm(true);
                    }

                    SparkleUI.Intro.ShowAll();
                    SparkleUI.Intro.Present();
                });
            };

            Menu.Add(sync_item);
            Menu.Add(new SeparatorMenuItem());

            MenuItem notify_item;

            if (SparkleShare.Controller.NotificationsEnabled)
            {
                notify_item = new MenuItem(_("Turn Notifications Off"));
            }
            else
            {
                notify_item = new MenuItem(_("Turn Notifications On"));
            }

            notify_item.Activated += delegate {
                SparkleShare.Controller.ToggleNotifications();
                CreateMenu();
            };

            Menu.Add(notify_item);
            Menu.Add(new SeparatorMenuItem());

            // A menu item that takes the user to http://www.sparkleshare.org/
            MenuItem about_item = new MenuItem(_("About SparkleShare"));

            about_item.Activated += delegate {
                SparkleDialog dialog = new SparkleDialog();
                dialog.ShowAll();
            };

            Menu.Add(about_item);
            Menu.Add(new SeparatorMenuItem());

            // A menu item that quits the application
            MenuItem quit_item = new MenuItem(_("Quit"));

            quit_item.Activated += delegate {
                SparkleShare.Controller.Quit();
            };

            Menu.Add(quit_item);

            Menu.ShowAll();
        }
        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.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 = SparkleShare.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 = SparkleShare.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;
                SparkleShare.Controller.ToggleNotifications();
                notify_check_box.IsChecked = SparkleShare.Controller.NotificationsEnabled;
            };

            notify_item.Click += delegate {
                SparkleShare.Controller.ToggleNotifications();
                notify_check_box.IsChecked = SparkleShare.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 = "Retry Sync"
                            };
                            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.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
            };

            CheckBox notify_check_box = new CheckBox()
            {
                Margin    = new Thickness(6, 0, 0, 0),
                IsChecked = (Controller.Folders.Length > 0 && 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      += Controller.AddHostedProjectClicked;
            this.log_item.Click += Controller.RecentEventsClicked;
            about_item.Click    += 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 += 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 += 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(about_item);

            this.context_menu.Items.Add(new Separator());
            this.context_menu.Items.Add(this.exit_item);

            this.notify_icon.ContextMenu = this.context_menu;
        }
Beispiel #9
0
        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(UserInterfaceHelpers.GetIcon("org.sparkleshare.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 = UserInterfaceHelpers.GetIcon("folder", 16);

                    item.Submenu = new Menu();

                    this.state_menu_items [i] = new SparkleMenuItem(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 = Path.Combine(UserInterface.AssetsPath, "icons", "hicolor", "12x12", "status");

                            foreach (KeyValuePair <string, string> pair in project.UnsyncedChangesInfo)
                            {
                                string icon_path = Path.Combine(icons_path, pair.Value.Replace("-12", ""));

                                (item.Submenu as Menu).Add(new SparkleMenuItem(pair.Key)
                                {
                                    Image     = new Image(icon_path),
                                    Sensitive = false
                                });
                            }

                            if (!string.IsNullOrEmpty(project.MoreUnsyncedChanges))
                            {
                                (item.Submenu as Menu).Add(new MenuItem(project.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("Retry Sync");
                            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("History…");
            this.recent_events_item.Sensitive = Controller.RecentEventsItemEnabled;
            this.quit_item = new MenuItem("Quit")
            {
                Sensitive = Controller.QuitItemEnabled
            };
            MenuItem add_item = new MenuItem("Sync Remote Project…");

            MenuItem link_code_item = new MenuItem("Computer ID");

            if (Controller.LinkCodeItemEnabled)
            {
                link_code_item.Submenu = new Menu();

                string   link_code = SparkleShare.Controller.UserAuthenticationInfo.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);

            if (InstallationInfo.OperatingSystem == OS.Ubuntu)
            {
                MenuItem notify_item;

                if (SparkleShare.Controller.NotificationsEnabled)
                {
                    notify_item = new MenuItem("Turn Notifications Off");
                }
                else
                {
                    notify_item = new MenuItem("Turn Notifications On");
                }

                notify_item.Activated += delegate {
                    SparkleShare.Controller.ToggleNotifications();

                    Application.Invoke(delegate {
                        if (SparkleShare.Controller.NotificationsEnabled)
                        {
                            (notify_item.Child as Label).Text = "Turn Notifications Off";
                        }
                        else
                        {
                            (notify_item.Child as Label).Text = "Turn Notifications On";
                        }
                    });
                };

                (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(add_item);
            this.menu.Add(new SeparatorMenuItem());
            this.menu.Add(this.quit_item);
            this.menu.ShowAll();

            if (InstallationInfo.OperatingSystem == OS.Ubuntu)
            {
                #if HAVE_APP_INDICATOR
                indicator.Menu = this.menu;
                #endif
            }
        }
Beispiel #10
0
        // Creates the menu that is popped up when the
        // user clicks the status icon
        public void CreateMenu()
        {
            Menu = new Menu();

            // The menu item showing the status and size of the SparkleShare folder
            MenuItem status_menu_item = new MenuItem(StateText)
            {
                Sensitive = false
            };

            Menu.Add(status_menu_item);
            Menu.Add(new SeparatorMenuItem());

            ImageMenuItem folder_item = new SparkleMenuItem("SparkleShare")
            {
                Image = new Image(SparkleUIHelpers.GetIcon("folder-sparkleshare", 16))
            };

            folder_item.Activated += delegate {
                Program.Controller.OpenSparkleShareFolder();
            };

            Menu.Add(folder_item);

            if (Program.Controller.Folders.Count > 0)
            {
                // Creates a menu item for each repository with a link to their logs
                foreach (string folder_name in Program.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 SparkleMenuItem(folder_name)
                    {
                        Image = new Image(folder_icon)
                    };

                    subfolder_item.Activated += OpenFolderDelegate(folder_name);
                    Menu.Add(subfolder_item);
                }
            }
            else
            {
                MenuItem no_folders_item = new MenuItem(_("No projects yet"))
                {
                    Sensitive = false
                };

                Menu.Add(no_folders_item);
            }

            Menu.Add(new SeparatorMenuItem());

            // Opens the wizard to add a new remote folder
            MenuItem sync_item = new MenuItem(_("Add Hosted Project…"));

            if (Program.Controller.FirstRun)
            {
                sync_item.Sensitive = false;
            }

            sync_item.Activated += delegate {
                Application.Invoke(delegate {
                    if (SparkleUI.Setup == null)
                    {
                        SparkleUI.Setup = new SparkleSetup();
                        SparkleUI.Setup.Controller.ShowAddPage();
                    }

                    if (!SparkleUI.Setup.Visible)
                    {
                        SparkleUI.Setup.Controller.ShowAddPage();
                    }

                    //SparkleUI.Intro.ShowAll ();
                    //SparkleUI.Intro.Present ();
                });
            };

            Menu.Add(sync_item);
            Menu.Add(new SeparatorMenuItem());

            MenuItem recent_events_item = new MenuItem(_("Open Recent Events"));

            if (Program.Controller.Folders.Count < 1)
            {
                recent_events_item.Sensitive = false;
            }

            recent_events_item.Activated += delegate {
                Application.Invoke(delegate {
                    if (SparkleUI.EventLog == null)
                    {
                        SparkleUI.EventLog = new SparkleEventLog();
                    }

                    SparkleUI.EventLog.ShowAll();
                    SparkleUI.EventLog.Present();
                });
            };

            Menu.Add(recent_events_item);

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

            Menu.Add(notify_item);
            Menu.Add(new SeparatorMenuItem());

            // A menu item that takes the user to http://www.sparkleshare.org/
            MenuItem about_item = new MenuItem(_("About SparkleShare"));

            about_item.Activated += delegate {
                Application.Invoke(delegate {
                    if (SparkleUI.About == null)
                    {
                        SparkleUI.About = new SparkleAbout();
                    }

                    SparkleUI.About.ShowAll();
                    SparkleUI.About.Present();
                });
            };

            Menu.Add(about_item);
            Menu.Add(new SeparatorMenuItem());

            // A menu item that quits the application
            MenuItem quit_item = new MenuItem(_("Quit"));

            quit_item.Activated += delegate {
                Program.Controller.Quit();
            };

            Menu.Add(quit_item);
            Menu.ShowAll();

            #if HAVE_APP_INDICATOR
            this.indicator.Menu = Menu;
            #endif
        }
        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 SparkleMenuItem (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) {
                                string icon_path = new string [] {
                                    icons_path, pair.Value.Replace ("-12", "")}.Combine ();

                                (item.Submenu as Menu).Add (new SparkleMenuItem (pair.Key) {
                                    Image     = new Image (icon_path),
                                    Sensitive = false
                                });
                            }

                            if (!string.IsNullOrEmpty (project.MoreUnsyncedChanges)) {
                                (item.Submenu as Menu).Add (new MenuItem (project.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()
        {
            this.context_menu = new ContextMenu();

            this.state_item = new SparkleMenuItem {
                Header    = Controller.StateText,
                IsEnabled = false
            };

            Image folder_image = new Image {
                Source = UserInterfaceHelpers.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 = SparkleShare.Controller.UserAuthenticationInfo.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 = SparkleShare.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;
                SparkleShare.Controller.ToggleNotifications();
                notify_check_box.IsChecked = SparkleShare.Controller.NotificationsEnabled;
            };

            notify_item.Click += delegate {
                SparkleShare.Controller.ToggleNotifications();
                notify_check_box.IsChecked = SparkleShare.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 = UserInterfaceHelpers.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 = UserInterfaceHelpers.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 = "Retry Sync"
                            };
                            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;
        }
Beispiel #13
0
        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.recent_events_item.Activated += Controller.RecentEventsClicked;

            MenuItem add_item = new MenuItem("Add Hosted Project…");

            add_item.Activated += Controller.AddHostedProjectClicked;

            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 about_item = new MenuItem("About SparkleShare");

            about_item.Activated += Controller.AboutClicked;

            this.quit_item = new MenuItem("Quit")
            {
                Sensitive = Controller.QuitItemEnabled
            };
            this.quit_item.Activated += 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(about_item);

            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;
        }
Beispiel #15
0
        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("folder-sparkleshare", 16))
            };

            folder_item.Activated += delegate {
                Controller.SparkleShareClicked();
            };

            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 SparkleMenuItem(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 SparkleMenuItem(folder_name)
                    {
                        Image = new Image(folder_icon)
                    };

                    subfolder_item.Activated += OpenFolderDelegate(folder_name);
                    submenu.Add(subfolder_item);
                }

                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(_("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());


            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
        }
        // Creates the menu that is popped up when the
        // user clicks the status icon
        public void CreateMenu()
        {
            Menu = new Menu ();

                // The menu item showing the status and size of the SparkleShare folder
                MenuItem status_menu_item = new MenuItem (StateText) {
                    Sensitive = false
                };

            Menu.Add (status_menu_item);
            Menu.Add (new SeparatorMenuItem ());

                ImageMenuItem folder_item = new SparkleMenuItem ("SparkleShare"){
                    Image = new Image (SparkleUIHelpers.GetIcon ("folder-sparkleshare", 16))
                };

                folder_item.Activated += delegate {
                    SparkleShare.Controller.OpenSparkleShareFolder ();
                };

            Menu.Add (folder_item);

                if (SparkleShare.Controller.Folders.Count > 0) {

                    // Creates a menu item for each repository with a link to their logs
                    foreach (string folder_name in SparkleShare.Controller.Folders) {

                        Gdk.Pixbuf folder_icon;

                        if (SparkleShare.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 SparkleMenuItem (folder_name) {
                            Image = new Image (folder_icon)
                        };

                        subfolder_item.Activated += OpenFolderDelegate (folder_name);
                        Menu.Add (subfolder_item);
                    }

                } else {
                    MenuItem no_folders_item = new MenuItem (_("No Remote Folders Yet")) {
                        Sensitive   = false
                    };

                    Menu.Add (no_folders_item);
                }

                // Opens the wizard to add a new remote folder
                MenuItem sync_item = new MenuItem (_("Add Remote Folder…"));

                if (SparkleShare.Controller.FirstRun)
                    sync_item.Sensitive = false;

                sync_item.Activated += delegate {
                    Application.Invoke (delegate {

                        if (SparkleUI.Intro == null) {
                            SparkleUI.Intro = new SparkleIntro ();
                            SparkleUI.Intro.ShowServerForm (true);
                        }

                        if (!SparkleUI.Intro.Visible)
                            SparkleUI.Intro.ShowServerForm (true);

                        SparkleUI.Intro.ShowAll ();
                        SparkleUI.Intro.Present ();
                    });
                };

            Menu.Add (sync_item);
            Menu.Add (new SeparatorMenuItem ());

            MenuItem recent_events_item = new MenuItem (_("Show Recent Events"));

                if (SparkleShare.Controller.Folders.Count < 1)
                    recent_events_item.Sensitive = false;

                recent_events_item.Activated += delegate {
                    Application.Invoke (delegate {
                        if (SparkleUI.EventLog == null)
                            SparkleUI.EventLog = new SparkleEventLog ();

                        SparkleUI.EventLog.ShowAll ();
                        SparkleUI.EventLog.Present ();
                    });
                };

            Menu.Add (recent_events_item);

            MenuItem notify_item;

                if (SparkleShare.Controller.NotificationsEnabled)
                    notify_item = new MenuItem (_("Turn Notifications Off"));
                else
                    notify_item = new MenuItem (_("Turn Notifications On"));

                notify_item.Activated += delegate {
                    SparkleShare.Controller.ToggleNotifications ();
                    CreateMenu ();
                };

            Menu.Add (notify_item);
            Menu.Add (new SeparatorMenuItem ());

                // A menu item that takes the user to http://www.sparkleshare.org/
                MenuItem about_item = new MenuItem (_("About SparkleShare"));

                about_item.Activated += delegate {
                    SparkleAbout about = new SparkleAbout ();
                    about.ShowAll ();
                };

            Menu.Add (about_item);
            Menu.Add (new SeparatorMenuItem ());

                // A menu item that quits the application
                MenuItem quit_item = new MenuItem (_("Quit"));

                quit_item.Activated += delegate {
                    SparkleShare.Controller.Quit ();
                };

            Menu.Add (quit_item);
            Menu.ShowAll ();
        }
        public void CreateMenu()
        {
            this.context_menu = new ContextMenu ();

            status_item = new SparkleMenuItem () {
                Header    = StateText,
                IsEnabled = false
            };

            System.Windows.Controls.Image i = new System.Windows.Controls.Image();
            i.Source = SparkleUIHelpers.GetImageSource ("folder-sparkleshare-windows-16");
                i.Width = 16;
            i.Height = 16;

            SparkleMenuItem folder_item = new SparkleMenuItem () {
                Header = "SparkleShare",
                Icon   = i
            };

                folder_item.Click += delegate {
                    Controller.SparkleShareClicked ();
                };

            SparkleMenuItem add_item = new SparkleMenuItem () {
                Header    = "Add Hosted Project…"
            };

                add_item.Click += delegate {
                    Controller.AddHostedProjectClicked ();
                };

            SparkleMenuItem log_item = new SparkleMenuItem () {
                Header    = "View Recent Changes…",
                IsEnabled = (Program.Controller.Folders.Count > 0)
            };

                log_item.Click += delegate {
                    Controller.OpenRecentEventsClicked ();
                };

            SparkleMenuItem notify_item = new SparkleMenuItem ();

                if (Program.Controller.NotificationsEnabled)
                    notify_item = new SparkleMenuItem () { Header = "Turn Notifications Off" };
                else
                    notify_item = new SparkleMenuItem () { Header = "Turn Notifications On" };

                notify_item.Click += delegate {
                    Program.Controller.ToggleNotifications ();
                    CreateMenu ();
                };

            SparkleMenuItem about_item = new SparkleMenuItem () {
                Header = "About SparkleShare"
            };

                about_item.Click += delegate {
                     Controller.AboutClicked ();
                };

            exit_item = new SparkleMenuItem () {
                Header = "Exit"
            };

                this.exit_item.Click += delegate {
                    this.notify_icon.Dispose ();
                    Controller.QuitClicked ();
                };

            this.context_menu.Items.Add (status_item);
            this.context_menu.Items.Add (new Separator ());
            this.context_menu.Items.Add (folder_item);

            if (Program.Controller.Folders.Count > 0) {
                foreach (string folder_name in Program.Controller.Folders) {
                    SparkleMenuItem subfolder_item = new SparkleMenuItem () {
                        Header = folder_name
                    };

                    subfolder_item.Click += OpenFolderDelegate (folder_name);

                    System.Windows.Controls.Image i2 = new System.Windows.Controls.Image();
            i2.Source = SparkleUIHelpers.GetImageSource ("folder-windows-16");
                i2.Width = 16;
            i2.Height = 16;
                    subfolder_item.Icon = i2;
                    /* TODO
                    if (Program.Controller.UnsyncedFolders.Contains (folder_name))
                        subfolder_item.Icon = Icons.dialog_error_16;
                    else
                        subfolder_item.Icon = Icons.sparkleshare_windows_status;
                     */

                    this.context_menu.Items.Add (subfolder_item);
                }

            } else {
                SparkleMenuItem no_folders_item = new SparkleMenuItem () {
                    Header    = "No projects yet",
                    IsEnabled = false
                };

                this.context_menu.Items.Add (no_folders_item);
            }

            this.context_menu.Items.Add (new Separator ());
            this.context_menu.Items.Add (add_item);
            this.context_menu.Items.Add (new Separator ());
            this.context_menu.Items.Add (log_item);
            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;
        }