/// <summary>
        /// This method is called when the user picks a different message 
        /// to display by clicking a different radio button
        /// </summary>
partial         void SwitchMessage(NSMatrix sender)
        {
            // sender is the NSMatrix containing the radio buttons.
            // We ask the sender for which row (radio button) is selected and add one
            // to compensate for counting from zero.
            int which = sender.SelectedRow + 1;

            // We now set our NSButton's action to be the message corresponding to the radio button selection.
            // +[NSString stringWithFormat:...] is used to concatenate "message" and the message number.
            // NSSelectorFromString converts the message name string to an actual message structure that
            // Objective-C can use.
            this.helloButton.Action = ObjectiveCRuntime.Selector(String.Format("message{0}:", which));
        }
Example #2
0
        /// <summary>
        /// The user select date picker border style
        /// </summary>
        /// <param name="sender">
        /// A <see cref="NSButton"/>
        /// </param>
        partial void setBorderStyle(NSMatrix sender)
        {
            switch ((DatePickerBorderStyle)sender.SelectedCell.Tag)
            {
            case DatePickerBorderStyle.Bezeled:
                datePickerControl.Bezeled = true;
                break;

            case DatePickerBorderStyle.Bordered:
                datePickerControl.Bordered = true;
                break;
            }

            updateControls();
        }
Example #3
0
        /// <summary>
        /// User wants to change the "Date Picker Mode"
        /// </summary>
        /// <param name="sender">
        /// A <see cref="NSMatrix"/>
        /// </param>
        partial void setDatePickerMode(NSMatrix sender)
        {
            switch ((DatePickerModeSelections)sender.SelectedCell.Tag)
            {
            case DatePickerModeSelections.SingleDateMode:
                datePickerControl.DatePickerMode = NSDatePickerMode.Single;
                break;

            case DatePickerModeSelections.RangeDateMode:
                datePickerControl.DatePickerMode = NSDatePickerMode.Range;
                break;
            }

            updateControls();
            // force update of all UI elements and the picker itself
        }
Example #4
0
        /// <summary>
        /// The user checked/unchecked one of the "Time Element" checkboxes
        /// </summary>
        /// <param name="sender">
        /// A <see cref="NSMatrix"/>
        /// </param>
        partial void setTimeElementFlags(NSMatrix sender)
        {
            NSDatePickerElementFlags flags = datePickerControl.DatePickerElements;

            bool checkedState = sender.SelectedCell.State == NSCellStateValue.On;

            switch ((TimeElementSelections)sender.SelectedCell.Tag)
            {
            case TimeElementSelections.HourMinute:
                if (checkedState)
                {
                    flags |= NSDatePickerElementFlags.HourMinute;
                }
                else
                {
                    flags ^= NSDatePickerElementFlags.HourMinute;
                }
                break;

            case TimeElementSelections.HourMinuteSecond:
                if (checkedState)
                {
                    flags |= NSDatePickerElementFlags.HourMinuteSecond;
                }
                else
                {
                    flags ^= NSDatePickerElementFlags.HourMinuteSecond;
                }
                break;

            case TimeElementSelections.TimeZone:
                if (checkedState)
                {
                    flags |= NSDatePickerElementFlags.TimeZone;
                }
                else
                {
                    flags ^= NSDatePickerElementFlags.TimeZone;
                }
                break;
            }

            datePickerControl.DatePickerElements = flags;

            updateControls();
        }
Example #5
0
        /// <summary>
        /// The user checked/unchecked one of the "Date Element" checkboxes.
        /// </summary>
        /// <param name="sender">
        /// A <see cref="NSMatrix"/>
        /// </param>
        partial void setDateElementFlags(NSMatrix sender)
        {
            NSDatePickerElementFlags flags = datePickerControl.DatePickerElements;

            bool checkedState = sender.SelectedCell.State == NSCellStateValue.On;

            switch ((DateElementSelections)sender.SelectedCell.Tag)
            {
            case DateElementSelections.YearMonth:
                if (checkedState)
                {
                    flags |= NSDatePickerElementFlags.YearMonthDate;
                }
                else
                {
                    flags ^= NSDatePickerElementFlags.YearMonthDate;
                }
                break;

            case DateElementSelections.YearMonthDay:
                if (checkedState)
                {
                    flags |= NSDatePickerElementFlags.YearMonthDateDay;
                }
                else
                {
                    flags ^= NSDatePickerElementFlags.YearMonthDateDay;
                }
                break;

            case DateElementSelections.Era:
                if (checkedState)
                {
                    flags |= NSDatePickerElementFlags.Era;
                }
                else
                {
                    flags ^= NSDatePickerElementFlags.Era;
                }
                break;
            }

            datePickerControl.DatePickerElements = flags;

            updateControls();
        }
		// Action for change layout Matrix
		partial void changeLayout (NSMatrix sender)
		{
			LayoutStyle = (Layout)(int)sender.SelectedTag;
			layout ();
			
		} 
                /// <summary>
                /// User wants to change the "Date Picker Mode"
                /// </summary>
                /// <param name="sender">
                /// A <see cref="NSMatrix"/>
                /// </param>
                partial void setDatePickerMode (NSMatrix sender)
                {
			          switch ((DatePickerModeSelections)(int)sender.SelectedCell.Tag) {
                        case DatePickerModeSelections.SingleDateMode:
                                datePickerControl.DatePickerMode = NSDatePickerMode.Single;
                                break;
                        case DatePickerModeSelections.RangeDateMode:
                                datePickerControl.DatePickerMode = NSDatePickerMode.Range;
                                break;
                        }
                        
                        updateControls ();
                        // force update of all UI elements and the picker itself
                }
                /// <summary>
                /// The user checked/unchecked one of the "Time Element" checkboxes
                /// </summary>
                /// <param name="sender">
                /// A <see cref="NSMatrix"/>
                /// </param>
                partial void setTimeElementFlags (NSMatrix sender)
                {
                        NSDatePickerElementFlags flags = datePickerControl.DatePickerElements;
                        
                        bool checkedState = sender.SelectedCell.State == NSCellStateValue.On;
                        
			switch ((TimeElementSelections)(int)sender.SelectedCell.Tag) {
                        
                        case TimeElementSelections.HourMinute:
                                if (checkedState)
                                        flags |= NSDatePickerElementFlags.HourMinute;
                                else
                                        flags ^= NSDatePickerElementFlags.HourMinute;
                                break;
                        case TimeElementSelections.HourMinuteSecond:
                                if (checkedState)
                                        flags |= NSDatePickerElementFlags.HourMinuteSecond;
                                else
                                        flags ^= NSDatePickerElementFlags.HourMinuteSecond;
                                break;
                        case TimeElementSelections.TimeZone:
                                if (checkedState)
                                        flags |= NSDatePickerElementFlags.TimeZone;
                                else
                                        flags ^= NSDatePickerElementFlags.TimeZone;
                                break;
                        }
                        
                        datePickerControl.DatePickerElements = flags;
                        
                        updateControls ();
                }
