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