Exemplo n.º 1
0
        /// <summary>
        /// Create the UI elements of the menu.
        /// </summary>
        private void CreateMenu()
        {
            // Reset existing items.
            this.traymenu.Items.Clear();

            // Create the state menu item.
            this.stateItem = new ToolStripMenuItem()
            {
                Text    = Utils.Ellipsis(Controller.StateText, 32),
                Enabled = false
            };

            if (Controller.StateText.Length > 32)
            {
                this.stateItem.ToolTipText = Utils.WordWrap(Controller.StateText, 63);
            }

            this.traymenu.Items.Add(stateItem);
            this.trayicon.Text = Utils.Ellipsis(Properties_Resources.Oris4Sync + "\n" + Controller.StateText, 63);

            // Create a menu item per synchronized folder.
            if (Controller.Folders.Length > 0)
            {
                foreach (string folderName in Controller.Folders)
                {
                    // Main item.
                    ToolStripMenuItem subfolderItem = new ToolStripMenuItem()
                    {
                        Text  = folderName,
                        Name  = "tsmi" + folderName,
                        Image = UIHelpers.GetBitmap("folder"),
                    };

                    // Sub-item: open locally.
                    ToolStripMenuItem openLocalFolderItem = new ToolStripMenuItem()
                    {
                        Text  = CmisSync.Properties_Resources.OpenLocalFolder,
                        Name  = "openLocal",
                        Image = UIHelpers.GetBitmap("folder"),
                    };
                    openLocalFolderItem.Click += OpenLocalFolderDelegate(folderName);

                    // Sub-item: open remotely.
                    ToolStripMenuItem openRemoteFolderItem = new ToolStripMenuItem()
                    {
                        Text  = CmisSync.Properties_Resources.BrowseRemoteFolder,
                        Name  = "openRemote",
                        Image = UIHelpers.GetBitmap("classic_folder_web"),
                    };
                    openRemoteFolderItem.Click += OpenRemoteFolderDelegate(folderName);

                    // Sub-item: suspend sync.
                    ToolStripMenuItem suspendFolderItem = new ToolStripMenuItem()
                    {
                        Name = "pause",
                    };
                    suspendFolderItem.Click += SuspendSyncFolderDelegate(folderName);

                    // Sub-item: remove folder from sync
                    ToolStripMenuItem removeFolderFromSyncItem = new ToolStripMenuItem()
                    {
                        Text  = Properties_Resources.RemoveFolderFromSync,
                        Name  = "remove",
                        Image = UIHelpers.GetBitmap("disconnect"),
                    };
                    removeFolderFromSyncItem.Click += RemoveFolderFromSyncDelegate(folderName);

                    // Sub-item: manual sync
                    ToolStripMenuItem manualSyncItem = new ToolStripMenuItem()
                    {
                        Text  = Properties_Resources.ManualSync,
                        Name  = "sync",
                        Image = UIHelpers.GetBitmap("media_playback_refresh"),
                    };
                    manualSyncItem.Click += ManualSyncDelegate(folderName);

                    // Sub-item: settings dialog
                    ToolStripMenuItem settingsItem = new ToolStripMenuItem()
                    {
                        Text = Properties_Resources.Settings,
                        Name = "settings",
                    };
                    settingsItem.Click += SettingsDelegate(folderName);


                    setSyncItemState(suspendFolderItem, manualSyncItem, SyncStatus.Idle);
                    foreach (RepoBase aRepo in Program.Controller.Repositories)
                    {
                        if (aRepo.Name.Equals(folderName))
                        {
                            setSyncItemState(suspendFolderItem, manualSyncItem, aRepo.Status);
                            break;
                        }
                    }

                    // Add the sub-items.
                    subfolderItem.DropDownItems.Add(openLocalFolderItem);
                    subfolderItem.DropDownItems.Add(openRemoteFolderItem);
                    subfolderItem.DropDownItems.Add(new ToolStripSeparator());
                    subfolderItem.DropDownItems.Add(suspendFolderItem);
                    subfolderItem.DropDownItems.Add(manualSyncItem);
                    subfolderItem.DropDownItems.Add(new ToolStripSeparator());
                    subfolderItem.DropDownItems.Add(removeFolderFromSyncItem);
                    subfolderItem.DropDownItems.Add(new ToolStripSeparator());
                    subfolderItem.DropDownItems.Add(settingsItem);

                    // Add the main item.
                    this.traymenu.Items.Add(subfolderItem);
                }
            }
            this.traymenu.Items.Add(new ToolStripSeparator());

            // Create the menu item that lets the user add a new synchronized folder.
            ToolStripMenuItem addFolderItem = new ToolStripMenuItem()
            {
                Text  = CmisSync.Properties_Resources.AddARemoteFolder,
                Name  = "add",
                Image = UIHelpers.GetBitmap("connect"),
            };

            if (ConfigManager.CurrentConfig.SingleRepository && ConfigManager.CurrentConfig.Folder.Count > 0)
            {
                //Configured for single repository and repository count 1 or more so disable menu item.
                addFolderItem.Enabled = false;
            }

            addFolderItem.Click += delegate
            {
                Controller.AddRemoteFolderClicked();
            };
            this.traymenu.Items.Add(addFolderItem);
            this.traymenu.Items.Add(new ToolStripSeparator());

            // Create the menu item that lets the user view the log.
            ToolStripMenuItem log_item = new ToolStripMenuItem()
            {
                Text = CmisSync.Properties_Resources.ViewLog,
                Name = "log",
            };

            log_item.Click += delegate
            {
                Controller.LogClicked();
            };
            //Removed for Oris4
            //this.traymenu.Items.Add(log_item);

            // Create the About menu.
            ToolStripMenuItem about_item = new ToolStripMenuItem()
            {
                Text = CmisSync.Properties_Resources.About,
                Name = "about",
            };

            about_item.Click += delegate
            {
                Controller.AboutClicked();
            };
            this.traymenu.Items.Add(about_item);

            // Create the exit menu.
            this.exitItem = new ToolStripMenuItem()
            {
                Text = CmisSync.Properties_Resources.Exit,
                Name = "exit",
            };
            this.exitItem.Click += delegate
            {
                this.trayicon.Dispose();
                Controller.QuitClicked();
            };
            this.traymenu.Items.Add(this.exitItem);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Set up the controller to create menu elements on update.
        /// </summary>
        private void CreateInvokeMethods()
        {
            // Icon.
            Controller.UpdateIconEvent += delegate(int icon_frame)
            {
                if (IsHandleCreated)
                {
                    BeginInvoke((Action) delegate
                    {
                        if (icon_frame > -1)
                        {
                            this.trayicon.Icon = animationFrames[icon_frame];
                        }
                        else
                        {
                            this.trayicon.Icon = errorIcon;
                        }
                    });
                }
            };

            // Status item.
            Controller.UpdateStatusItemEvent += delegate(string state_text)
            {
                if (IsHandleCreated)
                {
                    BeginInvoke((Action) delegate
                    {
                        this.stateItem.Text = state_text;
                        this.trayicon.Text  = Utils.Ellipsis(Properties_Resources.Oris4Sync + "\n" + state_text, 63);
                    });
                }
            };

            // Menu.
            Controller.UpdateMenuEvent += delegate(IconState state)
            {
                if (IsHandleCreated)
                {
                    BeginInvoke((Action) delegate
                    {
                        CreateMenu();
                    });
                }
            };

            // Repo Submenu.
            Controller.UpdateSuspendSyncFolderEvent += delegate(string reponame)
            {
                if (IsHandleCreated)
                {
                    BeginInvoke((Action) delegate
                    {
                        ToolStripMenuItem repoitem  = (ToolStripMenuItem)this.traymenu.Items["tsmi" + reponame];
                        ToolStripMenuItem pauseitem = (ToolStripMenuItem)repoitem.DropDownItems.Find("pause", false)[0];
                        ToolStripMenuItem syncitem  = (ToolStripMenuItem)repoitem.DropDownItems.Find("sync", false)[0];
                        foreach (RepoBase aRepo in Program.Controller.Repositories)
                        {
                            if (aRepo.Name == reponame)
                            {
                                setSyncItemState(pauseitem, syncitem, aRepo.Status);
                                break;
                            }
                        }
                    });
                }
            };

            Program.Controller.AlertNotificationRaised += delegate(string title, string message)
            {
                if (ConfigManager.CurrentConfig.Notifications)
                {
                    //Only show balloon tips when notifications are on

                    SystemSounds.Exclamation.Play();

                    trayicon.ShowBalloonTip(25000, title, message, ToolTipIcon.Error);

                    //System.Windows.Forms.MessageBox.Show(message, title,
                    //    System.Windows.Forms.MessageBoxButtons.OK,
                    //    System.Windows.Forms.MessageBoxIcon.Error);
                }
            };
        }
Exemplo n.º 3
0
        /// <summary>
        /// Set up the controller to create menu elements on update.
        /// </summary>
        private void CreateInvokeMethods()
        {
            // Icon.
            Controller.UpdateIconEvent += delegate(int icon_frame)
            {
                if (IsHandleCreated)
                {
                    BeginInvoke((Action) delegate
                    {
                        if (icon_frame > -1)
                        {
                            this.trayicon.Icon = animationFrames[icon_frame];
                        }
                        else
                        {
                            this.trayicon.Icon = errorIcon;
                        }
                    });
                }
            };

            //Repo folders
            Controller.UpdateFoldersEvent += delegate()
            {
                if (IsHandleCreated)
                {
                    BeginInvoke((Action) delegate
                    {
                        CreateMenu();
                    });
                }
            };

            // Status item.
            Controller.UpdateStatusItemEvent += delegate(string state_text)
            {
                if (IsHandleCreated)
                {
                    BeginInvoke((Action) delegate
                    {
                        stateItem.Text  = state_text;
                        string iconText = Utils.Ellipsis(Properties_Resources.CmisSync + "\n" + state_text, 63);
                        if (!iconText.Equals(trayicon.Text)) // TODO Useful? http://stackoverflow.com/q/34083778
                        {
                            trayicon.Text = iconText;
                        }
                    });
                }
            };

            // Menu.
            Controller.UpdateMenuEvent += delegate(IconState state)
            {
                if (IsHandleCreated)
                {
                    BeginInvoke((Action) delegate
                    {
                        this.trayicon.Text = Utils.Ellipsis(Properties_Resources.CmisSync + "\n" + Controller.StateText, 63);
                    });
                }
            };

            // Repo Submenu.
            Controller.UpdateSuspendSyncFolderEvent += delegate(string reponame)
            {
                if (IsHandleCreated)
                {
                    BeginInvoke((Action) delegate
                    {
                        ToolStripMenuItem repoitem  = (ToolStripMenuItem)this.traymenu.Items["tsmi" + reponame];
                        ToolStripMenuItem pauseitem = (ToolStripMenuItem)repoitem.DropDownItems.Find("pause", false)[0];
                        ToolStripMenuItem syncitem  = (ToolStripMenuItem)repoitem.DropDownItems.Find("sync", false)[0];

                        foreach (RepoBase aRepo in Program.Controller.Repositories)
                        {
                            if (aRepo.Name == reponame)
                            {
                                SetEnabledOrDisabled(pauseitem, syncitem, aRepo.Enabled);
                                break;
                            }
                        }
                    });
                }
            };

            Program.Controller.AlertNotificationRaised += delegate(string title, string message)
            {
                if (ConfigManager.CurrentConfig.Notifications)
                {
                }
            };
        }