Example #9
0
        public override void DidFinishLaunching(NSNotification notification)
        {
            // Handle CMD-Q
            NSMenu mainMenu = NSApplication.SharedApplication.MainMenu = new NSMenu("Exception marshaling");

            mainMenu.AddItem("Sub", new ObjCRuntime.Selector("sub"), "S");
            var subMenu = new NSMenu("Sub");
            var quit    = new NSMenuItem("Quit", (sender, e) => {
                NSApplication.SharedApplication.Terminate(this);
            });

            quit.Enabled                   = true;
            quit.KeyEquivalent             = "q";
            quit.KeyEquivalentModifierMask = NSEventModifierMask.CommandKeyMask;
            subMenu.AddItem(quit);
            mainMenu.AutoEnablesItems = false;
            mainMenu.SetSubmenu(subMenu, mainMenu.ItemAt(0));

            // Create main window and its UI
            window       = new NSWindow(new CGRect(0, 0, 500, 500), NSWindowStyle.Titled | NSWindowStyle.Resizable | NSWindowStyle.Closable | NSWindowStyle.Miniaturizable, NSBackingStore.Buffered, true);
            window.Title = "Exception marshaling";

            var protoCell = new NSButtonCell();

            protoCell.SetButtonType(NSButtonType.Radio);

            var cellSize      = new CGSize(300, 25);
            var boxSize       = new CGSize(300, 400);
            var managedBox    = new NSBox(new CGRect(new CGPoint(0, 0), boxSize));
            var objectiveCBox = new NSBox(new CGRect(new CGPoint(managedBox.Frame.Right, managedBox.Frame.Y), boxSize));

            var throwManagedException = new NSButton(new CGRect((boxSize.Width - 200) / 2, 0, 200, cellSize.Height));

            throwManagedException.Title = "Throw managed exception";

            var marshalManagedModeMatrix = new NSMatrix(new CGRect(0, 0, managedBox.Frame.Width, cellSize.Height * 6 + 10), NSMatrixMode.Radio, protoCell, 6, 1);

            marshalManagedModeMatrix.Cells [0].Title = "None";
            marshalManagedModeMatrix.Cells [1].Title = "Default";
            marshalManagedModeMatrix.Cells [2].Title = "Unwind native code";
            marshalManagedModeMatrix.Cells [3].Title = "Throw Objective-C exception";
            marshalManagedModeMatrix.Cells [4].Title = "Abort";
            marshalManagedModeMatrix.Cells [5].Title = "Disable";
            marshalManagedModeMatrix.CellSize        = cellSize;

            var marshalManagedMode = new NSBox(new CGRect(0, throwManagedException.Frame.Bottom + 20, marshalManagedModeMatrix.Frame.Width, marshalManagedModeMatrix.Frame.Height + cellSize.Height));

            marshalManagedMode.Title = "Marshaling mode";
            marshalManagedMode.AddSubview(marshalManagedModeMatrix);

            var threadManagedMatrix = new NSMatrix(new CGRect(0, 0, managedBox.Frame.Width, cellSize.Height * 3 + 10), NSMatrixMode.Radio, protoCell, 3, 1);

            threadManagedMatrix.Cells [0].Title = "Main thread";
            threadManagedMatrix.Cells [1].Title = "Background thread";
            threadManagedMatrix.Cells [2].Title = "Threadpool thread";
            threadManagedMatrix.CellSize        = cellSize;

            var threadManaged = new NSBox(new CGRect(new CGPoint(0, marshalManagedMode.Frame.Bottom + 20), new CGSize(threadManagedMatrix.Frame.Width, threadManagedMatrix.Frame.Height + cellSize.Height)));

            threadManaged.Title = "Thread";
            threadManaged.AddSubview(threadManagedMatrix);

            var marshalObjectiveCModeMatrix = new NSMatrix(marshalManagedModeMatrix.Frame, NSMatrixMode.Radio, protoCell, 6, 1);

            marshalObjectiveCModeMatrix.Cells [0].Title = "None";
            marshalObjectiveCModeMatrix.Cells [1].Title = "Default";
            marshalObjectiveCModeMatrix.Cells [2].Title = "Unwind managed code";
            marshalObjectiveCModeMatrix.Cells [3].Title = "Throw managed exception";
            marshalObjectiveCModeMatrix.Cells [4].Title = "Abort";
            marshalObjectiveCModeMatrix.Cells [5].Title = "Disable";
            marshalObjectiveCModeMatrix.CellSize        = cellSize;

            var marshalObjectiveCMode = new NSBox(marshalManagedMode.Frame);

            marshalObjectiveCMode.Title = "Marshaling mode";
            marshalObjectiveCMode.AddSubview(marshalObjectiveCModeMatrix);

            var threadObjectiveCMatrix = new NSMatrix(threadManagedMatrix.Frame, threadManagedMatrix.Mode, threadManagedMatrix.Prototype, threadManagedMatrix.Rows, threadManagedMatrix.Columns);

            threadObjectiveCMatrix.Cells [0].Title = "Main thread";
            threadObjectiveCMatrix.Cells [1].Title = "Background thread";
            threadObjectiveCMatrix.Cells [2].Title = "Threadpool thread";
            threadObjectiveCMatrix.CellSize        = cellSize;

            var threadObjectiveC = new NSBox(threadManaged.Frame);

            threadObjectiveC.Title = "Thread";
            threadObjectiveC.AddSubview(threadObjectiveCMatrix);

            var throwObjectiveCException = new NSButton(throwManagedException.Frame);

            throwObjectiveCException.Title = "Throw Objective-C exception";

            managedBox.Title = "Managed exception";
            managedBox.AddSubview(throwManagedException);
            managedBox.AddSubview(threadManaged);
            managedBox.AddSubview(marshalManagedMode);
            managedBox.Frame = new CGRect(managedBox.Frame.X, managedBox.Frame.Y, managedBox.Frame.Width, threadManaged.Frame.Bottom + cellSize.Height);
            //managedBox.SetBoundsSize (new CGSize (managedBox.Bounds.Width, threadManaged.Frame.Bottom));
            window.ContentView.AddSubview(managedBox);

            objectiveCBox.Title = "Objective-C exception";
            objectiveCBox.AddSubview(throwObjectiveCException);
            objectiveCBox.AddSubview(threadObjectiveC);
            objectiveCBox.AddSubview(marshalObjectiveCMode);
            objectiveCBox.Frame = new CGRect(objectiveCBox.Frame.Location, managedBox.Frame.Size);
            window.ContentView.AddSubview(objectiveCBox);

            var windowContentSize = new CGSize(managedBox.Frame.Width + objectiveCBox.Frame.Width, Math.Max(managedBox.Frame.Height, objectiveCBox.Frame.Height));

            window.SetContentSize(windowContentSize);
            window.ContentMinSize = windowContentSize;
            window.Center();
            window.MakeKeyAndOrderFront(window);

            Action setModes = () => {
                if (marshalManagedModeMatrix.SelectedRow == 0)
                {
                    Exceptions.ManagedExceptionMode = null;
                }
                else
                {
                    Exceptions.ManagedExceptionMode = (MarshalManagedExceptionMode)(int)marshalManagedModeMatrix.SelectedRow - 1;
                }
                if (marshalObjectiveCModeMatrix.SelectedRow == 0)
                {
                    Exceptions.ObjectiveCExceptionMode = null;
                }
                else
                {
                    Exceptions.ObjectiveCExceptionMode = (MarshalObjectiveCExceptionMode)(int)marshalObjectiveCModeMatrix.SelectedRow - 1;
                }
            };

            throwObjectiveCException.Activated += (sender, e) => {
                setModes();
                Exceptions.ThrowObjectiveCException((ThreadMode)(int)threadObjectiveCMatrix.SelectedRow);
            };
            throwManagedException.Activated += (sender, e) => {
                setModes();
                Exceptions.ThrowManagedException((ThreadMode)(int)threadManagedMatrix.SelectedRow);
            };
        }
				/// <summary>
				/// The user select date picker border style
				/// </summary>
				/// <param name="sender">
				/// A <see cref="NSButton"/>
				/// </param>
				partial void setBorderStyle(NSMatrix sender)
				{
			switch ((DatePickerBorderStyle)(int)sender.SelectedCell.Tag) {
						case DatePickerBorderStyle.Bezeled:
									datePickerControl.Bezeled = true;
									break;
						case DatePickerBorderStyle.Bordered:
									datePickerControl.Bordered = true;
									break;
						}

						updateControls ();
				}
 public virtual void __SwitchMessage(NSMatrix sender)
 {
     this.SwitchMessage(sender);
 }
