コード例 #1
0
        public Task <ObservableDocument> OpenDocumentWindow(AbsoluteFilePath projectPath)
        {
            var tcs              = new TaskCompletionSource <ObservableDocument>();
            var observableDoc    = new ObservableDocument(projectPath);
            var existingDocument = _projects.FirstOrNone(project => project.ProjectPath == projectPath);

            if (existingDocument.HasValue)
            {
                existingDocument.Value.Window.Focus();
                tcs.SetResult(observableDoc);
            }
            else
            {
                var dummyWindow = new WindowsDialog <object>();
                dummyWindow.ShowDialog <object>(self =>
                {
                    observableDoc.Window = self;
                    var window           = Fusion.Application.CreateDocumentWindow(observableDoc);
                    var document         = new Document(projectPath, self);
                    window.Closed        = window.Closed.Then(Command.Enabled(() =>
                                                                              _projects.Remove(document)));
                    _projects.Add(document);
                    DocumentOpened.OnNext(window);
                    window.Content.IsRooted.Take(1).Subscribe(_ =>
                                                              tcs.SetResult(observableDoc));
                    return(window);
                }).ContinueWith(e => { });
            }
            return(tcs.Task);
        }
コード例 #2
0
        public void Initialize(IList <string> args)
        {
            _dispatcher = _dispatcher ?? new Dispatcher(Thread.CurrentThread);
            Fusion.Application.PerFrame   = _dispatcher.PerFrame;
            Fusion.Application.MainThread = _dispatcher;

            Desktop = new WindowsDialog <object>();

            DraggingImplementation.Initialize(_dispatcher);
            LabelImplementation.Initialize(_dispatcher, Observable.Return(new Ratio <Pixels, Points>(1.0)));
            //ListBoxImplementation.Initialize(dispatcher);
            TextBoxImplementation.Initialize(_dispatcher);
            ClippingImplementation.Initialize(_dispatcher);
            ScrollingImplementation.Initialize(_dispatcher);
            EffectsImplementation.Initialize(_dispatcher);
            ContextMenuImplementation.Initialize(_dispatcher);
            CursorsImplementation.Initialize(_dispatcher);
            ToolTipImplementation.Initialize(_dispatcher);
            ButtonImplementation.Initialize(_dispatcher);
            RectangleImplementation.Initialize(_dispatcher);
            CircleImplementation.Initialize(_dispatcher);
            ImageImplementation.Initialize(_dispatcher);
            OverlayImplementation.Initialize(_dispatcher);
            LineImplementation.Initialize(_dispatcher);
            DropDownImplementation.Initialize(_dispatcher);
            SliderImplementation.Initialize(_dispatcher);
            ColorPickerImplementation.Initialize(_dispatcher);
            WebViewImplementation.Initialize(_dispatcher);
            KeyboardImplementation.Initialize(_dispatcher);
            LogViewImplementation.Initialize(_dispatcher);
            PointerImplementation.Initialize(_dispatcher);
            Transformation.Initialize(_dispatcher);
            LayoutTrackerImplementation.Initialize();
            FileDialogs.Initialize();

            _app = new System.Windows.Application();
            _app.ShutdownMode = ShutdownMode.OnLastWindowClose;
            _app.Exit        += (s, a) =>
            {
                if (Terminating != null)
                {
                    Terminating();
                }
            };

            EditMenu =

                /*FromWpfCommand(ApplicationCommands.Undo)
                 + FromWpfCommand(ApplicationCommands.Redo)
                 + MenuItem.CreateSeparator()
                 + */FromWpfCommand(ApplicationCommands.Cut)
                + FromWpfCommand(ApplicationCommands.Copy)
                + FromWpfCommand(ApplicationCommands.Paste)
                + FromWpfCommand(ApplicationCommands.Delete)
                + FromWpfCommand(ApplicationCommands.SelectAll);
        }
コード例 #3
0
        public async Task <TU> ShowDialog <TU>(Func <IDialog <TU>, Window> window)
        {
            return(await await Fusion.Application.MainThread.InvokeAsync(() =>
            {
                var childWindow = new WindowsDialog <TU>();

                var model = window(childWindow);

                if (model.Style == WindowStyle.Sheet)
                {
                    var content = model.Size.HasValue
                                                        ? model.Content.WithSize(model.Size.Value.NotNone().Transpose())
                                                        : model.Content;

                    childWindow._modalDialogs = _modalDialogs;
                    childWindow._parent = _parent;
                    childWindow._onClose = () =>
                                           _modalDialogs.OnNext(_modalDialogs.Value.Remove(content));

                    _modalDialogs.OnNext(_modalDialogs.Value.Add(content));
                }
                else
                {
                    var modalDialogs = new BehaviorSubject <IImmutableList <IControl> >(ImmutableList <IControl> .Empty);

                    var wnd = WindowImplementation.Initialize(OverlayModalDialogs(model, modalDialogs));

                    childWindow._modalDialogs = modalDialogs;
                    childWindow._parent = wnd;
                    childWindow._onClose = () =>
                    {
                        Fusion.Application.MainThread.Schedule(wnd.Close);
                    };

                    wnd.Show();
                }

                return childWindow._result.FirstAsync();
            }));
        }
コード例 #4
0
        public void CreateSingletonWindow(IObservable <bool> isVisible, Func <IDialog <object>, Window> window)
        {
            Fusion.Application.MainThread.Schedule(() =>
            {
                var modalDialogs = new BehaviorSubject <IImmutableList <IControl> >(ImmutableList <IControl> .Empty);

                var childWindow = new WindowsDialog <object>();

                var model = OverlayModalDialogs(window(childWindow), modalDialogs);

                var wnd = WindowImplementation.Initialize(model);

                childWindow._modalDialogs = modalDialogs;
                childWindow._parent       = wnd;
                childWindow._onClose      = () =>
                                            Fusion.Application.MainThread.Schedule(wnd.Hide);

                wnd.Closing += (s, a) =>
                {
                    a.Cancel = true;
                    wnd.Hide();
                };

                isVisible.Subscribe(vis =>
                                    Fusion.Application.MainThread.Schedule(() =>
                {
                    if (vis)
                    {
                        wnd.Show();
                    }
                    if (!vis)
                    {
                        wnd.Hide();
                    }
                }));
            });
        }