public WindowViewModel(IObjectProvider objectProvider, IWindowFactory windowFactory) { _objectProvider = objectProvider; InterTabClient = new InterTabClient(windowFactory); OpenFileCommand = new Command(OpenFile); ShowInGitHubCommand = new Command(() => Process.Start("https://github.com/RolandPheasant")); var fileDropped = DropMonitor.Dropped.Subscribe(OpenFile); var isEmptyChecker = Views.ToObservableChangeSet() .Count() .StartWith(0) .Select(count => count == 0) .Subscribe(isEmpty => IsEmpty = isEmpty); _cleanUp = Disposable.Create(() => { isEmptyChecker.Dispose(); fileDropped.Dispose(); DropMonitor.Dispose(); foreach (var disposable in Views.Select(vc => vc.Content).OfType <IDisposable>()) { disposable.Dispose(); } }); }
public WindowViewModel(IObjectProvider objectProvider, IWindowFactory windowFactory, ILogger logger, IWindowsController windowsController, RecentFilesViewModel recentFilesViewModel, GeneralOptionsViewModel generalOptionsViewModel, ISchedulerProvider schedulerProvider) { _logger = logger; _windowsController = windowsController; RecentFiles = recentFilesViewModel; GeneralOptions = generalOptionsViewModel; _schedulerProvider = schedulerProvider; _objectProvider = objectProvider; InterTabClient = new InterTabClient(windowFactory); OpenFileCommand = new Command(OpenFile); ShowInGitHubCommand = new Command(() => Process.Start("https://github.com/RolandPheasant")); ZoomOutCommand = new Command(() => { GeneralOptions.Scale = GeneralOptions.Scale + 5; }); ZoomInCommand = new Command(() => { GeneralOptions.Scale = GeneralOptions.Scale - 5; }); SaveLayoutCommand = new Command(WalkTheLayout); ExitCommmand = new Command(() => Application.Current.Shutdown()); Version = $"v{Assembly.GetEntryAssembly().GetName().Version.ToString(3)}"; var fileDropped = DropMonitor.Dropped.Subscribe(OpenFile); var isEmptyChecker = Views.ToObservableChangeSet() .ToCollection() .Select(items => items.Count) .StartWith(0) .Select(count => count == 0) .Subscribe(isEmpty => IsEmpty = isEmpty); var openRecent = recentFilesViewModel.OpenFileRequest .Subscribe(file => { MenuIsOpen = false; OpenFile(file); }); _cleanUp = new CompositeDisposable(recentFilesViewModel, isEmptyChecker, fileDropped, DropMonitor, openRecent, Disposable.Create(() => { Views.Select(vc => vc.Content) .OfType <IDisposable>() .ForEach(d => d.Dispose()); })); }
public WindowViewModel(IObjectProvider objectProvider, IWindowFactory windowFactory, ILogger logger, IWindowsController windowsController, RecentFilesViewModel recentFilesViewModel, GeneralOptionsViewModel generalOptionsViewModel, ISchedulerProvider schedulerProvider, DialogViewModel dialogviewmodel, FileOpenViewModel fileopenviewmodel) { //This function handles the pinning //If the user decides to pin a tab the function will lock that tab and reorder the effected tabs Pinning = new ActionCommand(o => { var viewsarray = Views.ToList(); var pinnedone = Views.FirstOrDefault(c => c.Header.Equals(o)); var pinnedindex = Views.IndexOf(pinnedone); bool actualpinned = false; ViewContainer oldtab = null; if (o.GetType().IsEquivalentTo(typeof(FilesHeader))) { ((FilesHeader)pinnedone.Header).IsPinned = !((FilesHeader)pinnedone.Header).IsPinned; actualpinned = ((FilesHeader)pinnedone.Header).IsPinned; } else { ((FileHeader)pinnedone.Header).IsPinned = !((FileHeader)pinnedone.Header).IsPinned; actualpinned = ((FileHeader)pinnedone.Header).IsPinned; } if (actualpinned) { PinnedNumber += 1; PinnedNumber2 += 1; oldtab = Views[pinnedindex]; viewsarray.Remove(viewsarray[pinnedindex]); viewsarray.Insert(PinnedNumber, oldtab); } else { PinnedNumber -= 1; PinnedNumber2 -= 1; oldtab = Views[pinnedindex]; viewsarray.Remove(viewsarray[pinnedindex]); viewsarray.Insert(PinnedNumber2, oldtab); } Views = new ObservableCollection <ViewContainer>(viewsarray); OnPropertyChanged("Views"); OnPropertyChanged("PinnedNumber2"); }); _logger = logger; _windowsController = windowsController; RecentFiles = recentFilesViewModel; GeneralOptions = generalOptionsViewModel; Dialog = dialogviewmodel; _schedulerProvider = schedulerProvider; _objectProvider = objectProvider; InterTabClient = new InterTabClient(windowFactory); FileOpenDialogCommand = new Command(OpenFileDialog); FileOpen = new FileOpenViewModel(OpenFile); ShowInGitHubCommand = new Command(() => Process.Start("https://github.com/RolandPheasant")); Views.CollectionChanged += Views_CollectionChanged; ZoomOutCommand = new Command(() => { GeneralOptions.Scale = GeneralOptions.Scale + 5; }); ZoomInCommand = new Command(() => { GeneralOptions.Scale = GeneralOptions.Scale - 5; }); SaveLayoutCommand = new Command(WalkTheLayout); ExitCommmand = new Command(() => Application.Current.Shutdown()); Version = $"v{Assembly.GetEntryAssembly().GetName().Version.ToString(3)}"; var fileDropped = DropMonitor.Dropped.Subscribe(async t => await OpenFile(t)); var isEmptyChecker = Views.ToObservableChangeSet() .ToCollection() .Select(items => items.Count) .StartWith(0) .Select(count => count == 0) .Subscribe(isEmpty => IsEmpty = isEmpty); var openRecent = recentFilesViewModel.OpenFileRequest .Subscribe(file => { MenuIsOpen = false; OpenFile(file); }); _cleanUp = new CompositeDisposable(recentFilesViewModel, isEmptyChecker, fileDropped, DropMonitor, openRecent, Disposable.Create(() => { Views.Select(vc => vc.Content) .OfType <IDisposable>() .ForEach(d => d.Dispose()); })); }
public WindowViewModel(IObjectProvider objectProvider, IWindowFactory windowFactory, ILogger logger, IWindowsController windowsController, RecentFilesViewModel recentFilesViewModel, GeneralOptionsViewModel generalOptionsViewModel, ISchedulerProvider schedulerProvider, IApplicationStatePublisher applicationStatePublisher) { _logger = logger; _windowsController = windowsController; RecentFiles = recentFilesViewModel; GeneralOptions = generalOptionsViewModel; _schedulerProvider = schedulerProvider; _objectProvider = objectProvider; InterTabClient = new InterTabClient(windowFactory); OpenFileCommand = new Command(OpenFile); ShowInGitHubCommand = new Command(() => Process.Start("https://github.com/RolandPheasant")); ZoomOutCommand = new Command(() => { GeneralOptions.Scale = GeneralOptions.Scale + 5; }); ZoomInCommand = new Command(() => { GeneralOptions.Scale = GeneralOptions.Scale - 5; }); CollectMemoryCommand = new Command(() => { //Diagnostics [useful for memory testing] GC.Collect(); GC.WaitForPendingFinalizers(); GC.Collect(); }); ExitCommmand = new Command(() => { applicationStatePublisher.Publish(ApplicationState.ShuttingDown); Application.Current.Shutdown(); }); WindowExiting = () => { applicationStatePublisher.Publish(ApplicationState.ShuttingDown); }; Version = $"v{Assembly.GetEntryAssembly().GetName().Version.ToString(3)}"; var fileDropped = DropMonitor.Dropped.Subscribe(OpenFile); var isEmptyChecker = Views.ToObservableChangeSet() .ToCollection() .Select(items => items.Count) .StartWith(0) .Select(count => count == 0) .LogErrors(logger) .Subscribe(isEmpty => IsEmpty = isEmpty); var openRecent = recentFilesViewModel.OpenFileRequest .LogErrors(logger) .Subscribe(file => { MenuIsOpen = false; OpenFile(file); }); var selectedChange = this.WhenValueChanged(vm => vm.Selected) .Subscribe(selected => { var currentSelection = selected?.Content as ISelectedAware; Views.Where(hv => !hv.Equals(selected)) .Select(hv => hv.Content) .OfType <ISelectedAware>() .ForEach(selectedAware => selectedAware.IsSelected = false); if (currentSelection != null) { currentSelection.IsSelected = true; } }); _cleanUp = new CompositeDisposable(recentFilesViewModel, isEmptyChecker, fileDropped, DropMonitor, openRecent, selectedChange, Disposable.Create(() => { Views.Select(vc => vc.Content) .OfType <IDisposable>() .ForEach(d => d.Dispose()); })); }
private void App_OnStartup(object sender, StartupEventArgs e) { System.Net.WebRequest.DefaultWebProxy.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials; IGeneralSettings generalSettings = null; IExplicitConnectionCache explicitConnectionCache = null; IInitialLayoutStructureProvider initialLayoutStructureProvider = null; string rawData; if (new Persistance().TryLoadRaw(out rawData)) { try { var settingsContainer = Serializer.Objectify(rawData); generalSettings = settingsContainer.GeneralSettings; explicitConnectionCache = settingsContainer.ExplicitConnectionCache; initialLayoutStructureProvider = new InitialLayoutStructureProvider(settingsContainer.LayoutStructure); } catch (Exception exc) { //TODO summit System.Diagnostics.Debug.WriteLine(exc.Message); } } generalSettings = generalSettings ?? new GeneralSettings(10); explicitConnectionCache = explicitConnectionCache ?? new ExplicitConnectionCache(); initialLayoutStructureProvider = initialLayoutStructureProvider ?? new InitialLayoutStructureProvider(); var container = new Container(_ => { _.ForSingletonOf <DispatcherScheduler>().Use(DispatcherScheduler.Current); _.ForSingletonOf <DispatcherTaskSchedulerProvider>().Use(DispatcherTaskSchedulerProvider.Create(Dispatcher)); _.ForSingletonOf <IGeneralSettings>().Use(generalSettings); _.ForSingletonOf <IExplicitConnectionCache>().Use(explicitConnectionCache); _.ForSingletonOf <IImplicitConnectionCache>(); _.ForSingletonOf <LocalEmulatorDetector>(); _.ForSingletonOf <IInitialLayoutStructureProvider>().Use(initialLayoutStructureProvider); _.ForSingletonOf <ISnackbarMessageQueue>().Use(new SnackbarMessageQueue(TimeSpan.FromSeconds(5))); _.ForSingletonOf <FeatureRegistry>() .Use( ctx => FeatureRegistry .WithDefault(ctx.GetInstance <QueryDeveloperFeatureFactory>()) .Add(ctx.GetInstance <ManagementFeatureFactory>())); _.AddRegistry <DoobryRegistry>(); _.Scan(scanner => { scanner.TheCallingAssembly(); scanner.WithDefaultConventions(); }); }); var windowInstanceManager = new WindowInstanceManager(container.GetInstance <MainWindowViewModel>); //grease the Dragablz wheels var featureRegistry = container.GetInstance <FeatureRegistry>(); NewItemFactory = () => { var contentLifetimeHost = featureRegistry.Default.CreateTabContent(); var tabContentContainer = new TabItemContainer(Guid.NewGuid(), featureRegistry.Default.FeatureId, contentLifetimeHost, featureRegistry.Default); return(tabContentContainer); }; InterTabClient = new InterTabClient(windowInstanceManager); ClosingItemCallback = OnItemClosingHandler; var localEmulatorSubscription = UseLocalEmulatorDetector(container); Exit += (o, args) => localEmulatorSubscription.Dispose(); ShutdownMode = ShutdownMode.OnExplicitShutdown; var mainWindow = windowInstanceManager.Create(); mainWindow.Show(); Task.Factory.StartNew(() => CheckForUpdates(container.GetInstance <ISnackbarMessageQueue>())); }