partial         void SwitchMessage(NSMatrix sender);
Example #13
0
 // Action for change layout Matrix
 partial void changeLayout(NSMatrix sender)
 {
     LayoutStyle = (Layout)sender.SelectedTag;
     layout();
 }
Example #14
0
        public void ShowServerForm()
        {
            Reset();

            Header      = "Where is your remote folder?";
            Description = "";


            ServerTypeLabel = new NSTextField()
            {
                Alignment       = NSTextAlignment.Right,
                BackgroundColor = NSColor.WindowBackground,
                Bordered        = false,
                Editable        = false,
                Frame           = new RectangleF(150, Frame.Height - 139, 160, 17),
                StringValue     = "Server Type:",
                Font            = SparkleUI.Font
            };

            AddressLabel = new NSTextField()
            {
                Alignment       = NSTextAlignment.Right,
                BackgroundColor = NSColor.WindowBackground,
                Bordered        = false,
                Editable        = false,
                Frame           = new RectangleF(150, Frame.Height - 237, 160, 17),
                StringValue     = "Address:",
                Font            = SparkleUI.Font
            };

            FolderNameLabel = new NSTextField()
            {
                Alignment       = NSTextAlignment.Right,
                BackgroundColor = NSColor.WindowBackground,
                Bordered        = false,
                Editable        = false,
                Frame           = new RectangleF(150, Frame.Height - 264, 160, 17),
                StringValue     = "Folder Name:",
                Font            = SparkleUI.Font
            };


            AddressTextField = new NSTextField()
            {
                Frame = new RectangleF(320, Frame.Height - 240, 256, 22),
                Font  = SparkleUI.Font
            };

            FolderNameTextField = new NSTextField()
            {
                Frame       = new RectangleF(320, Frame.Height - (240 + 22 + 4), 256, 22),
                StringValue = ""
            };


            FolderNameHelpLabel = new NSTextField()
            {
                BackgroundColor = NSColor.WindowBackground,
                Bordered        = false,
                TextColor       = NSColor.DisabledControlText,
                Editable        = false,
                Frame           = new RectangleF(320, Frame.Height - 285, 200, 17),
                StringValue     = "e.g. ‘rupert/website-design’"
            };


            ServerType = 0;

            ButtonCellProto = new NSButtonCell();
            ButtonCellProto.SetButtonType(NSButtonType.Radio);

            Matrix = new NSMatrix(new RectangleF(315, 180, 256, 78),
                                  NSMatrixMode.Radio, ButtonCellProto, 4, 1);

            Matrix.CellSize = new SizeF(256, 18);

            Matrix.Cells [0].Title = "My own server";
            Matrix.Cells [1].Title = "Github";
            Matrix.Cells [2].Title = "Gitorious";
            Matrix.Cells [3].Title = "The GNOME Project";

            foreach (NSCell cell in Matrix.Cells)
            {
                cell.Font = SparkleUI.Font;
            }

            // TODO: Ugly hack, do properly with events
            Timer timer = new Timer()
            {
                Interval = 50
            };

            timer.Elapsed += delegate {
                InvokeOnMainThread(delegate {
                    if (Matrix.SelectedRow != ServerType)
                    {
                        ServerType = Matrix.SelectedRow;

                        AddressTextField.Enabled = (ServerType == 0);

                        switch (ServerType)
                        {
                        case 0:
                            AddressTextField.StringValue    = "";
                            FolderNameHelpLabel.StringValue = "e.g. ‘rupert/website-design’";
                            break;

                        case 1:
                            AddressTextField.StringValue    = "ssh://[email protected]/";
                            FolderNameHelpLabel.StringValue = "e.g. ‘rupert/website-design’";
                            break;

                        case 2:
                            AddressTextField.StringValue    = "ssh://[email protected]/";
                            FolderNameHelpLabel.StringValue = "e.g. ‘project/website-design’";
                            break;

                        case 3:
                            AddressTextField.StringValue    = "ssh://[email protected]/git/";
                            FolderNameHelpLabel.StringValue = "e.g. ‘gnome-icon-theme’";
                            break;
                        }
                    }


                    if (ServerType == 0 && !AddressTextField.StringValue.Trim().Equals("") &&
                        !FolderNameTextField.StringValue.Trim().Equals(""))
                    {
                        SyncButton.Enabled = true;
                    }
                    else if (ServerType != 0 &&
                             !FolderNameTextField.StringValue.Trim().Equals(""))
                    {
                        SyncButton.Enabled = true;
                    }
                    else
                    {
                        SyncButton.Enabled = false;
                    }
                });
            };

            timer.Start();


            ContentView.AddSubview(ServerTypeLabel);
            ContentView.AddSubview(Matrix);

            ContentView.AddSubview(AddressLabel);
            ContentView.AddSubview(AddressTextField);

            ContentView.AddSubview(FolderNameLabel);
            ContentView.AddSubview(FolderNameTextField);
            ContentView.AddSubview(FolderNameHelpLabel);


            SyncButton = new NSButton()
            {
                Title   = "Sync",
                Enabled = false
            };


            SyncButton.Activated += delegate {
                string name = FolderNameTextField.StringValue;

                // Remove the starting slash if there is one
                if (name.StartsWith("/"))
                {
                    name = name.Substring(1);
                }

                string server = AddressTextField.StringValue;

                if (name.EndsWith("/"))
                {
                    name = name.TrimEnd("/".ToCharArray());
                }

                if (name.StartsWith("/"))
                {
                    name = name.TrimStart("/".ToCharArray());
                }

                if (server.StartsWith("ssh://"))
                {
                    server = server.Substring(6);
                }

                if (ServerType == 0)
                {
                    // Use the default user 'git' if no username is specified
                    if (!server.Contains("@"))
                    {
                        server = "git@" + server;
                    }

                    // Prepend the Secure Shell protocol when it isn't specified
                    if (!server.StartsWith("ssh://"))
                    {
                        server = "ssh://" + server;
                    }

                    // Remove the trailing slash if there is one
                    if (server.EndsWith("/"))
                    {
                        server = server.TrimEnd("/".ToCharArray());
                    }
                }

                if (ServerType == 2)
                {
                    server = "ssh://[email protected]";

                    if (!name.EndsWith(".git"))
                    {
                        if (!name.Contains("/"))
                        {
                            name = name + "/" + name;
                        }

                        name += ".git";
                    }
                }

                if (ServerType == 1)
                {
                    server = "ssh://[email protected]";
                }

                if (ServerType == 3)
                {
                    server = "ssh://[email protected]/git/";
                }

                string url            = server + "/" + name;
                string canonical_name = Path.GetFileNameWithoutExtension(name);


                ShowSyncingPage(canonical_name);


                SparkleShare.Controller.FolderFetched += delegate {
                    InvokeOnMainThread(delegate {
                        ShowSuccessPage(canonical_name);
                    });
                };

                SparkleShare.Controller.FolderFetchError += delegate {
                    InvokeOnMainThread(delegate {
                        ShowErrorPage();
                    });
                };


                SparkleShare.Controller.FetchFolder(url, name);
            };


            Buttons.Add(SyncButton);


            if (ServerFormOnly)
            {
                CancelButton = new NSButton()
                {
                    Title = "Cancel"
                };

                CancelButton.Activated += delegate {
                    InvokeOnMainThread(delegate {
                        PerformClose(this);
                    });
                };

                Buttons.Add(CancelButton);
            }
            else
            {
                SkipButton = new NSButton()
                {
                    Title = "Skip"
                };

                SkipButton.Activated += delegate {
                    InvokeOnMainThread(delegate {
                        ShowCompletedPage();
                    });
                };

                Buttons.Add(SkipButton);
            }

            ShowAll();
        }
