public static void Main(string[] args) { Application app = new Application(); Thread.CurrentThread.CurrentUICulture = new CultureInfo("ru"); IServiceContainer serviceContainer = new ServiceContainer(); IEventController eventController = new EventController(); IAppController appController = new AppController(serviceContainer, eventController); IMessageService messageSvc = new MessageService(); ILogService logSvc = new LogService(); IImageSupport[] imageTools = new IImageSupport[] { }; IImageListSupport[] imageListTools = new IImageListSupport[] { new HSLFiltering(new SnapshotTuner()), new ColorFiltering(new SnapshotTuner()), new Resize(new Tuner()), new ExternalOverlay(new ExternalOverlayTuner()), new Rotation3D(new Rotation3DTuner()), new SpeedControl(new SnapshotTuner()), new Interpolation(new Tuner()), new Convolution(new ConvolutionTuner()) }; appController.ServiceContainer .Register <IImageEditor, ImageEditor.ImageEditor>() .Register <IRepository <IImageList>, RepositoryService <IImageList> >() .Register <ISlideshowService, SlideshowService>(); appController.ServiceContainer .RegisterInstance(appController) .RegisterInstance(imageTools) .RegisterInstance(imageListTools) .RegisterInstance(messageSvc) .RegisterInstance(logSvc); appController.Run <ImageEditorPresenter>(); app.Run(); }
private void ToolPanel_Tuning(object sender, EventArgs e) { IImagePanel imagePanel = View.ImagePanels.SelectedPanel; string imageKey = View.ImagePanels.SelectedPanelKey; object tool = ((IToolPanel)sender).SelectedTool; ICustomFramesSupport framesSupport = tool as ICustomFramesSupport; ICustomAreaSupport areaSupport = tool as ICustomAreaSupport; IAsyncApplyingSupport asyncSupport = tool as IAsyncApplyingSupport; if (framesSupport != null) { framesSupport.CustomFrames = imagePanel.SelectedIcons; } if (areaSupport != null) { areaSupport.CustomArea = imagePanel.SelectedArea; } if (asyncSupport != null) { asyncSupport.AllowMultipleTasks = false; asyncSupport.ApplyAsync = Settings.Default.UseAsyncMode; AppController.EventController.UnsubscribeAll(asyncSupport, nameof(asyncSupport.AsyncApplyingCompleted)); AppController.EventController.Subscribe(asyncSupport, nameof(asyncSupport.AsyncApplyingCompleted), delegate { Repository.OnItemChanged(imageKey); }); } IImageListSupport imageListSupport = tool as IImageListSupport; IImageSupport imageSupport = tool as IImageSupport; try { if (!Originals.ContainsKey(imageKey)) { Originals.Add(imageKey, Repository[imageKey].Clone()); } if (imageListSupport != null) { imageListSupport.Apply(Originals[imageKey], Repository[imageKey]); if (!Settings.Default.UseAsyncMode) { Repository.OnItemChanged(imageKey); } } else if (imageSupport != null) { int frame = imagePanel.SelectedIcons.ElementAtOrDefault(0); imageSupport.Apply(Originals[imageKey][frame], Repository[imageKey][frame]); if (!Settings.Default.UseAsyncMode) { Repository.OnItemChanged(imageKey); } } else { throw new Exception("Unsupported tool type"); } } catch (OutOfMemoryException ex) { GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced); MessageService.ShowError(ex.Message); } #if !DEBUG catch (Exception ex) { MessageService.ShowError(Resources.ApplyToolError); LogService.LogError(ex); } #endif }