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