CmisSync.StatusIcon.CreateMenu C# (CSharp) Method

CreateMenu() private method

Create the GUI elements of the menu.
private CreateMenu ( ) : void
return void
        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.CmisSync + "\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"),
                        Tag = "remove",
                    };
                    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);


                    SetEnabledOrDisabled(suspendFolderItem, manualSyncItem, true);
                    foreach (RepoBase aRepo in Program.Controller.Repositories)
                    {
                        if (aRepo.Name.Equals(folderName))
                        {
                            SetEnabledOrDisabled(suspendFolderItem, manualSyncItem, aRepo.Enabled);
                            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);

                    // Add the configuration modification sub-items, if configuration is not frozen.
                    if ( ! ConfigManager.CurrentConfig.FrozenConfiguration)
                    {
                        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.
            // Depending on configuration, disable or skip some elements.
            if (!ConfigManager.CurrentConfig.FrozenConfiguration)
            {
                ToolStripMenuItem addFolderItem = new ToolStripMenuItem()
                {
                    Text = CmisSync.Properties_Resources.AddARemoteFolder,
                    Name = "add",
                    Image = UIHelpers.GetBitmap("connect")
                };
                addFolderItem.Click += delegate
                {
                    Controller.AddRemoteFolderClicked();
                };
                this.traymenu.Items.Add(addFolderItem);
                this.traymenu.Items.Add(new ToolStripSeparator());

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

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