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); }
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); }
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(); })); }
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(); } })); }); }