Exemplo n.º 1
0
        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;
        }
Exemplo n.º 2
0
        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"));
        }
Exemplo n.º 3
0
        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();
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
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();
                });
            };
        }
Exemplo n.º 6
0
        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;
            }
        }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
0
        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;
        }
Exemplo n.º 9
0
        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);
        }
Exemplo n.º 10
0
        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;
            }
            }
        }
Exemplo n.º 11
0
 private void ApplyTutorialSecond()
 {
     slide_image.Source      = UIHelpers.GetImageSource("tutorial-slide-2");
     continue_button.Content = Properties_Resources.Continue;
     continue_button.Focus();
 }
Exemplo n.º 12
0
        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;
        }
Exemplo n.º 13
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    = 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);
        }
Exemplo n.º 14
0
        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);
        }
Exemplo n.º 15
0
        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();
                });
            };
        }
Exemplo n.º 16
0
        /// <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;
        }
Exemplo n.º 17
0
        /// <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();
            };
        }
Exemplo n.º 18
0
        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;
            }
        }
Exemplo n.º 19
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    = 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);
        }
Exemplo n.º 20
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.º 21
0
        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);
        }
Exemplo n.º 22
0
        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;
                        }
                    }
                });
            };
        }
Exemplo n.º 23
0
        /// <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;
        }
Exemplo n.º 24
0
        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;
        }
Exemplo n.º 25
0
        /// <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;
        }
Exemplo n.º 26
0
        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;
                    }
                });
            };
        }
Exemplo n.º 27
0
        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
        }
Exemplo n.º 28
0
        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");
                        }
                    });
                }
            };
        }
Exemplo n.º 29
0
        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;
                        }
                    }
                });
            };
        }