Example #15
0
        public void ShowPage(PageType type, string [] warnings)
        {
            if (type == PageType.Setup)
            {
                Header      = "Welcome to SparkleShare!";
                Description = "First off, what’s your name and email?\n(visible only to team members)";

                FullNameLabel       = new SparkleLabel("Full Name:", NSTextAlignment.Right);
                FullNameLabel.Frame = new CGRect(165, Frame.Height - 234, 160, 17);

                FullNameTextField = new NSTextField()
                {
                    Frame       = new CGRect(330, Frame.Height - 238, 196, 22),
                    StringValue = new NSProcessInfo().GetFullUserName(),
                    Delegate    = new SparkleTextFieldDelegate()
                };

                EmailLabel       = new SparkleLabel("Email:", NSTextAlignment.Right);
                EmailLabel.Frame = new CGRect(165, Frame.Height - 264, 160, 17);

                EmailTextField = new NSTextField()
                {
                    Frame    = new CGRect(330, Frame.Height - 268, 196, 22),
                    Delegate = new SparkleTextFieldDelegate()
                };

                CancelButton = new NSButton()
                {
                    Title = "Cancel"
                };

                ContinueButton = new NSButton()
                {
                    Title   = "Continue",
                    Enabled = false
                };


                (FullNameTextField.Delegate as SparkleTextFieldDelegate).StringValueChanged += delegate {
                    Controller.CheckSetupPage(FullNameTextField.StringValue, EmailTextField.StringValue);
                };

                (EmailTextField.Delegate as SparkleTextFieldDelegate).StringValueChanged += delegate {
                    Controller.CheckSetupPage(FullNameTextField.StringValue, EmailTextField.StringValue);
                };

                ContinueButton.Activated += delegate {
                    string full_name = FullNameTextField.StringValue.Trim();
                    string email     = EmailTextField.StringValue.Trim();

                    Controller.SetupPageCompleted(full_name, email);
                };

                CancelButton.Activated += delegate { Controller.SetupPageCancelled(); };

                Controller.UpdateSetupContinueButtonEvent += delegate(bool button_enabled) {
                    SparkleShare.Controller.Invoke(() => {
                        ContinueButton.Enabled = button_enabled;
                    });
                };


                ContentView.AddSubview(FullNameLabel);
                ContentView.AddSubview(FullNameTextField);
                ContentView.AddSubview(EmailLabel);
                ContentView.AddSubview(EmailTextField);

                Buttons.Add(ContinueButton);
                Buttons.Add(CancelButton);

                Controller.CheckSetupPage(FullNameTextField.StringValue, EmailTextField.StringValue);

                if (FullNameTextField.StringValue.Equals(""))
                {
                    MakeFirstResponder((NSResponder)FullNameTextField);
                }
                else
                {
                    MakeFirstResponder((NSResponder)EmailTextField);
                }
            }

            if (type == PageType.Invite)
            {
                Header      = "You’ve received an invite!";
                Description = "Do you want to add this project to SparkleShare?";

                AddressLabel       = new SparkleLabel("Address:", NSTextAlignment.Right);
                AddressLabel.Frame = new CGRect(165, Frame.Height - 238, 160, 17);
                AddressLabel.Font  = NSFont.BoldSystemFontOfSize(12);

                AddressTextField = new SparkleLabel(Controller.PendingInvite.Address, NSTextAlignment.Left)
                {
                    Frame = new CGRect(330, Frame.Height - 240, 260, 17)
                };

                PathLabel       = new SparkleLabel("Remote Path:", NSTextAlignment.Right);
                PathLabel.Frame = new CGRect(165, Frame.Height - 262, 160, 17);
                PathLabel.Font  = NSFont.BoldSystemFontOfSize(12);

                PathTextField = new SparkleLabel(Controller.PendingInvite.RemotePath, NSTextAlignment.Left)
                {
                    Frame = new CGRect(330, Frame.Height - 264, 260, 17)
                };

                CancelButton = new NSButton()
                {
                    Title = "Cancel"
                };
                AddButton = new NSButton()
                {
                    Title = "Add"
                };


                CancelButton.Activated += delegate { Controller.PageCancelled(); };
                AddButton.Activated    += delegate { Controller.InvitePageCompleted(); };


                ContentView.AddSubview(AddressLabel);
                ContentView.AddSubview(PathLabel);
                ContentView.AddSubview(AddressTextField);
                ContentView.AddSubview(PathTextField);

                Buttons.Add(AddButton);
                Buttons.Add(CancelButton);
            }

            if (type == PageType.Add)
            {
                Header      = "Where’s your project hosted?";
                Description = "";

                AddressLabel = new SparkleLabel("Address:", NSTextAlignment.Left)
                {
                    Frame = new CGRect(190, Frame.Height - 310, 160, 17),
                    Font  = NSFont.BoldSystemFontOfSize(12)
                };

                AddressTextField = new NSTextField()
                {
                    Frame       = new CGRect(190, Frame.Height - 336, 196, 22),
                    Enabled     = (Controller.SelectedPreset.Address == null),
                    Delegate    = new SparkleTextFieldDelegate(),
                    StringValue = "" + Controller.PreviousAddress
                };

                AddressTextField.Cell.LineBreakMode = NSLineBreakMode.TruncatingTail;

                PathLabel = new SparkleLabel("Remote Path:", NSTextAlignment.Left)
                {
                    Frame = new CGRect(190 + 196 + 16, Frame.Height - 310, 160, 17),
                    Font  = NSFont.BoldSystemFontOfSize(12)
                };

                PathTextField = new NSTextField()
                {
                    Frame       = new CGRect(190 + 196 + 16, Frame.Height - 336, 196, 22),
                    Enabled     = (Controller.SelectedPreset.Path == null),
                    Delegate    = new SparkleTextFieldDelegate(),
                    StringValue = "" + Controller.PreviousPath
                };

                PathTextField.Cell.LineBreakMode = NSLineBreakMode.TruncatingTail;

                PathHelpLabel = new SparkleLabel(Controller.SelectedPreset.PathExample, NSTextAlignment.Left)
                {
                    TextColor = NSColor.DisabledControlText,
                    Frame     = new CGRect(190 + 196 + 16, Frame.Height - 358, 204, 19)
                };

                AddressHelpLabel = new SparkleLabel(Controller.SelectedPreset.AddressExample, NSTextAlignment.Left)
                {
                    TextColor = NSColor.DisabledControlText,
                    Frame     = new CGRect(190, Frame.Height - 358, 204, 19)
                };

                if (TableView == null || TableView.RowCount != Controller.Presets.Count)
                {
                    TableView = new NSTableView()
                    {
                        Frame            = new CGRect(0, 0, 0, 0),
                        RowHeight        = 38,
                        IntercellSpacing = new CGSize(8, 12),
                        HeaderView       = null,
                        Delegate         = new SparkleTableViewDelegate()
                    };

                    ScrollView = new NSScrollView()
                    {
                        Frame               = new CGRect(190, Frame.Height - 280, 408, 185),
                        DocumentView        = TableView,
                        HasVerticalScroller = true,
                        BorderType          = NSBorderType.BezelBorder
                    };

                    IconColumn = new NSTableColumn()
                    {
                        Width         = 36,
                        HeaderToolTip = "Icon",
                        DataCell      = new NSImageCell()
                        {
                            ImageAlignment = NSImageAlignment.Right
                        }
                    };

                    DescriptionColumn = new NSTableColumn()
                    {
                        Width         = 350,
                        HeaderToolTip = "Description",
                        Editable      = false
                    };

                    TableView.AddColumn(IconColumn);
                    TableView.AddColumn(DescriptionColumn);

                    // Hi-res display support was added after Snow Leopard
                    if (Environment.OSVersion.Version.Major < 11)
                    {
                        DataSource = new SparkleDataSource(1, Controller.Presets);
                    }
                    else
                    {
                        DataSource = new SparkleDataSource((float)BackingScaleFactor, Controller.Presets);
                    }

                    TableView.DataSource = DataSource;
                    TableView.ReloadData();

                    (TableView.Delegate as SparkleTableViewDelegate).SelectionChanged += delegate {
                        Controller.SelectedPresetChanged((int)TableView.SelectedRow);
                        Controller.CheckAddPage(AddressTextField.StringValue, PathTextField.StringValue, (int)TableView.SelectedRow);
                    };
                }

                TableView.SelectRow(Controller.SelectedPresetIndex, byExtendingSelection: false);
                TableView.ScrollRowToVisible(Controller.SelectedPresetIndex);
                MakeFirstResponder((NSResponder)TableView);

                HistoryCheckButton = new NSButton()
                {
                    Frame = new CGRect(190, Frame.Height - 400, 300, 18),
                    Title = "Fetch prior revisions"
                };

                if (Controller.FetchPriorHistory)
                {
                    HistoryCheckButton.State = NSCellStateValue.On;
                }

                HistoryCheckButton.SetButtonType(NSButtonType.Switch);

                AddButton = new NSButton()
                {
                    Title   = "Add",
                    Enabled = false
                };

                CancelButton = new NSButton()
                {
                    Title = "Cancel"
                };


                Controller.ChangeAddressFieldEvent += delegate(string text, string example_text, FieldState state) {
                    SparkleShare.Controller.Invoke(() => {
                        AddressTextField.StringValue = text;
                        AddressTextField.Enabled     = (state == FieldState.Enabled);
                        AddressHelpLabel.StringValue = example_text;
                    });
                };

                Controller.ChangePathFieldEvent += delegate(string text, string example_text, FieldState state) {
                    SparkleShare.Controller.Invoke(() => {
                        PathTextField.StringValue = text;
                        PathTextField.Enabled     = (state == FieldState.Enabled);
                        PathHelpLabel.StringValue = example_text;
                    });
                };


                (AddressTextField.Delegate as SparkleTextFieldDelegate).StringValueChanged += delegate {
                    Controller.CheckAddPage(AddressTextField.StringValue, PathTextField.StringValue, (int)TableView.SelectedRow);
                };

                (PathTextField.Delegate as SparkleTextFieldDelegate).StringValueChanged += delegate {
                    Controller.CheckAddPage(AddressTextField.StringValue, PathTextField.StringValue, (int)TableView.SelectedRow);
                };


                HistoryCheckButton.Activated += delegate {
                    Controller.HistoryItemChanged(HistoryCheckButton.State == NSCellStateValue.On);
                };

                AddButton.Activated += delegate {
                    Controller.AddPageCompleted(AddressTextField.StringValue, PathTextField.StringValue);
                };

                CancelButton.Activated += delegate { Controller.PageCancelled(); };

                Controller.UpdateAddProjectButtonEvent += delegate(bool button_enabled) {
                    SparkleShare.Controller.Invoke(() => {
                        AddButton.Enabled = button_enabled;
                    });
                };

                ContentView.AddSubview(ScrollView);
                ContentView.AddSubview(AddressLabel);
                ContentView.AddSubview(AddressTextField);
                ContentView.AddSubview(AddressHelpLabel);
                ContentView.AddSubview(PathLabel);
                ContentView.AddSubview(PathTextField);
                ContentView.AddSubview(PathHelpLabel);
                ContentView.AddSubview(HistoryCheckButton);

                Buttons.Add(AddButton);
                Buttons.Add(CancelButton);

                Controller.CheckAddPage(AddressTextField.StringValue, PathTextField.StringValue, (int)TableView.SelectedRow);
            }

            if (type == PageType.Syncing)
            {
                Header      = "Adding project ‘" + Controller.SyncingFolder + "’…";
                Description = "This may take a while for large projects.\nIsn’t it coffee-o’clock?";

                ProgressIndicator = new NSProgressIndicator()
                {
                    Frame         = new CGRect(190, Frame.Height - 200, 640 - 150 - 80, 20),
                    Style         = NSProgressIndicatorStyle.Bar,
                    MinValue      = 0.0,
                    MaxValue      = 100.0,
                    Indeterminate = false,
                    DoubleValue   = Controller.ProgressBarPercentage
                };

                ProgressIndicator.StartAnimation(this);

                CancelButton = new NSButton()
                {
                    Title = "Cancel"
                };

                FinishButton = new NSButton()
                {
                    Title   = "Finish",
                    Enabled = false
                };

                ProgressLabel       = new SparkleLabel("Preparing to fetch files…", NSTextAlignment.Right);
                ProgressLabel.Frame = new CGRect(Frame.Width - 40 - 250, 185, 250, 25);


                Controller.UpdateProgressBarEvent += delegate(double percentage, string speed) {
                    SparkleShare.Controller.Invoke(() => {
                        ProgressIndicator.DoubleValue = percentage;
                        ProgressLabel.StringValue     = speed;
                    });
                };


                CancelButton.Activated += delegate { Controller.SyncingCancelled(); };


                ContentView.AddSubview(ProgressLabel);
                ContentView.AddSubview(ProgressIndicator);

                Buttons.Add(FinishButton);
                Buttons.Add(CancelButton);
            }

            if (type == PageType.Error)
            {
                Header      = "Oops! Something went wrong…";
                Description = "Please check the following:";

                // Displaying marked up text with Cocoa is
                // a pain, so we just use a webview instead
                WebView web_view = new WebView();
                web_view.Frame = new CGRect(190, Frame.Height - 525, 375, 400);

                string html = "<style>" +
                              "* {" +
                              "  font-family: -apple-system, '" + UserInterface.FontName + "';" +
                              "  font-size: 12px; cursor: default;" +
                              "}" +
                              "body {" +
                              "  -webkit-user-select: none;" +
                              "  margin: 0;" +
                              "  padding: 3px;" +
                              "}" +
                              "li {" +
                              "  margin-bottom: 16px;" +
                              "  margin-left: 0;" +
                              "  padding-left: 0;" +
                              "  line-height: 20px;" +
                              "  word-wrap: break-word;" +
                              "}" +
                              "ul {" +
                              "  padding-left: 24px;" +
                              "}" +
                              "</style>" +
                              "<ul>" +
                              "  <li><b>" + Controller.PreviousUrl + "</b> is the address we’ve compiled. Does this look alright?</li>" +
                              "  <li>Is this computer’s Client ID known by the host?</li>" +
                              "</ul>";

                if (warnings.Length > 0)
                {
                    string warnings_markup = "";

                    foreach (string warning in warnings)
                    {
                        warnings_markup += "<br><b>" + warning + "</b>";
                    }

                    html = html.Replace("</ul>", "<li>Here’s the raw error message: " + warnings_markup + "</li></ul>");
                }

                web_view.MainFrame.LoadHtmlString(html, new NSUrl(""));
                web_view.DrawsBackground = false;

                CancelButton = new NSButton()
                {
                    Title = "Cancel"
                };
                TryAgainButton = new NSButton()
                {
                    Title = "Retry"
                };


                CancelButton.Activated   += delegate { Controller.PageCancelled(); };
                TryAgainButton.Activated += delegate { Controller.ErrorPageCompleted(); };


                ContentView.AddSubview(web_view);

                Buttons.Add(TryAgainButton);
                Buttons.Add(CancelButton);
            }

            if (type == PageType.StorageSetup)
            {
                Header      = string.Format("Storage type for ‘{0}’", Controller.SyncingFolder);
                Description = "What type of storage would you like to use?";


                storage_type_descriptions = new List <NSTextField> ();

                ButtonCellProto = new NSButtonCell();
                ButtonCellProto.SetButtonType(NSButtonType.Radio);
                ButtonCellProto.Font = NSFont.BoldSystemFontOfSize(12);

                Matrix = new NSMatrix(new CGRect(202, Frame.Height - 256 - 128, 256, 256), NSMatrixMode.Radio,
                                      ButtonCellProto, SparkleShare.Controller.FetcherAvailableStorageTypes.Count, 1);

                Matrix.CellSize         = new CGSize(256, 36);
                Matrix.IntercellSpacing = new CGSize(32, 32);

                int i = 0;
                foreach (StorageTypeInfo storage_type in SparkleShare.Controller.FetcherAvailableStorageTypes)
                {
                    Matrix.Cells [i].Title = " " + storage_type.Name;

                    NSTextField storage_type_description = new SparkleLabel(storage_type.Description, NSTextAlignment.Left)
                    {
                        TextColor = NSColor.DisabledControlText,
                        Frame     = new CGRect(223, Frame.Height - 190 - (68 * i), 256, 32)
                    };

                    storage_type_descriptions.Add(storage_type_description);
                    ContentView.AddSubview(storage_type_description);

                    i++;
                }

                ContentView.AddSubview(Matrix);


                CancelButton = new NSButton()
                {
                    Title = "Cancel"
                };
                ContinueButton = new NSButton()
                {
                    Title = "Continue"
                };

                ContinueButton.Activated += delegate {
                    StorageTypeInfo selected_storage_type = SparkleShare.Controller.FetcherAvailableStorageTypes [(int)Matrix.SelectedRow];
                    Controller.StoragePageCompleted(selected_storage_type.Type);
                };

                CancelButton.Activated += delegate { Controller.SyncingCancelled(); };

                Buttons.Add(ContinueButton);
                Buttons.Add(CancelButton);


                NSApplication.SharedApplication.RequestUserAttention(NSRequestUserAttentionType.CriticalRequest);
            }

            if (type == PageType.CryptoSetup || type == PageType.CryptoPassword)
            {
                if (type == PageType.CryptoSetup)
                {
                    Header      = "Set up file encryption";
                    Description = "Please a provide a strong password that you don’t use elsewhere.";
                }
                else
                {
                    Header      = "This project contains encrypted files";
                    Description = "Please enter the password to see their contents.";
                }

                int extra_pos_y = 0;

                if (type == PageType.CryptoPassword)
                {
                    extra_pos_y = 20;
                }

                PasswordLabel = new SparkleLabel("Password:"******"Show password",
                    State = NSCellStateValue.Off
                };

                ShowPasswordCheckButton.SetButtonType(NSButtonType.Switch);

                WarningImage      = NSImage.ImageNamed("NSInfo");
                WarningImage.Size = new CGSize(24, 24);

                WarningImageView = new NSImageView()
                {
                    Image = WarningImage,
                    Frame = new CGRect(200, Frame.Height - 320, 24, 24)
                };

                WarningTextField = new SparkleLabel("This password can’t be changed later, and your files can’t be recovered if it’s forgotten.", NSTextAlignment.Left)
                {
                    Frame = new CGRect(235, Frame.Height - 390, 325, 100),
                };

                CancelButton = new NSButton()
                {
                    Title = "Cancel"
                };

                ContinueButton = new NSButton()
                {
                    Title   = "Continue",
                    Enabled = false
                };


                Controller.UpdateCryptoPasswordContinueButtonEvent += delegate(bool button_enabled) {
                    SparkleShare.Controller.Invoke(() => { ContinueButton.Enabled = button_enabled; });
                };

                Controller.UpdateCryptoSetupContinueButtonEvent += delegate(bool button_enabled) {
                    SparkleShare.Controller.Invoke(() => { ContinueButton.Enabled = button_enabled; });
                };

                ShowPasswordCheckButton.Activated += delegate {
                    if (PasswordTextField.Superview == ContentView)
                    {
                        PasswordTextField.RemoveFromSuperview();
                        ContentView.AddSubview(VisiblePasswordTextField);
                    }
                    else
                    {
                        VisiblePasswordTextField.RemoveFromSuperview();
                        ContentView.AddSubview(PasswordTextField);
                    }
                };

                (PasswordTextField.Delegate as SparkleTextFieldDelegate).StringValueChanged += delegate {
                    VisiblePasswordTextField.StringValue = PasswordTextField.StringValue;

                    if (type == PageType.CryptoSetup)
                    {
                        Controller.CheckCryptoSetupPage(PasswordTextField.StringValue);
                    }
                    else
                    {
                        Controller.CheckCryptoPasswordPage(PasswordTextField.StringValue);
                    }
                };

                (VisiblePasswordTextField.Delegate as SparkleTextFieldDelegate).StringValueChanged += delegate {
                    PasswordTextField.StringValue = VisiblePasswordTextField.StringValue;

                    if (type == PageType.CryptoSetup)
                    {
                        Controller.CheckCryptoSetupPage(PasswordTextField.StringValue);
                    }
                    else
                    {
                        Controller.CheckCryptoPasswordPage(PasswordTextField.StringValue);
                    }
                };

                ContinueButton.Activated += delegate {
                    if (type == PageType.CryptoSetup)
                    {
                        Controller.CryptoSetupPageCompleted(PasswordTextField.StringValue);
                    }
                    else
                    {
                        Controller.CryptoPasswordPageCompleted(PasswordTextField.StringValue);
                    }
                };

                CancelButton.Activated += delegate { Controller.CryptoPageCancelled(); };


                ContentView.AddSubview(PasswordLabel);
                ContentView.AddSubview(PasswordTextField);
                ContentView.AddSubview(ShowPasswordCheckButton);

                if (type == PageType.CryptoSetup)
                {
                    ContentView.AddSubview(WarningImageView);
                    ContentView.AddSubview(WarningTextField);
                }

                Buttons.Add(ContinueButton);
                Buttons.Add(CancelButton);

                MakeFirstResponder((NSResponder)PasswordTextField);
                NSApplication.SharedApplication.RequestUserAttention(NSRequestUserAttentionType.CriticalRequest);
            }


            if (type == PageType.Finished)
            {
                Header      = "Your shared project is ready!";
                Description = "You can find the files in your SparkleShare folder.";

                if (warnings.Length > 0)
                {
                    WarningImage      = NSImage.ImageNamed("NSInfo");
                    WarningImage.Size = new CGSize(24, 24);

                    WarningImageView = new NSImageView()
                    {
                        Image = WarningImage,
                        Frame = new CGRect(200, Frame.Height - 175, 24, 24)
                    };

                    WarningTextField       = new SparkleLabel(warnings [0], NSTextAlignment.Left);
                    WarningTextField.Frame = new CGRect(235, Frame.Height - 245, 325, 100);

                    ContentView.AddSubview(WarningImageView);
                    ContentView.AddSubview(WarningTextField);
                }

                ShowFilesButton = new NSButton()
                {
                    Title = "Show Files"
                };
                FinishButton = new NSButton()
                {
                    Title = "Finish"
                };


                ShowFilesButton.Activated += delegate { Controller.ShowFilesClicked(); };
                FinishButton.Activated    += delegate { Controller.FinishPageCompleted(); };


                Buttons.Add(FinishButton);
                Buttons.Add(ShowFilesButton);

                NSApplication.SharedApplication.RequestUserAttention(NSRequestUserAttentionType.CriticalRequest);
            }
        }
