Пример #1
0
        public void CreateSingletonWindow(IObservable <bool> isVisible, Func <IDialog <object>, Window> window)
        {
            Fusion.Application.MainThread.Schedule(() =>
            {
                var childWindow = new MacDialog <object>();

                var handle = WindowImplementation.Create(window(childWindow), Optional.None());
                handle.ReleasedWhenClosed = false;

                var close            = new Subject <bool>();
                childWindow._parent  = handle;
                childWindow._onClose = () => close.OnNext(false);

                isVisible.Merge(close).Subscribe(vis =>
                                                 Fusion.Application.MainThread.Schedule(() =>
                {
                    if (vis)
                    {
                        handle.MakeKeyAndOrderFront(handle);
                    }
                    else
                    {
                        handle.OrderOut(handle);
                    }
                }));
            });
        }
Пример #2
0
 // Called from cocoa during init (iff opened with create window)
 public override void MakeWindowControllers()
 {
     Console.WriteLine("Getting window");
     MacDialog <Unit> .ShowDocumentWindow(this, window =>
     {
         Window      = window;
         var content = Fusion.Application.CreateDocumentWindow(this);
         Console.WriteLine("Got window");
         DocumentOpened.OnNext(content);
         Console.WriteLine("Will show!");
         return(content);
     });
 }
Пример #3
0
        public static void ShowDocumentWindow(ObservableNSDocument document, Func <IDialog <object>, Window> window)
        {
            Fusion.Application.MainThread.Schedule(() =>
            {
                var childWindow = new MacDialog <object>();

                var handle = WindowImplementation.Create(window(childWindow), Optional.Some(document));

                childWindow._parent  = handle;
                childWindow._onClose = () =>
                                       Fusion.Application.MainThread.Schedule(document.Close);

                document.AddWindowController(new DocumentWindowController(handle));
            });
        }
Пример #4
0
        public async Task <TU> ShowDialog <TU>(Func <IDialog <TU>, Window> window)
        {
            return(await await Fusion.Application.MainThread.InvokeAsync(() =>
            {
                var childWindow = new MacDialog <TU>();

                var model = window(childWindow);
                var handle = WindowImplementation.Create(model, Optional.None());

                childWindow._parent = handle;
                childWindow._onClose = () =>
                                       Fusion.Application.MainThread.Schedule(() =>
                {
                    if (model.Style == WindowStyle.Sheet)
                    {
                        NSApplication.SharedApplication.EndSheet(handle);
                        handle.OrderOut(handle);
                    }
                    else
                    {
                        handle.Close();
                    }
                });

                if (model.Style == WindowStyle.Sheet)
                {
                    NSApplication.SharedApplication.BeginSheet(handle, _parent.Value);
                }
                else
                {
                    handle.MakeKeyAndOrderFront(handle);
                }

                return childWindow._result.FirstAsync();
            }));
        }
Пример #5
0
        public void Initialize(IList <string> args, bool isDocumentApp)
        {
            Console.CancelKeyPress += (sender, e) => Exit(0);

            NSApplication.Init();

            _dispatcher = _dispatcher ?? new Dispatcher(Thread.CurrentThread);
            Fusion.Application.MainThread = _dispatcher;

            Fusion.Application.PerFrame = Observable.Interval(
                TimeSpan.FromSeconds(1.0 / 60.0),
                new SynchronizationContextScheduler(SynchronizationContext.Current));

            var app = new AppDelegate(isDocumentApp);

            NSApplication.SharedApplication.Delegate = app;

            //TODO do we really need to retain this object?
                        #pragma warning disable 0219
            var documentController = new NSDocumentController();
                        #pragma warning restore 0219

            NSApplication.CheckForIllegalCrossThreadCalls = false;
            AppDelegate.ThrowOnTerminate = false;

            Desktop = new MacDialog <object>();

            EffectsImplementation.Initialize(_dispatcher);

            // Make so that the window popups with focus.
            NSApplication.SharedApplication.ActivateIgnoringOtherApps(true);

            MacEnvironment.Initialize(new MacEnvironmentImpl());
            DraggingImplementation.Initialize(_dispatcher);
            MenuBuilder.Initialize(_dispatcher);
            LayeringImplementation.Initialize(_dispatcher);
            LabelImplementation.Initialize(_dispatcher);
            SliderImplementation.Initialize(_dispatcher);
            LineImplementation.Initialize(_dispatcher);
            CircleImplementation.Initialize(_dispatcher);
            RectangleImplementation.Initialize(_dispatcher);
            TextBoxImplementation.Initialize(_dispatcher);
            CursorsImplementation.Initialize(_dispatcher);
            ToolTipImplementation.Initialize(_dispatcher);
            ContextMenuImplementation.Initialize(_dispatcher);
            DropDownImplementation.Initialize(_dispatcher);
            ButtonImplementation.Initialize(_dispatcher);
            ColorPickerImplementation.Initialize(_dispatcher);
            ScrollingImplementation.Initialize(_dispatcher);
            LogViewImplementation.Initialize(_dispatcher);
            Transformation.Initialize();
            ImageImplementation.Initialize(_dispatcher);
            OverlayImplementation.Initialize(_dispatcher);
            PointerImplementation.Initialize(_dispatcher);
            KeyboardImplementation.Initialize(_dispatcher);
            WebViewImplementation.Initialize(_dispatcher);
            LayoutTrackerImplementation.Initialize();
            FileDialogs.Initialize();

            // TODO: Fix this!!!
            Clipping.Initialize((control, clip) => control);

            // This notification occurs a _lot_, but is the most specific one I was able to find that would
            //  allow us to be notified when the first responder changes consistently
            NSNotificationCenter.DefaultCenter.AddObserver(new NSString("NSApplicationDidUpdateNotification"), _ => {
                var keyWindow = NSApplication.SharedApplication.KeyWindow;
                _firstResponder.OnNext(keyWindow != null ? keyWindow.FirstResponder : null);
            });

            app.Terminates.Subscribe(_ =>
            {
                if (Terminating != null)
                {
                    Terminating();
                }
            });

            EditMenu =

                /*CreateFirstResponderMenuItem(name: "Undo", hotkey: HotKey.Create(Fusion.ModifierKeys.Meta, Key.Z), selectorName: "undo:")
                 + CreateFirstResponderMenuItem(name: "Redo", hotkey: HotKey.Create(Fusion.ModifierKeys.Meta | Fusion.ModifierKeys.Shift, Key.Z), selectorName: "redo:")
                 + MenuItem.CreateSeparator()
                 + */CreateFirstResponderMenuItem(name: "Cut", hotkey: HotKey.Create(Fusion.ModifierKeys.Meta, Key.X), selectorName: "cut:")
                + CreateFirstResponderMenuItem(name: "Copy", hotkey: HotKey.Create(Fusion.ModifierKeys.Meta, Key.C), selectorName: "copy:")
                + CreateFirstResponderMenuItem(name: "Paste", hotkey: HotKey.Create(Fusion.ModifierKeys.Meta, Key.V), selectorName: "paste:")
                + CreateFirstResponderMenuItem(name: "Paste and Match Style", hotkey: HotKey.Create(Fusion.ModifierKeys.Meta | Fusion.ModifierKeys.Shift, Key.V), selectorName: "pasteAsPlainText:")
                + CreateFirstResponderMenuItem(name: "Delete", hotkey: HotKey.Create(Fusion.ModifierKeys.Meta, Key.Backspace), selectorName: "delete:")
                + CreateFirstResponderMenuItem(name: "Select All", hotkey: HotKey.Create(Fusion.ModifierKeys.Meta, Key.A), selectorName: "selectAll:");
        }