private void LoadAbout() { System.Uri resourceLocater = new System.Uri("/DataSpaceSync;component/AboutWPF.xaml", System.UriKind.Relative); UserControl aboutWPF = Application.LoadComponent(resourceLocater) as UserControl; canvas = aboutWPF.FindName("canvas") as Canvas; image = aboutWPF.FindName("image") as Image; version = aboutWPF.FindName("version") as Label; credits = aboutWPF.FindName("credits") as TextBlock; image.Source = UIHelpers.GetImageSource("about"); version.Content = string.Format(Properties_Resources.Version, Controller.RunningVersion, Controller.CreateTime.GetValueOrDefault().ToString("d")); credits.Text = string.Format("Copyright © {0}–{1} {2}\n\n{3} {4}", "2013", DateTime.Now.Year.ToString(), " GRAU DATA AG, Aegif and others.", Properties_Resources.ApplicationName, "is Open Source software. You are free to use, modify, and redistribute it under the GNU General Public License version 3 or later."); Content = aboutWPF; }
private void CreateAnimationFrames() { this.animation_frames = new NSImage[] { new NSImage(UIHelpers.GetImagePathname("process-syncing-i")), new NSImage(UIHelpers.GetImagePathname("process-syncing-ii")), new NSImage(UIHelpers.GetImagePathname("process-syncing-iii")), new NSImage(UIHelpers.GetImagePathname("process-syncing-iiii")), new NSImage(UIHelpers.GetImagePathname("process-syncing-iiiii")) }; this.animation_frames_active = new NSImage[] { new NSImage(UIHelpers.GetImagePathname("process-syncing-i-active")), new NSImage(UIHelpers.GetImagePathname("process-syncing-ii-active")), new NSImage(UIHelpers.GetImagePathname("process-syncing-iii-active")), new NSImage(UIHelpers.GetImagePathname("process-syncing-iiii-active")), new NSImage(UIHelpers.GetImagePathname("process-syncing-iiiii-active")) }; this.error_image = new NSImage(UIHelpers.GetImagePathname("process-syncing-error")); this.error_image_active = new NSImage(UIHelpers.GetImagePathname("process-syncing-error-active")); }
public Spinner(int size) : base() { this.Size = size; this.CycleDuration = 600; this.CurrentStep = 0; Gdk.Pixbuf spinner_gallery = UIHelpers.GetIcon("process-working", this.Size); int frames_in_width = spinner_gallery.Width / this.Size; int frames_in_height = spinner_gallery.Height / this.Size; this.NumSteps = frames_in_width * frames_in_height; this.Images = new Gdk.Pixbuf[this.NumSteps - 1]; int i = 0; for (int y = 0; y < frames_in_height; y++) { for (int x = 0; x < frames_in_width; x++) { if (!(y == 0 && x == 0)) { this.Images[i] = new Gdk.Pixbuf(spinner_gallery, x * this.Size, y * this.Size, this.Size, this.Size); i++; } } } this.Timer = new Timer() { Interval = (double)this.CycleDuration / this.NumSteps }; this.Timer.Elapsed += delegate { this.NextImage(); }; this.Start(); }
private void CreateSetup() { // Separation and background for the line of buttons. this.buttonsLine = new Rectangle() { Width = Width, Height = 1, Fill = new SolidColorBrush(Color.FromRgb(223, 223, 223)) }; this.buttonsBackground = new Rectangle() { Width = Width, Height = 40, Fill = new SolidColorBrush(Color.FromRgb(240, 240, 240)) }; // Splash image. this.sideSplash = new Image() { Width = 150, Height = 482 }; this.sideSplash.Source = UIHelpers.GetImageSource("side-splash"); // Components position. ContentCanvas.Children.Add(this.buttonsBackground); Canvas.SetRight(buttonsBackground, 0); Canvas.SetBottom(buttonsBackground, 0); ContentCanvas.Children.Add(this.buttonsLine); Canvas.SetRight(this.buttonsLine, 0); Canvas.SetBottom(this.buttonsLine, 40); ContentCanvas.Children.Add(this.sideSplash); Canvas.SetLeft(this.sideSplash, 0); Canvas.SetBottom(this.sideSplash, 0); }
public About() : base(string.Empty) { this.DeleteEvent += delegate(object o, DeleteEventArgs args) { this.Controller.WindowClosed(); args.RetVal = true; }; this.DefaultSize = new Gdk.Size(600, 260); this.Resizable = false; this.BorderWidth = 0; this.IconName = "dataspacesyc-folder"; this.WindowPosition = WindowPosition.Center; this.Title = string.Format(Properties_Resources.About, Properties_Resources.ApplicationName); this.AppPaintable = true; string image_path = UIHelpers.GetImagePath("about.png"); this.Realize(); Gdk.Pixbuf buf = new Gdk.Pixbuf(image_path); Gdk.Pixmap map, map2; buf.RenderPixmapAndMask(out map, out map2, 255); GdkWindow.SetBackPixmap(map, false); this.CreateAbout(); this.Controller.HideWindowEvent += delegate { Application.Invoke(delegate { this.HideAll(); }); }; this.Controller.ShowWindowEvent += delegate { Application.Invoke(delegate { this.ShowAll(); this.Present(); }); }; }
public override void AwakeFromNib() { base.AwakeFromNib(); this.StartCheck.Title = String.Format(Properties_Resources.Startup, Properties_Resources.ApplicationName); this.FinishButton.Title = Properties_Resources.Finish; // this.FinishButton.KeyEquivalent = "\r"; NSImage image = new NSImage(UIHelpers.GetImagePathname("tutorial-slide-" + Controller.TutorialCurrentPage)) { Size = new SizeF(350, 200) }; TutorialView.Image = image; switch (Controller.TutorialCurrentPage) { case 4: TutorialText.StringValue = Properties_Resources.YouCan; OnStart(this); break; } }
private void CreateMenu() { this.traymenu.Items.Clear(); // State Menu this.state_item = new ToolStripMenuItem() { Text = Controller.StateText, Enabled = false }; this.traymenu.Items.Add(state_item); this.trayicon.Text = "CmisSync\n" + Controller.StateText; // Folders Menu if (Controller.Folders.Length > 0) { foreach (string folder_name in Controller.Folders) { ToolStripMenuItem subfolder_item = new ToolStripMenuItem() { Text = folder_name, Name = "tsmi" + folder_name, Image = UIHelpers.GetBitmap("folder") }; ToolStripMenuItem open_localfolder_item = new ToolStripMenuItem() { Text = CmisSync.Properties.Resources.ResourceManager.GetString("OpenLocalFolder", CultureInfo.CurrentCulture), Image = UIHelpers.GetBitmap("folder") }; open_localfolder_item.Click += OpenFolderDelegate(folder_name); ToolStripMenuItem open_remotefolder_item = new ToolStripMenuItem() { Text = CmisSync.Properties.Resources.ResourceManager.GetString("BrowseRemoteFolder", CultureInfo.CurrentCulture), Image = UIHelpers.GetBitmap("classic_folder_web") }; open_remotefolder_item.Click += OpenRemoteFolderDelegate(folder_name); ToolStripMenuItem suspend_folder_item = new ToolStripMenuItem() { Text = CmisSync.Properties.Resources.ResourceManager.GetString("PauseSync", CultureInfo.CurrentCulture), Tag = "pause", Image = UIHelpers.GetBitmap("media_playback_pause") }; suspend_folder_item.Click += SuspendSyncFolderDelegate(folder_name); subfolder_item.DropDownItems.Add(open_localfolder_item); subfolder_item.DropDownItems.Add(open_remotefolder_item); subfolder_item.DropDownItems.Add(new ToolStripSeparator()); subfolder_item.DropDownItems.Add(suspend_folder_item); this.traymenu.Items.Add(subfolder_item); } } this.traymenu.Items.Add(new ToolStripSeparator()); // Add Menu ToolStripMenuItem add_item = new ToolStripMenuItem() { Text = CmisSync.Properties.Resources.ResourceManager.GetString("AddARemoteFolder", CultureInfo.CurrentCulture) }; add_item.Click += delegate { Controller.AddHostedProjectClicked(); }; this.traymenu.Items.Add(add_item); this.traymenu.Items.Add(new ToolStripSeparator()); // About Menu ToolStripMenuItem about_item = new ToolStripMenuItem() { Text = "About CmisSync" }; about_item.Click += delegate { Controller.AboutClicked(); }; this.traymenu.Items.Add(about_item); // Exit Menu this.exit_item = new ToolStripMenuItem() { Text = CmisSync.Properties.Resources.ResourceManager.GetString("Exit", CultureInfo.CurrentCulture) }; this.exit_item.Click += delegate { this.trayicon.Dispose(); Controller.QuitClicked(); }; this.traymenu.Items.Add(this.exit_item); }
public TransmissionMenuItem(FileTransmissionEvent e) : base(e.Type.ToString()) { Path = e.Path; Type = e.Type; TypeString = Type.ToString(); switch (Type) { case FileTransmissionType.DOWNLOAD_NEW_FILE: Image = new Image(UIHelpers.GetIcon("dataspacesync-downloading", 16)); TypeString = Properties_Resources.NotificationFileDownload; break; case FileTransmissionType.UPLOAD_NEW_FILE: Image = new Image(UIHelpers.GetIcon("dataspacesync-uploading", 16)); TypeString = Properties_Resources.NotificationFileUpload; break; case FileTransmissionType.DOWNLOAD_MODIFIED_FILE: TypeString = Properties_Resources.NotificationFileUpdateLocal; Image = new Image(UIHelpers.GetIcon("dataspacesync-updating", 16)); break; case FileTransmissionType.UPLOAD_MODIFIED_FILE: TypeString = Properties_Resources.NotificationFileUpdateRemote; Image = new Image(UIHelpers.GetIcon("dataspacesync-updating", 16)); break; } double percent = (e.Status.Percent == null)? 0:(double)e.Status.Percent; Label text = this.Child as Label; if (text != null) { text.Text = String.Format("{0}: {1} ({2})", TypeString, System.IO.Path.GetFileName(Path), CmisSync.Lib.Utils.FormatPercent(percent)); } if (ConfigManager.CurrentConfig.Notifications) { NotificationUtils.NotifyAsync(String.Format("{0}: {1}", TypeString, System.IO.Path.GetFileName(Path)), Path); } e.TransmissionStatus += delegate(object sender, TransmissionProgressEventArgs status) { TimeSpan diff = DateTime.Now - updateTime; if (diff.Seconds < 1) { return; } updateTime = DateTime.Now; percent = (status.Percent != null)? (double)status.Percent: 0; long?bitsPerSecond = status.BitsPerSecond; if (status.Percent != null && bitsPerSecond != null && text != null) { Application.Invoke(delegate { text.Text = String.Format("{0}: {1} ({2} {3})", TypeString, System.IO.Path.GetFileName(Path), CmisSync.Lib.Utils.FormatPercent(percent), CmisSync.Lib.Utils.FormatBandwidth((long)bitsPerSecond)); }); } }; this.Activated += delegate(object sender, EventArgs args) { Utils.OpenFolder(System.IO.Directory.GetParent(Path).FullName); }; Sensitive = true; }
public SetupWindow() : base(string.Empty) { this.Title = string.Format("{0} {1}", Properties_Resources.ApplicationName, Catalog.GetString("Setup")); this.BorderWidth = 0; this.IconName = "dataspacesync-app"; this.Resizable = false; this.WindowPosition = WindowPosition.Center; this.Deletable = false; this.DeleteEvent += delegate(object sender, DeleteEventArgs args) { args.RetVal = true; }; this.SecondaryTextColor = Style.Foreground(StateType.Insensitive).ToHex(); this.SecondaryTextColorSelected = this.MixColors( new TreeView().Style.Foreground(StateType.Selected), new TreeView().Style.Background(StateType.Selected), 0.15).ToHex(); this.SetSizeRequest(680, 400); this.hBox = new HBox(false, 0); this.vBox = new VBox(false, 0); this.wrapper = new VBox(false, 0) { BorderWidth = 0 }; this.optionArea = new VBox(false, 0) { BorderWidth = 0 }; this.buttons = this.CreateButtonBox(); HBox layout_horizontal = new HBox(false, 0) { BorderWidth = 0 }; layout_horizontal.PackStart(this.optionArea, true, true, 0); layout_horizontal.PackStart(this.buttons, false, false, 0); this.vBox.PackStart(this.wrapper, true, true, 0); this.vBox.PackStart(layout_horizontal, false, false, 15); EventBox box = new EventBox(); Gdk.Color bg_color = new Gdk.Color(); Gdk.Color.Parse("#000", ref bg_color); box.ModifyBg(StateType.Normal, bg_color); Image side_splash = UIHelpers.GetImage("side-splash.png"); side_splash.Yalign = 1; box.Add(side_splash); this.hBox.PackStart(box, false, false, 0); this.hBox.PackStart(this.vBox, true, true, 30); base.Add(this.hBox); }
private void ShowTutorialPage() { switch (this.controller.TutorialCurrentPage) { case 1: { this.Header = Properties_Resources.WhatsNext; this.Description = string.Format(Properties_Resources.CmisSyncCreates, Properties_Resources.ApplicationName); Button skip_tutorial_button = new Button(Properties_Resources.SkipTutorial); skip_tutorial_button.Clicked += delegate { this.controller.TutorialSkipped(); }; Button continue_button = new Button(this.continueText); continue_button.Clicked += delegate { this.controller.TutorialPageCompleted(); }; Image slide = UIHelpers.GetImage("tutorial-slide-1.png"); this.Add(slide); this.AddButton(skip_tutorial_button); this.AddButton(continue_button); break; } case 2: { this.Header = Properties_Resources.Synchronization; this.Description = Properties_Resources.DocumentsAre; Button continue_button = new Button(this.continueText); continue_button.Clicked += delegate { this.controller.TutorialPageCompleted(); }; Image slide = UIHelpers.GetImage("tutorial-slide-2.png"); this.Add(slide); this.AddButton(continue_button); break; } case 3: { this.Header = Properties_Resources.StatusIcon; this.Description = string.Format(Properties_Resources.StatusIconShows, Properties_Resources.ApplicationName); Button continue_button = new Button(this.continueText); continue_button.Clicked += delegate { this.controller.TutorialPageCompleted(); }; Image slide = UIHelpers.GetImage("tutorial-slide-3.png"); this.Add(slide); this.AddButton(continue_button); break; } case 4: { this.Header = string.Format(Properties_Resources.AddFolders, Properties_Resources.ApplicationName); this.Description = Properties_Resources.YouCan; Image slide = UIHelpers.GetImage("tutorial-slide-4.png"); Button finish_button = new Button(Properties_Resources.Finish); finish_button.Clicked += delegate { this.controller.TutorialPageCompleted(); }; CheckButton check_button = new CheckButton(string.Format(Properties_Resources.Startup, Properties_Resources.ApplicationName)) { Active = true }; check_button.Toggled += delegate { this.controller.StartupItemChanged(check_button.Active); }; this.Add(slide); this.AddOption(check_button); this.AddButton(finish_button); break; } } }
private void ApplyTutorialSecond() { slide_image.Source = UIHelpers.GetImageSource("tutorial-slide-2"); continue_button.Content = Properties_Resources.Continue; continue_button.Focus(); }
public RepositoryMenuItem(Repository repo, StatusIconController controller) : base(repo.Name) { this.SetProperty("always-show-image", new GLib.Value(true)); this.repository = repo; this.controller = controller; this.Image = new Image(UIHelpers.GetIcon("dataspacesync-folder", 16)); this.repository.PropertyChanged += (object sender, System.ComponentModel.PropertyChangedEventArgs e) => { if (e.PropertyName == CmisSync.Lib.Utils.NameOf((Repository r) => r.Status)) { this.Status = this.repository.Status; } if (e.PropertyName == CmisSync.Lib.Utils.NameOf((Repository r) => r.LastFinishedSync)) { this.changesFoundAt = this.repository.LastFinishedSync; this.UpdateStatusText(); } if (e.PropertyName == CmisSync.Lib.Utils.NameOf((Repository r) => r.NumberOfChanges)) { this.changesFound = this.repository.NumberOfChanges; this.UpdateStatusText(); } }; this.openLocalFolderItem = new CmisSyncMenuItem( CmisSync.Properties_Resources.OpenLocalFolder) { Image = new Image(UIHelpers.GetIcon("dataspacesync-folder", 16)) }; this.openLocalFolderItem.Activated += this.OpenFolderDelegate(); this.editItem = new CmisSyncMenuItem(CmisSync.Properties_Resources.Settings); this.editItem.Activated += this.EditFolderDelegate(); this.suspendItem = new CmisSyncMenuItem(Properties_Resources.PauseSync); this.Status = this.repository.Status; this.suspendItem.Activated += this.SuspendSyncFolderDelegate(); this.statusItem = new MenuItem(Properties_Resources.StatusSearchingForChanges) { Sensitive = false }; this.removeFolderFromSyncItem = new CmisSyncMenuItem( CmisSync.Properties_Resources.RemoveFolderFromSync) { Image = new Image(UIHelpers.GetIcon("dataspacesync-deleted", 12)) }; this.removeFolderFromSyncItem.Activated += this.RemoveFolderFromSyncDelegate(); this.separator1 = new SeparatorMenuItem(); this.separator2 = new SeparatorMenuItem(); var subMenu = new Menu(); subMenu.Add(this.statusItem); subMenu.Add(this.separator1); subMenu.Add(this.openLocalFolderItem); subMenu.Add(this.suspendItem); subMenu.Add(this.editItem); subMenu.Add(this.separator2); subMenu.Add(this.removeFolderFromSyncItem); this.Submenu = subMenu; }
/// <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 = Controller.StateText, Enabled = false }; this.traymenu.Items.Add(stateItem); this.trayicon.Text = "CmisSync\n" + Controller.StateText; // 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.ResourceManager.GetString("OpenLocalFolder", CultureInfo.CurrentCulture), Image = UIHelpers.GetBitmap("folder") }; openLocalFolderItem.Click += OpenLocalFolderDelegate(folderName); // Sub-item: open remotely. ToolStripMenuItem openRemoteFolderItem = new ToolStripMenuItem() { Text = CmisSync.Properties_Resources.ResourceManager.GetString("BrowseRemoteFolder", CultureInfo.CurrentCulture), Image = UIHelpers.GetBitmap("classic_folder_web") }; openRemoteFolderItem.Click += OpenRemoteFolderDelegate(folderName); // Sub-item: suspend sync. ToolStripMenuItem suspendFolderItem = new ToolStripMenuItem() { Text = CmisSync.Properties_Resources.ResourceManager.GetString("PauseSync", CultureInfo.CurrentCulture), Tag = "pause", Image = UIHelpers.GetBitmap("media_playback_pause") }; suspendFolderItem.Click += SuspendSyncFolderDelegate(folderName); // Add the sub-items. subfolderItem.DropDownItems.Add(openLocalFolderItem); subfolderItem.DropDownItems.Add(openRemoteFolderItem); subfolderItem.DropDownItems.Add(new ToolStripSeparator()); subfolderItem.DropDownItems.Add(suspendFolderItem); // 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.ResourceManager.GetString("AddARemoteFolder", CultureInfo.CurrentCulture) }; 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.ResourceManager.GetString("ViewLog", CultureInfo.CurrentCulture) }; 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.ResourceManager.GetString("About", CultureInfo.CurrentCulture) }; about_item.Click += delegate { Controller.AboutClicked(); }; this.traymenu.Items.Add(about_item); // Create the exit menu. this.exitItem = new ToolStripMenuItem() { Text = CmisSync.Properties_Resources.ResourceManager.GetString("Exit", CultureInfo.CurrentCulture) }; this.exitItem.Click += delegate { this.trayicon.Dispose(); Controller.QuitClicked(); }; this.traymenu.Items.Add(this.exitItem); }
public override void AwakeFromNib() { base.AwakeFromNib(); this.SideSplashView.Image = new NSImage(UIHelpers.GetImagePathname("side-splash")) { Size = new SizeF(150, 482) }; this.Header.StringValue = Properties_Resources.EditTitle; Repo = new RootFolder() { Name = FolderName, Id = Credentials.RepoId, Address = Credentials.Address.ToString() }; Repo.Selected = true; IgnoredFolderLoader.AddIgnoredFolderToRootNode(Repo, Ignores); LocalFolderLoader.AddLocalFolderToRootNode(Repo, localPath); List <RootFolder> repos = new List <RootFolder>(); repos.Add(Repo); Loader = new AsyncNodeLoader(Repo, Credentials, PredefinedNodeLoader.LoadSubFolderDelegate, PredefinedNodeLoader.CheckSubFolderDelegate); CancelButton.Title = Properties_Resources.DiscardChanges; FinishButton.Title = Properties_Resources.SaveChanges; DataDelegate = new OutlineViewDelegate(); DataSource = new CmisTree.CmisTreeDataSource(repos); Outline.DataSource = DataSource; Outline.Delegate = DataDelegate; this.AddressLabel.StringValue = Properties_Resources.CmisWebAddress; this.UserLabel.StringValue = Properties_Resources.User; this.PasswordLabel.StringValue = Properties_Resources.Password; this.AddressText.StringValue = Credentials.Address.ToString(); this.UserText.StringValue = Credentials.UserName; this.PasswordText.StringValue = Credentials.Password.ToString(); this.AddressText.Enabled = false; this.UserText.Enabled = false; this.LoginStatusProgress.IsDisplayedWhenStopped = false; this.LoginStatusLabel.Hidden = true; this.FolderTab.Label = Properties_Resources.AddingFolder; this.CredentialsTab.Label = Properties_Resources.Credentials; switch (this.type) { case EditType.EditFolder: TabView.SelectAt(0); break; case EditType.EditCredentials: TabView.SelectAt(1); break; default: TabView.SelectAt(0); break; } // GUI workaround to remove ignore folder {{ this.TabView.Remove(this.FolderTab); // GUI workaround to remove ignore folder }} Controller.CloseWindowEvent += delegate { Loader.Cancel(); this.Window.PerformClose(this); this.Dispose(); }; InsertEvent(); // must be called after InsertEvent() Loader.Load(Repo); lock (loginLock) isClosed = false; OnPasswordChanged(this); }
public StatusIcon() { CreateAnimationFrames(); #if HAVE_APP_INDICATOR this.indicator = new ApplicationIndicator("cmissync", "process-syncing-i", Category.ApplicationStatus); this.indicator.Status = Status.Active; #else this.status_icon = new Gtk.StatusIcon(); this.status_icon.Pixbuf = this.animation_frames [0]; this.status_icon.Activate += ShowMenu; // Primary mouse button click this.status_icon.PopupMenu += ShowMenu; // Secondary mouse button click #endif CreateMenu(); Controller.UpdateIconEvent += delegate(int icon_frame) { Application.Invoke(delegate { if (icon_frame > -1) { #if HAVE_APP_INDICATOR string icon_name = "process-syncing-"; for (int i = 0; i <= icon_frame; i++) { icon_name += "i"; } this.indicator.IconName = icon_name; // Force update of the icon this.indicator.Status = Status.Attention; this.indicator.Status = Status.Active; #else this.status_icon.Pixbuf = this.animation_frames [icon_frame]; #endif } else { #if HAVE_APP_INDICATOR this.indicator.IconName = "process-syncing-error"; // Force update of the icon this.indicator.Status = Status.Attention; this.indicator.Status = Status.Active; #else this.status_icon.Pixbuf = UIHelpers.GetIcon("process-syncing-error", 24); #endif } }); }; Controller.UpdateStatusItemEvent += delegate(string state_text) { Application.Invoke(delegate { (this.state_item.Child as Label).Text = state_text; this.state_item.ShowAll(); }); }; Controller.UpdateMenuEvent += delegate(IconState state) { Application.Invoke(delegate { CreateMenu(); }); }; }
/// <summary> /// Create the UI. /// </summary> private void CreateAbout() { Image image = new Image() { Width = 640, Height = 260 }; image.Source = UIHelpers.GetImageSource("about"); Label version = new Label() { Content = "version " + Controller.RunningVersion, FontSize = 11, Foreground = new SolidColorBrush(Color.FromRgb(135, 178, 227)) }; this.updates = new Label() { Content = "Please check for updates at CmisSync.com", //"Checking for updates...", FontSize = 11, Foreground = new SolidColorBrush(Color.FromRgb(135, 178, 227)) }; TextBlock credits = new TextBlock() { FontSize = 11, Foreground = new SolidColorBrush(Color.FromRgb(135, 178, 227)), Text = "Copyright © 2010–" + DateTime.Now.Year.ToString() + " Aegif and others.\n" + "\n" + "CmisSync is Open Source software. You are free to use, modify, " + "and redistribute it under the GNU General Public License version 3 or later.", TextWrapping = TextWrapping.Wrap, Width = 318 }; Link website_link = new Link("Website", Controller.WebsiteLinkAddress); Link credits_link = new Link("Credits", Controller.CreditsLinkAddress); Link report_problem_link = new Link("Report a problem", Controller.ReportProblemLinkAddress); Canvas canvas = new Canvas(); canvas.Children.Add(image); Canvas.SetLeft(image, 0); Canvas.SetTop(image, 0); canvas.Children.Add(version); Canvas.SetLeft(version, 289); Canvas.SetTop(version, 92); canvas.Children.Add(this.updates); Canvas.SetLeft(this.updates, 289); Canvas.SetTop(this.updates, 109); canvas.Children.Add(credits); Canvas.SetLeft(credits, 294); Canvas.SetTop(credits, 142); canvas.Children.Add(website_link); Canvas.SetLeft(website_link, 289); Canvas.SetTop(website_link, 222); canvas.Children.Add(credits_link); Canvas.SetLeft(credits_link, 289 + website_link.ActualWidth + 60); Canvas.SetTop(credits_link, 222); canvas.Children.Add(report_problem_link); Canvas.SetLeft(report_problem_link, 289 + website_link.ActualWidth + credits_link.ActualWidth + 115); Canvas.SetTop(report_problem_link, 222); Content = canvas; }
/// <summary> /// Constructor /// </summary> public Setting() { Title = Properties_Resources.EditTitle; ResizeMode = ResizeMode.NoResize; Height = 340; Width = 640; Icon = UIHelpers.GetImageSource("app", "ico"); ElementHost.EnableModelessKeyboardInterop(this); WindowStartupLocation = WindowStartupLocation.CenterScreen; Closing += delegate(object sender, CancelEventArgs args) { Controller.HideWindow(); args.Cancel = true; }; LoadSetting(); Controller.ShowWindowEvent += delegate { Dispatcher.BeginInvoke((Action) delegate { RefreshSetting(); Show(); Activate(); BringIntoView(); }); }; Controller.HideWindowEvent += delegate { Dispatcher.BeginInvoke((Action) delegate { Hide(); }); }; FinishButton.Click += delegate { ProxySettings proxy = new ProxySettings(); if (ProxyNone.IsChecked.GetValueOrDefault()) { proxy.Selection = ProxySelection.NOPROXY; } else if (ProxySystem.IsChecked.GetValueOrDefault()) { proxy.Selection = ProxySelection.SYSTEM; } else { proxy.Selection = ProxySelection.CUSTOM; } proxy.LoginRequired = LoginCheck.IsChecked.GetValueOrDefault(); string server = Controller.GetServer(AddressText.Text); if (server != null) { proxy.Server = new Uri(server); } else { proxy.Server = ConfigManager.CurrentConfig.Proxy.Server; } proxy.Username = UserText.Text; proxy.ObfuscatedPassword = Crypto.Obfuscate(PasswordText.Password); ConfigManager.CurrentConfig.Proxy = proxy; ConfigManager.CurrentConfig.Notifications = NotificationsCheck.IsChecked.GetValueOrDefault(); ConfigManager.CurrentConfig.Save(); Controller.HideWindow(); }; CancelButton.Click += delegate { Controller.HideWindow(); }; }
private void ShowTutorialPage() { switch (Controller.TutorialCurrentPage) { case 1: { Header = CmisSync.Properties_Resources.ResourceManager.GetString("WhatsNext", CultureInfo.CurrentCulture); Description = CmisSync.Properties_Resources.ResourceManager.GetString("CmisSyncCreates", CultureInfo.CurrentCulture); Button skip_tutorial_button = new Button("Skip Tutorial"); skip_tutorial_button.Clicked += delegate { Controller.TutorialSkipped(); }; Button continue_button = new Button(continueText); continue_button.Clicked += delegate { Controller.TutorialPageCompleted(); }; Image slide = UIHelpers.GetImage("tutorial-slide-1.png"); Add(slide); AddButton(skip_tutorial_button); AddButton(continue_button); } break; case 2: { Header = "Sharing files with others"; Description = "All files added to the server are automatically synced to your " + "local folder."; Button continue_button = new Button(continueText); continue_button.Clicked += delegate { Controller.TutorialPageCompleted(); }; Image slide = UIHelpers.GetImage("tutorial-slide-2.png"); Add(slide); AddButton(continue_button); } break; case 3: { Header = "The status icon is here to help"; Description = "It shows the syncing progress, provides easy access to " + "your folders and let's you view recent changes."; Button continue_button = new Button(continueText); continue_button.Clicked += delegate { Controller.TutorialPageCompleted(); }; Image slide = UIHelpers.GetImage("tutorial-slide-3.png"); Add(slide); AddButton(continue_button); } break; case 4: { Header = "Adding repository folders to CmisSync"; Description = " " + " "; Image slide = UIHelpers.GetImage("tutorial-slide-4.png"); Button finish_button = new Button("Finish"); finish_button.Clicked += delegate { Controller.TutorialPageCompleted(); }; CheckButton check_button = new CheckButton("Add CmisSync to startup items") { Active = true }; check_button.Toggled += delegate { Controller.StartupItemChanged(check_button.Active); }; Add(slide); AddOption(check_button); AddButton(finish_button); } break; } }
/// <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 = Controller.StateText, Enabled = false }; this.traymenu.Items.Add(stateItem); this.trayicon.Text = String.Format("{0}\n{1}", Properties_Resources.ApplicationName, Controller.StateText); this.traymenu.Items.Add(new ToolStripSeparator()); /*this.transmissionItem = new ToolStripMenuItem() * { * Text = "No active transmissions", * Enabled = false * }; * this.traymenu.Items.Add(transmissionItem); */ // 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, Image = UIHelpers.GetBitmap("folder") }; openLocalFolderItem.Click += OpenLocalFolderDelegate(folderName); // Sub-item: edit ignore folder. ToolStripMenuItem editFolderItem = new ToolStripMenuItem() { Text = CmisSync.Properties_Resources.Settings }; editFolderItem.Click += EditFolderDelegate(folderName); // Sub-item: suspend sync. ToolStripMenuItem suspendFolderItem = new ToolStripMenuItem(); setSyncItemState(suspendFolderItem, SyncStatus.Idle); foreach (Repository aRepo in Program.Controller.Repositories) { if (aRepo.Name.Equals(folderName)) { setSyncItemState(suspendFolderItem, aRepo.Status); break; } } suspendFolderItem.Click += SuspendSyncFolderDelegate(folderName); // Sub-item: remove folder from sync ToolStripMenuItem removeFolderFromSyncItem = new ToolStripMenuItem() { Text = Properties_Resources.RemoveFolderFromSync, Tag = "remove", }; removeFolderFromSyncItem.Click += RemoveFolderFromSyncDelegate(folderName); // Add the sub-items. subfolderItem.DropDownItems.Add(openLocalFolderItem); //subfolderItem.DropDownItems.Add(openRemoteFolderItem); subfolderItem.DropDownItems.Add(new ToolStripSeparator()); subfolderItem.DropDownItems.Add(suspendFolderItem); subfolderItem.DropDownItems.Add(new ToolStripSeparator()); subfolderItem.DropDownItems.Add(editFolderItem); subfolderItem.DropDownItems.Add(new ToolStripSeparator()); subfolderItem.DropDownItems.Add(removeFolderFromSyncItem); // 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 }; 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 setting. ToolStripMenuItem setting_item = new ToolStripMenuItem() { Text = CmisSync.Properties_Resources.Settings }; setting_item.Click += delegate { Controller.SettingClicked(); }; this.traymenu.Items.Add(setting_item); // Create the menu item that lets the user view the log. ToolStripMenuItem log_item = new ToolStripMenuItem() { Text = CmisSync.Properties_Resources.ViewLog }; log_item.Click += delegate { Controller.LogClicked(); }; this.traymenu.Items.Add(log_item); // Create the About menu. ToolStripMenuItem about_item = new ToolStripMenuItem() { Text = String.Format(Properties_Resources.About, Properties_Resources.ApplicationName) }; 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 }; this.exitItem.Click += delegate { this.trayicon.Dispose(); Controller.QuitClicked(); }; this.traymenu.Items.Add(this.exitItem); }
/// <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); }
public SetupWindow() : base("") { Title = Catalog.GetString("CmisSync Setup"); BorderWidth = 0; IconName = "folder-cmissync"; Resizable = false; WindowPosition = WindowPosition.Center; Deletable = false; DeleteEvent += delegate(object sender, DeleteEventArgs args) { args.RetVal = true; }; SecondaryTextColor = UIHelpers.GdkColorToHex(Style.Foreground(StateType.Insensitive)); SecondaryTextColorSelected = UIHelpers.GdkColorToHex( MixColors( new TreeView().Style.Foreground(StateType.Selected), new TreeView().Style.Background(StateType.Selected), 0.15 ) ); SetSizeRequest(680, 400); HBox = new HBox(false, 0); VBox = new VBox(false, 0); Wrapper = new VBox(false, 0) { BorderWidth = 0 }; OptionArea = new VBox(false, 0) { BorderWidth = 0 }; Buttons = CreateButtonBox(); HBox layout_horizontal = new HBox(false, 0) { BorderWidth = 0 }; layout_horizontal.PackStart(OptionArea, true, true, 0); layout_horizontal.PackStart(Buttons, false, false, 0); VBox.PackStart(Wrapper, true, true, 0); VBox.PackStart(layout_horizontal, false, false, 15); EventBox box = new EventBox(); Gdk.Color bg_color = new Gdk.Color(); Gdk.Color.Parse("#000", ref bg_color); box.ModifyBg(StateType.Normal, bg_color); Image side_splash = UIHelpers.GetImage("side-splash.png"); side_splash.Yalign = 1; box.Add(side_splash); HBox.PackStart(box, false, false, 0); HBox.PackStart(VBox, true, true, 30); base.Add(HBox); }
public StatusIcon() { CreateAnimationFrames(); #if HAVE_APP_INDICATOR this.indicator = new ApplicationIndicator("cmissync", "process-syncing-i", Category.ApplicationStatus); this.indicator.Status = Status.Active; #else this.status_icon = new Gtk.StatusIcon(); this.status_icon.Pixbuf = this.animation_frames [0]; this.status_icon.Activate += ShowMenu; // Primary mouse button click this.status_icon.PopupMenu += ShowMenu; // Secondary mouse button click #endif CreateMenu(); Controller.UpdateIconEvent += delegate(int icon_frame) { Application.Invoke(delegate { if (icon_frame > -1) { #if HAVE_APP_INDICATOR string icon_name = "process-syncing-"; for (int i = 0; i <= icon_frame; i++) { icon_name += "i"; } this.indicator.IconName = icon_name; // Force update of the icon this.indicator.Status = Status.Attention; this.indicator.Status = Status.Active; #else this.status_icon.Pixbuf = this.animation_frames [icon_frame]; #endif } else { #if HAVE_APP_INDICATOR this.indicator.IconName = "process-syncing-error"; // Force update of the icon this.indicator.Status = Status.Attention; this.indicator.Status = Status.Active; #else this.status_icon.Pixbuf = UIHelpers.GetIcon("process-syncing-error", 24); #endif } }); }; Controller.UpdateStatusItemEvent += delegate(string state_text) { if (!IsHandleCreated) { return; } Application.Invoke(delegate { (this.state_item.Child as Label).Text = state_text; this.state_item.ShowAll(); }); }; Controller.UpdateMenuEvent += delegate(IconState state) { Application.Invoke(delegate { CreateMenu(); }); }; Controller.UpdateSuspendSyncFolderEvent += delegate(string reponame) { if (!IsHandleCreated) { return; } Application.Invoke(delegate { foreach (var menuItem in this.menu.Children) { if (menuItem is CmisSyncMenuItem && reponame.Equals(((CmisSyncMenuItem)menuItem).RepoName)) { foreach (RepoBase aRepo in Program.Controller.Repositories) { if (aRepo.Name.Equals(reponame)) { Menu submenu = (Menu)((CmisSyncMenuItem)menuItem).Submenu; CmisSyncMenuItem pauseItem = (CmisSyncMenuItem)submenu.Children[1]; setSyncItemState(pauseItem, aRepo.Status); break; } } break; } } }); }; }
/// <summary> /// Create the UI. /// </summary> private void CreateAbout() { Image image = new Image() { Width = 640, Height = 260 }; image.Source = UIHelpers.GetImageSource("about"); Label version = new Label() { Content = String.Format(Properties_Resources.Version, Controller.RunningVersion), FontSize = 11, Foreground = new SolidColorBrush(Color.FromRgb(135, 178, 227)) }; this.updates = new Label() { Content = Properties_Resources.ResourceManager.GetString( "PleaseCheckForUpdates", CultureInfo.CurrentCulture), // Previously: "Checking for updates...", FontSize = 11, Foreground = new SolidColorBrush(Color.FromRgb(135, 178, 227)) }; TextBlock credits = new TextBlock() { FontSize = 11, Foreground = new SolidColorBrush(Color.FromRgb(135, 178, 227)), Text = "Copyright © 2010–" + DateTime.Now.Year.ToString() + " Aegif and others.\n" + "\n" + Properties_Resources.ResourceManager.GetString("OpenSource", CultureInfo.CurrentCulture), TextWrapping = TextWrapping.Wrap, Width = 318 }; Link website_link = new Link(Properties_Resources.ResourceManager.GetString( "Website", CultureInfo.CurrentCulture), Controller.WebsiteLinkAddress); Link credits_link = new Link(Properties_Resources.ResourceManager.GetString( "Credits", CultureInfo.CurrentCulture), Controller.CreditsLinkAddress); Link report_problem_link = new Link(Properties_Resources.ResourceManager.GetString( "ReportProblem", CultureInfo.CurrentCulture), Controller.ReportProblemLinkAddress); Canvas canvas = new Canvas(); canvas.Children.Add(image); Canvas.SetLeft(image, 0); Canvas.SetTop(image, 0); canvas.Children.Add(version); Canvas.SetLeft(version, 289); Canvas.SetTop(version, 92); canvas.Children.Add(this.updates); Canvas.SetLeft(this.updates, 289); Canvas.SetTop(this.updates, 109); canvas.Children.Add(credits); Canvas.SetLeft(credits, 294); Canvas.SetTop(credits, 142); canvas.Children.Add(website_link); Canvas.SetLeft(website_link, 289); Canvas.SetTop(website_link, 222); canvas.Children.Add(credits_link); Canvas.SetLeft(credits_link, 289 + website_link.ActualWidth + 60); Canvas.SetTop(credits_link, 222); canvas.Children.Add(report_problem_link); Canvas.SetLeft(report_problem_link, 289 + website_link.ActualWidth + credits_link.ActualWidth + 115); Canvas.SetTop(report_problem_link, 222); Content = canvas; }
public void CreateMenu() { this.menu = new Menu(); // State Menu this.state_item = new MenuItem(Controller.StateText) { Sensitive = false }; this.menu.Add(this.state_item); this.menu.Add(new SeparatorMenuItem()); // Folders Menu if (Controller.Folders.Length > 0) { foreach (string folder_name in Controller.Folders) { Menu submenu = new Menu(); ImageMenuItem subfolder_item = new CmisSyncMenuItem(folder_name) { Image = new Image(UIHelpers.GetIcon("dataspacesync-folder", 16)), Submenu = submenu, RepoName = folder_name }; ImageMenuItem open_localfolder_item = new CmisSyncMenuItem( CmisSync.Properties_Resources.OpenLocalFolder) { Image = new Image(UIHelpers.GetIcon("dataspacesync-folder", 16)) }; open_localfolder_item.Activated += OpenFolderDelegate(folder_name); ImageMenuItem edit_folder_item = new CmisSyncMenuItem( CmisSync.Properties_Resources.EditTitle); edit_folder_item.Activated += EditFolderDelegate(folder_name); ImageMenuItem suspend_folder_item = new CmisSyncMenuItem( CmisSync.Properties_Resources.PauseSync) { RepoName = folder_name }; foreach (Repository aRepo in Program.Controller.Repositories) { if (aRepo.Name.Equals(folder_name)) { setSyncItemState(suspend_folder_item, aRepo.Status); break; } } suspend_folder_item.Activated += SuspendSyncFolderDelegate(folder_name); ImageMenuItem remove_folder_from_sync_item = new CmisSyncMenuItem( CmisSync.Properties_Resources.RemoveFolderFromSync) { Image = new Image(UIHelpers.GetIcon("dataspacesync-deleted", 12)) }; remove_folder_from_sync_item.Activated += RemoveFolderFromSyncDelegate(folder_name); submenu.Add(open_localfolder_item); submenu.Add(suspend_folder_item); // GUI workaround to remove ignore folder {{ //submenu.Add(edit_folder_item); // GUI workaround to remove ignore folder }} submenu.Add(new SeparatorMenuItem()); submenu.Add(remove_folder_from_sync_item); this.menu.Add(subfolder_item); } this.menu.Add(new SeparatorMenuItem()); } // Add Menu MenuItem add_item = new MenuItem( CmisSync.Properties_Resources.AddARemoteFolder); add_item.Activated += delegate { Controller.AddRemoteFolderClicked(); }; this.menu.Add(add_item); this.menu.Add(new SeparatorMenuItem()); // Log Menu MenuItem log_item = new MenuItem( CmisSync.Properties_Resources.ViewLog); log_item.Activated += delegate { Controller.LogClicked(); }; this.menu.Add(log_item); // About Menu MenuItem about_item = new MenuItem( String.Format(CmisSync.Properties_Resources.About, Properties_Resources.ApplicationName)); about_item.Activated += delegate { Controller.AboutClicked(); }; this.menu.Add(about_item); this.quit_item = new MenuItem( CmisSync.Properties_Resources.Exit) { Sensitive = true }; 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 this.IsHandleCreated = true; }
/// <summary> /// Create the GUI elements of the menu. /// </summary> public void CreateMenu() { this.menu = new Menu(); // State Menu this.state_item = new MenuItem(Controller.StateText) { Sensitive = false }; this.menu.Add(this.state_item); this.menu.Add(new SeparatorMenuItem()); // Folders Menu if (Controller.Folders.Length > 0) { foreach (string folder_name in Controller.Folders) { Menu submenu = new Menu(); ImageMenuItem subfolder_item = new CmisSyncMenuItem(folder_name) { Image = new Image(UIHelpers.GetIcon("folder-cmissync", 16)), Submenu = submenu, RepoName = folder_name }; // Sub-item: open locally. ImageMenuItem open_localfolder_item = new CmisSyncMenuItem( CmisSync.Properties_Resources.OpenLocalFolder) { Image = new Image(UIHelpers.GetIcon("folder-cmissync", 16)) }; open_localfolder_item.Activated += OpenFolderDelegate(folder_name); /* * // Sub-item: open remotely. * ImageMenuItem browse_remotefolder_item = new CmisSyncMenuItem( * CmisSync.Properties_Resources.BrowseRemoteFolder) { * Image = new Image (UIHelpers.GetIcon ("folder-cmissync", 16)) * }; * browse_remotefolder_item.Activated += OpenRemoteFolderDelegate(folder_name); */ ImageMenuItem edit_folder_item = new CmisSyncMenuItem( CmisSync.Properties_Resources.EditTitle); edit_folder_item.Activated += EditFolderDelegate(folder_name); // Sub-item: suspend sync. ImageMenuItem suspend_folder_item = new CmisSyncMenuItem( CmisSync.Properties_Resources.PauseSync) { RepoName = folder_name }; foreach (RepoBase aRepo in Program.Controller.Repositories) { if (aRepo.Name.Equals(folder_name)) { setSyncItemState(suspend_folder_item, aRepo.Status); break; } } suspend_folder_item.Activated += SuspendSyncFolderDelegate(folder_name); // Sub-item: remove folder from sync ImageMenuItem remove_folder_from_sync_item = new CmisSyncMenuItem( CmisSync.Properties_Resources.RemoveFolderFromSync) { Image = new Image(UIHelpers.GetIcon("document-deleted", 12)) }; remove_folder_from_sync_item.Activated += RemoveFolderFromSyncDelegate(folder_name); // Add the sub-items. submenu.Add(open_localfolder_item); //submenu.Add(browse_remotefolder_item); submenu.Add(suspend_folder_item); submenu.Add(edit_folder_item); submenu.Add(new SeparatorMenuItem()); submenu.Add(remove_folder_from_sync_item); // Add the main item. this.menu.Add(subfolder_item); } this.menu.Add(new SeparatorMenuItem()); } // Add Menu MenuItem add_item = new MenuItem( CmisSync.Properties_Resources.AddARemoteFolder); add_item.Activated += delegate { Controller.AddRemoteFolderClicked(); }; this.menu.Add(add_item); this.menu.Add(new SeparatorMenuItem()); // Log Menu MenuItem log_item = new MenuItem( CmisSync.Properties_Resources.ViewLog); log_item.Activated += delegate { Controller.LogClicked(); }; this.menu.Add(log_item); // About Menu MenuItem about_item = new MenuItem( CmisSync.Properties_Resources.About); about_item.Activated += delegate { Controller.AboutClicked(); }; this.menu.Add(about_item); this.quit_item = new MenuItem( CmisSync.Properties_Resources.Exit) { Sensitive = true }; 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 this.IsHandleCreated = true; }
public StatusIcon() { CreateAnimationFrames(); #if HAVE_APP_INDICATOR this.indicator = new ApplicationIndicator("dataspacesync", "dataspacesync-process-syncing-i", Category.ApplicationStatus); this.indicator.Status = Status.Active; #else this.status_icon = new Gtk.StatusIcon(); this.status_icon.Pixbuf = this.animation_frames [0]; this.status_icon.Activate += OpenFolderDelegate(null); // Primary mouse button click shows default folder this.status_icon.PopupMenu += ShowMenu; // Secondary mouse button click #endif CreateMenu(); Controller.UpdateIconEvent += delegate(int icon_frame) { Application.Invoke(delegate { if (icon_frame > -1) { #if HAVE_APP_INDICATOR string icon_name = "dataspacesync-process-syncing-"; for (int i = 0; i <= icon_frame; i++) { icon_name += "i"; } this.indicator.IconName = icon_name; // Force update of the icon this.indicator.Status = Status.Attention; this.indicator.Status = Status.Active; #else this.status_icon.Pixbuf = this.animation_frames [icon_frame]; #endif } else { #if HAVE_APP_INDICATOR this.indicator.IconName = "dataspacesync-process-syncing-error"; // Force update of the icon this.indicator.Status = Status.Attention; this.indicator.Status = Status.Active; #else this.status_icon.Pixbuf = UIHelpers.GetIcon("dataspacesync-process-syncing-error", 24); #endif } }); }; Controller.UpdateStatusItemEvent += delegate(string state_text) { if (!IsHandleCreated) { return; } Application.Invoke(delegate { (this.state_item.Child as Label).Text = state_text; this.state_item.ShowAll(); }); }; Controller.UpdateMenuEvent += delegate(IconState state) { Application.Invoke(delegate { CreateMenu(); }); }; Controller.UpdateSuspendSyncFolderEvent += delegate(string reponame) { if (!IsHandleCreated) { return; } Application.Invoke(delegate { foreach (var menuItem in this.menu.Children) { if (menuItem is CmisSyncMenuItem && reponame.Equals(((CmisSyncMenuItem)menuItem).RepoName)) { foreach (Repository aRepo in Program.Controller.Repositories) { if (aRepo.Name.Equals(reponame)) { Menu submenu = (Menu)((CmisSyncMenuItem)menuItem).Submenu; CmisSyncMenuItem pauseItem = (CmisSyncMenuItem)submenu.Children[1]; setSyncItemState(pauseItem, aRepo.Status); break; } } break; } } }); }; Controller.UpdateTransmissionMenuEvent += delegate { if (!IsHandleCreated) { return; } Application.Invoke(delegate { List <FileTransmissionEvent> transmissionEvents = Program.Controller.ActiveTransmissions(); if (transmissionEvents.Count != 0) { this.state_item.Sensitive = true; Menu submenu = new Menu(); this.state_item.Submenu = submenu; foreach (FileTransmissionEvent e in transmissionEvents) { ImageMenuItem transmission_sub_menu_item = new TransmissionMenuItem(e); submenu.Add(transmission_sub_menu_item); state_item.ShowAll(); } } else { this.state_item.Submenu = null; this.state_item.Sensitive = false; } }); }; }
public void CreateMenu() { this.menu = new Menu(); // State Menu this.state_item = new MenuItem(Controller.StateText) { Sensitive = false }; this.menu.Add(this.state_item); this.menu.Add(new SeparatorMenuItem()); // Folders Menu if (Controller.Folders.Length > 0) { foreach (string folder_name in Controller.Folders) { Menu submenu = new Menu(); ImageMenuItem subfolder_item = new CmisSyncMenuItem(folder_name) { Image = new Image(UIHelpers.GetIcon("folder-cmissync", 16)), Submenu = submenu }; ImageMenuItem open_localfolder_item = new CmisSyncMenuItem( CmisSync.Properties_Resources.ResourceManager.GetString("OpenLocalFolder", CultureInfo.CurrentCulture)) { Image = new Image(UIHelpers.GetIcon("folder-cmissync", 16)) }; open_localfolder_item.Activated += OpenFolderDelegate(folder_name); ImageMenuItem browse_remotefolder_item = new CmisSyncMenuItem( CmisSync.Properties_Resources.ResourceManager.GetString("BrowseRemoteFolder", CultureInfo.CurrentCulture)) { Image = new Image(UIHelpers.GetIcon("folder-cmissync", 16)) }; browse_remotefolder_item.Activated += OpenRemoteFolderDelegate(folder_name); ImageMenuItem suspend_folder_item = new CmisSyncMenuItem( CmisSync.Properties_Resources.ResourceManager.GetString("PauseSync", CultureInfo.CurrentCulture)) { Image = new Image(UIHelpers.GetIcon("media_playback_pause", 16)) }; suspend_folder_item.Activated += SuspendSyncFolderDelegate(folder_name); submenu.Add(open_localfolder_item); submenu.Add(browse_remotefolder_item); submenu.Add(suspend_folder_item); this.menu.Add(subfolder_item); } this.menu.Add(new SeparatorMenuItem()); } // Add Menu MenuItem add_item = new MenuItem( CmisSync.Properties_Resources.ResourceManager.GetString("AddARemoteFolder", CultureInfo.CurrentCulture)); add_item.Activated += delegate { Controller.AddRemoteFolderClicked(); }; this.menu.Add(add_item); this.menu.Add(new SeparatorMenuItem()); // Log Menu MenuItem log_item = new MenuItem( CmisSync.Properties_Resources.ResourceManager.GetString("ViewLog", CultureInfo.CurrentCulture)); log_item.Activated += delegate { Controller.LogClicked(); }; this.menu.Add(log_item); // About Menu MenuItem about_item = new MenuItem( CmisSync.Properties_Resources.ResourceManager.GetString("About", CultureInfo.CurrentCulture)); about_item.Activated += delegate { Controller.AboutClicked(); }; this.menu.Add(about_item); this.quit_item = new MenuItem( CmisSync.Properties_Resources.ResourceManager.GetString("Exit", CultureInfo.CurrentCulture)) { Sensitive = true }; 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 }
private void CreateInvokeMethod() { Controller.UpdateIconEvent += delegate(int icon_frame) { if (IsHandleCreated) { BeginInvoke((Action) delegate { if (icon_frame > -1) { this.trayicon.Icon = animation_frames[icon_frame]; } else { this.trayicon.Icon = SystemIcons.Error; } }); } }; Controller.UpdateStatusItemEvent += delegate(string state_text) { if (IsHandleCreated) { BeginInvoke((Action) delegate { this.state_item.Text = state_text; this.trayicon.Text = "CmisSync\n" + state_text; }); } }; Controller.UpdateMenuEvent += delegate(IconState state) { if (IsHandleCreated) { BeginInvoke((Action) delegate { CreateMenu(); }); } }; Controller.UpdateQuitItemEvent += delegate(bool item_enabled) { if (IsHandleCreated) { BeginInvoke((Action) delegate { this.exit_item.Enabled = item_enabled; // this.exit_item.UpdateLayout(); }); } }; Controller.UpdateSuspendSyncFolderEvent += delegate(string reponame) { //TODO - Yannick if (IsHandleCreated) { BeginInvoke((Action) delegate { ToolStripMenuItem repoitem = (ToolStripMenuItem)this.traymenu.Items["tsmi" + reponame]; ToolStripMenuItem syncitem = (ToolStripMenuItem)repoitem.DropDownItems[3]; if (syncitem.Tag == "pause") { syncitem.Text = CmisSync.Properties.Resources.ResourceManager.GetString("ResumeSync", CultureInfo.CurrentCulture); syncitem.Tag = "resume"; syncitem.Image = UIHelpers.GetBitmap("media_playback_start"); } else { syncitem.Text = CmisSync.Properties.Resources.ResourceManager.GetString("PauseSync", CultureInfo.CurrentCulture); syncitem.Tag = "pause"; syncitem.Image = UIHelpers.GetBitmap("media_playback_pause"); } }); } }; }
public StatusIcon() { this.CreateAnimationFrames(); #if HAVE_APP_INDICATOR this.indicator = new ApplicationIndicator("dataspacesync", "dataspacesync-process-syncing-i", Category.ApplicationStatus); this.indicator.Status = Status.Active; #else this.statusIcon = new Gtk.StatusIcon(); this.statusIcon.Pixbuf = this.animationFrames[0]; this.statusIcon.Activate += delegate(object sender, EventArgs args) { this.Controller.LocalFolderClicked(null); // Primary mouse button click shows default folder }; this.statusIcon.PopupMenu += this.ShowMenu; // Secondary mouse button click #endif this.CreateMenu(); this.Controller.UpdateIconEvent += delegate(int icon_frame) { Application.Invoke(delegate { if (icon_frame > -1) { #if HAVE_APP_INDICATOR string icon_name = "dataspacesync-process-syncing-"; for (int i = 0; i <= icon_frame; i++) { icon_name += "i"; } this.indicator.IconName = icon_name; // Force update of the icon this.indicator.Status = Status.Attention; this.indicator.Status = Status.Active; #else this.statusIcon.Pixbuf = this.animationFrames[icon_frame]; #endif } else { #if HAVE_APP_INDICATOR this.indicator.IconName = "dataspacesync-process-syncing-error"; // Force update of the icon this.indicator.Status = Status.Attention; this.indicator.Status = Status.Active; #else this.statusIcon.Pixbuf = UIHelpers.GetIcon("dataspacesync-process-syncing-error", 24); #endif } }); }; this.Controller.UpdateMenuEvent += delegate(IconState state) { Application.Invoke(delegate { this.CreateMenu(); }); }; this.Controller.UpdateSuspendSyncFolderEvent += delegate(string reponame) { if (!this.isHandleCreated) { return; } Application.Invoke(delegate { foreach (var repoItem in this.repoItems) { if (repoItem.RepositoryName == reponame) { foreach (var repo in Program.Controller.Repositories) { if (repo.Name.Equals(reponame)) { repoItem.Status = repo.Status; break; } } break; } } }); }; }