Example #16
0
        private void AddMatrix()
        {
            this.matrix = new NSMatrix(this.Frame, NSMatrixMode.Radio, ACSidebar.CellClass, 0, 1);
            this.matrix.AllowsEmptySelection = kDefaultAllowsEmptySelection;
            this.matrix.CellSize = new CGSize(62, 62);
            this.matrix.Activated += this.onMatrixCallback;

            this.ResizeMatrix(null);
            this.AddSubview(this.matrix);
        }
                /// <summary>
                /// The user checked/unchecked one of the "Date Element" checkboxes.
                /// </summary>
                /// <param name="sender">
                /// A <see cref="NSMatrix"/>
                /// </param>
                partial void setDateElementFlags (NSMatrix sender)
                {
                        NSDatePickerElementFlags flags = datePickerControl.DatePickerElements;
                        
                        bool checkedState = sender.SelectedCell.State == NSCellStateValue.On;
                        
			switch ((DateElementSelections)(int)sender.SelectedCell.Tag) {
                        
                        case DateElementSelections.YearMonth:
                                if (checkedState)
                                        flags |= NSDatePickerElementFlags.YearMonthDate;
                                else
                                        flags ^= NSDatePickerElementFlags.YearMonthDate;
                                break;
                        case DateElementSelections.YearMonthDay:
                                if (checkedState)
                                        flags |= NSDatePickerElementFlags.YearMonthDateDay;
                                else
                                        flags ^= NSDatePickerElementFlags.YearMonthDateDay;
                                break;
                        case DateElementSelections.Era:
                                if (checkedState)
                                        flags |= NSDatePickerElementFlags.Era;
                                else
                                        flags ^= NSDatePickerElementFlags.Era;
                                break;
                        }
                        
                        datePickerControl.DatePickerElements = flags;
                        
                        updateControls ();
                }