From 44b3611c132b04084a23329f1339f220b07f1a8b Mon Sep 17 00:00:00 2001 From: Robin Krom Date: Wed, 5 Dec 2018 10:34:31 +0100 Subject: [PATCH] Dotnet core 3.0 support (#104) The changes in the PR are pretty much: * Migrated to PackageReference and a new .csproj structure * Updated GitVersioning, added a developer getting started to the README.md * Made multi targeting (471 & dotnet core 3.0) possible --- README.md | 41 +- src/CommonProject.properties | 48 - src/Directory.Build.props | 58 + src/Greenshot.Addon.Box/BoxAddonModule.cs | 12 +- src/Greenshot.Addon.Box/BoxDestination.cs | 1 + .../{ => Configuration}/IBoxConfiguration.cs | 7 +- .../{ => Configuration}/IBoxLanguage.cs | 7 +- .../Impl/BoxConfigurationImpl.cs | 79 + .../Configuration/Impl/BoxLanguageImpl.cs | 50 + src/Greenshot.Addon.Box/FodyWeavers.xml | 4 + src/Greenshot.Addon.Box/FodyWeavers.xsd | 21 + .../Greenshot.Addon.Box.csproj | 245 +-- .../Properties/AssemblyInfo.cs | 53 - .../ViewModels/BoxConfigViewModel.cs | 1 + src/Greenshot.Addon.Box/packages.config | 42 - .../IConfluenceConfiguration.cs | 7 +- .../IConfluenceLanguage.cs | 7 +- .../Impl/ConfluenceConfigurationImpl.cs | 46 + .../Impl/ConfluenceLanguageImpl.cs | 64 + .../ConfluenceAddonModule.cs | 13 +- .../ConfluenceDestination.cs | 1 + .../FodyWeavers.xml | 11 +- .../FodyWeavers.xsd | 21 + .../Greenshot.Addon.Confluence.csproj | 254 +-- .../Properties/AssemblyInfo.cs | 53 - .../ViewModels/ConfluenceConfigViewModel.cs | 1 + .../packages.config | 44 - .../IDropboxConfiguration.cs | 7 +- .../{ => Configuration}/IDropboxLanguage.cs | 7 +- .../Impl/DropboxConfigurationImpl.cs | 73 + .../Configuration/Impl/DropboxLanguageImpl.cs | 46 + .../DropboxAddonModule.cs | 12 +- .../DropboxDestination.cs | 3 +- .../Entities/ErrorTag.cs | 21 +- .../Entities/SharingInfo.cs | 21 +- src/Greenshot.Addon.Dropbox/FodyWeavers.xml | 4 + src/Greenshot.Addon.Dropbox/FodyWeavers.xsd | 21 + .../Greenshot.Addon.Dropbox.csproj | 236 +-- .../Properties/AssemblyInfo.cs | 53 - .../ViewModels/DropboxConfigViewModel.cs | 1 + src/Greenshot.Addon.Dropbox/app.config | 31 +- src/Greenshot.Addon.Dropbox/packages.config | 42 - .../ExternalCommandConfigurationExtensions.cs | 2 +- .../IExternalCommandConfiguration.cs | 9 +- .../IExternalCommandLanguage.cs | 9 +- .../Impl/ExternalCommandConfigurationImpl.cs | 77 + .../Impl/ExternalCommandLanguageImpl.cs | 51 + .../ExternalCommandAddonModule.cs | 25 +- .../ExternalCommandDestination.cs | 38 +- .../ExternalCommandDestinationProvider.cs | 3 +- .../FodyWeavers.xml | 4 + .../FodyWeavers.xsd | 21 + .../Greenshot.Addon.ExternalCommand.csproj | 265 +-- .../Properties/AssemblyInfo.cs | 53 - .../ExternalCommandConfigViewModel.cs | 1 + .../ExternalCommandDetailsViewModel.cs | 1 + .../ExternalCommandMasterViewModel.cs | 1 + .../packages.config | 37 - .../IFlickrConfiguration.cs | 32 +- .../{ => Configuration}/IFlickrLanguage.cs | 9 +- .../Impl/FlickrConfigurationImpl.cs | 83 + .../Configuration/Impl/FlickrLanguageImpl.cs | 55 + .../Configuration/SafetyLevel.cs} | 19 +- .../FlickrAddonModule.cs | 12 +- .../FlickrDestination.cs | 1 + src/Greenshot.Addon.Flickr/FodyWeavers.xml | 4 + src/Greenshot.Addon.Flickr/FodyWeavers.xsd | 21 + .../Greenshot.Addon.Flickr.csproj | 238 +-- .../Properties/AssemblyInfo.cs | 53 - .../ViewModels/FlickrConfigViewModel.cs | 26 +- src/Greenshot.Addon.Flickr/packages.config | 40 - .../IGooglePhotosConfiguration.cs | 9 +- .../Configuration/IGooglePhotosLanguage.cs | 51 + .../Impl/GooglePhotosConfigurationImpl.cs | 80 + .../Impl/GooglePhotosLanguageImpl.cs | 50 + .../FodyWeavers.xml | 4 + .../FodyWeavers.xsd | 21 + .../GooglePhotosAddonModule.cs | 12 +- .../GooglePhotosDestination.cs | 1 + .../Greenshot.Addon.GooglePhotos.csproj | 215 +-- .../IGooglePhotosLanguage.cs | 27 - .../Properties/AssemblyInfo.cs | 53 - .../ViewModels/GooglePhotosConfigViewModel.cs | 15 + .../packages.config | 40 - .../IImgurConfiguration.cs | 7 +- .../{ => Configuration}/IImgurLanguage.cs | 9 +- .../Impl/ImgurConfigurationImpl.cs | 90 + .../Configuration/Impl/ImgurLanguageImpl.cs | 59 + src/Greenshot.Addon.Imgur/FodyWeavers.xml | 4 + src/Greenshot.Addon.Imgur/FodyWeavers.xsd | 21 + .../Greenshot.Addon.Imgur.csproj | 250 +-- src/Greenshot.Addon.Imgur/ImgurAddonModule.cs | 12 +- src/Greenshot.Addon.Imgur/ImgurApi.cs | 1 + src/Greenshot.Addon.Imgur/ImgurDestination.cs | 1 + .../Properties/AssemblyInfo.cs | 53 - .../ViewModels/ImgurConfigViewModel.cs | 1 + .../ViewModels/ImgurHistoryViewModel.cs | 31 +- src/Greenshot.Addon.Imgur/packages.config | 44 - .../AccessibleHelper.cs | 40 +- .../Greenshot.Addon.InternetExplorer.csproj | 116 +- .../IECaptureHelper.cs | 35 +- .../IEHelper.cs | 13 +- .../IEInterop/IEContainer.cs | 6 +- .../Properties/AssemblyInfo.cs | 35 - .../app.config | 12 - .../packages.config | 20 - .../{ => Configuration}/IJiraConfiguration.cs | 7 +- .../{ => Configuration}/IJiraLanguage.cs | 4 +- .../Impl/JiraConfigurationImpl.cs | 62 + .../Configuration/Impl/JiraLanguageImpl.cs | 61 + src/Greenshot.Addon.Jira/FodyWeavers.xml | 11 +- src/Greenshot.Addon.Jira/FodyWeavers.xsd | 21 + .../Greenshot.Addon.Jira.csproj | 315 +--- src/Greenshot.Addon.Jira/JiraAddonModule.cs | 14 +- src/Greenshot.Addon.Jira/JiraConnector.cs | 5 + src/Greenshot.Addon.Jira/JiraDestination.cs | 1 + src/Greenshot.Addon.Jira/JiraMonitor.cs | 3 +- .../ViewModels/JiraConfigViewModel.cs | 1 + .../ViewModels/JiraViewModel.cs | 1 + src/Greenshot.Addon.Jira/packages.config | 46 - src/Greenshot.Addon.LegacyEditor/Colors.cs | 14 + .../Impl/EditorConfigurationImpl.cs | 30 + .../Configuration/Impl/EditorLanguageImpl.cs | 107 ++ .../Controls/ColorDialog.Designer.cs | 6 +- .../Controls/ColorDialog.resx | 392 ---- .../CustomToolStripProfessionalRenderer.cs | 2 +- .../Controls/Pipette.cs | 5 +- .../Drawing/DrawableContainer.cs | 5 +- .../Drawing/DrawableContainerList.cs | 11 +- .../Drawing/Fields/AbstractFieldHolder.cs | 8 +- .../Drawing/Fields/Field.cs | 3 +- .../Drawing/Fields/FieldAggregator.cs | 5 +- .../Drawing/Fields/IFieldHolder.cs | 53 - .../Drawing/Filters/AbstractFilter.cs | 5 - .../Drawing/Filters/IFilter.cs | 23 +- .../Drawing/FreehandContainer.cs | 8 +- .../Drawing/RectangleContainer.cs | 14 +- .../Drawing/SpeechbubbleContainer.cs | 2 +- .../Drawing/Surface.cs | 19 +- .../Drawing/TextContainer.cs | 16 +- .../EditorAddonModule.cs | 11 +- .../EditorDestination.cs | 3 +- .../FodyWeavers.xml | 4 + .../FodyWeavers.xsd | 21 + .../Forms/DropShadowSettingsForm.cs | 6 +- .../Forms/ImageEditorForm.cs | 26 +- .../Forms/ImageEditorForm.resx | 1029 ----------- .../Greenshot.Addon.LegacyEditor.csproj | 425 ++--- .../IEditorConfiguration.cs | 5 +- .../IEditorLanguage.cs | 5 +- .../DrawableContainerBoundsChangeMemento.cs | 2 +- .../Memento/IMemento.cs | 8 - .../Properties/AssemblyInfo.cs | 35 - .../addEllipseToolStripMenuItem.Image.png | Bin 0 -> 664 bytes .../addRectangleToolStripMenuItem.Image.png | Bin 0 -> 523 bytes ...ddSpeechBubbleToolStripMenuItem.Image.png} | Bin .../addTextBoxToolStripMenuItem.Image.png | Bin 0 -> 549 bytes .../Resources/areaHighlightMenuItem.Image.png | Bin 0 -> 767 bytes .../arrowHeadsDropDownButton.Image.png | Bin 0 -> 301 bytes .../Resources/blurToolStripMenuItem.Image.png | Bin 0 -> 430 bytes .../Resources/btnAlignBottom.Image.png | Bin 0 -> 376 bytes .../Resources/btnAlignCenter.Image.png | Bin 0 -> 260 bytes .../Resources/btnAlignLeft.Image.png | Bin 0 -> 261 bytes .../Resources/btnAlignMiddle.Image.png | Bin 0 -> 402 bytes .../Resources/btnAlignRight.Image.png | Bin 0 -> 264 bytes .../Resources/btnAlignTop.Image.png | Bin 0 -> 372 bytes .../Resources/btnArrow.Image.png | Bin 0 -> 309 bytes .../Resources/btnCancel.Image.png | Bin 0 -> 632 bytes .../Resources/btnClipboard.Image.png | Bin 0 -> 457 bytes .../Resources/btnConfirm.Image.png | Bin 0 -> 539 bytes .../Resources/btnCopy.Image.png | Bin 0 -> 588 bytes .../Resources/btnCrop.Image.png | Bin 0 -> 577 bytes .../Resources/btnCursor.Image.png | Bin 0 -> 433 bytes .../Resources/btnCut.Image.png | Bin 0 -> 502 bytes .../Resources/btnDelete.Image.png | Bin 0 -> 546 bytes .../Resources/btnEllipse.Image.png | Bin 0 -> 628 bytes .../Resources/btnFillColor.Image.png | Bin 0 -> 648 bytes .../Resources/btnFreehand.Image.png | Bin 0 -> 593 bytes .../Resources/btnHelp.Image.png | Bin 0 -> 667 bytes .../Resources/btnHighlight.Image.png | Bin 0 -> 427 bytes .../Resources/btnLine.Image.png | Bin 0 -> 295 bytes .../Resources/btnLineColor.Image.png | Bin 0 -> 495 bytes .../Resources/btnObfuscate.Image.png | Bin 0 -> 614 bytes .../Resources/btnPaste.Image.png | Bin 0 -> 730 bytes .../Resources/btnPrint.Image.png | Bin 0 -> 663 bytes .../Resources/btnRect.Image.png | Bin 0 -> 514 bytes .../Resources/btnRedo.Image.png | Bin 0 -> 776 bytes .../btnResize.Image.png} | Bin .../Resources/btnSave.Image.png | Bin 0 -> 459 bytes .../Resources/btnSettings.Image.png | Bin 0 -> 566 bytes .../Resources/btnStepLabel.Image.png | Bin 0 -> 457 bytes .../btnStepLabel01.Image.png} | Bin .../btnStepLabel02.Image.png} | Bin .../btnStepLabel03.Image.png} | Bin .../btnStepLabel04.Image.png} | Bin .../btnStepLabel05.Image.png} | Bin .../btnStepLabel06.Image.png} | Bin .../btnStepLabel07.Image.png} | Bin .../btnStepLabel08.Image.png} | Bin .../btnStepLabel09.Image.png} | Bin .../btnStepLabel10.Image.png} | Bin .../btnStepLabel11.Image.png} | Bin .../btnStepLabel12.Image.png} | Bin .../btnStepLabel13.Image.png} | Bin .../btnStepLabel14.Image.png} | Bin .../btnStepLabel15.Image.png} | Bin .../btnStepLabel16.Image.png} | Bin .../btnStepLabel17.Image.png} | Bin .../btnStepLabel18.Image.png} | Bin .../btnStepLabel19.Image.png} | Bin .../btnStepLabel20+.Image.png} | Bin .../btnStepLabel20.Image.png} | Bin .../Resources/btnText.Image.png | Bin 0 -> 457 bytes .../Resources/btnUndo.Image.png | Bin 0 -> 767 bytes .../closeToolStripMenuItem.Image.png | Bin 0 -> 427 bytes .../Resources/copyToolStripMenuItem.Image.png | Bin 0 -> 653 bytes .../Resources/cutToolStripMenuItem.Image.png | Bin 0 -> 595 bytes .../drawArrowToolStripMenuItem.Image.png | Bin 0 -> 444 bytes .../drawFreehandToolStripMenuItem.Image.png | Bin 0 -> 608 bytes .../drawLineToolStripMenuItem.Image.png | Bin 0 -> 418 bytes .../Resources/fontBoldButton.Image.png | Bin 0 -> 233 bytes .../Resources/fontItalicButton.Image.png | Bin 0 -> 192 bytes .../grayscaleHighlightMenuItem.Image.png | Bin 0 -> 362 bytes .../helpToolStripMenuItem1.Image.png | Bin 0 -> 709 bytes .../Resources/highlightModeButton.Image.png | Bin 0 -> 388 bytes .../Resources/magnifyMenuItem.Image.png | Bin 0 -> 618 bytes .../Resources/obfuscateModeButton.Image.png | Bin 0 -> 430 bytes .../pasteToolStripMenuItem.Image.png | Bin 0 -> 771 bytes .../Resources/pipette.Image.png | Bin 0 -> 514 bytes .../pixelizeToolStripMenuItem.Image.png | Bin 0 -> 199 bytes .../preferencesToolStripMenuItem.Image.png | Bin 0 -> 630 bytes .../Resources/redoToolStripMenuItem.Image.png | Bin 0 -> 796 bytes .../removeObjectToolStripMenuItem.Image.png | Bin 0 -> 601 bytes .../rotateCcwToolstripButton.Image.png | Bin 0 -> 513 bytes .../rotateCwToolstripButton.Image.png | Bin 0 -> 506 bytes .../Resources/shadowButton.Image.png | Bin 0 -> 360 bytes .../Resources/textHighlightMenuItem.Image.png | Bin 0 -> 395 bytes .../Resources/toolStripSplitButton1.Image.png | Bin 0 -> 484 bytes .../Resources/undoToolStripMenuItem.Image.png | Bin 0 -> 787 bytes src/Greenshot.Addon.LegacyEditor/app.config | 16 - .../icons/arrow_redo.png | Bin 349 -> 0 bytes .../icons/arrow_rollback.png | Bin 631 -> 0 bytes .../icons/arrow_undo.png | Bin 345 -> 0 bytes .../icons/cancel.png | Bin 587 -> 0 bytes .../icons/cross.png | Bin 655 -> 0 bytes .../icons/cut.png | Bin 648 -> 0 bytes .../icons/delete.png | Bin 715 -> 0 bytes .../icons/filter_blur.png | Bin 461 -> 0 bytes .../icons/filter_pixelate.png | Bin 236 -> 0 bytes .../icons/folder-open-image.png | Bin 764 -> 0 bytes .../icons/folder_explore.png | Bin 679 -> 0 bytes .../icons/font_color.png | Bin 194 -> 0 bytes .../icons/freehand.png | Bin 3370 -> 0 bytes .../icons/heart.png | Bin 775 -> 0 bytes .../icons/help.png | Bin 786 -> 0 bytes .../icons/highlighter.png | Bin 440 -> 0 bytes .../icons/layer-rotate-left.png | Bin 608 -> 0 bytes .../icons/layer-rotate.png | Bin 614 -> 0 bytes .../icons/page_copy.png | Bin 663 -> 0 bytes .../icons/palette.png | Bin 856 -> 0 bytes .../icons/picture_save.png | Bin 755 -> 0 bytes .../icons/picture_saveas.png | Bin 829 -> 0 bytes .../icons/picture_to_clipboard.png | Bin 672 -> 0 bytes .../icons/pipette.png | Bin 543 -> 0 bytes .../icons/printer.png | Bin 731 -> 0 bytes .../icons/propertyitemcontainer.gif | Bin 75 -> 0 bytes .../icons/redo.png | Bin 791 -> 0 bytes .../icons/ruler-crop.png | Bin 690 -> 0 bytes .../icons/shadow.png | Bin 1289 -> 0 bytes .../icons/shape_arrow_add.png | Bin 468 -> 0 bytes .../icons/shape_arrowheads.png | Bin 298 -> 0 bytes .../icons/shape_copy.png | Bin 482 -> 0 bytes .../icons/shape_ellipse_add.png | Bin 652 -> 0 bytes .../icons/shape_ellipse_delete.png | Bin 657 -> 0 bytes .../icons/shape_line.png | Bin 455 -> 0 bytes .../icons/shape_paste.png | Bin 574 -> 0 bytes .../icons/shape_square_add.png | Bin 539 -> 0 bytes .../icons/shape_square_bordercolor.png | Bin 546 -> 0 bytes .../icons/shape_square_delete.png | Bin 537 -> 0 bytes .../icons/shape_square_fillcolor.png | Bin 551 -> 0 bytes .../icons/text_bold.png | Bin 304 -> 0 bytes .../icons/text_dropcaps.png | Bin 314 -> 0 bytes .../icons/text_italic.png | Bin 223 -> 0 bytes .../icons/text_underline.png | Bin 273 -> 0 bytes .../icons/textfield_delete.png | Bin 335 -> 0 bytes .../icons/undo.png | Bin 803 -> 0 bytes .../icons/wand-hat.png | Bin 686 -> 0 bytes .../icons/wrench.png | Bin 610 -> 0 bytes .../icons/wrench_orange.png | Bin 584 -> 0 bytes .../icons/zoom.png | Bin 692 -> 0 bytes .../packages.config | 38 - .../ILutimConfiguration.cs | 7 +- .../{ => Configuration}/ILutimLanguage.cs | 2 +- .../Impl/LutimConfigurationImpl.cs | 65 + .../Configuration/Impl/LutimLanguageImpl.cs | 58 + src/Greenshot.Addon.Lutim/FodyWeavers.xml | 4 + src/Greenshot.Addon.Lutim/FodyWeavers.xsd | 21 + .../Greenshot.Addon.Lutim.csproj | 254 +-- src/Greenshot.Addon.Lutim/LutimAddonModule.cs | 14 +- src/Greenshot.Addon.Lutim/LutimApi.cs | 1 + src/Greenshot.Addon.Lutim/LutimDestination.cs | 1 + .../Properties/AssemblyInfo.cs | 44 - .../ViewModels/LutimConfigViewModel.cs | 1 + .../ViewModels/LutimHistoryViewModel.cs | 1 + src/Greenshot.Addon.Lutim/packages.config | 41 - .../IOcrConfiguration.cs} | 9 +- .../{ => Configuration}/IOcrLanguage.cs | 10 +- .../Impl/OcrConfigurationImpl.cs | 38 + .../Configuration/Impl/OcrLanguageImpl.cs | 44 + src/Greenshot.Addon.OCR/FodyWeavers.xml | 4 + src/Greenshot.Addon.OCR/FodyWeavers.xsd | 21 + .../Greenshot.Addon.OCR.csproj | 241 +-- src/Greenshot.Addon.OCR/OCRDestination.cs | 5 +- src/Greenshot.Addon.OCR/OcrAddonModule.cs | 16 +- .../Properties/AssemblyInfo.cs | 53 - src/Greenshot.Addon.OCR/SettingsForm.cs | 5 +- src/Greenshot.Addon.OCR/packages.config | 36 - src/Greenshot.Addon.OcrCommand/COMWrapper.cs | 2 +- .../Greenshot.Addon.OcrCommand.csproj | 72 +- .../Properties/AssemblyInfo.cs | 35 - .../IOfficeConfiguration.cs | 8 +- .../{ => Configuration}/IOfficeLanguage.cs | 8 +- .../Impl/OfficeConfigurationImpl.cs | 50 + .../Configuration/Impl/OfficeLanguageImpl.cs | 52 + .../Destinations/ExcelDestination.cs | 19 + .../Destinations/OneNoteDestination.cs | 25 +- .../Destinations/OutlookDestination.cs | 40 +- .../Destinations/PowerpointDestination.cs | 50 +- .../Destinations/WordDestination.cs | 60 +- src/Greenshot.Addon.Office/FodyWeavers.xml | 4 + src/Greenshot.Addon.Office/FodyWeavers.xsd | 21 + .../Greenshot.Addon.Office.csproj | 227 +-- .../OfficeAddonModule.cs | 16 +- .../OfficeExport/Entities/OneNoteNotebook.cs | 46 + .../OfficeExport/Entities/OneNotePage.cs} | 115 +- .../OfficeExport/Entities/OneNoteSection.cs} | 104 +- .../OfficeExport/ExcelExporter.cs | 8 +- .../OfficeExport/OneNoteExporter.cs | 54 +- .../OfficeExport/OutlookEmailExporter.cs | 57 +- .../OfficeExport/PowerpointExporter.cs | 46 +- .../OfficeExport/WordExporter.cs | 65 +- .../OfficeInterop/EmailFormat.cs | 6 + .../OfficeInterop/OfficeVersions.cs | 31 +- .../Properties/AssemblyInfo.cs | 53 - .../ViewModels/OfficeConfigViewModel.cs | 28 + src/Greenshot.Addon.Office/packages.config | 42 - .../IOneDriveConfiguration.cs | 7 +- .../{ => Configuration}/IOneDriveLanguage.cs | 4 +- .../Impl/OneDriveConfigurationImpl.cs | 77 + .../Impl/OneDriveLanguageImpl.cs | 49 + src/Greenshot.Addon.OneDrive/FodyWeavers.xml | 4 + src/Greenshot.Addon.OneDrive/FodyWeavers.xsd | 21 + .../Greenshot.Addon.OneDrive.csproj | 220 +-- .../OneDriveAddonModule.cs | 12 +- .../OneDriveDestination.cs | 1 + .../Properties/AssemblyInfo.cs | 54 - .../ViewModels/OneDriveConfigViewModel.cs | 1 + src/Greenshot.Addon.OneDrive/packages.config | 44 - .../IPhotobucketConfiguration.cs | 9 +- .../IPhotobucketLanguage.cs | 4 +- .../Impl/PhotobucketConfigurationImpl.cs | 81 + .../Impl/PhotobucketLanguageImpl.cs | 50 + .../FodyWeavers.xml | 4 + .../FodyWeavers.xsd | 21 + .../Greenshot.Addon.Photobucket.csproj | 244 +-- .../PhotobucketAddonModule.cs | 12 +- .../PhotobucketDestination.cs | 1 + .../Properties/AssemblyInfo.cs | 53 - .../ViewModels/PhotobucketConfigViewModel.cs | 1 + .../packages.config | 40 - .../{ => Configuration}/ITfsConfiguration.cs | 7 +- .../{ => Configuration}/ITfsLanguage.cs | 2 +- .../Impl/TfsConfigurationImpl.cs | 63 + .../Configuration/Impl/TfsLanguageImpl.cs | 48 + src/Greenshot.Addon.Tfs/FodyWeavers.xml | 4 + src/Greenshot.Addon.Tfs/FodyWeavers.xsd | 21 + .../Greenshot.Addon.Tfs.csproj | 215 +-- .../Properties/AssemblyInfo.cs | 54 - src/Greenshot.Addon.Tfs/TfsAddonModule.cs | 11 +- src/Greenshot.Addon.Tfs/TfsClient.cs | 6 +- src/Greenshot.Addon.Tfs/packages.config | 41 - .../Greenshot.Addon.Win10.csproj | 231 +-- .../Properties/AssemblyInfo.cs | 27 - .../Win10ShareDestination.cs | 11 +- src/Greenshot.Addon.Win10/packages.config | 36 - src/Greenshot.Addons/AddonsModule.cs | 43 +- src/Greenshot.Addons/Animation/EasePower.cs | 18 + .../Config/Impl/CoreConfigurationImpl.cs | 164 ++ .../Config/Impl/GreenshotLanguageImpl.cs | 184 ++ .../Config/Impl/HttpConfigurationImpl.cs | 76 + .../Controls/AnimatingForm.cs | 4 +- .../Controls/BackgroundForm.cs | 3 +- ...ontextMenuToolStripProfessionalRenderer.cs | 11 +- .../Controls/GreenshotComboBox.cs | 3 +- .../Controls/GreenshotForm.cs | 81 +- ...nverter.cs => InvertedBooleanConverter.cs} | 2 +- .../Controls/PleaseWaitForm.cs | 3 +- .../Controls/ResourceImageManager.cs | 9 +- .../Controls/SaveImageFileDialog.cs | 21 +- .../Controls/ThumbnailForm.cs | 12 +- .../Core/AbstractDestination.cs | 3 +- .../Core/AbstractProcessor.cs | 25 +- src/Greenshot.Addons/Core/CaptureDetails.cs | 16 +- src/Greenshot.Addons/Core/ClipboardHelper.cs | 16 +- .../Core/CoreConfigurationExtensions.cs | 2 +- src/Greenshot.Addons/Core/FilenameHelper.cs | 17 +- .../Core/GreenshotResources.cs | 70 - .../Core/GreenshotResources.resx | 471 ----- .../Core/ICoreConfiguration.cs | 9 +- .../Core/IHttpConfiguration.cs | 5 +- src/Greenshot.Addons/Core/ImageOutput.cs | 24 +- .../Core/InteropWindowCaptureExtensions.cs | 6 +- src/Greenshot.Addons/Core/Language.cs | 231 --- src/Greenshot.Addons/Core/PluginUtils.cs | 4 +- src/Greenshot.Addons/Core/WindowCapture.cs | 5 +- .../Extensions/LanguageExtensions.cs | 2 +- src/Greenshot.Addons/FodyWeavers.xml | 4 + src/Greenshot.Addons/FodyWeavers.xsd | 21 + src/Greenshot.Addons/Greenshot.Addons.csproj | 444 +---- src/Greenshot.Addons/IGreenshotLanguage.cs | 4 +- .../Interfaces/Drawing/RenderMode.cs | 13 +- .../Interfaces/IGreenshotContract.cs | 4 + .../Plugin/SurfaceOutputSettings.cs | 7 +- .../Properties/AssemblyInfo.cs | 53 - .../Resources/Checkerboard.Image.png | Bin 0 -> 954 bytes .../Resources/Clipboard.Image.png | Bin 0 -> 493 bytes .../Resources/Close.Image.png | Bin 0 -> 440 bytes .../Resources/Email.Image.png | Bin 0 -> 745 bytes .../Resources/Greenshot.Icon.ico | Bin 0 -> 15227 bytes .../Resources/GreenshotResources.cs | 132 ++ .../Resources/Printer.Image.png | Bin 0 -> 738 bytes src/Greenshot.Addons/Resources/Save.Image.png | Bin 0 -> 489 bytes .../ViewModels/ExportNotificationViewModel.cs | 4 +- src/Greenshot.Addons/app.config | 20 - src/Greenshot.Addons/packages.config | 49 - .../InteropWindowCaptureExtensions.cs | 3 +- src/Greenshot.Core/Greenshot.Core.csproj | 120 +- src/Greenshot.Core/Properties/AssemblyInfo.cs | 35 - src/Greenshot.Core/Sources/DwmWindowSource.cs | 2 +- src/Greenshot.Core/app.config | 12 - src/Greenshot.Core/packages.config | 17 - .../Greenshot.Gfx.Experimental.csproj | 103 +- .../Properties/AssemblyInfo.cs | 35 - src/Greenshot.Gfx.Experimental/app.config | 21 +- .../packages.config | 7 - src/Greenshot.Gfx/BitmapHelper.cs | 5 +- src/Greenshot.Gfx/Greenshot.Gfx.csproj | 188 +- src/Greenshot.Gfx/Properties/AssemblyInfo.cs | 35 - src/Greenshot.Gfx/app.config | 17 +- src/Greenshot.Gfx/packages.config | 32 - src/Greenshot.PerformanceTests/App.config | 118 +- .../GfxPerformanceShort.cs | 49 + .../Greenshot.PerformanceTests.csproj | 308 +--- src/Greenshot.PerformanceTests/Program.cs | 7 +- .../Properties/AssemblyInfo.cs | 35 - .../packages.config | 94 - src/Greenshot.Tests/CaptureTests.cs | 5 +- src/Greenshot.Tests/FilterTests.cs | 1 + src/Greenshot.Tests/Greenshot.Tests.csproj | 402 +--- src/Greenshot.Tests/IniTests.cs | 18 +- .../Properties/AssemblyInfo.cs | 35 - src/Greenshot.Tests/UpdateTests.cs | 2 + src/Greenshot.Tests/app.config | 109 +- src/Greenshot.Tests/packages.config | 104 -- src/Greenshot.sln | 168 +- src/Greenshot/App.config | 28 - src/Greenshot/Components/CommandlineParser.cs | 8 +- src/Greenshot/Components/GreenshotClient.cs | 3 + src/Greenshot/Components/GreenshotServer.cs | 11 +- src/Greenshot/Components/HotkeyHandler.cs | 2 +- src/Greenshot/Components/MainFormStartup.cs | 2 +- src/Greenshot/Components/SoundHelper.cs | 9 +- src/Greenshot/Components/UpdateService.cs | 5 +- .../Configuration/IConfigTranslations.cs | 4 +- .../Configuration/IMetroConfiguration.cs | 39 +- .../Impl/ConfigTranslationsImpl.cs | 40 + .../Impl/MetroConfigurationImpl.cs | 34 + src/Greenshot/Configuration/LanguageKeys.cs | 65 - .../Destinations/ClipboardDestination.cs | 3 +- .../Destinations/EmailDestination.cs | 3 +- src/Greenshot/Destinations/FileDestination.cs | 3 +- .../Destinations/FileWithDialogDestination.cs | 3 +- .../Destinations/PrinterDestination.cs | 3 +- src/Greenshot/FodyWeavers.xml | 4 +- src/Greenshot/FodyWeavers.xsd | 21 + src/Greenshot/Forms/AboutForm.cs | 30 +- src/Greenshot/Forms/CaptureForm.cs | 5 +- .../Forms/ColorPickerToolStripButton.cs | 78 - .../Forms/LanguageDialog.Designer.cs | 1 - src/Greenshot/Forms/LanguageDialog.cs | 24 +- src/Greenshot/Forms/MainForm.cs | 61 +- src/Greenshot/Forms/MainForm.resx | 299 --- .../Forms/ToolStripMenuSelectList.cs | 7 +- src/Greenshot/Greenshot.csproj | 648 +------ src/Greenshot/GreenshotAutofacModule.cs | 56 +- src/Greenshot/Help/HelpFileLoader.cs | 2 +- src/Greenshot/Helpers/CaptureHelper.cs | 23 +- src/Greenshot/Helpers/MailHelper.cs | 9 +- src/Greenshot/Helpers/PrintHelper.cs | 15 +- src/Greenshot/Processors/TitleFixProcessor.cs | 7 +- .../{sounds => Resources}/camera.wav | Bin .../contextmenu_capturearea.Image.png | Bin 0 -> 272 bytes .../contextmenu_captureclipboard.Image.png | Bin 0 -> 764 bytes .../contextmenu_capturefullscreen.Image.png | Bin 0 -> 647 bytes .../contextmenu_capturelastregion.Image.png | Bin 0 -> 628 bytes .../contextmenu_capturewindow.Image.png | Bin 0 -> 653 bytes .../Resources/contextmenu_donate.Image.png | Bin 0 -> 740 bytes .../Resources/contextmenu_exit.Image.png | Bin 0 -> 440 bytes .../Resources/contextmenu_help.Image.png | Bin 0 -> 722 bytes .../Resources/contextmenu_openfile.Image.png | Bin 0 -> 810 bytes .../Resources/contextmenu_present.Image.png | Bin 0 -> 830 bytes .../Resources/contextmenu_settings.Image.png | Bin 0 -> 630 bytes src/Greenshot/Resources/icon.ico | Bin 0 -> 15227 bytes src/Greenshot/Sounds.resx | 399 ---- src/Greenshot/Startup.cs | 17 +- .../ViewModels/UiConfigViewModel.cs | 13 +- .../Views/CaptureConfigView.xaml | 4 +- .../ViewModels/UpdateNotificationViewModel.cs | 3 +- src/Greenshot/packages.config | 74 - src/Greenshot/tools/7zip/7za.exe | Bin 536064 -> 0 bytes .../tools/ILMerge/ILMerge License.rtf | 104 -- src/Greenshot/tools/ILMerge/ILMerge.doc | Bin 91136 -> 0 bytes src/Greenshot/tools/ILMerge/ILMerge.exe | Bin 684032 -> 0 bytes .../PortableApps.comInstaller/App/7zip/7z.dll | Bin 447488 -> 0 bytes .../PortableApps.comInstaller/App/7zip/7z.exe | Bin 73728 -> 0 bytes .../App/AppInfo/appicon.ico | Bin 97546 -> 0 bytes .../App/AppInfo/appicon_128.png | Bin 24934 -> 0 bytes .../App/AppInfo/appicon_16.png | Bin 969 -> 0 bytes .../App/AppInfo/appicon_32.png | Bin 2759 -> 0 bytes .../App/AppInfo/appinfo.ini | 29 - .../App/DefaultData/settings.ini | 1 - .../App/bin/MakeHeader.exe | Bin 96256 -> 0 bytes .../PortableApps.comInstallerHeader.bmp | Bin 25820 -> 0 bytes .../PortableApps.comInstallerHeaderRTL.bmp | Bin 25820 -> 0 bytes .../App/default_bits/appicon.ico | Bin 22486 -> 0 bytes .../App/default_bits/appicon_16.png | Bin 301 -> 0 bytes .../App/default_bits/appicon_32.png | Bin 466 -> 0 bytes .../App/default_bits/appinfo.ini | 12 - .../installer/PortableApps.comInstaller.bmp | Bin 154544 -> 0 bytes .../installer/PortableApps.comInstaller.ico | Bin 97546 -> 0 bytes .../installer/PortableApps.comInstaller.nsi | 1358 -------------- .../PortableApps.comInstallerConfig.nsh | Bin 2604 -> 0 bytes .../PortableApps.comInstallerCustom.nsh | 5 - ...PortableApps.comInstallerDumpLogToFile.nsh | 62 - .../Afrikaans.nsh | Bin 2584 -> 0 bytes .../Albanian.nsh | Bin 2222 -> 0 bytes .../Arabic.nsh | Bin 4316 -> 0 bytes .../Armenian.nsh | Bin 4036 -> 0 bytes .../Basque.nsh | Bin 2108 -> 0 bytes .../Belarusian.nsh | Bin 2114 -> 0 bytes .../Bosnian.nsh | Bin 2042 -> 0 bytes .../Breton.nsh | Bin 2028 -> 0 bytes .../Bulgarian.nsh | Bin 5036 -> 0 bytes .../Catalan.nsh | Bin 2152 -> 0 bytes .../Cibemba.nsh | Bin 4870 -> 0 bytes .../Croatian.nsh | Bin 2012 -> 0 bytes .../Czech.nsh | Bin 1946 -> 0 bytes .../Danish.nsh | Bin 2084 -> 0 bytes .../Dutch.nsh | Bin 9004 -> 0 bytes .../Efik.nsh | Bin 4750 -> 0 bytes .../English.nsh | Bin 4990 -> 0 bytes .../EnglishGB.nsh | Bin 5070 -> 0 bytes .../Esperanto.nsh | Bin 3796 -> 0 bytes .../Estonian.nsh | Bin 1832 -> 0 bytes .../Farsi.nsh | Bin 1996 -> 0 bytes .../Finnish.nsh | Bin 1998 -> 0 bytes .../French.nsh | Bin 5330 -> 0 bytes .../Galician.nsh | Bin 5060 -> 0 bytes .../Georgian.nsh | Bin 4910 -> 0 bytes .../German.nsh | Bin 9936 -> 0 bytes .../Greek.nsh | Bin 2220 -> 0 bytes .../Hebrew.nsh | Bin 4188 -> 0 bytes .../Hungarian.nsh | Bin 2272 -> 0 bytes .../Icelandic.nsh | Bin 2070 -> 0 bytes .../Igbo.nsh | Bin 4750 -> 0 bytes .../Indonesian.nsh | Bin 5054 -> 0 bytes .../Irish.nsh | Bin 2014 -> 0 bytes .../Italian.nsh | Bin 5458 -> 0 bytes .../Japanese.nsh | Bin 6798 -> 0 bytes .../Khmer.nsh | Bin 4790 -> 0 bytes .../Korean.nsh | Bin 1590 -> 0 bytes .../Kurdish.nsh | Bin 2042 -> 0 bytes .../Latvian.nsh | Bin 1958 -> 0 bytes .../Lithuanian.nsh | Bin 1966 -> 0 bytes .../Luxembourgish.nsh | Bin 2126 -> 0 bytes .../Macedonian.nsh | Bin 5496 -> 0 bytes .../Malagasy.nsh | Bin 4910 -> 0 bytes .../Malay.nsh | Bin 1854 -> 0 bytes .../Mongolian.nsh | Bin 2070 -> 0 bytes .../Norwegian.nsh | Bin 9266 -> 0 bytes .../NorwegianNynorsk.nsh | Bin 2168 -> 0 bytes .../Pashto.nsh | Bin 4830 -> 0 bytes .../Polish.nsh | Bin 4544 -> 0 bytes .../Portuguese.nsh | Bin 9418 -> 0 bytes .../PortugueseBR.nsh | Bin 9422 -> 0 bytes .../Romanian.nsh | Bin 4996 -> 0 bytes .../Russian.nsh | Bin 4838 -> 0 bytes .../Serbian.nsh | Bin 2042 -> 0 bytes .../SerbianLatin.nsh | Bin 2222 -> 0 bytes .../SimpChinese.nsh | Bin 6188 -> 0 bytes .../Slovak.nsh | Bin 2064 -> 0 bytes .../Slovenian.nsh | Bin 8730 -> 0 bytes .../Spanish.nsh | Bin 5058 -> 0 bytes .../SpanishInternational.nsh | Bin 5720 -> 0 bytes .../Swahili.nsh | Bin 4870 -> 0 bytes .../Swedish.nsh | Bin 4962 -> 0 bytes .../Thai.nsh | Bin 1784 -> 0 bytes .../TradChinese.nsh | Bin 3390 -> 0 bytes .../Turkish.nsh | Bin 4790 -> 0 bytes .../Ukrainian.nsh | Bin 4824 -> 0 bytes .../Uzbek.nsh | Bin 2028 -> 0 bytes .../Valencian.nsh | Bin 4950 -> 0 bytes .../Vietnamese.nsh | Bin 4990 -> 0 bytes .../Welsh.nsh | Bin 2014 -> 0 bytes .../Yoruba.nsh | Bin 4830 -> 0 bytes .../PortableApps.comInstallerMoveFiles.nsh | 104 -- .../PortableApps.comInstallerTBProgress.nsh | 59 - .../App/nsis/Bin/GenPat.exe | Bin 187392 -> 0 bytes .../App/nsis/Bin/LibraryLocal.exe | Bin 147456 -> 0 bytes .../App/nsis/Bin/MakeLangId.exe | Bin 42496 -> 0 bytes .../App/nsis/Bin/RegTool.bin | Bin 5632 -> 0 bytes .../App/nsis/Bin/zip2exe.exe | Bin 96768 -> 0 bytes .../App/nsis/COPYING | Bin 31266 -> 0 bytes .../App/nsis/Contrib/ExDll/exdll.h | 116 -- .../App/nsis/Contrib/Graphics/Checks/big.bmp | Bin 886 -> 0 bytes .../Contrib/Graphics/Checks/classic-cross.bmp | Bin 886 -> 0 bytes .../nsis/Contrib/Graphics/Checks/classic.bmp | Bin 886 -> 0 bytes .../nsis/Contrib/Graphics/Checks/colorful.bmp | Bin 2512 -> 0 bytes .../Contrib/Graphics/Checks/grey-cross.bmp | Bin 886 -> 0 bytes .../App/nsis/Contrib/Graphics/Checks/grey.bmp | Bin 886 -> 0 bytes .../nsis/Contrib/Graphics/Checks/modern.bmp | Bin 1652 -> 0 bytes .../Contrib/Graphics/Checks/red-round.bmp | Bin 886 -> 0 bytes .../App/nsis/Contrib/Graphics/Checks/red.bmp | Bin 886 -> 0 bytes .../Contrib/Graphics/Checks/simple-round.bmp | Bin 1616 -> 0 bytes .../Contrib/Graphics/Checks/simple-round2.bmp | Bin 1844 -> 0 bytes .../nsis/Contrib/Graphics/Checks/simple.bmp | Bin 1616 -> 0 bytes .../nsis/Contrib/Graphics/Header/nsis-r.bmp | Bin 9744 -> 0 bytes .../App/nsis/Contrib/Graphics/Header/nsis.bmp | Bin 9744 -> 0 bytes .../Contrib/Graphics/Header/orange-nsis.bmp | Bin 9740 -> 0 bytes .../Contrib/Graphics/Header/orange-r-nsis.bmp | Bin 9740 -> 0 bytes .../nsis/Contrib/Graphics/Header/orange-r.bmp | Bin 9744 -> 0 bytes .../Graphics/Header/orange-uninstall-nsis.bmp | Bin 9740 -> 0 bytes .../Header/orange-uninstall-r-nsis.bmp | Bin 9740 -> 0 bytes .../Graphics/Header/orange-uninstall-r.bmp | Bin 9744 -> 0 bytes .../Graphics/Header/orange-uninstall.bmp | Bin 9744 -> 0 bytes .../nsis/Contrib/Graphics/Header/orange.bmp | Bin 9744 -> 0 bytes .../App/nsis/Contrib/Graphics/Header/win.bmp | Bin 9744 -> 0 bytes .../Contrib/Graphics/Icons/arrow-install.ico | Bin 4710 -> 0 bytes .../Graphics/Icons/arrow-uninstall.ico | Bin 4710 -> 0 bytes .../Contrib/Graphics/Icons/arrow2-install.ico | Bin 4710 -> 0 bytes .../Graphics/Icons/arrow2-uninstall.ico | Bin 4710 -> 0 bytes .../Contrib/Graphics/Icons/box-install.ico | Bin 4710 -> 0 bytes .../Contrib/Graphics/Icons/box-uninstall.ico | Bin 4710 -> 0 bytes .../Graphics/Icons/classic-install.ico | Bin 1078 -> 0 bytes .../Graphics/Icons/classic-uninstall.ico | Bin 1078 -> 0 bytes .../Contrib/Graphics/Icons/llama-blue.ico | Bin 2238 -> 0 bytes .../Contrib/Graphics/Icons/llama-grey.ico | Bin 2238 -> 0 bytes .../Icons/modern-install-blue-full.ico | Bin 23558 -> 0 bytes .../Graphics/Icons/modern-install-blue.ico | Bin 13902 -> 0 bytes .../Icons/modern-install-colorful.ico | Bin 23558 -> 0 bytes .../Graphics/Icons/modern-install-full.ico | Bin 23558 -> 0 bytes .../Contrib/Graphics/Icons/modern-install.ico | Bin 13902 -> 0 bytes .../Icons/modern-uninstall-blue-full.ico | Bin 23558 -> 0 bytes .../Graphics/Icons/modern-uninstall-blue.ico | Bin 13902 -> 0 bytes .../Icons/modern-uninstall-colorful.ico | Bin 23558 -> 0 bytes .../Graphics/Icons/modern-uninstall-full.ico | Bin 23558 -> 0 bytes .../Graphics/Icons/modern-uninstall.ico | Bin 13902 -> 0 bytes .../Contrib/Graphics/Icons/nsis1-install.ico | Bin 1078 -> 0 bytes .../Graphics/Icons/nsis1-uninstall.ico | Bin 1078 -> 0 bytes .../Graphics/Icons/orange-install-nsis.ico | Bin 25214 -> 0 bytes .../Contrib/Graphics/Icons/orange-install.ico | Bin 25214 -> 0 bytes .../Graphics/Icons/orange-uninstall-nsis.ico | Bin 25214 -> 0 bytes .../Graphics/Icons/orange-uninstall.ico | Bin 25214 -> 0 bytes .../Contrib/Graphics/Icons/pixel-install.ico | Bin 5390 -> 0 bytes .../Graphics/Icons/pixel-uninstall.ico | Bin 5390 -> 0 bytes .../Contrib/Graphics/Icons/win-install.ico | Bin 1078 -> 0 bytes .../Contrib/Graphics/Icons/win-uninstall.ico | Bin 1078 -> 0 bytes .../nsis/Contrib/Graphics/Wizard/arrow.bmp | Bin 52576 -> 0 bytes .../nsis/Contrib/Graphics/Wizard/llama.bmp | Bin 26494 -> 0 bytes .../App/nsis/Contrib/Graphics/Wizard/nsis.bmp | Bin 26494 -> 0 bytes .../nsis/Contrib/Graphics/Wizard/nullsoft.bmp | Bin 26494 -> 0 bytes .../Contrib/Graphics/Wizard/orange-nsis.bmp | Bin 52572 -> 0 bytes .../Graphics/Wizard/orange-uninstall-nsis.bmp | Bin 52572 -> 0 bytes .../Graphics/Wizard/orange-uninstall.bmp | Bin 52576 -> 0 bytes .../nsis/Contrib/Graphics/Wizard/orange.bmp | Bin 52576 -> 0 bytes .../App/nsis/Contrib/Graphics/Wizard/win.bmp | Bin 26494 -> 0 bytes .../App/nsis/Contrib/Inetc/Example.nsi | 53 - .../App/nsis/Contrib/Inetc/Readme.htm | 140 -- .../App/nsis/Contrib/Inetc/auth_dlg.nsi | 31 - .../App/nsis/Contrib/Inetc/ftp_auth.nsi | 31 - .../App/nsis/Contrib/Inetc/head.nsi | 29 - .../App/nsis/Contrib/Inetc/headers.nsi | 31 - .../App/nsis/Contrib/Inetc/headers.php | 7 - .../App/nsis/Contrib/Inetc/https.nsi | 26 - .../App/nsis/Contrib/Inetc/inetc.cpp | 1622 ----------------- .../App/nsis/Contrib/Inetc/inetc.dsp | 175 -- .../App/nsis/Contrib/Inetc/inetc.dsw | 29 - .../App/nsis/Contrib/Inetc/inetc.rc | 170 -- .../App/nsis/Contrib/Inetc/inetc_local.nsi | 80 - .../App/nsis/Contrib/Inetc/post.nsi | 30 - .../App/nsis/Contrib/Inetc/post.php | 13 - .../App/nsis/Contrib/Inetc/post_file.nsi | 30 - .../App/nsis/Contrib/Inetc/post_file.php | 10 - .../App/nsis/Contrib/Inetc/post_form.html | 18 - .../App/nsis/Contrib/Inetc/put.nsi | 30 - .../App/nsis/Contrib/Inetc/put.php | 19 - .../App/nsis/Contrib/Inetc/recursive.nsi | 64 - .../App/nsis/Contrib/Inetc/redirect.nsi | 30 - .../App/nsis/Contrib/Inetc/redirect.php | 6 - .../App/nsis/Contrib/Inetc/resource.h | 47 - .../App/nsis/Contrib/Inetc/timeout.nsi | 31 - .../App/nsis/Contrib/Inetc/translate.nsi | 32 - .../App/nsis/Contrib/Inetc/wiki.txt | 169 -- .../nsis/Contrib/Language files/Afrikaans.nlf | Bin 10100 -> 0 bytes .../nsis/Contrib/Language files/Afrikaans.nsh | Bin 14270 -> 0 bytes .../nsis/Contrib/Language files/Albanian.nlf | Bin 10898 -> 0 bytes .../nsis/Contrib/Language files/Albanian.nsh | Bin 15728 -> 0 bytes .../nsis/Contrib/Language files/Arabic.nlf | Bin 9216 -> 0 bytes .../nsis/Contrib/Language files/Arabic.nsh | Bin 12822 -> 0 bytes .../nsis/Contrib/Language files/Armenian.nlf | Bin 9846 -> 0 bytes .../nsis/Contrib/Language files/Armenian.nsh | Bin 14150 -> 0 bytes .../nsis/Contrib/Language files/Basque.nlf | Bin 10858 -> 0 bytes .../nsis/Contrib/Language files/Basque.nsh | Bin 14418 -> 0 bytes .../Contrib/Language files/Belarusian.nlf | Bin 11534 -> 0 bytes .../Contrib/Language files/Belarusian.nsh | Bin 14794 -> 0 bytes .../nsis/Contrib/Language files/Bosnian.nlf | Bin 10906 -> 0 bytes .../nsis/Contrib/Language files/Bosnian.nsh | Bin 15304 -> 0 bytes .../nsis/Contrib/Language files/Breton.nlf | Bin 11234 -> 0 bytes .../nsis/Contrib/Language files/Breton.nsh | Bin 14936 -> 0 bytes .../nsis/Contrib/Language files/Bulgarian.nlf | Bin 11314 -> 0 bytes .../nsis/Contrib/Language files/Bulgarian.nsh | Bin 15256 -> 0 bytes .../nsis/Contrib/Language files/Catalan.nlf | Bin 11816 -> 0 bytes .../nsis/Contrib/Language files/Catalan.nsh | Bin 15928 -> 0 bytes .../nsis/Contrib/Language files/Cibemba.nlf | Bin 10626 -> 0 bytes .../nsis/Contrib/Language files/Cibemba.nsh | Bin 15298 -> 0 bytes .../nsis/Contrib/Language files/Croatian.nlf | Bin 10670 -> 0 bytes .../nsis/Contrib/Language files/Croatian.nsh | Bin 16328 -> 0 bytes .../App/nsis/Contrib/Language files/Czech.nlf | Bin 10632 -> 0 bytes .../App/nsis/Contrib/Language files/Czech.nsh | Bin 14778 -> 0 bytes .../nsis/Contrib/Language files/Danish.nlf | Bin 10782 -> 0 bytes .../nsis/Contrib/Language files/Danish.nsh | Bin 14718 -> 0 bytes .../App/nsis/Contrib/Language files/Dutch.nlf | Bin 10910 -> 0 bytes .../App/nsis/Contrib/Language files/Dutch.nsh | Bin 15848 -> 0 bytes .../App/nsis/Contrib/Language files/Efik.nlf | Bin 10646 -> 0 bytes .../App/nsis/Contrib/Language files/Efik.nsh | Bin 15288 -> 0 bytes .../nsis/Contrib/Language files/English.nlf | Bin 10260 -> 0 bytes .../nsis/Contrib/Language files/English.nsh | Bin 15382 -> 0 bytes .../nsis/Contrib/Language files/EnglishGB.nlf | Bin 10260 -> 0 bytes .../nsis/Contrib/Language files/EnglishGB.nsh | Bin 15410 -> 0 bytes .../nsis/Contrib/Language files/Esperanto.nlf | Bin 11060 -> 0 bytes .../nsis/Contrib/Language files/Esperanto.nsh | Bin 16122 -> 0 bytes .../nsis/Contrib/Language files/Estonian.nlf | Bin 10198 -> 0 bytes .../nsis/Contrib/Language files/Estonian.nsh | Bin 13658 -> 0 bytes .../App/nsis/Contrib/Language files/Farsi.nlf | Bin 10096 -> 0 bytes .../App/nsis/Contrib/Language files/Farsi.nsh | Bin 14426 -> 0 bytes .../nsis/Contrib/Language files/Finnish.nlf | Bin 10446 -> 0 bytes .../nsis/Contrib/Language files/Finnish.nsh | Bin 14454 -> 0 bytes .../nsis/Contrib/Language files/French.nlf | Bin 11858 -> 0 bytes .../nsis/Contrib/Language files/French.nsh | Bin 17238 -> 0 bytes .../nsis/Contrib/Language files/Galician.nlf | Bin 11148 -> 0 bytes .../nsis/Contrib/Language files/Galician.nsh | Bin 14760 -> 0 bytes .../nsis/Contrib/Language files/Georgian.nlf | Bin 10354 -> 0 bytes .../nsis/Contrib/Language files/Georgian.nsh | Bin 14134 -> 0 bytes .../nsis/Contrib/Language files/German.nlf | Bin 12014 -> 0 bytes .../nsis/Contrib/Language files/German.nsh | Bin 17532 -> 0 bytes .../App/nsis/Contrib/Language files/Greek.nlf | Bin 11676 -> 0 bytes .../App/nsis/Contrib/Language files/Greek.nsh | Bin 16200 -> 0 bytes .../nsis/Contrib/Language files/Hebrew.nlf | Bin 8962 -> 0 bytes .../nsis/Contrib/Language files/Hebrew.nsh | Bin 13988 -> 0 bytes .../App/nsis/Contrib/Language files/Hindi.nlf | Bin 10716 -> 0 bytes .../App/nsis/Contrib/Language files/Hindi.nsh | Bin 15992 -> 0 bytes .../nsis/Contrib/Language files/Hungarian.nlf | Bin 11180 -> 0 bytes .../nsis/Contrib/Language files/Hungarian.nsh | Bin 14834 -> 0 bytes .../nsis/Contrib/Language files/Icelandic.nlf | Bin 11140 -> 0 bytes .../nsis/Contrib/Language files/Icelandic.nsh | Bin 14676 -> 0 bytes .../App/nsis/Contrib/Language files/Igbo.nlf | Bin 11032 -> 0 bytes .../App/nsis/Contrib/Language files/Igbo.nsh | Bin 15398 -> 0 bytes .../Contrib/Language files/Indonesian.nlf | Bin 11432 -> 0 bytes .../Contrib/Language files/Indonesian.nsh | Bin 16606 -> 0 bytes .../App/nsis/Contrib/Language files/Irish.nlf | Bin 11600 -> 0 bytes .../App/nsis/Contrib/Language files/Irish.nsh | Bin 15098 -> 0 bytes .../nsis/Contrib/Language files/Italian.nlf | Bin 11760 -> 0 bytes .../nsis/Contrib/Language files/Italian.nsh | Bin 17414 -> 0 bytes .../nsis/Contrib/Language files/Japanese.nlf | Bin 8036 -> 0 bytes .../nsis/Contrib/Language files/Japanese.nsh | Bin 12188 -> 0 bytes .../App/nsis/Contrib/Language files/Khmer.nlf | 191 -- .../App/nsis/Contrib/Language files/Khmer.nsh | 129 -- .../nsis/Contrib/Language files/Korean.nlf | Bin 7528 -> 0 bytes .../nsis/Contrib/Language files/Korean.nsh | Bin 11628 -> 0 bytes .../nsis/Contrib/Language files/Kurdish.nlf | Bin 11428 -> 0 bytes .../nsis/Contrib/Language files/Kurdish.nsh | Bin 15384 -> 0 bytes .../nsis/Contrib/Language files/Latvian.nlf | Bin 10986 -> 0 bytes .../nsis/Contrib/Language files/Latvian.nsh | Bin 14956 -> 0 bytes .../Contrib/Language files/Lithuanian.nlf | Bin 10886 -> 0 bytes .../Contrib/Language files/Lithuanian.nsh | Bin 14452 -> 0 bytes .../Contrib/Language files/Luxembourgish.nlf | Bin 11604 -> 0 bytes .../Contrib/Language files/Luxembourgish.nsh | Bin 15622 -> 0 bytes .../Contrib/Language files/Macedonian.nlf | Bin 11370 -> 0 bytes .../Contrib/Language files/Macedonian.nsh | Bin 15220 -> 0 bytes .../nsis/Contrib/Language files/Malagasy.nlf | Bin 11504 -> 0 bytes .../nsis/Contrib/Language files/Malagasy.nsh | Bin 17280 -> 0 bytes .../App/nsis/Contrib/Language files/Malay.nlf | Bin 9944 -> 0 bytes .../App/nsis/Contrib/Language files/Malay.nsh | Bin 13844 -> 0 bytes .../nsis/Contrib/Language files/Mongolian.nlf | Bin 10230 -> 0 bytes .../nsis/Contrib/Language files/Mongolian.nsh | Bin 13978 -> 0 bytes .../nsis/Contrib/Language files/Norwegian.nlf | Bin 10412 -> 0 bytes .../nsis/Contrib/Language files/Norwegian.nsh | Bin 14684 -> 0 bytes .../Language files/NorwegianNynorsk.nlf | Bin 10332 -> 0 bytes .../Language files/NorwegianNynorsk.nsh | Bin 14226 -> 0 bytes .../nsis/Contrib/Language files/Pashto.nlf | Bin 9286 -> 0 bytes .../nsis/Contrib/Language files/Pashto.nsh | Bin 13678 -> 0 bytes .../nsis/Contrib/Language files/Polish.nlf | Bin 11148 -> 0 bytes .../nsis/Contrib/Language files/Polish.nsh | Bin 16720 -> 0 bytes .../Contrib/Language files/Portuguese.nlf | Bin 11064 -> 0 bytes .../Contrib/Language files/Portuguese.nsh | Bin 14868 -> 0 bytes .../Contrib/Language files/PortugueseBR.nlf | Bin 11014 -> 0 bytes .../Contrib/Language files/PortugueseBR.nsh | Bin 17116 -> 0 bytes .../nsis/Contrib/Language files/Romanian.nlf | Bin 12378 -> 0 bytes .../nsis/Contrib/Language files/Romanian.nsh | Bin 16308 -> 0 bytes .../nsis/Contrib/Language files/Russian.nlf | Bin 10662 -> 0 bytes .../nsis/Contrib/Language files/Russian.nsh | Bin 14434 -> 0 bytes .../nsis/Contrib/Language files/Serbian.nlf | Bin 10952 -> 0 bytes .../nsis/Contrib/Language files/Serbian.nsh | Bin 15070 -> 0 bytes .../Contrib/Language files/SerbianLatin.nlf | Bin 11222 -> 0 bytes .../Contrib/Language files/SerbianLatin.nsh | Bin 15210 -> 0 bytes .../nsis/Contrib/Language files/Sesotho.nlf | Bin 12260 -> 0 bytes .../nsis/Contrib/Language files/Sesotho.nsh | Bin 17370 -> 0 bytes .../Contrib/Language files/SimpChinese.nlf | Bin 6962 -> 0 bytes .../Contrib/Language files/SimpChinese.nsh | Bin 10810 -> 0 bytes .../nsis/Contrib/Language files/Slovak.nlf | Bin 12216 -> 0 bytes .../nsis/Contrib/Language files/Slovak.nsh | Bin 17016 -> 0 bytes .../nsis/Contrib/Language files/Slovenian.nlf | Bin 10592 -> 0 bytes .../nsis/Contrib/Language files/Slovenian.nsh | Bin 15778 -> 0 bytes .../nsis/Contrib/Language files/Spanish.nlf | Bin 11364 -> 0 bytes .../nsis/Contrib/Language files/Spanish.nsh | Bin 16278 -> 0 bytes .../Language files/SpanishInternational.nlf | Bin 11376 -> 0 bytes .../Language files/SpanishInternational.nsh | Bin 16402 -> 0 bytes .../nsis/Contrib/Language files/Sundanese.nlf | 191 -- .../nsis/Contrib/Language files/Sundanese.nsh | 129 -- .../nsis/Contrib/Language files/Swahili.nlf | Bin 11228 -> 0 bytes .../nsis/Contrib/Language files/Swahili.nsh | Bin 15828 -> 0 bytes .../nsis/Contrib/Language files/Swedish.nlf | Bin 10878 -> 0 bytes .../nsis/Contrib/Language files/Swedish.nsh | Bin 14768 -> 0 bytes .../App/nsis/Contrib/Language files/Tamil.nlf | Bin 11342 -> 0 bytes .../App/nsis/Contrib/Language files/Tamil.nsh | Bin 16746 -> 0 bytes .../App/nsis/Contrib/Language files/Thai.nlf | Bin 10172 -> 0 bytes .../App/nsis/Contrib/Language files/Thai.nsh | Bin 14466 -> 0 bytes .../Contrib/Language files/TradChinese.nlf | Bin 7032 -> 0 bytes .../Contrib/Language files/TradChinese.nsh | Bin 10856 -> 0 bytes .../nsis/Contrib/Language files/Turkish.nlf | Bin 11168 -> 0 bytes .../nsis/Contrib/Language files/Turkish.nsh | Bin 15560 -> 0 bytes .../App/nsis/Contrib/Language files/Twi.nlf | Bin 9908 -> 0 bytes .../App/nsis/Contrib/Language files/Twi.nsh | Bin 15446 -> 0 bytes .../nsis/Contrib/Language files/Ukrainian.nlf | Bin 11374 -> 0 bytes .../nsis/Contrib/Language files/Ukrainian.nsh | Bin 14394 -> 0 bytes .../nsis/Contrib/Language files/Uyghur.nlf | 191 -- .../nsis/Contrib/Language files/Uyghur.nsh | 129 -- .../App/nsis/Contrib/Language files/Uzbek.nlf | Bin 11342 -> 0 bytes .../App/nsis/Contrib/Language files/Uzbek.nsh | Bin 15208 -> 0 bytes .../nsis/Contrib/Language files/Valencian.nlf | Bin 10844 -> 0 bytes .../nsis/Contrib/Language files/Valencian.nsh | Bin 12628 -> 0 bytes .../Contrib/Language files/Vietnamese.nlf | Bin 10494 -> 0 bytes .../Contrib/Language files/Vietnamese.nsh | Bin 15690 -> 0 bytes .../App/nsis/Contrib/Language files/Welsh.nlf | Bin 9830 -> 0 bytes .../App/nsis/Contrib/Language files/Welsh.nsh | Bin 14046 -> 0 bytes .../nsis/Contrib/Language files/Yoruba.nlf | Bin 10368 -> 0 bytes .../nsis/Contrib/Language files/Yoruba.nsh | Bin 15322 -> 0 bytes .../App/nsis/Contrib/Language files/Zulu.nlf | Bin 11008 -> 0 bytes .../App/nsis/Contrib/Language files/Zulu.nsh | Bin 16118 -> 0 bytes .../nsis/Contrib/Modern UI 2/Deprecated.nsh | Bin 3074 -> 0 bytes .../nsis/Contrib/Modern UI 2/Interface.nsh | Bin 15340 -> 0 bytes .../nsis/Contrib/Modern UI 2/Localization.nsh | Bin 9724 -> 0 bytes .../App/nsis/Contrib/Modern UI 2/MUI2.nsh | Bin 4554 -> 0 bytes .../App/nsis/Contrib/Modern UI 2/Pages.nsh | Bin 8462 -> 0 bytes .../Contrib/Modern UI 2/Pages/Components.nsh | Bin 13998 -> 0 bytes .../Contrib/Modern UI 2/Pages/Directory.nsh | Bin 7046 -> 0 bytes .../nsis/Contrib/Modern UI 2/Pages/Finish.nsh | Bin 34012 -> 0 bytes .../Modern UI 2/Pages/InstallFiles.nsh | Bin 9948 -> 0 bytes .../Contrib/Modern UI 2/Pages/License.nsh | Bin 8990 -> 0 bytes .../Contrib/Modern UI 2/Pages/StartMenu.nsh | Bin 16046 -> 0 bytes .../Modern UI 2/Pages/UninstallConfirm.nsh | Bin 4548 -> 0 bytes .../Contrib/Modern UI 2/Pages/Welcome.nsh | Bin 10356 -> 0 bytes .../App/nsis/Contrib/Modern UI/System.nsh | Bin 133086 -> 0 bytes .../App/nsis/Contrib/Modern UI/ioSpecial.ini | Bin 424 -> 0 bytes .../App/nsis/Contrib/SelfDel/nsis_ansi/api.h | 83 - .../Contrib/SelfDel/nsis_ansi/pluginapi.h | 74 - .../Contrib/SelfDel/nsis_ansi/pluginapi.lib | Bin 4668 -> 0 bytes .../nsis/Contrib/SelfDel/nsis_unicode/api.h | 83 - .../Contrib/SelfDel/nsis_unicode/nsis_tchar.h | 214 --- .../Contrib/SelfDel/nsis_unicode/pluginapi.h | 101 - .../SelfDel/nsis_unicode/pluginapi.lib | Bin 6902 -> 0 bytes .../App/nsis/Contrib/SelfDel/resource.h | 14 - .../App/nsis/Contrib/SelfDel/selfdel.c | 324 ---- .../App/nsis/Contrib/SelfDel/selfdel.dsp | 110 -- .../App/nsis/Contrib/SelfDel/selfdel.dsw | 29 - .../App/nsis/Contrib/SelfDel/selfdel.rc | Bin 4598 -> 0 bytes .../App/nsis/Contrib/SelfDel/selfdel.sln | 23 - .../App/nsis/Contrib/SelfDel/selfdel.vcxproj | 184 -- .../Contrib/SelfDel/selfdel.vcxproj.filters | 12 - .../App/nsis/Contrib/UIs/default.exe | Bin 6144 -> 0 bytes .../App/nsis/Contrib/UIs/modern.exe | Bin 6656 -> 0 bytes .../App/nsis/Contrib/UIs/modern_headerbmp.exe | Bin 4608 -> 0 bytes .../nsis/Contrib/UIs/modern_headerbmpr.exe | Bin 4608 -> 0 bytes .../App/nsis/Contrib/UIs/modern_nodesc.exe | Bin 4096 -> 0 bytes .../App/nsis/Contrib/UIs/modern_smalldesc.exe | Bin 4096 -> 0 bytes .../App/nsis/Contrib/UIs/sdbarker_tiny.exe | Bin 6656 -> 0 bytes .../App/nsis/Contrib/zip2exe/Base.nsh | Bin 3882 -> 0 bytes .../App/nsis/Contrib/zip2exe/Classic.nsh | Bin 238 -> 0 bytes .../App/nsis/Contrib/zip2exe/Modern.nsh | Bin 426 -> 0 bytes .../App/nsis/Include/Colors.nsh | Bin 3718 -> 0 bytes .../App/nsis/Include/FileFunc.nsh | Bin 81138 -> 0 bytes .../App/nsis/Include/InstallOptions.nsh | Bin 9338 -> 0 bytes .../App/nsis/Include/LangFile.nsh | Bin 5612 -> 0 bytes .../App/nsis/Include/Library.nsh | Bin 41596 -> 0 bytes .../App/nsis/Include/LogicLib.nsh | Bin 60288 -> 0 bytes .../App/nsis/Include/MUI.nsh | Bin 102 -> 0 bytes .../App/nsis/Include/MUI2.nsh | Bin 102 -> 0 bytes .../App/nsis/Include/Memento.nsh | Bin 21256 -> 0 bytes .../App/nsis/Include/MultiUser.nsh | Bin 26718 -> 0 bytes .../App/nsis/Include/NewTextReplace.nsh | 77 - .../App/nsis/Include/Registry.nsh | 195 -- .../App/nsis/Include/Sections.nsh | Bin 11972 -> 0 bytes .../App/nsis/Include/StrFunc.nsh | Bin 96376 -> 0 bytes .../App/nsis/Include/TBProgress.nsh | Bin 4000 -> 0 bytes .../App/nsis/Include/TextFunc.nsh | Bin 48828 -> 0 bytes .../App/nsis/Include/TextReplace.nsh | 77 - .../App/nsis/Include/UpgradeDLL.nsh | Bin 9988 -> 0 bytes .../App/nsis/Include/Util.nsh | Bin 3502 -> 0 bytes .../App/nsis/Include/VB6RunTime.nsh | Bin 6938 -> 0 bytes .../App/nsis/Include/VPatchLib.nsh | Bin 1450 -> 0 bytes .../App/nsis/Include/Win/WinDef.nsh | 74 - .../App/nsis/Include/Win/WinError.nsh | 64 - .../App/nsis/Include/Win/WinNT.nsh | 209 --- .../App/nsis/Include/Win/WinUser.nsh | 199 -- .../App/nsis/Include/WinCore.nsh | Bin 17026 -> 0 bytes .../App/nsis/Include/WinMessages.nsh | Bin 48476 -> 0 bytes .../App/nsis/Include/WinVer.nsh | Bin 27858 -> 0 bytes .../App/nsis/Include/WordFunc.nsh | Bin 87284 -> 0 bytes .../App/nsis/Include/dialogs.nsh | 56 - .../App/nsis/Include/nsDialogs.nsh | Bin 46664 -> 0 bytes .../App/nsis/Include/x64.nsh | Bin 2718 -> 0 bytes .../App/nsis/Plugins/AdvSplash.dll | Bin 5632 -> 0 bytes .../App/nsis/Plugins/Banner.dll | Bin 3584 -> 0 bytes .../App/nsis/Plugins/BgImage.dll | Bin 7680 -> 0 bytes .../App/nsis/Plugins/Dialer.dll | Bin 3584 -> 0 bytes .../App/nsis/Plugins/EmbeddedLists.dll | Bin 18944 -> 0 bytes .../App/nsis/Plugins/EnumINI.dll | Bin 3584 -> 0 bytes .../App/nsis/Plugins/FindProcDLL.dll | Bin 28160 -> 0 bytes .../App/nsis/Plugins/InstallOptions.dll | Bin 15360 -> 0 bytes .../App/nsis/Plugins/KillProcDLL.dll | Bin 36864 -> 0 bytes .../App/nsis/Plugins/LangDLL.dll | Bin 5120 -> 0 bytes .../App/nsis/Plugins/Math.dll | Bin 147456 -> 0 bytes .../App/nsis/Plugins/MoreInfo.dll | Bin 7168 -> 0 bytes .../App/nsis/Plugins/NSISdl.dll | Bin 15872 -> 0 bytes .../App/nsis/Plugins/RealProgress.dll | Bin 28071 -> 0 bytes .../App/nsis/Plugins/SelfDel.dll | Bin 5632 -> 0 bytes .../App/nsis/Plugins/Splash.dll | Bin 4096 -> 0 bytes .../App/nsis/Plugins/StartMenu.dll | Bin 7680 -> 0 bytes .../App/nsis/Plugins/System.dll | Bin 11264 -> 0 bytes .../App/nsis/Plugins/TypeLib.dll | Bin 3072 -> 0 bytes .../App/nsis/Plugins/UserInfo.dll | Bin 4096 -> 0 bytes .../App/nsis/Plugins/VPatch.dll | Bin 7680 -> 0 bytes .../App/nsis/Plugins/dialogsEx.dll | Bin 12288 -> 0 bytes .../App/nsis/Plugins/execDos.dll | Bin 5632 -> 0 bytes .../App/nsis/Plugins/inetc.dll | Bin 24064 -> 0 bytes .../App/nsis/Plugins/md5dll.dll | Bin 8704 -> 0 bytes .../App/nsis/Plugins/newadvsplash.dll | Bin 8704 -> 0 bytes .../App/nsis/Plugins/newtextreplace.dll | Bin 11776 -> 0 bytes .../App/nsis/Plugins/nsDialogs.dll | Bin 9728 -> 0 bytes .../App/nsis/Plugins/nsExec.dll | Bin 6144 -> 0 bytes .../App/nsis/Plugins/registry.dll | Bin 29696 -> 0 bytes .../App/nsis/Plugins/w7tbp.dll | Bin 2560 -> 0 bytes .../App/nsis/Stubs/bzip2 | Bin 59392 -> 0 bytes .../App/nsis/Stubs/bzip2_solid | Bin 59904 -> 0 bytes .../App/nsis/Stubs/lzma | Bin 49664 -> 0 bytes .../App/nsis/Stubs/lzma_solid | Bin 50176 -> 0 bytes .../App/nsis/Stubs/uninst | Bin 766 -> 0 bytes .../App/nsis/Stubs/zlib | Bin 51200 -> 0 bytes .../App/nsis/Stubs/zlib_solid | Bin 51712 -> 0 bytes .../App/nsis/makensis.exe | Bin 561664 -> 0 bytes .../App/nsis/nsisconf.nsh | Bin 3454 -> 0 bytes .../Data/settings.ini | 1 - .../Other/Help/images/donation_button.png | Bin 1742 -> 0 bytes .../Other/Help/images/favicon.ico | Bin 1150 -> 0 bytes .../Help/images/help_background_footer.png | Bin 168 -> 0 bytes .../Help/images/help_background_header.png | Bin 269 -> 0 bytes .../Other/Help/images/help_logo_top.png | Bin 2588 -> 0 bytes .../Other/Source/InstallerWizard.nsi | 1141 ------------ .../Other/Source/InstallerWizardForm.ini | Bin 608 -> 0 bytes .../Other/Source/License.txt | 344 ---- .../Other/Source/MoveFiles.nsh | 104 -- .../Other/Source/ReadINIStrWithDefault.nsh | 55 - .../Other/Source/Readme.txt | 41 - .../Other/Source/TBProgress.nsh | 59 - .../Other/Source/header.bmp | Bin 25820 -> 0 bytes .../Other/Source/header_rtl.bmp | Bin 25820 -> 0 bytes .../Other/Source/welcomefinish.bmp | Bin 154544 -> 0 bytes .../PortableApps.comInstaller.exe | Bin 207568 -> 0 bytes .../tools/PortableApps.comInstaller/help.html | 175 -- src/Greenshot/tools/WinSCP/WinSCP.com | Bin 293272 -> 0 bytes src/Greenshot/tools/WinSCP/WinSCP.exe | Bin 10664280 -> 0 bytes src/Greenshot/tools/WinSCP/WinSCPnet.dll | Bin 119728 -> 0 bytes src/Greenshot/tools/WinSCP/license-dotnet.txt | 373 ---- src/Greenshot/tools/WinSCP/license.txt | 722 -------- src/Greenshot/tools/WinSCP/readme.txt | 11 - .../tools/WinSCP/readme_automation.txt | 19 - src/NuGet.Config | 3 +- src/version.json | 22 + 1008 files changed, 5761 insertions(+), 23163 deletions(-) delete mode 100644 src/CommonProject.properties create mode 100644 src/Directory.Build.props rename src/Greenshot.Addon.Box/{ => Configuration}/IBoxConfiguration.cs (90%) rename src/Greenshot.Addon.Box/{ => Configuration}/IBoxLanguage.cs (87%) create mode 100644 src/Greenshot.Addon.Box/Configuration/Impl/BoxConfigurationImpl.cs create mode 100644 src/Greenshot.Addon.Box/Configuration/Impl/BoxLanguageImpl.cs create mode 100644 src/Greenshot.Addon.Box/FodyWeavers.xml create mode 100644 src/Greenshot.Addon.Box/FodyWeavers.xsd delete mode 100644 src/Greenshot.Addon.Box/Properties/AssemblyInfo.cs delete mode 100644 src/Greenshot.Addon.Box/packages.config rename src/Greenshot.Addon.Confluence/{ => Configuration}/IConfluenceConfiguration.cs (90%) rename src/Greenshot.Addon.Confluence/{ => Configuration}/IConfluenceLanguage.cs (89%) create mode 100644 src/Greenshot.Addon.Confluence/Configuration/Impl/ConfluenceConfigurationImpl.cs create mode 100644 src/Greenshot.Addon.Confluence/Configuration/Impl/ConfluenceLanguageImpl.cs create mode 100644 src/Greenshot.Addon.Confluence/FodyWeavers.xsd delete mode 100644 src/Greenshot.Addon.Confluence/Properties/AssemblyInfo.cs delete mode 100644 src/Greenshot.Addon.Confluence/packages.config rename src/Greenshot.Addon.Dropbox/{ => Configuration}/IDropboxConfiguration.cs (89%) rename src/Greenshot.Addon.Dropbox/{ => Configuration}/IDropboxLanguage.cs (86%) create mode 100644 src/Greenshot.Addon.Dropbox/Configuration/Impl/DropboxConfigurationImpl.cs create mode 100644 src/Greenshot.Addon.Dropbox/Configuration/Impl/DropboxLanguageImpl.cs create mode 100644 src/Greenshot.Addon.Dropbox/FodyWeavers.xml create mode 100644 src/Greenshot.Addon.Dropbox/FodyWeavers.xsd delete mode 100644 src/Greenshot.Addon.Dropbox/Properties/AssemblyInfo.cs delete mode 100644 src/Greenshot.Addon.Dropbox/packages.config rename src/Greenshot.Addon.ExternalCommand/{ => Configuration}/ExternalCommandConfigurationExtensions.cs (96%) rename src/Greenshot.Addon.ExternalCommand/{ => Configuration}/IExternalCommandConfiguration.cs (85%) rename src/Greenshot.Addon.ExternalCommand/{ => Configuration}/IExternalCommandLanguage.cs (84%) create mode 100644 src/Greenshot.Addon.ExternalCommand/Configuration/Impl/ExternalCommandConfigurationImpl.cs create mode 100644 src/Greenshot.Addon.ExternalCommand/Configuration/Impl/ExternalCommandLanguageImpl.cs create mode 100644 src/Greenshot.Addon.ExternalCommand/FodyWeavers.xml create mode 100644 src/Greenshot.Addon.ExternalCommand/FodyWeavers.xsd delete mode 100644 src/Greenshot.Addon.ExternalCommand/Properties/AssemblyInfo.cs delete mode 100644 src/Greenshot.Addon.ExternalCommand/packages.config rename src/Greenshot.Addon.Flickr/{ => Configuration}/IFlickrConfiguration.cs (74%) rename src/Greenshot.Addon.Flickr/{ => Configuration}/IFlickrLanguage.cs (84%) create mode 100644 src/Greenshot.Addon.Flickr/Configuration/Impl/FlickrConfigurationImpl.cs create mode 100644 src/Greenshot.Addon.Flickr/Configuration/Impl/FlickrLanguageImpl.cs rename src/{Greenshot.Addon.Office/OfficeInterop/MsoScaleFrom.cs => Greenshot.Addon.Flickr/Configuration/SafetyLevel.cs} (75%) create mode 100644 src/Greenshot.Addon.Flickr/FodyWeavers.xml create mode 100644 src/Greenshot.Addon.Flickr/FodyWeavers.xsd delete mode 100644 src/Greenshot.Addon.Flickr/Properties/AssemblyInfo.cs delete mode 100644 src/Greenshot.Addon.Flickr/packages.config rename src/Greenshot.Addon.GooglePhotos/{ => Configuration}/IGooglePhotosConfiguration.cs (87%) create mode 100644 src/Greenshot.Addon.GooglePhotos/Configuration/IGooglePhotosLanguage.cs create mode 100644 src/Greenshot.Addon.GooglePhotos/Configuration/Impl/GooglePhotosConfigurationImpl.cs create mode 100644 src/Greenshot.Addon.GooglePhotos/Configuration/Impl/GooglePhotosLanguageImpl.cs create mode 100644 src/Greenshot.Addon.GooglePhotos/FodyWeavers.xml create mode 100644 src/Greenshot.Addon.GooglePhotos/FodyWeavers.xsd delete mode 100644 src/Greenshot.Addon.GooglePhotos/IGooglePhotosLanguage.cs delete mode 100644 src/Greenshot.Addon.GooglePhotos/Properties/AssemblyInfo.cs delete mode 100644 src/Greenshot.Addon.GooglePhotos/packages.config rename src/Greenshot.Addon.Imgur/{ => Configuration}/IImgurConfiguration.cs (92%) rename src/Greenshot.Addon.Imgur/{ => Configuration}/IImgurLanguage.cs (84%) create mode 100644 src/Greenshot.Addon.Imgur/Configuration/Impl/ImgurConfigurationImpl.cs create mode 100644 src/Greenshot.Addon.Imgur/Configuration/Impl/ImgurLanguageImpl.cs create mode 100644 src/Greenshot.Addon.Imgur/FodyWeavers.xml create mode 100644 src/Greenshot.Addon.Imgur/FodyWeavers.xsd delete mode 100644 src/Greenshot.Addon.Imgur/Properties/AssemblyInfo.cs delete mode 100644 src/Greenshot.Addon.Imgur/packages.config delete mode 100644 src/Greenshot.Addon.InternetExplorer/Properties/AssemblyInfo.cs delete mode 100644 src/Greenshot.Addon.InternetExplorer/packages.config rename src/Greenshot.Addon.Jira/{ => Configuration}/IJiraConfiguration.cs (88%) rename src/Greenshot.Addon.Jira/{ => Configuration}/IJiraLanguage.cs (92%) create mode 100644 src/Greenshot.Addon.Jira/Configuration/Impl/JiraConfigurationImpl.cs create mode 100644 src/Greenshot.Addon.Jira/Configuration/Impl/JiraLanguageImpl.cs create mode 100644 src/Greenshot.Addon.Jira/FodyWeavers.xsd delete mode 100644 src/Greenshot.Addon.Jira/packages.config create mode 100644 src/Greenshot.Addon.LegacyEditor/Configuration/Impl/EditorConfigurationImpl.cs create mode 100644 src/Greenshot.Addon.LegacyEditor/Configuration/Impl/EditorLanguageImpl.cs delete mode 100644 src/Greenshot.Addon.LegacyEditor/Controls/ColorDialog.resx delete mode 100644 src/Greenshot.Addon.LegacyEditor/Drawing/Fields/IFieldHolder.cs create mode 100644 src/Greenshot.Addon.LegacyEditor/FodyWeavers.xml create mode 100644 src/Greenshot.Addon.LegacyEditor/FodyWeavers.xsd delete mode 100644 src/Greenshot.Addon.LegacyEditor/Forms/ImageEditorForm.resx delete mode 100644 src/Greenshot.Addon.LegacyEditor/Properties/AssemblyInfo.cs create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/addEllipseToolStripMenuItem.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/addRectangleToolStripMenuItem.Image.png rename src/Greenshot.Addon.LegacyEditor/{icons/balloon.png => Resources/addSpeechBubbleToolStripMenuItem.Image.png} (100%) create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/addTextBoxToolStripMenuItem.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/areaHighlightMenuItem.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/arrowHeadsDropDownButton.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/blurToolStripMenuItem.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/btnAlignBottom.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/btnAlignCenter.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/btnAlignLeft.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/btnAlignMiddle.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/btnAlignRight.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/btnAlignTop.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/btnArrow.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/btnCancel.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/btnClipboard.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/btnConfirm.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/btnCopy.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/btnCrop.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/btnCursor.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/btnCut.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/btnDelete.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/btnEllipse.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/btnFillColor.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/btnFreehand.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/btnHelp.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/btnHighlight.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/btnLine.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/btnLineColor.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/btnObfuscate.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/btnPaste.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/btnPrint.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/btnRect.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/btnRedo.Image.png rename src/Greenshot.Addon.LegacyEditor/{icons/resize.png => Resources/btnResize.Image.png} (100%) create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/btnSave.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/btnSettings.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/btnStepLabel.Image.png rename src/Greenshot.Addon.LegacyEditor/{icons/notification-counter-01.png => Resources/btnStepLabel01.Image.png} (100%) rename src/Greenshot.Addon.LegacyEditor/{icons/notification-counter-02.png => Resources/btnStepLabel02.Image.png} (100%) rename src/Greenshot.Addon.LegacyEditor/{icons/notification-counter-03.png => Resources/btnStepLabel03.Image.png} (100%) rename src/Greenshot.Addon.LegacyEditor/{icons/notification-counter-04.png => Resources/btnStepLabel04.Image.png} (100%) rename src/Greenshot.Addon.LegacyEditor/{icons/notification-counter-05.png => Resources/btnStepLabel05.Image.png} (100%) rename src/Greenshot.Addon.LegacyEditor/{icons/notification-counter-06.png => Resources/btnStepLabel06.Image.png} (100%) rename src/Greenshot.Addon.LegacyEditor/{icons/notification-counter-07.png => Resources/btnStepLabel07.Image.png} (100%) rename src/Greenshot.Addon.LegacyEditor/{icons/notification-counter-08.png => Resources/btnStepLabel08.Image.png} (100%) rename src/Greenshot.Addon.LegacyEditor/{icons/notification-counter-09.png => Resources/btnStepLabel09.Image.png} (100%) rename src/Greenshot.Addon.LegacyEditor/{icons/notification-counter-10.png => Resources/btnStepLabel10.Image.png} (100%) rename src/Greenshot.Addon.LegacyEditor/{icons/notification-counter-11.png => Resources/btnStepLabel11.Image.png} (100%) rename src/Greenshot.Addon.LegacyEditor/{icons/notification-counter-12.png => Resources/btnStepLabel12.Image.png} (100%) rename src/Greenshot.Addon.LegacyEditor/{icons/notification-counter-13.png => Resources/btnStepLabel13.Image.png} (100%) rename src/Greenshot.Addon.LegacyEditor/{icons/notification-counter-14.png => Resources/btnStepLabel14.Image.png} (100%) rename src/Greenshot.Addon.LegacyEditor/{icons/notification-counter-15.png => Resources/btnStepLabel15.Image.png} (100%) rename src/Greenshot.Addon.LegacyEditor/{icons/notification-counter-16.png => Resources/btnStepLabel16.Image.png} (100%) rename src/Greenshot.Addon.LegacyEditor/{icons/notification-counter-17.png => Resources/btnStepLabel17.Image.png} (100%) rename src/Greenshot.Addon.LegacyEditor/{icons/notification-counter-18.png => Resources/btnStepLabel18.Image.png} (100%) rename src/Greenshot.Addon.LegacyEditor/{icons/notification-counter-19.png => Resources/btnStepLabel19.Image.png} (100%) rename src/Greenshot.Addon.LegacyEditor/{icons/notification-counter-20-plus.png => Resources/btnStepLabel20+.Image.png} (100%) rename src/Greenshot.Addon.LegacyEditor/{icons/notification-counter-20.png => Resources/btnStepLabel20.Image.png} (100%) create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/btnText.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/btnUndo.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/closeToolStripMenuItem.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/copyToolStripMenuItem.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/cutToolStripMenuItem.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/drawArrowToolStripMenuItem.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/drawFreehandToolStripMenuItem.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/drawLineToolStripMenuItem.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/fontBoldButton.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/fontItalicButton.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/grayscaleHighlightMenuItem.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/helpToolStripMenuItem1.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/highlightModeButton.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/magnifyMenuItem.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/obfuscateModeButton.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/pasteToolStripMenuItem.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/pipette.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/pixelizeToolStripMenuItem.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/preferencesToolStripMenuItem.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/redoToolStripMenuItem.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/removeObjectToolStripMenuItem.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/rotateCcwToolstripButton.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/rotateCwToolstripButton.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/shadowButton.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/textHighlightMenuItem.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/toolStripSplitButton1.Image.png create mode 100644 src/Greenshot.Addon.LegacyEditor/Resources/undoToolStripMenuItem.Image.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/arrow_redo.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/arrow_rollback.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/arrow_undo.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/cancel.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/cross.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/cut.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/delete.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/filter_blur.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/filter_pixelate.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/folder-open-image.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/folder_explore.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/font_color.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/freehand.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/heart.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/help.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/highlighter.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/layer-rotate-left.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/layer-rotate.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/page_copy.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/palette.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/picture_save.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/picture_saveas.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/picture_to_clipboard.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/pipette.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/printer.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/propertyitemcontainer.gif delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/redo.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/ruler-crop.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/shadow.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/shape_arrow_add.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/shape_arrowheads.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/shape_copy.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/shape_ellipse_add.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/shape_ellipse_delete.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/shape_line.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/shape_paste.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/shape_square_add.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/shape_square_bordercolor.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/shape_square_delete.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/shape_square_fillcolor.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/text_bold.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/text_dropcaps.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/text_italic.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/text_underline.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/textfield_delete.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/undo.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/wand-hat.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/wrench.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/wrench_orange.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/icons/zoom.png delete mode 100644 src/Greenshot.Addon.LegacyEditor/packages.config rename src/Greenshot.Addon.Lutim/{ => Configuration}/ILutimConfiguration.cs (92%) rename src/Greenshot.Addon.Lutim/{ => Configuration}/ILutimLanguage.cs (94%) create mode 100644 src/Greenshot.Addon.Lutim/Configuration/Impl/LutimConfigurationImpl.cs create mode 100644 src/Greenshot.Addon.Lutim/Configuration/Impl/LutimLanguageImpl.cs create mode 100644 src/Greenshot.Addon.Lutim/FodyWeavers.xml create mode 100644 src/Greenshot.Addon.Lutim/FodyWeavers.xsd delete mode 100644 src/Greenshot.Addon.Lutim/Properties/AssemblyInfo.cs delete mode 100644 src/Greenshot.Addon.Lutim/packages.config rename src/Greenshot.Addon.OCR/{IOCRConfiguration.cs => Configuration/IOcrConfiguration.cs} (83%) rename src/Greenshot.Addon.OCR/{ => Configuration}/IOcrLanguage.cs (81%) create mode 100644 src/Greenshot.Addon.OCR/Configuration/Impl/OcrConfigurationImpl.cs create mode 100644 src/Greenshot.Addon.OCR/Configuration/Impl/OcrLanguageImpl.cs create mode 100644 src/Greenshot.Addon.OCR/FodyWeavers.xml create mode 100644 src/Greenshot.Addon.OCR/FodyWeavers.xsd delete mode 100644 src/Greenshot.Addon.OCR/Properties/AssemblyInfo.cs delete mode 100644 src/Greenshot.Addon.OCR/packages.config delete mode 100644 src/Greenshot.Addon.OcrCommand/Properties/AssemblyInfo.cs rename src/Greenshot.Addon.Office/{ => Configuration}/IOfficeConfiguration.cs (90%) rename src/Greenshot.Addon.Office/{ => Configuration}/IOfficeLanguage.cs (83%) create mode 100644 src/Greenshot.Addon.Office/Configuration/Impl/OfficeConfigurationImpl.cs create mode 100644 src/Greenshot.Addon.Office/Configuration/Impl/OfficeLanguageImpl.cs create mode 100644 src/Greenshot.Addon.Office/FodyWeavers.xml create mode 100644 src/Greenshot.Addon.Office/FodyWeavers.xsd create mode 100644 src/Greenshot.Addon.Office/OfficeExport/Entities/OneNoteNotebook.cs rename src/{Greenshot.Addon.Jira/Properties/AssemblyInfo.cs => Greenshot.Addon.Office/OfficeExport/Entities/OneNotePage.cs} (51%) rename src/{Greenshot/Properties/AssemblyInfo.cs => Greenshot.Addon.Office/OfficeExport/Entities/OneNoteSection.cs} (52%) delete mode 100644 src/Greenshot.Addon.Office/Properties/AssemblyInfo.cs delete mode 100644 src/Greenshot.Addon.Office/packages.config rename src/Greenshot.Addon.OneDrive/{ => Configuration}/IOneDriveConfiguration.cs (88%) rename src/Greenshot.Addon.OneDrive/{ => Configuration}/IOneDriveLanguage.cs (94%) create mode 100644 src/Greenshot.Addon.OneDrive/Configuration/Impl/OneDriveConfigurationImpl.cs create mode 100644 src/Greenshot.Addon.OneDrive/Configuration/Impl/OneDriveLanguageImpl.cs create mode 100644 src/Greenshot.Addon.OneDrive/FodyWeavers.xml create mode 100644 src/Greenshot.Addon.OneDrive/FodyWeavers.xsd delete mode 100644 src/Greenshot.Addon.OneDrive/Properties/AssemblyInfo.cs delete mode 100644 src/Greenshot.Addon.OneDrive/packages.config rename src/Greenshot.Addon.Photobucket/{ => Configuration}/IPhotobucketConfiguration.cs (89%) rename src/Greenshot.Addon.Photobucket/{ => Configuration}/IPhotobucketLanguage.cs (91%) create mode 100644 src/Greenshot.Addon.Photobucket/Configuration/Impl/PhotobucketConfigurationImpl.cs create mode 100644 src/Greenshot.Addon.Photobucket/Configuration/Impl/PhotobucketLanguageImpl.cs create mode 100644 src/Greenshot.Addon.Photobucket/FodyWeavers.xml create mode 100644 src/Greenshot.Addon.Photobucket/FodyWeavers.xsd delete mode 100644 src/Greenshot.Addon.Photobucket/Properties/AssemblyInfo.cs delete mode 100644 src/Greenshot.Addon.Photobucket/packages.config rename src/Greenshot.Addon.Tfs/{ => Configuration}/ITfsConfiguration.cs (88%) rename src/Greenshot.Addon.Tfs/{ => Configuration}/ITfsLanguage.cs (97%) create mode 100644 src/Greenshot.Addon.Tfs/Configuration/Impl/TfsConfigurationImpl.cs create mode 100644 src/Greenshot.Addon.Tfs/Configuration/Impl/TfsLanguageImpl.cs create mode 100644 src/Greenshot.Addon.Tfs/FodyWeavers.xml create mode 100644 src/Greenshot.Addon.Tfs/FodyWeavers.xsd delete mode 100644 src/Greenshot.Addon.Tfs/Properties/AssemblyInfo.cs delete mode 100644 src/Greenshot.Addon.Tfs/packages.config delete mode 100644 src/Greenshot.Addon.Win10/Properties/AssemblyInfo.cs delete mode 100644 src/Greenshot.Addon.Win10/packages.config create mode 100644 src/Greenshot.Addons/Config/Impl/CoreConfigurationImpl.cs create mode 100644 src/Greenshot.Addons/Config/Impl/GreenshotLanguageImpl.cs create mode 100644 src/Greenshot.Addons/Config/Impl/HttpConfigurationImpl.cs rename src/Greenshot.Addons/Controls/{InvertedBoolenConverter.cs => InvertedBooleanConverter.cs} (93%) delete mode 100644 src/Greenshot.Addons/Core/GreenshotResources.cs delete mode 100644 src/Greenshot.Addons/Core/GreenshotResources.resx delete mode 100644 src/Greenshot.Addons/Core/Language.cs create mode 100644 src/Greenshot.Addons/FodyWeavers.xml create mode 100644 src/Greenshot.Addons/FodyWeavers.xsd delete mode 100644 src/Greenshot.Addons/Properties/AssemblyInfo.cs create mode 100644 src/Greenshot.Addons/Resources/Checkerboard.Image.png create mode 100644 src/Greenshot.Addons/Resources/Clipboard.Image.png create mode 100644 src/Greenshot.Addons/Resources/Close.Image.png create mode 100644 src/Greenshot.Addons/Resources/Email.Image.png create mode 100644 src/Greenshot.Addons/Resources/Greenshot.Icon.ico create mode 100644 src/Greenshot.Addons/Resources/GreenshotResources.cs create mode 100644 src/Greenshot.Addons/Resources/Printer.Image.png create mode 100644 src/Greenshot.Addons/Resources/Save.Image.png delete mode 100644 src/Greenshot.Addons/packages.config delete mode 100644 src/Greenshot.Core/Properties/AssemblyInfo.cs delete mode 100644 src/Greenshot.Core/packages.config delete mode 100644 src/Greenshot.Gfx.Experimental/Properties/AssemblyInfo.cs delete mode 100644 src/Greenshot.Gfx.Experimental/packages.config delete mode 100644 src/Greenshot.Gfx/Properties/AssemblyInfo.cs delete mode 100644 src/Greenshot.Gfx/packages.config create mode 100644 src/Greenshot.PerformanceTests/GfxPerformanceShort.cs delete mode 100644 src/Greenshot.PerformanceTests/Properties/AssemblyInfo.cs delete mode 100644 src/Greenshot.PerformanceTests/packages.config delete mode 100644 src/Greenshot.Tests/Properties/AssemblyInfo.cs delete mode 100644 src/Greenshot.Tests/packages.config create mode 100644 src/Greenshot/Configuration/Impl/ConfigTranslationsImpl.cs create mode 100644 src/Greenshot/Configuration/Impl/MetroConfigurationImpl.cs delete mode 100644 src/Greenshot/Configuration/LanguageKeys.cs create mode 100644 src/Greenshot/FodyWeavers.xsd delete mode 100644 src/Greenshot/Forms/ColorPickerToolStripButton.cs delete mode 100644 src/Greenshot/Forms/MainForm.resx rename src/Greenshot/{sounds => Resources}/camera.wav (100%) create mode 100644 src/Greenshot/Resources/contextmenu_capturearea.Image.png create mode 100644 src/Greenshot/Resources/contextmenu_captureclipboard.Image.png create mode 100644 src/Greenshot/Resources/contextmenu_capturefullscreen.Image.png create mode 100644 src/Greenshot/Resources/contextmenu_capturelastregion.Image.png create mode 100644 src/Greenshot/Resources/contextmenu_capturewindow.Image.png create mode 100644 src/Greenshot/Resources/contextmenu_donate.Image.png create mode 100644 src/Greenshot/Resources/contextmenu_exit.Image.png create mode 100644 src/Greenshot/Resources/contextmenu_help.Image.png create mode 100644 src/Greenshot/Resources/contextmenu_openfile.Image.png create mode 100644 src/Greenshot/Resources/contextmenu_present.Image.png create mode 100644 src/Greenshot/Resources/contextmenu_settings.Image.png create mode 100644 src/Greenshot/Resources/icon.ico delete mode 100644 src/Greenshot/Sounds.resx delete mode 100644 src/Greenshot/packages.config delete mode 100644 src/Greenshot/tools/7zip/7za.exe delete mode 100644 src/Greenshot/tools/ILMerge/ILMerge License.rtf delete mode 100644 src/Greenshot/tools/ILMerge/ILMerge.doc delete mode 100644 src/Greenshot/tools/ILMerge/ILMerge.exe delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/7zip/7z.dll delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/7zip/7z.exe delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/AppInfo/appicon.ico delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/AppInfo/appicon_128.png delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/AppInfo/appicon_16.png delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/AppInfo/appicon_32.png delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/AppInfo/appinfo.ini delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/DefaultData/settings.ini delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/bin/MakeHeader.exe delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/default_bits/PortableApps.comInstallerHeader.bmp delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/default_bits/PortableApps.comInstallerHeaderRTL.bmp delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/default_bits/appicon.ico delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/default_bits/appicon_16.png delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/default_bits/appicon_32.png delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/default_bits/appinfo.ini delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstaller.bmp delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstaller.ico delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstaller.nsi delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerConfig.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerCustom.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerDumpLogToFile.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Afrikaans.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Albanian.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Arabic.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Armenian.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Basque.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Belarusian.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Bosnian.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Breton.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Bulgarian.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Catalan.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Cibemba.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Croatian.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Czech.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Danish.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Dutch.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Efik.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/English.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/EnglishGB.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Esperanto.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Estonian.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Farsi.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Finnish.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/French.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Galician.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Georgian.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/German.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Greek.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Hebrew.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Hungarian.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Icelandic.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Igbo.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Indonesian.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Irish.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Italian.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Japanese.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Khmer.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Korean.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Kurdish.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Latvian.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Lithuanian.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Luxembourgish.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Macedonian.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Malagasy.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Malay.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Mongolian.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Norwegian.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/NorwegianNynorsk.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Pashto.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Polish.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Portuguese.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/PortugueseBR.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Romanian.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Russian.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Serbian.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/SerbianLatin.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/SimpChinese.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Slovak.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Slovenian.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Spanish.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/SpanishInternational.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Swahili.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Swedish.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Thai.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/TradChinese.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Turkish.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Ukrainian.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Uzbek.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Valencian.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Vietnamese.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Welsh.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerLanguages/Yoruba.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerMoveFiles.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/installer/PortableApps.comInstallerTBProgress.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Bin/GenPat.exe delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Bin/LibraryLocal.exe delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Bin/MakeLangId.exe delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Bin/RegTool.bin delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Bin/zip2exe.exe delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/COPYING delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/ExDll/exdll.h delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Checks/big.bmp delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Checks/classic-cross.bmp delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Checks/classic.bmp delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Checks/colorful.bmp delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Checks/grey-cross.bmp delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Checks/grey.bmp delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Checks/modern.bmp delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Checks/red-round.bmp delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Checks/red.bmp delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Checks/simple-round.bmp delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Checks/simple-round2.bmp delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Checks/simple.bmp delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Header/nsis-r.bmp delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Header/nsis.bmp delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Header/orange-nsis.bmp delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Header/orange-r-nsis.bmp delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Header/orange-r.bmp delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Header/orange-uninstall-nsis.bmp delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Header/orange-uninstall-r-nsis.bmp delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Header/orange-uninstall-r.bmp delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Header/orange-uninstall.bmp delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Header/orange.bmp delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Header/win.bmp delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Icons/arrow-install.ico delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Icons/arrow-uninstall.ico delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Icons/arrow2-install.ico delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Icons/arrow2-uninstall.ico delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Icons/box-install.ico delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Icons/box-uninstall.ico delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Icons/classic-install.ico delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Icons/classic-uninstall.ico delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Icons/llama-blue.ico delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Icons/llama-grey.ico delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Icons/modern-install-blue-full.ico delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Icons/modern-install-blue.ico delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Icons/modern-install-colorful.ico delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Icons/modern-install-full.ico delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Icons/modern-install.ico delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Icons/modern-uninstall-blue-full.ico delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Icons/modern-uninstall-blue.ico delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Icons/modern-uninstall-colorful.ico delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Icons/modern-uninstall-full.ico delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Icons/modern-uninstall.ico delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Icons/nsis1-install.ico delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Icons/nsis1-uninstall.ico delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Icons/orange-install-nsis.ico delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Icons/orange-install.ico delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Icons/orange-uninstall-nsis.ico delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Icons/orange-uninstall.ico delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Icons/pixel-install.ico delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Icons/pixel-uninstall.ico delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Icons/win-install.ico delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Icons/win-uninstall.ico delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Wizard/arrow.bmp delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Wizard/llama.bmp delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Wizard/nsis.bmp delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Wizard/nullsoft.bmp delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Wizard/orange-nsis.bmp delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Wizard/orange-uninstall-nsis.bmp delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Wizard/orange-uninstall.bmp delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Wizard/orange.bmp delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Graphics/Wizard/win.bmp delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Inetc/Example.nsi delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Inetc/Readme.htm delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Inetc/auth_dlg.nsi delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Inetc/ftp_auth.nsi delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Inetc/head.nsi delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Inetc/headers.nsi delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Inetc/headers.php delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Inetc/https.nsi delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Inetc/inetc.cpp delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Inetc/inetc.dsp delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Inetc/inetc.dsw delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Inetc/inetc.rc delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Inetc/inetc_local.nsi delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Inetc/post.nsi delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Inetc/post.php delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Inetc/post_file.nsi delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Inetc/post_file.php delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Inetc/post_form.html delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Inetc/put.nsi delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Inetc/put.php delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Inetc/recursive.nsi delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Inetc/redirect.nsi delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Inetc/redirect.php delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Inetc/resource.h delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Inetc/timeout.nsi delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Inetc/translate.nsi delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Inetc/wiki.txt delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Afrikaans.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Afrikaans.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Albanian.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Albanian.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Arabic.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Arabic.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Armenian.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Armenian.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Basque.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Basque.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Belarusian.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Belarusian.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Bosnian.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Bosnian.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Breton.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Breton.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Bulgarian.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Bulgarian.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Catalan.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Catalan.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Cibemba.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Cibemba.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Croatian.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Croatian.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Czech.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Czech.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Danish.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Danish.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Dutch.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Dutch.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Efik.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Efik.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/English.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/English.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/EnglishGB.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/EnglishGB.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Esperanto.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Esperanto.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Estonian.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Estonian.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Farsi.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Farsi.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Finnish.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Finnish.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/French.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/French.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Galician.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Galician.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Georgian.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Georgian.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/German.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/German.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Greek.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Greek.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Hebrew.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Hebrew.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Hindi.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Hindi.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Hungarian.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Hungarian.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Icelandic.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Icelandic.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Igbo.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Igbo.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Indonesian.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Indonesian.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Irish.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Irish.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Italian.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Italian.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Japanese.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Japanese.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Khmer.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Khmer.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Korean.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Korean.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Kurdish.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Kurdish.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Latvian.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Latvian.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Lithuanian.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Lithuanian.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Luxembourgish.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Luxembourgish.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Macedonian.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Macedonian.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Malagasy.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Malagasy.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Malay.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Malay.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Mongolian.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Mongolian.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Norwegian.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Norwegian.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/NorwegianNynorsk.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/NorwegianNynorsk.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Pashto.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Pashto.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Polish.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Polish.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Portuguese.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Portuguese.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/PortugueseBR.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/PortugueseBR.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Romanian.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Romanian.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Russian.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Russian.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Serbian.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Serbian.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/SerbianLatin.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/SerbianLatin.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Sesotho.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Sesotho.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/SimpChinese.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/SimpChinese.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Slovak.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Slovak.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Slovenian.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Slovenian.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Spanish.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Spanish.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/SpanishInternational.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/SpanishInternational.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Sundanese.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Sundanese.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Swahili.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Swahili.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Swedish.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Swedish.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Tamil.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Tamil.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Thai.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Thai.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/TradChinese.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/TradChinese.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Turkish.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Turkish.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Twi.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Twi.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Ukrainian.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Ukrainian.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Uyghur.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Uyghur.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Uzbek.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Uzbek.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Valencian.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Valencian.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Vietnamese.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Vietnamese.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Welsh.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Welsh.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Yoruba.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Yoruba.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Zulu.nlf delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Language files/Zulu.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Modern UI 2/Deprecated.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Modern UI 2/Interface.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Modern UI 2/Localization.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Modern UI 2/MUI2.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Modern UI 2/Pages.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Modern UI 2/Pages/Components.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Modern UI 2/Pages/Directory.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Modern UI 2/Pages/Finish.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Modern UI 2/Pages/InstallFiles.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Modern UI 2/Pages/License.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Modern UI 2/Pages/StartMenu.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Modern UI 2/Pages/UninstallConfirm.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Modern UI 2/Pages/Welcome.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Modern UI/System.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/Modern UI/ioSpecial.ini delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/SelfDel/nsis_ansi/api.h delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/SelfDel/nsis_ansi/pluginapi.h delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/SelfDel/nsis_ansi/pluginapi.lib delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/SelfDel/nsis_unicode/api.h delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/SelfDel/nsis_unicode/nsis_tchar.h delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/SelfDel/nsis_unicode/pluginapi.h delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/SelfDel/nsis_unicode/pluginapi.lib delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/SelfDel/resource.h delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/SelfDel/selfdel.c delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/SelfDel/selfdel.dsp delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/SelfDel/selfdel.dsw delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/SelfDel/selfdel.rc delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/SelfDel/selfdel.sln delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/SelfDel/selfdel.vcxproj delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/SelfDel/selfdel.vcxproj.filters delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/UIs/default.exe delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/UIs/modern.exe delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/UIs/modern_headerbmp.exe delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/UIs/modern_headerbmpr.exe delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/UIs/modern_nodesc.exe delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/UIs/modern_smalldesc.exe delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/UIs/sdbarker_tiny.exe delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/zip2exe/Base.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/zip2exe/Classic.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Contrib/zip2exe/Modern.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Include/Colors.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Include/FileFunc.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Include/InstallOptions.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Include/LangFile.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Include/Library.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Include/LogicLib.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Include/MUI.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Include/MUI2.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Include/Memento.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Include/MultiUser.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Include/NewTextReplace.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Include/Registry.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Include/Sections.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Include/StrFunc.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Include/TBProgress.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Include/TextFunc.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Include/TextReplace.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Include/UpgradeDLL.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Include/Util.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Include/VB6RunTime.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Include/VPatchLib.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Include/Win/WinDef.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Include/Win/WinError.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Include/Win/WinNT.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Include/Win/WinUser.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Include/WinCore.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Include/WinMessages.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Include/WinVer.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Include/WordFunc.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Include/dialogs.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Include/nsDialogs.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Include/x64.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Plugins/AdvSplash.dll delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Plugins/Banner.dll delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Plugins/BgImage.dll delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Plugins/Dialer.dll delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Plugins/EmbeddedLists.dll delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Plugins/EnumINI.dll delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Plugins/FindProcDLL.dll delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Plugins/InstallOptions.dll delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Plugins/KillProcDLL.dll delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Plugins/LangDLL.dll delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Plugins/Math.dll delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Plugins/MoreInfo.dll delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Plugins/NSISdl.dll delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Plugins/RealProgress.dll delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Plugins/SelfDel.dll delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Plugins/Splash.dll delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Plugins/StartMenu.dll delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Plugins/System.dll delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Plugins/TypeLib.dll delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Plugins/UserInfo.dll delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Plugins/VPatch.dll delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Plugins/dialogsEx.dll delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Plugins/execDos.dll delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Plugins/inetc.dll delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Plugins/md5dll.dll delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Plugins/newadvsplash.dll delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Plugins/newtextreplace.dll delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Plugins/nsDialogs.dll delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Plugins/nsExec.dll delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Plugins/registry.dll delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Plugins/w7tbp.dll delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Stubs/bzip2 delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Stubs/bzip2_solid delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Stubs/lzma delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Stubs/lzma_solid delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Stubs/uninst delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Stubs/zlib delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/Stubs/zlib_solid delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/makensis.exe delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/App/nsis/nsisconf.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/Data/settings.ini delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/Other/Help/images/donation_button.png delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/Other/Help/images/favicon.ico delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/Other/Help/images/help_background_footer.png delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/Other/Help/images/help_background_header.png delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/Other/Help/images/help_logo_top.png delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/Other/Source/InstallerWizard.nsi delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/Other/Source/InstallerWizardForm.ini delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/Other/Source/License.txt delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/Other/Source/MoveFiles.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/Other/Source/ReadINIStrWithDefault.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/Other/Source/Readme.txt delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/Other/Source/TBProgress.nsh delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/Other/Source/header.bmp delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/Other/Source/header_rtl.bmp delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/Other/Source/welcomefinish.bmp delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/PortableApps.comInstaller.exe delete mode 100644 src/Greenshot/tools/PortableApps.comInstaller/help.html delete mode 100644 src/Greenshot/tools/WinSCP/WinSCP.com delete mode 100644 src/Greenshot/tools/WinSCP/WinSCP.exe delete mode 100644 src/Greenshot/tools/WinSCP/WinSCPnet.dll delete mode 100644 src/Greenshot/tools/WinSCP/license-dotnet.txt delete mode 100644 src/Greenshot/tools/WinSCP/license.txt delete mode 100644 src/Greenshot/tools/WinSCP/readme.txt delete mode 100644 src/Greenshot/tools/WinSCP/readme_automation.txt create mode 100644 src/version.json diff --git a/README.md b/README.md index 5cc2b8a59..6870cdc6e 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Welcome to the source repository for Greenshot What is Greenshot? ------------------ -Greenshot is a light-weight screenshot software tool for Windows with the following key features: +Greenshot is an open source, light-weight screenshot software tool for Windows with the following key features: * Quickly create screenshots of a selected region, window or fullscreen; you can even capture complete (scrolling) web pages from Internet Explorer. * Easily annotate, highlight or obfuscate parts of the screenshot. @@ -21,30 +21,45 @@ Being easy to understand and configurable, Greenshot is an efficient tool for pr About this repository --------------------- -This repository is for Greenshot 1.3.x +This repository is work in progress for the next Greenshot (2.0?). + + +Quick started for developers +---------------------------- +* Download the latest (!!!) dotnet core SDK from here: https://github.com/dotnet/core-sdk ([quick-link to download](https://dotnetcli.blob.core.windows.net/dotnet/Sdk/master/dotnet-sdk-latest-win-x64.exe)) + * Make sure you only have the latest dotnet core 3.0 installed! +* Make sure you have the latest Visual Studio 2017 (no need for previews), for 15.9.x enable [Use previews of the .NET Core SDK](https://blogs.msdn.microsoft.com/dotnet/2018/11/13/net-core-tooling-update-for-visual-studio-2017-version-15-9/) +* Clone the [repository](https://github.com/greenshot/greenshot/tree/feature/netcoreapp3.0), branch feature/netcoreapp3.0 +* Open the solution from the src directory in Visual Studio 2017 +* Rebuild and start... (you might need to rebuild 2x, looking into this) + For users the major changes since 1.2.x are: -* A newer and more modern configuration UI -* Due to the update of .NET 4.5 a lot of bugs are solved +* dotnet core 3.0 support (why, read here: https://blogs.msdn.microsoft.com/dotnet/2018/10/04/update-on-net-core-3-0-and-net-framework-4-8/ ) +* A newer and more modern configuration UI, using MahApps.Metro +* Due to the update of .NET 2.0 to .NET 4.7.1 a lot of bugs are solved * Added Windows 10 destinations, OCR & share * Better DPI support -* Faster development +* Simplified code should make development easier and quicker * Bug fixes For developers, the major changes since 1.2.x are: -* Updated to .NET 4.5.x -* Moved logging from log4net to [Dapplo.Log](https://github.com/dapplo/Dapplo.Log) which is a very simple logger -* Using Dependency Injection (Inversion of Control), via [Dapplo.Addons](https://github.com/dapplo/Dapplo.Addons) which bases upon MEF. -* Add-ins (formerly plug-ins) can just place attributes on classes to be loaded and injected. -* Started using WPF via MVVM, provided by Caliburn.Micro via [Dapplo.CaliburnMicro](https://github.com/dapplo/Dapplo.CaliburnMicro) +* Updated to .NET 4.7.1 and dotnet core 3.0 (multiple targets) +* Moved logging from log4net to [Dapplo.Log](https://github.com/dapplo/Dapplo.Log) which is a very simple logger (reviewing changing to Microsoft.Extensions.Logging) +* Using Dependency Injection (Inversion of Control) via [Dapplo.Addons](https://github.com/dapplo/Dapplo.Addons) which bases upon AutoFac. +* Using MVVM, provided by Caliburn.Micro via [Dapplo.CaliburnMicro](https://github.com/dapplo/Dapplo.CaliburnMicro) * Added [Dapplo.Config](https://github.com/dapplo/Dapplo.Config) which provides language & configuration support. * Added a configuration UI, which is build together via composition. Meaning add-ins just need to implement the correct class and use the correct attributes to be visible inside the new configuration. * Using [Dapplo.HttpExtensions](https://github.com/dapplo/Dapplo.HttpExtensions) as the default HTTP client library, which should make it easier to use cloud services. -* Fody-Costura is supported for add-ins, which make it possible to simply embed the needed dependencies as dlls. -* Moved most native windows code to a separate project called [Dapplo.Windows](https://github.com/dapplo/Dapplo.Windows) which makes it easier to test +* Moved most native windows code to a separate project called [Dapplo.Windows](https://github.com/dapplo/Dapplo.Windows) which makes it easier to develop & test * Moved graphics code to a separate project, where benchmark tests are possible. + Currently known errors: * The old .greenshot files cannot be loaded -* ... +* Not all Addons are active, the way they are found needs to be fixed. +* Office Addon (if referenced) will not work on dotnet core 3.0 yet +* Windows 10 Addon (if referenced) will not work on dotnet core 3.0 yet +* MahApps.Metro doesn't support dotnet core 3.0 yet, working on it (first step ControlzEx: https://github.com/ControlzEx/ControlzEx/pull/66 ) + diff --git a/src/CommonProject.properties b/src/CommonProject.properties deleted file mode 100644 index 1cfd12951..000000000 --- a/src/CommonProject.properties +++ /dev/null @@ -1,48 +0,0 @@ - - - - false - latest - OnBuildSuccess - - - 1685 - true - bin\Debug\ - DEBUG;TRACE - true - 4096 - pdbonly - x86 - Off - - - 1685 - true - bin\Debug\ - DEBUG;TRACE - true - 4096 - pdbonly - AnyCPU - Off - - - 1685 - bin\Release\ - true - 4096 - pdbonly - AnyCPU - Off - - - 1685 - bin\Release\ - true - 4096 - pdbonly - x86 - Off - - diff --git a/src/Directory.Build.props b/src/Directory.Build.props new file mode 100644 index 000000000..41d23e844 --- /dev/null +++ b/src/Directory.Build.props @@ -0,0 +1,58 @@ + + + Copyright © Greenshot 2004-2018 + Greenshot + https://getgreenshot.org/favicon.ico + https://github.com/greenshot/greenshot + git + https://github.com/greenshot/greenshot + https://www.gnu.org/licenses/gpl.html + latest + + true + 1.0.0 + 1.0.0 + 1.0.0 + {HintPathFromItem};{TargetFrameworkDirectory};{RawFileName};{GAC}; + true + false + $(registry:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion@ProductName) + + + + true + $(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb + true + true + + + + false + false + + + + DEBUG;TRACE + True + true + Full + false + + + + true + pdbonly + True + + + + + all + runtime; build; native; contentfiles; analyzers + + + all + runtime; build; native; contentfiles; analyzers + + + diff --git a/src/Greenshot.Addon.Box/BoxAddonModule.cs b/src/Greenshot.Addon.Box/BoxAddonModule.cs index 604c08d5c..2b59028b0 100644 --- a/src/Greenshot.Addon.Box/BoxAddonModule.cs +++ b/src/Greenshot.Addon.Box/BoxAddonModule.cs @@ -24,8 +24,10 @@ using Autofac; using Dapplo.Addons; using Dapplo.CaliburnMicro.Configuration; -using Dapplo.Ini; -using Dapplo.Language; +using Dapplo.Config.Ini; +using Dapplo.Config.Language; +using Greenshot.Addon.Box.Configuration; +using Greenshot.Addon.Box.Configuration.Impl; using Greenshot.Addon.Box.ViewModels; using Greenshot.Addons.Components; @@ -37,13 +39,15 @@ namespace Greenshot.Addon.Box protected override void Load(ContainerBuilder builder) { builder - .Register(context => IniConfig.Current.Get()) + .RegisterType() .As() + .As() .SingleInstance(); builder - .Register(context => LanguageLoader.Current.Get()) + .RegisterType() .As() + .As() .SingleInstance(); builder diff --git a/src/Greenshot.Addon.Box/BoxDestination.cs b/src/Greenshot.Addon.Box/BoxDestination.cs index a5059f906..b1c0481e4 100644 --- a/src/Greenshot.Addon.Box/BoxDestination.cs +++ b/src/Greenshot.Addon.Box/BoxDestination.cs @@ -39,6 +39,7 @@ using Dapplo.HttpExtensions.OAuth; using Dapplo.Log; using Dapplo.Utils; using Dapplo.Windows.Clipboard; +using Greenshot.Addon.Box.Configuration; using Greenshot.Addon.Box.Entities; using Greenshot.Addons; using Greenshot.Addons.Components; diff --git a/src/Greenshot.Addon.Box/IBoxConfiguration.cs b/src/Greenshot.Addon.Box/Configuration/IBoxConfiguration.cs similarity index 90% rename from src/Greenshot.Addon.Box/IBoxConfiguration.cs rename to src/Greenshot.Addon.Box/Configuration/IBoxConfiguration.cs index 1f71beb71..d83f79b2b 100644 --- a/src/Greenshot.Addon.Box/IBoxConfiguration.cs +++ b/src/Greenshot.Addon.Box/Configuration/IBoxConfiguration.cs @@ -25,21 +25,20 @@ using System.ComponentModel; using System.Runtime.Serialization; +using Dapplo.Config.Ini; using Dapplo.HttpExtensions.OAuth; -using Dapplo.Ini; -using Dapplo.InterfaceImpl.Extensions; using Greenshot.Addons.Core; #endregion -namespace Greenshot.Addon.Box +namespace Greenshot.Addon.Box.Configuration { /// /// Description of ImgurConfiguration. /// [IniSection("Box")] [Description("Greenshot Box Plugin configuration")] - public interface IBoxConfiguration : IIniSection, IDestinationFileConfiguration, INotifyPropertyChanged, ITransactionalProperties, IOAuth2Token + public interface IBoxConfiguration : IIniSection, IDestinationFileConfiguration, IOAuth2Token { [Description("After upload send Box link to clipboard.")] [DefaultValue(true)] diff --git a/src/Greenshot.Addon.Box/IBoxLanguage.cs b/src/Greenshot.Addon.Box/Configuration/IBoxLanguage.cs similarity index 87% rename from src/Greenshot.Addon.Box/IBoxLanguage.cs rename to src/Greenshot.Addon.Box/Configuration/IBoxLanguage.cs index e94152d6e..4ae0e6803 100644 --- a/src/Greenshot.Addon.Box/IBoxLanguage.cs +++ b/src/Greenshot.Addon.Box/Configuration/IBoxLanguage.cs @@ -21,13 +21,12 @@ #endregion -using System.ComponentModel; -using Dapplo.Language; +using Dapplo.Config.Language; -namespace Greenshot.Addon.Box +namespace Greenshot.Addon.Box.Configuration { [Language("Box")] - public interface IBoxLanguage : ILanguage, INotifyPropertyChanged + public interface IBoxLanguage : ILanguage { string CommunicationWait { get; } diff --git a/src/Greenshot.Addon.Box/Configuration/Impl/BoxConfigurationImpl.cs b/src/Greenshot.Addon.Box/Configuration/Impl/BoxConfigurationImpl.cs new file mode 100644 index 000000000..ecc266164 --- /dev/null +++ b/src/Greenshot.Addon.Box/Configuration/Impl/BoxConfigurationImpl.cs @@ -0,0 +1,79 @@ +#region Greenshot GNU General Public License + +// Greenshot - a free and open source screenshot tool +// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom +// +// For more information see: http://getgreenshot.org/ +// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 1 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#endregion + +using System; +using System.ComponentModel; +using Dapplo.Config.Ini; +using Dapplo.Config.Ini.Converters; +using Greenshot.Core.Enums; + +namespace Greenshot.Addon.Box.Configuration.Impl +{ + internal class BoxConfigurationImpl : IniSectionBase, IBoxConfiguration + { + #region Implementation of IFileConfiguration + + public string OutputFilePath { get; set; } + public bool OutputFileAllowOverwrite { get; set; } + public string OutputFileFilenamePattern { get; set; } + public OutputFormats OutputFileFormat { get; set; } + public bool OutputFileReduceColors { get; set; } + public bool OutputFileAutoReduceColors { get; set; } + public int OutputFileReduceColorsTo { get; set; } + public int OutputFileJpegQuality { get; set; } + public bool OutputFilePromptQuality { get; set; } + public uint OutputFileIncrementingNumber { get; set; } + public string OptimizePNGCommand { get; set; } + public string OptimizePNGCommandArguments { get; set; } + + #endregion + + #region Implementation of IDestinationFileConfiguration + + public bool UseOwnSettings { get; set; } + + #endregion + + #region Implementation of IOAuth2Token + + [TypeConverter(typeof(StringEncryptionTypeConverter))] + public string OAuth2AccessToken { get; set; } + + public DateTimeOffset OAuth2AccessTokenExpires { get; set; } + + [TypeConverter(typeof(StringEncryptionTypeConverter))] + public string OAuth2RefreshToken { get; set; } + + #endregion + + #region Implementation of IBoxConfiguration + + public bool AfterUploadLinkToClipBoard { get; set; } + public bool UseSharedLink { get; set; } + public string FolderId { get; set; } + public string ClientId { get; set; } + public string ClientSecret { get; set; } + + #endregion + } +} diff --git a/src/Greenshot.Addon.Box/Configuration/Impl/BoxLanguageImpl.cs b/src/Greenshot.Addon.Box/Configuration/Impl/BoxLanguageImpl.cs new file mode 100644 index 000000000..78d36f31a --- /dev/null +++ b/src/Greenshot.Addon.Box/Configuration/Impl/BoxLanguageImpl.cs @@ -0,0 +1,50 @@ +#region Greenshot GNU General Public License + +// Greenshot - a free and open source screenshot tool +// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom +// +// For more information see: http://getgreenshot.org/ +// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 1 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#endregion + +using System.Diagnostics.CodeAnalysis; +using Dapplo.Config.Language; + +namespace Greenshot.Addon.Box.Configuration.Impl +{ + /// + /// This implements IBoxLanguage and takes care of storing, all setters are replaced via AutoProperties.Fody + /// + [SuppressMessage("ReSharper", "UnassignedGetOnlyAutoProperty")] +#pragma warning disable CS1591 + public class BoxLanguageImpl : LanguageBase, IBoxLanguage + { + #region Implementation of IBoxLanguage + + public string CommunicationWait { get; } + public string Configure { get; } + public string LabelAfterUpload { get; } + public string LabelAfterUploadLinkToClipBoard { get; } + public string LabelUploadFormat { get; } + public string SettingsTitle { get; } + public string UploadFailure { get; } + public string UploadMenuItem { get; } + public string UploadSuccess { get; } + + #endregion + } +} diff --git a/src/Greenshot.Addon.Box/FodyWeavers.xml b/src/Greenshot.Addon.Box/FodyWeavers.xml new file mode 100644 index 000000000..7f5a26669 --- /dev/null +++ b/src/Greenshot.Addon.Box/FodyWeavers.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/Greenshot.Addon.Box/FodyWeavers.xsd b/src/Greenshot.Addon.Box/FodyWeavers.xsd new file mode 100644 index 000000000..061979a03 --- /dev/null +++ b/src/Greenshot.Addon.Box/FodyWeavers.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + 'true' to run assembly verification on the target assembly after all weavers have been finished. + + + + + A comma separated list of error codes that can be safely ignored in assembly verification. + + + + + \ No newline at end of file diff --git a/src/Greenshot.Addon.Box/Greenshot.Addon.Box.csproj b/src/Greenshot.Addon.Box/Greenshot.Addon.Box.csproj index 8e0f824ac..feaaebdb0 100644 --- a/src/Greenshot.Addon.Box/Greenshot.Addon.Box.csproj +++ b/src/Greenshot.Addon.Box/Greenshot.Addon.Box.csproj @@ -1,237 +1,58 @@ - - - + + - {697CF066-9077-4F22-99D9-D989CCE7282B} - {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library Greenshot.Addon.Box Greenshot.Addon.Box - v4.6.1 - Properties - False - False - 4 - false - Always - - - - - - 3.5 - latest - false + net471;netcoreapp3.0 - + - - ..\packages\Autofac.4.8.1\lib\net45\Autofac.dll - - - ..\packages\Autofac.Extras.AttributeMetadata.4.0.1\lib\net45\Autofac.Extras.AttributeMetadata.dll - - - ..\packages\Autofac.Mef.4.0.0\lib\net45\Autofac.Integration.Mef.dll - - - ..\packages\Caliburn.Micro.Core.3.2.0\lib\net45\Caliburn.Micro.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\Caliburn.Micro.Platform.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\Caliburn.Micro.Platform.Core.dll - - - ..\packages\CommonServiceLocator.2.0.4\lib\net46\CommonServiceLocator.dll - - - ..\packages\Dapplo.Addons.1.0.79\lib\net461\Dapplo.Addons.dll - - - ..\packages\Dapplo.Addons.Bootstrapper.1.0.79\lib\net461\Dapplo.Addons.Bootstrapper.dll - - - ..\packages\Dapplo.CaliburnMicro.1.0.75\lib\net461\Dapplo.CaliburnMicro.dll - - - ..\packages\Dapplo.CaliburnMicro.Configuration.1.0.75\lib\net461\Dapplo.CaliburnMicro.Configuration.dll - - - ..\packages\Dapplo.CaliburnMicro.Dapp.1.0.75\lib\net461\Dapplo.CaliburnMicro.Dapp.dll - - - ..\packages\Dapplo.CaliburnMicro.Menu.1.0.75\lib\net461\Dapplo.CaliburnMicro.Menu.dll - - - ..\packages\Dapplo.CaliburnMicro.Security.1.0.75\lib\net461\Dapplo.CaliburnMicro.Security.dll - - - ..\packages\Dapplo.CaliburnMicro.Translations.1.0.75\lib\net461\Dapplo.CaliburnMicro.Translations.dll - - - ..\packages\Dapplo.HttpExtensions.0.8.46\lib\net46\Dapplo.HttpExtensions.dll - - - ..\packages\Dapplo.HttpExtensions.JsonNet.0.8.46\lib\net46\Dapplo.HttpExtensions.JsonNet.dll - - - ..\packages\Dapplo.HttpExtensions.OAuth.0.8.46\lib\net46\Dapplo.HttpExtensions.OAuth.dll - - - ..\packages\Dapplo.Ini.0.5.31\lib\net45\Dapplo.Ini.dll - - - ..\packages\Dapplo.InterfaceImpl.0.2.12\lib\net45\Dapplo.InterfaceImpl.dll - - - ..\packages\Dapplo.Language.0.5.31\lib\net45\Dapplo.Language.dll - - - ..\packages\Dapplo.Log.1.2.1\lib\net45\Dapplo.Log.dll - - - ..\packages\Dapplo.Utils.1.0.161\lib\net45\Dapplo.Utils.dll - - - ..\packages\Dapplo.Windows.0.5.109\lib\net461\Dapplo.Windows.dll - - - ..\packages\Dapplo.Windows.Clipboard.0.5.109\lib\net461\Dapplo.Windows.Clipboard.dll - - - ..\packages\Dapplo.Windows.Com.0.5.109\lib\net461\Dapplo.Windows.Com.dll - - - ..\packages\Dapplo.Windows.Common.0.5.109\lib\net461\Dapplo.Windows.Common.dll - - - ..\packages\Dapplo.Windows.DesktopWindowsManager.0.5.109\lib\net461\Dapplo.Windows.DesktopWindowsManager.dll - - - ..\packages\Dapplo.Windows.Dpi.0.5.109\lib\net461\Dapplo.Windows.Dpi.dll - - - ..\packages\Dapplo.Windows.EmbeddedBrowser.0.5.109\lib\net461\Dapplo.Windows.EmbeddedBrowser.dll - - - ..\packages\Dapplo.Windows.Gdi32.0.5.109\lib\net461\Dapplo.Windows.Gdi32.dll - - - ..\packages\Dapplo.Windows.Input.0.5.109\lib\net461\Dapplo.Windows.Input.dll - - - ..\packages\Dapplo.Windows.Kernel32.0.5.109\lib\net461\Dapplo.Windows.Kernel32.dll - - - ..\packages\Dapplo.Windows.Messages.0.5.109\lib\net461\Dapplo.Windows.Messages.dll - - - ..\packages\Dapplo.Windows.User32.0.5.109\lib\net461\Dapplo.Windows.User32.dll - + + PreserveNewest + + + + - - ..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll - - - - + - - ..\packages\System.Reactive.4.1.0\lib\net46\System.Reactive.dll - - - ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.1\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll - - - - ..\packages\System.Threading.Tasks.Extensions.4.5.1\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll - - - ..\packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\System.Windows.Interactivity.dll - + - - - + + + - - - - - - - - - - + - + - - - - - - - - - - - - - - - - - - - - - + + + + - - {bf35190d-b2a7-4cfa-b397-51cb384cf0d7} - Greenshot.Core - - - {f041c685-eb96-4ed1-9ace-0f5bd836610f} - Greenshot.Gfx - - - {5B924697-4DCD-4F98-85F1-105CB84B7341} - Greenshot.Addons - + + + + + + + + + all + runtime; build; native; contentfiles; analyzers + - - - MSBuild:Compile - Designer - - - - mkdir "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons" -copy "$(ProjectDir)bin\$(Configuration)\$(ProjectName).dll" "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons\" -copy "$(ProjectDir)bin\$(Configuration)\$(ProjectName).pdb" "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons\" -mkdir "$(SolutionDir)Greenshot\bin\$(Configuration)\Languages\$(ProjectName)" -copy "$(ProjectDir)\Languages\*.xml" "$(SolutionDir)Greenshot\bin\$(Configuration)\Languages\$(ProjectName)" - - - - \ No newline at end of file + diff --git a/src/Greenshot.Addon.Box/Properties/AssemblyInfo.cs b/src/Greenshot.Addon.Box/Properties/AssemblyInfo.cs deleted file mode 100644 index fb710cb08..000000000 --- a/src/Greenshot.Addon.Box/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,53 +0,0 @@ -#region Greenshot GNU General Public License - -// Greenshot - a free and open source screenshot tool -// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom -// -// For more information see: http://getgreenshot.org/ -// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 1 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -#endregion - -#region Usings - -using System.Reflection; -using System.Runtime.InteropServices; - -#endregion - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. - -[assembly: AssemblyTitle("Greenshot.Addon.Box")] -[assembly: AssemblyDescription("A plugin to upload images to Box")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Greenshot & F. Noel")] -[assembly: AssemblyProduct("Box Plugin")] -[assembly: AssemblyCopyright("Copyright (C) 2012")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// This sets the default COM visibility of types in the assembly to invisible. -// If you need to expose a type to COM, use [ComVisible(true)] on that type. - -[assembly: ComVisible(false)] - -// The assembly version, replaced by build scripts - -[assembly: AssemblyVersion("1.3.0.0")] -[assembly: AssemblyInformationalVersion("1.3.0.0")] -[assembly: AssemblyFileVersion("1.3.0.0")] \ No newline at end of file diff --git a/src/Greenshot.Addon.Box/ViewModels/BoxConfigViewModel.cs b/src/Greenshot.Addon.Box/ViewModels/BoxConfigViewModel.cs index 396b94d43..52599ae9c 100644 --- a/src/Greenshot.Addon.Box/ViewModels/BoxConfigViewModel.cs +++ b/src/Greenshot.Addon.Box/ViewModels/BoxConfigViewModel.cs @@ -24,6 +24,7 @@ using System.Reactive.Disposables; using Dapplo.CaliburnMicro.Configuration; using Dapplo.CaliburnMicro.Extensions; +using Greenshot.Addon.Box.Configuration; using Greenshot.Addons; using Greenshot.Addons.Core.Enums; using Greenshot.Addons.ViewModels; diff --git a/src/Greenshot.Addon.Box/packages.config b/src/Greenshot.Addon.Box/packages.config deleted file mode 100644 index 056ca4629..000000000 --- a/src/Greenshot.Addon.Box/packages.config +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Greenshot.Addon.Confluence/IConfluenceConfiguration.cs b/src/Greenshot.Addon.Confluence/Configuration/IConfluenceConfiguration.cs similarity index 90% rename from src/Greenshot.Addon.Confluence/IConfluenceConfiguration.cs rename to src/Greenshot.Addon.Confluence/Configuration/IConfluenceConfiguration.cs index b2888bb83..0137f54d9 100644 --- a/src/Greenshot.Addon.Confluence/IConfluenceConfiguration.cs +++ b/src/Greenshot.Addon.Confluence/Configuration/IConfluenceConfiguration.cs @@ -24,20 +24,19 @@ #region Usings using System.ComponentModel; -using Dapplo.Ini; -using Dapplo.InterfaceImpl.Extensions; +using Dapplo.Config.Ini; using Greenshot.Core.Enums; #endregion -namespace Greenshot.Addon.Confluence +namespace Greenshot.Addon.Confluence.Configuration { /// /// Description of ConfluenceConfiguration. /// [IniSection("Confluence")] [Description("Greenshot Confluence Plugin configuration")] - public interface IConfluenceConfiguration : IIniSection, ITransactionalProperties, INotifyPropertyChanged + public interface IConfluenceConfiguration : IIniSection { [Description("Url to Confluence system, including wsdl.")] [DefaultValue("https://confluence")] diff --git a/src/Greenshot.Addon.Confluence/IConfluenceLanguage.cs b/src/Greenshot.Addon.Confluence/Configuration/IConfluenceLanguage.cs similarity index 89% rename from src/Greenshot.Addon.Confluence/IConfluenceLanguage.cs rename to src/Greenshot.Addon.Confluence/Configuration/IConfluenceLanguage.cs index a277c983b..dc9ed6b7d 100644 --- a/src/Greenshot.Addon.Confluence/IConfluenceLanguage.cs +++ b/src/Greenshot.Addon.Confluence/Configuration/IConfluenceLanguage.cs @@ -21,13 +21,12 @@ #endregion -using System.ComponentModel; -using Dapplo.Language; +using Dapplo.Config.Language; -namespace Greenshot.Addon.Confluence +namespace Greenshot.Addon.Confluence.Configuration { [Language("Confluence")] - public interface IConfluenceLanguage : ILanguage, INotifyPropertyChanged + public interface IConfluenceLanguage : ILanguage { string PluginSettings { get; } string LoginError { get; } diff --git a/src/Greenshot.Addon.Confluence/Configuration/Impl/ConfluenceConfigurationImpl.cs b/src/Greenshot.Addon.Confluence/Configuration/Impl/ConfluenceConfigurationImpl.cs new file mode 100644 index 000000000..0c04f17ce --- /dev/null +++ b/src/Greenshot.Addon.Confluence/Configuration/Impl/ConfluenceConfigurationImpl.cs @@ -0,0 +1,46 @@ +#region Greenshot GNU General Public License + +// Greenshot - a free and open source screenshot tool +// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom +// +// For more information see: http://getgreenshot.org/ +// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 1 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#endregion + +using Dapplo.Config.Ini; +using Greenshot.Core.Enums; + +namespace Greenshot.Addon.Confluence.Configuration.Impl +{ + internal class ConfluenceConfigurationImpl : IniSectionBase, IConfluenceConfiguration + { + #region Implementation of IConfluenceConfiguration + + public string Url { get; set; } + public int Timeout { get; set; } + public OutputFormats UploadFormat { get; set; } + public int UploadJpegQuality { get; set; } + public bool UploadReduceColors { get; set; } + public string OutputFileFilenamePattern { get; set; } + public bool OpenPageAfterUpload { get; set; } + public bool CopyWikiMarkupForImageToClipboard { get; set; } + public string SearchSpaceKey { get; set; } + public bool IncludePersonSpaces { get; set; } + + #endregion + } +} diff --git a/src/Greenshot.Addon.Confluence/Configuration/Impl/ConfluenceLanguageImpl.cs b/src/Greenshot.Addon.Confluence/Configuration/Impl/ConfluenceLanguageImpl.cs new file mode 100644 index 000000000..d187a34a7 --- /dev/null +++ b/src/Greenshot.Addon.Confluence/Configuration/Impl/ConfluenceLanguageImpl.cs @@ -0,0 +1,64 @@ +#region Greenshot GNU General Public License + +// Greenshot - a free and open source screenshot tool +// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom +// +// For more information see: http://getgreenshot.org/ +// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 1 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#endregion + +using System.Diagnostics.CodeAnalysis; +using Dapplo.Config.Language; + +namespace Greenshot.Addon.Confluence.Configuration.Impl +{ + /// + /// This implements IConfluenceLanguage and takes care of storing, all setters are replaced via AutoProperties.Fody + /// + [SuppressMessage("ReSharper", "UnassignedGetOnlyAutoProperty")] +#pragma warning disable CS1591 + public class ConfluenceLanguageImpl : LanguageBase, IConfluenceLanguage + { + #region Implementation of IConfluenceLanguage + + public string PluginSettings { get; } + public string LoginError { get; } + public string LabelUrl { get; } + public string LabelTimeout { get; } + public string LabelUser { get; } + public string LabelPassword { get; } + public string LoginTitle { get; } + public string Ok { get; } + public string Cancel { get; } + public string OpenPageAfterUpload { get; } + public string UploadFormat { get; } + public string CopyWikimarkup { get; } + public string Filename { get; } + public string Upload { get; } + public string UploadMenuItem { get; } + public string OpenPages { get; } + public string SearchPages { get; } + public string BrowsePages { get; } + public string SearchText { get; } + public string Search { get; } + public string Loading { get; } + public string IncludePersonSpaces { get; } + public string CommunicationWait { get; } + + #endregion + } +} diff --git a/src/Greenshot.Addon.Confluence/ConfluenceAddonModule.cs b/src/Greenshot.Addon.Confluence/ConfluenceAddonModule.cs index 3df62fa52..8ccfdf5bc 100644 --- a/src/Greenshot.Addon.Confluence/ConfluenceAddonModule.cs +++ b/src/Greenshot.Addon.Confluence/ConfluenceAddonModule.cs @@ -24,8 +24,10 @@ using Autofac; using Dapplo.Addons; using Dapplo.CaliburnMicro.Configuration; -using Dapplo.Ini; -using Dapplo.Language; +using Dapplo.Config.Ini; +using Dapplo.Config.Language; +using Greenshot.Addon.Confluence.Configuration; +using Greenshot.Addon.Confluence.Configuration.Impl; using Greenshot.Addon.Confluence.ViewModels; using Greenshot.Addons.Components; @@ -37,19 +39,22 @@ namespace Greenshot.Addon.Confluence protected override void Load(ContainerBuilder builder) { builder - .Register(context => IniConfig.Current.Get()) + .RegisterType() .As() + .As() .SingleInstance(); builder - .Register(context => LanguageLoader.Current.Get()) + .RegisterType() .As() + .As() .SingleInstance(); builder .RegisterType() .As() .SingleInstance(); + builder .RegisterType() .As() diff --git a/src/Greenshot.Addon.Confluence/ConfluenceDestination.cs b/src/Greenshot.Addon.Confluence/ConfluenceDestination.cs index a93daddf0..a3bbc75ae 100644 --- a/src/Greenshot.Addon.Confluence/ConfluenceDestination.cs +++ b/src/Greenshot.Addon.Confluence/ConfluenceDestination.cs @@ -33,6 +33,7 @@ using Autofac.Features.OwnedInstances; using Dapplo.Confluence; using Dapplo.Confluence.Entities; using Dapplo.Log; +using Greenshot.Addon.Confluence.Configuration; using Greenshot.Addons; using Greenshot.Addons.Components; using Greenshot.Addons.Controls; diff --git a/src/Greenshot.Addon.Confluence/FodyWeavers.xml b/src/Greenshot.Addon.Confluence/FodyWeavers.xml index e258ea534..29037aa37 100644 --- a/src/Greenshot.Addon.Confluence/FodyWeavers.xml +++ b/src/Greenshot.Addon.Confluence/FodyWeavers.xml @@ -1,9 +1,10 @@ - - - - + + + + \ No newline at end of file diff --git a/src/Greenshot.Addon.Confluence/FodyWeavers.xsd b/src/Greenshot.Addon.Confluence/FodyWeavers.xsd new file mode 100644 index 000000000..061979a03 --- /dev/null +++ b/src/Greenshot.Addon.Confluence/FodyWeavers.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + 'true' to run assembly verification on the target assembly after all weavers have been finished. + + + + + A comma separated list of error codes that can be safely ignored in assembly verification. + + + + + \ No newline at end of file diff --git a/src/Greenshot.Addon.Confluence/Greenshot.Addon.Confluence.csproj b/src/Greenshot.Addon.Confluence/Greenshot.Addon.Confluence.csproj index 9f55faa00..18ab0ddff 100644 --- a/src/Greenshot.Addon.Confluence/Greenshot.Addon.Confluence.csproj +++ b/src/Greenshot.Addon.Confluence/Greenshot.Addon.Confluence.csproj @@ -1,140 +1,18 @@ - - - + + - {C3052651-598A-44E2-AAB3-2E41311D50F9} - {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library Greenshot.Addon.Confluence Greenshot.Addon.Confluence - v4.6.1 - Properties - False - False - 4 - false - - - - - - 3.5 - - + net471;netcoreapp3.0 - + - - ..\packages\Autofac.4.8.1\lib\net45\Autofac.dll - - - ..\packages\Autofac.Extras.AttributeMetadata.4.0.1\lib\net45\Autofac.Extras.AttributeMetadata.dll - - - ..\packages\Autofac.Mef.4.0.0\lib\net45\Autofac.Integration.Mef.dll - - - ..\packages\Caliburn.Micro.Core.3.2.0\lib\net45\Caliburn.Micro.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\Caliburn.Micro.Platform.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\Caliburn.Micro.Platform.Core.dll - - - ..\packages\CommonServiceLocator.2.0.4\lib\net46\CommonServiceLocator.dll - - - ..\packages\Costura.Fody.3.1.0\lib\net46\Costura.dll - - - ..\packages\Dapplo.Addons.1.0.79\lib\net461\Dapplo.Addons.dll - - - ..\packages\Dapplo.Addons.Bootstrapper.1.0.79\lib\net461\Dapplo.Addons.Bootstrapper.dll - - - ..\packages\Dapplo.CaliburnMicro.1.0.75\lib\net461\Dapplo.CaliburnMicro.dll - - - ..\packages\Dapplo.CaliburnMicro.Configuration.1.0.75\lib\net461\Dapplo.CaliburnMicro.Configuration.dll - - - ..\packages\Dapplo.CaliburnMicro.Dapp.1.0.75\lib\net461\Dapplo.CaliburnMicro.Dapp.dll - - - ..\packages\Dapplo.CaliburnMicro.Menu.1.0.75\lib\net461\Dapplo.CaliburnMicro.Menu.dll - - - ..\packages\Dapplo.CaliburnMicro.Security.1.0.75\lib\net461\Dapplo.CaliburnMicro.Security.dll - - - ..\packages\Dapplo.CaliburnMicro.Translations.1.0.75\lib\net461\Dapplo.CaliburnMicro.Translations.dll - - - ..\packages\Dapplo.Confluence.0.7.19\lib\net46\Dapplo.Confluence.dll - - - ..\packages\Dapplo.HttpExtensions.0.8.46\lib\net46\Dapplo.HttpExtensions.dll - - - ..\packages\Dapplo.HttpExtensions.JsonSimple.0.8.46\lib\net46\Dapplo.HttpExtensions.JsonSimple.dll - - - ..\packages\Dapplo.HttpExtensions.OAuth.0.8.46\lib\net46\Dapplo.HttpExtensions.OAuth.dll - - - ..\packages\Dapplo.Ini.0.5.31\lib\net45\Dapplo.Ini.dll - - - ..\packages\Dapplo.InterfaceImpl.0.2.12\lib\net45\Dapplo.InterfaceImpl.dll - - - ..\packages\Dapplo.Language.0.5.31\lib\net45\Dapplo.Language.dll - - - ..\packages\Dapplo.Log.1.2.1\lib\net45\Dapplo.Log.dll - - - ..\packages\Dapplo.Utils.1.0.161\lib\net45\Dapplo.Utils.dll - - - ..\packages\Dapplo.Windows.0.5.109\lib\net461\Dapplo.Windows.dll - - - ..\packages\Dapplo.Windows.Clipboard.0.5.109\lib\net461\Dapplo.Windows.Clipboard.dll - - - ..\packages\Dapplo.Windows.Com.0.5.109\lib\net461\Dapplo.Windows.Com.dll - - - ..\packages\Dapplo.Windows.Common.0.5.109\lib\net461\Dapplo.Windows.Common.dll - - - ..\packages\Dapplo.Windows.DesktopWindowsManager.0.5.109\lib\net461\Dapplo.Windows.DesktopWindowsManager.dll - - - ..\packages\Dapplo.Windows.Dpi.0.5.109\lib\net461\Dapplo.Windows.Dpi.dll - - - ..\packages\Dapplo.Windows.EmbeddedBrowser.0.5.109\lib\net461\Dapplo.Windows.EmbeddedBrowser.dll - - - ..\packages\Dapplo.Windows.Gdi32.0.5.109\lib\net461\Dapplo.Windows.Gdi32.dll - - - ..\packages\Dapplo.Windows.Input.0.5.109\lib\net461\Dapplo.Windows.Input.dll - - - ..\packages\Dapplo.Windows.Kernel32.0.5.109\lib\net461\Dapplo.Windows.Kernel32.dll - - - ..\packages\Dapplo.Windows.Messages.0.5.109\lib\net461\Dapplo.Windows.Messages.dll - - - ..\packages\Dapplo.Windows.User32.0.5.109\lib\net461\Dapplo.Windows.User32.dll - + + PreserveNewest + + + + @@ -142,110 +20,46 @@ - - 3.5 - + - - - ..\packages\System.Reactive.4.1.0\lib\net46\System.Reactive.dll - - - ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.1\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll - - - ..\packages\System.Threading.Tasks.Extensions.4.5.1\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll - - - ..\packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\System.Windows.Interactivity.dll - - - 3.5 - - - 3.0 - - - 3.0 - + + + + - - - - - - - - - - - - Never - - - Never - - - Never - + + - - MSBuild:Compile - Designer - + + + + + - - {4cca2717-b8a4-44f7-965b-5687107e4921} - Greenshot.Addon.InternetExplorer - - - {bf35190d-b2a7-4cfa-b397-51cb384cf0d7} - Greenshot.Core - - - {f041c685-eb96-4ed1-9ace-0f5bd836610f} - Greenshot.Gfx - - - {5B924697-4DCD-4F98-85F1-105CB84B7341} - Greenshot.Addons - False - + + + + + + + + + all + runtime; build; native; contentfiles; analyzers + - - - - - mkdir "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons" -copy "$(ProjectDir)bin\$(Configuration)\$(ProjectName).dll" "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons\" -copy "$(ProjectDir)bin\$(Configuration)\$(ProjectName).pdb" "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons\" -mkdir "$(SolutionDir)Greenshot\bin\$(Configuration)\Languages\$(ProjectName)" -copy "$(ProjectDir)\Languages\*.xml" "$(SolutionDir)Greenshot\bin\$(Configuration)\Languages\$(ProjectName)" - - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - - \ No newline at end of file + diff --git a/src/Greenshot.Addon.Confluence/Properties/AssemblyInfo.cs b/src/Greenshot.Addon.Confluence/Properties/AssemblyInfo.cs deleted file mode 100644 index 2b8386382..000000000 --- a/src/Greenshot.Addon.Confluence/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,53 +0,0 @@ -#region Greenshot GNU General Public License - -// Greenshot - a free and open source screenshot tool -// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom -// -// For more information see: http://getgreenshot.org/ -// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 1 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -#endregion - -#region Usings - -using System.Reflection; -using System.Runtime.InteropServices; - -#endregion - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. - -[assembly: AssemblyTitle("Greenshot.Addon.Confluence")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Greenshot")] -[assembly: AssemblyProduct("Confluence Plugin")] -[assembly: AssemblyCopyright("Copyright (C) 2007-2018")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// This sets the default COM visibility of types in the assembly to invisible. -// If you need to expose a type to COM, use [ComVisible(true)] on that type. - -[assembly: ComVisible(false)] - -// The assembly version, replaced by build scripts - -[assembly: AssemblyVersion("1.3.0.0")] -[assembly: AssemblyInformationalVersion("1.3.0.0")] -[assembly: AssemblyFileVersion("1.3.0.0")] \ No newline at end of file diff --git a/src/Greenshot.Addon.Confluence/ViewModels/ConfluenceConfigViewModel.cs b/src/Greenshot.Addon.Confluence/ViewModels/ConfluenceConfigViewModel.cs index e18288339..88a69aa84 100644 --- a/src/Greenshot.Addon.Confluence/ViewModels/ConfluenceConfigViewModel.cs +++ b/src/Greenshot.Addon.Confluence/ViewModels/ConfluenceConfigViewModel.cs @@ -25,6 +25,7 @@ using System.Collections.Generic; using System.Reactive.Disposables; using Dapplo.CaliburnMicro.Configuration; using Dapplo.CaliburnMicro.Extensions; +using Greenshot.Addon.Confluence.Configuration; using Greenshot.Addons; using Greenshot.Addons.Core.Enums; using Greenshot.Addons.Extensions; diff --git a/src/Greenshot.Addon.Confluence/packages.config b/src/Greenshot.Addon.Confluence/packages.config deleted file mode 100644 index 9ab7b4f4d..000000000 --- a/src/Greenshot.Addon.Confluence/packages.config +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Greenshot.Addon.Dropbox/IDropboxConfiguration.cs b/src/Greenshot.Addon.Dropbox/Configuration/IDropboxConfiguration.cs similarity index 89% rename from src/Greenshot.Addon.Dropbox/IDropboxConfiguration.cs rename to src/Greenshot.Addon.Dropbox/Configuration/IDropboxConfiguration.cs index 0281e2dc0..7db934fc6 100644 --- a/src/Greenshot.Addon.Dropbox/IDropboxConfiguration.cs +++ b/src/Greenshot.Addon.Dropbox/Configuration/IDropboxConfiguration.cs @@ -25,21 +25,20 @@ using System.ComponentModel; using System.Runtime.Serialization; +using Dapplo.Config.Ini; using Dapplo.HttpExtensions.OAuth; -using Dapplo.Ini; -using Dapplo.InterfaceImpl.Extensions; using Greenshot.Addons.Core; #endregion -namespace Greenshot.Addon.Dropbox +namespace Greenshot.Addon.Dropbox.Configuration { /// /// Description of ImgurConfiguration. /// [IniSection("Dropbox")] [Description("Greenshot Dropbox Plugin configuration")] - public interface IDropboxConfiguration : IIniSection, IDestinationFileConfiguration, IOAuth2Token, INotifyPropertyChanged, ITransactionalProperties + public interface IDropboxConfiguration : IIniSection, IDestinationFileConfiguration, IOAuth2Token { [Description("After upload send Dropbox link to clipboard.")] [DefaultValue(true)] diff --git a/src/Greenshot.Addon.Dropbox/IDropboxLanguage.cs b/src/Greenshot.Addon.Dropbox/Configuration/IDropboxLanguage.cs similarity index 86% rename from src/Greenshot.Addon.Dropbox/IDropboxLanguage.cs rename to src/Greenshot.Addon.Dropbox/Configuration/IDropboxLanguage.cs index 8d021b16e..a69f8c071 100644 --- a/src/Greenshot.Addon.Dropbox/IDropboxLanguage.cs +++ b/src/Greenshot.Addon.Dropbox/Configuration/IDropboxLanguage.cs @@ -19,15 +19,14 @@ #region Usings -using System.ComponentModel; -using Dapplo.Language; +using Dapplo.Config.Language; #endregion -namespace Greenshot.Addon.Dropbox +namespace Greenshot.Addon.Dropbox.Configuration { [Language("Dropbox")] - public interface IDropboxLanguage : ILanguage, INotifyPropertyChanged + public interface IDropboxLanguage : ILanguage { string CommunicationWait { get; } diff --git a/src/Greenshot.Addon.Dropbox/Configuration/Impl/DropboxConfigurationImpl.cs b/src/Greenshot.Addon.Dropbox/Configuration/Impl/DropboxConfigurationImpl.cs new file mode 100644 index 000000000..6a7726621 --- /dev/null +++ b/src/Greenshot.Addon.Dropbox/Configuration/Impl/DropboxConfigurationImpl.cs @@ -0,0 +1,73 @@ +// Greenshot - a free and open source screenshot tool +// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom +// +// For more information see: http://getgreenshot.org/ +// The Greenshot project is hosted on GitHub: https://github.com/greenshot +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 1 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +using System; +using System.ComponentModel; +using Dapplo.Config.Ini; +using Dapplo.Config.Ini.Converters; +using Greenshot.Core.Enums; + +namespace Greenshot.Addon.Dropbox.Configuration.Impl +{ + public class DropboxConfigurationImpl : IniSectionBase, IDropboxConfiguration + { + #region Implementation of IFileConfiguration + + public string OutputFilePath { get; set; } + public bool OutputFileAllowOverwrite { get; set; } + public string OutputFileFilenamePattern { get; set; } + public OutputFormats OutputFileFormat { get; set; } + public bool OutputFileReduceColors { get; set; } + public bool OutputFileAutoReduceColors { get; set; } + public int OutputFileReduceColorsTo { get; set; } + public int OutputFileJpegQuality { get; set; } + public bool OutputFilePromptQuality { get; set; } + public uint OutputFileIncrementingNumber { get; set; } + public string OptimizePNGCommand { get; set; } + public string OptimizePNGCommandArguments { get; set; } + + #endregion + + #region Implementation of IDestinationFileConfiguration + + public bool UseOwnSettings { get; set; } + + #endregion + + #region Implementation of IOAuth2Token + + [TypeConverter(typeof(StringEncryptionTypeConverter))] + public string OAuth2AccessToken { get; set; } + + public DateTimeOffset OAuth2AccessTokenExpires { get; set; } + + [TypeConverter(typeof(StringEncryptionTypeConverter))] + public string OAuth2RefreshToken { get; set; } + + #endregion + + #region Implementation of IDropboxConfiguration + + public bool AfterUploadLinkToClipBoard { get; set; } + public string ClientId { get; set; } + public string ClientSecret { get; set; } + + #endregion + } +} diff --git a/src/Greenshot.Addon.Dropbox/Configuration/Impl/DropboxLanguageImpl.cs b/src/Greenshot.Addon.Dropbox/Configuration/Impl/DropboxLanguageImpl.cs new file mode 100644 index 000000000..62ffdb1e2 --- /dev/null +++ b/src/Greenshot.Addon.Dropbox/Configuration/Impl/DropboxLanguageImpl.cs @@ -0,0 +1,46 @@ +// Greenshot - a free and open source screenshot tool +// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom +// +// For more information see: http://getgreenshot.org/ +// The Greenshot project is hosted on GitHub: https://github.com/greenshot +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 1 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +using System.Diagnostics.CodeAnalysis; +using Dapplo.Config.Language; + +namespace Greenshot.Addon.Dropbox.Configuration.Impl +{ + /// + /// This implements IDropboxLanguage and takes care of storing, all setters are replaced via AutoProperties.Fody + /// +#pragma warning disable CS1591 + [SuppressMessage("ReSharper", "UnassignedGetOnlyAutoProperty")] + public class DropboxLanguageImpl: LanguageBase, IDropboxLanguage + { + #region Implementation of IDropboxLanguage + + public string CommunicationWait { get; } + public string Configure { get; } + public string LabelAfterUpload { get; } + public string LabelAfterUploadLinkToClipBoard { get; } + public string LabelUploadFormat { get; } + public string SettingsTitle { get; } + public string UploadFailure { get; } + public string UploadMenuItem { get; } + public string UploadSuccess { get; } + + #endregion + } +} diff --git a/src/Greenshot.Addon.Dropbox/DropboxAddonModule.cs b/src/Greenshot.Addon.Dropbox/DropboxAddonModule.cs index f2dd1d482..550aa6074 100644 --- a/src/Greenshot.Addon.Dropbox/DropboxAddonModule.cs +++ b/src/Greenshot.Addon.Dropbox/DropboxAddonModule.cs @@ -24,8 +24,10 @@ using Autofac; using Dapplo.Addons; using Dapplo.CaliburnMicro.Configuration; -using Dapplo.Ini; -using Dapplo.Language; +using Dapplo.Config.Ini; +using Dapplo.Config.Language; +using Greenshot.Addon.Dropbox.Configuration; +using Greenshot.Addon.Dropbox.Configuration.Impl; using Greenshot.Addon.Dropbox.ViewModels; using Greenshot.Addons.Components; @@ -37,13 +39,15 @@ namespace Greenshot.Addon.Dropbox protected override void Load(ContainerBuilder builder) { builder - .Register(context => IniConfig.Current.Get()) + .RegisterType() .As() + .As() .SingleInstance(); builder - .Register(context => LanguageLoader.Current.Get()) + .RegisterType() .As() + .As() .SingleInstance(); builder diff --git a/src/Greenshot.Addon.Dropbox/DropboxDestination.cs b/src/Greenshot.Addon.Dropbox/DropboxDestination.cs index f032e72b5..3ec3bf145 100644 --- a/src/Greenshot.Addon.Dropbox/DropboxDestination.cs +++ b/src/Greenshot.Addon.Dropbox/DropboxDestination.cs @@ -39,6 +39,7 @@ using Dapplo.HttpExtensions.OAuth; using Dapplo.Log; using Dapplo.Utils; using Dapplo.Windows.Clipboard; +using Greenshot.Addon.Dropbox.Configuration; using Greenshot.Addon.Dropbox.Entities; using Greenshot.Addons; using Greenshot.Addons.Components; @@ -197,7 +198,7 @@ namespace Greenshot.Addon.Dropbox /// IProgress /// CancellationToken /// Url as string - private async Task UploadAsync(string filename, HttpContent content, IProgress progress = null, CancellationToken cancellationToken = default(CancellationToken)) + private async Task UploadAsync(string filename, HttpContent content, IProgress progress = null, CancellationToken cancellationToken = default) { var oAuthHttpBehaviour = _oAuthHttpBehaviour.ShallowClone(); // Use UploadProgress diff --git a/src/Greenshot.Addon.Dropbox/Entities/ErrorTag.cs b/src/Greenshot.Addon.Dropbox/Entities/ErrorTag.cs index b6099cb18..98f7c382c 100644 --- a/src/Greenshot.Addon.Dropbox/Entities/ErrorTag.cs +++ b/src/Greenshot.Addon.Dropbox/Entities/ErrorTag.cs @@ -1,4 +1,23 @@ -using Newtonsoft.Json; +// Greenshot - a free and open source screenshot tool +// Copyright (C) 2007-2017 Thomas Braun, Jens Klingen, Robin Krom +// +// For more information see: http://getgreenshot.org/ +// The Greenshot project is hosted on GitHub: https://github.com/greenshot +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 1 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +using Newtonsoft.Json; namespace Greenshot.Addon.Dropbox.Entities { diff --git a/src/Greenshot.Addon.Dropbox/Entities/SharingInfo.cs b/src/Greenshot.Addon.Dropbox/Entities/SharingInfo.cs index 90621d9ee..c29f22d14 100644 --- a/src/Greenshot.Addon.Dropbox/Entities/SharingInfo.cs +++ b/src/Greenshot.Addon.Dropbox/Entities/SharingInfo.cs @@ -1,4 +1,23 @@ -using Newtonsoft.Json; +// Greenshot - a free and open source screenshot tool +// Copyright (C) 2007-2017 Thomas Braun, Jens Klingen, Robin Krom +// +// For more information see: http://getgreenshot.org/ +// The Greenshot project is hosted on GitHub: https://github.com/greenshot +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 1 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +using Newtonsoft.Json; namespace Greenshot.Addon.Dropbox.Entities { diff --git a/src/Greenshot.Addon.Dropbox/FodyWeavers.xml b/src/Greenshot.Addon.Dropbox/FodyWeavers.xml new file mode 100644 index 000000000..7f5a26669 --- /dev/null +++ b/src/Greenshot.Addon.Dropbox/FodyWeavers.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/Greenshot.Addon.Dropbox/FodyWeavers.xsd b/src/Greenshot.Addon.Dropbox/FodyWeavers.xsd new file mode 100644 index 000000000..061979a03 --- /dev/null +++ b/src/Greenshot.Addon.Dropbox/FodyWeavers.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + 'true' to run assembly verification on the target assembly after all weavers have been finished. + + + + + A comma separated list of error codes that can be safely ignored in assembly verification. + + + + + \ No newline at end of file diff --git a/src/Greenshot.Addon.Dropbox/Greenshot.Addon.Dropbox.csproj b/src/Greenshot.Addon.Dropbox/Greenshot.Addon.Dropbox.csproj index 1a7825e90..22977b908 100644 --- a/src/Greenshot.Addon.Dropbox/Greenshot.Addon.Dropbox.csproj +++ b/src/Greenshot.Addon.Dropbox/Greenshot.Addon.Dropbox.csproj @@ -1,137 +1,20 @@ - - - + + - {AD7CFFE2-40E7-46CF-A172-D48CF7AE9A12} - {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library Greenshot.Addon.Dropbox Greenshot.Addon.Dropbox - v4.6.1 - Properties - False - False - 4 - false - - - - - - 3.5 + net471;netcoreapp3.0 - + - - ..\packages\Autofac.4.8.1\lib\net45\Autofac.dll - - - ..\packages\Autofac.Extras.AttributeMetadata.4.0.1\lib\net45\Autofac.Extras.AttributeMetadata.dll - - - ..\packages\Autofac.Mef.4.0.0\lib\net45\Autofac.Integration.Mef.dll - - - ..\packages\Caliburn.Micro.Core.3.2.0\lib\net45\Caliburn.Micro.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\Caliburn.Micro.Platform.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\Caliburn.Micro.Platform.Core.dll - - - ..\packages\CommonServiceLocator.2.0.4\lib\net46\CommonServiceLocator.dll - - - ..\packages\Dapplo.Addons.1.0.79\lib\net461\Dapplo.Addons.dll - - - ..\packages\Dapplo.Addons.Bootstrapper.1.0.79\lib\net461\Dapplo.Addons.Bootstrapper.dll - - - ..\packages\Dapplo.CaliburnMicro.1.0.75\lib\net461\Dapplo.CaliburnMicro.dll - - - ..\packages\Dapplo.CaliburnMicro.Configuration.1.0.75\lib\net461\Dapplo.CaliburnMicro.Configuration.dll - - - ..\packages\Dapplo.CaliburnMicro.Dapp.1.0.75\lib\net461\Dapplo.CaliburnMicro.Dapp.dll - - - ..\packages\Dapplo.CaliburnMicro.Menu.1.0.75\lib\net461\Dapplo.CaliburnMicro.Menu.dll - - - ..\packages\Dapplo.CaliburnMicro.Security.1.0.75\lib\net461\Dapplo.CaliburnMicro.Security.dll - - - ..\packages\Dapplo.CaliburnMicro.Translations.1.0.75\lib\net461\Dapplo.CaliburnMicro.Translations.dll - - - ..\packages\Dapplo.HttpExtensions.0.8.46\lib\net46\Dapplo.HttpExtensions.dll - - - ..\packages\Dapplo.HttpExtensions.JsonNet.0.8.46\lib\net46\Dapplo.HttpExtensions.JsonNet.dll - - - ..\packages\Dapplo.HttpExtensions.OAuth.0.8.46\lib\net46\Dapplo.HttpExtensions.OAuth.dll - - - ..\packages\Dapplo.Ini.0.5.31\lib\net45\Dapplo.Ini.dll - - - ..\packages\Dapplo.InterfaceImpl.0.2.12\lib\net45\Dapplo.InterfaceImpl.dll - - - ..\packages\Dapplo.Language.0.5.31\lib\net45\Dapplo.Language.dll - - - ..\packages\Dapplo.Log.1.2.1\lib\net45\Dapplo.Log.dll - - - ..\packages\Dapplo.Utils.1.0.161\lib\net45\Dapplo.Utils.dll - - - ..\packages\Dapplo.Windows.0.5.109\lib\net461\Dapplo.Windows.dll - - - ..\packages\Dapplo.Windows.Clipboard.0.5.109\lib\net461\Dapplo.Windows.Clipboard.dll - - - ..\packages\Dapplo.Windows.Com.0.5.109\lib\net461\Dapplo.Windows.Com.dll - - - ..\packages\Dapplo.Windows.Common.0.5.109\lib\net461\Dapplo.Windows.Common.dll - - - ..\packages\Dapplo.Windows.DesktopWindowsManager.0.5.109\lib\net461\Dapplo.Windows.DesktopWindowsManager.dll - - - ..\packages\Dapplo.Windows.Dpi.0.5.109\lib\net461\Dapplo.Windows.Dpi.dll - - - ..\packages\Dapplo.Windows.EmbeddedBrowser.0.5.109\lib\net461\Dapplo.Windows.EmbeddedBrowser.dll - - - ..\packages\Dapplo.Windows.Gdi32.0.5.109\lib\net461\Dapplo.Windows.Gdi32.dll - - - ..\packages\Dapplo.Windows.Input.0.5.109\lib\net461\Dapplo.Windows.Input.dll - - - ..\packages\Dapplo.Windows.Kernel32.0.5.109\lib\net461\Dapplo.Windows.Kernel32.dll - - - ..\packages\Dapplo.Windows.Messages.0.5.109\lib\net461\Dapplo.Windows.Messages.dll - - - ..\packages\Dapplo.Windows.User32.0.5.109\lib\net461\Dapplo.Windows.User32.dll - + + PreserveNewest + + + + - - ..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll - @@ -140,99 +23,38 @@ - - ..\packages\System.Reactive.4.1.0\lib\net46\System.Reactive.dll - - - ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.1\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll - - - ..\packages\System.Threading.Tasks.Extensions.4.5.1\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll - - - ..\packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\System.Windows.Interactivity.dll - + - - - - - - - - - - - - - - + + - - - - + + + + - - {bf35190d-b2a7-4cfa-b397-51cb384cf0d7} - Greenshot.Core - - - {f041c685-eb96-4ed1-9ace-0f5bd836610f} - Greenshot.Gfx - - - {5B924697-4DCD-4F98-85F1-105CB84B7341} - Greenshot.Addons - + + + + + + + + + all + runtime; build; native; contentfiles; analyzers + - - - MSBuild:Compile - Designer - - - - - - - - - - - - - - - - - - - - - - - mkdir "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons" -copy "$(ProjectDir)bin\$(Configuration)\$(ProjectName).dll" "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons\" -copy "$(ProjectDir)bin\$(Configuration)\$(ProjectName).pdb" "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons\" -mkdir "$(SolutionDir)Greenshot\bin\$(Configuration)\Languages\$(ProjectName)" -copy "$(ProjectDir)\Languages\*.xml" "$(SolutionDir)Greenshot\bin\$(Configuration)\Languages\$(ProjectName)" - - - - \ No newline at end of file + diff --git a/src/Greenshot.Addon.Dropbox/Properties/AssemblyInfo.cs b/src/Greenshot.Addon.Dropbox/Properties/AssemblyInfo.cs deleted file mode 100644 index 803f5d137..000000000 --- a/src/Greenshot.Addon.Dropbox/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,53 +0,0 @@ -#region Greenshot GNU General Public License - -// Greenshot - a free and open source screenshot tool -// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom -// -// For more information see: http://getgreenshot.org/ -// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 1 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -#endregion - -#region Usings - -using System.Reflection; -using System.Runtime.InteropServices; - -#endregion - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. - -[assembly: AssemblyTitle("Greenshot.Addon.Dropbox")] -[assembly: AssemblyDescription("A plugin to upload images to Dropbox")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Greenshot & F. Noel")] -[assembly: AssemblyProduct("Dropbox Plugin")] -[assembly: AssemblyCopyright("Copyright (C) 2012")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// This sets the default COM visibility of types in the assembly to invisible. -// If you need to expose a type to COM, use [ComVisible(true)] on that type. - -[assembly: ComVisible(false)] - -// The assembly version, replaced by build scripts - -[assembly: AssemblyVersion("1.3.0.0")] -[assembly: AssemblyInformationalVersion("1.3.0.0")] -[assembly: AssemblyFileVersion("1.3.0.0")] \ No newline at end of file diff --git a/src/Greenshot.Addon.Dropbox/ViewModels/DropboxConfigViewModel.cs b/src/Greenshot.Addon.Dropbox/ViewModels/DropboxConfigViewModel.cs index 73fb04dcb..a374d28a2 100644 --- a/src/Greenshot.Addon.Dropbox/ViewModels/DropboxConfigViewModel.cs +++ b/src/Greenshot.Addon.Dropbox/ViewModels/DropboxConfigViewModel.cs @@ -24,6 +24,7 @@ using System.Reactive.Disposables; using Dapplo.CaliburnMicro.Configuration; using Dapplo.CaliburnMicro.Extensions; +using Greenshot.Addon.Dropbox.Configuration; using Greenshot.Addons.Core.Enums; using Greenshot.Addons.ViewModels; diff --git a/src/Greenshot.Addon.Dropbox/app.config b/src/Greenshot.Addon.Dropbox/app.config index c20c0c817..6a1ce8f95 100644 --- a/src/Greenshot.Addon.Dropbox/app.config +++ b/src/Greenshot.Addon.Dropbox/app.config @@ -1,27 +1,8 @@  - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + diff --git a/src/Greenshot.Addon.Dropbox/packages.config b/src/Greenshot.Addon.Dropbox/packages.config deleted file mode 100644 index 056ca4629..000000000 --- a/src/Greenshot.Addon.Dropbox/packages.config +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Greenshot.Addon.ExternalCommand/ExternalCommandConfigurationExtensions.cs b/src/Greenshot.Addon.ExternalCommand/Configuration/ExternalCommandConfigurationExtensions.cs similarity index 96% rename from src/Greenshot.Addon.ExternalCommand/ExternalCommandConfigurationExtensions.cs rename to src/Greenshot.Addon.ExternalCommand/Configuration/ExternalCommandConfigurationExtensions.cs index 8b2377e46..09dd9177c 100644 --- a/src/Greenshot.Addon.ExternalCommand/ExternalCommandConfigurationExtensions.cs +++ b/src/Greenshot.Addon.ExternalCommand/Configuration/ExternalCommandConfigurationExtensions.cs @@ -26,7 +26,7 @@ using System.IO; using Greenshot.Addon.ExternalCommand.Entities; using Greenshot.Addons.Core; -namespace Greenshot.Addon.ExternalCommand +namespace Greenshot.Addon.ExternalCommand.Configuration { /// /// Helper extensions for the external command configuration diff --git a/src/Greenshot.Addon.ExternalCommand/IExternalCommandConfiguration.cs b/src/Greenshot.Addon.ExternalCommand/Configuration/IExternalCommandConfiguration.cs similarity index 85% rename from src/Greenshot.Addon.ExternalCommand/IExternalCommandConfiguration.cs rename to src/Greenshot.Addon.ExternalCommand/Configuration/IExternalCommandConfiguration.cs index 6d3796a38..73680e07e 100644 --- a/src/Greenshot.Addon.ExternalCommand/IExternalCommandConfiguration.cs +++ b/src/Greenshot.Addon.ExternalCommand/Configuration/IExternalCommandConfiguration.cs @@ -25,21 +25,22 @@ using System.Collections.Generic; using System.ComponentModel; -using Dapplo.Ini; -using Dapplo.InterfaceImpl.Extensions; +using System.Diagnostics.CodeAnalysis; +using Dapplo.Config.Ini; using Greenshot.Addon.ExternalCommand.Entities; using Greenshot.Addons.Core; #endregion -namespace Greenshot.Addon.ExternalCommand +namespace Greenshot.Addon.ExternalCommand.Configuration { /// /// Description of FlickrConfiguration. /// [IniSection("ExternalCommand")] [Description("Greenshot ExternalCommand Plugin configuration")] - public interface IExternalCommandConfiguration : IIniSection, IDestinationFileConfiguration, ITransactionalProperties, INotifyPropertyChanged + [SuppressMessage("ReSharper", "UnusedMember.Global")] + public interface IExternalCommandConfiguration : IIniSection, IDestinationFileConfiguration { [Description("The commands that are available.")] IList Commands { get; set; } diff --git a/src/Greenshot.Addon.ExternalCommand/IExternalCommandLanguage.cs b/src/Greenshot.Addon.ExternalCommand/Configuration/IExternalCommandLanguage.cs similarity index 84% rename from src/Greenshot.Addon.ExternalCommand/IExternalCommandLanguage.cs rename to src/Greenshot.Addon.ExternalCommand/Configuration/IExternalCommandLanguage.cs index 88f978307..66f2b991a 100644 --- a/src/Greenshot.Addon.ExternalCommand/IExternalCommandLanguage.cs +++ b/src/Greenshot.Addon.ExternalCommand/Configuration/IExternalCommandLanguage.cs @@ -21,13 +21,14 @@ #endregion -using System.ComponentModel; -using Dapplo.Language; +using System.Diagnostics.CodeAnalysis; +using Dapplo.Config.Language; -namespace Greenshot.Addon.ExternalCommand +namespace Greenshot.Addon.ExternalCommand.Configuration { [Language("ExternalCommand")] - public interface IExternalCommandLanguage : ILanguage, INotifyPropertyChanged + [SuppressMessage("ReSharper", "UnusedMember.Global")] + public interface IExternalCommandLanguage : ILanguage { string ContextmenuConfigure { get; } string SettingsEdit { get; } diff --git a/src/Greenshot.Addon.ExternalCommand/Configuration/Impl/ExternalCommandConfigurationImpl.cs b/src/Greenshot.Addon.ExternalCommand/Configuration/Impl/ExternalCommandConfigurationImpl.cs new file mode 100644 index 000000000..1c6ac8333 --- /dev/null +++ b/src/Greenshot.Addon.ExternalCommand/Configuration/Impl/ExternalCommandConfigurationImpl.cs @@ -0,0 +1,77 @@ +#region Greenshot GNU General Public License + +// Greenshot - a free and open source screenshot tool +// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom +// +// For more information see: http://getgreenshot.org/ +// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 1 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#endregion + +using System.Collections.Generic; +using Dapplo.Config.Ini; +using Greenshot.Addon.ExternalCommand.Entities; +using Greenshot.Core.Enums; + +namespace Greenshot.Addon.ExternalCommand.Configuration.Impl +{ + internal class ExternalCommandConfigurationImpl : IniSectionBase, IExternalCommandConfiguration + { + #region Overrides of IniSectionBase + + public override void AfterLoad() + { + ExternalCommandConfigurationExtensions.AfterLoad(this); + base.AfterLoad(); + } + + #endregion + + #region Implementation of IFileConfiguration + + public string OutputFilePath { get; set; } + public bool OutputFileAllowOverwrite { get; set; } + public string OutputFileFilenamePattern { get; set; } + public OutputFormats OutputFileFormat { get; set; } + public bool OutputFileReduceColors { get; set; } + public bool OutputFileAutoReduceColors { get; set; } + public int OutputFileReduceColorsTo { get; set; } + public int OutputFileJpegQuality { get; set; } + public bool OutputFilePromptQuality { get; set; } + public uint OutputFileIncrementingNumber { get; set; } + public string OptimizePNGCommand { get; set; } + public string OptimizePNGCommandArguments { get; set; } + + #endregion + + #region Implementation of IDestinationFileConfiguration + + public bool UseOwnSettings { get; set; } + + #endregion + + #region Implementation of IExternalCommandConfiguration + + public IList Commands { get; set; } + public IDictionary Commandline { get; set; } + public IDictionary Argument { get; set; } + public IDictionary RunInbackground { get; set; } + public IDictionary Behaviors { get; set; } + public IList DeletedBuildInCommands { get; set; } + + #endregion + } +} diff --git a/src/Greenshot.Addon.ExternalCommand/Configuration/Impl/ExternalCommandLanguageImpl.cs b/src/Greenshot.Addon.ExternalCommand/Configuration/Impl/ExternalCommandLanguageImpl.cs new file mode 100644 index 000000000..33b59feab --- /dev/null +++ b/src/Greenshot.Addon.ExternalCommand/Configuration/Impl/ExternalCommandLanguageImpl.cs @@ -0,0 +1,51 @@ +#region Greenshot GNU General Public License + +// Greenshot - a free and open source screenshot tool +// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom +// +// For more information see: http://getgreenshot.org/ +// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 1 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#endregion + +using System.Diagnostics.CodeAnalysis; +using Dapplo.Config.Language; + +namespace Greenshot.Addon.ExternalCommand.Configuration.Impl +{ + /// + /// This implements IExternalCommandLanguage and takes care of storing, all setters are replaced via AutoProperties.Fody + /// + [SuppressMessage("ReSharper", "UnassignedGetOnlyAutoProperty")] +#pragma warning disable CS1591 + public class ExternalCommandLanguageImpl : LanguageBase, IExternalCommandLanguage + { + #region Implementation of IExternalCommandLanguage + + public string ContextmenuConfigure { get; } + public string SettingsEdit { get; } + public string SettingsDelete { get; } + public string SettingsNew { get; } + public string SettingsDetailTitle { get; } + public string SettingsTitle { get; } + public string LabelArgument { get; } + public string LabelCommand { get; } + public string LabelInformation { get; } + public string LabelName { get; } + + #endregion + } +} diff --git a/src/Greenshot.Addon.ExternalCommand/ExternalCommandAddonModule.cs b/src/Greenshot.Addon.ExternalCommand/ExternalCommandAddonModule.cs index 0a40ef8f2..51e898cbd 100644 --- a/src/Greenshot.Addon.ExternalCommand/ExternalCommandAddonModule.cs +++ b/src/Greenshot.Addon.ExternalCommand/ExternalCommandAddonModule.cs @@ -24,8 +24,10 @@ using Autofac; using Dapplo.Addons; using Dapplo.CaliburnMicro.Configuration; -using Dapplo.Ini; -using Dapplo.Language; +using Dapplo.Config.Ini; +using Dapplo.Config.Language; +using Greenshot.Addon.ExternalCommand.Configuration; +using Greenshot.Addon.ExternalCommand.Configuration.Impl; using Greenshot.Addon.ExternalCommand.ViewModels; using Greenshot.Addons.Components; @@ -37,13 +39,15 @@ namespace Greenshot.Addon.ExternalCommand protected override void Load(ContainerBuilder builder) { builder - .Register(context => IniConfig.Current.Get()) + .RegisterType() .As() + .As() .SingleInstance(); builder - .Register(context => LanguageLoader.Current.Get()) + .RegisterType() .As() + .As() .SingleInstance(); builder @@ -60,20 +64,7 @@ namespace Greenshot.Addon.ExternalCommand .AsSelf() .SingleInstance(); - builder.RegisterType() - .As() - .SingleInstance(); - base.Load(builder); } - - /// - private class SetupConfig : IStartable - { - public void Start() - { - IniConfig.Current.AfterLoad(externalCommandConfiguration => externalCommandConfiguration.AfterLoad()); - } - } } } diff --git a/src/Greenshot.Addon.ExternalCommand/ExternalCommandDestination.cs b/src/Greenshot.Addon.ExternalCommand/ExternalCommandDestination.cs index bece4adc2..2264e41da 100644 --- a/src/Greenshot.Addon.ExternalCommand/ExternalCommandDestination.cs +++ b/src/Greenshot.Addon.ExternalCommand/ExternalCommandDestination.cs @@ -29,6 +29,7 @@ using System.Text.RegularExpressions; using System.Threading.Tasks; using CliWrap; using Dapplo.Windows.Clipboard; +using Greenshot.Addon.ExternalCommand.Configuration; using Greenshot.Addon.ExternalCommand.Entities; using Greenshot.Addons; using Greenshot.Addons.Components; @@ -83,31 +84,30 @@ namespace Greenshot.Addon.ExternalCommand var fullPath = captureDetails.Filename ?? surface.SaveNamedTmpFile(CoreConfiguration, _externalCommandConfiguration); - using (var cli = new Cli(_externalCommandDefinition.Command)) + var cli = new Cli(_externalCommandDefinition.Command); + var arguments = string.Format(_externalCommandDefinition.Arguments, fullPath); + // Execute + cli.SetArguments(arguments); + var output = await cli.ExecuteAsync().ConfigureAwait(true); + + if (_externalCommandDefinition.CommandBehavior.HasFlag(CommandBehaviors.ParseOutputForUris)) { - var arguments = string.Format(_externalCommandDefinition.Arguments, fullPath); - // Execute - var output = await cli.ExecuteAsync(arguments).ConfigureAwait(true); - - if (_externalCommandDefinition.CommandBehavior.HasFlag(CommandBehaviors.ParseOutputForUris)) + var uriMatches = UriRegexp.Matches(output.StandardOutput); + if (uriMatches.Count > 0) { - var uriMatches = UriRegexp.Matches(output.StandardOutput); - if (uriMatches.Count > 0) - { - exportInformation.Uri = uriMatches[0].Groups[1].Value; + exportInformation.Uri = uriMatches[0].Groups[1].Value; - using (var clipboardAccessToken = ClipboardNative.Access()) - { - clipboardAccessToken.ClearContents(); - clipboardAccessToken.SetAsUrl(exportInformation.Uri); - } + using (var clipboardAccessToken = ClipboardNative.Access()) + { + clipboardAccessToken.ClearContents(); + clipboardAccessToken.SetAsUrl(exportInformation.Uri); } } + } - if (_externalCommandDefinition.CommandBehavior.HasFlag(CommandBehaviors.DeleteOnExit)) - { - File.Delete(fullPath); - } + if (_externalCommandDefinition.CommandBehavior.HasFlag(CommandBehaviors.DeleteOnExit)) + { + File.Delete(fullPath); } _exportNotification.NotifyOfExport(this, exportInformation, surface); diff --git a/src/Greenshot.Addon.ExternalCommand/ExternalCommandDestinationProvider.cs b/src/Greenshot.Addon.ExternalCommand/ExternalCommandDestinationProvider.cs index c4c39158a..2547b00fc 100644 --- a/src/Greenshot.Addon.ExternalCommand/ExternalCommandDestinationProvider.cs +++ b/src/Greenshot.Addon.ExternalCommand/ExternalCommandDestinationProvider.cs @@ -30,6 +30,7 @@ using System.Linq; using Dapplo.Addons; using Dapplo.CaliburnMicro; using Dapplo.Log; +using Greenshot.Addon.ExternalCommand.Configuration; using Greenshot.Addons; using Greenshot.Addons.Components; using Greenshot.Addons.Core; @@ -41,7 +42,7 @@ namespace Greenshot.Addon.ExternalCommand /// /// Generate the external command destinations /// - [Service(nameof(ExternalCommandDestinationProvider), nameof(CaliburnServices.IniSectionService))] + [Service(nameof(ExternalCommandDestinationProvider), nameof(CaliburnServices.ConfigurationService))] public sealed class ExternalCommandDestinationProvider : IStartup, IDestinationProvider { private static readonly LogSource Log = new LogSource(); diff --git a/src/Greenshot.Addon.ExternalCommand/FodyWeavers.xml b/src/Greenshot.Addon.ExternalCommand/FodyWeavers.xml new file mode 100644 index 000000000..7f5a26669 --- /dev/null +++ b/src/Greenshot.Addon.ExternalCommand/FodyWeavers.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/Greenshot.Addon.ExternalCommand/FodyWeavers.xsd b/src/Greenshot.Addon.ExternalCommand/FodyWeavers.xsd new file mode 100644 index 000000000..061979a03 --- /dev/null +++ b/src/Greenshot.Addon.ExternalCommand/FodyWeavers.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + 'true' to run assembly verification on the target assembly after all weavers have been finished. + + + + + A comma separated list of error codes that can be safely ignored in assembly verification. + + + + + \ No newline at end of file diff --git a/src/Greenshot.Addon.ExternalCommand/Greenshot.Addon.ExternalCommand.csproj b/src/Greenshot.Addon.ExternalCommand/Greenshot.Addon.ExternalCommand.csproj index 6f8e23d56..c52ae3984 100644 --- a/src/Greenshot.Addon.ExternalCommand/Greenshot.Addon.ExternalCommand.csproj +++ b/src/Greenshot.Addon.ExternalCommand/Greenshot.Addon.ExternalCommand.csproj @@ -1,135 +1,18 @@ - - - + + - {47F23C86-604E-4CC3-8767-B3D4088F30BB} - {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library Greenshot.Addon.ExternalCommand Greenshot.Addon.ExternalCommand - v4.6.1 - Properties - False - False - 4 - false - OnBuildSuccess - - - - - - 3.5 + net471;netcoreapp3.0 - - false - latest - - - false - - - false - latest - - - false - - + - - ..\packages\Autofac.4.8.1\lib\net45\Autofac.dll - - - ..\packages\Autofac.Extras.AttributeMetadata.4.0.1\lib\net45\Autofac.Extras.AttributeMetadata.dll - - - ..\packages\Autofac.Mef.4.0.0\lib\net45\Autofac.Integration.Mef.dll - - - ..\packages\Caliburn.Micro.Core.3.2.0\lib\net45\Caliburn.Micro.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\Caliburn.Micro.Platform.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\Caliburn.Micro.Platform.Core.dll - - - ..\packages\CliWrap.1.8.5\lib\net45\CliWrap.dll - - - ..\packages\CommonServiceLocator.2.0.4\lib\net46\CommonServiceLocator.dll - - - ..\packages\Dapplo.Addons.1.0.79\lib\net461\Dapplo.Addons.dll - - - ..\packages\Dapplo.Addons.Bootstrapper.1.0.79\lib\net461\Dapplo.Addons.Bootstrapper.dll - - - ..\packages\Dapplo.CaliburnMicro.1.0.75\lib\net461\Dapplo.CaliburnMicro.dll - - - ..\packages\Dapplo.CaliburnMicro.Configuration.1.0.75\lib\net461\Dapplo.CaliburnMicro.Configuration.dll - - - ..\packages\Dapplo.CaliburnMicro.Dapp.1.0.75\lib\net461\Dapplo.CaliburnMicro.Dapp.dll - - - ..\packages\Dapplo.CaliburnMicro.Menu.1.0.75\lib\net461\Dapplo.CaliburnMicro.Menu.dll - - - ..\packages\Dapplo.CaliburnMicro.Security.1.0.75\lib\net461\Dapplo.CaliburnMicro.Security.dll - - - ..\packages\Dapplo.CaliburnMicro.Translations.1.0.75\lib\net461\Dapplo.CaliburnMicro.Translations.dll - - - ..\packages\Dapplo.Ini.0.5.31\lib\net45\Dapplo.Ini.dll - - - ..\packages\Dapplo.InterfaceImpl.0.2.12\lib\net45\Dapplo.InterfaceImpl.dll - - - ..\packages\Dapplo.Language.0.5.31\lib\net45\Dapplo.Language.dll - - - ..\packages\Dapplo.Log.1.2.1\lib\net45\Dapplo.Log.dll - - - ..\packages\Dapplo.Utils.1.0.161\lib\net45\Dapplo.Utils.dll - - - ..\packages\Dapplo.Windows.0.5.109\lib\net461\Dapplo.Windows.dll - - - ..\packages\Dapplo.Windows.Clipboard.0.5.109\lib\net461\Dapplo.Windows.Clipboard.dll - - - ..\packages\Dapplo.Windows.Common.0.5.109\lib\net461\Dapplo.Windows.Common.dll - - - ..\packages\Dapplo.Windows.DesktopWindowsManager.0.5.109\lib\net461\Dapplo.Windows.DesktopWindowsManager.dll - - - ..\packages\Dapplo.Windows.Dpi.0.5.109\lib\net461\Dapplo.Windows.Dpi.dll - - - ..\packages\Dapplo.Windows.Gdi32.0.5.109\lib\net461\Dapplo.Windows.Gdi32.dll - - - ..\packages\Dapplo.Windows.Input.0.5.109\lib\net461\Dapplo.Windows.Input.dll - - - ..\packages\Dapplo.Windows.Kernel32.0.5.109\lib\net461\Dapplo.Windows.Kernel32.dll - - - ..\packages\Dapplo.Windows.Messages.0.5.109\lib\net461\Dapplo.Windows.Messages.dll - - - ..\packages\Dapplo.Windows.User32.0.5.109\lib\net461\Dapplo.Windows.User32.dll - + + PreserveNewest + + + + @@ -138,128 +21,30 @@ - - ..\packages\System.Reactive.4.1.0\lib\net46\System.Reactive.dll - - - ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.1\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll - - - ..\packages\System.Threading.Tasks.Extensions.4.5.1\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll - - - ..\packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\System.Windows.Interactivity.dll - + - - - - - - - - - - - - - - - - + + + + - - {bf35190d-b2a7-4cfa-b397-51cb384cf0d7} - Greenshot.Core - - - {f041c685-eb96-4ed1-9ace-0f5bd836610f} - Greenshot.Gfx - - - {5B924697-4DCD-4F98-85F1-105CB84B7341} - Greenshot.Addons - + + + + + + + all + runtime; build; native; contentfiles; analyzers + - - - - - - - - - - - - - - - - - - - - - - MSBuild:Compile - Designer - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - - mkdir "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons" -copy "$(ProjectDir)bin\$(Configuration)\$(ProjectName).dll" "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons\" -copy "$(ProjectDir)bin\$(Configuration)\CliWrap.dll" "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons\" -copy "$(ProjectDir)bin\$(Configuration)\$(ProjectName).pdb" "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons\" -mkdir "$(SolutionDir)Greenshot\bin\$(Configuration)\Languages\$(ProjectName)" -copy "$(ProjectDir)\Languages\*.xml" "$(SolutionDir)Greenshot\bin\$(Configuration)\Languages\$(ProjectName)" - - - False - Off - 4194304 - x86 - 4096 - - - False - Off - 4194304 - AnyCPU - 4096 - - - DEBUG;TRACE - False - True - Full - true - - - TRACE - True - False - None - false - - \ No newline at end of file + diff --git a/src/Greenshot.Addon.ExternalCommand/Properties/AssemblyInfo.cs b/src/Greenshot.Addon.ExternalCommand/Properties/AssemblyInfo.cs deleted file mode 100644 index 9290dcebc..000000000 --- a/src/Greenshot.Addon.ExternalCommand/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,53 +0,0 @@ -#region Greenshot GNU General Public License - -// Greenshot - a free and open source screenshot tool -// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom -// -// For more information see: http://getgreenshot.org/ -// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 1 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -#endregion - -#region Usings - -using System.Reflection; -using System.Runtime.InteropServices; - -#endregion - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. - -[assembly: AssemblyTitle("Greenshot.Addon.ExternalCommand")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Greenshot")] -[assembly: AssemblyProduct("External command Plugin")] -[assembly: AssemblyCopyright("Copyright (C) 2007-2018")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// This sets the default COM visibility of types in the assembly to invisible. -// If you need to expose a type to COM, use [ComVisible(true)] on that type. - -[assembly: ComVisible(false)] - -// The assembly version, replaced by build scripts - -[assembly: AssemblyVersion("1.3.0.0")] -[assembly: AssemblyInformationalVersion("1.3.0.0")] -[assembly: AssemblyFileVersion("1.3.0.0")] \ No newline at end of file diff --git a/src/Greenshot.Addon.ExternalCommand/ViewModels/ExternalCommandConfigViewModel.cs b/src/Greenshot.Addon.ExternalCommand/ViewModels/ExternalCommandConfigViewModel.cs index 739dd836f..d9d79f3e9 100644 --- a/src/Greenshot.Addon.ExternalCommand/ViewModels/ExternalCommandConfigViewModel.cs +++ b/src/Greenshot.Addon.ExternalCommand/ViewModels/ExternalCommandConfigViewModel.cs @@ -25,6 +25,7 @@ using System.Reactive.Disposables; using Caliburn.Micro; using Dapplo.CaliburnMicro.Configuration; using Dapplo.CaliburnMicro.Extensions; +using Greenshot.Addon.ExternalCommand.Configuration; using Greenshot.Addons; using Greenshot.Addons.Core.Enums; using Greenshot.Addons.ViewModels; diff --git a/src/Greenshot.Addon.ExternalCommand/ViewModels/ExternalCommandDetailsViewModel.cs b/src/Greenshot.Addon.ExternalCommand/ViewModels/ExternalCommandDetailsViewModel.cs index a4b48561d..567e5f782 100644 --- a/src/Greenshot.Addon.ExternalCommand/ViewModels/ExternalCommandDetailsViewModel.cs +++ b/src/Greenshot.Addon.ExternalCommand/ViewModels/ExternalCommandDetailsViewModel.cs @@ -22,6 +22,7 @@ #endregion using Caliburn.Micro; +using Greenshot.Addon.ExternalCommand.Configuration; using Greenshot.Addon.ExternalCommand.Entities; namespace Greenshot.Addon.ExternalCommand.ViewModels diff --git a/src/Greenshot.Addon.ExternalCommand/ViewModels/ExternalCommandMasterViewModel.cs b/src/Greenshot.Addon.ExternalCommand/ViewModels/ExternalCommandMasterViewModel.cs index e2abd8f67..b42a6abd4 100644 --- a/src/Greenshot.Addon.ExternalCommand/ViewModels/ExternalCommandMasterViewModel.cs +++ b/src/Greenshot.Addon.ExternalCommand/ViewModels/ExternalCommandMasterViewModel.cs @@ -23,6 +23,7 @@ using System.Linq; using Caliburn.Micro; +using Greenshot.Addon.ExternalCommand.Configuration; using Greenshot.Addon.ExternalCommand.Entities; namespace Greenshot.Addon.ExternalCommand.ViewModels diff --git a/src/Greenshot.Addon.ExternalCommand/packages.config b/src/Greenshot.Addon.ExternalCommand/packages.config deleted file mode 100644 index 8d64d41fb..000000000 --- a/src/Greenshot.Addon.ExternalCommand/packages.config +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Greenshot.Addon.Flickr/IFlickrConfiguration.cs b/src/Greenshot.Addon.Flickr/Configuration/IFlickrConfiguration.cs similarity index 74% rename from src/Greenshot.Addon.Flickr/IFlickrConfiguration.cs rename to src/Greenshot.Addon.Flickr/Configuration/IFlickrConfiguration.cs index 98f90de05..7ea2f7848 100644 --- a/src/Greenshot.Addon.Flickr/IFlickrConfiguration.cs +++ b/src/Greenshot.Addon.Flickr/Configuration/IFlickrConfiguration.cs @@ -24,29 +24,23 @@ #region Usings using System.ComponentModel; +using System.Diagnostics.CodeAnalysis; using System.Runtime.Serialization; +using Dapplo.Config.Ini; using Dapplo.HttpExtensions.OAuth; -using Dapplo.Ini; -using Dapplo.InterfaceImpl.Extensions; using Greenshot.Addons.Core; #endregion -namespace Greenshot.Addon.Flickr +namespace Greenshot.Addon.Flickr.Configuration { - public enum SafetyLevel - { - Safe = 1, - Moderate = 2, - Restricted = 3 - } - - /// - /// Description of FlickrConfiguration. + /// + /// This defines the configuration for the Flickr addon /// [IniSection("Flickr")] [Description("Greenshot Flickr Plugin configuration")] - public interface IFlickrConfiguration : IIniSection, IDestinationFileConfiguration, INotifyPropertyChanged, ITransactionalProperties, IOAuth1Token + [SuppressMessage("ReSharper", "UnusedMember.Global")] + public interface IFlickrConfiguration : IIniSection, IDestinationFileConfiguration, IOAuth1Token { [Description("IsPublic.")] [DefaultValue(true)] @@ -60,18 +54,30 @@ namespace Greenshot.Addon.Flickr [DefaultValue(true)] bool IsFriend { get; set; } + /// + /// + /// [Description("Safety level")] [DefaultValue(SafetyLevel.Safe)] SafetyLevel SafetyLevel { get; set; } + /// + /// Hide the image from the search results in Flickr + /// [Description("Hidden from search")] [DefaultValue(false)] bool HiddenFromSearch { get; set; } + /// + /// Place the link to Flickr onto the clipboard after it's uploaded + /// [Description("After upload send flickr link to clipboard.")] [DefaultValue(true)] bool AfterUploadLinkToClipBoard { get; set; } + /// + /// Defines if we use the pagelink or direct link on the clipboard + /// [Description("Use pagelink instead of direct link on the clipboard")] [DefaultValue(false)] bool UsePageLink { get; set; } diff --git a/src/Greenshot.Addon.Flickr/IFlickrLanguage.cs b/src/Greenshot.Addon.Flickr/Configuration/IFlickrLanguage.cs similarity index 84% rename from src/Greenshot.Addon.Flickr/IFlickrLanguage.cs rename to src/Greenshot.Addon.Flickr/Configuration/IFlickrLanguage.cs index a238f9f20..279e65656 100644 --- a/src/Greenshot.Addon.Flickr/IFlickrLanguage.cs +++ b/src/Greenshot.Addon.Flickr/Configuration/IFlickrLanguage.cs @@ -19,15 +19,16 @@ #region Usings -using System.ComponentModel; -using Dapplo.Language; +using System.Diagnostics.CodeAnalysis; +using Dapplo.Config.Language; #endregion -namespace Greenshot.Addon.Flickr +namespace Greenshot.Addon.Flickr.Configuration { [Language("Flickr")] - public interface IFlickrLanguage : ILanguage, INotifyPropertyChanged + [SuppressMessage("ReSharper", "UnusedMember.Global")] + public interface IFlickrLanguage : ILanguage { string CommunicationWait { get; } diff --git a/src/Greenshot.Addon.Flickr/Configuration/Impl/FlickrConfigurationImpl.cs b/src/Greenshot.Addon.Flickr/Configuration/Impl/FlickrConfigurationImpl.cs new file mode 100644 index 000000000..c45483262 --- /dev/null +++ b/src/Greenshot.Addon.Flickr/Configuration/Impl/FlickrConfigurationImpl.cs @@ -0,0 +1,83 @@ +#region Greenshot GNU General Public License + +// Greenshot - a free and open source screenshot tool +// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom +// +// For more information see: http://getgreenshot.org/ +// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 1 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#endregion + +using System.ComponentModel; +using Dapplo.Config.Ini; +using Dapplo.Config.Ini.Converters; +using Greenshot.Core.Enums; + +namespace Greenshot.Addon.Flickr.Configuration.Impl +{ + internal class FlickrConfigurationImpl : IniSectionBase, IFlickrConfiguration + { + #region Implementation of IFileConfiguration + + public string OutputFilePath { get; set; } + public bool OutputFileAllowOverwrite { get; set; } + public string OutputFileFilenamePattern { get; set; } + public OutputFormats OutputFileFormat { get; set; } + public bool OutputFileReduceColors { get; set; } + public bool OutputFileAutoReduceColors { get; set; } + public int OutputFileReduceColorsTo { get; set; } + public int OutputFileJpegQuality { get; set; } + public bool OutputFilePromptQuality { get; set; } + public uint OutputFileIncrementingNumber { get; set; } + public string OptimizePNGCommand { get; set; } + public string OptimizePNGCommandArguments { get; set; } + + #endregion + + #region Implementation of IDestinationFileConfiguration + + public bool UseOwnSettings { get; set; } + + #endregion + + #region Implementation of IOAuth1Token + + [TypeConverter(typeof(StringEncryptionTypeConverter))] + public string OAuthToken { get; set; } + + [TypeConverter(typeof(StringEncryptionTypeConverter))] + public string OAuthTokenSecret { get; set; } + + [TypeConverter(typeof(StringEncryptionTypeConverter))] + public string OAuthTokenVerifier { get; set; } + + #endregion + + #region Implementation of IFlickrConfiguration + + public bool IsPublic { get; set; } + public bool IsFamily { get; set; } + public bool IsFriend { get; set; } + public SafetyLevel SafetyLevel { get; set; } + public bool HiddenFromSearch { get; set; } + public bool AfterUploadLinkToClipBoard { get; set; } + public bool UsePageLink { get; set; } + public string ClientId { get; set; } + public string ClientSecret { get; set; } + + #endregion + } +} diff --git a/src/Greenshot.Addon.Flickr/Configuration/Impl/FlickrLanguageImpl.cs b/src/Greenshot.Addon.Flickr/Configuration/Impl/FlickrLanguageImpl.cs new file mode 100644 index 000000000..d59572fad --- /dev/null +++ b/src/Greenshot.Addon.Flickr/Configuration/Impl/FlickrLanguageImpl.cs @@ -0,0 +1,55 @@ +#region Greenshot GNU General Public License + +// Greenshot - a free and open source screenshot tool +// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom +// +// For more information see: http://getgreenshot.org/ +// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 1 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#endregion + +using System.Diagnostics.CodeAnalysis; +using Dapplo.Config.Language; + +namespace Greenshot.Addon.Flickr.Configuration.Impl +{ + /// + /// This implements IFlickrLanguage and takes care of storing, all setters are replaced via AutoProperties.Fody + /// +#pragma warning disable CS1591 + [SuppressMessage("ReSharper", "UnassignedGetOnlyAutoProperty")] + public class FlickrLanguageImpl : LanguageBase, IFlickrLanguage + { + #region Implementation of IFlickrLanguage + + public string CommunicationWait { get; } + public string Configure { get; } + public string LabelAfterUpload { get; } + public string LabelAfterUploadLinkToClipBoard { get; } + public string LabelHiddenFromSearch { get; } + public string LabelSafetyLevel { get; } + public string LabelUploadFormat { get; } + public string SettingsTitle { get; } + public string UploadFailure { get; } + public string UploadMenuItem { get; } + public string UploadSuccess { get; } + public string Public { get; } + public string Family { get; } + public string Friend { get; } + + #endregion + } +} diff --git a/src/Greenshot.Addon.Office/OfficeInterop/MsoScaleFrom.cs b/src/Greenshot.Addon.Flickr/Configuration/SafetyLevel.cs similarity index 75% rename from src/Greenshot.Addon.Office/OfficeInterop/MsoScaleFrom.cs rename to src/Greenshot.Addon.Flickr/Configuration/SafetyLevel.cs index 17abf08f1..6949bbf7d 100644 --- a/src/Greenshot.Addon.Office/OfficeInterop/MsoScaleFrom.cs +++ b/src/Greenshot.Addon.Flickr/Configuration/SafetyLevel.cs @@ -1,4 +1,4 @@ -#region Greenshot GNU General Public License +#region Greenshot GNU General Public License // Greenshot - a free and open source screenshot tool // Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom @@ -21,12 +21,15 @@ #endregion -namespace Greenshot.Addon.Office.OfficeInterop +namespace Greenshot.Addon.Flickr.Configuration { - public enum MsoScaleFrom - { - msoScaleFromTopLeft = 0, - msoScaleFromMiddle = 1, - msoScaleFromBottomRight = 2 - } + /// + /// The Flickr SafetyLevel + /// + public enum SafetyLevel + { + Safe = 1, + Moderate = 2, + Restricted = 3 + } } \ No newline at end of file diff --git a/src/Greenshot.Addon.Flickr/FlickrAddonModule.cs b/src/Greenshot.Addon.Flickr/FlickrAddonModule.cs index 6de005a52..b7f08a5a4 100644 --- a/src/Greenshot.Addon.Flickr/FlickrAddonModule.cs +++ b/src/Greenshot.Addon.Flickr/FlickrAddonModule.cs @@ -24,8 +24,10 @@ using Autofac; using Dapplo.Addons; using Dapplo.CaliburnMicro.Configuration; -using Dapplo.Ini; -using Dapplo.Language; +using Dapplo.Config.Ini; +using Dapplo.Config.Language; +using Greenshot.Addon.Flickr.Configuration; +using Greenshot.Addon.Flickr.Configuration.Impl; using Greenshot.Addon.Flickr.ViewModels; using Greenshot.Addons.Components; @@ -37,13 +39,15 @@ namespace Greenshot.Addon.Flickr protected override void Load(ContainerBuilder builder) { builder - .Register(context => IniConfig.Current.Get()) + .RegisterType() .As() + .As() .SingleInstance(); builder - .Register(context => LanguageLoader.Current.Get()) + .RegisterType() .As() + .As() .SingleInstance(); builder diff --git a/src/Greenshot.Addon.Flickr/FlickrDestination.cs b/src/Greenshot.Addon.Flickr/FlickrDestination.cs index b3b6da9eb..d2c899a5b 100644 --- a/src/Greenshot.Addon.Flickr/FlickrDestination.cs +++ b/src/Greenshot.Addon.Flickr/FlickrDestination.cs @@ -41,6 +41,7 @@ using Dapplo.HttpExtensions.Extensions; using Dapplo.HttpExtensions.OAuth; using Dapplo.Log; using Dapplo.Windows.Clipboard; +using Greenshot.Addon.Flickr.Configuration; using Greenshot.Addons; using Greenshot.Addons.Components; using Greenshot.Addons.Controls; diff --git a/src/Greenshot.Addon.Flickr/FodyWeavers.xml b/src/Greenshot.Addon.Flickr/FodyWeavers.xml new file mode 100644 index 000000000..7f5a26669 --- /dev/null +++ b/src/Greenshot.Addon.Flickr/FodyWeavers.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/Greenshot.Addon.Flickr/FodyWeavers.xsd b/src/Greenshot.Addon.Flickr/FodyWeavers.xsd new file mode 100644 index 000000000..061979a03 --- /dev/null +++ b/src/Greenshot.Addon.Flickr/FodyWeavers.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + 'true' to run assembly verification on the target assembly after all weavers have been finished. + + + + + A comma separated list of error codes that can be safely ignored in assembly verification. + + + + + \ No newline at end of file diff --git a/src/Greenshot.Addon.Flickr/Greenshot.Addon.Flickr.csproj b/src/Greenshot.Addon.Flickr/Greenshot.Addon.Flickr.csproj index 5ffdef800..bb922823c 100644 --- a/src/Greenshot.Addon.Flickr/Greenshot.Addon.Flickr.csproj +++ b/src/Greenshot.Addon.Flickr/Greenshot.Addon.Flickr.csproj @@ -1,144 +1,18 @@ - - - + + - {7EC72A5A-D73A-4B4B-9CA1-2216C7D92D5E} - {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library Greenshot.Addon.Flickr Greenshot.Addon.Flickr - v4.6.1 - Properties - False - False - 4 - false - Always - 3.5 - - - - - + net471;netcoreapp3.0 - - false - latest - - - false - - - false - latest - - - false - - + - - ..\packages\Autofac.4.8.1\lib\net45\Autofac.dll - - - ..\packages\Autofac.Extras.AttributeMetadata.4.0.1\lib\net45\Autofac.Extras.AttributeMetadata.dll - - - ..\packages\Autofac.Mef.4.0.0\lib\net45\Autofac.Integration.Mef.dll - - - ..\packages\Caliburn.Micro.Core.3.2.0\lib\net45\Caliburn.Micro.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\Caliburn.Micro.Platform.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\Caliburn.Micro.Platform.Core.dll - - - ..\packages\CommonServiceLocator.2.0.4\lib\net46\CommonServiceLocator.dll - - - ..\packages\Dapplo.Addons.1.0.79\lib\net461\Dapplo.Addons.dll - - - ..\packages\Dapplo.Addons.Bootstrapper.1.0.79\lib\net461\Dapplo.Addons.Bootstrapper.dll - - - ..\packages\Dapplo.CaliburnMicro.1.0.75\lib\net461\Dapplo.CaliburnMicro.dll - - - ..\packages\Dapplo.CaliburnMicro.Configuration.1.0.75\lib\net461\Dapplo.CaliburnMicro.Configuration.dll - - - ..\packages\Dapplo.CaliburnMicro.Dapp.1.0.75\lib\net461\Dapplo.CaliburnMicro.Dapp.dll - - - ..\packages\Dapplo.CaliburnMicro.Menu.1.0.75\lib\net461\Dapplo.CaliburnMicro.Menu.dll - - - ..\packages\Dapplo.CaliburnMicro.Security.1.0.75\lib\net461\Dapplo.CaliburnMicro.Security.dll - - - ..\packages\Dapplo.CaliburnMicro.Translations.1.0.75\lib\net461\Dapplo.CaliburnMicro.Translations.dll - - - ..\packages\Dapplo.HttpExtensions.0.8.46\lib\net46\Dapplo.HttpExtensions.dll - - - ..\packages\Dapplo.HttpExtensions.OAuth.0.8.46\lib\net46\Dapplo.HttpExtensions.OAuth.dll - - - ..\packages\Dapplo.Ini.0.5.31\lib\net45\Dapplo.Ini.dll - - - ..\packages\Dapplo.InterfaceImpl.0.2.12\lib\net45\Dapplo.InterfaceImpl.dll - - - ..\packages\Dapplo.Language.0.5.31\lib\net45\Dapplo.Language.dll - - - ..\packages\Dapplo.Log.1.2.1\lib\net45\Dapplo.Log.dll - - - ..\packages\Dapplo.Utils.1.0.161\lib\net45\Dapplo.Utils.dll - - - ..\packages\Dapplo.Windows.0.5.109\lib\net461\Dapplo.Windows.dll - - - ..\packages\Dapplo.Windows.Clipboard.0.5.109\lib\net461\Dapplo.Windows.Clipboard.dll - - - ..\packages\Dapplo.Windows.Com.0.5.109\lib\net461\Dapplo.Windows.Com.dll - - - ..\packages\Dapplo.Windows.Common.0.5.109\lib\net461\Dapplo.Windows.Common.dll - - - ..\packages\Dapplo.Windows.DesktopWindowsManager.0.5.109\lib\net461\Dapplo.Windows.DesktopWindowsManager.dll - - - ..\packages\Dapplo.Windows.Dpi.0.5.109\lib\net461\Dapplo.Windows.Dpi.dll - - - ..\packages\Dapplo.Windows.EmbeddedBrowser.0.5.109\lib\net461\Dapplo.Windows.EmbeddedBrowser.dll - - - ..\packages\Dapplo.Windows.Gdi32.0.5.109\lib\net461\Dapplo.Windows.Gdi32.dll - - - ..\packages\Dapplo.Windows.Input.0.5.109\lib\net461\Dapplo.Windows.Input.dll - - - ..\packages\Dapplo.Windows.Kernel32.0.5.109\lib\net461\Dapplo.Windows.Kernel32.dll - - - ..\packages\Dapplo.Windows.Messages.0.5.109\lib\net461\Dapplo.Windows.Messages.dll - - - ..\packages\Dapplo.Windows.User32.0.5.109\lib\net461\Dapplo.Windows.User32.dll - + + PreserveNewest + + + + @@ -149,94 +23,36 @@ - - ..\packages\System.Reactive.4.1.0\lib\net46\System.Reactive.dll - - - ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.1\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll - - - ..\packages\System.Threading.Tasks.Extensions.4.5.1\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll - - - ..\packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\System.Windows.Interactivity.dll - + - - - - - - - - - Always - Designer - - + + - + + + + - - {5B924697-4DCD-4F98-85F1-105CB84B7341} - Greenshot.Addons - - - {bf35190d-b2a7-4cfa-b397-51cb384cf0d7} - Greenshot.Core - - - {f041c685-eb96-4ed1-9ace-0f5bd836610f} - Greenshot.Gfx - + + + + + + + all + runtime; build; native; contentfiles; analyzers + - - - - - - - - - - - - - - - - - - - - - - MSBuild:Compile - Designer - - - - mkdir "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons" -copy "$(ProjectDir)bin\$(Configuration)\$(ProjectName).dll" "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons\" -copy "$(ProjectDir)bin\$(Configuration)\$(ProjectName).pdb" "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons\" -mkdir "$(SolutionDir)Greenshot\bin\$(Configuration)\Languages\$(ProjectName)" -copy "$(ProjectDir)\Languages\*.xml" "$(SolutionDir)Greenshot\bin\$(Configuration)\Languages\$(ProjectName)" - - - - \ No newline at end of file + diff --git a/src/Greenshot.Addon.Flickr/Properties/AssemblyInfo.cs b/src/Greenshot.Addon.Flickr/Properties/AssemblyInfo.cs deleted file mode 100644 index d2d2e05f5..000000000 --- a/src/Greenshot.Addon.Flickr/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,53 +0,0 @@ -#region Greenshot GNU General Public License - -// Greenshot - a free and open source screenshot tool -// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom -// -// For more information see: http://getgreenshot.org/ -// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 1 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -#endregion - -#region Usings - -using System.Reflection; -using System.Runtime.InteropServices; - -#endregion - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. - -[assembly: AssemblyTitle("Greenshot.Addon.Flickr")] -[assembly: AssemblyDescription("A plugin to upload images to Flickr")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Greenshot & F. Noel")] -[assembly: AssemblyProduct("Flickr Plugin")] -[assembly: AssemblyCopyright("Copyright (C) 2012")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// This sets the default COM visibility of types in the assembly to invisible. -// If you need to expose a type to COM, use [ComVisible(true)] on that type. - -[assembly: ComVisible(false)] - -// The assembly version, replaced by build scripts - -[assembly: AssemblyVersion("1.3.0.0")] -[assembly: AssemblyInformationalVersion("1.3.0.0")] -[assembly: AssemblyFileVersion("1.3.0.0")] \ No newline at end of file diff --git a/src/Greenshot.Addon.Flickr/ViewModels/FlickrConfigViewModel.cs b/src/Greenshot.Addon.Flickr/ViewModels/FlickrConfigViewModel.cs index aebcc0814..d2cca2bcb 100644 --- a/src/Greenshot.Addon.Flickr/ViewModels/FlickrConfigViewModel.cs +++ b/src/Greenshot.Addon.Flickr/ViewModels/FlickrConfigViewModel.cs @@ -25,12 +25,16 @@ using System.Collections.Generic; using System.Reactive.Disposables; using Dapplo.CaliburnMicro.Configuration; using Dapplo.CaliburnMicro.Extensions; +using Greenshot.Addon.Flickr.Configuration; using Greenshot.Addons.Core.Enums; using Greenshot.Addons.Extensions; using Greenshot.Addons.ViewModels; namespace Greenshot.Addon.Flickr.ViewModels { + /// + /// This is the ViewModel for the configuration of the Flickr addon + /// public sealed class FlickrConfigViewModel : SimpleConfigScreen { /// @@ -38,10 +42,20 @@ namespace Greenshot.Addon.Flickr.ViewModels /// private CompositeDisposable _disposables; + /// + /// Configuration for the view + /// public IFlickrConfiguration FlickrConfiguration { get; } - + + /// + /// Translations for the view + /// public IFlickrLanguage FlickrLanguage { get; } - + + /// + /// FileConfigPartViewModel is used from the view + /// TODO: Check if this is really true and needed + /// public FileConfigPartViewModel FileConfigPartViewModel { get; } public FlickrConfigViewModel( @@ -54,6 +68,7 @@ namespace Greenshot.Addon.Flickr.ViewModels FileConfigPartViewModel = fileConfigPartViewModel; } + /// public override void Initialize(IConfig config) { FileConfigPartViewModel.DestinationFileConfiguration = FlickrConfiguration; @@ -75,12 +90,16 @@ namespace Greenshot.Addon.Flickr.ViewModels base.Initialize(config); } + /// protected override void OnDeactivate(bool close) { _disposables.Dispose(); base.OnDeactivate(close); } + /// + /// Used in the view for the dropdown + /// public SafetyLevel SelectedSafetyLevel { get => FlickrConfiguration.SafetyLevel; @@ -91,6 +110,9 @@ namespace Greenshot.Addon.Flickr.ViewModels } } + /// + /// Used for a dropdown in the view + /// public IDictionary SafetyLevels => FlickrLanguage.TranslationValuesForEnum(); } } diff --git a/src/Greenshot.Addon.Flickr/packages.config b/src/Greenshot.Addon.Flickr/packages.config deleted file mode 100644 index 4f4d2c4e1..000000000 --- a/src/Greenshot.Addon.Flickr/packages.config +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Greenshot.Addon.GooglePhotos/IGooglePhotosConfiguration.cs b/src/Greenshot.Addon.GooglePhotos/Configuration/IGooglePhotosConfiguration.cs similarity index 87% rename from src/Greenshot.Addon.GooglePhotos/IGooglePhotosConfiguration.cs rename to src/Greenshot.Addon.GooglePhotos/Configuration/IGooglePhotosConfiguration.cs index 6441957a9..e43f7cd1b 100644 --- a/src/Greenshot.Addon.GooglePhotos/IGooglePhotosConfiguration.cs +++ b/src/Greenshot.Addon.GooglePhotos/Configuration/IGooglePhotosConfiguration.cs @@ -24,22 +24,23 @@ #region Usings using System.ComponentModel; +using System.Diagnostics.CodeAnalysis; using System.Runtime.Serialization; +using Dapplo.Config.Ini; using Dapplo.HttpExtensions.OAuth; -using Dapplo.Ini; -using Dapplo.InterfaceImpl.Extensions; using Greenshot.Addons.Core; #endregion -namespace Greenshot.Addon.GooglePhotos +namespace Greenshot.Addon.GooglePhotos.Configuration { /// /// Description of GooglePhotosConfiguration. /// [IniSection("GooglePhotos")] [Description("Greenshot Google Photos Plugin configuration")] - public interface IGooglePhotosConfiguration : IIniSection, IDestinationFileConfiguration, IOAuth2Token, ITransactionalProperties + [SuppressMessage("ReSharper", "UnusedMember.Global")] + public interface IGooglePhotosConfiguration : IIniSection, IDestinationFileConfiguration, IOAuth2Token { [Description("After upload send Google Photos link to clipboard.")] [DefaultValue(true)] diff --git a/src/Greenshot.Addon.GooglePhotos/Configuration/IGooglePhotosLanguage.cs b/src/Greenshot.Addon.GooglePhotos/Configuration/IGooglePhotosLanguage.cs new file mode 100644 index 000000000..d80abff88 --- /dev/null +++ b/src/Greenshot.Addon.GooglePhotos/Configuration/IGooglePhotosLanguage.cs @@ -0,0 +1,51 @@ +#region Greenshot GNU General Public License + +// Greenshot - a free and open source screenshot tool +// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom +// +// For more information see: http://getgreenshot.org/ +// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 1 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#endregion + +using System.Diagnostics.CodeAnalysis; +using Dapplo.Config.Language; + +namespace Greenshot.Addon.GooglePhotos.Configuration +{ + [Language("GooglePhotos")] + [SuppressMessage("ReSharper", "UnusedMember.Global")] + public interface IGooglePhotosLanguage : ILanguage + { + string CommunicationWait { get; } + + string Configure { get; } + + string LabelAfterUpload { get; } + + string LabelAfterUploadLinkToClipBoard { get; } + + string LabelUploadFormat { get; } + + string SettingsTitle { get; } + + string UploadFailure { get; } + + string UploadMenuItem { get; } + + string UploadSuccess { get; } + } +} diff --git a/src/Greenshot.Addon.GooglePhotos/Configuration/Impl/GooglePhotosConfigurationImpl.cs b/src/Greenshot.Addon.GooglePhotos/Configuration/Impl/GooglePhotosConfigurationImpl.cs new file mode 100644 index 000000000..0ddeb83d4 --- /dev/null +++ b/src/Greenshot.Addon.GooglePhotos/Configuration/Impl/GooglePhotosConfigurationImpl.cs @@ -0,0 +1,80 @@ +#region Greenshot GNU General Public License + +// Greenshot - a free and open source screenshot tool +// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom +// +// For more information see: http://getgreenshot.org/ +// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 1 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#endregion + +using System; +using System.ComponentModel; +using Dapplo.Config.Ini; +using Dapplo.Config.Ini.Converters; +using Greenshot.Core.Enums; + +namespace Greenshot.Addon.GooglePhotos.Configuration.Impl +{ + internal class GooglePhotosConfigurationImpl : IniSectionBase, IGooglePhotosConfiguration + { + #region Implementation of IFileConfiguration + + public string OutputFilePath { get; set; } + public bool OutputFileAllowOverwrite { get; set; } + public string OutputFileFilenamePattern { get; set; } + public OutputFormats OutputFileFormat { get; set; } + public bool OutputFileReduceColors { get; set; } + public bool OutputFileAutoReduceColors { get; set; } + public int OutputFileReduceColorsTo { get; set; } + public int OutputFileJpegQuality { get; set; } + public bool OutputFilePromptQuality { get; set; } + public uint OutputFileIncrementingNumber { get; set; } + public string OptimizePNGCommand { get; set; } + public string OptimizePNGCommandArguments { get; set; } + + #endregion + + #region Implementation of IDestinationFileConfiguration + + public bool UseOwnSettings { get; set; } + + #endregion + + #region Implementation of IOAuth2Token + + [TypeConverter(typeof(StringEncryptionTypeConverter))] + public string OAuth2AccessToken { get; set; } + + public DateTimeOffset OAuth2AccessTokenExpires { get; set; } + + [TypeConverter(typeof(StringEncryptionTypeConverter))] + public string OAuth2RefreshToken { get; set; } + + #endregion + + #region Implementation of IGooglePhotosConfiguration + + public bool AfterUploadLinkToClipBoard { get; set; } + public bool AddFilename { get; set; } + public string UploadUser { get; set; } + public string UploadAlbum { get; set; } + public string ClientId { get; set; } + public string ClientSecret { get; set; } + + #endregion + } +} diff --git a/src/Greenshot.Addon.GooglePhotos/Configuration/Impl/GooglePhotosLanguageImpl.cs b/src/Greenshot.Addon.GooglePhotos/Configuration/Impl/GooglePhotosLanguageImpl.cs new file mode 100644 index 000000000..22059919d --- /dev/null +++ b/src/Greenshot.Addon.GooglePhotos/Configuration/Impl/GooglePhotosLanguageImpl.cs @@ -0,0 +1,50 @@ +#region Greenshot GNU General Public License + +// Greenshot - a free and open source screenshot tool +// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom +// +// For more information see: http://getgreenshot.org/ +// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 1 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#endregion + +using System.Diagnostics.CodeAnalysis; +using Dapplo.Config.Language; + +namespace Greenshot.Addon.GooglePhotos.Configuration.Impl +{ + /// + /// This implements IGooglePhotosLanguage and takes care of storing, all setters are replaced via AutoProperties.Fody + /// + [SuppressMessage("ReSharper", "UnassignedGetOnlyAutoProperty")] +#pragma warning disable CS1591 + public class GooglePhotosLanguageImpl : LanguageBase, IGooglePhotosLanguage + { + #region Implementation of IGooglePhotosLanguage + + public string CommunicationWait { get; } + public string Configure { get; } + public string LabelAfterUpload { get; } + public string LabelAfterUploadLinkToClipBoard { get; } + public string LabelUploadFormat { get; } + public string SettingsTitle { get; } + public string UploadFailure { get; } + public string UploadMenuItem { get; } + public string UploadSuccess { get; } + + #endregion + } +} diff --git a/src/Greenshot.Addon.GooglePhotos/FodyWeavers.xml b/src/Greenshot.Addon.GooglePhotos/FodyWeavers.xml new file mode 100644 index 000000000..7f5a26669 --- /dev/null +++ b/src/Greenshot.Addon.GooglePhotos/FodyWeavers.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/Greenshot.Addon.GooglePhotos/FodyWeavers.xsd b/src/Greenshot.Addon.GooglePhotos/FodyWeavers.xsd new file mode 100644 index 000000000..061979a03 --- /dev/null +++ b/src/Greenshot.Addon.GooglePhotos/FodyWeavers.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + 'true' to run assembly verification on the target assembly after all weavers have been finished. + + + + + A comma separated list of error codes that can be safely ignored in assembly verification. + + + + + \ No newline at end of file diff --git a/src/Greenshot.Addon.GooglePhotos/GooglePhotosAddonModule.cs b/src/Greenshot.Addon.GooglePhotos/GooglePhotosAddonModule.cs index b4484e816..68d76015e 100644 --- a/src/Greenshot.Addon.GooglePhotos/GooglePhotosAddonModule.cs +++ b/src/Greenshot.Addon.GooglePhotos/GooglePhotosAddonModule.cs @@ -24,8 +24,10 @@ using Autofac; using Dapplo.Addons; using Dapplo.CaliburnMicro.Configuration; -using Dapplo.Ini; -using Dapplo.Language; +using Dapplo.Config.Ini; +using Dapplo.Config.Language; +using Greenshot.Addon.GooglePhotos.Configuration; +using Greenshot.Addon.GooglePhotos.Configuration.Impl; using Greenshot.Addon.GooglePhotos.ViewModels; using Greenshot.Addons.Components; @@ -37,13 +39,15 @@ namespace Greenshot.Addon.GooglePhotos protected override void Load(ContainerBuilder builder) { builder - .Register(context => IniConfig.Current.Get()) + .RegisterType() .As() + .As() .SingleInstance(); builder - .Register(context => LanguageLoader.Current.Get()) + .RegisterType() .As() + .As() .SingleInstance(); builder diff --git a/src/Greenshot.Addon.GooglePhotos/GooglePhotosDestination.cs b/src/Greenshot.Addon.GooglePhotos/GooglePhotosDestination.cs index 369e5b552..920099295 100644 --- a/src/Greenshot.Addon.GooglePhotos/GooglePhotosDestination.cs +++ b/src/Greenshot.Addon.GooglePhotos/GooglePhotosDestination.cs @@ -39,6 +39,7 @@ using Dapplo.HttpExtensions.OAuth; using Dapplo.Log; using Dapplo.Utils; using Dapplo.Windows.Clipboard; +using Greenshot.Addon.GooglePhotos.Configuration; using Greenshot.Addons; using Greenshot.Addons.Components; using Greenshot.Addons.Controls; diff --git a/src/Greenshot.Addon.GooglePhotos/Greenshot.Addon.GooglePhotos.csproj b/src/Greenshot.Addon.GooglePhotos/Greenshot.Addon.GooglePhotos.csproj index 30596bf38..7072996bd 100644 --- a/src/Greenshot.Addon.GooglePhotos/Greenshot.Addon.GooglePhotos.csproj +++ b/src/Greenshot.Addon.GooglePhotos/Greenshot.Addon.GooglePhotos.csproj @@ -1,130 +1,18 @@ - - - + + - {1893A2E4-A78A-4713-A8E7-E70058DABEE0} - {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library Greenshot.Addon.GooglePhotos Greenshot.Addon.GooglePhotos - v4.6.1 - Properties - False - False - 4 - false - Always - - - 3.5 - - - + net471;netcoreapp3.0 - + - - ..\packages\Autofac.4.8.1\lib\net45\Autofac.dll - - - ..\packages\Autofac.Extras.AttributeMetadata.4.0.1\lib\net45\Autofac.Extras.AttributeMetadata.dll - - - ..\packages\Autofac.Mef.4.0.0\lib\net45\Autofac.Integration.Mef.dll - - - ..\packages\Caliburn.Micro.Core.3.2.0\lib\net45\Caliburn.Micro.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\Caliburn.Micro.Platform.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\Caliburn.Micro.Platform.Core.dll - - - ..\packages\CommonServiceLocator.2.0.4\lib\net46\CommonServiceLocator.dll - - - ..\packages\Dapplo.Addons.1.0.79\lib\net461\Dapplo.Addons.dll - - - ..\packages\Dapplo.Addons.Bootstrapper.1.0.79\lib\net461\Dapplo.Addons.Bootstrapper.dll - - - ..\packages\Dapplo.CaliburnMicro.1.0.75\lib\net461\Dapplo.CaliburnMicro.dll - - - ..\packages\Dapplo.CaliburnMicro.Configuration.1.0.75\lib\net461\Dapplo.CaliburnMicro.Configuration.dll - - - ..\packages\Dapplo.CaliburnMicro.Dapp.1.0.75\lib\net461\Dapplo.CaliburnMicro.Dapp.dll - - - ..\packages\Dapplo.CaliburnMicro.Menu.1.0.75\lib\net461\Dapplo.CaliburnMicro.Menu.dll - - - ..\packages\Dapplo.CaliburnMicro.Security.1.0.75\lib\net461\Dapplo.CaliburnMicro.Security.dll - - - ..\packages\Dapplo.CaliburnMicro.Translations.1.0.75\lib\net461\Dapplo.CaliburnMicro.Translations.dll - - - ..\packages\Dapplo.HttpExtensions.0.8.46\lib\net46\Dapplo.HttpExtensions.dll - - - ..\packages\Dapplo.HttpExtensions.OAuth.0.8.46\lib\net46\Dapplo.HttpExtensions.OAuth.dll - - - ..\packages\Dapplo.Ini.0.5.31\lib\net45\Dapplo.Ini.dll - - - ..\packages\Dapplo.InterfaceImpl.0.2.12\lib\net45\Dapplo.InterfaceImpl.dll - - - ..\packages\Dapplo.Language.0.5.31\lib\net45\Dapplo.Language.dll - - - ..\packages\Dapplo.Log.1.2.1\lib\net45\Dapplo.Log.dll - - - ..\packages\Dapplo.Utils.1.0.161\lib\net45\Dapplo.Utils.dll - - - ..\packages\Dapplo.Windows.0.5.109\lib\net461\Dapplo.Windows.dll - - - ..\packages\Dapplo.Windows.Clipboard.0.5.109\lib\net461\Dapplo.Windows.Clipboard.dll - - - ..\packages\Dapplo.Windows.Com.0.5.109\lib\net461\Dapplo.Windows.Com.dll - - - ..\packages\Dapplo.Windows.Common.0.5.109\lib\net461\Dapplo.Windows.Common.dll - - - ..\packages\Dapplo.Windows.DesktopWindowsManager.0.5.109\lib\net461\Dapplo.Windows.DesktopWindowsManager.dll - - - ..\packages\Dapplo.Windows.Dpi.0.5.109\lib\net461\Dapplo.Windows.Dpi.dll - - - ..\packages\Dapplo.Windows.EmbeddedBrowser.0.5.109\lib\net461\Dapplo.Windows.EmbeddedBrowser.dll - - - ..\packages\Dapplo.Windows.Gdi32.0.5.109\lib\net461\Dapplo.Windows.Gdi32.dll - - - ..\packages\Dapplo.Windows.Input.0.5.109\lib\net461\Dapplo.Windows.Input.dll - - - ..\packages\Dapplo.Windows.Kernel32.0.5.109\lib\net461\Dapplo.Windows.Kernel32.dll - - - ..\packages\Dapplo.Windows.Messages.0.5.109\lib\net461\Dapplo.Windows.Messages.dll - - - ..\packages\Dapplo.Windows.User32.0.5.109\lib\net461\Dapplo.Windows.User32.dll - + + PreserveNewest + + + + @@ -135,85 +23,36 @@ - - ..\packages\System.Reactive.4.1.0\lib\net46\System.Reactive.dll - - - ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.1\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll - - - ..\packages\System.Threading.Tasks.Extensions.4.5.1\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll - - - ..\packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\System.Windows.Interactivity.dll - + - - - - - - - - - - - - - - - - - - - - - - - - - + + - - {5B924697-4DCD-4F98-85F1-105CB84B7341} - Greenshot.Addons - - - {bf35190d-b2a7-4cfa-b397-51cb384cf0d7} - Greenshot.Core - - - {f041c685-eb96-4ed1-9ace-0f5bd836610f} - Greenshot.Gfx - + + + + - - MSBuild:Compile - Designer - + + + + + + + all + runtime; build; native; contentfiles; analyzers + - - mkdir "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons" -copy "$(ProjectDir)bin\$(Configuration)\$(ProjectName).dll" "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons\" -copy "$(ProjectDir)bin\$(Configuration)\$(ProjectName).pdb" "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons\" -mkdir "$(SolutionDir)Greenshot\bin\$(Configuration)\Languages\$(ProjectName)" -copy "$(ProjectDir)\Languages\*.xml" "$(SolutionDir)Greenshot\bin\$(Configuration)\Languages\$(ProjectName)" - - - - \ No newline at end of file + diff --git a/src/Greenshot.Addon.GooglePhotos/IGooglePhotosLanguage.cs b/src/Greenshot.Addon.GooglePhotos/IGooglePhotosLanguage.cs deleted file mode 100644 index b21fbba72..000000000 --- a/src/Greenshot.Addon.GooglePhotos/IGooglePhotosLanguage.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System.ComponentModel; -using Dapplo.Language; - -namespace Greenshot.Addon.GooglePhotos -{ - [Language("GooglePhotos")] - public interface IGooglePhotosLanguage : ILanguage, INotifyPropertyChanged - { - string CommunicationWait { get; } - - string Configure { get; } - - string LabelAfterUpload { get; } - - string LabelAfterUploadLinkToClipBoard { get; } - - string LabelUploadFormat { get; } - - string SettingsTitle { get; } - - string UploadFailure { get; } - - string UploadMenuItem { get; } - - string UploadSuccess { get; } - } -} diff --git a/src/Greenshot.Addon.GooglePhotos/Properties/AssemblyInfo.cs b/src/Greenshot.Addon.GooglePhotos/Properties/AssemblyInfo.cs deleted file mode 100644 index 3affa2f93..000000000 --- a/src/Greenshot.Addon.GooglePhotos/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,53 +0,0 @@ -#region Greenshot GNU General Public License - -// Greenshot - a free and open source screenshot tool -// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom -// -// For more information see: http://getgreenshot.org/ -// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 1 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -#endregion - -#region Usings - -using System.Reflection; -using System.Runtime.InteropServices; - -#endregion - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. - -[assembly: AssemblyTitle("Greenshot.Addon.GooglePhotos")] -[assembly: AssemblyDescription("A plugin to upload images to Google Photos")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Greenshot & F. Noel")] -[assembly: AssemblyProduct("GooglePhotos Plugin")] -[assembly: AssemblyCopyright("Copyright (C) 2012")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// This sets the default COM visibility of types in the assembly to invisible. -// If you need to expose a type to COM, use [ComVisible(true)] on that type. - -[assembly: ComVisible(false)] - -// The assembly version, replaced by build scripts - -[assembly: AssemblyVersion("1.3.0.0")] -[assembly: AssemblyInformationalVersion("1.3.0.0")] -[assembly: AssemblyFileVersion("1.3.0.0")] \ No newline at end of file diff --git a/src/Greenshot.Addon.GooglePhotos/ViewModels/GooglePhotosConfigViewModel.cs b/src/Greenshot.Addon.GooglePhotos/ViewModels/GooglePhotosConfigViewModel.cs index 06d18fef9..6288c82d8 100644 --- a/src/Greenshot.Addon.GooglePhotos/ViewModels/GooglePhotosConfigViewModel.cs +++ b/src/Greenshot.Addon.GooglePhotos/ViewModels/GooglePhotosConfigViewModel.cs @@ -24,6 +24,7 @@ using System.Reactive.Disposables; using Dapplo.CaliburnMicro.Configuration; using Dapplo.CaliburnMicro.Extensions; +using Greenshot.Addon.GooglePhotos.Configuration; using Greenshot.Addons.Core.Enums; using Greenshot.Addons.ViewModels; @@ -36,8 +37,20 @@ namespace Greenshot.Addon.GooglePhotos.ViewModels /// private CompositeDisposable _disposables; + /// + /// Configuration for the view + /// public IGooglePhotosConfiguration GooglePhotosConfiguration { get; } + + /// + /// Translations for the view + /// public IGooglePhotosLanguage GooglePhotosLanguage { get; } + + /// + /// FileConfigPartViewModel is used from the view + /// TODO: Check if this is really true and needed + /// public FileConfigPartViewModel FileConfigPartViewModel { get; } public GooglePhotosConfigViewModel( @@ -50,6 +63,7 @@ namespace Greenshot.Addon.GooglePhotos.ViewModels FileConfigPartViewModel = fileConfigPartViewModel; } + /// public override void Initialize(IConfig config) { FileConfigPartViewModel.DestinationFileConfiguration = GooglePhotosConfiguration; @@ -71,6 +85,7 @@ namespace Greenshot.Addon.GooglePhotos.ViewModels base.Initialize(config); } + /// protected override void OnDeactivate(bool close) { _disposables.Dispose(); diff --git a/src/Greenshot.Addon.GooglePhotos/packages.config b/src/Greenshot.Addon.GooglePhotos/packages.config deleted file mode 100644 index 4f4d2c4e1..000000000 --- a/src/Greenshot.Addon.GooglePhotos/packages.config +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Greenshot.Addon.Imgur/IImgurConfiguration.cs b/src/Greenshot.Addon.Imgur/Configuration/IImgurConfiguration.cs similarity index 92% rename from src/Greenshot.Addon.Imgur/IImgurConfiguration.cs rename to src/Greenshot.Addon.Imgur/Configuration/IImgurConfiguration.cs index 15d021fb3..d2791f6df 100644 --- a/src/Greenshot.Addon.Imgur/IImgurConfiguration.cs +++ b/src/Greenshot.Addon.Imgur/Configuration/IImgurConfiguration.cs @@ -26,22 +26,21 @@ using System.Collections.Generic; using System.ComponentModel; using System.Runtime.Serialization; +using Dapplo.Config.Ini; using Dapplo.HttpExtensions.OAuth; -using Dapplo.Ini; -using Dapplo.InterfaceImpl.Extensions; using Greenshot.Addon.Imgur.Entities; using Greenshot.Addons.Core; #endregion -namespace Greenshot.Addon.Imgur +namespace Greenshot.Addon.Imgur.Configuration { /// /// Description of ImgurConfiguration. /// [IniSection("Imgur")] [Description("Greenshot Imgur Plugin configuration")] - public interface IImgurConfiguration : IIniSection, IDestinationFileConfiguration, IOAuth2Token, ITransactionalProperties, INotifyPropertyChanged + public interface IImgurConfiguration : IIniSection, IDestinationFileConfiguration, IOAuth2Token { [Description("Url to Imgur system.")] [DefaultValue("https://api.imgur.com/3")] diff --git a/src/Greenshot.Addon.Imgur/IImgurLanguage.cs b/src/Greenshot.Addon.Imgur/Configuration/IImgurLanguage.cs similarity index 84% rename from src/Greenshot.Addon.Imgur/IImgurLanguage.cs rename to src/Greenshot.Addon.Imgur/Configuration/IImgurLanguage.cs index f012f8be5..84611849a 100644 --- a/src/Greenshot.Addon.Imgur/IImgurLanguage.cs +++ b/src/Greenshot.Addon.Imgur/Configuration/IImgurLanguage.cs @@ -19,15 +19,16 @@ #region Usings -using System.ComponentModel; -using Dapplo.Language; +using System.Diagnostics.CodeAnalysis; +using Dapplo.Config.Language; #endregion -namespace Greenshot.Addon.Imgur +namespace Greenshot.Addon.Imgur.Configuration { [Language("Imgur")] - public interface IImgurLanguage : ILanguage, INotifyPropertyChanged + [SuppressMessage("ReSharper", "UnusedMember.Global")] + public interface IImgurLanguage : ILanguage { string Cancel { get; } diff --git a/src/Greenshot.Addon.Imgur/Configuration/Impl/ImgurConfigurationImpl.cs b/src/Greenshot.Addon.Imgur/Configuration/Impl/ImgurConfigurationImpl.cs new file mode 100644 index 000000000..f24bdc4d2 --- /dev/null +++ b/src/Greenshot.Addon.Imgur/Configuration/Impl/ImgurConfigurationImpl.cs @@ -0,0 +1,90 @@ +#region Greenshot GNU General Public License + +// Greenshot - a free and open source screenshot tool +// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom +// +// For more information see: http://getgreenshot.org/ +// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 1 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using Dapplo.Config.Ini; +using Dapplo.Config.Ini.Converters; +using Greenshot.Addon.Imgur.Entities; +using Greenshot.Core.Enums; + +namespace Greenshot.Addon.Imgur.Configuration.Impl +{ + internal class ImgurConfigurationImpl : IniSectionBase, IImgurConfiguration + { + #region Implementation of IFileConfiguration + + public string OutputFilePath { get; set; } + public bool OutputFileAllowOverwrite { get; set; } + public string OutputFileFilenamePattern { get; set; } + public OutputFormats OutputFileFormat { get; set; } + public bool OutputFileReduceColors { get; set; } + public bool OutputFileAutoReduceColors { get; set; } + public int OutputFileReduceColorsTo { get; set; } + public int OutputFileJpegQuality { get; set; } + public bool OutputFilePromptQuality { get; set; } + public uint OutputFileIncrementingNumber { get; set; } + public string OptimizePNGCommand { get; set; } + public string OptimizePNGCommandArguments { get; set; } + + #endregion + + #region Implementation of IDestinationFileConfiguration + + public bool UseOwnSettings { get; set; } + + #endregion + + #region Implementation of IOAuth2Token + + [TypeConverter(typeof(StringEncryptionTypeConverter))] + public string OAuth2AccessToken { get; set; } + + public DateTimeOffset OAuth2AccessTokenExpires { get; set; } + + [TypeConverter(typeof(StringEncryptionTypeConverter))] + public string OAuth2RefreshToken { get; set; } + + #endregion + + #region Implementation of IImgurConfiguration + + public string ImgurApi3Url { get; set; } + public bool CopyLinkToClipboard { get; set; } + public bool UsePageLink { get; set; } + public bool AnonymousAccess { get; set; } + public string ClientId { get; set; } + public string ClientSecret { get; set; } + public string ApiUrl { get; set; } + public bool AddTitle { get; set; } + public bool AddFilename { get; set; } + public string FilenamePattern { get; set; } + public bool TrackHistory { get; set; } + public IDictionary ImgurUploadHistory { get; set; } + public int Credits { get; set; } + public IDictionary RuntimeImgurHistory { get; set; } + + #endregion + } +} diff --git a/src/Greenshot.Addon.Imgur/Configuration/Impl/ImgurLanguageImpl.cs b/src/Greenshot.Addon.Imgur/Configuration/Impl/ImgurLanguageImpl.cs new file mode 100644 index 000000000..1716e7955 --- /dev/null +++ b/src/Greenshot.Addon.Imgur/Configuration/Impl/ImgurLanguageImpl.cs @@ -0,0 +1,59 @@ +#region Greenshot GNU General Public License + +// Greenshot - a free and open source screenshot tool +// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom +// +// For more information see: http://getgreenshot.org/ +// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 1 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#endregion + +using System.Diagnostics.CodeAnalysis; +using Dapplo.Config.Language; + +namespace Greenshot.Addon.Imgur.Configuration.Impl +{ + /// + /// This implements IImgurLanguage and takes care of storing, all setters are replaced via AutoProperties.Fody + /// +#pragma warning disable CS1591 + [SuppressMessage("ReSharper", "UnassignedGetOnlyAutoProperty")] + public class ImgurLanguageImpl : LanguageBase, IImgurLanguage + { + #region Implementation of IImgurLanguage + + public string Cancel { get; } + public string ClearQuestion { get; } + public string CommunicationWait { get; } + public string Configure { get; } + public string DeleteQuestion { get; } + public string DeleteTitle { get; } + public string History { get; } + public string LabelClear { get; } + public string LabelUploadFormat { get; } + public string LabelUrl { get; } + public string Ok { get; } + public string SettingsTitle { get; } + public string UploadFailure { get; } + public string UploadMenuItem { get; } + public string UploadSuccess { get; } + public string UsePageLink { get; } + public string AnonymousAccess { get; } + public string ResetCredentialsButton { get; } + + #endregion + } +} diff --git a/src/Greenshot.Addon.Imgur/FodyWeavers.xml b/src/Greenshot.Addon.Imgur/FodyWeavers.xml new file mode 100644 index 000000000..7f5a26669 --- /dev/null +++ b/src/Greenshot.Addon.Imgur/FodyWeavers.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/Greenshot.Addon.Imgur/FodyWeavers.xsd b/src/Greenshot.Addon.Imgur/FodyWeavers.xsd new file mode 100644 index 000000000..061979a03 --- /dev/null +++ b/src/Greenshot.Addon.Imgur/FodyWeavers.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + 'true' to run assembly verification on the target assembly after all weavers have been finished. + + + + + A comma separated list of error codes that can be safely ignored in assembly verification. + + + + + \ No newline at end of file diff --git a/src/Greenshot.Addon.Imgur/Greenshot.Addon.Imgur.csproj b/src/Greenshot.Addon.Imgur/Greenshot.Addon.Imgur.csproj index 5b74189b3..8d922e760 100644 --- a/src/Greenshot.Addon.Imgur/Greenshot.Addon.Imgur.csproj +++ b/src/Greenshot.Addon.Imgur/Greenshot.Addon.Imgur.csproj @@ -1,160 +1,20 @@ - - - + + - {80D8DEB9-94E3-4876-8CCA-2DF1ED5F2C50} - {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library Greenshot.Addon.Imgur Greenshot.Addon.Imgur - v4.6.1 - Properties - False - False - 4 - false - Always - - - - 3.5 - - - - + net471;netcoreapp3.0 - - false - latest - - - false - - - false - latest - - - false - - + - - ..\packages\Autofac.4.8.1\lib\net45\Autofac.dll - - - ..\packages\Autofac.Extras.AttributeMetadata.4.0.1\lib\net45\Autofac.Extras.AttributeMetadata.dll - - - ..\packages\Autofac.Mef.4.0.0\lib\net45\Autofac.Integration.Mef.dll - - - ..\packages\Caliburn.Micro.Core.3.2.0\lib\net45\Caliburn.Micro.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\Caliburn.Micro.Platform.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\Caliburn.Micro.Platform.Core.dll - - - ..\packages\CommonServiceLocator.2.0.4\lib\net46\CommonServiceLocator.dll - - - ..\packages\ControlzEx.3.0.2.4\lib\net45\ControlzEx.dll - - - ..\packages\Dapplo.Addons.1.0.79\lib\net461\Dapplo.Addons.dll - - - ..\packages\Dapplo.Addons.Bootstrapper.1.0.79\lib\net461\Dapplo.Addons.Bootstrapper.dll - - - ..\packages\Dapplo.CaliburnMicro.1.0.75\lib\net461\Dapplo.CaliburnMicro.dll - - - ..\packages\Dapplo.CaliburnMicro.Configuration.1.0.75\lib\net461\Dapplo.CaliburnMicro.Configuration.dll - - - ..\packages\Dapplo.CaliburnMicro.Dapp.1.0.75\lib\net461\Dapplo.CaliburnMicro.Dapp.dll - - - ..\packages\Dapplo.CaliburnMicro.Menu.1.0.75\lib\net461\Dapplo.CaliburnMicro.Menu.dll - - - ..\packages\Dapplo.CaliburnMicro.Security.1.0.75\lib\net461\Dapplo.CaliburnMicro.Security.dll - - - ..\packages\Dapplo.CaliburnMicro.Translations.1.0.75\lib\net461\Dapplo.CaliburnMicro.Translations.dll - - - ..\packages\Dapplo.HttpExtensions.0.8.46\lib\net46\Dapplo.HttpExtensions.dll - - - ..\packages\Dapplo.HttpExtensions.JsonNet.0.8.46\lib\net46\Dapplo.HttpExtensions.JsonNet.dll - - - ..\packages\Dapplo.HttpExtensions.OAuth.0.8.46\lib\net46\Dapplo.HttpExtensions.OAuth.dll - - - ..\packages\Dapplo.Ini.0.5.31\lib\net45\Dapplo.Ini.dll - - - ..\packages\Dapplo.InterfaceImpl.0.2.12\lib\net45\Dapplo.InterfaceImpl.dll - - - ..\packages\Dapplo.Language.0.5.31\lib\net45\Dapplo.Language.dll - - - ..\packages\Dapplo.Log.1.2.1\lib\net45\Dapplo.Log.dll - - - ..\packages\Dapplo.Utils.1.0.161\lib\net45\Dapplo.Utils.dll - - - ..\packages\Dapplo.Windows.0.5.109\lib\net461\Dapplo.Windows.dll - - - ..\packages\Dapplo.Windows.Clipboard.0.5.109\lib\net461\Dapplo.Windows.Clipboard.dll - - - ..\packages\Dapplo.Windows.Com.0.5.109\lib\net461\Dapplo.Windows.Com.dll - - - ..\packages\Dapplo.Windows.Common.0.5.109\lib\net461\Dapplo.Windows.Common.dll - - - ..\packages\Dapplo.Windows.DesktopWindowsManager.0.5.109\lib\net461\Dapplo.Windows.DesktopWindowsManager.dll - - - ..\packages\Dapplo.Windows.Dpi.0.5.109\lib\net461\Dapplo.Windows.Dpi.dll - - - ..\packages\Dapplo.Windows.EmbeddedBrowser.0.5.109\lib\net461\Dapplo.Windows.EmbeddedBrowser.dll - - - ..\packages\Dapplo.Windows.Gdi32.0.5.109\lib\net461\Dapplo.Windows.Gdi32.dll - - - ..\packages\Dapplo.Windows.Input.0.5.109\lib\net461\Dapplo.Windows.Input.dll - - - ..\packages\Dapplo.Windows.Kernel32.0.5.109\lib\net461\Dapplo.Windows.Kernel32.dll - - - ..\packages\Dapplo.Windows.Messages.0.5.109\lib\net461\Dapplo.Windows.Messages.dll - - - ..\packages\Dapplo.Windows.User32.0.5.109\lib\net461\Dapplo.Windows.User32.dll - - - ..\packages\MahApps.Metro.1.6.5\lib\net46\MahApps.Metro.dll - + + PreserveNewest + + + + - - ..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll - @@ -163,90 +23,38 @@ - - ..\packages\System.Reactive.4.1.0\lib\net46\System.Reactive.dll - - - ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.1\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll - - - ..\packages\System.Threading.Tasks.Extensions.4.5.1\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll - - - ..\packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll - - - ..\packages\ControlzEx.3.0.2.4\lib\net45\System.Windows.Interactivity.dll - + - - - - - - - - - - - - - Never - - - Never - - - Never - - - Never - - - + + - - {bf35190d-b2a7-4cfa-b397-51cb384cf0d7} - Greenshot.Core - - - {f041c685-eb96-4ed1-9ace-0f5bd836610f} - Greenshot.Gfx - - - {5B924697-4DCD-4F98-85F1-105CB84B7341} - Greenshot.Addons - + + + + - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - + + + + + + + + all + runtime; build; native; contentfiles; analyzers + + - - - - - mkdir "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons" -copy "$(ProjectDir)bin\$(Configuration)\$(ProjectName).dll" "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons\" -copy "$(ProjectDir)bin\$(Configuration)\$(ProjectName).pdb" "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons\" -mkdir "$(SolutionDir)Greenshot\bin\$(Configuration)\Languages\$(ProjectName)" -copy "$(ProjectDir)\Languages\*.xml" "$(SolutionDir)Greenshot\bin\$(Configuration)\Languages\$(ProjectName)" - - \ No newline at end of file + diff --git a/src/Greenshot.Addon.Imgur/ImgurAddonModule.cs b/src/Greenshot.Addon.Imgur/ImgurAddonModule.cs index 5715462de..901d12f21 100644 --- a/src/Greenshot.Addon.Imgur/ImgurAddonModule.cs +++ b/src/Greenshot.Addon.Imgur/ImgurAddonModule.cs @@ -24,8 +24,10 @@ using Autofac; using Dapplo.Addons; using Dapplo.CaliburnMicro.Configuration; -using Dapplo.Ini; -using Dapplo.Language; +using Dapplo.Config.Ini; +using Dapplo.Config.Language; +using Greenshot.Addon.Imgur.Configuration; +using Greenshot.Addon.Imgur.Configuration.Impl; using Greenshot.Addon.Imgur.ViewModels; using Greenshot.Addons.Components; @@ -37,13 +39,15 @@ namespace Greenshot.Addon.Imgur protected override void Load(ContainerBuilder builder) { builder - .Register(context => IniConfig.Current.Get()) + .RegisterType() .As() + .As() .SingleInstance(); builder - .Register(context => LanguageLoader.Current.Get()) + .RegisterType() .As() + .As() .SingleInstance(); builder diff --git a/src/Greenshot.Addon.Imgur/ImgurApi.cs b/src/Greenshot.Addon.Imgur/ImgurApi.cs index c9f9d0066..3bb538680 100644 --- a/src/Greenshot.Addon.Imgur/ImgurApi.cs +++ b/src/Greenshot.Addon.Imgur/ImgurApi.cs @@ -37,6 +37,7 @@ using Dapplo.HttpExtensions.JsonNet; using Dapplo.HttpExtensions.OAuth; using Dapplo.Log; using Dapplo.Utils; +using Greenshot.Addon.Imgur.Configuration; using Greenshot.Addon.Imgur.Entities; using Greenshot.Addons.Core; using Greenshot.Addons.Extensions; diff --git a/src/Greenshot.Addon.Imgur/ImgurDestination.cs b/src/Greenshot.Addon.Imgur/ImgurDestination.cs index b5dec259d..e8a724fb7 100644 --- a/src/Greenshot.Addon.Imgur/ImgurDestination.cs +++ b/src/Greenshot.Addon.Imgur/ImgurDestination.cs @@ -33,6 +33,7 @@ using Dapplo.Addons; using Dapplo.Log; using Dapplo.Windows.Clipboard; using Dapplo.Windows.Extensions; +using Greenshot.Addon.Imgur.Configuration; using Greenshot.Addon.Imgur.Entities; using Greenshot.Addon.Imgur.ViewModels; using Greenshot.Addons; diff --git a/src/Greenshot.Addon.Imgur/Properties/AssemblyInfo.cs b/src/Greenshot.Addon.Imgur/Properties/AssemblyInfo.cs deleted file mode 100644 index 4b782793d..000000000 --- a/src/Greenshot.Addon.Imgur/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,53 +0,0 @@ -#region Greenshot GNU General Public License - -// Greenshot - a free and open source screenshot tool -// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom -// -// For more information see: http://getgreenshot.org/ -// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 1 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -#endregion - -#region Usings - -using System.Reflection; -using System.Runtime.InteropServices; - -#endregion - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. - -[assembly: AssemblyTitle("Greenshot.Addon.Imgur")] -[assembly: AssemblyDescription("A plugin to upload images to Imgur")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Greenshot")] -[assembly: AssemblyProduct("Imgur Plugin")] -[assembly: AssemblyCopyright("Copyright (C) 2007-2018")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// This sets the default COM visibility of types in the assembly to invisible. -// If you need to expose a type to COM, use [ComVisible(true)] on that type. - -[assembly: ComVisible(false)] - -// The assembly version, replaced by build scripts - -[assembly: AssemblyVersion("1.3.0.0")] -[assembly: AssemblyInformationalVersion("1.3.0.0")] -[assembly: AssemblyFileVersion("1.3.0.0")] \ No newline at end of file diff --git a/src/Greenshot.Addon.Imgur/ViewModels/ImgurConfigViewModel.cs b/src/Greenshot.Addon.Imgur/ViewModels/ImgurConfigViewModel.cs index f0dfccf97..cfa003269 100644 --- a/src/Greenshot.Addon.Imgur/ViewModels/ImgurConfigViewModel.cs +++ b/src/Greenshot.Addon.Imgur/ViewModels/ImgurConfigViewModel.cs @@ -28,6 +28,7 @@ using Caliburn.Micro; using Dapplo.CaliburnMicro.Configuration; using Dapplo.CaliburnMicro.Extensions; using Dapplo.HttpExtensions.OAuth; +using Greenshot.Addon.Imgur.Configuration; using Greenshot.Addons.Core.Enums; using Greenshot.Addons.ViewModels; diff --git a/src/Greenshot.Addon.Imgur/ViewModels/ImgurHistoryViewModel.cs b/src/Greenshot.Addon.Imgur/ViewModels/ImgurHistoryViewModel.cs index e8787450a..b25e9f508 100644 --- a/src/Greenshot.Addon.Imgur/ViewModels/ImgurHistoryViewModel.cs +++ b/src/Greenshot.Addon.Imgur/ViewModels/ImgurHistoryViewModel.cs @@ -32,6 +32,7 @@ using Caliburn.Micro; using Dapplo.CaliburnMicro.Extensions; using Dapplo.Log; using Dapplo.Windows.Clipboard; +using Greenshot.Addon.Imgur.Configuration; using Greenshot.Addon.Imgur.Entities; using Greenshot.Addons; using Greenshot.Addons.Extensions; @@ -44,16 +45,22 @@ namespace Greenshot.Addon.Imgur.ViewModels public sealed class ImgurHistoryViewModel : Screen { private static readonly LogSource Log = new LogSource(); + private readonly ImgurApi _imgurApi; /// /// Here all disposables are registered, so we can clean the up /// private CompositeDisposable _disposables; + /// + /// The configuration used in the view + /// public IImgurConfiguration ImgurConfiguration { get; } - public ImgurApi ImgurApi { get; } + /// + /// The translations used in the view + /// public IImgurLanguage ImgurLanguage { get; } /// @@ -61,6 +68,13 @@ namespace Greenshot.Addon.Imgur.ViewModels /// public IGreenshotLanguage GreenshotLanguage { get; } + /// + /// Constructor which accepts the dependencies for this class + /// + /// IImgurConfiguration + /// ImgurApi + /// IImgurLanguage + /// IGreenshotLanguage public ImgurHistoryViewModel( IImgurConfiguration imgurConfiguration, ImgurApi imgurApi, @@ -69,7 +83,7 @@ namespace Greenshot.Addon.Imgur.ViewModels ) { ImgurConfiguration = imgurConfiguration; - ImgurApi = imgurApi; + _imgurApi = imgurApi; ImgurLanguage = imgurLanguage; GreenshotLanguage = greenshotLanguage; } @@ -78,6 +92,7 @@ namespace Greenshot.Addon.Imgur.ViewModels /// public ObservableCollection ImgurHistory { get; } = new BindableCollection(); + /// protected override void OnActivate() { // Prepare disposables @@ -87,9 +102,10 @@ namespace Greenshot.Addon.Imgur.ViewModels { ImgurLanguage.CreateDisplayNameBinding(this, nameof(IImgurLanguage.History)) }; - var ignoringTask = LoadHistory(); + _ = LoadHistory(); } + /// protected override void OnDeactivate(bool close) { _disposables.Dispose(); @@ -116,10 +132,10 @@ namespace Greenshot.Addon.Imgur.ViewModels } try { - var imgurInfo = await ImgurApi.RetrieveImgurInfoAsync(hash, ImgurConfiguration.ImgurUploadHistory[hash], cancellationToken).ConfigureAwait(true); + var imgurInfo = await _imgurApi.RetrieveImgurInfoAsync(hash, ImgurConfiguration.ImgurUploadHistory[hash], cancellationToken).ConfigureAwait(true); if (imgurInfo != null) { - await ImgurApi.RetrieveImgurThumbnailAsync(imgurInfo, cancellationToken).ConfigureAwait(true); + await _imgurApi.RetrieveImgurThumbnailAsync(imgurInfo, cancellationToken).ConfigureAwait(true); ImgurConfiguration.RuntimeImgurHistory.Add(hash, imgurInfo); // Already loaded, only add it to the view ImgurHistory.Add(imgurInfo); @@ -137,6 +153,9 @@ namespace Greenshot.Addon.Imgur.ViewModels } } + /// + /// The selected Imgur entry + /// public ImgurImage SelectedImgur { get; private set; } /// @@ -149,7 +168,7 @@ namespace Greenshot.Addon.Imgur.ViewModels /// public async Task Delete() { - await ImgurApi.DeleteImgurImageAsync(SelectedImgur).ConfigureAwait(true); + await _imgurApi.DeleteImgurImageAsync(SelectedImgur).ConfigureAwait(true); } /// diff --git a/src/Greenshot.Addon.Imgur/packages.config b/src/Greenshot.Addon.Imgur/packages.config deleted file mode 100644 index 65c48eebc..000000000 --- a/src/Greenshot.Addon.Imgur/packages.config +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Greenshot.Addon.InternetExplorer/AccessibleHelper.cs b/src/Greenshot.Addon.InternetExplorer/AccessibleHelper.cs index d116901ab..3cafdd2c2 100644 --- a/src/Greenshot.Addon.InternetExplorer/AccessibleHelper.cs +++ b/src/Greenshot.Addon.InternetExplorer/AccessibleHelper.cs @@ -27,7 +27,6 @@ using System; using System.Collections.Generic; using System.Runtime.InteropServices; using Accessibility; -using Dapplo.Log; #endregion @@ -43,7 +42,6 @@ namespace Greenshot.Addon.InternetExplorer { private const int IE_ACTIVE_TAB = 2097154; private const int CHILDID_SELF = 0; - private static readonly LogSource Log = new LogSource(); private readonly IAccessible accessible; public Accessible(IntPtr hWnd) @@ -74,8 +72,7 @@ namespace Greenshot.Addon.InternetExplorer var list = new List(res.Length); foreach (var obj in res) { - var accessible = obj as IAccessible; - if (accessible != null) + if (obj is IAccessible accessible) { list.Add(new Accessible(accessible)); } @@ -94,6 +91,9 @@ namespace Greenshot.Addon.InternetExplorer get { return accessible.accChildCount; } } + /// + /// Returns the URL for the active tab + /// public string IEActiveTabUrl { get @@ -126,6 +126,9 @@ namespace Greenshot.Addon.InternetExplorer } } + /// + /// Get the index of the active tab + /// public int IEActiveTabIndex { get @@ -151,6 +154,9 @@ namespace Greenshot.Addon.InternetExplorer } } + /// + /// Get the caption of the active tab + /// public string IEActiveTabCaption { get @@ -174,6 +180,9 @@ namespace Greenshot.Addon.InternetExplorer } } + /// + /// Get the captions of all tabs + /// public List IETabCaptions { get @@ -201,7 +210,9 @@ namespace Greenshot.Addon.InternetExplorer } } - + /// + /// Get the urls of all tabs + /// public IEnumerable IETabUrls { get @@ -228,6 +239,9 @@ namespace Greenshot.Addon.InternetExplorer } } + /// + /// Count the tabs + /// public int IETabCount { get @@ -246,6 +260,10 @@ namespace Greenshot.Addon.InternetExplorer } } + /// + /// Activate the specified tab + /// + /// string public void ActivateIETab(string tabCaptionToActivate) { foreach (var accessor in Children) @@ -264,6 +282,10 @@ namespace Greenshot.Addon.InternetExplorer } } + /// + /// Close the specified tabs + /// + /// string public void CloseIETab(string tabCaptionToClose) { foreach (var accessor in Children) @@ -285,6 +307,10 @@ namespace Greenshot.Addon.InternetExplorer } } + /// + /// Active the IE tab + /// + /// int public void ActivateIETab(int tabIndexToActivate) { var index = 0; @@ -334,7 +360,7 @@ namespace Greenshot.Addon.InternetExplorer OBJID_WINDOW = 0x00000000 } - #region Interop +#region Interop private static int AccessibleObjectFromWindow(IntPtr hWnd, OBJID idObject, ref IAccessible acc) { @@ -356,6 +382,6 @@ namespace Greenshot.Addon.InternetExplorer [return: MarshalAs(UnmanagedType.Interface)] public static extern object ObjectFromLresult(UIntPtr lResult, [MarshalAs(UnmanagedType.LPStruct)] Guid refiid, IntPtr wParam); - #endregion +#endregion } } \ No newline at end of file diff --git a/src/Greenshot.Addon.InternetExplorer/Greenshot.Addon.InternetExplorer.csproj b/src/Greenshot.Addon.InternetExplorer/Greenshot.Addon.InternetExplorer.csproj index 1d55aa232..c60c67ec7 100644 --- a/src/Greenshot.Addon.InternetExplorer/Greenshot.Addon.InternetExplorer.csproj +++ b/src/Greenshot.Addon.InternetExplorer/Greenshot.Addon.InternetExplorer.csproj @@ -1,99 +1,44 @@ - - - - + + - {4CCA2717-B8A4-44F7-965B-5687107E4921} - Library - Properties - Greenshot.Addon.InternetExplorer - Greenshot.Addon.InternetExplorer - v4.6.1 - 512 - true + net471;netcoreapp3.0 + true - - - - ..\packages\Dapplo.Ini.0.5.31\lib\net45\Dapplo.Ini.dll - - - ..\packages\Dapplo.InterfaceImpl.0.2.12\lib\net45\Dapplo.InterfaceImpl.dll - - - ..\packages\Dapplo.Log.1.2.1\lib\net45\Dapplo.Log.dll - - - ..\packages\Dapplo.Utils.1.0.161\lib\net45\Dapplo.Utils.dll - - - ..\packages\Dapplo.Windows.0.5.109\lib\net461\Dapplo.Windows.dll - - - ..\packages\Dapplo.Windows.Com.0.5.109\lib\net461\Dapplo.Windows.Com.dll - - - ..\packages\Dapplo.Windows.Common.0.5.109\lib\net461\Dapplo.Windows.Common.dll - - - ..\packages\Dapplo.Windows.DesktopWindowsManager.0.5.109\lib\net461\Dapplo.Windows.DesktopWindowsManager.dll - - - ..\packages\Dapplo.Windows.Gdi32.0.5.109\lib\net461\Dapplo.Windows.Gdi32.dll - - - ..\packages\Dapplo.Windows.Input.0.5.109\lib\net461\Dapplo.Windows.Input.dll - - - ..\packages\Dapplo.Windows.Kernel32.0.5.109\lib\net461\Dapplo.Windows.Kernel32.dll - - - ..\packages\Dapplo.Windows.Messages.0.5.109\lib\net461\Dapplo.Windows.Messages.dll - - - ..\packages\Dapplo.Windows.User32.0.5.109\lib\net461\Dapplo.Windows.User32.dll - - - True - - - - - - - + + - + + + + + - - ..\packages\System.Reactive.4.1.0\lib\net46\System.Reactive.dll - + - - ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.1\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll - - - ..\packages\System.Threading.Tasks.Extensions.4.5.1\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll - - - ..\packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll - + + + + + + + - - - - - - - + + 0.7.26 + + + 0.7.26 + + - + + {5b924697-4dcd-4f98-85f1-105cb84b7341} Greenshot.Addons @@ -107,9 +52,4 @@ Greenshot.Gfx - - - - - \ No newline at end of file diff --git a/src/Greenshot.Addon.InternetExplorer/IECaptureHelper.cs b/src/Greenshot.Addon.InternetExplorer/IECaptureHelper.cs index d7583933e..14e210269 100644 --- a/src/Greenshot.Addon.InternetExplorer/IECaptureHelper.cs +++ b/src/Greenshot.Addon.InternetExplorer/IECaptureHelper.cs @@ -29,7 +29,6 @@ using System.Drawing; using System.Drawing.Imaging; using System.Linq; using System.Runtime.InteropServices; -using Dapplo.Ini; using Dapplo.Log; using Dapplo.Windows.Com; using Dapplo.Windows.Common.Extensions; @@ -38,6 +37,7 @@ using Dapplo.Windows.Desktop; using Dapplo.Windows.Messages; using Dapplo.Windows.User32; using Greenshot.Addon.InternetExplorer.IEInterop; +using Greenshot.Addons.Config.Impl; using Greenshot.Addons.Controls; using Greenshot.Addons.Core; using Greenshot.Addons.Interfaces; @@ -57,21 +57,28 @@ namespace Greenshot.Addon.InternetExplorer public static class IeCaptureHelper { private static readonly LogSource Log = new LogSource(); - private static readonly ICoreConfiguration CoreConfig = IniConfig.Current.Get(); + // TODO: Solve, was static reference! + private static readonly ICoreConfiguration CoreConfig = new CoreConfigurationImpl(); - // Helper method to activate a certain IE Tab - public static void ActivateIeTab(IInteropWindow nativeIeWindow, int tabIndex) + /// + /// Helper method to activate a certain IE Tab + /// + /// IInteropWindow + /// int + public static void ActivateIeTab(IInteropWindow nativeIeWindow, int tabIndex) { var directUiInteropWindow = IEHelper.GetDirectUi(nativeIeWindow); - if (directUiInteropWindow != null) - { - // Bring window to the front - nativeIeWindow.Restore(); - // Get accessible - var ieAccessible = new Accessible(directUiInteropWindow.Handle); - // Activate Tab - ieAccessible.ActivateIETab(tabIndex); - } + if (directUiInteropWindow == null) + { + return; + } + + // Bring window to the front + nativeIeWindow.Restore(); + // Get accessible + var ieAccessible = new Accessible(directUiInteropWindow.Handle); + // Activate Tab + ieAccessible.ActivateIETab(tabIndex); } /// @@ -387,7 +394,7 @@ namespace Greenshot.Addon.InternetExplorer { if (windowToCapture == null) { - windowToCapture = InteropWindowQuery.GetActiveWindow(); + windowToCapture = InteropWindowQuery.GetForegroundWindow(); } // Show backgroundform after retrieving the active window.. var backgroundForm = new BackgroundForm("Internet Explorer", "Please wait while the page in Internet Explorer is captured..."); diff --git a/src/Greenshot.Addon.InternetExplorer/IEHelper.cs b/src/Greenshot.Addon.InternetExplorer/IEHelper.cs index abebb5d79..88a1a9648 100644 --- a/src/Greenshot.Addon.InternetExplorer/IEHelper.cs +++ b/src/Greenshot.Addon.InternetExplorer/IEHelper.cs @@ -108,13 +108,18 @@ namespace Greenshot.Addon.InternetExplorer { { continue; } - - var ieAccessible = new Accessible(directUiWd.Handle); +#if !NETCOREAPP3_0 + var ieAccessible = new Accessible(directUiWd.Handle); foreach (var url in ieAccessible.IETabUrls) { yield return url; } - } - } +#endif + + } +#if NETCOREAPP3_0 + return Enumerable.Empty(); +#endif + } } } diff --git a/src/Greenshot.Addon.InternetExplorer/IEInterop/IEContainer.cs b/src/Greenshot.Addon.InternetExplorer/IEInterop/IEContainer.cs index d2163c344..6c0beb688 100644 --- a/src/Greenshot.Addon.InternetExplorer/IEInterop/IEContainer.cs +++ b/src/Greenshot.Addon.InternetExplorer/IEInterop/IEContainer.cs @@ -87,7 +87,7 @@ namespace Greenshot.Addon.InternetExplorer.IEInterop // Calculate startLocation for the frames var window2 = document2.parentWindow; var window3 = (IHTMLWindow3) window2; - NativePoint contentWindowLocation = contentWindow.GetInfo().Bounds.Location; + var contentWindowLocation = contentWindow.GetInfo().Bounds.Location; var x = window3.screenLeft - contentWindowLocation.X; var y = window3.screenTop - contentWindowLocation.Y; @@ -247,7 +247,7 @@ namespace Greenshot.Addon.InternetExplorer.IEInterop // Do not release IHTMLDocument5 com object, as this also gives problems with the document2! //Marshal.ReleaseComObject(document5); - NativeRect clientRectangle = contentWindow.GetInfo().Bounds; + var clientRectangle = contentWindow.GetInfo().Bounds; try { var window2 = document2.parentWindow; @@ -334,7 +334,7 @@ namespace Greenshot.Addon.InternetExplorer.IEInterop { try { - IHTMLWindow2 frameWindow = frameCollection.item(frame); + var frameWindow = frameCollection.item(frame) as IHTMLWindow2; var frameData = new DocumentContainer(frameWindow, contentWindow, this); // check if frame is hidden if (!frameData.IsHidden) diff --git a/src/Greenshot.Addon.InternetExplorer/Properties/AssemblyInfo.cs b/src/Greenshot.Addon.InternetExplorer/Properties/AssemblyInfo.cs deleted file mode 100644 index 6e9ffac32..000000000 --- a/src/Greenshot.Addon.InternetExplorer/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Greenshot.Addon.InternetExplorer")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("Greenshot.Addon.InternetExplorer")] -[assembly: AssemblyCopyright("Copyright © 2018")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("4cca2717-b8a4-44f7-965b-5687107e4921")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/src/Greenshot.Addon.InternetExplorer/app.config b/src/Greenshot.Addon.InternetExplorer/app.config index 4ce296638..dc12e2573 100644 --- a/src/Greenshot.Addon.InternetExplorer/app.config +++ b/src/Greenshot.Addon.InternetExplorer/app.config @@ -2,18 +2,6 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Greenshot.Addon.InternetExplorer/packages.config b/src/Greenshot.Addon.InternetExplorer/packages.config deleted file mode 100644 index e81c467f4..000000000 --- a/src/Greenshot.Addon.InternetExplorer/packages.config +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Greenshot.Addon.Jira/IJiraConfiguration.cs b/src/Greenshot.Addon.Jira/Configuration/IJiraConfiguration.cs similarity index 88% rename from src/Greenshot.Addon.Jira/IJiraConfiguration.cs rename to src/Greenshot.Addon.Jira/Configuration/IJiraConfiguration.cs index 4ed08b321..06a62eb5f 100644 --- a/src/Greenshot.Addon.Jira/IJiraConfiguration.cs +++ b/src/Greenshot.Addon.Jira/Configuration/IJiraConfiguration.cs @@ -24,20 +24,19 @@ #region Usings using System.ComponentModel; -using Dapplo.Ini; -using Dapplo.InterfaceImpl.Extensions; +using Dapplo.Config.Ini; using Greenshot.Addons.Core; #endregion -namespace Greenshot.Addon.Jira +namespace Greenshot.Addon.Jira.Configuration { /// /// Description of JiraConfiguration. /// [IniSection("Jira")] [Description("Greenshot Jira Plugin configuration")] - public interface IJiraConfiguration : IIniSection, IDestinationFileConfiguration, INotifyPropertyChanged, ITransactionalProperties + public interface IJiraConfiguration : IIniSection, IDestinationFileConfiguration { [Description("Base url to Jira system, without anything else")] [DefaultValue("https://jira")] diff --git a/src/Greenshot.Addon.Jira/IJiraLanguage.cs b/src/Greenshot.Addon.Jira/Configuration/IJiraLanguage.cs similarity index 92% rename from src/Greenshot.Addon.Jira/IJiraLanguage.cs rename to src/Greenshot.Addon.Jira/Configuration/IJiraLanguage.cs index 9618c2d28..7a4783b78 100644 --- a/src/Greenshot.Addon.Jira/IJiraLanguage.cs +++ b/src/Greenshot.Addon.Jira/Configuration/IJiraLanguage.cs @@ -20,11 +20,11 @@ #region Usings using System.ComponentModel; -using Dapplo.Language; +using Dapplo.Config.Language; #endregion -namespace Greenshot.Addon.Jira +namespace Greenshot.Addon.Jira.Configuration { [Language("Jira")] public interface IJiraLanguage : ILanguage, INotifyPropertyChanged diff --git a/src/Greenshot.Addon.Jira/Configuration/Impl/JiraConfigurationImpl.cs b/src/Greenshot.Addon.Jira/Configuration/Impl/JiraConfigurationImpl.cs new file mode 100644 index 000000000..8356e2f3a --- /dev/null +++ b/src/Greenshot.Addon.Jira/Configuration/Impl/JiraConfigurationImpl.cs @@ -0,0 +1,62 @@ +#region Greenshot GNU General Public License + +// Greenshot - a free and open source screenshot tool +// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom +// +// For more information see: http://getgreenshot.org/ +// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 1 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#endregion + +using Dapplo.Config.Ini; +using Greenshot.Core.Enums; + +namespace Greenshot.Addon.Jira.Configuration.Impl +{ + internal class JiraConfigurationImpl : IniSectionBase, IJiraConfiguration + { + #region Implementation of IFileConfiguration + + public string OutputFilePath { get; set; } + public bool OutputFileAllowOverwrite { get; set; } + public string OutputFileFilenamePattern { get; set; } + public OutputFormats OutputFileFormat { get; set; } + public bool OutputFileReduceColors { get; set; } + public bool OutputFileAutoReduceColors { get; set; } + public int OutputFileReduceColorsTo { get; set; } + public int OutputFileJpegQuality { get; set; } + public bool OutputFilePromptQuality { get; set; } + public uint OutputFileIncrementingNumber { get; set; } + public string OptimizePNGCommand { get; set; } + public string OptimizePNGCommandArguments { get; set; } + + #endregion + + #region Implementation of IDestinationFileConfiguration + + public bool UseOwnSettings { get; set; } + + #endregion + + #region Implementation of IJiraConfiguration + + public string Url { get; set; } + public int Timeout { get; set; } + public int MaxEntries { get; set; } + + #endregion + } +} diff --git a/src/Greenshot.Addon.Jira/Configuration/Impl/JiraLanguageImpl.cs b/src/Greenshot.Addon.Jira/Configuration/Impl/JiraLanguageImpl.cs new file mode 100644 index 000000000..e25c06d9f --- /dev/null +++ b/src/Greenshot.Addon.Jira/Configuration/Impl/JiraLanguageImpl.cs @@ -0,0 +1,61 @@ +#region Greenshot GNU General Public License + +// Greenshot - a free and open source screenshot tool +// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom +// +// For more information see: http://getgreenshot.org/ +// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 1 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#endregion + +using System.Diagnostics.CodeAnalysis; +using Dapplo.Config.Language; + +namespace Greenshot.Addon.Jira.Configuration.Impl +{ + /// + /// This implements IJiraLanguage and takes care of storing, all setters are replaced via AutoProperties.Fody + /// +#pragma warning disable CS1591 + [SuppressMessage("ReSharper", "UnassignedGetOnlyAutoProperty")] + public class JiraLanguageImpl : LanguageBase, IJiraLanguage + { + #region Implementation of IJiraLanguage + + public string Cancel { get; } + public string ColumnAssignee { get; } + public string ColumnCreated { get; } + public string ColumnId { get; } + public string ColumnReporter { get; } + public string ColumnSummary { get; } + public string CommunicationWait { get; } + public string LabelComment { get; } + public string LabelFilename { get; } + public string LabelJira { get; } + public string LabelJirafilter { get; } + public string LabelUploadFormat { get; } + public string LabelUrl { get; } + public string LoginError { get; } + public string LoginTitle { get; } + public string Ok { get; } + public string SettingsTitle { get; } + public string UploadFailure { get; } + public string UploadMenuItem { get; } + public string UploadSuccess { get; } + + #endregion + } +} diff --git a/src/Greenshot.Addon.Jira/FodyWeavers.xml b/src/Greenshot.Addon.Jira/FodyWeavers.xml index 288d3ebdd..f13eee787 100644 --- a/src/Greenshot.Addon.Jira/FodyWeavers.xml +++ b/src/Greenshot.Addon.Jira/FodyWeavers.xml @@ -1,8 +1,9 @@ - - - - + + + + Dapplo.Jira - + + \ No newline at end of file diff --git a/src/Greenshot.Addon.Jira/FodyWeavers.xsd b/src/Greenshot.Addon.Jira/FodyWeavers.xsd new file mode 100644 index 000000000..061979a03 --- /dev/null +++ b/src/Greenshot.Addon.Jira/FodyWeavers.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + 'true' to run assembly verification on the target assembly after all weavers have been finished. + + + + + A comma separated list of error codes that can be safely ignored in assembly verification. + + + + + \ No newline at end of file diff --git a/src/Greenshot.Addon.Jira/Greenshot.Addon.Jira.csproj b/src/Greenshot.Addon.Jira/Greenshot.Addon.Jira.csproj index 5251d55f2..ca2761752 100644 --- a/src/Greenshot.Addon.Jira/Greenshot.Addon.Jira.csproj +++ b/src/Greenshot.Addon.Jira/Greenshot.Addon.Jira.csproj @@ -1,165 +1,22 @@ - - - + + - {19FEEF09-313F-43C7-819D-F1BCA782B08B} - {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library Greenshot.Addon.Jira Greenshot.Addon.Jira - v4.6.1 - Properties - False - False - 4 - false - OnBuildSuccess - - - - 3.5 - - - - + net471 - - false - latest - - - false - - - false - latest - - - false - - + - - ..\packages\Autofac.4.8.1\lib\net45\Autofac.dll - - - ..\packages\Autofac.Extras.AttributeMetadata.4.0.1\lib\net45\Autofac.Extras.AttributeMetadata.dll - - - ..\packages\Autofac.Mef.4.0.0\lib\net45\Autofac.Integration.Mef.dll - - - ..\packages\Caliburn.Micro.Core.3.2.0\lib\net45\Caliburn.Micro.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\Caliburn.Micro.Platform.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\Caliburn.Micro.Platform.Core.dll - - - ..\packages\CommonServiceLocator.2.0.4\lib\net46\CommonServiceLocator.dll - - - ..\packages\Costura.Fody.3.1.0\lib\net46\Costura.dll - - - ..\packages\Dapplo.Addons.1.0.79\lib\net461\Dapplo.Addons.dll - - - ..\packages\Dapplo.Addons.Bootstrapper.1.0.79\lib\net461\Dapplo.Addons.Bootstrapper.dll - - - ..\packages\Dapplo.CaliburnMicro.1.0.75\lib\net461\Dapplo.CaliburnMicro.dll - - - ..\packages\Dapplo.CaliburnMicro.Configuration.1.0.75\lib\net461\Dapplo.CaliburnMicro.Configuration.dll - - - ..\packages\Dapplo.CaliburnMicro.Dapp.1.0.75\lib\net461\Dapplo.CaliburnMicro.Dapp.dll - - - ..\packages\Dapplo.CaliburnMicro.Menu.1.0.75\lib\net461\Dapplo.CaliburnMicro.Menu.dll - - - ..\packages\Dapplo.CaliburnMicro.Security.1.0.75\lib\net461\Dapplo.CaliburnMicro.Security.dll - - - ..\packages\Dapplo.CaliburnMicro.Translations.1.0.75\lib\net461\Dapplo.CaliburnMicro.Translations.dll - - - ..\packages\Dapplo.HttpExtensions.0.8.46\lib\net46\Dapplo.HttpExtensions.dll - - - ..\packages\Dapplo.HttpExtensions.JsonNet.0.8.46\lib\net46\Dapplo.HttpExtensions.JsonNet.dll - - - ..\packages\Dapplo.HttpExtensions.OAuth.0.8.46\lib\net46\Dapplo.HttpExtensions.OAuth.dll - - - ..\packages\Dapplo.Ini.0.5.31\lib\net45\Dapplo.Ini.dll - - - ..\packages\Dapplo.InterfaceImpl.0.2.12\lib\net45\Dapplo.InterfaceImpl.dll - - - ..\packages\Dapplo.Jira.0.7.15\lib\net46\Dapplo.Jira.dll - - - ..\packages\Dapplo.Language.0.5.31\lib\net45\Dapplo.Language.dll - - - ..\packages\Dapplo.Log.1.2.1\lib\net45\Dapplo.Log.dll - - - ..\packages\Dapplo.Utils.1.0.161\lib\net45\Dapplo.Utils.dll - - - ..\packages\Dapplo.Windows.0.5.109\lib\net461\Dapplo.Windows.dll - - - ..\packages\Dapplo.Windows.Clipboard.0.5.109\lib\net461\Dapplo.Windows.Clipboard.dll - - - ..\packages\Dapplo.Windows.Com.0.5.109\lib\net461\Dapplo.Windows.Com.dll - - - ..\packages\Dapplo.Windows.Common.0.5.109\lib\net461\Dapplo.Windows.Common.dll - - - ..\packages\Dapplo.Windows.DesktopWindowsManager.0.5.109\lib\net461\Dapplo.Windows.DesktopWindowsManager.dll - - - ..\packages\Dapplo.Windows.Dpi.0.5.109\lib\net461\Dapplo.Windows.Dpi.dll - - - ..\packages\Dapplo.Windows.EmbeddedBrowser.0.5.109\lib\net461\Dapplo.Windows.EmbeddedBrowser.dll - - - ..\packages\Dapplo.Windows.Gdi32.0.5.109\lib\net461\Dapplo.Windows.Gdi32.dll - - - ..\packages\Dapplo.Windows.Input.0.5.109\lib\net461\Dapplo.Windows.Input.dll - - - ..\packages\Dapplo.Windows.Kernel32.0.5.109\lib\net461\Dapplo.Windows.Kernel32.dll - - - ..\packages\Dapplo.Windows.Messages.0.5.109\lib\net461\Dapplo.Windows.Messages.dll - - - ..\packages\Dapplo.Windows.User32.0.5.109\lib\net461\Dapplo.Windows.User32.dll - + + PreserveNewest + + + + - - ..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll - - - ..\packages\Svg.2.3.0\lib\net35\Svg.dll - @@ -167,152 +24,40 @@ - - ..\packages\System.Reactive.4.1.0\lib\net46\System.Reactive.dll - - - ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.1\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll - - - ..\packages\System.Threading.Tasks.Extensions.4.5.1\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll - - - ..\packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\System.Windows.Interactivity.dll - + - - - - - - - - - - - - - - - - - Always - - - Always - - - Always - - - Always - - - + + - - {5B924697-4DCD-4F98-85F1-105CB84B7341} - Greenshot.Addons - False - - - {bf35190d-b2a7-4cfa-b397-51cb384cf0d7} - Greenshot.Core - - - {f041c685-eb96-4ed1-9ace-0f5bd836610f} - Greenshot.Gfx - + + + + - + + + + + + + + + + all + runtime; build; native; contentfiles; analyzers + - - - - - - - - - - - - - - - - - - - - MSBuild:Compile - Designer - - - Designer - MSBuild:Compile - - - - mkdir "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons" -copy "$(ProjectDir)bin\$(Configuration)\$(ProjectName).dll" "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons\" -copy "$(ProjectDir)bin\$(Configuration)\$(ProjectName).pdb" "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons\" -copy "$(ProjectDir)bin\$(Configuration)\Svg.dll" "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons" -mkdir "$(SolutionDir)Greenshot\bin\$(Configuration)\Languages\$(ProjectName)" -copy "$(ProjectDir)\Languages\*.xml" "$(SolutionDir)Greenshot\bin\$(Configuration)\Languages\$(ProjectName)" - - - - False - Off - 4194304 - x86 - 4096 - - - False - Off - 4194304 - AnyCPU - 4096 - - - DEBUG;TRACE - False - True - Full - true - - - TRACE - True - False - None - false - - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - - \ No newline at end of file + diff --git a/src/Greenshot.Addon.Jira/JiraAddonModule.cs b/src/Greenshot.Addon.Jira/JiraAddonModule.cs index 885f82411..e78c9cd2c 100644 --- a/src/Greenshot.Addon.Jira/JiraAddonModule.cs +++ b/src/Greenshot.Addon.Jira/JiraAddonModule.cs @@ -24,8 +24,10 @@ using Autofac; using Dapplo.Addons; using Dapplo.CaliburnMicro.Configuration; -using Dapplo.Ini; -using Dapplo.Language; +using Dapplo.Config.Ini; +using Dapplo.Config.Language; +using Greenshot.Addon.Jira.Configuration; +using Greenshot.Addon.Jira.Configuration.Impl; using Greenshot.Addon.Jira.ViewModels; using Greenshot.Addons.Components; @@ -37,17 +39,19 @@ namespace Greenshot.Addon.Jira protected override void Load(ContainerBuilder builder) { builder - .Register(context => IniConfig.Current.Get()) + .RegisterType() .As() + .As() .SingleInstance(); builder - .Register(context => LanguageLoader.Current.Get()) + .RegisterType() .As() + .As() .SingleInstance(); builder - .RegisterType() + .RegisterType() .As() .SingleInstance(); builder diff --git a/src/Greenshot.Addon.Jira/JiraConnector.cs b/src/Greenshot.Addon.Jira/JiraConnector.cs index a1da3b5c6..9e195a747 100644 --- a/src/Greenshot.Addon.Jira/JiraConnector.cs +++ b/src/Greenshot.Addon.Jira/JiraConnector.cs @@ -34,9 +34,12 @@ using System.Windows.Media.Imaging; using Dapplo.HttpExtensions; using Dapplo.HttpExtensions.Extensions; using Dapplo.Jira; +#if !NETCOREAPP3_0 using Dapplo.Jira.Converters; +#endif using Dapplo.Jira.Entities; using Dapplo.Log; +using Greenshot.Addon.Jira.Configuration; using Greenshot.Addons.Core; using Greenshot.Addons.Core.Credentials; using Greenshot.Addons.Extensions; @@ -102,7 +105,9 @@ namespace Greenshot.Addon.Jira public void UpdateSvgSize(int size) { +#if !NETCOREAPP3_0 _jiraClient.Behaviour.SetConfig(new SvgConfiguration { Width = size, Height = size }); +#endif } /// diff --git a/src/Greenshot.Addon.Jira/JiraDestination.cs b/src/Greenshot.Addon.Jira/JiraDestination.cs index 3e72477f6..8e426e454 100644 --- a/src/Greenshot.Addon.Jira/JiraDestination.cs +++ b/src/Greenshot.Addon.Jira/JiraDestination.cs @@ -34,6 +34,7 @@ using Dapplo.Addons; using Dapplo.HttpExtensions; using Dapplo.Jira.Entities; using Dapplo.Log; +using Greenshot.Addon.Jira.Configuration; using Greenshot.Addon.Jira.ViewModels; using Greenshot.Addons; using Greenshot.Addons.Components; diff --git a/src/Greenshot.Addon.Jira/JiraMonitor.cs b/src/Greenshot.Addon.Jira/JiraMonitor.cs index 110db6bd6..e329c124d 100644 --- a/src/Greenshot.Addon.Jira/JiraMonitor.cs +++ b/src/Greenshot.Addon.Jira/JiraMonitor.cs @@ -36,6 +36,7 @@ using Dapplo.Jira; using Dapplo.Log; using Dapplo.Windows.Desktop; using Dapplo.Windows.User32; +using Greenshot.Addon.Jira.Configuration; #endregion @@ -46,7 +47,7 @@ namespace Greenshot.Addon.Jira /// It keeps a list of the last "accessed" jiras, and makes it easy to upload to one. /// Make sure this is instanciated on the UI thread! /// - [Service(nameof(JiraMonitor), nameof(CaliburnServices.IniSectionService), TaskSchedulerName = "ui")] + [Service(nameof(JiraMonitor), nameof(CaliburnServices.ConfigurationService), TaskSchedulerName = "ui")] public class JiraMonitor : IStartup, IShutdown { private readonly IJiraConfiguration _jiraConfiguration; diff --git a/src/Greenshot.Addon.Jira/ViewModels/JiraConfigViewModel.cs b/src/Greenshot.Addon.Jira/ViewModels/JiraConfigViewModel.cs index 4b1a2c2ca..58aa7ef00 100644 --- a/src/Greenshot.Addon.Jira/ViewModels/JiraConfigViewModel.cs +++ b/src/Greenshot.Addon.Jira/ViewModels/JiraConfigViewModel.cs @@ -24,6 +24,7 @@ using System.Reactive.Disposables; using Dapplo.CaliburnMicro.Configuration; using Dapplo.CaliburnMicro.Extensions; +using Greenshot.Addon.Jira.Configuration; using Greenshot.Addons.Core.Enums; using Greenshot.Addons.ViewModels; diff --git a/src/Greenshot.Addon.Jira/ViewModels/JiraViewModel.cs b/src/Greenshot.Addon.Jira/ViewModels/JiraViewModel.cs index e82d146ef..ea593fbbe 100644 --- a/src/Greenshot.Addon.Jira/ViewModels/JiraViewModel.cs +++ b/src/Greenshot.Addon.Jira/ViewModels/JiraViewModel.cs @@ -29,6 +29,7 @@ using System.Windows; using Caliburn.Micro; using Dapplo.CaliburnMicro.Extensions; using Dapplo.Jira.Entities; +using Greenshot.Addon.Jira.Configuration; namespace Greenshot.Addon.Jira.ViewModels { diff --git a/src/Greenshot.Addon.Jira/packages.config b/src/Greenshot.Addon.Jira/packages.config deleted file mode 100644 index 2bf3a3d07..000000000 --- a/src/Greenshot.Addon.Jira/packages.config +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Greenshot.Addon.LegacyEditor/Colors.cs b/src/Greenshot.Addon.LegacyEditor/Colors.cs index de90b5f53..c69381185 100644 --- a/src/Greenshot.Addon.LegacyEditor/Colors.cs +++ b/src/Greenshot.Addon.LegacyEditor/Colors.cs @@ -30,13 +30,27 @@ using System.Drawing; namespace Greenshot.Addon.LegacyEditor { + /// + /// Utility class to work with System.Drawing.Colors + /// TODO: should be done differently + /// public static class Colors { + /// + /// Is the specified color visible? + /// + /// Color + /// bool true if visible public static bool IsVisible(Color c) { return !c.Equals(Color.Empty) && !c.Equals(Color.Transparent) && c.A > 0; } + /// + /// Mix all specified colors into one + /// + /// IEnumerable with Color + /// Color public static Color Mix(IEnumerable colors) { var a = 0; diff --git a/src/Greenshot.Addon.LegacyEditor/Configuration/Impl/EditorConfigurationImpl.cs b/src/Greenshot.Addon.LegacyEditor/Configuration/Impl/EditorConfigurationImpl.cs new file mode 100644 index 000000000..26bca1834 --- /dev/null +++ b/src/Greenshot.Addon.LegacyEditor/Configuration/Impl/EditorConfigurationImpl.cs @@ -0,0 +1,30 @@ +using System.Collections.Generic; +using System.Drawing; +using Dapplo.Config.Ini; +using Dapplo.Windows.Common.Structs; +using Dapplo.Windows.User32.Enums; +using Greenshot.Gfx.Effects; + +namespace Greenshot.Addon.LegacyEditor.Configuration.Impl +{ + internal class EditorConfigurationImpl : IniSectionBase, IEditorConfiguration + { + #region Implementation of IEditorConfiguration + + public IList RecentColors { get; set; } + public IDictionary LastUsedFieldValues { get; set; } + public bool MatchSizeToCapture { get; set; } + public WindowPlacementFlags WindowPlacementFlags { get; set; } + public ShowWindowCommands ShowWindowCommand { get; set; } + public NativePoint WindowMinPosition { get; set; } + public NativePoint WindowMaxPosition { get; set; } + public NativeRect WindowNormalPosition { get; set; } + public bool ReuseEditor { get; set; } + public int FreehandSensitivity { get; set; } + public bool SuppressSaveDialogAtClose { get; set; } + public DropShadowEffect DropShadowEffectSettings { get; set; } + public TornEdgeEffect TornEdgeEffectSettings { get; set; } + + #endregion + } +} diff --git a/src/Greenshot.Addon.LegacyEditor/Configuration/Impl/EditorLanguageImpl.cs b/src/Greenshot.Addon.LegacyEditor/Configuration/Impl/EditorLanguageImpl.cs new file mode 100644 index 000000000..fd6ebc101 --- /dev/null +++ b/src/Greenshot.Addon.LegacyEditor/Configuration/Impl/EditorLanguageImpl.cs @@ -0,0 +1,107 @@ +using System.Diagnostics.CodeAnalysis; +using Dapplo.Config.Language; + +namespace Greenshot.Addon.LegacyEditor.Configuration.Impl +{ + /// + /// This implements IEditorLanguage and takes care of storing, all setters are replaced via AutoProperties.Fody + /// + [SuppressMessage("ReSharper", "UnassignedGetOnlyAutoProperty")] +#pragma warning disable CS1591 + public class EditorLanguageImpl : LanguageBase, IEditorLanguage + { + #region Implementation of IEditorLanguage + + public string SettingsDestinationEditor { get; } + public string EditorAlignBottom { get; } + public string EditorAlignCenter { get; } + public string EditorAlignHorizontal { get; } + public string EditorAlignLeft { get; } + public string EditorAlignMiddle { get; } + public string EditorAlignRight { get; } + public string EditorAlignTop { get; } + public string EditorAlignVertical { get; } + public string EditorArrange { get; } + public string EditorArrowheads { get; } + public string EditorArrowheadsBoth { get; } + public string EditorArrowheadsEnd { get; } + public string EditorArrowheadsNone { get; } + public string EditorArrowheadsStart { get; } + public string EditorAutocrop { get; } + public string EditorBackcolor { get; } + public string EditorBlurRadius { get; } + public string EditorBold { get; } + public string EditorBorder { get; } + public string EditorBrightness { get; } + public string EditorCancel { get; } + public string EditorClipboardfailed { get; } + public string EditorClose { get; } + public string EditorCloseOnSave { get; } + public string EditorCloseOnSaveTitle { get; } + public string EditorConfirm { get; } + public string EditorCopyimagetoclipboard { get; } + public string EditorCopypathtoclipboard { get; } + public string EditorCopytoclipboard { get; } + public string EditorCrop { get; } + public string EditorCursortool { get; } + public string EditorCuttoclipboard { get; } + public string EditorDeleteelement { get; } + public string EditorDownonelevel { get; } + public string EditorDowntobottom { get; } + public string EditorDrawarrow { get; } + public string EditorDrawellipse { get; } + public string EditorDrawfreehand { get; } + public string EditorDrawhighlighter { get; } + public string EditorDrawline { get; } + public string EditorDrawrectangle { get; } + public string EditorDrawtextbox { get; } + public string EditorDuplicate { get; } + public string EditorEdit { get; } + public string EditorEffects { get; } + public string EditorEmail { get; } + public string EditorFile { get; } + public string EditorFontsize { get; } + public string EditorForecolor { get; } + public string EditorGrayscale { get; } + public string EditorHighlightArea { get; } + public string EditorHighlightGrayscale { get; } + public string EditorHighlightMagnify { get; } + public string EditorHighlightMode { get; } + public string EditorHighlightText { get; } + public string EditorImagesaved { get; } + public string EditorInsertwindow { get; } + public string EditorItalic { get; } + public string EditorLoadObjects { get; } + public string EditorMagnificationFactor { get; } + public string EditorMatchCaptureSize { get; } + public string EditorObfuscate { get; } + public string EditorObfuscateBlur { get; } + public string EditorObfuscateMode { get; } + public string EditorObfuscatePixelize { get; } + public string EditorObject { get; } + public string EditorOpendirinexplorer { get; } + public string EditorPastefromclipboard { get; } + public string EditorPixelSize { get; } + public string EditorPreviewQuality { get; } + public string EditorPrint { get; } + public string EditorRedo { get; } + public string EditorResetsize { get; } + public string EditorResizePercent { get; } + public string EditorResizePixel { get; } + public string EditorSave { get; } + public string EditorSaveas { get; } + public string EditorSaveObjects { get; } + public string EditorSelectall { get; } + public string EditorSenttoprinter { get; } + public string EditorShadow { get; } + public string EditorStoredtoclipboard { get; } + public string EditorThickness { get; } + public string EditorTitle { get; } + public string EditorTornEdge { get; } + public string EditorUndo { get; } + public string EditorUponelevel { get; } + public string EditorUptotop { get; } + + #endregion + } +} diff --git a/src/Greenshot.Addon.LegacyEditor/Controls/ColorDialog.Designer.cs b/src/Greenshot.Addon.LegacyEditor/Controls/ColorDialog.Designer.cs index 7ff1e7644..4632cf023 100644 --- a/src/Greenshot.Addon.LegacyEditor/Controls/ColorDialog.Designer.cs +++ b/src/Greenshot.Addon.LegacyEditor/Controls/ColorDialog.Designer.cs @@ -20,6 +20,7 @@ */ using Greenshot.Addons.Controls; +using Greenshot.Addons.Resources; namespace Greenshot.Addon.LegacyEditor.Controls { public partial class ColorDialog { @@ -49,7 +50,6 @@ namespace Greenshot.Addon.LegacyEditor.Controls { /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ColorDialog)); this.btnTransparent = new Greenshot.Addons.Controls.GreenshotButton(); this.colorPanel = new System.Windows.Forms.Panel(); this.labelHtmlColor = new Greenshot.Addons.Controls.GreenshotLabel(); @@ -233,7 +233,7 @@ namespace Greenshot.Addon.LegacyEditor.Controls { // this.pipette.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.pipette.Cursor = System.Windows.Forms.Cursors.Arrow; - this.pipette.Image = ((System.Drawing.Image)(resources.GetObject("pipette.Image"))); + this.pipette.Image = GreenshotResources.Instance.GetBitmap("pipette.Image", GetType()); this.pipette.Location = new System.Drawing.Point(510, 56); this.pipette.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); this.pipette.Name = "pipette"; @@ -278,7 +278,7 @@ namespace Greenshot.Addon.LegacyEditor.Controls { this.Controls.Add(this.colorPanel); this.Controls.Add(this.btnTransparent); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Icon = GreenshotResources.Instance.GetGreenshotIcon(); this.LanguageKey = "colorpicker_title"; this.Margin = new System.Windows.Forms.Padding(6); this.MaximizeBox = false; diff --git a/src/Greenshot.Addon.LegacyEditor/Controls/ColorDialog.resx b/src/Greenshot.Addon.LegacyEditor/Controls/ColorDialog.resx deleted file mode 100644 index c94cb7263..000000000 --- a/src/Greenshot.Addon.LegacyEditor/Controls/ColorDialog.resx +++ /dev/null @@ -1,392 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - - 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 - AgAAAAAAAAAAAAACAAAAAAAAAAACAgAAIUpKSkpFAgAAAAAAAAAASkpDAAAMFQURBQAAAAACAAAAAgAA - AAAAAAAAAjBKSTACL0pKSkpKCQAAAAAAAAAASkohAAAAEUFKSS8CAAAAAAAAAAAAAAAAAAAAKkpKSkoo - HEpKSkpDAAAAAAAAAAAALhcAAAAAPUpKSkoeAAAAAAIAAAAAAh4zLAwAQUpKSko+ATFKSkYVAAAAAAAA - AAAACS09LgkHSkpKSkozAAAAAAAAAAAAL0pKSkYJOkpKSko5AAANFAMAAAAAAAAAAAAAPkpKSkEHRkpK - SkopAAIAAAwXBQIHSUpKSkojGEpKSkkXAAAAAAAAAAAAAAAAAAAASkpKSkoZHkpKSkMFAAAAKUpKSR4M - SkpKSkoqABAtLw8AAAAAAAAAAAAAAAAAAAAASkpKSkoaABQpIQcAAAATSkpKSkkMPUpKSkoUAAAAAAAA - AAAAAAAAAAAAAAAAAAAAQ0pKSkYHAAAAGz5DKwceSkpKSkoXDDlKQx4AAAAAAAAAAAAAAAAAAAAAAAAA - AAAAEThGORMAAAAXSkpKSjAUSkpKSkoMAAICAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx - SkpKSkkCMEpKSSoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwSkpKSkUCABUhDgAC - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPSkpKSisCAAAAAAAAAQAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFTg9JgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAgAAAgABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApEIAAAAAAACkQgAAAAAAAKRCAAAAAAAApEIA - AAAAAACkQgAAAAAAAKRCAAAAAAAApEIAAAAAAACkQgAAAAAAAKRCAAAAAAAApEIAAAAAAACkQgAAAAAA - AKRCAAAAAAAApEIAAAAAAACkQgAAAAAAAKRCAAAAAAAApEIAAAAAAACkQgAAAAAAAKRCAAAAAAAApEIA - AAAAAACkQgAAAAAAAKRCAAAAAAAApEIAAAAAAACkQgAAAAAAAKRCAAAAAAAApEIAAAAAAACkQgAAAAAA - AKRCAAAAAAAApEIAAAAAAACkQgAAAAAAAKRCAAAAAAAApEIAAAAAAACkQgAAAAAAAKRCAAAAAAAApEIA - AAAAAACkQgAAAAAAAKRCAAAAAAAApEIAAAAAAACkQgAAAAAAAKRCAAAAAAAApEIAAAAAAACkQgAAAAAA - AKRCAAAAAAAApEIAAAAAAACkQgAAAAAAAKRCAAAAAAAApEIAAAAAAACkQgAAAAAAAKRCKAAAACAAAABA - AAAAAQAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADw9PQA6QT4AOkQ/ADlGQAA3TUMAN05EADhJQQA4 - TEMANVFFADRVRgAzWkgANFhIADJdSQAvZk0ALmlOADFhSgAwY0wAMGRMAC1tUAArc1IALHJRACp1UgAq - d1QAKXlUACh9VgAngFcAJoJYACWGWgAliVsAJItcACOOXAAkjFwAIZJeACGVXwAfmWEAHpxiAB2fZAAg - lmAAIJhhAByhZAAbp2cAHKVmABuoZwAaqWgAF7JrABezbAAXtWwAGLBqABa4bQAUvXAADs52ABLBcQAR - xXMAEch0AA7QdwAN0ngADNV5AAvaegAK3HwACeB9AAjlfwAH5oAABumBAAPyhQAE8YQAA/SFAAH4hwAB - +ogAAP6JAACwNgAAz0AAAPBKABH/WwAx/3EAUf+HAHH/nQCR/7IAsf/JANH/3wD///8AAAAAAAIvAAAE - UAAABnAAAAiQAAAKsAAAC88AAA7wAAAg/xIAPf8xAFv/UQB5/3EAmP+RALX/sQDU/9EA////AAAAAAAU - LwAAIlAAADBwAAA9kAAATLAAAFnPAABn8AAAeP8RAIr/MQCc/1EArv9xAMD/kQDS/7EA5P/RAP///wAA - AAAAJi8AAEBQAABacAAAdJAAAI6wAACpzwAAwvAAANH/EQDY/zEA3v9RAOP/cQDp/5EA7/+xAPb/0QD/ - //8AAAAAAC8mAABQQQAAcFsAAJB0AACwjgAAz6kAAPDDAAD/0hEA/9gxAP/dUQD/5HEA/+qRAP/wsQD/ - 9tEA////AAAAAAAvFAAAUCIAAHAwAACQPgAAsE0AAM9bAADwaQAA/3kRAP+KMQD/nVEA/69xAP/BkQD/ - 0rEA/+XRAP///wAAAAAALwMAAFAEAABwBgAAkAkAALAKAADPDAAA8A4AAP8gEgD/PjEA/1xRAP96cQD/ - l5EA/7axAP/U0QD///8AAAAAAC8ADgBQABcAcAAhAJAAKwCwADYAzwBAAPAASQD/EVoA/zFwAP9RhgD/ - cZwA/5GyAP+xyAD/0d8A////AAAAAAAvACAAUAA2AHAATACQAGIAsAB4AM8AjgDwAKQA/xGzAP8xvgD/ - UccA/3HRAP+R3AD/seUA/9HwAP///wAAAAAALAAvAEsAUABpAHAAhwCQAKUAsADEAM8A4QDwAPAR/wDy - Mf8A9FH/APZx/wD3kf8A+bH/APvR/wD///8AAAAAABsALwAtAFAAPwBwAFIAkABjALAAdgDPAIgA8ACZ - Ef8ApjH/ALRR/wDCcf8Az5H/ANyx/wDr0f8A////AAAAAAAIAC8ADgBQABUAcAAbAJAAIQCwACYAzwAs - APAAPhH/AFgx/wBxUf8AjHH/AKaR/wC/sf8A2tH/AP///wAAABg2KgdEQ0M2DzY4EgAANkRDHDpEQzkA - AAAAAAAAAAEIREREITZDQyYAAAAAAAdDREQ1ETg4EQAAAAAAAAAAOxJEREQpBx8WAAAAAAAAADpERCEA - AB81KQAAAAAAAABEGy1EOwUAAAAAAAAAAAAABx8YDAARQ0REGQAAAAAAAEQNAAIAAAAAAAAAAAAAAAAA - Cz5DORZDQ0MfAAAAAAAAGAAAAAAAAAAAAAAAAAAfKgsmQ0NDFjFDOAcAAAAAAAA+QBsAAAAAAAAAAAAA - JkRDQBlDQ0MLAAIAAAAAAAAAAEREPwAAAAAAAAAAAAAwQ0NDBRwuFAAAAAAAAAAAAAAAREQ+AAAAAAAA - AAAAABRDQzEAAAAAAAAAAAAAAAAAAAA0Ng4AAAAAAAAAAAAAAAcPAAAAAAAAAAAAAAAAAAAAAAAcOC4C - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACURERCYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS - REREKQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsrQzkFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAADQAAIS0RAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABACFEREEDAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAEMcLURERAsAAAAAAAAAAAAAAAAAAAACJi4LAAAAAAAAREENQUQ0AAAAAAAAAAAAAAAAAAIA - ACpERDwAAAAAAABEPAAHER8YAAAAAAAAAAAAAAAYQUEXNURERAIAAAAAADURAAA2REQjAAAAAAAABx8W - ADxERDsUQ0QvAAAAAAAAHjsxB0RERDYAAAAAAAA6REQhOERENgAHCwAAAAAAAABEREQjNUREHgAAJjsw - CERERDULMzELAAAAAAAAAAAAAERERCQCFhYUAw9EREQhNkRDGwAAAAAAAAAAAAAAAAAAJEA1BwAIQEQ+ - FERERCYCFxEAAAAAAAAAAAAAAAAAAAAAAAAAACFEREQZKUA1AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - DUREQwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCcNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 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 - - - \ No newline at end of file diff --git a/src/Greenshot.Addon.LegacyEditor/Controls/CustomToolStripProfessionalRenderer.cs b/src/Greenshot.Addon.LegacyEditor/Controls/CustomToolStripProfessionalRenderer.cs index ff59894e6..fd68d0e34 100644 --- a/src/Greenshot.Addon.LegacyEditor/Controls/CustomToolStripProfessionalRenderer.cs +++ b/src/Greenshot.Addon.LegacyEditor/Controls/CustomToolStripProfessionalRenderer.cs @@ -63,7 +63,7 @@ namespace Greenshot.Addon.LegacyEditor.Controls { int halfHeight = e.ArrowRectangle.Height / 2; int halfWidth = e.ArrowRectangle.Width / 2; - Point middle = new Point(dropDownRect.Left + halfWidth, dropDownRect.Top + halfHeight); + var middle = new Point(dropDownRect.Left + halfWidth, dropDownRect.Top + halfHeight); Point[] arrow; diff --git a/src/Greenshot.Addon.LegacyEditor/Controls/Pipette.cs b/src/Greenshot.Addon.LegacyEditor/Controls/Pipette.cs index dce9590ae..48431bfe0 100644 --- a/src/Greenshot.Addon.LegacyEditor/Controls/Pipette.cs +++ b/src/Greenshot.Addon.LegacyEditor/Controls/Pipette.cs @@ -33,6 +33,7 @@ using Dapplo.Windows.Icons.SafeHandles; using Dapplo.Windows.Messages; using Dapplo.Windows.User32; using Greenshot.Addons.Controls; +using Greenshot.Addons.Resources; #endregion @@ -54,7 +55,7 @@ namespace Greenshot.Addon.LegacyEditor.Controls { BorderStyle = BorderStyle.FixedSingle; _dragging = false; - _image = (Bitmap) new ComponentResourceManager(typeof(ColorDialog)).GetObject("pipette.Image"); + _image = GreenshotResources.Instance.GetBitmap("pipette.Image", GetType()); Image = _image; _cursor = CreateCursor(_image, 1, 14); _movableShowColorForm = new MovableShowColorForm(); @@ -91,7 +92,7 @@ namespace Greenshot.Addon.LegacyEditor.Controls public event EventHandler PipetteUsed; /// - /// Create a cursor from the supplied bitmap & hotspot coordinates + /// Create a cursor from the supplied bitmap and hotspot coordinates /// /// Bitmap to create an icon from /// Hotspot X coordinate diff --git a/src/Greenshot.Addon.LegacyEditor/Drawing/DrawableContainer.cs b/src/Greenshot.Addon.LegacyEditor/Drawing/DrawableContainer.cs index 3c6854e1d..86e64c120 100644 --- a/src/Greenshot.Addon.LegacyEditor/Drawing/DrawableContainer.cs +++ b/src/Greenshot.Addon.LegacyEditor/Drawing/DrawableContainer.cs @@ -30,10 +30,10 @@ using System.Drawing; using System.Drawing.Drawing2D; using System.Runtime.Serialization; using System.Windows.Forms; -using Dapplo.Ini; using Dapplo.Log; using Dapplo.Windows.Common.Extensions; using Dapplo.Windows.Common.Structs; +using Greenshot.Addon.LegacyEditor.Configuration.Impl; using Greenshot.Addon.LegacyEditor.Drawing.Adorners; using Greenshot.Addon.LegacyEditor.Drawing.Fields; using Greenshot.Addon.LegacyEditor.Drawing.Filters; @@ -59,7 +59,8 @@ namespace Greenshot.Addon.LegacyEditor.Drawing private const int M11 = 0; private const int M22 = 3; private static readonly LogSource Log = new LogSource(); - protected static readonly IEditorConfiguration EditorConfig = IniConfig.Current.Get(); + // TODO: Solve, was static reference! + protected static readonly IEditorConfiguration EditorConfig = new EditorConfigurationImpl(); /// /// List of available Adorners diff --git a/src/Greenshot.Addon.LegacyEditor/Drawing/DrawableContainerList.cs b/src/Greenshot.Addon.LegacyEditor/Drawing/DrawableContainerList.cs index dfdf5475b..2a8b14150 100644 --- a/src/Greenshot.Addon.LegacyEditor/Drawing/DrawableContainerList.cs +++ b/src/Greenshot.Addon.LegacyEditor/Drawing/DrawableContainerList.cs @@ -34,6 +34,7 @@ using Greenshot.Addon.LegacyEditor.Memento; using Greenshot.Addons.Core; using Greenshot.Addons.Interfaces; using Greenshot.Addons.Interfaces.Drawing; +using Greenshot.Addons.Resources; namespace Greenshot.Addon.LegacyEditor.Drawing { /// @@ -42,8 +43,6 @@ namespace Greenshot.Addon.LegacyEditor.Drawing { [Serializable] public class DrawableContainerList : List, IDrawableContainerList { - private static readonly ComponentResourceManager EditorFormResources = new ComponentResourceManager(typeof(ImageEditorForm)); - public Guid ParentID { get; private set; @@ -468,7 +467,7 @@ namespace Greenshot.Addon.LegacyEditor.Drawing { // Copy item = new ToolStripMenuItem(editorLanguage.EditorCopytoclipboard) { - Image = (Image) EditorFormResources.GetObject("copyToolStripMenuItem.Image") + Image = GreenshotResources.Instance.GetBitmap("copyToolStripMenuItem.Image", GetType()) }; item.Click += (sender, args) => ClipboardHelper.SetClipboardData(typeof(IDrawableContainerList), this); menu.Items.Add(item); @@ -476,7 +475,7 @@ namespace Greenshot.Addon.LegacyEditor.Drawing { // Cut item = new ToolStripMenuItem(editorLanguage.EditorCuttoclipboard) { - Image = (Image) EditorFormResources.GetObject("btnCut.Image") + Image = GreenshotResources.Instance.GetBitmap("btnCut.Image", GetType()) }; item.Click += (sender, args) => { @@ -488,7 +487,7 @@ namespace Greenshot.Addon.LegacyEditor.Drawing { // Delete item = new ToolStripMenuItem(editorLanguage.EditorDeleteelement) { - Image = (Image) EditorFormResources.GetObject("removeObjectToolStripMenuItem.Image") + Image = GreenshotResources.Instance.GetBitmap("removeObjectToolStripMenuItem.Image", GetType()) }; item.Click += (sender, args) => surface.RemoveElements(this); menu.Items.Add(item); @@ -522,7 +521,7 @@ namespace Greenshot.Addon.LegacyEditor.Drawing { continue; } - Size defaultSize = container.DefaultSize; + var defaultSize = container.DefaultSize; container.MakeBoundsChangeUndoable(false); container.Width = defaultSize.Width; container.Height = defaultSize.Height; diff --git a/src/Greenshot.Addon.LegacyEditor/Drawing/Fields/AbstractFieldHolder.cs b/src/Greenshot.Addon.LegacyEditor/Drawing/Fields/AbstractFieldHolder.cs index e2895a3ae..0e44a9437 100644 --- a/src/Greenshot.Addon.LegacyEditor/Drawing/Fields/AbstractFieldHolder.cs +++ b/src/Greenshot.Addon.LegacyEditor/Drawing/Fields/AbstractFieldHolder.cs @@ -24,8 +24,8 @@ using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Runtime.Serialization; -using Dapplo.Ini; using Dapplo.Log; +using Greenshot.Addon.LegacyEditor.Configuration.Impl; using Greenshot.Addons.Interfaces.Drawing; namespace Greenshot.Addon.LegacyEditor.Drawing.Fields @@ -37,8 +37,10 @@ namespace Greenshot.Addon.LegacyEditor.Drawing.Fields public abstract class AbstractFieldHolder : IFieldHolder { private static readonly LogSource Log = new LogSource(); - private static readonly IEditorConfiguration EditorConfig = IniConfig.Current.Get(); - [NonSerialized] + // TODO: Solve, was static reference! + private static readonly IEditorConfiguration EditorConfig = new EditorConfigurationImpl(); + + [NonSerialized] private readonly IDictionary _handlers = new Dictionary(); /// diff --git a/src/Greenshot.Addon.LegacyEditor/Drawing/Fields/Field.cs b/src/Greenshot.Addon.LegacyEditor/Drawing/Fields/Field.cs index e0f028c2e..335b4bd00 100644 --- a/src/Greenshot.Addon.LegacyEditor/Drawing/Fields/Field.cs +++ b/src/Greenshot.Addon.LegacyEditor/Drawing/Fields/Field.cs @@ -119,8 +119,7 @@ namespace Greenshot.Addon.LegacyEditor.Drawing.Fields public override bool Equals(object obj) { - var other = obj as Field; - if (other == null) + if (!(obj is Field other)) { return false; } diff --git a/src/Greenshot.Addon.LegacyEditor/Drawing/Fields/FieldAggregator.cs b/src/Greenshot.Addon.LegacyEditor/Drawing/Fields/FieldAggregator.cs index 194caee41..7e4773948 100644 --- a/src/Greenshot.Addon.LegacyEditor/Drawing/Fields/FieldAggregator.cs +++ b/src/Greenshot.Addon.LegacyEditor/Drawing/Fields/FieldAggregator.cs @@ -27,7 +27,7 @@ using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; -using Dapplo.Ini; +using Greenshot.Addon.LegacyEditor.Configuration.Impl; using Greenshot.Addons.Interfaces; using Greenshot.Addons.Interfaces.Drawing; @@ -49,7 +49,8 @@ namespace Greenshot.Addon.LegacyEditor.Drawing.Fields [Serializable] public sealed class FieldAggregator : AbstractFieldHolder { - private static readonly IEditorConfiguration EditorConfig = IniConfig.Current.Get(); + // TODO: Solve, was static reference! + private static readonly IEditorConfiguration EditorConfig = new EditorConfigurationImpl(); private readonly IDrawableContainerList _boundContainers; private bool _internalUpdateRunning; diff --git a/src/Greenshot.Addon.LegacyEditor/Drawing/Fields/IFieldHolder.cs b/src/Greenshot.Addon.LegacyEditor/Drawing/Fields/IFieldHolder.cs deleted file mode 100644 index 063ca48d7..000000000 --- a/src/Greenshot.Addon.LegacyEditor/Drawing/Fields/IFieldHolder.cs +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Greenshot - a free and open source screenshot tool - * Copyright (C) 2007-2015 Thomas Braun, Jens Klingen, Robin Krom - * - * For more information see: http://getgreenshot.org/ - * The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -using System.Collections.Generic; - -namespace Greenshot.Drawing.Fields { - /// - /// Any element holding Fields must provide access to it. - /// AbstractFieldHolder is the basic implementation. - /// If you need the fieldHolder to have child fieldHolders, - /// you should consider using IFieldHolderWithChildren. - /// - public interface IFieldHolder { - - event FieldChangedEventHandler FieldChanged; - - void AddField(Field field); - void RemoveField(Field field); - List GetFields(); - Field GetField(FieldType fieldType); - bool HasField(FieldType fieldType); - void SetFieldValue(FieldType fieldType, object value); - } - - /// - /// Extended fieldHolder which has fieldHolder children. - /// Implementations should pass field values to and from - /// their children. - /// AbstractFieldHolderWithChildren is the basic implementation. - /// - public interface IFieldHolderWithChildren : IFieldHolder { - void AddChild(IFieldHolder fieldHolder); - void RemoveChild(IFieldHolder fieldHolder); - } -} diff --git a/src/Greenshot.Addon.LegacyEditor/Drawing/Filters/AbstractFilter.cs b/src/Greenshot.Addon.LegacyEditor/Drawing/Filters/AbstractFilter.cs index be486e074..b2ae8feed 100644 --- a/src/Greenshot.Addon.LegacyEditor/Drawing/Filters/AbstractFilter.cs +++ b/src/Greenshot.Addon.LegacyEditor/Drawing/Filters/AbstractFilter.cs @@ -75,11 +75,6 @@ namespace Greenshot.Addon.LegacyEditor.Drawing.Filters set { parent = value; } } - public DrawableContainer GetParent() - { - return parent; - } - public abstract void Apply(Graphics graphics, Bitmap applyBitmap, NativeRect rect, RenderMode renderMode); protected void OnPropertyChanged(string propertyName) diff --git a/src/Greenshot.Addon.LegacyEditor/Drawing/Filters/IFilter.cs b/src/Greenshot.Addon.LegacyEditor/Drawing/Filters/IFilter.cs index 6160f0ede..03a322691 100644 --- a/src/Greenshot.Addon.LegacyEditor/Drawing/Filters/IFilter.cs +++ b/src/Greenshot.Addon.LegacyEditor/Drawing/Filters/IFilter.cs @@ -32,11 +32,28 @@ using Greenshot.Addons.Interfaces.Drawing; namespace Greenshot.Addon.LegacyEditor.Drawing.Filters { + /// + /// This defines the interface for all filters + /// public interface IFilter : INotifyPropertyChanged, IFieldHolder { + /// + /// Filters are childen of DrawableContainers, this is the parent + /// DrawableContainer Parent { get; set; } + + /// + /// is the filtered area inverted? + /// bool Invert { get; set; } - void Apply(Graphics graphics, Bitmap bmp, NativeRect rect, RenderMode renderMode); - DrawableContainer GetParent(); - } + + /// + /// Apply this filter + /// + /// Graphics to use + /// Bitmap to apply to + /// NativeRect with the area + /// RenderMode to use + void Apply(Graphics graphics, Bitmap bmp, NativeRect rect, RenderMode renderMode); + } } \ No newline at end of file diff --git a/src/Greenshot.Addon.LegacyEditor/Drawing/FreehandContainer.cs b/src/Greenshot.Addon.LegacyEditor/Drawing/FreehandContainer.cs index 5e8e71bee..e102a32a5 100644 --- a/src/Greenshot.Addon.LegacyEditor/Drawing/FreehandContainer.cs +++ b/src/Greenshot.Addon.LegacyEditor/Drawing/FreehandContainer.cs @@ -184,7 +184,7 @@ namespace Greenshot.Addon.LegacyEditor.Drawing { graphics.PixelOffsetMode = PixelOffsetMode.HighQuality; int lineThickness = GetFieldValueAsInt(FieldTypes.LINE_THICKNESS); - Color lineColor = GetFieldValueAsColor(FieldTypes.LINE_COLOR); + var lineColor = GetFieldValueAsColor(FieldTypes.LINE_COLOR); using (var pen = new Pen(lineColor)) { pen.Width = lineThickness; if (!(pen.Width > 0)) @@ -199,7 +199,7 @@ namespace Greenshot.Addon.LegacyEditor.Drawing { graphics.TranslateTransform(Left, Top); lock (_freehandPathLock) { - if (isRecalculated && Selected && renderMode == RenderMode.EDIT) + if (isRecalculated && Selected && renderMode == RenderMode.Edit) { DrawSelectionBorder(graphics, pen, freehandPath); } @@ -257,8 +257,8 @@ namespace Greenshot.Addon.LegacyEditor.Drawing { { return false; } - var other = obj as FreehandContainer; - if (other != null && Equals(freehandPath, other.freehandPath)) { + + if (obj is FreehandContainer other && Equals(freehandPath, other.freehandPath)) { ret = true; } return ret; diff --git a/src/Greenshot.Addon.LegacyEditor/Drawing/RectangleContainer.cs b/src/Greenshot.Addon.LegacyEditor/Drawing/RectangleContainer.cs index 009fa0e1a..ef54e388d 100644 --- a/src/Greenshot.Addon.LegacyEditor/Drawing/RectangleContainer.cs +++ b/src/Greenshot.Addon.LegacyEditor/Drawing/RectangleContainer.cs @@ -63,8 +63,8 @@ namespace Greenshot.Addon.LegacyEditor.Drawing { public override void Draw(Graphics graphics, RenderMode rm) { int lineThickness = GetFieldValueAsInt(FieldTypes.LINE_THICKNESS); - Color lineColor = GetFieldValueAsColor(FieldTypes.LINE_COLOR, Color.Red); - Color fillColor = GetFieldValueAsColor(FieldTypes.FILL_COLOR, Color.Transparent); + var lineColor = GetFieldValueAsColor(FieldTypes.LINE_COLOR, Color.Red); + var fillColor = GetFieldValueAsColor(FieldTypes.FILL_COLOR, Color.Transparent); bool shadow = GetFieldValueAsBool(FieldTypes.SHADOW); var rect = new NativeRect(Left, Top, Width, Height).Normalize(); @@ -95,7 +95,7 @@ namespace Greenshot.Addon.LegacyEditor.Drawing { int steps = 5; int currentStep = lineVisible ? 1 : 0; while (currentStep <= steps) { - using (Pen shadowPen = new Pen(Color.FromArgb(alpha, 100, 100, 100))) { + using (var shadowPen = new Pen(Color.FromArgb(alpha, 100, 100, 100))) { shadowPen.Width = lineVisible ? lineThickness : 1; var shadowRect = new NativeRect( rect.Left + currentStep, @@ -118,7 +118,7 @@ namespace Greenshot.Addon.LegacyEditor.Drawing { graphics.SmoothingMode = SmoothingMode.HighSpeed; if (lineVisible) { - using (Pen pen = new Pen(lineColor, lineThickness)) { + using (var pen = new Pen(lineColor, lineThickness)) { graphics.DrawRectangle(pen, rect); } } @@ -127,7 +127,7 @@ namespace Greenshot.Addon.LegacyEditor.Drawing { public override bool ClickableAt(int x, int y) { var rect = new NativeRect(Left, Top, Width, Height).Normalize(); int lineThickness = GetFieldValueAsInt(FieldTypes.LINE_THICKNESS) + 10; - Color fillColor = GetFieldValueAsColor(FieldTypes.FILL_COLOR); + var fillColor = GetFieldValueAsColor(FieldTypes.FILL_COLOR); return RectangleClickableAt(rect, lineThickness, fillColor, x, y); } @@ -144,8 +144,8 @@ namespace Greenshot.Addon.LegacyEditor.Drawing { // check the rest of the lines if (lineThickness > 0) { - using (Pen pen = new Pen(Color.White, lineThickness)) { - using (GraphicsPath path = new GraphicsPath()) { + using (var pen = new Pen(Color.White, lineThickness)) { + using (var path = new GraphicsPath()) { path.AddRectangle(rect); return path.IsOutlineVisible(x, y, pen); } diff --git a/src/Greenshot.Addon.LegacyEditor/Drawing/SpeechbubbleContainer.cs b/src/Greenshot.Addon.LegacyEditor/Drawing/SpeechbubbleContainer.cs index 15fed8338..3064769ba 100644 --- a/src/Greenshot.Addon.LegacyEditor/Drawing/SpeechbubbleContainer.cs +++ b/src/Greenshot.Addon.LegacyEditor/Drawing/SpeechbubbleContainer.cs @@ -229,7 +229,7 @@ namespace Greenshot.Addon.LegacyEditor.Drawing var lineVisible = lineThickness > 0 && Colors.IsVisible(lineColor); var rect = new NativeRect(Left, Top, Width, Height).Normalize(); - if (Selected && renderMode == RenderMode.EDIT) + if (Selected && renderMode == RenderMode.Edit) { DrawSelectionBorder(graphics, rect); } diff --git a/src/Greenshot.Addon.LegacyEditor/Drawing/Surface.cs b/src/Greenshot.Addon.LegacyEditor/Drawing/Surface.cs index ff8c13b09..577677fdc 100644 --- a/src/Greenshot.Addon.LegacyEditor/Drawing/Surface.cs +++ b/src/Greenshot.Addon.LegacyEditor/Drawing/Surface.cs @@ -33,12 +33,12 @@ using System.IO; using System.Runtime.Serialization.Formatters.Binary; using System.Windows.Forms; using Dapplo.HttpExtensions; -using Dapplo.Ini; using Dapplo.Log; using Dapplo.Windows.Common.Extensions; using Dapplo.Windows.Common.Structs; using Greenshot.Addon.LegacyEditor.Drawing.Fields; using Greenshot.Addon.LegacyEditor.Memento; +using Greenshot.Addons.Config.Impl; using Greenshot.Addons.Controls; using Greenshot.Addons.Core; using Greenshot.Addons.Interfaces; @@ -57,12 +57,13 @@ namespace Greenshot.Addon.LegacyEditor.Drawing public sealed class Surface : Control, ISurface, INotifyPropertyChanged { private static readonly LogSource Log = new LogSource(); + // TODO: Solve, was static reference! + private static readonly ICoreConfiguration conf = new CoreConfigurationImpl(); - /// - /// The number of Surfaces in existance - /// - public static int Count { get; private set; } - private static readonly ICoreConfiguration conf = IniConfig.Current.Get(); + /// + /// The number of Surfaces in existance + /// + public static int Count { get; private set; } /// /// all elements on the surface, needed with serialization @@ -596,7 +597,7 @@ namespace Greenshot.Addon.LegacyEditor.Drawing /// public Bitmap GetBitmapForExport() { - return GetBitmap(RenderMode.EXPORT); + return GetBitmap(RenderMode.Export); } /// @@ -1645,7 +1646,7 @@ namespace Greenshot.Addon.LegacyEditor.Drawing DrawBackground(graphics, clipRectangle); graphics.DrawImage(Screenshot, clipRectangle, clipRectangle, GraphicsUnit.Pixel); graphics.SetClip(targetGraphics); - _elements.Draw(graphics, _buffer, RenderMode.EDIT, clipRectangle); + _elements.Draw(graphics, _buffer, RenderMode.Edit, clipRectangle); } targetGraphics.DrawImage(_buffer, clipRectangle, clipRectangle, GraphicsUnit.Pixel); } @@ -1653,7 +1654,7 @@ namespace Greenshot.Addon.LegacyEditor.Drawing { DrawBackground(targetGraphics, clipRectangle); targetGraphics.DrawImage(Screenshot, clipRectangle, clipRectangle, GraphicsUnit.Pixel); - _elements.Draw(targetGraphics, null, RenderMode.EDIT, clipRectangle); + _elements.Draw(targetGraphics, null, RenderMode.Edit, clipRectangle); } // No clipping for the adorners diff --git a/src/Greenshot.Addon.LegacyEditor/Drawing/TextContainer.cs b/src/Greenshot.Addon.LegacyEditor/Drawing/TextContainer.cs index 8b8bad73a..6b494f4c5 100644 --- a/src/Greenshot.Addon.LegacyEditor/Drawing/TextContainer.cs +++ b/src/Greenshot.Addon.LegacyEditor/Drawing/TextContainer.cs @@ -168,7 +168,7 @@ namespace Greenshot.Addon.LegacyEditor.Drawing public void FitToText() { - Size textSize = TextRenderer.MeasureText(text, _font); + var textSize = TextRenderer.MeasureText(text, _font); int lineThickness = GetFieldValueAsInt(FieldTypes.LINE_THICKNESS); Width = textSize.Width + lineThickness; Height = textSize.Height + lineThickness; @@ -288,7 +288,7 @@ namespace Greenshot.Addon.LegacyEditor.Drawing { return; } - Color lc = GetFieldValueAsColor(FieldTypes.LINE_COLOR); + var lc = GetFieldValueAsColor(FieldTypes.LINE_COLOR); if (lc.R > 203 && lc.G > 203 && lc.B > 203) { _textBox.BackColor = Color.FromArgb(51, 51, 51); @@ -331,7 +331,7 @@ namespace Greenshot.Addon.LegacyEditor.Drawing private Font CreateFont(string fontFamilyName, bool fontBold, bool fontItalic, float fontSize) { - FontStyle fontStyle = FontStyle.Regular; + var fontStyle = FontStyle.Regular; bool hasStyle = false; using (var fontFamily = new FontFamily(fontFamilyName)) @@ -444,7 +444,7 @@ namespace Greenshot.Addon.LegacyEditor.Drawing lineWidth = 1; correction = -1; } - NativeRect absRectangle = new NativeRect(Left, Top, Width, Height).Normalize(); + var absRectangle = new NativeRect(Left, Top, Width, Height).Normalize(); _textBox.Left = absRectangle.Left + lineWidth; _textBox.Top = absRectangle.Top + lineWidth; if (lineThickness <= 1) @@ -534,8 +534,8 @@ namespace Greenshot.Addon.LegacyEditor.Drawing graphics.PixelOffsetMode = PixelOffsetMode.None; graphics.TextRenderingHint = TextRenderingHint.SystemDefault; - NativeRect rect = new NativeRect(Left, Top, Width, Height).Normalize(); - if (Selected && rm == RenderMode.EDIT) + var rect = new NativeRect(Left, Top, Width, Height).Normalize(); + if (Selected && rm == RenderMode.Edit) { DrawSelectionBorder(graphics, rect); } @@ -547,9 +547,9 @@ namespace Greenshot.Addon.LegacyEditor.Drawing // we only draw the shadow if there is no background bool shadow = GetFieldValueAsBool(FieldTypes.SHADOW); - Color fillColor = GetFieldValueAsColor(FieldTypes.FILL_COLOR); + var fillColor = GetFieldValueAsColor(FieldTypes.FILL_COLOR); int lineThickness = GetFieldValueAsInt(FieldTypes.LINE_THICKNESS); - Color lineColor = GetFieldValueAsColor(FieldTypes.LINE_COLOR); + var lineColor = GetFieldValueAsColor(FieldTypes.LINE_COLOR); bool drawShadow = shadow && (fillColor == Color.Transparent || fillColor == Color.Empty); DrawText(graphics, rect, lineThickness, lineColor, drawShadow, _stringFormat, text, _font); diff --git a/src/Greenshot.Addon.LegacyEditor/EditorAddonModule.cs b/src/Greenshot.Addon.LegacyEditor/EditorAddonModule.cs index ad5b1fe35..37fdb897d 100644 --- a/src/Greenshot.Addon.LegacyEditor/EditorAddonModule.cs +++ b/src/Greenshot.Addon.LegacyEditor/EditorAddonModule.cs @@ -24,8 +24,9 @@ using Autofac; using Dapplo.Addons; using Dapplo.CaliburnMicro.Configuration; -using Dapplo.Ini; -using Dapplo.Language; +using Dapplo.Config.Ini; +using Dapplo.Config.Language; +using Greenshot.Addon.LegacyEditor.Configuration.Impl; using Greenshot.Addon.LegacyEditor.Controls; using Greenshot.Addon.LegacyEditor.Drawing; using Greenshot.Addon.LegacyEditor.Forms; @@ -41,13 +42,15 @@ namespace Greenshot.Addon.LegacyEditor protected override void Load(ContainerBuilder builder) { builder - .Register(context => IniConfig.Current.Get()) + .RegisterType() .As() + .As() .SingleInstance(); builder - .Register(context => LanguageLoader.Current.Get()) + .RegisterType() .As() + .As() .SingleInstance(); builder diff --git a/src/Greenshot.Addon.LegacyEditor/EditorDestination.cs b/src/Greenshot.Addon.LegacyEditor/EditorDestination.cs index 417676afc..6bb5b2146 100644 --- a/src/Greenshot.Addon.LegacyEditor/EditorDestination.cs +++ b/src/Greenshot.Addon.LegacyEditor/EditorDestination.cs @@ -33,6 +33,7 @@ using Greenshot.Addons.Components; using Greenshot.Addons.Core; using Greenshot.Addons.Interfaces; using Greenshot.Addons.Interfaces.Forms; +using Greenshot.Addons.Resources; #endregion @@ -48,7 +49,7 @@ namespace Greenshot.Addon.LegacyEditor private readonly EditorFactory _editorFactory; private readonly IEditorLanguage _editorLanguage; private static readonly LogSource Log = new LogSource(); - private static readonly Bitmap greenshotIcon = GreenshotResources.GetGreenshotIcon().ToBitmap(); + private static readonly Bitmap greenshotIcon = GreenshotResources.Instance.GetGreenshotIcon().ToBitmap(); private readonly IImageEditor _editor; /// diff --git a/src/Greenshot.Addon.LegacyEditor/FodyWeavers.xml b/src/Greenshot.Addon.LegacyEditor/FodyWeavers.xml new file mode 100644 index 000000000..7f5a26669 --- /dev/null +++ b/src/Greenshot.Addon.LegacyEditor/FodyWeavers.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/Greenshot.Addon.LegacyEditor/FodyWeavers.xsd b/src/Greenshot.Addon.LegacyEditor/FodyWeavers.xsd new file mode 100644 index 000000000..061979a03 --- /dev/null +++ b/src/Greenshot.Addon.LegacyEditor/FodyWeavers.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + 'true' to run assembly verification on the target assembly after all weavers have been finished. + + + + + A comma separated list of error codes that can be safely ignored in assembly verification. + + + + + \ No newline at end of file diff --git a/src/Greenshot.Addon.LegacyEditor/Forms/DropShadowSettingsForm.cs b/src/Greenshot.Addon.LegacyEditor/Forms/DropShadowSettingsForm.cs index 2303aab85..6e93ec54d 100644 --- a/src/Greenshot.Addon.LegacyEditor/Forms/DropShadowSettingsForm.cs +++ b/src/Greenshot.Addon.LegacyEditor/Forms/DropShadowSettingsForm.cs @@ -34,11 +34,15 @@ using Greenshot.Gfx.Effects; namespace Greenshot.Addon.LegacyEditor.Forms { + /// + /// This form makes it possible to change the settings for a DropShadow effect + /// public partial class DropShadowSettingsForm : GreenshotForm { private readonly DropShadowEffect _effect; - public DropShadowSettingsForm(DropShadowEffect effect, IGreenshotLanguage greenshotLanguage) : base(greenshotLanguage) + /// + public DropShadowSettingsForm(DropShadowEffect effect, IGreenshotLanguage greenshotLanguage) : base(greenshotLanguage) { _effect = effect; InitializeComponent(); diff --git a/src/Greenshot.Addon.LegacyEditor/Forms/ImageEditorForm.cs b/src/Greenshot.Addon.LegacyEditor/Forms/ImageEditorForm.cs index 15ef13b72..2ccde638a 100644 --- a/src/Greenshot.Addon.LegacyEditor/Forms/ImageEditorForm.cs +++ b/src/Greenshot.Addon.LegacyEditor/Forms/ImageEditorForm.cs @@ -53,6 +53,7 @@ using Greenshot.Addons.Extensions; using Greenshot.Addons.Interfaces; using Greenshot.Addons.Interfaces.Drawing; using Greenshot.Addons.Interfaces.Forms; +using Greenshot.Addons.Resources; using Greenshot.Gfx; using Greenshot.Gfx.Effects; @@ -176,7 +177,7 @@ namespace Greenshot.Addon.LegacyEditor.Forms ScaleHandler.AddTarget(btnFreehand, "btnFreehand.Image"); ScaleHandler.AddTarget(btnText, "btnText.Image"); - ScaleHandler.AddTarget(btnSpeechBubble, "btnSpeechBubble.Image"); + ScaleHandler.AddTarget(btnSpeechBubble, "addSpeechBubbleToolStripMenuItem.Image"); ScaleHandler.AddTarget(btnHighlight, "btnHighlight.Image"); ScaleHandler.AddTarget(btnObfuscate, "btnObfuscate.Image"); @@ -226,19 +227,19 @@ namespace Greenshot.Addon.LegacyEditor.Forms ScaleHandler.AddTarget(btnLineColor, "btnLineColor.Image"); ScaleHandler.AddTarget(fontBoldButton, "fontBoldButton.Image"); ScaleHandler.AddTarget(fontItalicButton, "fontItalicButton.Image"); - ScaleHandler.AddTarget(textVerticalAlignmentButton, "textVerticalAlignmentButton.Image"); - ScaleHandler.AddTarget(alignTopToolStripMenuItem, "alignTopToolStripMenuItem.Image"); - ScaleHandler.AddTarget(alignMiddleToolStripMenuItem, "alignMiddleToolStripMenuItem.Image"); - ScaleHandler.AddTarget(alignBottomToolStripMenuItem, "alignBottomToolStripMenuItem.Image"); + ScaleHandler.AddTarget(textVerticalAlignmentButton, "btnAlignMiddle.Image"); + ScaleHandler.AddTarget(alignTopToolStripMenuItem, "btnAlignTop.Image"); + ScaleHandler.AddTarget(alignMiddleToolStripMenuItem, "btnAlignMiddle.Image"); + ScaleHandler.AddTarget(alignBottomToolStripMenuItem, "btnAlignBottom.Image"); ScaleHandler.AddTarget(arrowHeadsDropDownButton, "arrowHeadsDropDownButton.Image"); ScaleHandler.AddTarget(shadowButton, "shadowButton.Image"); ScaleHandler.AddTarget(btnConfirm, "btnConfirm.Image"); ScaleHandler.AddTarget(btnCancel, "btnCancel.Image"); ScaleHandler.AddTarget(closeToolStripMenuItem, "closeToolStripMenuItem.Image"); - ScaleHandler.AddTarget(textHorizontalAlignmentButton, "textHorizontalAlignmentButton.Image"); - ScaleHandler.AddTarget(alignLeftToolStripMenuItem, "alignLeftToolStripMenuItem.Image"); - ScaleHandler.AddTarget(alignCenterToolStripMenuItem, "alignCenterToolStripMenuItem.Image"); - ScaleHandler.AddTarget(alignRightToolStripMenuItem, "alignRightToolStripMenuItem.Image"); + ScaleHandler.AddTarget(textHorizontalAlignmentButton, "btnAlignCenter.Image"); + ScaleHandler.AddTarget(alignLeftToolStripMenuItem, "btnAlignLeft.Image"); + ScaleHandler.AddTarget(alignCenterToolStripMenuItem, "btnAlignCenter.Image"); + ScaleHandler.AddTarget(alignRightToolStripMenuItem, "btnAlignRight.Image"); } /// @@ -288,7 +289,7 @@ namespace Greenshot.Addon.LegacyEditor.Forms { panel1.Controls.Add(_surface); } - var backgroundForTransparency = GreenshotResources.GetBitmap("Checkerboard.Image"); + var backgroundForTransparency = GreenshotResources.Instance.GetBitmap("Checkerboard.Image"); if (_surface != null) { _surface.TransparencyBackgroundBrush = new TextureBrush(backgroundForTransparency, WrapMode.Tile); @@ -360,9 +361,8 @@ namespace Greenshot.Addon.LegacyEditor.Forms // Loop over all items in the propertiesToolStrip foreach (ToolStripItem item in propertiesToolStrip.Items) { - var cb = item as ToolStripComboBox; // Only ToolStripComboBox that are visible - if (cb == null || !cb.Visible) + if (!(item is ToolStripComboBox cb) || !cb.Visible) { continue; } @@ -1703,6 +1703,7 @@ namespace Greenshot.Addon.LegacyEditor.Forms #region key handling + /// protected override bool ProcessKeyPreview(ref Message msg) { // disable default key handling if surface has requested a lock @@ -1714,6 +1715,7 @@ namespace Greenshot.Addon.LegacyEditor.Forms return base.ProcessKeyPreview(ref msg); } + /// protected override bool ProcessCmdKey(ref Message msg, Keys keys) { // disable default key handling if surface has requested a lock diff --git a/src/Greenshot.Addon.LegacyEditor/Forms/ImageEditorForm.resx b/src/Greenshot.Addon.LegacyEditor/Forms/ImageEditorForm.resx deleted file mode 100644 index 88fd73b87..000000000 --- a/src/Greenshot.Addon.LegacyEditor/Forms/ImageEditorForm.resx +++ /dev/null @@ -1,1029 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAFMSURBVDhPY2BAAmFhYb4hISFayGIksQMCAjKKioqqyTYE - aEDmfyDIz8+v8fX11SbJdpBiT0/PbJABIJCVlVVLsiFubm65MANAdEZGRr2rq6sO0S5xcnLKRzYAxE5J - SWl0dnbWJcoQGxubQnQDQPz4+PhmoJweQUMsLS2LsRkAEouKimoxNzfHb4iJiUkpLgNA4uHh4W0GBgb6 - OF2ip6dXgWzAp0+fvjo4ONSDxGEYaEAUTgPU1dWrQAY8f/78fWdn50oQe+7cuTtVVVVx24psmoKCQh1I - MzDq+oHs+PPnz9/58OHDNyMjo3wVFRV2goEoKSnZaG9vP1FGRkZXTExMHBhwM0CumDJlyl4pKSlDggYI - CQkli4qKwp0L5AefOXPmHsgVsrKyhQQNQFfAxcUlAcwfs0GuAHpjMskGgDQICwv7AWNgKgcHhx02AwCj - LeXNW0xBiwAAAABJRU5ErkJggg== - - - - - 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 - cwAAAABJRU5ErkJggg== - - - - - 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 - sDv+AmJ7C7hZF4QaAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAIFSURBVDhPxZDdS1NhHID9ByLoJrrpIiGIMIy8MYVqrEhi - FpWCSUmmrCFzjPzooo0ZtiAzyD4u1k1hMLEtLTUUtlKwhrD8yGmWpWPamDr6OuLa2Pa0991VtF37wu/m - /J7nec85OTmbfspNJs1Zs1mbaWqsYbLthCdf/pTJdJks59y1QLYVwksHmpp0iWSSg7ehuB1Ud0HdAfpu - 0Bh8VD8FowNuDoHdCz1TIHjhyUBJQ0NdLJFA15UCndA6CG0uePQODl0cpWMY7o2k5ZF5GF8CwQtPBo7p - 9fpIPE7rwFucE6sMfYTBWfjwDfafeUVv6sZ+X1qeWIYvayB44cmASqczKLEYh1uqKW03Yh/zMR0E/3fY - fdyJZyHKmP8Pk8sxPq/GCf5KInjhyUBxba3xRzTKjvNF7K3XUGKt486AA/fMLLvUz3g9F8KdmtGvYaaC - CoGfUQQvPBkorKq6Eo5E2FZazvbTleRe0HLA0Ize9pjcoy8wPx/mwRsfnV4/vTMruBYUBC88GSioqGgM - bWxQoLVRVP8EdXM3J6/3c8MxyZ4TbiwvP3HLtchDT4jO6d/0LEaRfMqTgX1lZVeD6+v/BDSWPlrs46mf - 6KWxaw5LX4A29xr3PQq29zEELzwZ2KlSmVdS37SkKP9NYeV8xueCF54MbM3Pr9mSl2fNNEcuhci2E54M - bPr5CzGs8HBMuX66AAAAAElFTkSuQmCC - - - - - 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 - SUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAApJJREFUOE9jYKA2 - sJrzWsp+3ssch3kvl9nPfXEGhMFsoBhIDmQfUCwGyJ+JYbf17Ce+Tguen0/f8/Fx86WfXyfe+fcfhEFs - kJjj3Gf7bWc+aQXiMyCMYoDF1Ie+bgufXpp87+//1vO//rec+/W/4/Lv/11X//xvv/T7f9uFX/97r//+ - bznt4ZmZT/+DabgBhpOvS9lMu3t+4u0//2uPfPlfvPf9d/8lT++Y9N86A8Ihq5/e6bry83/VoU9AF/35 - D2KDxOEG6HdcyYnf+Pxxxb53/7M2vfiu33nljEHXlSiYAoPOy1NAYhNu//5ftP3V/7bzX/+D+HADtBrP - LC/a/+Zr5ton/+0nXL2j1XQOrlmz6WyMVtNZsLObTn0C474bP/+DxOAGqFYdPVN24O3/uKX3/4PYyIGj - Vn1sJkgMHYPE4erki/edyd758n/worv/QWxcSUOueJ9x8OLbDpm7XtnL5+9XgKuTyNq6PGTFg68eSx7+ - 1208fkcyYyvcCzBFktmbjLTqD1e4LXqQ47f4boh03mZVuAFCyetyjHrOPLZa8eK/28qn30VS1p8RTl4D - N0QkeY2XSPK6DpfljyZarXiea9h5yk8kda0k3ADhpGVSQslrzlts/vhfa82H/w7rXn7XaDh0hzdm+Rm+ - mOUHNRsO7XJY+3KT1uoPEyy2fMgVTlrtzBC6ig3Fq5yRi3z5ktdcUtz0/b/Eum//lTd//2+48+d/g50/ - Pipt+nYNKLZFcdO3CbwJq+O5ohcjbEc2hS1oti9b+KLz3LXHH/MsePmVa9Of/5wbf3/kWfDiPFfN8WVs - 4Qsr2IPmKuHPf35zpJh8p+cw+sxYxuQ74wyTz/SDjD7Te5h9Zvgy+M8XoHbmZQAAKzx2EneDTb0AAAAA - SUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAeJJREFUOE+lk71L - W1EYxt+z378gJUsgX9MdwhV0STJkCEmXpIvELaNLBhE5oyI6F0RqKbRbW0q/hlIqSAahUISIXAoNDgaV - DFlcOrSlnr6/k0YuRboYeHjP+3zdcy9EnHNyF0ir1ZJ2u31fETabTalWqxJFkRQKBUmn036yw6Pjw0+O - B3uy2+1a0Gg0wv8VoM+85HwBv2w2aweDget0OrZSqYS33QAeHR9+cjcFeg5zuZyN49jp1WypVAqTr8AO - j44P/78F7GE+n7fD4dDV63WrxpBvwGSHR5+FbwqWjZGeYkGBqE+2o9HIlctlm0qlHjDZ4dHx4SfnX+Gr - Hs4Ul4pX06KwWCza8XjsarXap36/79jh0fHhJ5csCC6MWVQ8VLx8bcz+RiYTTyYTdxgE8Ynu8H/1RS0I - kgXBqTGbk/n5o18rK1dua+vabW+7k17PHYh85+yhPDo+/FoQ+BscG7N0Pjc3wPQ2k/m2I3L0e33dfdSp - 2GWyw6Pjw0/OFxwa8yQZ/rG66t6p+b3I0gf9akx2+GSJz1HwRmRfxWvEn2tr7rnOF9OQUMBkh0fHh5+c - L3gksvclisbc4qmKz6ZmH5wVsMOj48NPzhfsidzT5bHis54xyW0F8Oj48JPzBXf5K5P9A150nLcmaqfe - AAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAiZJREFUOE+llF1I - U3EYxt9LP1IitohdlHUTa90oY4z1cSGBZCzWh9hFCJGSHxHM6byYzi7KuooG5mIok1IYg1CW4XJnCDLJ - PFSCFyoryjQvXBE1bfm1p/971s5VkOLFj5dzeJ73f34cziEAtBvoclubSoXbbRXc2AFWpXzB5cpSK54G - 6W3AOdGrJXGassTqdDL1m+k0Sj1AWacI+DLzopjX+4H6ANAnA6FpgHOcVxZUtLfTpdZWOmu33/y9tYV7 - L3/BN55G4A3wdBIIvgX8r4DHMUD+DMQTAOc4zwtU7/MtLYGhiQnYOppR5/XAF36NXklG/6iM7pHMHJJn - sZwEVjY2cKah4Ra778i7Z0TC15UUvq+t4XRNjV31fvdMg3+jVe+ztysYRTC+jkQqBXNVlUP1nhoowsyL - g5gb/kv4EN5Lh/Fh9AjikSLMiWv2djyR0DO1iaXVVZRUVjqJPdjnWukJ3K8z42NUj4UxPb6MH8fPhTKs - J6/g2+wpLMaOKd7+cBiLySSWhcLR8nIXsQf7nNTpcE6vh/tqCXpvGyH5LfiRaBRv+w4Sn6oxP2ZSvA02 - W2RvcfFdZp/RWE3swT6DD/IUQg/34LmnAMPeQkxHtFia0WFyQINod6Hqvd9spnyDgcQSIvZgn87GHJVH - jhx4m3Mx2JWPWKgAfR156GrKVb1Fh7QmU2YBe7APe/2PrLfocI8OWCxE7JF12s7kvEacnmVXnzL/Bv4A - nbSTNl0cgYcAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAApJJREFUOE+Nkl1I - FFEYhs+VBXlhUHlRXWW5WyratuoqtpIb5R+4thrrrrna2mRulu6aroIWWlYomj+ZWllmaaWpoRWGBCVo - 7oQ/QZmEGIlQN0WYiYJv55x0DKzo4pkzvOeb5/tm5hAAhFEVTCRsoXInnU4XTREWiWbZ7zWVakIY/OFF - QQ0tEBnnfMhQQ3ba1NjYezDYPcuW9ulas0JQoSbiu6okdBwPQF/fCAYHRzE+Pslh9yxje28rTGC1FGJL - oJelCcqCiPi61IhbCR6oO+iGm/Hb0XTYG3eTd6LR5Inrce64neiF4ZI4sFrzCRPR5eUtC0oCiDhUrEfv - 6Ug8tgZzrmRqUZqll6jOT8S1swKs+oAP9GGBEilNcNGfiK8uxOJZ7n6J8lwjHRBY+AMsj8rJSZEERUoi - 9hdq0X0qBHX2GFyyG5BpF/BkYAC6MgcOXXbAVO1AylUHap+OYn5hAeFWa6okKFAQkY3flb4bxZmx/+zc - 2NOP7/Pz2GuxpEmCfG8isvFbU3yRJ4TxDsNtGzgj7a4Y6aDQleXlD7vxZXYWQWZzuiTI9SDioww16g0y - ZCVqeIfzR5V40yXDxxdyfJ3QYOqlF8/tTT34NDMDX4PBJgmy5ERsS/XHDaMcNlMI76D3W48zCW7oqPTC - j+lkjD4P4nltZyc+z83BU6vNlgQZ24j4gAoa6DlIj9/DO9wpXMNpLnJGb6sLWoqdea7SBH5bp1QWuKpU - SZIgbQsVHPPjh8USp+YdJqenV8DyiMAdk5u8PQiVLB8kYfMvQbPZBycPKGAM/wsRCmhkrhNRW9eSQPeN - y4IYFyK2W1T8L7TQj3df2CVx74gCDHasGayWQhjSK4SuIjX7nIj4P7DasNWEMH4Cj2pW/p0+C6YAAAAA - SUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAgdJREFUOE+lk71r - WmEYxV9xEPwAXVxapQRFiqaEKwRvMgiBIPU6+PUPOJVSOgWElrZDoIRCh5bYqUsDafYEp5hEMHIFr6Dx - Sm2oSa1c0+AuBZen77nEi5JsGQ7vwzm/c1BBRkTsPtLL8XicJRIJlkqlWDqd1t9sNityPbuROJuBRQfd - uYFkMrnCwef8fYB3MpnQeDymWQ/MnQOSJK3m8/lPo9GIcrncaw69uLoaEoQbHjIwYOc+QSwWY1wv+/0+ - KUqdhkONisXiL03TCMLd6/X0DAxYdIyvIIoii0ajDzOZzLuzsxa1Wk26vLygweCPLtzwkIEBi44xEIlE - otzYgHZ2vvU6HZX29r53Q6HQFwg3PGRTDh1jQBCEfKOhULl8QrWaTO12mxYXn2yZzWYG4YaHDAxYdIyB - YDD4qlqtUqlUIryq+oOWloRNk8nEINzwZhl0jAG/37/u8/neQNvbhd/NZocODo6a4fDyWwg3PGRTDh1j - wOv1Mo/H80gQwh9luUHHx6d0fq7R9fU/XbjhIQMDFh1jwO12M65NWW7R/v4hVSoNKhS+9uv1DkG44SED - AxYdY8DlcjGup2tr67uK8pMCgcefnU7ne1lWeUEl3PCQgQGLztwAh5jdbo/bbLYth8OxgLfb/ct/0AHN - emDA3jnAQWa1WnVZLBaJ68ONpKkP5tbAff7O/wFfbRPfU/HxPQAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAZxJREFUOE+llN0r - Q3EYx58/ggu5EkkkbyX3Lv0DJG9pzfuS1z/ArYUQQs0sr81h2FghWV62NRcrk06Ezd4wbOxuni+zzuTi - lItP31/PeT6/3/Orcw7FYjH6D1TSZy5l2pDFvbskB6kDoZ0nsCGZapkkHCrq2SljVFNmUeMLRc/kgF44 - cKmw2wRqvaHo6U0gYpYDeuHApYIuI6j3PH8ci76wSQ7ohQOX8ju3QMNt8N1y6XnbluK8exFOrh61+07/ - hOn8YXjT7lEDq/i0AAcu5akMoPHaHzlkwQAc1yH9ntM3vW51DwlnbvU39+q1OJbLoA4OXMrt2ACKK2/4 - wHETEo5cQR2Lo/rT+xEWRqSJNeCeRThwKadNAMoL9+sej6oVrO5xPhGM/cHXM4sruAwHLmW36EGzTXwy - 8phTfOokZxKo/dSRFldADwcuZSpXKKtptZXvtcG7z0qY4TVALWnNE6zDgUsZiqVyZqB/zj7Pm2zGMfzK - nzrSgF44cCm9TjuIVxnJ9Mgk4VBq1UxFSuX0GDKtRkNykDr/+pTxG/gEq8OGaNZeGVsAAAAASUVORK5C - YII= - - - - - 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 - QmCC - - - - - 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 - Jx8zDDjpQm/GAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAmNJREFUOE9j+P// - PwMlGKyZWWczA7PuVgZm/R1AvFOC2WBXChDPAuJtUAxip4DlQGpAaoF6QHrRDfDgtdi72THj5q307rcf - i6d9+VM09cuftM63H+3TbtwCyQEN8MBlgIeo3YFD6V1vP6e2v/4fUHQDBae2v/qf1Pbqs4jt/kNAAzzQ - XLBJktd0x5aUtpefI6sf/PfKuQR0HSoo6bv1HyQXVff4M4/J9i3MOpskEV7QWp9qk3jxdljFnf9+Bdf+ - e2Zf/D9x0VUw3nboGdikOWsfgOWCS2/9Nwo/eZsZqAduAJP66rlhlXc/uWee/w/DTimn/ptHHvhf2nHo - /5kzZ/6Xd+75r+K29r+614b/ZpEHP4H0IAxQXb4zsvruH5e0M/8dkk7+NwzZ+1/de+v/qOK9/8+fv/h/ - 6brj/9U8N/1X89oCxkD5P0xAPQgDlBfvCi2/+dc6/sR/naAD/7UC9v3X8Nv5//bt22Cs6bcLLAbD+qGH - /jIB9SAMUJg/zyn1wmeDyNP/9SMQWNN/z38QRhYDsbUCjn5mAupBGCA3O0PVfe9di+Sb/00TboCxQeTZ - /+/evQNjEBsmDqKlbHfcYwLqQRggPV2SQ3HODovEW1+sMp79t0p/+t8k/jrcABAbJAbChtE3vrApzNnB - BNSDMEBqKgOTxCQvbpW5x82SHn6xz//43w6IDaPOgzGIDcImCQ++cCnPPQ5SywTUg2qA+AQGRv4mbzbR - zj0KtjsemiU+/uJQ8PUvCIPYIDGQHEgNE1AtdgP4GhgY2EqlGFiLsoF4KRAfhmIQOxskxwhUg2EAJdkZ - AOypQZHMHzM4AAAAAElFTkSuQmCC - - - - - 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 - lrMAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAG8SURBVDhPrVM9SEJRFL6GgoGICoqEruqswxsFB8Uh1EUS - C6HZoaG1uYSGlpawv0EzKWwwiIIukYPE03wkVCAOvSBrcPPhIqdzxB4YZosPPt7hfj/vnPvuZWzWT56x - hVPG0kXG8ojKCHlaI27q9wqMLZ7Pz3NREOSvRKLH/f4B4RNr0euViSPNxJAcEiWTqdZJJpWPVArkZHIM - tPa+tKSUDIYaacdCsthaQa/nzXhceY3F4DkSmYiXaBSawaCS0+k4edSQA5zvHluUwmF4CASm4jEUgmuP - RyaPGrDH2MmT39/jggA/uPZ64cLthrzDAUc2G2QtliGoLrtcPfKoAbu427RZNz4f9Pt9aLfbUK/XQZIk - aLVa0Ol0oNvtDnFsNsOZ0zkgjxqwMwq4dLmg0WiAKIoTzRRQxICS3T4gjxqwje1wbKuMLRZQMA1l5HMG - Q488asAWHRyr9e0O57tFwX841Gpl8qgBGfwlGY2GXxmNShW7qGLIXyANackzdhY28HBszs3VSCBhiIQh - v0EcaUg78TSuIbGO6fvYIsc5udk8GAJrWiOONFPvwyq2tozzreBlwneFMKrTxM368rJvjEdIo/39bLwA - AAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAGbSURBVDhPrZGxSwJhGMbfb/c/uEUEEadzEiQQBBeRBqUl - bPIPEKdDvuXACJxrMJKgLWqQWiISwkEIQriIW5KWg+KIW1oKCvLrfb40VFQMOnh5732e3/vc93FE//EU - i8X1QqFgrpIFDvwUWy6XJSqfzy8NgT9mpwKi0ah0HEeVSiWZyWTmhkCHDw787GlNiK7rKj6iTCQSUyGY - ocMfLc/9iBmLxeRgMFC5XE4yqCF0zNDhs7T0mjrE8zyVTqelYRgb6JhXWdbXWuMvxONx6fu+ymazV91u - V2GGvvAvvRCFnok2n4TY5TptC9HZDofdIAhULxRy73iGDh8c+N8wl4dHIXaCVKr/Xqm82rY9VI2Guq9W - 1TXRG95R0OGDA489HeIQbXnJpAPoLBJ52CPqf9Xr6oL7JVETHTN0+ODAY08H9IQ4nFz+sCx1zjCXBtAx - Q58MwZ4OaBN1bMsawvys1dQx95Nx+uiimKHDBwcee9reJzq4NU0fpzhik+vnaDMPdPjgwGNPI00ig6vF - wk1rwfI4Cz448Nhb+Fv/YnwDm33pU4rOXh0AAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAH1SURBVDhPrdFPSJNxHMfx56iWRqCXHcq6xKrLRlRUXuwg - WcKKGB3yECnliGCu7aA4OpR1igbmYiiTUhiDUJbhchuCTDJHJXhQWdIfzYMzoqYt/+3d851tbhC0wB98 - +PI8fPj+ePFTlO08xpaWmot2+7V8I/2c+w1NTddRTzKPSE/6OQvOWa2m9WSSSgdUtcF51+a8oM6rPWDy - QHcEfBMgPennLDhjNt/4tbHBvZc/cY0k8byBp2PgfQvuV/A4DJHPEI2B9KSvZLtrbDZP/+gohlYrDU4H - Lv9ruoIReoYidAxuzv7IFAtxWFpb47TJdFP5X3fnYJDFpQTfVlY4VV9vVtLud89K+XvKMv/F3ewN4Y2u - EkskOFZba1HS7vHeciZf7GF64E/8e3kf3MfM0H6igXKm1W9xW54E6RxfZ355GZ3RaFPEIZ4rlSe533Cc - DyEts8Navowc5sdsFavxS3ydqmAufDDldvv9zMXjLKiEA9XVzYo4Uh6NhrNaLfbLerpuHyHoPsH3WKP6 - 2neIfazj0/DRlPuQwRDYpdPdlezW6+sUcYin70FRKr6HO3nuKGbAWcJEoIz5SQ1jvaWEOkq23NmPLw7x - tDUWZPLIUoDTWkhf+w7CvmK6W4tov1W45c5eIA7xiOtfybizF4gjbcpnptzbeX4DJ7oc/jCY5XUAAAAA - SUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAJrSURBVDhPjZJdSJNRGMfP1W7yQujDiy5T0mGWbanL1MhF - WQrqprE5c3PpMpfoctkSXaFhgmapZWrZl6WVpgutMCQoQXNv+BGUSYjREOqmCDNR2L89J3xvXosO/HgP - //Pwew7nfRhbZTnT5DKNRpOq1WotBO0pW61WzBrjWHNDLBOIynA23mbPn5ue/giC9pStnFOtREaHHy5n - w3V8J4aHJzE2NoWZGQ+H9pTR2fsGI6hWIrgQw4S3dQbcyQpF66FA3MqUo8O8DfdztqPduAVt+s24awrD - RK0eVCsR1KqYMF6jw9CZJDw9sZtz1Z6CuhKdSJPThOvnLLDpIj9py8stqWVlSaKoOooJb6rT8aJ0v0h9 - qQG0vKtAebLDkScKqpRMGKlMwcDJeLQ60nDJkQG7w4Jno6PQXnTj8BU3jE1u5F1zo+X5FJa9XiTYbPmi - oELBBLp+f1Esauzp/+zcPjiCn8vL2Gu1FogC51Ym0PW78yJQbjnAO0z0bOBM9gZg0uXD96W8/vEAvi0u - YpfZXCQKTsuZ8MQWhxsZwSgxqXmH80d34F1/MD6/CsH3WTXmXofx3NExiC8LC4jQ64tFgT2ECT35Ubhp - CEGxMZ530EWux9msQLgaw/BrPgdTL2N43tLXh69LSwhNTj4lCgqDmPDIJ7jtm4OizD28w73KNZzOKj8M - dfujq8aP5+Hq6B9rlcqKAJUqWxQUbPIJjkXyYbHq43gHz/y8BMoTo+UeySDlbvwj6DwSjkKNAoaDfyFR - AXXQulmJIM2fCb1WFf8LXb7He2hRijzIVYCgsSaoViJIkLHmfTIm/A9UuyL4DdOT5vYvoF58AAAAAElF - TkSuQmCC - - - - - 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 - 8GMN/QX6AQLKSmIufl07AAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAI3SURBVDhPY2CgOtDaIsFksCuF2WDnLEb9XdtAGMQGiTEA - 5fDax6y3w4PbfO9mx4ybt1I63n4srr/ypwiIQWz75Bu3QHIgNVgNYdbb4iFqs+9QfNfbz6ntr/8HFN1A - wantr/7Ht736LARUA1KLaojGWklukx1b4tvuf46sfvDfK+fSf3RQ0nfrP0guquT+Z26TrVsYgHrghjBp - rUu1ib9wO6zizn+/gmv/PbMv/p+46CoYbzv0DGzWnLUPwHLBpbf+G4WfvA3SAzeAUXXV3LDKu5/cM8// - h2GnlFP/zSMP/C/tOPT/zJkz/8s79/xXcVv7X91rw3/DiF2fQHqQDFi6M7L6yh+XtDP/HZJO/jcM2ftf - 3Xvr/6jivf/Pn7/4f+m64//VPDf9V/PaAsZaWnv/MKou3YkwQHnxLnv7/X+t40/81wk68F8rYN9/Db+d - /2/fvg3Gmn67wGIwrA9UywjUgzBAYf48p/iTnw0iT//Xj0BgTf89/0EYWQzElvc6+pkRqAcRiLKzMhTd - 9961SL753zThBhgbRJ79/+7dOzAGsWHiIFrKcus9JqAeRFTKzZDkUJyzwyLx1herjGf/rdKf/jeJvw43 - AMQGiYGwYeCNL6xyc3YwAPWgpAVmiQle3Epzj5sl3flin//xvx0QG0adB2MQG4RNEu584QKqAanFnqR5 - G71ZRdr3yNpue2iWCDQIGFggDGKDxEByDEA1+PMfZ6kUA0tRNhAvZWAtOAzGIDZIDCRHbQAAW754iHPl - f1UAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAHNJREFUOE9jYMAN - HIBSMMwGZMMwHi2oUgNjALJTDwAdBMPJQDYM4/XCwBtgB3QfDFcD2TC8GsiGYbxeGHgDDIHug2FxIBuG - 7wHZMIycPjC8MzAG+AHdAcNxQDYMI6eJyUBxGJ4DZMOwOsgPA28A0dkTm0IAEKI3YFhMEd0AAAAASUVO - RK5CYII= - - - - - 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 - gg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK9gAA - CvYBwq9wAwAAAONJREFUOE9jYKAGiIyM7EfCx6FsMSxiRkCxMqh4Hdzu2NjYjy0tLd+AEvehkueAdAAQ - H29ubv4NxP+RDHsJEgfxqeF4iBlIpsfBTEcS00MT8wLy21FcAOSAnAwLB7gTQc4HimtADQCJg9SAnA9m - U90L4SCnuaV7OgNxPxDHAfFxKBvEF0CLrQC4C5C8ANIQCsQvoZpBfBAG8eHhA/Xacap7ARwoQNdUozsV - jQ8KSJB3NbF5AeRMkAJYiPdDnQuOISQ2bWIBlg7M0ZzMAuSDkjVyfgGzsXkBxflIXkFPaKgGUBIdALJS - 5si8Z54VAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAfxJREFUOE9j+P// - P4Ofnx8GDgwMZAgJCREMDQ11AOIoIE6F0g4gcZA8SB8DHgMU4xKSk6Ys3th99Oqz9fdffTl+8/HbrYvW - bOsDiQMNUIQb4OPjw4CMfX19BaNi41PWHby68MiN14cevfl29snbb+dAGMTeceLmkujYhBSQOrALPD09 - 0bHzxPlr+3ZfenHg6uOPJ2CaYfS1J59OTF+yYSJQnzPYAGdnZ3ScsO30gzUgA3Dhg5efbALqSwAbYGdn - h47z9115uQ+mGd0FIP6J22+PAvXlgw2wsLBAx6l7zj/cCDIAm2aQ2Kkbz3cA9aWCDTA0NETHnpPnrpi+ - /+qrw/dffj2NbggwIM/NW7Z2LlCfJ9gABwcHsBdsbW0ZbGxsGMzNzVVc3Nyrj1y8t+/ms88oBjx7//3i - 5Zv3d1jb2JaoqamJYBhgbW0tDzSkeO3a9f81NLXbJ06fu/Txi3dH3n7+ee3pq/dH5y1YvFJDQ7NWUFBQ - S05ODpKQYC4AatRyc3Ov2bFjz39RUbFmFhYWLSAOA+JKIG6H0iC+GB8fHwOKAUDnWwQGBrcdOXLmv6Ki - Ug9QkSoQM+DCKAYA/e+dkJAy4eLFu//19AymATUZ49MMkkMxABhoJbduvfpvb+88j5WV1YWQZgwD9PT0 - tERERFqAmmOI0YxhACggycUArdOzkqbxIJ4AAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAEUSURBVDhPY2CgBnBN9+yHYbc0z+NgdoarGLqYe6q7EVCs - DCTulu5RB7fbM8X3Y/LU0m/OyZ73wZKpnueABgWADIufEv87a0rJf7hhSZ4vYZZQw/EQM+Cmp3vGwb0A - 9ZZHpocesphLuocXUH07SA/cBSAnY3MiyPluaW4aIAPcgE4Hew+JjdUL//8z/MeFcfoZanI4yGnnrjP8 - n76S4f+uYwz/8zogbBD+/JUBHpBQ9QEYXgA57+AZhv+hJRDNMAzigwyEhQXEa57HqesFWKgCE0g1WsIK - QObDvOuS6aWJ6QVgNIIVQEMcxAY5F2YAjA2Tp35CAtuU6mWO7GT7ensWULJG9wbehIScqGB5A10MxQBK - /AIAoo4O0fuXsPcAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - pgAADqYBh9ypbwAAAi1JREFUOE+lkV1o0lEYh1+/EEUICb0K68LMSPZvmH1RadtUpmaWSlAXIyxt1aib - YR+b/TGUDHYTYyUxGF4JdiUjgmRkgu5CtovdTEwcuASXGQRdv51zdINI6GMHHs7V8zu/877g9/uhD8dc - LtcdnU53Vq/Xg0QiAXpkMhkEn3XgRrwN16YbjH4y+Hy+kNPpBJVK9VSj0QRFIhH3TwFerzdgs9mC4XAY - O50OEvkWwfS3DTgqt9ttpAGlUgmbzS0UCARxuVx+7k9fYHKr1cJCocACMpkMZrNvcWWljmq1Oj4W+fQt - EPuS6DcDJjebTaxUKphMJrFcLmMiMYPz829wYSGL1epXHL40lbnysI7+cO2qd7IK4Ha7GVRuNBpMprVT - qRSS7ZCAOSYvLhZxc/MHWq3We/bxVSRUCAB0TRQ67Xq9zuRcLsdqb79M5Y2N70z2eDxHjf732KO7WwrZ - NUcGFSoWS7/JtVoHLRbLhMlkOnPKMQ0HhtLY45cAEAqFRkI4nX63U3t9fQu1Wu1djuMGjUYj7Bl8ScG9 - ptc8AQCDSfjonoThfYdpAG1yWiqVRpaWVnFt7TMqFIrHSqXyhMFggIPHx0FyaIbCKwZmYScAb74CDMzB - B8d9GCFBYrHYTHjew+zYfwSWR24DXuAhPxSF6MkY5M1PAK0Pug22A/D6LODYC8jbJyDKjUJ0wA758yHA - yzHAi1EWgM4I4OgUoP1RN4DneaTnf2/YjUwf3XWDnxi88DTgdn3hAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - pgAADqYBh9ypbwAAAZZJREFUOE+lkksoRFEch3//yWYWtpZWHgs7ZEXcokkT7ty88sjGY2iiMNEY06Q8 - I7JClNSQabIwsvJIZEOhyIqiCAvZUuPvHLc7TF2PmlNfZ/V95wmI0VJKMaxOEXaWdRwOxyd3RJKkMzGH - hWMg/ajcU/MlmgRyb4jWToiGTQNSDngRXfl7QFXVNEVROt7dbr612R7XgEIBJJ9jqEmXzQKGHIlEOBQK - XQSBg4BwDKKiWWA7QPnrc7RxeajxVjDrxWq1jnjFHSyKgMGPAUN+fejj8z31aagD+ynJCdAslr8DZrK/ - DVByLH8HfpJ9ztjAaUoeuKgXmOvWmXeLc/UiecGT2P981cybS9kPcttyZSkbgdX0AnCxF2zz6IFJl850 - O2jSRQP8fMydlbTYqpKnr5Gi8m6dAi7xg+2+2MCokyARTzl+f7HMLo1WnGVULH9nVy1ht6EQrA2CywbM - A/6sEuM7sBCDQsyY0FIRLreBq8bAFSO/B7h5Ftw0A3+mHeFqO7hhGlw/Ba6Z+F/g6PqN4wHxyNKNO/AB - NFrDjHczNdsAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAACKSURBVDhPY2AYBeghoM3IyLgGB54OVCxGTJA5AQ1YD8JA - xTpQDRFQfgQxBugBFW8BYaBiPaiGKCg/ihgD9IGKd2LDQM36xBhgANS8H4SBij2A2ACI46Fiy4FsLkKG - GAEVHwVhoEIjqGJsYjjN8QNqPgPCQBUmUFXIYir4XGAFlHyIBxcQcv5IlAcAm4MjD8DlZQQAAAAASUVO - RK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAABgSURBVDhPY2AYBfhCQJuRkXENMgYq1iY1yHSABqwH4h5S - NcLU6wE1bwFydMk1IA1owAZyNTMANW8Fas4k1wAjoAFHgZoNyTIAqHkJEJ8BajYh1QAroIaHaBgkNgpw - hAAAm8EOmTkm1pMAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAADMSURBVDhPY2AYBfAQsJ/9zMN2zvOZhIIEpAakFkWdxZT7 - HhaT750BYUIGwNSB9IDV6rVd8NBrv3Sm58bf/yCaGGy68ztELVAvg3Ll4TMT7vz/33j2z/+OK3/+N5// - +b/u1Pf/lUe//C/f//5/8a5X/3O2v/iftO3l/5Btb/+77vj0X3zt1//qu//8B+llkMja4SGWtRXsAhBN - DAa5AKQOpBfsDb74lR48McvPgDChMICpA+lBUcseONuDLXAOwVgAqQGpJWTRqDwJIQAAilGdHbgOJisA - AAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAEFSURBVDhPY2CgNqievPN/y9xj/8kyt2Xe8f83btwA44aZ - B0k3JDa/5z8MxBf2k25A5/xDcBc0TlpDmgHItsNckVA0AcWQpUd//E+vnv3fK7Lgf82U3agWYDMAJAYK - TJDiqJyO/6GpDf89wnL/57cs/7/k8DfiDABp9o0p+W/jHvXfwjkUzK6atAPTeyXd6//H5HUjArGg+39G - 9Zz/PlFF/03tA/6b2Pn/t/GIBrsEZxSnVs6AGxCV3f4/rrAPrBGEHXwS/ieXTcUfsMjhAGKDNIKcnVY5 - 839Rx2rCsYJsAEizW3Dm/6z6BYQ1wvyEbIC9d/z/kq51xGsGGQIyABmTlR/orgkAcvMB8BYVXdkAAAAA - SUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAG2SURBVDhPY2AYWmCNhDzDKtEzDCtFPUh3+Hx+AYZlIhvS - 3pX/Z1gucoZhGSmGrGJgY1gsPE/nmP3TqEfZ/+Pvx/9mWAQ0hCjwn4GRYb5wq8JWo3sBNxL/e1/1+cWz - XO4Sw0IRH1T9swU9GGYLngFiVP/NFsgUWKZ8w603/J/9fvu//EsUrzHMFUpG1TwFqGm64BmQAhDNAOKD - wDQBH465Epfl58v/Vqs3/8e3QP4Ww3SBakyXT+I/4/M095fHhcj/EVcy/zAA+QwT+XKZpgqeFlps8kNx - k9F/7tnS94FiPQz1DEyYBvTyeTD08pyxvxn/U2mP8X+zEwE/QHypTfKfpXfo/OdbJPeEoYdvHlAzB+5w - awMa0s5zRuuU8zeJw5r/Nc5Y/hc/pPGff7HcK4ZW3nUM/cBoJAiauTwYmrjPSB9Q+iJ8VuU/+zbx94yN - PLsZWjilCeqFK4hg92AoYD/DukDgBWMZ2xGGcDZNYjSDAoYfiOWBWJfBiCmNIZ7pDIMWQyiQDzJACYil - gFgYiHmAmA2IGZENBnFAAQTypzhUsSSULQqkBYGYF4i5oJqZ0Q0gxpVY1QAAJuuF6gTRvEgAAAAASUVO - RK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAIOSURBVDhPrZI9SCNRFIWvY2RUAskQ8qOIFjbisoUSSJk0 - Qpo0CzZiE5JO0cKAjcuyCxoDFmm0ELUyMQq7sqgY0kyhoEiC4h+M7WgRLFIs7DLs4tt7gvMgGqwcOPDm - 3XO+e+e9IXrvJ0/UvU00uUOUZx0/K4891N7sVyCKfe/o0MuhkFlNJq3fU1MCqiYSVnl42EQNnqaQHBd2 - 3e6KmJ0Vf6anxZrfb6RV9RzC+mRkpPZrYkLsOp0VeBsgazxaob1d/5dKib8zM2K9p8f4QjS3SOSCvhKF - +X3nx+DgfTUeF7m2Nh0ZCdng7zviER8TiXoYnThQZkVt0wKRB5DDYLBWGhgwkZGAVaItIxy2sm53vTPC - D+PjryCYJKOqRsnrtZCRgGU+7ZtYTMwryjlGRmdALiORBghq39hz0NcnkJGALL9cRKMCRZhQsCFnQ0MS - YgOKXV0CGQlY4nH0YNDKtrYaGNMu2JCT/n4bMgdP0eOxkJEAJk8WfD5zX9NqOCgc2EvIaSBQh/xU1dqm - w2EiIwEZvpJMS4t+1dsrcp2d94BgEvsa7YPNaNpTWdMEvMg0/Auf+edIK0rl1usVh9xlhUdd4DOBsMbe - NYfhgbfp3/iJCymmb/CIustl3XEAwhp7qMHTLOzgTT/rQ4CvMEKUHiXaGyM6hbDGHmrs+cjiJSEjH4VX - TpaPhW97S2gELzL0H9Dj5tei7xUOAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAUFJREFUOE+lk69L - Q1Ecxb//wmCra6uDlbXFwcJgYXVMXFkdD9y6BouGWRxM8BeiiGARFINJTFcwCApWMVisYvB4ztU3Bveu - +MLh8v2ezzn3vQfPAFgWZQrr4lnBsZmdmjUop1Pz4Z9iXvrU8wUKOYxG0Ek15gq89zkYzLyggLD7Hg7x - 2GziK0mgmVKJ5N57Pe+9djreCwr2Ce7R+Oj3cVOt4q3bhWbpqdXyu/t63e/EBgU0bIfGlMBLu43Lchl3 - tRquKxXsFgo4KRYhT4zYaAEBmxDYJnhRKuEgl/M6yuehnTwx0YJ1GpvUmNAW4XPeesZwKu3kiREbPIGW - G7+Au2IwJnliFhXIcLcMp9K8YBd+xFXCDwyn0rzG26SYF7zCCsGEoWeW6NTMoEkxLyhgyJYZWmJYp+a0 - IOYFBf/9IzP/jT+zZw/Woa9yPwAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAoklEQVQ4T7XTywqCQBSA4ZlH - b92qR2id2UXJIiQiIsRN7lz6JtN/oIkpDhKjCh8O6LnCGOecGWJQsBT+JLDWzrBCgjU22GKHDDkOOGLu - uw4TGD78TUsgVdOeql/JJ+lAZt0HsxacTzijxAVX3HCfpAPZcF/VcXZg3o82gjorXT1QoUZDfIsuage+ - ury1BAu/4Z+qT/5fhsFqgtgLNd5liu3gBRRIn3FPTkzqAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAoklEQVQ4T7WTywqDMBBFk093 - 7da/qGJf+ECklFJK6abddemfxBNwithGSqLCYQKSOXMHoowxKoSgy1b8aaC1jmADKWSQwxZ2cIAjFFBB - LFOPGyh+/M1cA5e1RtCIZJUJbNb9KGvJWawt5xOc4QLXVSaQBTqtmG/BO1DD9yuC3fBX1sF6pz7gxf03 - dF47ELutcw2SifUpVmrqjOD7oJZ7TL4T9ELIn+co5cQOAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAqklEQVQ4T7WTzQqCQBRG7zy6 - 6x7Ah0gpLfohIiJEoha1a+muTe8wngkcJrUYxhQOjsp857vCiNZahjBosxHbAKVUBFNIIIUZzCGDBSxh - BRuYNK3dAOGDNz4BbesWwQ72cPAJ+NmmL8DMmjuzrll/WHk+wgmKURq0K79nda2sSzjDdZQG9g9/sV54 - fxeRB1RBDdhoL5+AGKOx3hor9ye8IO8EhB6o/x2m0AY1iSqgdYRW23EAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABDElEQVQ4T2P4//8/AyWYIs0g - i+EGMDIyMuDC0sq2DCltb5DxfxCfaANABuvaFTJEVj+E4f8gNkkGgAzxyrkIw/9BbJINkNNPZLCKOQDC - /0E0ugGNQFtWA/FaIF4HxBuAeBMQbwXi7UDcA3KFjt8mEP4Pokl2AZeQDoOK22oQ/g+i0Q1YD7RhIxBv - htq6A0jvBuJ9sNgRUg5nUHJZC8L/QTQZLtBlUPfcAcL/QTS6ASC/Itt6EMg/AsQngPgMEF/hEzNlMAm7 - wKAfeOI/iCbJBQxAoO2yhMEi6uZ/IH4AotEN6AfaArL1KMxWoJ6rQLwcpBkErGLuMtjGP3RwTH7+H0Sj - GEBuhqJeZiLXBQDC0LFONyaX7QAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABLUlEQVQ4T2P4//8/AyUYrpmR - kZEBHzZ2KWdIbX8Lw/9BbJDFRBsAMjym7jEM/wexSTZA0yqHIaDoOgj/B9HoBjQCbVkNxGuBeB0QbwDi - TUC8FYi3A3GPrF48g03cQQanlBP/QTTJLtBw7GYwDd/1H4gfgGh0A9YDbdkIxJuhtu4A0ruBeB8scNXs - uxj0A7c6aPls+A+iSXYBAxBoem9mUHVfC6bRDQD5FdnWg0D+ESA+AcRngPgKp5Aug7LrBgcll7X/QTRJ - LgDZLmPWCbR9638gfgCi0Q3oB9oCsvUozFagnqtAvBykGQTUPLYzaHjtZtD2PfgfRBN0AUwjiOYTM2Uw - Dj0Pw/9BbJIMsI69y4CE/4PYRBugaFTK4Jj8Ehn/B/FRDCA3R1KUlUGWAgAiG3UaYBp/hAAAAABJRU5E - rkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABDUlEQVQ4T2P4//8/AyWYIs0g - i+EGMDIyNgLxaiBeC8TrgHgDEG8C4q1AvB2Ie/QdihniG587pLS9+Q+i0Q1gACrCi51jVjBEVj/8D8QP - QDS6AeuBBmwE4s1QW3cA6d1AvA9msGPUMoagkpsMXjkX/4Nokl0gIGHIYBVzAIT/g2h0A0B+Rbb1IJB/ - BIhPAPEZIL7CAAQ6fptA+D+IJskFIM2cgtoMKm6rQfg/iEY3oB9oC8jWozBbgXquAvFykGYQkDJuZlBy - WQvC/0E0QRfANIJoLmF9BnXPHTD8H8QmyQD9wBMMSPg/iE20ATK6uQwWUTeR8X8Qn2gDHJOfM6Dh/yA+ - igHkZijqZSZyXQAA4IG1TpHFZ2gAAAAASUVORK5CYII= - - - - ..\icons\notification-counter-01.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\icons\notification-counter-02.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\icons\notification-counter-03.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\icons\notification-counter-04.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\icons\notification-counter-05.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\icons\notification-counter-06.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\icons\notification-counter-07.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\icons\notification-counter-08.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\icons\notification-counter-09.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\icons\notification-counter-10.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\icons\notification-counter-11.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\icons\notification-counter-12.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\icons\notification-counter-13.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\icons\notification-counter-14.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\icons\notification-counter-15.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\icons\notification-counter-16.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\icons\notification-counter-17.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\icons\notification-counter-18.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\icons\notification-counter-19.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\icons\notification-counter-20-plus.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\icons\notification-counter-20.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\icons\balloon.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\icons\resize.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - 551, 17 - - - 17, 54 - - - 662, 17 - - - 452, 17 - - - 116, 54 - - - 17, 17 - - \ No newline at end of file diff --git a/src/Greenshot.Addon.LegacyEditor/Greenshot.Addon.LegacyEditor.csproj b/src/Greenshot.Addon.LegacyEditor/Greenshot.Addon.LegacyEditor.csproj index 33efbc600..92d4646da 100644 --- a/src/Greenshot.Addon.LegacyEditor/Greenshot.Addon.LegacyEditor.csproj +++ b/src/Greenshot.Addon.LegacyEditor/Greenshot.Addon.LegacyEditor.csproj @@ -1,331 +1,146 @@ - - - - + + - Debug - AnyCPU - {9F89C5A0-EB75-4F01-97EB-FBC0725733F2} - Library - Properties Greenshot.Addon.LegacyEditor Greenshot.Addon.LegacyEditor - v4.6.1 - 512 + net471;netcoreapp3.0 true - - - - latest - - - latest + - - ..\packages\Autofac.4.8.1\lib\net45\Autofac.dll - - - ..\packages\Autofac.Extras.AttributeMetadata.4.0.1\lib\net45\Autofac.Extras.AttributeMetadata.dll - - - ..\packages\Autofac.Mef.4.0.0\lib\net45\Autofac.Integration.Mef.dll - - - ..\packages\Caliburn.Micro.Core.3.2.0\lib\net45\Caliburn.Micro.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\Caliburn.Micro.Platform.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\Caliburn.Micro.Platform.Core.dll - - - ..\packages\CommonServiceLocator.2.0.4\lib\net46\CommonServiceLocator.dll - - - ..\packages\Dapplo.Addons.1.0.79\lib\net461\Dapplo.Addons.dll - - - ..\packages\Dapplo.Addons.Bootstrapper.1.0.79\lib\net461\Dapplo.Addons.Bootstrapper.dll - - - ..\packages\Dapplo.CaliburnMicro.1.0.75\lib\net461\Dapplo.CaliburnMicro.dll - - - ..\packages\Dapplo.CaliburnMicro.Configuration.1.0.75\lib\net461\Dapplo.CaliburnMicro.Configuration.dll - - - ..\packages\Dapplo.CaliburnMicro.Dapp.1.0.75\lib\net461\Dapplo.CaliburnMicro.Dapp.dll - - - ..\packages\Dapplo.CaliburnMicro.Menu.1.0.75\lib\net461\Dapplo.CaliburnMicro.Menu.dll - - - ..\packages\Dapplo.CaliburnMicro.Security.1.0.75\lib\net461\Dapplo.CaliburnMicro.Security.dll - - - ..\packages\Dapplo.CaliburnMicro.Translations.1.0.75\lib\net461\Dapplo.CaliburnMicro.Translations.dll - - - ..\packages\Dapplo.HttpExtensions.0.8.46\lib\net46\Dapplo.HttpExtensions.dll - - - ..\packages\Dapplo.Ini.0.5.31\lib\net45\Dapplo.Ini.dll - - - ..\packages\Dapplo.InterfaceImpl.0.2.12\lib\net45\Dapplo.InterfaceImpl.dll - - - ..\packages\Dapplo.Language.0.5.31\lib\net45\Dapplo.Language.dll - - - ..\packages\Dapplo.Log.1.2.1\lib\net45\Dapplo.Log.dll - - - ..\packages\Dapplo.Utils.1.0.161\lib\net45\Dapplo.Utils.dll - - - ..\packages\Dapplo.Windows.0.5.109\lib\net461\Dapplo.Windows.dll - - - ..\packages\Dapplo.Windows.Clipboard.0.5.109\lib\net461\Dapplo.Windows.Clipboard.dll - - - ..\packages\Dapplo.Windows.Common.0.5.109\lib\net461\Dapplo.Windows.Common.dll - - - ..\packages\Dapplo.Windows.DesktopWindowsManager.0.5.109\lib\net461\Dapplo.Windows.DesktopWindowsManager.dll - - - ..\packages\Dapplo.Windows.Dpi.0.5.109\lib\net461\Dapplo.Windows.Dpi.dll - - - ..\packages\Dapplo.Windows.Gdi32.0.5.109\lib\net461\Dapplo.Windows.Gdi32.dll - - - ..\packages\Dapplo.Windows.Icons.0.5.109\lib\net461\Dapplo.Windows.Icons.dll - - - ..\packages\Dapplo.Windows.Input.0.5.109\lib\net461\Dapplo.Windows.Input.dll - - - ..\packages\Dapplo.Windows.Kernel32.0.5.109\lib\net461\Dapplo.Windows.Kernel32.dll - - - ..\packages\Dapplo.Windows.Messages.0.5.109\lib\net461\Dapplo.Windows.Messages.dll - - - ..\packages\Dapplo.Windows.User32.0.5.109\lib\net461\Dapplo.Windows.User32.dll - + + PreserveNewest + + + + + - - - - + + - - ..\packages\System.Reactive.4.1.0\lib\net46\System.Reactive.dll - - - ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.1\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll - - - - ..\packages\System.Threading.Tasks.Extensions.4.5.1\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll - - - ..\packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\System.Windows.Interactivity.dll - + + - - - - - + + + - - - Component - - - Component - - - Component - - - Component - - - Form - - - ColorDialog.cs - - - - - Component - - - Component - - - Component - - - Component - - - Component - - - Component - - - - Component - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Component - - - - - - - - Form - - - DropShadowSettingsForm.cs - - - Form - - - ImageEditorForm.cs - - - Form - - - ResizeSettingsForm.cs - - - Form - - - TornEdgeSettingsForm.cs - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - {5b924697-4dcd-4f98-85f1-105cb84b7341} - Greenshot.Addons - - - {bf35190d-b2a7-4cfa-b397-51cb384cf0d7} - Greenshot.Core - - - {f041c685-eb96-4ed1-9ace-0f5bd836610f} - Greenshot.Gfx - + + + + - - + + + + + + + + + all + runtime; build; native; contentfiles; analyzers + - - - ColorDialog.cs - - - ImageEditorForm.cs - Designer - - - - - MSBuild:Compile - Designer - - - - - mkdir "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons" -copy "$(ProjectDir)bin\$(Configuration)\$(ProjectName).dll" "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons\" -copy "$(ProjectDir)bin\$(Configuration)\$(ProjectName).pdb" "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons\" -mkdir "$(SolutionDir)Greenshot\bin\$(Configuration)\Languages\$(ProjectName)" -copy "$(ProjectDir)\Languages\*.xml" "$(SolutionDir)Greenshot\bin\$(Configuration)\Languages\$(ProjectName)" - \ No newline at end of file diff --git a/src/Greenshot.Addon.LegacyEditor/IEditorConfiguration.cs b/src/Greenshot.Addon.LegacyEditor/IEditorConfiguration.cs index a9fd701a1..5b302f58d 100644 --- a/src/Greenshot.Addon.LegacyEditor/IEditorConfiguration.cs +++ b/src/Greenshot.Addon.LegacyEditor/IEditorConfiguration.cs @@ -26,8 +26,7 @@ using System.Collections.Generic; using System.ComponentModel; using System.Drawing; -using Dapplo.Ini; -using Dapplo.InterfaceImpl.Extensions; +using Dapplo.Config.Ini; using Dapplo.Windows.Common.Structs; using Dapplo.Windows.User32.Enums; using Greenshot.Gfx.Effects; @@ -41,7 +40,7 @@ namespace Greenshot.Addon.LegacyEditor /// [IniSection("Editor")] [Description("Greenshot editor configuration")] - public interface IEditorConfiguration : IIniSection, INotifyPropertyChanged, ITransactionalProperties + public interface IEditorConfiguration : IIniSection { [Description("Last used colors")] IList RecentColors { get; set; } diff --git a/src/Greenshot.Addon.LegacyEditor/IEditorLanguage.cs b/src/Greenshot.Addon.LegacyEditor/IEditorLanguage.cs index 1831d7ba3..4aa96dcaf 100644 --- a/src/Greenshot.Addon.LegacyEditor/IEditorLanguage.cs +++ b/src/Greenshot.Addon.LegacyEditor/IEditorLanguage.cs @@ -17,13 +17,12 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -using System.ComponentModel; -using Dapplo.Language; +using Dapplo.Config.Language; namespace Greenshot.Addon.LegacyEditor { [Language("Editor")] - public interface IEditorLanguage : ILanguage, INotifyPropertyChanged + public interface IEditorLanguage : ILanguage { string SettingsDestinationEditor { get; } diff --git a/src/Greenshot.Addon.LegacyEditor/Memento/DrawableContainerBoundsChangeMemento.cs b/src/Greenshot.Addon.LegacyEditor/Memento/DrawableContainerBoundsChangeMemento.cs index 6906ff64c..eb576873d 100644 --- a/src/Greenshot.Addon.LegacyEditor/Memento/DrawableContainerBoundsChangeMemento.cs +++ b/src/Greenshot.Addon.LegacyEditor/Memento/DrawableContainerBoundsChangeMemento.cs @@ -35,7 +35,7 @@ using Greenshot.Addons.Interfaces.Drawing; namespace Greenshot.Addon.LegacyEditor.Memento { /// - /// The DrawableContainerBoundsChangeMemento makes it possible to undo-redo an IDrawableContainer resize & move + /// The DrawableContainerBoundsChangeMemento makes it possible to undo-redo an IDrawableContainer resize and move /// public class DrawableContainerBoundsChangeMemento : IMemento { diff --git a/src/Greenshot.Addon.LegacyEditor/Memento/IMemento.cs b/src/Greenshot.Addon.LegacyEditor/Memento/IMemento.cs index c0a28417c..5e3588e20 100644 --- a/src/Greenshot.Addon.LegacyEditor/Memento/IMemento.cs +++ b/src/Greenshot.Addon.LegacyEditor/Memento/IMemento.cs @@ -19,7 +19,6 @@ * along with this program. If not, see . */ using System; -using Greenshot.Configuration; namespace Greenshot.Memento { /// @@ -40,12 +39,5 @@ namespace Greenshot.Memento { /// The memento to try to merge with /// bool Merge(IMemento other); - - /// - /// Returns the language key for the action which is performed - /// - LangKey ActionLanguageKey { - get; - } } } diff --git a/src/Greenshot.Addon.LegacyEditor/Properties/AssemblyInfo.cs b/src/Greenshot.Addon.LegacyEditor/Properties/AssemblyInfo.cs deleted file mode 100644 index 4d04d1dd6..000000000 --- a/src/Greenshot.Addon.LegacyEditor/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Greenshot.Addon.LegacyEditor")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Greenshot")] -[assembly: AssemblyProduct("Greenshot.Addon.LegacyEditor")] -[assembly: AssemblyCopyright("Copyright © 2007-2018 Greenshot")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("9f89c5a0-eb75-4f01-97eb-fbc0725733f2")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/src/Greenshot.Addon.LegacyEditor/Resources/addEllipseToolStripMenuItem.Image.png b/src/Greenshot.Addon.LegacyEditor/Resources/addEllipseToolStripMenuItem.Image.png new file mode 100644 index 0000000000000000000000000000000000000000..f1ee831e743b140c6f8a3f92babc43d8196dd9fc GIT binary patch literal 664 zcmV;J0%!e+P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0006b zNklO-7Jby%3dJ|>M969kf1Isq!<*vskQ1@SwvoRVagdU z@{}*IlV`TGt*!aiUJ9$tElX=?ro@uDW5cPvk$JnG@7j+}Y2I}4;o*Fr@8>yi4%>3U zmu0Kq&$6vDkY)SD;0~e;lV^bUxVO*&15rejXEK?7Ov0GU42vCDLhLE737u>Uja!-? ze^BVTLh{FDZD!7k3_Entop*pJG+EyW+NZey@ia00Bd7-%cIcqXJ+}G$BanBXE?hxx z3XG*^{eSCMDbsy?}ow^&Job|m=eeYTfbkKzZmu)=Txr-3Youjs4 z?OVH^SmKK-JUV0b#U^ii`#*}VzKNTlS{-bJ1D9<$({Tx38#9*p>H)9fpB*IKaYVH` zwKvJB<>(!jU+&#aRMmKf6%rrxyq%Isthe_jMSFz!JBhYq^j(;r||W~+|0=C3?_&q!P&M0{;bWZ0pjckmnk yKEPI#TC*%a*iy8tq`3hT&)Cg7KyUaDGVCWsszTOC3+wIx0000004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0004& zNkl#6_OKs z5Em9!sINxjWGAXvTXPagGZjC2;9LxYww+YC^5eiPn3z6c5X&fpw}!#ay+ zh&K<(XB_WYK!cVtS_G&+^*(L$Rkec6JIYUlkw1KVCpm*lXwXu6lMWi~uKNwX<^(@& zoaZ-Ki?3r!&VUXLT1u^7rnH8YW_~XNpFS-!74z#e-$0KBEv3{g7PG$InWI@g#26#~ zm~tZaqCrc^RoZ_1EHRl%p|6G#%ce>aN+(A!lPWZ%guMClFREOW-T|w_hG>Gq74`rC N002ovPDHLkV1gBU-6H@1 literal 0 HcmV?d00001 diff --git a/src/Greenshot.Addon.LegacyEditor/icons/balloon.png b/src/Greenshot.Addon.LegacyEditor/Resources/addSpeechBubbleToolStripMenuItem.Image.png similarity index 100% rename from src/Greenshot.Addon.LegacyEditor/icons/balloon.png rename to src/Greenshot.Addon.LegacyEditor/Resources/addSpeechBubbleToolStripMenuItem.Image.png diff --git a/src/Greenshot.Addon.LegacyEditor/Resources/addTextBoxToolStripMenuItem.Image.png b/src/Greenshot.Addon.LegacyEditor/Resources/addTextBoxToolStripMenuItem.Image.png new file mode 100644 index 0000000000000000000000000000000000000000..b736c0552a3f81a4d612e74bfdea774dde0328c3 GIT binary patch literal 549 zcmV+=0^0qFP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00057 zNkl7096LaX85yO(~G zPLYbM`=_n*8~++KJnZDzUkem^`d8j5u{qo(o83JPE%_k}vgkFXAfdI{Ju?7W@{##c z5MMLLlA9MrQ;#Y*h&+MS}yMbd&k$lt=$XH3Lw1+4?ASO6hxOzj*vLSBy`~*7DN_} n=SLKdjbcWXPOxwg1cAK)anlIPD8oju00000NkvXXu0mjfBJk=b literal 0 HcmV?d00001 diff --git a/src/Greenshot.Addon.LegacyEditor/Resources/areaHighlightMenuItem.Image.png b/src/Greenshot.Addon.LegacyEditor/Resources/areaHighlightMenuItem.Image.png new file mode 100644 index 0000000000000000000000000000000000000000..5637e5919dd53e5a08f011191b1e64c00770de15 GIT binary patch literal 767 zcmV004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00009 za7bBm000X1000X10m83v0{{R5bxA})R5(v%lHE>IK@^2aJaf)WTO~0@FG_p>LW3MLd0G$K?)69JK^F?vtptN1Luh2NeQZQ{ksp4mTZ*50!_ zbRpRZVsHVJz!jZOc7rtMvu(Z}kOi@vO+FPQ^2bjI!Fd&$MHQPpH#VOvLbL4p`aX6E z|2LIO{7{j3%&6DKxM zHcxEJjkNgRbN+zcb3?^~qLvXIuf*uxmD(zi|Fb5*(5BNY9N^CDm@5#%K z{7#o1WSLI=`-MQyL3D?tDnn|>P?5UIODkf*I@khhnO|*7>p> zNH$4sII;cGh7>zFvrh{<hrWBG{vJsWl!<;8jQ?U!>>$2pc zply-t`kJMd8d(;kVzYWe3b->wyDPHN(#8w~ZHpvJ6q+}!gd;19BOAJE9}r)2BRBsN xFv-)P$fX2XAGp@C_DqWd*#7_G_Lq{Ke*pIjnQDIptuFuo002ovPDHLkV1j3HM?(Mr literal 0 HcmV?d00001 diff --git a/src/Greenshot.Addon.LegacyEditor/Resources/arrowHeadsDropDownButton.Image.png b/src/Greenshot.Addon.LegacyEditor/Resources/arrowHeadsDropDownButton.Image.png new file mode 100644 index 0000000000000000000000000000000000000000..b1873ed4282c7bae280e891161137a425398f799 GIT binary patch literal 301 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=DjSK$uZf!>a)(c;3^+F~q_@S%Q@#!T$Hm_P2AM8!wER!?1*HiP))DhHlO8wmNF} zt(gx6D9&M6#iy8eH2M$(3t=iUo!b=b>uYHIs=pBeZTAR<@%3X zlIf00+3oES*TOb%JD3xy~O>EE&h)e|GXJb(;Xyq8rTn9Y5d~Q xs?cCtu#G+XflSjzh9Kr3?x%fBrx=-;8M*@J${xQE5A-JkgQu&X%Q~loCIH;mfgu0@ literal 0 HcmV?d00001 diff --git a/src/Greenshot.Addon.LegacyEditor/Resources/blurToolStripMenuItem.Image.png b/src/Greenshot.Addon.LegacyEditor/Resources/blurToolStripMenuItem.Image.png new file mode 100644 index 0000000000000000000000000000000000000000..7bb9e14d2fc2b270c41d96ac54457d2277a746e1 GIT binary patch literal 430 zcmV;f0a5;mP)j0V}UD5aDr{0H9e+b>;im+Mon?zz8y z_j}Iyo^yj=l8*9Fo)7+;T=bw16-YwDNkI!Xu!m7(AmL+>k#4PN?2=-w!Kj3PnkcF7ope~GK0Clj)0#5M?`>}>ne2cTY zw0?}C0Txg!lvI6;%C9V-A z!TD(=<%vb942~)JNvR5+xryniL8*x;m4zo$Z5S9BxjbDQLoEE4p55r}lqkab;dfYj zoB0+NUMZ6$J5)LnR5}8j9|TD>b@b_-^VRij{O@u>VV2}XfsUqw(lR1B83H9)FY9;A z`+Q(UfB3Ighx$JkKC})G`5JFCy{^Vi=k%|OVH%oGSNE@i#V=NS?)N`rxW~!TLw%weRfOZ`k=KWK!$T#8qF`oyljdf4cL_;o_ZkQ&|sP*yvY3 TW6f+}&@p(r`njxgN@xNA+fkPh literal 0 HcmV?d00001 diff --git a/src/Greenshot.Addon.LegacyEditor/Resources/btnAlignCenter.Image.png b/src/Greenshot.Addon.LegacyEditor/Resources/btnAlignCenter.Image.png new file mode 100644 index 0000000000000000000000000000000000000000..ac5f3bf147334de734fff85e274ebe7a902a5309 GIT binary patch literal 260 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;%C9V-A z!TD(=<%vb942~)JNvR5+xryniL8*x;m4zo$ZGeiVdAc};SokkJdyuQiLBuWb`Ni1n zZ*@aX@fa&9sVLpLvTkX<(Ogb7mi6T_vOgTyp8x6GS|<3>=-B_m5|fpj`U zGnHDi#6d*YU|ZD@&VvV3f)1>G_aL1A!|L>y0@v=@A{~oZ-NFmq4HkTI=gL^kZ}ail zTlTpk9IxbcH@MY*J^Fut=#zIFt(yeWCOGI+ZBxvX!lvI6;%C9V-A z!TD(=<%vb942~)JNvR5+xryniL8*x;m4zo$ZGeiVd%8G=SokkJf0nDsLF8!R^NZ2D zUkS#9r^$yX2?+^aTvn!AJ^7>lLQYx9{Ma7{3uaojckcOKKheAU-Ge!^6WT1rB9snu zN#|@l%(#)uAdt~FyKCXKgoaM8jHv4w(ce!5E;u46>SwWL>mC!>plgOd&_Ev=%0r4CiFm5Sm8bPyLWgSvGph@0RfUcisxP@>TiDi(x* zLI=S`aS{qn4t|Ema{`h0Ds7`L{5YkM|0AmUFJC__%W5c<-<9oykAQL`1!#5eEuh@U zfn=s2i^UgGt{K>e64-DK4qSl?6*%c0+K};ePbRl&$~6N`C344-Ub#`IbIrg7TtXRm z^%|;h3w|IzaU{b_Znl5kQLY(iiZ3}=me{oIuNg3}dT<9dcz~z2jzQ_0aRdB$3cPv`{#AVQ3}^n=c=4HvBxb8Ju;3}z4Ezv&?VV{!Ek6d78!0fh w_8O+#mIFN_JCfUc4^!^9z+e6PXX{ix0U{f98qr`J*8l(j07*qoM6N<$f)Y%kQ~&?~ literal 0 HcmV?d00001 diff --git a/src/Greenshot.Addon.LegacyEditor/Resources/btnAlignRight.Image.png b/src/Greenshot.Addon.LegacyEditor/Resources/btnAlignRight.Image.png new file mode 100644 index 0000000000000000000000000000000000000000..1bf59bb8016f707a5a95a0be0a03b84fe96e4677 GIT binary patch literal 264 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;%C9V-A z!TD(=<%vb942~)JNvR5+xryniL8*x;m4zo$ZGehqdAc};SokkJe~^nYP@?VO|Cn7{ zxeEk+B$8A-Cmm^;yL4`EwZ*+a?SxVzvMP literal 0 HcmV?d00001 diff --git a/src/Greenshot.Addon.LegacyEditor/Resources/btnAlignTop.Image.png b/src/Greenshot.Addon.LegacyEditor/Resources/btnAlignTop.Image.png new file mode 100644 index 0000000000000000000000000000000000000000..ef8d591a1683c4bd2440adb82589f6b1f7c561ee GIT binary patch literal 372 zcmV-)0gL{LP)e6KG2IDanu&lOeum%wEd(}&|Yb!b8h+HegWxPyCWxY?>4)W_Mw z(}^-|!AzT_ODPwv_p;;I9IgQ3Ni-Q~3nofwfK} S@>rYz0000!lvI6;>1s;*b z3=DjSK$uZf!>a)(c-_;*F~q_@*+B1ha$3wbZFU#q3Cuj+WzYZp|Noz-qm64KThFPo zNC}bmXN)!O&RiP2(_Kc($I3wWrcz?SCS^Vs=T;B)1m~{pN3#QyI6OA{J-p`9+w^u) zfZ`=aAn)HZl`h_kdN-yl3fwTQ#`(%-bC1j?xjxJnA@Wt(qboFyt=akR{0DoO{2mk;8 literal 0 HcmV?d00001 diff --git a/src/Greenshot.Addon.LegacyEditor/Resources/btnCancel.Image.png b/src/Greenshot.Addon.LegacyEditor/Resources/btnCancel.Image.png new file mode 100644 index 0000000000000000000000000000000000000000..d4a8337b2d02ef57cec34752a15d31e7e6e0faec GIT binary patch literal 632 zcmV-;0*C#HP)=&i<*Q+LRc#_#rMK7qozJUZOG|2NaL{=uvhq|UL_88n;aq(&Hg?&VnNj7Q9-A61 z7um-9-Xh|+T+SEsCJ1UkMpI-}BtnzJWU_fYI_grRS0WoCdrm6lmBL~FW{ST~Pyb`W zBt_G7j-yeJ8a)5$a}rc(H z6uH!B`Bgo@pQB(H_48;{9paXCL|w&u3HF?QhL{|3wXC!5Vv&dYHX_=gkaqzA!Jaej z$kFtU3IK87b^>osixlpOyt*%PO0egQJ8y@Bk~u}!lvI6;>1s;*b z3=DjSK$uZf!>fUTfic_D#WBRfzjwl3Z>L0&W9OgTxhKK9(zrOy`uJlptlcn-D1s2c07wGHvDnBUR zZ6kMn+4a|V9SxGzpMQ*58~CJXsz{NIJAdH+d(jIM44Wi(@3)RwnOSfmKEJT4e4_D8 zne@&5F*?)gnk237JUB3Q*0Y*c5$hvK-(`5_6g6Ms&(JM&YTQ3BBgPPtxVDG>&9$+K)d>$d6xdF z{r9S@w~;wKYt{jsmCHW2My*cek=YS+S!S1K?JcwE(!5}u$LyU~J^PciGR_>VlW&=4 zsFiHpx-f{&znVes- iHM>3jsu$EpyWIEEG4kcPv_c6O7Yv@RelF{r5}E*WhP^)k literal 0 HcmV?d00001 diff --git a/src/Greenshot.Addon.LegacyEditor/Resources/btnConfirm.Image.png b/src/Greenshot.Addon.LegacyEditor/Resources/btnConfirm.Image.png new file mode 100644 index 0000000000000000000000000000000000000000..0cbaeee6734600e00ba185c896e01ede3a883906 GIT binary patch literal 539 zcmV+$0_6RPP)bgX1yg{UrVE|{DFD%6J_t+`@Zp#%aan%8{BN~-^M8B`~18UIshkMV!A69GR!e5pd001WIh3afCo9F-l002ovPDHLkV1g6@;Bf!| literal 0 HcmV?d00001 diff --git a/src/Greenshot.Addon.LegacyEditor/Resources/btnCopy.Image.png b/src/Greenshot.Addon.LegacyEditor/Resources/btnCopy.Image.png new file mode 100644 index 0000000000000000000000000000000000000000..42d070512e84179368af5a914253cbcf19335274 GIT binary patch literal 588 zcmV-S0<-;zP)MpX3YVh70*R>bI#he#<$1aoZ%#nGXxQ#3FaLz$Gq7=*G6m)j6zk~u2DgT|8n zXdYYbODvf zKKC@6({{UMEuE&y1=a0v#*@8gGxt(2SbWeEgTN%nPWHK{*_^amul`(L=k~K7ct+Fs zUc#es@V^4@b9fMi*hh#bKz6eK!(Hoe_y)$tFtyofbi42bU(g+n(K{TYb0~WUV$&=n zVR3bp6Bf(0|8{o`h55Xg;_LD<#~K=}n)~(R^1rk~`<7jcKY~BLLL!yoP+gr(b5HbD zGWB!^Zw7M>?&NKF7c;}ViH9oHf7#g{hUuDEV}5A~gW2p*#37!GRY$qgc$jw)J+mWv zK8^0@`)oBU$@6@fKF(Zpuj=*&gUlt9EMy3KYHC^(ai|`hj#GL)&I?AmZyX@(J;Jv{ zQ$~H0#QSTghdf!%r+g?n6#}=Z2QhM4-=(t|I;m(gZ#3QbMRdeS@9KTJ4RCRA& a6y+Bux*YznMx&nq00001r;P)>6YmhCzCu+8G$k!uK374d4C0EG+)z7og<3gMI%&d~Epsrh2docf~SKglb2C zjgic=J{_O(|JJJV|2lpfF#-`J26ExYqm%w`i({Sw6-I!yk<4>H9G>w1<*xSss_ttr z3;>CNya#gOmT2bbP+49n|3~b{c{(lX0!Lu!ms5TP|oRVK0fVl=?GXnzv20D!amoE8@ P00000NkvXXu0mjfglP}6 literal 0 HcmV?d00001 diff --git a/src/Greenshot.Addon.LegacyEditor/Resources/btnCursor.Image.png b/src/Greenshot.Addon.LegacyEditor/Resources/btnCursor.Image.png new file mode 100644 index 0000000000000000000000000000000000000000..d095cf19ccf446537933a40c53a1e0db21433d3c GIT binary patch literal 433 zcmV;i0Z#sjP)r3nKkC#QUDTS)X3c|y~+YAg0^r6Zzfu5dT1yn5JxCmefd)iD zm16>Rb@eKc#^=wUzwhkqTnS>&ojZ4@s;Vk(Takf+frb>Q;7@0{QHl>SBKa(TT}Dw%p+DRAKRI#sn=<#@$nape)@A*-#a;_*0l97j|t z6`srG79N3*92|IUf6IjFx~`Cak*89rxg*%&BiH4HKVl{l2|gZ=MWImO5>yZ-cKFD_ z!CxkI#Pd9n&1Sh_7#o<_e^XXklTb35W`~B><_a2GTB5&$W>VN-5C;8-8X}(NBcTFu=mlAWn-3Sc?(7;2 ztEGc4@A%#KbKL#jd+_g(0vJ35NMtA_U5iqD#x=2Zk2JvevE8n;P{??no^GgcxW#&- zTnhvYuCYh#ospzM*5xYH;&JnJZVrujyhD8U5{sExhoit=!9HV)Moahhs&X`HK21&G z!^A{aJx)$yd1S;)+H8s$!2xz?zbhJ19~;BlNaR=DjgDg8?>Cqc9AFdR;65B~s89&M zln(^(WOx`;UN7$T_v2PyUt65#e7*)Vf&*;OP4i`)2ZPvbHnCc*VzF36UDvTvsbH;E z!+O2m*1p?~M?*s`W&{UVmja8NmV8XdFdj6%m@y!!XJ*u^L$DBU6A1~?OLq{GlB!G(kof*=}~7+r+GtD+>q%fv4_3P2>uyM z^l>a(ECn{`)I=xqcX5q9>=mpt7O1dD-M48(MSCi@yVVxue8x5Qh`oEv(`Yla-z@z= k^t@(Cp5U6;{wn}J0E|aSqjTh@tN;K207*qoM6N<$f+Yd(@c;k- literal 0 HcmV?d00001 diff --git a/src/Greenshot.Addon.LegacyEditor/Resources/btnEllipse.Image.png b/src/Greenshot.Addon.LegacyEditor/Resources/btnEllipse.Image.png new file mode 100644 index 0000000000000000000000000000000000000000..0b36f9571a19b2882d36c1e6d25ae3ea4293de13 GIT binary patch literal 628 zcmV-)0*n2LP)_gf%~t%?ncHSF_0Wc z4M;6i8wBVS?a&DBKAQLV)z@8jo`2d2#5-`{ogg(JwIDrE?FDzDD?!WSC;i_YgCayU8s1F%0Kk}#_ghA}8W#{LB^nmn&y`i4H zA#v5w2h;anez|1D(T9_lAAL9p7hZGx(e#D;?)8E6fHi}FdiHu<_r^VChpxU{x(cWO zXv;Kg7$kS-+RG)b4LeIgdZ5}NKqX^Ma7_Qfnj=6%fB^>d#=}`4y!!a#*&rGu29g7* z0jY&*LjdEnnXK|@D*`OaHdc18yEy6KmFEi!=bl=kki4R`YT?Zn$$<0Fx^uYuU-M6Upo zo6ROxDius7lUOd7F_Dhe^C<)9md10Z58ynxzYPH_Ak1ZpiLI9v^qR`i_*XvBq<#KH7pMR$E`uaB}dpw?_ zM*lnPvb7ot*)>NVDpV|%ev@mp4q7ahag)h(=9FU!4h*ER%Z>mDg+e1CoKC;pmRDCd zQLEM7;W)0}Xf(o}{udP7YkI{K05F(@5AF#V+;^A;Xy~+5Dvc~IF5}9|CsZgDkCaN~ z34_4^2ak_|hZ_&e?VXaBP^^B(*Q3jm#TY>y-LcJ8YLg)Mvl*z=CD`?HKq zk`#qYt+-T!6gEjFlRfcxeE8?+sD0nx|0x9Mqtpsq8rSjk)gwW$nxr~^%(Yt0hG94# z06e8sE5|+c0$=Z?u+HOKuy^JfQ?H+;Y&Gcp9*e~;P%4Te%-ghhxRJu9d3o`yovR-F zTpWfclxmOTnajMOuVk~?4H5Iu+Syz#cPO9F?{i(ZgDg>Si3Kq+@TEMp`Ri}<^J?nH z`M&O2V>}%=p3>Yi3%IYtWND>523xO>uRpi+#zjXS-JB3&4W;YwlJ3Dm_gpcv ziKGS=fKBC?v`a7T$RL}}Bw(CU5gcjma#`6%VS^H9mp;zlwnHg)CzFH$lH1})bu(Qw zJ1A^oPb65t4?t_>zi|9YciPhrA|v2uT*L*HTwm`bDFT{0u>B(5lO(Och1r7J9peR4 z!4_ZP)~8+1oWWU-;rS@{^hjEo5dYR2Cxz-FTNK>-s*HHliLLI(*G{8(5({7CUS)#& fW;b2?UjY09;A7fgbr6?600000NkvXXu0mjf<9!kf literal 0 HcmV?d00001 diff --git a/src/Greenshot.Addon.LegacyEditor/Resources/btnHelp.Image.png b/src/Greenshot.Addon.LegacyEditor/Resources/btnHelp.Image.png new file mode 100644 index 0000000000000000000000000000000000000000..5c72d036831d8933f4ff0d7ddff9ca8a3864f308 GIT binary patch literal 667 zcmV;M0%ZM(P)E1^L>LRiO=zpQeMlIyU! zmVqBymUog4cA3Uf;Vo3@0|Gy^Ae#pl!FcrpY|Owt5%A42upq1SJ^>wOb6mc9%vR68 zm)dWnz|{8%ntNy9!IO^^e{_i+aC;Z&+XbfxhcCt?bePU@c?X}3w%?pzYrK+x91Yet zP-C71=WrC_@i<(+6NUq4yijg@4!Vxe8ahnJ1D>FHa5j7TQXEcp$3WK>f$|m~So$N7 zNX&p|Y#Pd%UqG2rps3Z6EILdl2lhV=84MFYj`6SI(D_MFw~j-FDF~7zQ7TO#y33&< zU38dE4(xsWsDY2kTJu}bbo`<6Y?$)*4%uUzlF?y0`NZN8dud~2zP4u$j&vp|TJt+d zr_&Uib9h4s=aBUS%5OkIV1!qLxnaXS@9qck~Lw4M5QSNeui;w%iR(Fv@aFk82}bu@%# zZ^5NQhay4?g+fPH2M0m$12`5O6gM|f1O7p!t}aE?I%E_aL{St$)O>~8+?VIjA~kmF zfyc?q<@`7|1jiJKyr$&iY3+9S*zZA(({>BmY(UB63$53n)e5v+f))$Vd=8q;K$8jX zWz>~zgIXz*{AFTi8Gdx%o}qdjRxSrC6!KCT_yS^k V3%Di7JevRj002ovPDHLkV1n=kvMvAs literal 0 HcmV?d00001 diff --git a/src/Greenshot.Addon.LegacyEditor/Resources/btnLine.Image.png b/src/Greenshot.Addon.LegacyEditor/Resources/btnLine.Image.png new file mode 100644 index 0000000000000000000000000000000000000000..a09a96d3cf7f2d6915780f1fb8889bcbccc3a90c GIT binary patch literal 295 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=DjSK$uZf!>a)(c+%6wF~q_@*+B1ha$3wbZFU#q3Cuj+WzYZp|Noz-qm64KThFPo zNC}bmXN)!O&RiP2(_Kc($I3wWrcz?SCS^Vs=T;B)1m~{pN3#QyI6OA{J-p`9+w^u) zfZ`=aAn)HZl`h_kdN-yl3fwTQ#`(%-bC1j?xjxJnA@Wt*+@eX-aOdWgM>ZZq6NQP!m?q^Jkrkq(hGv>(VPxfz$c93htSE}GkS#U-&Yj!E z)b%I}zxq0>?^~R6psuxy5(rEawpTRlc6*!~B9)X=aYlrr6Q3^j)_#Zvf&43?@G;Sd zVL+Ar9vB8>SN!8S^>DE518-KSa6AAA5s_H$peoUExfUud-qw^1A)vUaH$7uachAor^ZYN zXv#^0{CLD&RkYM5le@o(-sPQo32gI$t=`1In1kYor<}NruCP;~RYy6Ms(+)qjynNxm@ZW(KegiaG!;EV7=TiUx002ovPDHLkV1lJC+yMXp literal 0 HcmV?d00001 diff --git a/src/Greenshot.Addon.LegacyEditor/Resources/btnObfuscate.Image.png b/src/Greenshot.Addon.LegacyEditor/Resources/btnObfuscate.Image.png new file mode 100644 index 0000000000000000000000000000000000000000..3e8836c93f44de49f1038b7686658b9038cde0fd GIT binary patch literal 614 zcmV-s0-61ZP)}~~`l)ydCMVqN2Zs+j$3gT3Ck2JIwbhAK z3Vpj$bU{-eG`r!^J2-T4h}HqPH<*S8XJKRkL|<@HaLiyZ#F9yxdf(z2U8es7^i9LW zSJ;2%6NN+*mOIfy){}2ZPncAb>f+tW|!s}uV=z|lni}|Fdm8$ z{1Hd=1t$f0<>gl*u^8KmO4xq7jI0Yf4j3CS*dLR1^aYmZ13Y-+r_C3jYibGiToln4 zoD}4imez&W*2vY_$**~WrlEtA*L%3(9AnQ357w6-x#gbcp*Kw1e7niv4{8(HEQ)>{P2QOUj!TqR|b>E1S)@ z7k$A=!PcCd$}QR1woEy4DNLrlh~T7PlSifc12L@daG1Tn+a07*qoM6N<$f<~Ma AssI20 literal 0 HcmV?d00001 diff --git a/src/Greenshot.Addon.LegacyEditor/Resources/btnPaste.Image.png b/src/Greenshot.Addon.LegacyEditor/Resources/btnPaste.Image.png new file mode 100644 index 0000000000000000000000000000000000000000..74dbba1da96b263af7896c8257897619ab43b7a4 GIT binary patch literal 730 zcmV<00ww*4P)R5(wKl3z%ZQ5eSGD{t~b=#Lj& zrli9x+ftXQk&Chv)JU$=w(j7{l=JI3_2jIc&{5R{KzG0_znq zmo9~p^sdr~d&z!iIO2snNeZ;2?ZAWdooF&`L!)6Unp6BST44a|6)~48)Fh3R>(PHM z8qZGcJv;jk%#R9DOpBOH8Jm|kXgwBy9IX<@!)p+wgvNWrl!&<$ z??Fmx^=<1;z z+$lY*;RII`P19)dCK`dk$UjI(Fh$%eucV<2ycn~SvBL~6;yg6mWD3$Op<@LJJ2Z4i z(2D7x&AF%d_wL;=bff3x!+Ur?&-eGfykBZCmQcv_kYydCpjq~Ypj{k#VZr&U*F&q@ z#ZIS#@B8~ag=!V#nVDh61a)*C1cR>MhlkkN+rzhZ8((&J@wwGPW^D~5NMQmc3#&n@u!L zJ4GTbGcy`YO{p+3aSM9Afp^x|D~Lv;%cM)`bh_zW zE?247>(FR4T-gb&Ru7eGnk%aRL8H0LJB30CiNsQcbSbr3ZLQU6+vRc@a=9E9%VSP5 zjYO-x&pQt8%4XkflP;xHDxVdLMPxD=NTpKH^b?p&k1m8b>2w*7rDHIA{wfY{b zt3`M`UMw!A5RWe*7E2BA`W(0WIZCBZJfus>WU}Dq<`yojs-1CEbFBkq@)v~>sYMEJtNm{?w2d7eE8OUa{XP8w|QU#R{5~8l}ThyZyr-7A>b@JLeKB=?&W9mb9c*b=3Fkv`jPr|V`szHb70L3D0 z_Z9PWuJdf9s!wN83=!$B)`pTOQ*AJgiMQ0NdH zps;7X-{y;LvUgp4L+fA`knh&)tR5XsF6dgV%kR*Pj;PL;PrR`$gnb7CKlxw}XVF0y z@>-V0@LOW$wy32-;5(4hIA5RBFsH!ejwGP|;`~qmFQ2vd-^sXF#Q*>R07*qoM6N<$ Ef=^oL$N&HU literal 0 HcmV?d00001 diff --git a/src/Greenshot.Addon.LegacyEditor/Resources/btnRedo.Image.png b/src/Greenshot.Addon.LegacyEditor/Resources/btnRedo.Image.png new file mode 100644 index 0000000000000000000000000000000000000000..fa8f1d0b682b1ba94cfde812946d682eeb73618c GIT binary patch literal 776 zcmV+j1NZ!iP)AOBYZoc&C>%=?%{(~@x4H9#l z`*gqU%qOk3GajD-VW>6;u$cPL*KOg`OOx;Y{oi{2*Z-Dtzy5bz{{6q}>YxAZmwx|m zyYTCO@AcpREvG#^GxO)(I(S^V^lN#D&g zARN5<>7A}CKmS)9`UG^*pZ_2>NF1u2fkD6HN>2R7=Z`D)z5AcF{>69w&MRjOx~@b) zr5Ox5FHHf7O}PF0f6?|=|J%-g{SV?pr5PBs8qO>)+W+Qj=GrI!ZTqg?(P}ye*R0ue zHb$%IEZEsir#^vk-;JODL1IuP3=FDON6(ZUc>6zY>HYs8HdGi4)T)oo1c{+zkT_Hc z1A~0=zBAc7U;YnXboW1q4Hd=!a>e_MgBRa+$lUeHUOs=n0#ulRK_YYO@{pxBzIrTq z_+PjF_#MfNt#B{EfMoV2Bdz+w6>f_joF2|_n%www+FaEo& zeEMA^W&Ii97=)9SNeLybId8G~ z(wD`+vioKmY6Q{Q6O8!lvI6;>1s;*b z3=DjSK$uZf!>fUTfic(9#WBRfe{Ju1FQz~lH&OXxbER7uV>xzBHsk!v_E|J~u#>f;n^!E@*LT;p~1mU-KMA9?1p zKJ2XXgK2%2R0{%EUp=t-FRNVMOO05j=~KN}XTKGDefF4O-j1bsuIU5UFq`_LQFAd_<|0X~0S+V<$haeL#=!$Sj_^MUJ>B&B9 zi?;HbejrwFy0g+m3l6aQy*_Hq4hjtW@9!7i_f|u!o9D|Ey+%i)nJvpQCHUkozPGPw zF0Z*Pvk21Y#03j;XrzO&sExBfz2Jm;Rr(##V*SZ?M_Yn%v_HuDvJ zSRk?X+S(e=#TSLj%6X0?87{e;$#%?ZdU1;J*Pk`=XP@ydy0{`>eR<1WS>}%wGAl#4 w?sWfrDs%gcjokT{c0ax~7th`=H~qEnhvOF#t!1`w0Aqu})78&qol`;+0KKfdTL1t6 literal 0 HcmV?d00001 diff --git a/src/Greenshot.Addon.LegacyEditor/Resources/btnSettings.Image.png b/src/Greenshot.Addon.LegacyEditor/Resources/btnSettings.Image.png new file mode 100644 index 0000000000000000000000000000000000000000..fd5698091f1ba4f3282d3857173c806edd6595f4 GIT binary patch literal 566 zcmV-60?GY}P)&p={5K^M2}$<`TjF@OqS5GDEEd}ghr@Gt2ZI6i`+b_s zz%V|oP$={|l}df=^?H;{CU+x|$kxL{mtfq;(18KVv$2A~;C8#+CPgVzx2sV$oBge6 z8o{_*t=6yu1D0oF`ThR+cszb^bycHUtxC7If2h;B9~w6@bYQ^p>_tAG&o4>RJNWeU zYpc;v>HPex>2|w6!?=;58*$k1TnMk%o2pb4DinUw<)uvZdYwET&oS2mH!^f!z+%I- z5H6Q%r&KCYE|(*`s(MY!%icq-1#V=M3^rT~;cz(ColfT-oKC0js?`Q%GC!&-E35l3 zZe-|295y_Ek=<@z(0|qkS*}n%e?d1l8a+Kd4~-icIxt{)HkQq1JCx;`{^jpfELP~` z_G-Je!uuWO{2h zn~(LuBHm{6QU60bG?{^6e6|b*L)d6EzK3yh{I4a%UjoWXVs3=vQ2+n{07*qoM6N<$ Eg7tR!-v9sr literal 0 HcmV?d00001 diff --git a/src/Greenshot.Addon.LegacyEditor/Resources/btnStepLabel.Image.png b/src/Greenshot.Addon.LegacyEditor/Resources/btnStepLabel.Image.png new file mode 100644 index 0000000000000000000000000000000000000000..5090c3760caa2f48bae5973de0ee4bd7a6bc510b GIT binary patch literal 457 zcmV;)0XF`LP) zvc)0M8k*Xo68eES6xfglsc{lSTVqp8(GLZqh6wL_<)D}pVM%b_5K)74a#C8-jplQ_ zkwnA^J@D{8_j%vv?%2PmS2*+Z2z;U)qeFGZ214?zUi&DNYsQro;}#vNGv*9S^V*AX zDcw9LhNE2kG8o*-a07-8)fpRF;Y)hW$h$;IAjFVMuSO33$#IJgA;w0c-0Kmgh+E`? zgv`Gx>Gdq!`Ze6(79B#r%Mp^M@3neLd3rlVCTv~(L3uK*miN+1c^8?mb@c_gH&d+a z!^niK%dyOTX+@92$b_xS8A>i@R6PMB6SgKt;K=TZB*Ph{a-3}%8I0C{tIK~l*6mL$ zti}rKazTsBcUl}73_CjeR_9F2ZJ&#+VdB~DI|!(y_uTDcHFZ&}oWS{q>Nyy8W~o&+ z@AgKc(YVI6P3;Kn*nC09_||CCo0ukOON@O2xJD)bsc*gb00000NkvXXu0mjf-M-BD literal 0 HcmV?d00001 diff --git a/src/Greenshot.Addon.LegacyEditor/icons/notification-counter-01.png b/src/Greenshot.Addon.LegacyEditor/Resources/btnStepLabel01.Image.png similarity index 100% rename from src/Greenshot.Addon.LegacyEditor/icons/notification-counter-01.png rename to src/Greenshot.Addon.LegacyEditor/Resources/btnStepLabel01.Image.png diff --git a/src/Greenshot.Addon.LegacyEditor/icons/notification-counter-02.png b/src/Greenshot.Addon.LegacyEditor/Resources/btnStepLabel02.Image.png similarity index 100% rename from src/Greenshot.Addon.LegacyEditor/icons/notification-counter-02.png rename to src/Greenshot.Addon.LegacyEditor/Resources/btnStepLabel02.Image.png diff --git a/src/Greenshot.Addon.LegacyEditor/icons/notification-counter-03.png b/src/Greenshot.Addon.LegacyEditor/Resources/btnStepLabel03.Image.png similarity index 100% rename from src/Greenshot.Addon.LegacyEditor/icons/notification-counter-03.png rename to src/Greenshot.Addon.LegacyEditor/Resources/btnStepLabel03.Image.png diff --git a/src/Greenshot.Addon.LegacyEditor/icons/notification-counter-04.png b/src/Greenshot.Addon.LegacyEditor/Resources/btnStepLabel04.Image.png similarity index 100% rename from src/Greenshot.Addon.LegacyEditor/icons/notification-counter-04.png rename to src/Greenshot.Addon.LegacyEditor/Resources/btnStepLabel04.Image.png diff --git a/src/Greenshot.Addon.LegacyEditor/icons/notification-counter-05.png b/src/Greenshot.Addon.LegacyEditor/Resources/btnStepLabel05.Image.png similarity index 100% rename from src/Greenshot.Addon.LegacyEditor/icons/notification-counter-05.png rename to src/Greenshot.Addon.LegacyEditor/Resources/btnStepLabel05.Image.png diff --git a/src/Greenshot.Addon.LegacyEditor/icons/notification-counter-06.png b/src/Greenshot.Addon.LegacyEditor/Resources/btnStepLabel06.Image.png similarity index 100% rename from src/Greenshot.Addon.LegacyEditor/icons/notification-counter-06.png rename to src/Greenshot.Addon.LegacyEditor/Resources/btnStepLabel06.Image.png diff --git a/src/Greenshot.Addon.LegacyEditor/icons/notification-counter-07.png b/src/Greenshot.Addon.LegacyEditor/Resources/btnStepLabel07.Image.png similarity index 100% rename from src/Greenshot.Addon.LegacyEditor/icons/notification-counter-07.png rename to src/Greenshot.Addon.LegacyEditor/Resources/btnStepLabel07.Image.png diff --git a/src/Greenshot.Addon.LegacyEditor/icons/notification-counter-08.png b/src/Greenshot.Addon.LegacyEditor/Resources/btnStepLabel08.Image.png similarity index 100% rename from src/Greenshot.Addon.LegacyEditor/icons/notification-counter-08.png rename to src/Greenshot.Addon.LegacyEditor/Resources/btnStepLabel08.Image.png diff --git a/src/Greenshot.Addon.LegacyEditor/icons/notification-counter-09.png b/src/Greenshot.Addon.LegacyEditor/Resources/btnStepLabel09.Image.png similarity index 100% rename from src/Greenshot.Addon.LegacyEditor/icons/notification-counter-09.png rename to src/Greenshot.Addon.LegacyEditor/Resources/btnStepLabel09.Image.png diff --git a/src/Greenshot.Addon.LegacyEditor/icons/notification-counter-10.png b/src/Greenshot.Addon.LegacyEditor/Resources/btnStepLabel10.Image.png similarity index 100% rename from src/Greenshot.Addon.LegacyEditor/icons/notification-counter-10.png rename to src/Greenshot.Addon.LegacyEditor/Resources/btnStepLabel10.Image.png diff --git a/src/Greenshot.Addon.LegacyEditor/icons/notification-counter-11.png b/src/Greenshot.Addon.LegacyEditor/Resources/btnStepLabel11.Image.png similarity index 100% rename from src/Greenshot.Addon.LegacyEditor/icons/notification-counter-11.png rename to src/Greenshot.Addon.LegacyEditor/Resources/btnStepLabel11.Image.png diff --git a/src/Greenshot.Addon.LegacyEditor/icons/notification-counter-12.png b/src/Greenshot.Addon.LegacyEditor/Resources/btnStepLabel12.Image.png similarity index 100% rename from src/Greenshot.Addon.LegacyEditor/icons/notification-counter-12.png rename to src/Greenshot.Addon.LegacyEditor/Resources/btnStepLabel12.Image.png diff --git a/src/Greenshot.Addon.LegacyEditor/icons/notification-counter-13.png b/src/Greenshot.Addon.LegacyEditor/Resources/btnStepLabel13.Image.png similarity index 100% rename from src/Greenshot.Addon.LegacyEditor/icons/notification-counter-13.png rename to src/Greenshot.Addon.LegacyEditor/Resources/btnStepLabel13.Image.png diff --git a/src/Greenshot.Addon.LegacyEditor/icons/notification-counter-14.png b/src/Greenshot.Addon.LegacyEditor/Resources/btnStepLabel14.Image.png similarity index 100% rename from src/Greenshot.Addon.LegacyEditor/icons/notification-counter-14.png rename to src/Greenshot.Addon.LegacyEditor/Resources/btnStepLabel14.Image.png diff --git a/src/Greenshot.Addon.LegacyEditor/icons/notification-counter-15.png b/src/Greenshot.Addon.LegacyEditor/Resources/btnStepLabel15.Image.png similarity index 100% rename from src/Greenshot.Addon.LegacyEditor/icons/notification-counter-15.png rename to src/Greenshot.Addon.LegacyEditor/Resources/btnStepLabel15.Image.png diff --git a/src/Greenshot.Addon.LegacyEditor/icons/notification-counter-16.png b/src/Greenshot.Addon.LegacyEditor/Resources/btnStepLabel16.Image.png similarity index 100% rename from src/Greenshot.Addon.LegacyEditor/icons/notification-counter-16.png rename to src/Greenshot.Addon.LegacyEditor/Resources/btnStepLabel16.Image.png diff --git a/src/Greenshot.Addon.LegacyEditor/icons/notification-counter-17.png b/src/Greenshot.Addon.LegacyEditor/Resources/btnStepLabel17.Image.png similarity index 100% rename from src/Greenshot.Addon.LegacyEditor/icons/notification-counter-17.png rename to src/Greenshot.Addon.LegacyEditor/Resources/btnStepLabel17.Image.png diff --git a/src/Greenshot.Addon.LegacyEditor/icons/notification-counter-18.png b/src/Greenshot.Addon.LegacyEditor/Resources/btnStepLabel18.Image.png similarity index 100% rename from src/Greenshot.Addon.LegacyEditor/icons/notification-counter-18.png rename to src/Greenshot.Addon.LegacyEditor/Resources/btnStepLabel18.Image.png diff --git a/src/Greenshot.Addon.LegacyEditor/icons/notification-counter-19.png b/src/Greenshot.Addon.LegacyEditor/Resources/btnStepLabel19.Image.png similarity index 100% rename from src/Greenshot.Addon.LegacyEditor/icons/notification-counter-19.png rename to src/Greenshot.Addon.LegacyEditor/Resources/btnStepLabel19.Image.png diff --git a/src/Greenshot.Addon.LegacyEditor/icons/notification-counter-20-plus.png b/src/Greenshot.Addon.LegacyEditor/Resources/btnStepLabel20+.Image.png similarity index 100% rename from src/Greenshot.Addon.LegacyEditor/icons/notification-counter-20-plus.png rename to src/Greenshot.Addon.LegacyEditor/Resources/btnStepLabel20+.Image.png diff --git a/src/Greenshot.Addon.LegacyEditor/icons/notification-counter-20.png b/src/Greenshot.Addon.LegacyEditor/Resources/btnStepLabel20.Image.png similarity index 100% rename from src/Greenshot.Addon.LegacyEditor/icons/notification-counter-20.png rename to src/Greenshot.Addon.LegacyEditor/Resources/btnStepLabel20.Image.png diff --git a/src/Greenshot.Addon.LegacyEditor/Resources/btnText.Image.png b/src/Greenshot.Addon.LegacyEditor/Resources/btnText.Image.png new file mode 100644 index 0000000000000000000000000000000000000000..5090c3760caa2f48bae5973de0ee4bd7a6bc510b GIT binary patch literal 457 zcmV;)0XF`LP) zvc)0M8k*Xo68eES6xfglsc{lSTVqp8(GLZqh6wL_<)D}pVM%b_5K)74a#C8-jplQ_ zkwnA^J@D{8_j%vv?%2PmS2*+Z2z;U)qeFGZ214?zUi&DNYsQro;}#vNGv*9S^V*AX zDcw9LhNE2kG8o*-a07-8)fpRF;Y)hW$h$;IAjFVMuSO33$#IJgA;w0c-0Kmgh+E`? zgv`Gx>Gdq!`Ze6(79B#r%Mp^M@3neLd3rlVCTv~(L3uK*miN+1c^8?mb@c_gH&d+a z!^niK%dyOTX+@92$b_xS8A>i@R6PMB6SgKt;K=TZB*Ph{a-3}%8I0C{tIK~l*6mL$ zti}rKazTsBcUl}73_CjeR_9F2ZJ&#+VdB~DI|!(y_uTDcHFZ&}oWS{q>Nyy8W~o&+ z@AgKc(YVI6P3;Kn*nC09_||CCo0ukOON@O2xJD)bsc*gb00000NkvXXu0mjf-M-BD literal 0 HcmV?d00001 diff --git a/src/Greenshot.Addon.LegacyEditor/Resources/btnUndo.Image.png b/src/Greenshot.Addon.LegacyEditor/Resources/btnUndo.Image.png new file mode 100644 index 0000000000000000000000000000000000000000..29570e7824d378ea229ec7fc5559f2d9e9d81f68 GIT binary patch literal 767 zcmV2W1HvFSNDL$g)_@LdXFNUw#xtL^I?jE%KYiE7$IX{MeVusc-+vGW zu|Z-^3!b01p8doZsto}wr#(C~^XdQpAiDSZ@BeKVe*JI1^!tC;)j$6`F8}`Da_-mv z*7LvqPrmo}zuUs6mn^0}L^Z^u@8+4VD?fp@{rO*Y=+l1?J9zceJ0Nio_F4S&PX7A$ z-)oP2`9JaYpZ_+~?wmKAd>!E({mv_A+RlIdU$p(z{|UE${|E66IxkIuN;4RAU5NsT zWvzely<*?H|M452Ki2QKk^_}yV9;thd#3Nk&;L!QK7ldFJ0LO5rnBIH1p%$5b5XW^ zSMOx5ee%C(|C_H`4QG}^r5G60s*lZ7tvY%J9fQQ7O27al7Ps{N|FQ#b|AW|2VFm{I z{QU};{DvSZ-i}#%gUUc_=_Rg38L2Rfn1A}zlW>vq%cSGD3J;>3j zKU^W1y~zkF1qYHDTcdRAkKgfF^6-Di(i>kTGPfeUAdBzgw+%@!zQD%wwVCb%;P@2wlY{oV426V#|kIt<@hU zIIMlSNwfaYF20y$2YF(apV6p4c*kMg%kNriKK!@X{PDj~(wg(aNy|`EC0F!fN#2Cj z@rs+iO^{gkZHv;zuh(>Ue*I{;^XGr%&ENk6#r`X9`u?9UdCeux$VHf`5d_$S<|?s; zFRb9IIlhbsm~1)Me*MU`>Cb%L7QW~_ThMImn&H5Iz5uh&3|~f{={-z7 x(+)EE&N##9J!2V@@AMo7zd6`56ZwFF0RRtQb)t%Dx&{CM002ovPDHLkV1nqsgK+== literal 0 HcmV?d00001 diff --git a/src/Greenshot.Addon.LegacyEditor/Resources/closeToolStripMenuItem.Image.png b/src/Greenshot.Addon.LegacyEditor/Resources/closeToolStripMenuItem.Image.png new file mode 100644 index 0000000000000000000000000000000000000000..e0d11f757cdd08d55de2f86c1190ffcc05aa775c GIT binary patch literal 427 zcmV;c0aX5pP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0003t zNklR@GUabOrMtd5B*t7G8SHCQxgQBd#;QADr^ioqnN zS1ZYi)V})_k9h?G z0izK#wSOy!?6uz?v!sAxcpnaN+i2izFo1SOB}#bib|ZUiwlQ423gL_|coCB`sX!oHQp}=# z!Y%!Ya|AaOvS^>DsCX8M$C84-#y$Q#un)6m V57xm8gtq_y002ovPDHLkV1gd%uucE~ literal 0 HcmV?d00001 diff --git a/src/Greenshot.Addon.LegacyEditor/Resources/copyToolStripMenuItem.Image.png b/src/Greenshot.Addon.LegacyEditor/Resources/copyToolStripMenuItem.Image.png new file mode 100644 index 0000000000000000000000000000000000000000..e424eb99c60b58e9de3367ac6f0799b31860da64 GIT binary patch literal 653 zcmV;80&@L{P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0006Q zNkl3W%OG?BT;i9ZfOw&e@VX(_W0?9D!BDM%2Qc4YBG<7jLwkT^A z38pb9Bc&h%p-hI8jtDZ6IaGoR4T~N^aTM@h zsI&F;1_e%Mp2npukf&cf<#5EfthEx^1hOPAuj(avH8n!ndL%-26XY~&0atXM*5<`7 zDC>sKAb2N1a+22z3K|;JnYuc4+-|?}V`GDxPrl^3r$S5qVQQ{#!7qSm=tJKEZAv3chWfV<8 z{K4(%={JNOnVH2(JjAE>c7l%g&Nd!3CDGrS%;aDS^HZse_m~)JOE$cB+H5M(Vo_R& zQsN;#&6RNmcdO!Pt&XR+C6RzPiO$9ZTCT<$-Wn>!YK<0%hxmxszleEj$UU_yD@!Ty nh&gQr$(yv-WBl=pZXVQ6owSoSCduW?00000NkvXXu0mjf0rx3? literal 0 HcmV?d00001 diff --git a/src/Greenshot.Addon.LegacyEditor/Resources/cutToolStripMenuItem.Image.png b/src/Greenshot.Addon.LegacyEditor/Resources/cutToolStripMenuItem.Image.png new file mode 100644 index 0000000000000000000000000000000000000000..c3429a1c20871bc5c39c070018b9fd409bf70dd3 GIT binary patch literal 595 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$Ysfr0U!r;B5Vh5ynCd$WTR zMUI`{{an8zh4V@FF6SMsyHq5NT8^j|YQCIyQPo-VsjT*;b4?whj^?5tvnM1u8i}xI zx}0(~u#gBbN+~Q1Fg*Ubdh#jPBaZrW=2Xvn{@sRCF!b;GiFw<#_r|?%^1br1WXZ)0 z51HdZdec>>pKd+d+sDuDuP36w$Hshq%k8%>@>zeR>+B3T5Ue5cr^4o1-TwElzgB%& z&QwxkQBky?>rH3Z(MA4~T;4AKnYC4FDffZ=3hn-Xn|0!3|J_*IExE;W zVZN5JF4va*w`=cO{~UYKn>A_wrDjXp#tIdQ*a%q~6*vCOO?Q8PYu|PrPS%{fl0R3c z>zrt9l2&40|ER+4b*}MyoreN8+7H~0w>PVcbMd*HyIFYo+0wnttq0z-zW7n_;fWKY e{C_(wd&anuIol<+sKo)30E4HipUXO@geCwMH2*~a literal 0 HcmV?d00001 diff --git a/src/Greenshot.Addon.LegacyEditor/Resources/drawArrowToolStripMenuItem.Image.png b/src/Greenshot.Addon.LegacyEditor/Resources/drawArrowToolStripMenuItem.Image.png new file mode 100644 index 0000000000000000000000000000000000000000..98a2fae69c13fdfebec66cc04a4864fc451e32b1 GIT binary patch literal 444 zcmV;t0Ym004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00009 za7bBm000W|000W|0X1R5(walgmoOKp2Jpcd%kIT_|en{SMLxaOVT4 zAT4UCHKz5h+iYC6OE*>!T`1mL@A?XTr+CiL6fC3AS$z3t2F^DpkjTu@_bl)mllvxp z>$lRea4NCIia5*X63<*pPxe}$lQ0ZLrVqagSkyTI_rGB1U%}MDX9^U72f8NrKV*FO zO~!U!Wn}AFhKn^B^q+Kq;ojU$a~%mH9E8)rF$t31gCsWYb(j*9Kp39bd(S}N*a}#m z4OSplJ?Y7PQrD`0&!u=$vWK;g9n1nmk~KMp*c zm8=B3nc@EYozH0$M4v9#20=h@Rz@%Y$K7jJb6UV#TYn-7RQlpC$_UmQQ*`B40b%XV mr85)r__004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0005& zNklT?NA|1kkYhuOG?w0 zFen!e0s;cm92^|-|CN^hf8_4|at#B63sedLQku4004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0003k zNkl&nCd|VD`4P z4h10&!YSZH3F6+P#I_$yn35=gFg$bkk%qvr6|g=VtV7`13RvHr+alUMstd(+%6!v2hy{85ycW7*D0qF@MBLPzgw7$4#-aaa{vGU M07*qoM6N<$f_0^^fdBvi literal 0 HcmV?d00001 diff --git a/src/Greenshot.Addon.LegacyEditor/Resources/fontBoldButton.Image.png b/src/Greenshot.Addon.LegacyEditor/Resources/fontBoldButton.Image.png new file mode 100644 index 0000000000000000000000000000000000000000..b87099ca7094c9e42826393b3de5102f9f9070fb GIT binary patch literal 233 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=DjSK$uZf!>a)(*zM`!7-Hd{EWs+_Fni*}LS8-_Sq*)*z&3dcM$z@`i3-u|N=F13 zpSnBj_|YgA@KH>FZKI+SPhdcuNK3c;3ue*xN7@{V1XO=CG6sCC6JXn9>rkW6*WRVe zzG-KJguVfjmJQb-1v3|p)e?RW*h4DVS{ieNI|RCBaJg_;Z(w@VUQxg((9a}t-~a=| Y>}F;DT>t<8 literal 0 HcmV?d00001 diff --git a/src/Greenshot.Addon.LegacyEditor/Resources/fontItalicButton.Image.png b/src/Greenshot.Addon.LegacyEditor/Resources/fontItalicButton.Image.png new file mode 100644 index 0000000000000000000000000000000000000000..13efb9f8db7321ff392255c9ea0f9ce3cb48871b GIT binary patch literal 192 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=DjSK$uZf!>a)(nB?i=7-Hd{EWujQXr`?ESSp1_sM$l1zobFxI&&fa6n~=&%vtxC zmXs>STym7U(7+pD_L5;mrS^nVEgwAC-5i+vm@=I?rn@j)*~8Lto?)h%fZ(G>Q2~3G i!wMS%8$=BZ7#Lbwjlt8^&t;ucLK6Uir8NHl literal 0 HcmV?d00001 diff --git a/src/Greenshot.Addon.LegacyEditor/Resources/grayscaleHighlightMenuItem.Image.png b/src/Greenshot.Addon.LegacyEditor/Resources/grayscaleHighlightMenuItem.Image.png new file mode 100644 index 0000000000000000000000000000000000000000..3784224b6b18522ad385d8151acfcae6f5fbc86e GIT binary patch literal 362 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8X6a5n0T@!1WD;84s;5 zUTiYhcUEQ`IQKzz;A$l8cZFi1*-KsgI>%MP%!s(;_-f^>C zPS^rg)el`KBYyYzeCij}xX~z`kYn)vz5C+IlfpCh-HYY=bF%2*cY$XukIz{d@^tDnm{r-UW| DlYxsa literal 0 HcmV?d00001 diff --git a/src/Greenshot.Addon.LegacyEditor/Resources/helpToolStripMenuItem1.Image.png b/src/Greenshot.Addon.LegacyEditor/Resources/helpToolStripMenuItem1.Image.png new file mode 100644 index 0000000000000000000000000000000000000000..f4b1e43377a60a90671258d72ed4a049866fcd09 GIT binary patch literal 709 zcmV;$0y_PPP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0006| zNkl+YU#Bvb z5h`P_r4}0vkr>`E^EW|jNrOLNyqF^O!{4F95-C7Gya3vv1#(mUvjAp)6O5M?*Seg# zp>L#WFbRqi@9A~nJ9Rk*cvGL9BiBoxII%;oa{}Qb{T|Isy!-TLQ1*R|;shcE}ooorkC6*jW}72_87Q&m@*wj)x&nv+gzQQu)DpApoIJ2nK9ksMtRS z0>xvHsh%%khZR)bcdG^ynSF*3G-;4tbb&QPuNFuOdWu0R$$tbl*#cC-E+DOSA!(GiyF z173z-cZjg#C5atYu=SRyvc;E>AB#e5Z-hatdJE}vngQqh9^uuyzF>zHY`IakW}Dq5 z*Tkqg(>&A}zk;;q)3N|(+#!;q5sJ&VyRgFwcq2qn={3c=3P(_;ouwL2E*?p z8IkrTskP;fAZD>sDA;_3ShewdJGaE<<=4ArWtusvsqaS?!5MdW!whCu7Hl|25L_#d rSZy)WjMBWwfwLKJnE6BS?*Q==?5RPK4Zqtb00000NkvXXu0mjf^$j`) literal 0 HcmV?d00001 diff --git a/src/Greenshot.Addon.LegacyEditor/Resources/highlightModeButton.Image.png b/src/Greenshot.Addon.LegacyEditor/Resources/highlightModeButton.Image.png new file mode 100644 index 0000000000000000000000000000000000000000..21844b06097d4b3b6d2f774a155b18813ae2f01d GIT binary patch literal 388 zcmV-~0ek+5P)i{)5E9 za!H;qVFp6AQvtwDPxp+2djX0)GClN=#az-oynu8&hz-@wzyNYGOaZbJLC$webJGCv zLE>O}BsNq#D)|2&h;U%25=;O!IUGp0pS#ZRfBH&>|GSPc{LkxvutE6qR|a@MLe&RA zwIjR$a^Ar+4F5w*Aevzq#0MD&k_V}Sc+K-TR68ob=5!c_D!~LWXMxzj1X2y-gD}Xc z$b6_+xJ#y&CRj5Fz`X#BMlcNxWe^5A7oCka7RUlH8^Ac#%N&_+UvJNX%^M&L)sC5v i(Al`;q1q_{3=9CGjt004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0005? zNklc9s0`1qh;UteFrsMz?FbqB95JaXgpp+|4N zoqh85+c^*hv3H!fxghS%SUr(cJ1_tE0dCS($ z1*roY;Nai@cDk*tErX4X4THJ4xr&RMd-aiv_x9a<_8G;1XYapXynOTi4r?3R5;Zk7 z5ex&Yt*zyOh7_+|yZ*n1rgr

2sGpe(~j0V}UD5aDr{0H9e+b>;im+Mon?zz8y z_j}Iyo^yj=l8*9Fo)7+;T=bw16-YwDNkI!Xu!m7(AmL+>k#4PN?2=-w!Kj3PnkcF7ope~GK0Clj)0#5M?`>}>ne2cTY zw0?}C0Txg004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0007x zNklaLP+y8L69xaBbId!zgf9H!F~ipaR&ONJV9(x=A8K7qm3EL+-VwJQXbDk6TY zPDaPcK=k#EU~q60t<-=oYZ>57-r*o0}>LiWNlcFVdjBg-b>`M?0Q<#rsoYKO7Lj@0XR)V&zR{K5hvES5A$P$(xNd;PAAy(r0wqtWV} z8+-ckYknU4&E|ATP~byE_S&tfe#jTXd57V)O`MT-SB!K}=#%9YPrC7ab{4@VQ-&nS z^CaTaOcieFJ&>KG<{d5`SKxh@2fnGf7gkS!x(TUr2a z8)UE=LwN_C|3;ikbVEm#H-1m2VDwcm&+9rn@ojDnUK&k~B*@%B#K%<7K<6MMVIS{s zzi2I|x!480t?STI;=*&KI_T#Hg`&_^sZ5px>D#E_gg+k^bG(Xon4F$o0m~zUc1>>a z@g!8@7$jlqqM+I2i_?eXFhs0Eq#SAw*NN!u>q(INW``hl9TD5jO8ysG=*N2`?2&kQ zOwM6r&0w_@cE%wHTSICOI1%xGV71}SgoHa2@&}Jp z)*xiRPRLP>kO?V}R;d(a0Wl!T9iFGJ=`=k6IF|xSqKFWX%dK#j-bbT!6X0@CU<9eQ z2$@xqR{?@jpa#&xDL|c8Dzr(+o|3$bccehc?}x2m5Vk`hiE<#o9%H0aEGo+10=Zlc z^7%aQJl~~ID7drPY-*u=m)XTgGZLZe0M{!3i=x~&Aj&WAAB~-h_Ms3dVdM=bSi&6v zk)FU$`Q-L_!|U~?rp#s*ClKUN-vGj7GMS`Y_INx=r_zfeK1j$PIEP5BwbppS6&xe(JSl6951J07*qoM6N<$ Ef>+GYIsgCw literal 0 HcmV?d00001 diff --git a/src/Greenshot.Addon.LegacyEditor/Resources/pixelizeToolStripMenuItem.Image.png b/src/Greenshot.Addon.LegacyEditor/Resources/pixelizeToolStripMenuItem.Image.png new file mode 100644 index 0000000000000000000000000000000000000000..9e217f08296335b1e667dc19c703cf06bf88c5d6 GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=ul8;uvD#pL~E>W`cpV zkeU=v590|geualADm~&ndl<_+c1UrqcRN&Z@PKqeN6XQPA8b{6WcErVB=CH2K2+!- qVdJP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00063 zNkl}A&?)CELmzoDG5>%i(Ei*?GO+oG?yX2{((%TNGBnnXa_+= zaIlz8E()!?lBuZ*8cxUs5_6$Z8f_XbD%nFJ%h&fg%n{Ma4$r+0&-e2@!!aWIFX^9H zEXLyTI7=pzER{;>Zzhuwxjx)W9KC@>=g~kSk$B62kNkascQ6=Gzu%|P49t@Qk|e#$ z<#HRnUXQZb>;i{oudllV!6U;B4A=()(P$L<)NZ#)QOeZqYE&o`eruXW5PYlE(r;kE zqGJq*qR1kV$XGg^{(N>;qgt&>S67$R>HO6Nj|?|3V9_xK!r^d)2XoNQ&UUNOP-%Df zdovgeeudzX;Wp&ZF$M%d$W8VWhdYvXF-mIF004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0007~ zNkl8_c&jf2g2G+Bm_&P0k zem;HA$H&c=etw;J=ih%22C+e6j&q;wx1IT<6^PG(FjN}^SWJEB>$dRerOEgH{%<}1 z>wn9+U;jHU|Nh@~_0RwIOTYiOUHJ9C_xkVumeU@dnfdfTn1*U)U@)9~UCL(K-SZP~ z|M_2g$r2p0#5Dr=W^iJ26pZ}{4eFD1Z&wmgbBo5Wiz@Xo8B`1F4 z^T!qY-u=(o^y0gI=an-CU00%@(hLTjm#2WlCfxr0zi9ib|83{L{s-})(hLk*jc1k@ z?SJz%bM2G=_7kq&(P}ye*R0ueHb$%IEZEsir#^vk-;JODL1IuP3=FDON6(ZUc>6zY z>HYs8HdGi4)T)oo1c{+zkT_Hc1A~0=zBAc7U;YnXboW1q4Hd=!a>e_MgBRa+$lUeH zUOs=n0#ulRK_YAG@{kn|zIrTq_+Pj2_#MfNt#B{EfMoV2Bdz+w6>f_joF2|_n%www+FaEo&eEMA^W&Ii97=)9SNeLydId8G~(wD`+vioKmQx-{P9s~ z)3<9tu`P<5zD?jwSRKz5y%=FTGGGgu?aLOv=sb7r@y9$1UVi1;^yfe4#@`=#7Q8sm zRdak9Tlm5X_Mo{+P~|v)-yA6>-|0DwJ~Ngv`OY}Q004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0005x zNkl<4P+D9 zVyrE}SOke7=}%}Kp&4Z;OPyK*|Bl%##8Bx@4MBrk=pR z-`Xk`d0u@U90Zx?tDtvJ;jp@Av51td5=3chCX?_O3aJl$eQ*~D)Z{)GgnS^N#+#c3 z>ga-1Jl}=KBTK!#aMj)2kZYe0PTX#pI=WzqvG|S8rwCpzd~xXUz@EzmvG#UYv)N#o z<0{ZP>2fL5(FKe6OXIg|N1dHeE|;NDC_pxw1xb=1pU*?FScFokR3U1$!nVVqQAZan z;DgxHqa8S%kjv#DlgZR96A2XT+U**3biq7s=d7bcN#YhaG0=!4vdeJ_b#%cjT^yV3 zF@@(l#lUYw&1RW8x?mdrk~xDxNZIY`CGO%9L-jbeSk&33CV@J-Uiih?J#Hm0$uH!@)S(S4<{3-O{4mTCEyEYkEgB%22kZU=$g`tqtJ$ nkQkEwgw_$7QRau>?*RJ%A2SR%-Za%700000NkvXXu0mjfetrX| literal 0 HcmV?d00001 diff --git a/src/Greenshot.Addon.LegacyEditor/Resources/rotateCcwToolstripButton.Image.png b/src/Greenshot.Addon.LegacyEditor/Resources/rotateCcwToolstripButton.Image.png new file mode 100644 index 0000000000000000000000000000000000000000..bbd9b7d3c7b9a4fd0aa8da7d6df4f4e1bcd8ab5e GIT binary patch literal 513 zcmV+c0{;DpP)+5AuF6kh$ z>fxlw>WBY9?BL?-4lp)Rz&riCbU?wWcV0Oc!J0s{YtF?7S~(a0c;=it>z;8@9jp)+ zu#7n{sb$`^3sx})zy>%cA9sMU?GlcfT16dL4`O2l`rezRjf1wnyZZ3`5gorxSebXP&6k%-!g(k-bhBtQZ?m^V~kEwD;2GOAkIAJP*X`o;$z> zsAa9oy#DahvE_&F&$6r9mZhA%&eFbqKMPnB4Csd(lQs-G@ovwB7h5K5yESFivB%5w z15bbrP)=KwyYKRgty|ANU3K*4n~fEVPPMD1uS$?lU#9(L%BvlxZofIS_4JdqPE}i~C1V%*i-u0& zVQ@%#w#+g4`F~^#5(60^6h1o$i0km+AdtEt4Hy^z@ru;#(axFe00000NkvXXu0mjf DCkOCH literal 0 HcmV?d00001 diff --git a/src/Greenshot.Addon.LegacyEditor/Resources/rotateCwToolstripButton.Image.png b/src/Greenshot.Addon.LegacyEditor/Resources/rotateCwToolstripButton.Image.png new file mode 100644 index 0000000000000000000000000000000000000000..ef1e173991862cfad811f486935f2a7d85f80028 GIT binary patch literal 506 zcmVWKcjU(jDxnm z)A!zt-xUz>pHVx1i>7w|X0QuX+*bd8@!{K*s=m`#Ra{r&cZEjwI$_P+jsEE~PgH8; zY)A!(DY>luf9J*L6Bq8jKc?!u=AEh&7FXEU?`KiYUT0}nwJmG;;rp|$Km2q|Eo)sS zNKV~z$N%#WJ{-IR#HGELE~|NNM|FjK`f>%;^i>HJi%zv4z4>P2*0WDn?YsP9t8&_^ zT#&qe;EDgMjy+yBVcV@KdoH}#Vi_)W!n*ks(kQ_*HR8GhL(A0+i9$~rv^IMkxUvl^xaRz`i`^J>~w{eg9 zZ{ZvYW>-zxf$6=H?)Cp;^17i~fq_`i{Xe66&VQe%qW`A$0sl?x{Qui{M1x%d)q)99 zD`!Bp|NkGA-TptWun(*egdKbm{wJ4B#jP0xki7w7gEWGiomM&Xe^JM3{F*@k*#MAc zx8ThGS@jDDYlH!01MI!y|Ce;FBVIEIfDAy!P~kxh7#IL@^8xS?R5jHA0000| literal 0 HcmV?d00001 diff --git a/src/Greenshot.Addon.LegacyEditor/Resources/textHighlightMenuItem.Image.png b/src/Greenshot.Addon.LegacyEditor/Resources/textHighlightMenuItem.Image.png new file mode 100644 index 0000000000000000000000000000000000000000..7ec3d61c88fff8e8bb26b6ed7aadae561703fc02 GIT binary patch literal 395 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8X6a5n0T@!1WD;84s;5 zU}j)oWb|}#46*QEJ82^yqoY9E@((=o8r>FtWD^qVbSsJC?Bwco@m{Vt@1XVzlXVlb zr)DkX=uJ9X|8L^nVv!%k@nvac>3M1IpXh6C*Ea5N$Tm|A3u)VO+(&$6N%r!0Nd;FQ zG|pZa6y9`hPkpe=;|CoUIm`Y##(kX@`dvdMDKwR7_RB!VEjjG-bQjge7Jm^u{_k>H zRm{1UpV{OpMYYYRdhQV49@80}fAs4ze(5>-kK$EU7~7gTZMfN){YCyHTaCyOyK{wG z8eSGI-J18|#Ofd4UIdlM&h-Ca|HJOUj-MKmLC4(=q#wyL&wH!(_Ivz8?VHjbnh(>b nY%#R^=izBxI{)QAecfafkh6wxJ2X-h>J8BE=f(NbMC!K zJ$>2-hjZV#=R5Dd`HpMDS-e){x9_hzK$)J^ z77GT0Ykt3fSJSk0Ra#7~#I%cJ_E0%tnkvoY$z%d9m+L^4=jm4Dw-*oDwkRN0+2L?3 z{xp1Zyk6orlvRm{U<|CX?WLX_u`RVEgq+Xk0rSY|bgsTs!!TNzOa=;t0#Md<9eh3? zxZQ5>dc6<`1RxrXLMoMlTrSsA+8hy&$MZQJk6}9ffOh*4%H=ZD>ka61o*-p!S-w{VzgJCX?dAu<2#VfVMDx zA!HITk1%v>>Ma@2Bk2br$6~RWOhu$`H-PqJi)4Vm&MFhbB?E@CMY4%um5F_fH=Ce6 agt2c*_3X1qcVWi>0000vd(e< literal 0 HcmV?d00001 diff --git a/src/Greenshot.Addon.LegacyEditor/Resources/undoToolStripMenuItem.Image.png b/src/Greenshot.Addon.LegacyEditor/Resources/undoToolStripMenuItem.Image.png new file mode 100644 index 0000000000000000000000000000000000000000..2859363f88c0f9775ac160ff1a399a2c5d14d2c5 GIT binary patch literal 787 zcmV+u1MK{XP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0007> zNklVrM`Y%m#{q3cptZoc&M>%=?%{(~@x4H9!&@cg{>>?giZZ3tjF?ctf3Pyhc1(Y@Dy|8KkS z>wo*D-~YR={`uc=`S<^pbHDz#p8xfK^1Z+R-4;H*WHI$2sv#!*x6X83`3bb`&;P1J zpZ0f~dK|B|P7iub<%UVG%r|B1K%{I{8Q_q^fc>j>}YcV0QucK+-CqV2E# zPq_X2KZtM8d3g#{n!%v!N)$*eYtxJG75m=(kKg$Gv3|#u9H=w{gI3eoGkrIH{%<<< z35-GB0f}igodpLh2xv8(i?W|^^-kv6C;yA~zxk@wcxE|Nih)6``q)g>s-tJnF-RP$ z1Pnl8aZB(2FFWw|KZp$#W?+!d->;Cl>y>@*;@b{##ruq*!Wcllc;A`eMR)&a?|k_m z#D)qpFi7WZR`pwaH^gnxgB-2;!xfU*n~b1Ra3GnnHA=Vf_#KZW5C4a(c<@ysYb(MF zBB^U74LeWyS*>`U>$3dOM3Llm9U{qVyr9wy!pUo*L{iqDaa;NHyVZ&p|BZUiJQhk` zhX_Q5&{b^0NvoYLwtUFdTK!>y!`hddG#d`>;)_{+kT+)e8I6WRcO2He{I0d;!+(p- zAO8y_uQ@NAvaz!te - - - - - - - - - - - - - - - - diff --git a/src/Greenshot.Addon.LegacyEditor/icons/arrow_redo.png b/src/Greenshot.Addon.LegacyEditor/icons/arrow_redo.png deleted file mode 100644 index b1a1819238c6de8f9e50988f4151261fa6ba64ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 349 zcmV-j0iyniP)o>#A+qW*AYQLZl(!&BX$x7Ik;qO170ssEM z@$bKXf%rGW?|(r27bf-TSv zD}TdX0CM*JhkLO)8|Y^+n~Q^sK~hqR;q|N647YFGy>NTZJsWr!5CaSfwJm@a><8NX v2&h?|`NY~_X_4^RN+9OmbDu*=G*+_}E z3jR}&gbG0=R0#?Z-=09KI|YP8=#E5@+>uO|=1VUCOole%Li*0J2^Gy8+;b?&km6gg zf;aDGp1r#I_V|We$e$~WifFF9R7MCMwsmwsME9<<@yx?a+v)qKuKbNe>k1{IrVt}k zbbSs~bXr8Se}V_b4opa0GhLA`RHceaP=N}IElbSa8@d(ij1Q|4CvOirm9q$gGR5;6H z{Qv(y10{fofkH6I3@AO3$p*x`Nil#0jeqs;pT9Ds7{CaN1)$9r#n~kE{`~pF@bLXZ zhF?E_GyM7i!oL`P0x_8Wj$ni2F7#hzWPxfvDaIFS^-G}e*;M)Q6>s#cP zI`Y#S($G6W`W@NI5g|L-MKl0Zmu$m^(0~^Lwo5OO~d#(vPfzuEoyT++I zn$b9r%cFfhHe2K68PkBu*@^<$y+7xQ$wJ~;c5aBx$R=xq*41Wo zhwQus_VOgm0hughj}MhOvs#{>Vg09Y8WxjWUJY5YW zJ?&8eG!59Cz=|E%Ns@013KLWOLV)CObIIj_5{>{#k%TEAMs_GbdDV`x-iYsGH z#=Z{USAQA>NY(}X7=3{K8#Sxb0Y6MkDSd{nPwTp^L>b`TxVmKBiF^NLQ>My+_!0?|)hBPe_#}P$?rlUF;M20U z`oNWE|K(DrsR+gN%g)?+`OfqmmmiA8O_U(YfPnV(E$8mN{jZQVJ-L7LxzmTQJ^!PS zHqDyoKn&^H)Oq>Q$Nzns&wsn~^6P)|vPC&W#R9Kw95|FC`?q!91!~-K_R;^uDLWSs zj7A}sG%2IZxvQP(HeS-nn71T-`ku2F9(?#8KXKbp!Qe&~yaot4r%3=c-cDF`=YPn& z3!hUrzxqFO*Ny)VU;p?Y-nniMuVuI+UIUD>=B$ZZdhM^2Z-JeJcbDl-H)3?9>AG_?ve_7A86r2Wlb?y7)ShoTkzeah}rl)Oq{=a0=sekDkpZ?d4n{v>% zcgJPxg7sgx4Lmup8sO5j^?B5iYcCv|)*VgT_U6A?-trsfIcr`APCfD&B(EM;R_0K# z{lAb!kTg~UrQ ilDgypkCC?sx*7nC4}Mrzlg<+1Y8PEBfUp0jJpx4B>@E+cy3`^(Gw`Mf+2&yxZm<$to~Vpgvg&QKNR z_f#1(r6svZt%iF?s+n<8X?B&!h3g9Dbb8_=MX}!;HiQSAh`bp^WMl~Z-44teO7W_Y zV4thSL{h;rJY7!l3%5J4H1!tIzB`Dv+YxO(haWeausGZYkI8^hWj6mzo=L0{%;yxzh{5!Htr?51 zvG|W62MzC8BZ76hRpCyO2zOn<%e)K>NHge!-~)Ap33OdWw6hsLYbCxGNt0%wk_2z7 zfyYvXheSG)5HRK1VB~%mq7Dmurw#bi@hEcOr3&G1ZiF*$M=&9nB#VNf&Q^r$4G5kp zTURh&s)E0%5&hyVD}sp<72~zmAY`Y(9aqO6CXF%=zFHGzO-A&I(pE}v70YQxCPJ{Y z4L+?5-crdLn3ZRPEs!A4ehEY3ZRpL~w9>@aMN+{F4dI@v&>(QDHQum!mG~E^$OS8l z!7?%Uwib*ROP67Hw`ika)gX-(8Ia`-u_IEhxG7U<13kSsMW+$lbb2dUMm5p6pa}cjgA+U$^mJ^AjD?&bdi)8~y+Q002ovPDHLkV1g8IMc@Dc diff --git a/src/Greenshot.Addon.LegacyEditor/icons/filter_blur.png b/src/Greenshot.Addon.LegacyEditor/icons/filter_blur.png deleted file mode 100644 index 72f2f57e15d7f756df219c13457aca6ea53043ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 461 zcmV;;0W$uHP){ygiN)-MB z@3#)=b}#O!SHIuAzwiB=^ZTB26BA;ObROk}$M0P4f2oc7D3@=$(Tj2<#S@T1aWmGj zixFhR6Oc{uG|q5|Wt99kz@=7V4cBSL4%Y|VV+(aij+S79{NV&}CD z2b<|(ay664iWXplIx&WR)P|6Gt|xeb{a8h5WPr1~v_6cYJ_H!jg`Yce#ODFnukYdP zLqSzUx`n>VG2YEak-;h&sxfLCV1l0Lk1;+Wu!z?otb$>MVB6%z9EoGEn;Ojz@V&5;SjV<0vBGo$@8OEQ z1|QfYnC`M4e&k@rbDw!rqJ(8_LPdH4&j;pR%x#Z>Cb{_uPi}l^3+3AFA)Th(3|y=4;A$gL~qec1omJL6(n>+3yQU%>>?&2 znwKrj*x6-v=kiZyc6L|SUOI4?IWzNp^L^((huO9bC*EIWC+QN#|HUN1?q1U_LC!uA zHn!Fuz0#AI9R;JJaP1cOODe&of_$hfBXZ|hZ=Zg`Epr3{TnSYZunM{wMPhagZ(a|9 zg%9N6na6`+y|Zb`+H{)A*&KmogA2=oZ5WWfB`B%cgNi6aW9RvQ^mlZe?P5UJ;hvr| z%LD?F?GR9=gPRx_(QsiJP{>880(d2$wF(IOfc*_NOvB*I1eQx6EYrnvj#4&_w)Ml1 zIgp~qrT{#85$eLVFzr#m6 z*(TCoYz3Y`BZMzN7C#Y4pdn;nUzJAlRDgu4dU6DYi2_%CMu8Z*Eac!*Hm~MvcmFKg!ew7%&viqfv1lrb_FmV@L@1- z7pTGA&QEHuD$)<$}zSQ)?CbwTV6sY=jXw)>wM!lgW`3k ujry^J)E?9fY`EBm-c_rhW-=Xr1sDK(4@Ni=^w$Ic0000 diff --git a/src/Greenshot.Addon.LegacyEditor/icons/folder_explore.png b/src/Greenshot.Addon.LegacyEditor/icons/folder_explore.png deleted file mode 100644 index 0ba939184d5e2257e380004ed799f00f66a49277..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 679 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 FV1oMlWiS8$ diff --git a/src/Greenshot.Addon.LegacyEditor/icons/help.png b/src/Greenshot.Addon.LegacyEditor/icons/help.png deleted file mode 100644 index 5c870176d4dea68aab9e51166cc3d7a582f326d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 786 zcmV+t1MU2YP)$XgYMs^AIOw1Qr{*Wn)N-{9ma}x2(<~`9Go1=*>YR!KZvrBS zCd!u}@M0og%Ev@_;Z?Kk>Wwv=%h_57zmt2<_1msz_niYE=YRNPpd%02TK9oK1z z>ooPno}v^sikz_|1XHFx_L%~;ljh7i(jiay5F0x*+(9aXXFCl?AdQj5XlQ65%sEv+ ztfe?|YcjPN*@yYtE~ImQh{l|#A6Z8iu>pf43Rj52CzU_dMQm|S2xR62YjQOn+z8WH zaK=!}ggOZi{4pB7SQ=xC0n|vXP_Bkx_a)FeNd}w8U97BNbSWxa^QW-li9BZ#M1!_xE*?wzt^GcoeoL*JGLSe_+l-JT2#2tz!z&^ z_s5anq&^nBklIMwRvcoP3%qs%%Ea?1c{_*V*Xj&~uLu-2Dp1fUN4<0zMo$EH>*U83 zm_9;Vt%-bE{_J_!If!1y=c+`QVZ>0_BPy z+%^pgnv`f8H)Z%0&Tp8&u*MCIC4igNW5MeWM_DHpDNi)Zxz|9XboOnitwFq$ETN=X zj-tkCJnz**Y4k#6_Ty^B=hWo~L!47r`HoP=x&3T1)JLr2t2+#fH zpaxjGcGZ7;_{lE)|2J0z{J*g@3yfiEiLx7{`N!MC|9?DM@&E3+oc})_pZ24HhOism~BU;{p%&j%au{r2AfCnxy- z#c2SBW}pFIuDO5>_;P+J*nrcMgTG_-!u|>BU_XPM4YC=k8Dzk(cYXiwt}gz6a-#o# zteSUrs{Q};Y#&a|&$h(=zu9k%sTmdqAOjwr-thm#%5(oC1{|Jg2o5-qzi~PpW&%tz$N&(2F~b3Dz?~zx|Ig3y z`hUFH1T2n@;VwWo0Hp9xy6FE^31a`Zl<5GIE(2DK(*Tf@4|aRt)eJHe#Q>0hK^j3A in{)AcfncV4LqYJ;f~A77e)Le&XoX7S;=zMgkHL!`?WGs5p4F=$cr@NUi62<;Qn3kEr3ssj zvokxpz9o_xB&Qr)c+4{M_V@n(_jX7e$1uu6Mh3X|z7A|?nwDpbZ6UbYYVCvLq#y_a z3=Ux!V#tAf+B-Z5A;jHox4Yr{esW$?O2tZrLlv-gyLCXLv|yQ$|ML80a|~f%7{)mS)Gf;*D1RPf6Vt8^06fp@HG>eW&fLoRsSl5z z{V7tUuXJEUvJj|GUL)+$KNf`OH>Fm&Fx?!_7+KB(U^xa1Xi28SZz7f-)r5-mAMAzF z6(p16BmiIeKml~zU0Uq7`nnX#^8{z9U9V2q}DxZtF+?()*) zPW}D&x7!VG*RrxW5hIy9Yqt3QA;-u*xH-4Hc6w$N<+}LYkv_n(GPTO3>4sra^Y~PH zM*L!V+a80&8aB;t{Oovy5}V7&ytY_ee0Y1Id^G3WKwA||N|Vy9#uJ>t#^18ANl*9W ur|O>kyoT>5hyKQdyd(erGK~uOEx-Vt$ny@`%@xA{0000l-9VG8;l@D~P$?KN)F(&)Wq5OPDjS z&O{(Y0K>U-e&x=D69lp*WeACNWDHXw1R2=@35I3j8bQiyw@ZclNcVCa6KsKkE0nu& z@8Stdv8vYWEP(OX93+=|YdmLeKH8XD-B~S_5df7+fnj996H!1J3CnjcH5jvMhGF-p zPz0^#D>u*2tlcPHIdWy-9E&4VgK?ULw3&ks%~k__KUWsVi?84LRUOlM0$?NEr3;13 z>~7`i^+G;VXtkA3D51?CZVQ#LIE;d24S{U4$*Bq3PIJoFm(Mj{9e6b|`rv5=Z*=xw zqly#we$1G9F=kBf;eM+-hIP-#e}7B^1N;_X07E|ViZAhhod5s;07*qoM6N<$f&&5u Au>b%7 diff --git a/src/Greenshot.Addon.LegacyEditor/icons/page_copy.png b/src/Greenshot.Addon.LegacyEditor/icons/page_copy.png deleted file mode 100644 index 195dc6d6c365d298e466026b37c1959d96119ea7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 663 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 diff --git a/src/Greenshot.Addon.LegacyEditor/icons/picture_saveas.png b/src/Greenshot.Addon.LegacyEditor/icons/picture_saveas.png deleted file mode 100644 index 0af4a252ec79fa99f00855c82396479e47472a10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 829 zcmV-D1H$}?P)0?J85 zK~#9!eUr;;oMjZofA2T%%=gVC%?$0-wl)c*70Xyfsn9B+8%047)P-(RXekt|P_R(k zl`gt8@h=e6Y%GcwsL+L2+M=XhXhrc-QxcLUO`9=IW+pTFF7JDei$T&@@Y$Ws?>s!u zIp(AD*TzK5NGFvjaXcv9IOZ)xc|JJy+S4Zitf)Ek^6}t9tSJ{DE~qVCc>5MB+30t2LTEhq%}39>&){-CeKJK{J8+N{TUposqZ8XTEe~ z>d2hu;my0LZ9hOOZgcMXUPgvz89TlYk#2lBl#+!cNoclHtdo=%9zTp%!HY*wZZ~f6 zME@|W=^6(|`*>;a7rZFqrQ3ljD3tPoja`aYVP z@yHE~F{mi2f^!*Z>aekkao(}5ZxAOQufjrOmd(A}xpwP2=9U+^aAKM$-vbJ2gvb^c z{dkt8W*ggav3@u)YEnswUCQq2V?49#MSh(5mS5-Q`RvVa82|YM)zTn_fD4~o=ImSV z6Hum;q}VTxPY3tcvvPK#Zh~UYB~aS%Un>gdPdA{KF|OTooOP?uV8a1g{v z1q*^8RIt$g1&Vg4MTn(>gU}D8U zZ{F%b!7ipyReZSsfU0tFpbK}X9}yY)I6ZY0*aqlP6k`ll9E%grKowBZ`VB?NWirH* zNr1$bsTP2GK@CK^25{EmoWnVbvkqUaDpHq0JwO%j9NxN$xeD>swRaBjO#rW_XMK7- z%ZpzIV+<-W0%K?i459TzO_@$V&xw|qN|Tzt5rB=H3x+S9A|6lDO!>0q)q8NIPl$M0 za1DUG5|1bOxtin4@;%!2rYVM&m9_nxKm3@p$Buvr@YW*DGVr1}z=@DZtg$=Vj!;Hg zm-&+^A}WY!#km~-K@gw{e~TfRQVFjG^0v%+u|$S4s3DN@&cEPgvjQjy%d1C`*aCT5 zWFyl9VP`EOS_cR!C58xWYA3!~jw>Ki$8d;SW1I!v_WiHn30@PX?`T+jM%F?tO8AtA>5R;@Y>jE&9zku-w<6S~u(nw@fs zs|pPj1T0Q2xwQWHnl)!b!@^8~HV6HOc#q*fvJ0?j-gEiY9U&gJm)kp|U%wC#nDBko zssf;r8mtKk1pfT_qx|X9C&z-aTDaz-Xy=navHgGl{=EaVaS6_pc=_^W26lFK+m61e zMKH}-!PZBBm179+>8M4}$~m-n}~nwD~SkdEwTrTh^;K zY|r-d^PP72?C}r4us90LANO%-;sZuE2eJV`+ullx^7R0j2S83nP7laH7$~j)q}hS^ hBUFr$((DWnU;xEL=rr*FUHkw5002ovPDHLkV1mZ;^XLEo diff --git a/src/Greenshot.Addon.LegacyEditor/icons/printer.png b/src/Greenshot.Addon.LegacyEditor/icons/printer.png deleted file mode 100644 index a350d1871536eb28fe2949936de1c79c1c26269d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 731 zcmV<10wn#3P)^msfbTI z9jQ^EwMRD5xNEm*sJPjH^k)@gXT@kl5ii6#6jNXX`Yb0kVgq(zut?ZfbRr+DS= z>q{33dTpWN$tl6c7nxE)4Qur1GCxuUnp5Y z5HK(>u&W4&EXz<>UtfnPivJ`O3Zb4K8yl-}7K;Uh5XR!-B2uXo6E#Dr&Ck!D<$0b5 zXEK?PNF*3;w;Rc15`MqGDN4rSaGd2kJ3GNmOiaM%^D*ppJL2&;mX?;95{t!PwOY^e z?d|R0=pOKTy$qMj1$rk8qtS@b(NQ*LUtb@(y1JlNtJzsS-`3U!Ze(Pn>hXBkfzr6} z{3Vv(2AlG1;RQN6I#_mYZVs)jt>6p>!_3go(6&ye1Mdo>SRyz&A^1T#%t=UROW6Bf zz^9CeqErU&3`3<-Da~6HQ^UW&yCT)$Cu diff --git a/src/Greenshot.Addon.LegacyEditor/icons/propertyitemcontainer.gif b/src/Greenshot.Addon.LegacyEditor/icons/propertyitemcontainer.gif deleted file mode 100644 index 2311b4e7e02f291cafa6ae15a00cd1765db2c8e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 75 zcmZ?wbhEHbjEB+I8E=o--Nlj5G&n(GM2+2rQaQE~LV9)_604Zf) a671<;$+kxJf!C)4uQsJEI3L2mU=08?ITup^ diff --git a/src/Greenshot.Addon.LegacyEditor/icons/redo.png b/src/Greenshot.Addon.LegacyEditor/icons/redo.png deleted file mode 100644 index 94adf70a972b431d5258b0f95825207745949b85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 791 zcmV+y1L*vTP)foLomt-*LvBZO!$F-m&zM7$aQ01r*L84o7@2c}*O9?(RMi6KNT*uX)JaiLh+ zr9gizn{M~_K4%-C;FV3j-M8~*zM1*vJ&F(lM|l|gb?N0QFis~h30{ypmkhSEkmgEY=mr?7S|`v{^=iQD^zD?Z z@GDj1k^KbfaXwJM1d7b;I1Y%dS}LK@Xu#5SRLf>L`umSFUxdJ# z7Hk*cvP<+&@Q=O2tYAN-dCYkxU^?`U!KY-nwwsMx$th($07*qoM6N<$f>-@FSpWb4 diff --git a/src/Greenshot.Addon.LegacyEditor/icons/shadow.png b/src/Greenshot.Addon.LegacyEditor/icons/shadow.png deleted file mode 100644 index 2d67bccaeb950af4a49b0a0e9f18eef51fbc2ade..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1289 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstPBjy3;{kN zu0U}UJAYIA01M|(8}}$1k7#@Ecn6;Zx8O{Vuw1Xm0-vZN-W|dXHI8*j;J(`}jg1_VV?R)K|ZpCwo9DV#5 zW*h&{NoHla-tM`H;r4FcZ31@xyCoJBnU%gXy?!p6VTI7zHTQ3Z^@9?Qr>mdKI;Vst E02y?d6951J diff --git a/src/Greenshot.Addon.LegacyEditor/icons/shape_arrow_add.png b/src/Greenshot.Addon.LegacyEditor/icons/shape_arrow_add.png deleted file mode 100644 index 503a4cb044beb3deb0a1b1454309dc540c7d7861..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 468 zcmV;_0W1EAP)kn;D)lt2}%G6yYrJ zh%9Dc;1&j9Muu5)B!GhKC7!;n?ALi1g;`l{-BeTq3T^jvaSW-r^>(5?A7h}zk#zH> zK3$hZB@E^lwN=+Gs1ETEx#Rp^jm!PQr3aq(&Md#t68pN;E4Xg*{hI#``?YSp@jpGo zJW56@?iXjZzc}}cvRUtpRdf%P`@2V$SP7ko`Woc%>77i>0!JnfX3c;$hvtk*-*2DR zZQpR~Ec@nL+OZ8O3XDM?wz~JfX=d#Wzp$Pyib8ede diff --git a/src/Greenshot.Addon.LegacyEditor/icons/shape_copy.png b/src/Greenshot.Addon.LegacyEditor/icons/shape_copy.png deleted file mode 100644 index 218a5cc32afe4f7d171efa28e240e823ff051055..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 482 zcmV<80UiE{P)snr!!zk2nRx>&7NWG0!(VzJJm9_CTqAE7#kh>N<|oXz8}K$y?_pHzmc=g-dO(Fz=| z==x@#3b&SJF1JhXCbugJsI2;a0Vzb%Y2xTD!(r=Sx7(fd8@t^u5rHKB Y0AuB;fNgQ1WdHyG07*qoM6N<$f*SkI1ONa4 diff --git a/src/Greenshot.Addon.LegacyEditor/icons/shape_ellipse_add.png b/src/Greenshot.Addon.LegacyEditor/icons/shape_ellipse_add.png deleted file mode 100644 index c3f5de326de8b215d4d5be534a202a086bc59ae7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 652 zcmV;70(1R|P)VtoR>P<9{goAHom@v@iz|We z27my98}J=yz~6r`O;G>C*ibLQT*AVFFaRKc;0FBu^N->0-+yrbqZ-1%@bU8=hL2wl zFns^{f#LJFpA24=&uX@{Uu*#gAe2~0op9s7z6vkIMpzUAi8mj%GjQ;qU@+D+VUQ70 zW!Qgp1H*|chZ!E+dD9CJKqx8k?;oJ1KR_B77JvUTfL-(l$bR}}1A~EvKEq$8zYO}4 zt_*(}e=}I4BIW00D%Nloymi5=mPBjsMKdObpCG74JTMV7U717{kS9M;Izx=QDKdN@U<* zW(P+eKmaiklN&8^q*`PY`Kzt;Y#3A}3>j{}I1fybM;M;m|JVxVtoR>P<9{goAHom@v@iz|We z27my98}J=yz~6r`O;G>C*ibLQT*AVFFaRKc;0FBu^N->0-+yrbqZ-1%AbEW;gUFSI z3{0=?F{p5hG3?s(qQY(0pALWkLWzac2{-=htMEc>ghe5cki5QxLG$A_1`WqR26jbl zhVPelF7y zf$QFS1_gOx=KqZU3jqQMB^u|IXfh^rUHi|#$jG3rzzq*fu8&U`I3yGq7`%!Qes7Ru zVE)Ib01!YJNqIpTB$1@`-}ukW%*4P9RH4Bo%JA*NRtD}(SqwkFzhL+Vl>hvRnc*)p z!!v*YVk9Ov9*K}{VB_VkmKFZP!ou`~;q&W13=dv1|NZ^re;q&oF%p}dk4DHD4KXdtL}<~t2}Ex@6K0rVQQYv5lE{E|EiYycB#@Q((SL2 z4Q9Pc^4j;ATU$D$fnGaheHpuTlCrLZtKSU})T?OM6qd<9VAPqI?pp$2*}G3yn*h+H zG_U|8YK3KTSuT@jM2-RgL=FR7rDTBjuMQIN=y4(*&8wB#?rb*ZKGI`0i;btk9nY^R xPA^W#Ws5t1{>sBaYXn#X%s?L4JKwzzeFE-Gfo}EGmJk2{002ovPDHLkV1oR{wBY~% diff --git a/src/Greenshot.Addon.LegacyEditor/icons/shape_paste.png b/src/Greenshot.Addon.LegacyEditor/icons/shape_paste.png deleted file mode 100644 index f1ef5a8787680a2af67bf98294afd5718bc41018..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 574 zcmV-E0>S->P)bLN~gGh`cpR}ao#1b%QZHs==G zlN=I5FYlkb0z3t7wvM0R-jfBkH@*TeK6RBh3y=7{y#=rYEYB^r-}M8G0L#~J-#IhZ znxOgl9oyvIHUPGny)?t{^aX6+{q+9BE#Lsa*|F9!I=|Kl1?{)b!3NBRzhTVo`Wi>4 zPLBeke@hqvK#3z5o;-;%ur;W2cZbgA&ObdE0kDK3P_u`cy~^PKq5=fUW}x%OsTaiu znUshyd1IdWrM8tOQbf87kSH3+K$%bpOivyGAk#>_FJ)4&y0+B=AR3&)A#9^6Lj%Q- z0;$|*sEZ!CB_T6Vl2zktPt9N%OW>kUS*iA!sLDoSpTV=w zD=QPg<^Bc9YmWy;SF~&YTs$yCK4j}2zFu{N$xNb-EK_6_f4YnG2VzIdG@=N3FaQ7m M07*qoM6N<$g4H|nGynhq diff --git a/src/Greenshot.Addon.LegacyEditor/icons/shape_square_add.png b/src/Greenshot.Addon.LegacyEditor/icons/shape_square_add.png deleted file mode 100644 index 31edfce597565363903c26264756f3c81ec47a9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 539 zcmV+$0_6RPP) zY*Mj<2s&tEg;ElO(UR|;EE2 zmXINo=@2a3IhPCp07@s1V2lL@EF*&lAQF82)gDa{Hg;|h*v8J&*;~c&MS43 zq~ic-3K8n{ABI4)^_J$J_x#;!&}#2->rws5>!%xweLw^e6Zxy>MrU8S(^#cAS)+38 zI#Z{ndAGSj?bFsmxmr3==qE4{Mkz!%`;`!Bn5~@^u3VfY3c>8z3XyauU!DWF-v@*V znN-fTh{%%cwzfH(9OL$-2LL?0`GO0lX8?)=Zy-K@Z}&P&!eIpL{%){YUuUDf#(d=^ zOKG)0V9a1umt$k0Jbw?dtCan?Z{f`5P_f}=W1 zcR?s*SJH~8i%N%3Y%e82j7^h}FLK`xhmhW;EhL*~dN{o2_i~=|!2d2|AYQJP^*}4F z(SVeI2CWoIgH(Mj6+FF@Hik$C0i){4%CG&m=0He2_B=8ObqJ8-?;S{W6rc|@N0kuA z0L1w7C=sq}h0Ws$+lAYCGqAI^vK;_3CR;!2Z+UYVAjI(CpC8NK?hby+nsVbOBK=RE zf5i0S&h>i}R6gCUpPtd_5OB!F>TkW2a!$HY+vIPpL!%jR(ThPx;KVH)Cf(9j^>gTf z7(QcWI$3CUMXu=A0CKzaZf@gN1|Hw!*_m%VI$xlM&V&GYGzX?(5Vaz>i5S=BQW$1G ze5GiUdZb4(h=)EE2mXIOT z>O*kn@_5z<062PJ1Y;~PU>OFh(i2W?ykPpuRrXGu zX8S{(Pp=p6E}q@9Rq8r05k?6j+`3AL6lUMMN1Qx!kkz9_x58Sax;000000NkvXXu0mjf^cC)W diff --git a/src/Greenshot.Addon.LegacyEditor/icons/shape_square_fillcolor.png b/src/Greenshot.Addon.LegacyEditor/icons/shape_square_fillcolor.png deleted file mode 100644 index 71225b6c621344920a6b4849433e3153cc6fade3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 551 zcmV+?0@(eDP)XQidd*+u3||>fgmKOxa$9Sa8_$8xDkmkEQ(3tG-DF&RMxrkyQj3uAaWhk7$4Xdf|G z8iO#x&s%&7#r@sJ#}fce90XL^Y%VhY<2AeX4$W4N?yZO`^QU<@{fW8_xx0P2`o|fM z&lVd2WALm?&UH9@Y8(^xC*JqkbWP0EQ9iqa;n-eZUWr@Y)AH;DwSx|wFk*9Sk)6E? zkMF+%pmx~!?2H0<#rS2HFtFC){LBQ^a*3V23Sl<~z_*``;M_%f-TdpbeEG2arWZI1 pCbB*T+P&goVd`Mx(!z@+fZu*|4+(2kZu9^E002ovPDHLkV1h?R@Zb^}|6b=Y6y(;Y{!a!g z@UQp#@Aw}>L3(}s|7f5BUjeuKZvQRjV<2U7yvu*H{aAbvQ6K!@3oKzW z-{Qa8d3gae1^)HE{~f^!v<1}u>;4xnKvUpW540I-w9J3a{{r=B3T*2g{_BH1CtaZO zpZ`6V0*V5g1e5i;`_=Z#_e=H*@8|93RG@lX;D!K7TKswwko8{x0000Lqe|nkKbQs_~+l>*^DmDAMWj~mUJxYIg!Y)N!CM> z*|4K5Ht^-f_7L$FCexixdjt52Tl@RZ*Uva>Q1k4JWQaI}X)BZFgk#kXYh2c7M=Y2% zb%9wMqv@UIPmXLQ3>!P=&XsNB&bzy-Rg&!qLxqHkn_JS2roP0D42$O5*ZZZ4S5#O3 zS5L7v`uFFj@zmIa?CjtFpP!!}@t6B>{l7ns$F3AI9^EO(U@`aN<^{{<{s#Js!PC{x JWt~$(695Iyd-ebT diff --git a/src/Greenshot.Addon.LegacyEditor/icons/text_italic.png b/src/Greenshot.Addon.LegacyEditor/icons/text_italic.png deleted file mode 100644 index 8482ac8cb1eb8bc8edbf64085108f0fbd204fadb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 223 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^zbpD<_bdI{u9mbgZg z1m~xflqVLYGB~E>C#5QQ<|d}62BjvZR2H60wE-$B^mK6y(Kw&{<9vg>Q9!g~ne(gm zmj4swoA@7?D86%i^8WzK9JM17E&sp&Z#dpHfz$E-U9ks&4?Z9Gyg!%0k2Q{M-Tz#> z2OnD>vrPZ*#{EHKLq)>Jcx{H|Ovdb&|4aQZWSipI{El%e^Cxx{^9vSw28s;a3IDB= TS1%U=TF&6<>gTe~DWM4fm>N^1 diff --git a/src/Greenshot.Addon.LegacyEditor/icons/text_underline.png b/src/Greenshot.Addon.LegacyEditor/icons/text_underline.png deleted file mode 100644 index 90d0df2868871c6cf1bab25affe0d9f8b3f98eac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 273 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^zbpD<_bdI{u9mbgZg z1m~xflqVLYGB~E>C#5QQ<|d}62BjvZR2H60wE-$x?CIhdqH#X?$N2_%BY~9*Y!?2h z{rUe=9fy8l?U(-(m`sFEeV_iPeWNmK)A{6xz&-Zw?GGia|0}^&^gUfcv*1X`gnjmc zo{g-_np*x&^x*npDC+Wt-z8{4+sXs`@BiMP%+Rv-k;3)Ae_+S0!x%EHv-|4^N|MkDje{TP~{@MQ}vm3aX7|tvG V&AV6mZa&bt44$rjF6*2UngI1lb~69~ diff --git a/src/Greenshot.Addon.LegacyEditor/icons/textfield_delete.png b/src/Greenshot.Addon.LegacyEditor/icons/textfield_delete.png deleted file mode 100644 index c7bd58b21797817803b49d3b2b53323e17fda625..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 335 zcmV-V0kHmwP)4KV{At)KG$c#_utJ;JncjQ{ugvi#ZM%3MWsnm-aQTLHB3 hKFHZ17lAZ`!~r__K9H;fm5Cv2NE#EOG3t)!La2eLNGP^K zKUnE^>`Z5-^YIR!3USFK_q{jo+?;pLyYCXZuETLY$`~#`|NRW71yxmNNRsRz2x0>N zBN*NLdFvP-@vxYtsyRhbKxs7K)4k3;0##AMI2qAvBJ@Zo$aeYNjKjuKtbuca(wo^4 zM>f*@9a)7aZp|MkAdSIboEqy0<2*Wc&UGp1Wc(BmtR!hrud6^Pzy=(Q|HcK+8LI^z zg07DrvCxoZsFr28eZ?2f=LE1jEU@^!@FSJwD+ca&v-U1;i%;Y!W-QV+F!yfjK||Bx z2<7$^ND_KdU^7tykJk#buM+V@vh=1QibJ}l4Q*yC(f5m)Z^d#=+)i`Q>9e{NS)OQG zkdc6~Qeby7z?JK8cd9Rpd&3x0JjbD8eHK+dUQHIW)v^FC8|^^seA5Cdh(CF;^k0dv z8Y4K&h&;bblFiqr11=U$5LOn|g_;Cnz5Zx?v_JSOUn7=QHveF9oHm;QOA06zB(V-A z69uHn1iY#NFDbjK|6QUa(dnIdU)!hdGc+7fOhII9$f!RwB)J z_w_(lV)Xv2k<x0>i?0tk=JOQ`8ZJ^ti(JYM3LO^QmXF-*fSd##sr;J`#S7UGe z&YRa^O)--#gG2t#;j=!3ZJeyZT0;k`nSjj8*I!g#h~jO^aku$$=KNYEwAy(sYx| zA{~n%XGWjn^Et2kE@>(`bl~IOd+zzZ^K&nH`$7SeMxO!Do+H};#^!MkKpc{D4#WFu z`vQFa0?_aGi4(z$2?KzG18~qZtO){CL=iYiB7Se-<0{m@t8vt?alCSf)n^dG;!hkG z*S+#8pHEHzp65K!__=5w4u^LnNm>~RASLxTJHquK3Ru1e+;%RhqG`oFih>ZzYpN?EKZR-ozB+7yZhj<3xMRF zC;AWJ>}&EY5v6$cC?UyiU!hQlx7%%IM80|bh+~$8+~E;;5gydoaAub0C3^qZ#kRUv zp;mwF!|r%27Gv~!{hrNc+p=1%+>h=ue5!r(HV-d>!teJ_y#hk$y}@9(tkGxyXM<+5 z39VL(JR6OlM)vD;Is&a$`vFxdl_>$GQh9~rIG@w$d|fOS7gTsCrBVqRjV7qoI#^md z4=nrg>+WuC1q%Qwm&>zXfs}1Fn-^fdQTcox+-^50{zZ;Pqf9cH6hfg8Z8DjlTCI{c zj7B3^EEd3b?{M5TQt>P~5{WR0L}Cx`>!(zp9=AM64u```DwUGSw=sJED?rG>V30|t z(^jb z4`0v}DG1te)wmeb(>p90leRz?_mO+^JKy=v&2<29Od6?F%9%(c8los#f*@G`-%W&* z$)uBj2i@u-@SgX}gtyWPe6d*|w6h%R? zScK2#Yn%$sum0cy>90DmY*i{1XqpClEtktsRTZ)lCUe z<FogV^*tm>8*AlX za4oiR!&85LrobG57qUHUX#{>Vz(RHpB5|@>9O6N$jqB8>%($0wxE5R3)b>Y~xtCo$ zCgEk&A?_#IxHdN)9tqre^o{ho4{?hmPuf@^@I3-wncaRd%|~O3xbrKY=&TiwPYkJroM{;WUQTuMY8vpg}f4o)2%U3C;eEDoiEh?94d(rV57VIF#8VqzW$HrDC|#U`x@QDbgi zVl)t9GGz&YY#D?gc%>hISA+_EBpnXt#pnC`p6@xw0$8TCbULjhlgVx(kuc)%xbgqq zR5+DNDFRN0!y)7Gm}oT0i39}h4h928qY?Rho^UvPGJ#kuW|-Amtrn`Pmd&+bFo@sp z$LI4IQw7BG?|#2ewOS<<3VjL$0=lMY^m;wqZujv5kx1l%Sl;V&Iy4#$ip3&@LV2!7vhhN=PCz%^9v24`qb(+m4W?!q-&~=?ssf5GfnAmJKV;3bvpDm0(NhahZ=&^sqo6Odj6>)Dq_3p~4~ zvb`d3Mydwjt&Df^hVmLtI2x=U&h9(JVYX-!y~z3zi;1>=LY;o(bL$(Yf$lf)dMf0-u^0HrpTG Wk@)HE*94aU0000m+BBgry{~j2fHLegbHP( zrgXNbr0}2;^nywdjLjZe?uxtrd3D(pZH@fFFc0{BW_~jxoO1w7-VX;6vK@ROA$$R6 zEmo;Ht-Mj|>5jUy{bQ^V5@53LRI8AgLpUm|m+15sqcz@QtVSo|oz7ArM8?pIn+>gN z0b=4_b5O|4A*;Q+vc9Vqr~%3V155*NV~@gTz}KSUiKB-uJzjMZ>5%Q#n24H!V{ zTY(LLAE*NAHZ}C#wnj%Bw5OFIkRhkkAW#kDC3j9Wm0YXRaXlyyp>#mVfYG)eC;@ab zDb=T-BCAY4LI(Z@GOTr2V_A{pRwSmz+8Be>CjAw(=gnbVWAeguvZa93JmL(EDxv1m z0OP4q=fpAK1Mq!C2`OkEn37o;m#wF#(t(8Pu#S?2f#x<~4EO{@fmm`p9veD6RZ_jp z@Au4};q&`XuKEYgIiB4((kgxOs#YdqJw0fY>9^K_agEu5+$#k;w#%I2N>n_?)YIqu z`tq&#_^p?-%K*U0^}|7+9U(&k0?s;=r=uCZ%)H9_edH8wK}gB(nUB1FFk+2Ol%BXV zHoFY`D~2x|2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Greenshot.Addon.Lutim/ILutimConfiguration.cs b/src/Greenshot.Addon.Lutim/Configuration/ILutimConfiguration.cs similarity index 92% rename from src/Greenshot.Addon.Lutim/ILutimConfiguration.cs rename to src/Greenshot.Addon.Lutim/Configuration/ILutimConfiguration.cs index 1e193f83b..0428717fa 100644 --- a/src/Greenshot.Addon.Lutim/ILutimConfiguration.cs +++ b/src/Greenshot.Addon.Lutim/Configuration/ILutimConfiguration.cs @@ -21,17 +21,16 @@ using System.Collections.Generic; using System.ComponentModel; -using Dapplo.Ini; -using Dapplo.InterfaceImpl.Extensions; +using Dapplo.Config.Ini; using Greenshot.Addons.Core; -namespace Greenshot.Addon.Lutim { +namespace Greenshot.Addon.Lutim.Configuration { ///

/// Description of LutimConfiguration. /// [IniSection("Lutim")] [Description("Greenshot Lutim Plugin configuration")] - public interface ILutimConfiguration : IIniSection, IDestinationFileConfiguration, ITransactionalProperties, INotifyPropertyChanged + public interface ILutimConfiguration : IIniSection, IDestinationFileConfiguration { [Description("Url to Lutim system.")] [DefaultValue("https://lut.im/")] diff --git a/src/Greenshot.Addon.Lutim/ILutimLanguage.cs b/src/Greenshot.Addon.Lutim/Configuration/ILutimLanguage.cs similarity index 94% rename from src/Greenshot.Addon.Lutim/ILutimLanguage.cs rename to src/Greenshot.Addon.Lutim/Configuration/ILutimLanguage.cs index 726b39934..6c4275296 100644 --- a/src/Greenshot.Addon.Lutim/ILutimLanguage.cs +++ b/src/Greenshot.Addon.Lutim/Configuration/ILutimLanguage.cs @@ -22,7 +22,7 @@ #endregion using System.ComponentModel; -using Dapplo.Language; +using Dapplo.Config.Language; namespace Greenshot.Addon.Lutim { diff --git a/src/Greenshot.Addon.Lutim/Configuration/Impl/LutimConfigurationImpl.cs b/src/Greenshot.Addon.Lutim/Configuration/Impl/LutimConfigurationImpl.cs new file mode 100644 index 000000000..cd0481f3c --- /dev/null +++ b/src/Greenshot.Addon.Lutim/Configuration/Impl/LutimConfigurationImpl.cs @@ -0,0 +1,65 @@ +#region Greenshot GNU General Public License + +// Greenshot - a free and open source screenshot tool +// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom +// +// For more information see: http://getgreenshot.org/ +// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 1 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#endregion + +using System.Collections.Generic; +using Dapplo.Config.Ini; +using Greenshot.Addon.Lutim.Entities; +using Greenshot.Core.Enums; + +namespace Greenshot.Addon.Lutim.Configuration.Impl +{ + internal class LutimConfigurationImpl : IniSectionBase, ILutimConfiguration + { + #region Implementation of IFileConfiguration + + public string OutputFilePath { get; set; } + public bool OutputFileAllowOverwrite { get; set; } + public string OutputFileFilenamePattern { get; set; } + public OutputFormats OutputFileFormat { get; set; } + public bool OutputFileReduceColors { get; set; } + public bool OutputFileAutoReduceColors { get; set; } + public int OutputFileReduceColorsTo { get; set; } + public int OutputFileJpegQuality { get; set; } + public bool OutputFilePromptQuality { get; set; } + public uint OutputFileIncrementingNumber { get; set; } + public string OptimizePNGCommand { get; set; } + public string OptimizePNGCommandArguments { get; set; } + + #endregion + + #region Implementation of IDestinationFileConfiguration + + public bool UseOwnSettings { get; set; } + + #endregion + + #region Implementation of ILutimConfiguration + + public string LutimUrl { get; set; } + public bool CopyLinkToClipboard { get; set; } + public IDictionary LutimUploadHistory { get; set; } + public IDictionary RuntimeLutimHistory { get; set; } + + #endregion + } +} diff --git a/src/Greenshot.Addon.Lutim/Configuration/Impl/LutimLanguageImpl.cs b/src/Greenshot.Addon.Lutim/Configuration/Impl/LutimLanguageImpl.cs new file mode 100644 index 000000000..59887426f --- /dev/null +++ b/src/Greenshot.Addon.Lutim/Configuration/Impl/LutimLanguageImpl.cs @@ -0,0 +1,58 @@ +#region Greenshot GNU General Public License + +// Greenshot - a free and open source screenshot tool +// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom +// +// For more information see: http://getgreenshot.org/ +// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 1 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#endregion + +using System.Diagnostics.CodeAnalysis; +using Dapplo.Config.Language; + +namespace Greenshot.Addon.Lutim.Configuration.Impl +{ + /// + /// This implements ILutimLanguage and takes care of storing, all setters are replaced via AutoProperties.Fody + /// + [SuppressMessage("ReSharper", "UnassignedGetOnlyAutoProperty")] +#pragma warning disable CS1591 + public class LutimLanguageImpl : LanguageBase, ILutimLanguage + { + #region Implementation of ILutimLanguage + + public string Cancel { get; } + public string ClearQuestion { get; } + public string CommunicationWait { get; } + public string Configure { get; } + public string DeleteQuestion { get; } + public string DeleteTitle { get; } + public string History { get; } + public string LabelClear { get; } + public string LabelUploadFormat { get; } + public string LabelUrl { get; } + public string Ok { get; } + public string SettingsTitle { get; } + public string UploadFailure { get; } + public string UploadMenuItem { get; } + public string UploadSuccess { get; } + public string UsePageLink { get; } + public string AnonymousAccess { get; } + + #endregion + } +} diff --git a/src/Greenshot.Addon.Lutim/FodyWeavers.xml b/src/Greenshot.Addon.Lutim/FodyWeavers.xml new file mode 100644 index 000000000..7f5a26669 --- /dev/null +++ b/src/Greenshot.Addon.Lutim/FodyWeavers.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/Greenshot.Addon.Lutim/FodyWeavers.xsd b/src/Greenshot.Addon.Lutim/FodyWeavers.xsd new file mode 100644 index 000000000..061979a03 --- /dev/null +++ b/src/Greenshot.Addon.Lutim/FodyWeavers.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + 'true' to run assembly verification on the target assembly after all weavers have been finished. + + + + + A comma separated list of error codes that can be safely ignored in assembly verification. + + + + + \ No newline at end of file diff --git a/src/Greenshot.Addon.Lutim/Greenshot.Addon.Lutim.csproj b/src/Greenshot.Addon.Lutim/Greenshot.Addon.Lutim.csproj index ea7b988c0..3b46c3669 100644 --- a/src/Greenshot.Addon.Lutim/Greenshot.Addon.Lutim.csproj +++ b/src/Greenshot.Addon.Lutim/Greenshot.Addon.Lutim.csproj @@ -1,149 +1,20 @@ - - - + + - {D106F86C-CD3D-44FF-B151-2A5D47268B5C} - {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library Greenshot.Addon.Lutim Greenshot.Addon.Lutim - v4.6.1 - Properties - False - False - 4 - false - Always - - - - 3.5 - - + net471;netcoreapp3.0 - - false - latest - - - false - - - false - latest - - - false - - + - - ..\packages\Autofac.4.8.1\lib\net45\Autofac.dll - - - ..\packages\Autofac.Extras.AttributeMetadata.4.0.1\lib\net45\Autofac.Extras.AttributeMetadata.dll - - - ..\packages\Autofac.Mef.4.0.0\lib\net45\Autofac.Integration.Mef.dll - - - ..\packages\Caliburn.Micro.Core.3.2.0\lib\net45\Caliburn.Micro.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\Caliburn.Micro.Platform.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\Caliburn.Micro.Platform.Core.dll - - - ..\packages\CommonServiceLocator.2.0.4\lib\net46\CommonServiceLocator.dll - - - ..\packages\ControlzEx.3.0.2.4\lib\net45\ControlzEx.dll - - - ..\packages\Dapplo.Addons.1.0.79\lib\net461\Dapplo.Addons.dll - - - ..\packages\Dapplo.Addons.Bootstrapper.1.0.79\lib\net461\Dapplo.Addons.Bootstrapper.dll - - - ..\packages\Dapplo.CaliburnMicro.1.0.75\lib\net461\Dapplo.CaliburnMicro.dll - - - ..\packages\Dapplo.CaliburnMicro.Configuration.1.0.75\lib\net461\Dapplo.CaliburnMicro.Configuration.dll - - - ..\packages\Dapplo.CaliburnMicro.Dapp.1.0.75\lib\net461\Dapplo.CaliburnMicro.Dapp.dll - - - ..\packages\Dapplo.CaliburnMicro.Menu.1.0.75\lib\net461\Dapplo.CaliburnMicro.Menu.dll - - - ..\packages\Dapplo.CaliburnMicro.Security.1.0.75\lib\net461\Dapplo.CaliburnMicro.Security.dll - - - ..\packages\Dapplo.CaliburnMicro.Translations.1.0.75\lib\net461\Dapplo.CaliburnMicro.Translations.dll - - - ..\packages\Dapplo.HttpExtensions.0.8.46\lib\net46\Dapplo.HttpExtensions.dll - - - ..\packages\Dapplo.HttpExtensions.JsonNet.0.8.46\lib\net46\Dapplo.HttpExtensions.JsonNet.dll - - - ..\packages\Dapplo.Ini.0.5.31\lib\net45\Dapplo.Ini.dll - - - ..\packages\Dapplo.InterfaceImpl.0.2.12\lib\net45\Dapplo.InterfaceImpl.dll - - - ..\packages\Dapplo.Language.0.5.31\lib\net45\Dapplo.Language.dll - - - ..\packages\Dapplo.Log.1.2.1\lib\net45\Dapplo.Log.dll - - - ..\packages\Dapplo.Utils.1.0.161\lib\net45\Dapplo.Utils.dll - - - ..\packages\Dapplo.Windows.0.5.109\lib\net461\Dapplo.Windows.dll - - - ..\packages\Dapplo.Windows.Clipboard.0.5.109\lib\net461\Dapplo.Windows.Clipboard.dll - - - ..\packages\Dapplo.Windows.Common.0.5.109\lib\net461\Dapplo.Windows.Common.dll - - - ..\packages\Dapplo.Windows.DesktopWindowsManager.0.5.109\lib\net461\Dapplo.Windows.DesktopWindowsManager.dll - - - ..\packages\Dapplo.Windows.Dpi.0.5.109\lib\net461\Dapplo.Windows.Dpi.dll - - - ..\packages\Dapplo.Windows.Gdi32.0.5.109\lib\net461\Dapplo.Windows.Gdi32.dll - - - ..\packages\Dapplo.Windows.Input.0.5.109\lib\net461\Dapplo.Windows.Input.dll - - - ..\packages\Dapplo.Windows.Kernel32.0.5.109\lib\net461\Dapplo.Windows.Kernel32.dll - - - ..\packages\Dapplo.Windows.Messages.0.5.109\lib\net461\Dapplo.Windows.Messages.dll - - - ..\packages\Dapplo.Windows.User32.0.5.109\lib\net461\Dapplo.Windows.User32.dll - - - ..\packages\MahApps.Metro.1.6.5\lib\net46\MahApps.Metro.dll - + + PreserveNewest + + + + - - ..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll - @@ -152,107 +23,38 @@ - - ..\packages\System.Reactive.4.1.0\lib\net46\System.Reactive.dll - - - ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.1\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll - - - ..\packages\System.Threading.Tasks.Extensions.4.5.1\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll - - - ..\packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll - - - ..\packages\ControlzEx.3.0.2.4\lib\net45\System.Windows.Interactivity.dll - + - - - - - - - - - - - - - Never - - - Never - - - Never - - - Never - - - + + - + + + + - - {bf35190d-b2a7-4cfa-b397-51cb384cf0d7} - Greenshot.Core - - - {f041c685-eb96-4ed1-9ace-0f5bd836610f} - Greenshot.Gfx - - - {5b924697-4dcd-4f98-85f1-105cb84b7341} - Greenshot.Addons - + + + + + + + + + all + runtime; build; native; contentfiles; analyzers + - - - - - - - - - - - - - - - - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - - - - mkdir "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons" -copy "$(ProjectDir)bin\$(Configuration)\$(ProjectName).dll" "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons\" -copy "$(ProjectDir)bin\$(Configuration)\$(ProjectName).pdb" "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons\" -mkdir "$(SolutionDir)Greenshot\bin\$(Configuration)\Languages\$(ProjectName)" -copy "$(ProjectDir)\Languages\*.xml" "$(SolutionDir)Greenshot\bin\$(Configuration)\Languages\$(ProjectName)" - \ No newline at end of file diff --git a/src/Greenshot.Addon.Lutim/LutimAddonModule.cs b/src/Greenshot.Addon.Lutim/LutimAddonModule.cs index eb7fa3f57..3e7e483bb 100644 --- a/src/Greenshot.Addon.Lutim/LutimAddonModule.cs +++ b/src/Greenshot.Addon.Lutim/LutimAddonModule.cs @@ -24,8 +24,10 @@ using Autofac; using Dapplo.Addons; using Dapplo.CaliburnMicro.Configuration; -using Dapplo.Ini; -using Dapplo.Language; +using Dapplo.Config.Ini; +using Dapplo.Config.Language; +using Greenshot.Addon.Lutim.Configuration; +using Greenshot.Addon.Lutim.Configuration.Impl; using Greenshot.Addon.Lutim.ViewModels; using Greenshot.Addons.Components; @@ -37,17 +39,19 @@ namespace Greenshot.Addon.Lutim protected override void Load(ContainerBuilder builder) { builder - .Register(context => IniConfig.Current.Get()) + .RegisterType() .As() + .As() .SingleInstance(); builder - .Register(context => LanguageLoader.Current.Get()) + .RegisterType() .As() + .As() .SingleInstance(); builder - .RegisterType() + .RegisterType() .As() .SingleInstance(); builder diff --git a/src/Greenshot.Addon.Lutim/LutimApi.cs b/src/Greenshot.Addon.Lutim/LutimApi.cs index e82c73746..53b185615 100644 --- a/src/Greenshot.Addon.Lutim/LutimApi.cs +++ b/src/Greenshot.Addon.Lutim/LutimApi.cs @@ -27,6 +27,7 @@ using System.Threading; using System.Threading.Tasks; using Dapplo.HttpExtensions; using Dapplo.Log; +using Greenshot.Addon.Lutim.Configuration; using Greenshot.Addon.Lutim.Entities; using Greenshot.Addons.Core; using Greenshot.Addons.Interfaces; diff --git a/src/Greenshot.Addon.Lutim/LutimDestination.cs b/src/Greenshot.Addon.Lutim/LutimDestination.cs index 62a396451..dfbcb0668 100644 --- a/src/Greenshot.Addon.Lutim/LutimDestination.cs +++ b/src/Greenshot.Addon.Lutim/LutimDestination.cs @@ -28,6 +28,7 @@ using Autofac.Features.OwnedInstances; using Dapplo.Addons; using Dapplo.Log; using Dapplo.Windows.Clipboard; +using Greenshot.Addon.Lutim.Configuration; using Greenshot.Addon.Lutim.Entities; using Greenshot.Addons; using Greenshot.Addons.Components; diff --git a/src/Greenshot.Addon.Lutim/Properties/AssemblyInfo.cs b/src/Greenshot.Addon.Lutim/Properties/AssemblyInfo.cs deleted file mode 100644 index 23bd8e87a..000000000 --- a/src/Greenshot.Addon.Lutim/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Greenshot - a free and open source screenshot tool - * Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom - * - * For more information see: http://getgreenshot.org/ - * The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -using System.Reflection; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Greenshot.Addon.Lutim")] -[assembly: AssemblyDescription("A plugin to upload images to Lutim")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Greenshot")] -[assembly: AssemblyProduct("Lutim Plugin")] -[assembly: AssemblyCopyright("Copyright (C) 2007-2018")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// This sets the default COM visibility of types in the assembly to invisible. -// If you need to expose a type to COM, use [ComVisible(true)] on that type. -[assembly: ComVisible(false)] - -// The assembly version, replaced by build scripts -[assembly: AssemblyVersion("1.3.0.0")] -[assembly: AssemblyInformationalVersion("1.3.0.0")] -[assembly: AssemblyFileVersion("1.3.0.0")] \ No newline at end of file diff --git a/src/Greenshot.Addon.Lutim/ViewModels/LutimConfigViewModel.cs b/src/Greenshot.Addon.Lutim/ViewModels/LutimConfigViewModel.cs index f31293de7..c047d4c16 100644 --- a/src/Greenshot.Addon.Lutim/ViewModels/LutimConfigViewModel.cs +++ b/src/Greenshot.Addon.Lutim/ViewModels/LutimConfigViewModel.cs @@ -24,6 +24,7 @@ using System.Reactive.Disposables; using Dapplo.CaliburnMicro.Configuration; using Dapplo.CaliburnMicro.Extensions; +using Greenshot.Addon.Lutim.Configuration; using Greenshot.Addons.Core.Enums; using Greenshot.Addons.ViewModels; diff --git a/src/Greenshot.Addon.Lutim/ViewModels/LutimHistoryViewModel.cs b/src/Greenshot.Addon.Lutim/ViewModels/LutimHistoryViewModel.cs index 1b2501f42..f1f0038da 100644 --- a/src/Greenshot.Addon.Lutim/ViewModels/LutimHistoryViewModel.cs +++ b/src/Greenshot.Addon.Lutim/ViewModels/LutimHistoryViewModel.cs @@ -31,6 +31,7 @@ using Caliburn.Micro; using Dapplo.CaliburnMicro.Extensions; using Dapplo.Log; using Dapplo.Windows.Clipboard; +using Greenshot.Addon.Lutim.Configuration; using Greenshot.Addon.Lutim.Entities; using Greenshot.Addons; using Greenshot.Addons.Extensions; diff --git a/src/Greenshot.Addon.Lutim/packages.config b/src/Greenshot.Addon.Lutim/packages.config deleted file mode 100644 index 4dac2319d..000000000 --- a/src/Greenshot.Addon.Lutim/packages.config +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Greenshot.Addon.OCR/IOCRConfiguration.cs b/src/Greenshot.Addon.OCR/Configuration/IOcrConfiguration.cs similarity index 83% rename from src/Greenshot.Addon.OCR/IOCRConfiguration.cs rename to src/Greenshot.Addon.OCR/Configuration/IOcrConfiguration.cs index fe2ff9d84..352f95e5d 100644 --- a/src/Greenshot.Addon.OCR/IOCRConfiguration.cs +++ b/src/Greenshot.Addon.OCR/Configuration/IOcrConfiguration.cs @@ -24,18 +24,21 @@ #region Usings using System.ComponentModel; -using Dapplo.Ini; +using System.Diagnostics.CodeAnalysis; +using Dapplo.Config.Ini; #endregion -namespace Greenshot.Addon.OCR +namespace Greenshot.Addon.OCR.Configuration { /// /// OCR Configuration. /// [IniSection("OCR")] [Description("Greenshot OCR Plugin configuration")] - public interface IOCRConfiguration : IIniSection + [SuppressMessage("ReSharper", "UnusedMember.Global")] +#pragma warning disable CS1591 + public interface IOcrConfiguration : IIniSection { [Description("Language for OCR")] [DefaultValue ("miLANG_ENGLISH")] diff --git a/src/Greenshot.Addon.OCR/IOcrLanguage.cs b/src/Greenshot.Addon.OCR/Configuration/IOcrLanguage.cs similarity index 81% rename from src/Greenshot.Addon.OCR/IOcrLanguage.cs rename to src/Greenshot.Addon.OCR/Configuration/IOcrLanguage.cs index 7aa37cf84..6d436a516 100644 --- a/src/Greenshot.Addon.OCR/IOcrLanguage.cs +++ b/src/Greenshot.Addon.OCR/Configuration/IOcrLanguage.cs @@ -17,13 +17,15 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -using System.ComponentModel; -using Dapplo.Language; +using System.Diagnostics.CodeAnalysis; +using Dapplo.Config.Language; -namespace Greenshot.Addon.OCR +namespace Greenshot.Addon.OCR.Configuration { [Language("Ocr")] - public interface IOcrLanguage : ILanguage, INotifyPropertyChanged + [SuppressMessage("ReSharper", "UnusedMember.Global")] +#pragma warning disable CS1591 + public interface IOcrLanguage : ILanguage { string Language { get; } string OrientImage { get; } diff --git a/src/Greenshot.Addon.OCR/Configuration/Impl/OcrConfigurationImpl.cs b/src/Greenshot.Addon.OCR/Configuration/Impl/OcrConfigurationImpl.cs new file mode 100644 index 000000000..c37107396 --- /dev/null +++ b/src/Greenshot.Addon.OCR/Configuration/Impl/OcrConfigurationImpl.cs @@ -0,0 +1,38 @@ +#region Greenshot GNU General Public License + +// Greenshot - a free and open source screenshot tool +// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom +// +// For more information see: http://getgreenshot.org/ +// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 1 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#endregion + +using Dapplo.Config.Ini; + +namespace Greenshot.Addon.OCR.Configuration.Impl +{ + internal class OcrConfigurationImpl : IniSectionBase, IOcrConfiguration + { + #region Implementation of IOcrConfiguration + + public string Language { get; set; } + public bool Orientimage { get; set; } + public bool StraightenImage { get; set; } + + #endregion + } +} diff --git a/src/Greenshot.Addon.OCR/Configuration/Impl/OcrLanguageImpl.cs b/src/Greenshot.Addon.OCR/Configuration/Impl/OcrLanguageImpl.cs new file mode 100644 index 000000000..b3f90b33d --- /dev/null +++ b/src/Greenshot.Addon.OCR/Configuration/Impl/OcrLanguageImpl.cs @@ -0,0 +1,44 @@ +#region Greenshot GNU General Public License + +// Greenshot - a free and open source screenshot tool +// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom +// +// For more information see: http://getgreenshot.org/ +// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 1 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#endregion + +using System.Diagnostics.CodeAnalysis; +using Dapplo.Config.Language; + +namespace Greenshot.Addon.OCR.Configuration.Impl +{ + /// + /// This implements IOcrLanguage and takes care of storing, all setters are replaced via AutoProperties.Fody + /// +#pragma warning disable CS1591 + [SuppressMessage("ReSharper", "UnassignedGetOnlyAutoProperty")] + public class OcrLanguageImpl : LanguageBase, IOcrLanguage + { + #region Implementation of IOcrLanguage + + public string Language { get; } + public string OrientImage { get; } + public string StraightenImage { get; } + + #endregion + } +} diff --git a/src/Greenshot.Addon.OCR/FodyWeavers.xml b/src/Greenshot.Addon.OCR/FodyWeavers.xml new file mode 100644 index 000000000..7f5a26669 --- /dev/null +++ b/src/Greenshot.Addon.OCR/FodyWeavers.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/Greenshot.Addon.OCR/FodyWeavers.xsd b/src/Greenshot.Addon.OCR/FodyWeavers.xsd new file mode 100644 index 000000000..061979a03 --- /dev/null +++ b/src/Greenshot.Addon.OCR/FodyWeavers.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + 'true' to run assembly verification on the target assembly after all weavers have been finished. + + + + + A comma separated list of error codes that can be safely ignored in assembly verification. + + + + + \ No newline at end of file diff --git a/src/Greenshot.Addon.OCR/Greenshot.Addon.OCR.csproj b/src/Greenshot.Addon.OCR/Greenshot.Addon.OCR.csproj index 8cb9b537d..a2c97f38c 100644 --- a/src/Greenshot.Addon.OCR/Greenshot.Addon.OCR.csproj +++ b/src/Greenshot.Addon.OCR/Greenshot.Addon.OCR.csproj @@ -1,133 +1,19 @@ - - - + + - {C6988EE8-2FEE-4349-9F09-F9628A0D8965} - {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library Greenshot.Addon.OCR Greenshot.Addon.OCR - v4.6.1 - Properties - False - False - 4 - false - OnBuildSuccess - - - - 3.5 - - + net471;netcoreapp3.0 - - false - latest - - - false - - - false - latest - - - false - - + - - ..\packages\Autofac.4.8.1\lib\net45\Autofac.dll - - - ..\packages\Autofac.Extras.AttributeMetadata.4.0.1\lib\net45\Autofac.Extras.AttributeMetadata.dll - - - ..\packages\Autofac.Mef.4.0.0\lib\net45\Autofac.Integration.Mef.dll - - - ..\packages\Caliburn.Micro.Core.3.2.0\lib\net45\Caliburn.Micro.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\Caliburn.Micro.Platform.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\Caliburn.Micro.Platform.Core.dll - - - ..\packages\CommonServiceLocator.2.0.4\lib\net46\CommonServiceLocator.dll - - - ..\packages\Dapplo.Addons.1.0.79\lib\net461\Dapplo.Addons.dll - - - ..\packages\Dapplo.Addons.Bootstrapper.1.0.79\lib\net461\Dapplo.Addons.Bootstrapper.dll - - - ..\packages\Dapplo.CaliburnMicro.1.0.75\lib\net461\Dapplo.CaliburnMicro.dll - - - ..\packages\Dapplo.CaliburnMicro.Configuration.1.0.75\lib\net461\Dapplo.CaliburnMicro.Configuration.dll - - - ..\packages\Dapplo.CaliburnMicro.Dapp.1.0.75\lib\net461\Dapplo.CaliburnMicro.Dapp.dll - - - ..\packages\Dapplo.CaliburnMicro.Menu.1.0.75\lib\net461\Dapplo.CaliburnMicro.Menu.dll - - - ..\packages\Dapplo.CaliburnMicro.Security.1.0.75\lib\net461\Dapplo.CaliburnMicro.Security.dll - - - ..\packages\Dapplo.CaliburnMicro.Translations.1.0.75\lib\net461\Dapplo.CaliburnMicro.Translations.dll - - - ..\packages\Dapplo.Ini.0.5.31\lib\net45\Dapplo.Ini.dll - - - ..\packages\Dapplo.InterfaceImpl.0.2.12\lib\net45\Dapplo.InterfaceImpl.dll - - - ..\packages\Dapplo.Language.0.5.31\lib\net45\Dapplo.Language.dll - - - ..\packages\Dapplo.Log.1.2.1\lib\net45\Dapplo.Log.dll - - - ..\packages\Dapplo.Utils.1.0.161\lib\net45\Dapplo.Utils.dll - - - ..\packages\Dapplo.Windows.0.5.109\lib\net461\Dapplo.Windows.dll - - - ..\packages\Dapplo.Windows.Clipboard.0.5.109\lib\net461\Dapplo.Windows.Clipboard.dll - - - ..\packages\Dapplo.Windows.Common.0.5.109\lib\net461\Dapplo.Windows.Common.dll - - - ..\packages\Dapplo.Windows.DesktopWindowsManager.0.5.109\lib\net461\Dapplo.Windows.DesktopWindowsManager.dll - - - ..\packages\Dapplo.Windows.Dpi.0.5.109\lib\net461\Dapplo.Windows.Dpi.dll - - - ..\packages\Dapplo.Windows.Gdi32.0.5.109\lib\net461\Dapplo.Windows.Gdi32.dll - - - ..\packages\Dapplo.Windows.Input.0.5.109\lib\net461\Dapplo.Windows.Input.dll - - - ..\packages\Dapplo.Windows.Kernel32.0.5.109\lib\net461\Dapplo.Windows.Kernel32.dll - - - ..\packages\Dapplo.Windows.Messages.0.5.109\lib\net461\Dapplo.Windows.Messages.dll - - - ..\packages\Dapplo.Windows.User32.0.5.109\lib\net461\Dapplo.Windows.User32.dll - - + + PreserveNewest + + + + + @@ -135,104 +21,29 @@ - - ..\packages\System.Reactive.4.1.0\lib\net46\System.Reactive.dll - - - ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.1\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll - - - ..\packages\System.Threading.Tasks.Extensions.4.5.1\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll - - - ..\packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\System.Windows.Interactivity.dll - + + - - - - - - - - Form - - - SettingsForm.cs - - - - Always - - - Always - - - Always - - - Always - - - + + + + - - {bf35190d-b2a7-4cfa-b397-51cb384cf0d7} - Greenshot.Core - - - {f041c685-eb96-4ed1-9ace-0f5bd836610f} - Greenshot.Gfx - - - {5B924697-4DCD-4F98-85F1-105CB84B7341} - Greenshot.Addons - + + + + + + all + runtime; build; native; contentfiles; analyzers + - - mkdir "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons" -copy "$(ProjectDir)bin\$(Configuration)\$(ProjectName).dll" "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons\" -copy "$(ProjectDir)bin\$(Configuration)\$(ProjectName).pdb" "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons\" -mkdir "$(SolutionDir)Greenshot\bin\$(Configuration)\Languages\$(ProjectName)" -copy "$(ProjectDir)\Languages\*.xml" "$(SolutionDir)Greenshot\bin\$(Configuration)\Languages\$(ProjectName)" - - - False - Off - 4194304 - x86 - 4096 - - - False - Off - 4194304 - AnyCPU - 4096 - - - Full - true - DEBUG;TRACE - False - True - - - None - false - TRACE - True - False - - \ No newline at end of file + diff --git a/src/Greenshot.Addon.OCR/OCRDestination.cs b/src/Greenshot.Addon.OCR/OCRDestination.cs index e6e02e5ff..a96242fae 100644 --- a/src/Greenshot.Addon.OCR/OCRDestination.cs +++ b/src/Greenshot.Addon.OCR/OCRDestination.cs @@ -30,6 +30,7 @@ using System.IO; using System.Reflection; using System.Windows.Forms; using Dapplo.Log; +using Greenshot.Addon.OCR.Configuration; using Greenshot.Addons; using Greenshot.Addons.Components; using Greenshot.Addons.Core; @@ -51,11 +52,11 @@ namespace Greenshot.Addon.OCR private static readonly LogSource Log = new LogSource(); private const int MinWidth = 130; private const int MinHeight = 130; - private readonly IOCRConfiguration _ocrConfiguration; + private readonly IOcrConfiguration _ocrConfiguration; private readonly string _ocrCommand; public OcrDestination( - IOCRConfiguration ocrConfiguration, + IOcrConfiguration ocrConfiguration, ICoreConfiguration coreConfiguration, IGreenshotLanguage greenshotLanguage, ExportNotification exportNotification diff --git a/src/Greenshot.Addon.OCR/OcrAddonModule.cs b/src/Greenshot.Addon.OCR/OcrAddonModule.cs index af7bbda80..f8559fc68 100644 --- a/src/Greenshot.Addon.OCR/OcrAddonModule.cs +++ b/src/Greenshot.Addon.OCR/OcrAddonModule.cs @@ -26,8 +26,10 @@ using System.IO; using Autofac; using Dapplo.Addons; using Dapplo.Addons.Bootstrapper.Resolving; -using Dapplo.Ini; -using Dapplo.Language; +using Dapplo.Config.Ini; +using Dapplo.Config.Language; +using Greenshot.Addon.OCR.Configuration; +using Greenshot.Addon.OCR.Configuration.Impl; using Greenshot.Addons.Components; namespace Greenshot.Addon.OCR @@ -63,17 +65,19 @@ namespace Greenshot.Addon.OCR if (HasModi()) { builder - .Register(context => IniConfig.Current.Get()) - .As() + .RegisterType() + .As() + .As() .SingleInstance(); builder - .Register(context => LanguageLoader.Current.Get()) + .RegisterType() .As() + .As() .SingleInstance(); builder - .RegisterType() + .RegisterType() .As() .SingleInstance(); } diff --git a/src/Greenshot.Addon.OCR/Properties/AssemblyInfo.cs b/src/Greenshot.Addon.OCR/Properties/AssemblyInfo.cs deleted file mode 100644 index 631cee31a..000000000 --- a/src/Greenshot.Addon.OCR/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,53 +0,0 @@ -#region Greenshot GNU General Public License - -// Greenshot - a free and open source screenshot tool -// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom -// -// For more information see: http://getgreenshot.org/ -// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 1 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -#endregion - -#region Usings - -using System.Reflection; -using System.Runtime.InteropServices; - -#endregion - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. - -[assembly: AssemblyTitle("Greenshot.Addon.OCR")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Greenshot")] -[assembly: AssemblyProduct("OCR Plugin")] -[assembly: AssemblyCopyright("Copyright (C) 2007-2018")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// This sets the default COM visibility of types in the assembly to invisible. -// If you need to expose a type to COM, use [ComVisible(true)] on that type. - -[assembly: ComVisible(false)] - -// The assembly version, replaced by build scripts - -[assembly: AssemblyVersion("1.3.0.0")] -[assembly: AssemblyInformationalVersion("1.3.0.0")] -[assembly: AssemblyFileVersion("1.3.0.0")] \ No newline at end of file diff --git a/src/Greenshot.Addon.OCR/SettingsForm.cs b/src/Greenshot.Addon.OCR/SettingsForm.cs index 37b09b7d0..f2b6bf18e 100644 --- a/src/Greenshot.Addon.OCR/SettingsForm.cs +++ b/src/Greenshot.Addon.OCR/SettingsForm.cs @@ -24,6 +24,7 @@ #region Usings using System; +using Greenshot.Addon.OCR.Configuration; using Greenshot.Addons.Controls; #endregion @@ -35,9 +36,9 @@ namespace Greenshot.Addon.OCR ///
public partial class SettingsForm : GreenshotForm { - private readonly IOCRConfiguration config; + private readonly IOcrConfiguration config; - public SettingsForm(string[] languages, IOcrLanguage ocrLanguage, IOCRConfiguration config) : base(ocrLanguage) + public SettingsForm(string[] languages, IOcrLanguage ocrLanguage, IOcrConfiguration config) : base(ocrLanguage) { // // The InitializeComponent() call is required for Windows Forms designer support. diff --git a/src/Greenshot.Addon.OCR/packages.config b/src/Greenshot.Addon.OCR/packages.config deleted file mode 100644 index 2219eeae9..000000000 --- a/src/Greenshot.Addon.OCR/packages.config +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Greenshot.Addon.OcrCommand/COMWrapper.cs b/src/Greenshot.Addon.OcrCommand/COMWrapper.cs index e94c6fdff..67f9c14db 100644 --- a/src/Greenshot.Addon.OcrCommand/COMWrapper.cs +++ b/src/Greenshot.Addon.OcrCommand/COMWrapper.cs @@ -515,7 +515,7 @@ namespace Greenshot.Addon.OcrCommand #region Clean up /// - /// If is not called, we need to make + /// If dispose() is not called, we need to make /// sure that the COM object is still cleaned up. /// ~COMWrapper() diff --git a/src/Greenshot.Addon.OcrCommand/Greenshot.Addon.OcrCommand.csproj b/src/Greenshot.Addon.OcrCommand/Greenshot.Addon.OcrCommand.csproj index 8f000b3ca..1eb22b4d6 100644 --- a/src/Greenshot.Addon.OcrCommand/Greenshot.Addon.OcrCommand.csproj +++ b/src/Greenshot.Addon.OcrCommand/Greenshot.Addon.OcrCommand.csproj @@ -1,43 +1,12 @@ - - - + + - Debug - AnyCPU - {7B8E9055-A054-4290-B537-075EBFDF8BDF} - WinExe + net471 Greenshot.Addon.OcrCommand GreenshotOCRCommand - v4.6.1 - 512 - true - - - x86 - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - latest - - - x86 - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - latest - - - - - + + @@ -51,32 +20,5 @@ - - - - - - - - - - - - - - - - - - - - - - - - - mkdir "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons" -copy "$(ProjectDir)bin\$(Configuration)\$(TargetFileName)" "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons\" -copy "$(ProjectDir)bin\$(Configuration)\$(TargetFileName).config" "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons\" - - \ No newline at end of file + + diff --git a/src/Greenshot.Addon.OcrCommand/Properties/AssemblyInfo.cs b/src/Greenshot.Addon.OcrCommand/Properties/AssemblyInfo.cs deleted file mode 100644 index 5d6c1a08d..000000000 --- a/src/Greenshot.Addon.OcrCommand/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Greenshot.Addon.OcrCommand")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Greenshot")] -[assembly: AssemblyProduct("Greenshot.Addon.OcrCommand")] -[assembly: AssemblyCopyright("Copyright © Greenshot 2018")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("7b8e9055-a054-4290-b537-075ebfdf8bdf")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/src/Greenshot.Addon.Office/IOfficeConfiguration.cs b/src/Greenshot.Addon.Office/Configuration/IOfficeConfiguration.cs similarity index 90% rename from src/Greenshot.Addon.Office/IOfficeConfiguration.cs rename to src/Greenshot.Addon.Office/Configuration/IOfficeConfiguration.cs index 6cd1dc4a1..48391b1e5 100644 --- a/src/Greenshot.Addon.Office/IOfficeConfiguration.cs +++ b/src/Greenshot.Addon.Office/Configuration/IOfficeConfiguration.cs @@ -24,21 +24,21 @@ #region Usings using System.ComponentModel; -using Dapplo.Ini; -using Dapplo.InterfaceImpl.Extensions; +using Dapplo.Config.Ini; using Greenshot.Addon.Office.OfficeInterop; using Microsoft.Office.Interop.PowerPoint; #endregion -namespace Greenshot.Addon.Office +namespace Greenshot.Addon.Office.Configuration { /// /// Office configuration /// +#pragma warning disable CS1591 [IniSection("Office")] [Description("Greenshot Office configuration")] - public interface IOfficeConfiguration : IIniSection, ITransactionalProperties, INotifyPropertyChanged + public interface IOfficeConfiguration : IIniSection { [Description("Default type for emails. (Text, Html)")] [DefaultValue(EmailFormat.Html)] diff --git a/src/Greenshot.Addon.Office/IOfficeLanguage.cs b/src/Greenshot.Addon.Office/Configuration/IOfficeLanguage.cs similarity index 83% rename from src/Greenshot.Addon.Office/IOfficeLanguage.cs rename to src/Greenshot.Addon.Office/Configuration/IOfficeLanguage.cs index d9dcc257e..37b1cf872 100644 --- a/src/Greenshot.Addon.Office/IOfficeLanguage.cs +++ b/src/Greenshot.Addon.Office/Configuration/IOfficeLanguage.cs @@ -18,10 +18,14 @@ // along with this program. If not, see . using System.ComponentModel; -using Dapplo.Language; +using Dapplo.Config.Language; -namespace Greenshot.Addon.Office +namespace Greenshot.Addon.Office.Configuration { + /// + /// This implements IOfficeLanguage and takes care of storing, all setters are replaced via AutoProperties.Fody + /// +#pragma warning disable CS1591 [Language("Office")] public interface IOfficeLanguage : ILanguage, INotifyPropertyChanged { diff --git a/src/Greenshot.Addon.Office/Configuration/Impl/OfficeConfigurationImpl.cs b/src/Greenshot.Addon.Office/Configuration/Impl/OfficeConfigurationImpl.cs new file mode 100644 index 000000000..e8c1fd02b --- /dev/null +++ b/src/Greenshot.Addon.Office/Configuration/Impl/OfficeConfigurationImpl.cs @@ -0,0 +1,50 @@ +#region Greenshot GNU General License + +// Greenshot - a free and open source screenshot tool +// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom +// +// For more information see: http://getgreenshot.org/ +// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General License as published by +// the Free Software Foundation, either version 1 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General License for more details. +// +// You should have received a copy of the GNU General License +// along with this program. If not, see . + +#endregion + +using Dapplo.Config.Ini; +using Greenshot.Addon.Office.OfficeInterop; +using Microsoft.Office.Interop.PowerPoint; + +namespace Greenshot.Addon.Office.Configuration.Impl +{ + /// + /// This implements IOfficeConfiguration and takes care of storing, all setters are replaced via AutoProperties.Fody + /// +#pragma warning disable CS1591 + internal class OfficeConfigurationImpl : IniSectionBase, IOfficeConfiguration + { + #region Implementation of IOfficeConfiguration + + public EmailFormat OutlookEmailFormat { get; set; } + public string EmailSubjectPattern { get; set; } + public string EmailTo { get; set; } + public string EmailCC { get; set; } + public string EmailBCC { get; set; } + public bool OutlookAllowExportInMeetings { get; set; } + public bool WordLockAspectRatio { get; set; } + public bool PowerpointLockAspectRatio { get; set; } + public PpSlideLayout PowerpointSlideLayout { get; set; } + + #endregion + } +} diff --git a/src/Greenshot.Addon.Office/Configuration/Impl/OfficeLanguageImpl.cs b/src/Greenshot.Addon.Office/Configuration/Impl/OfficeLanguageImpl.cs new file mode 100644 index 000000000..0039d2200 --- /dev/null +++ b/src/Greenshot.Addon.Office/Configuration/Impl/OfficeLanguageImpl.cs @@ -0,0 +1,52 @@ +#region Greenshot GNU General Public License + +// Greenshot - a free and open source screenshot tool +// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom +// +// For more information see: http://getgreenshot.org/ +// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 1 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#endregion + +using System.Diagnostics.CodeAnalysis; +using Dapplo.Config.Language; + +namespace Greenshot.Addon.Office.Configuration.Impl +{ + /// + /// This implements IOfficeLanguage and takes care of storing, all setters are replaced via AutoProperties.Fody + /// +#pragma warning disable CS1591 + [SuppressMessage("ReSharper", "UnassignedGetOnlyAutoProperty")] + public class OfficeLanguageImpl : LanguageBase, IOfficeLanguage + { + #region Implementation of IOfficeLanguage + + public string SettingsTitle { get; } + public string WordLockaspect { get; } + public string OutlookAllowmeetings { get; } + public string OutlookSubjectPattern { get; } + public string OutlookEmailFormat { get; } + public string OutlookEmailIncludeSignature { get; } + public string OutlookEmailTo { get; } + public string OutlookEmailCc { get; } + public string OutlookEmailBcc { get; } + public string PowerpointSlideLayout { get; } + public string PowerpointLockaspect { get; } + + #endregion + } +} diff --git a/src/Greenshot.Addon.Office/Destinations/ExcelDestination.cs b/src/Greenshot.Addon.Office/Destinations/ExcelDestination.cs index 4ea0f7e83..cfc40cbab 100644 --- a/src/Greenshot.Addon.Office/Destinations/ExcelDestination.cs +++ b/src/Greenshot.Addon.Office/Destinations/ExcelDestination.cs @@ -50,6 +50,12 @@ namespace Greenshot.Addon.Office.Destinations private readonly string _exePath; private readonly string _workbookName; + /// + /// Constructor used to wire dependencies + /// + /// ICoreConfiguration + /// IGreenshotLanguage + /// ExportNotification public ExcelDestination( ICoreConfiguration coreConfiguration, IGreenshotLanguage greenshotLanguage, @@ -64,6 +70,13 @@ namespace Greenshot.Addon.Office.Destinations } } + /// + /// protected constructor to accept a workbook name too + /// + /// string + /// ICoreConfiguration + /// IGreenshotLanguage + /// ExportNotification protected ExcelDestination(string workbookName, ICoreConfiguration coreConfiguration, IGreenshotLanguage greenshotLanguage, @@ -73,17 +86,22 @@ namespace Greenshot.Addon.Office.Destinations _workbookName = workbookName; } + /// public override string Description => _workbookName ?? "Microsoft Excel"; + /// public override bool IsDynamic => true; + /// public override bool IsActive => base.IsActive && _exePath != null; + /// public override Bitmap GetDisplayIcon(double dpi) { return PluginUtils.GetCachedExeIcon(_exePath, !string.IsNullOrEmpty(_workbookName) ? IconWorkbook : IconApplication, dpi > 100); } + /// public override IEnumerable DynamicDestinations() { foreach (var workbookName in ExcelExporter.GetWorkbooks()) @@ -92,6 +110,7 @@ namespace Greenshot.Addon.Office.Destinations } } + /// protected override ExportInformation ExportCapture(bool manuallyInitiated, ISurface surface, ICaptureDetails captureDetails) { var exportInformation = new ExportInformation(Designation, Description); diff --git a/src/Greenshot.Addon.Office/Destinations/OneNoteDestination.cs b/src/Greenshot.Addon.Office/Destinations/OneNoteDestination.cs index b511fbed5..ca569839b 100644 --- a/src/Greenshot.Addon.Office/Destinations/OneNoteDestination.cs +++ b/src/Greenshot.Addon.Office/Destinations/OneNoteDestination.cs @@ -31,6 +31,7 @@ using System.Linq; using System.Runtime.InteropServices; using Dapplo.Log; using Greenshot.Addon.Office.OfficeExport; +using Greenshot.Addon.Office.OfficeExport.Entities; using Greenshot.Addons; using Greenshot.Addons.Components; using Greenshot.Addons.Core; @@ -40,6 +41,9 @@ using Greenshot.Addons.Interfaces; namespace Greenshot.Addon.Office.Destinations { + /// + /// This is the OneNote destination, taking care of exporting + /// [Destination("OneNote", DestinationOrder.OneNote)] public class OneNoteDestination : AbstractDestination { @@ -49,6 +53,12 @@ namespace Greenshot.Addon.Office.Destinations private readonly string _exePath; private readonly OneNotePage _page; + /// + /// Constructor used for dependency wiring + /// + /// ICoreConfiguration + /// IGreenshotLanguage + /// ExportNotification public OneNoteDestination( ICoreConfiguration coreConfiguration, IGreenshotLanguage greenshotLanguage, @@ -63,7 +73,14 @@ namespace Greenshot.Addon.Office.Destinations } } - protected OneNoteDestination(OneNotePage page, + /// + /// Constructor used for dependency wiring, and being able to specify a page + /// + /// OneNotePage + /// ICoreConfiguration + /// IGreenshotLanguage + /// ExportNotification + protected OneNoteDestination(OneNotePage page, ICoreConfiguration coreConfiguration, IGreenshotLanguage greenshotLanguage, ExportNotification exportNotification @@ -72,6 +89,7 @@ namespace Greenshot.Addon.Office.Destinations _page = page; } + /// public override string Description { get @@ -84,15 +102,19 @@ namespace Greenshot.Addon.Office.Destinations } } + /// public override bool IsDynamic => true; + /// public override bool IsActive => base.IsActive && _exePath != null; + /// public override Bitmap GetDisplayIcon(double dpi) { return PluginUtils.GetCachedExeIcon(_exePath, IconApplication, dpi > 100); } + /// public override IEnumerable DynamicDestinations() { try @@ -114,6 +136,7 @@ namespace Greenshot.Addon.Office.Destinations return Enumerable.Empty(); } + /// protected override ExportInformation ExportCapture(bool manuallyInitiated, ISurface surface, ICaptureDetails captureDetails) { var exportInformation = new ExportInformation(Designation, Description); diff --git a/src/Greenshot.Addon.Office/Destinations/OutlookDestination.cs b/src/Greenshot.Addon.Office/Destinations/OutlookDestination.cs index 25428d7d1..2feb71e9d 100644 --- a/src/Greenshot.Addon.Office/Destinations/OutlookDestination.cs +++ b/src/Greenshot.Addon.Office/Destinations/OutlookDestination.cs @@ -29,12 +29,14 @@ using System.IO; using System.Text.RegularExpressions; using System.Windows.Forms; using Dapplo.Log; +using Greenshot.Addon.Office.Configuration; using Greenshot.Addon.Office.OfficeExport; using Greenshot.Addons; using Greenshot.Addons.Components; using Greenshot.Addons.Core; using Greenshot.Addons.Interfaces; using Greenshot.Addons.Interfaces.Plugin; +using Greenshot.Addons.Resources; using Microsoft.Office.Interop.Outlook; #endregion @@ -54,13 +56,21 @@ namespace Greenshot.Addon.Office.Destinations private readonly IOfficeConfiguration _officeConfiguration; private readonly ExportNotification _exportNotification; - private static readonly Bitmap MailIcon = GreenshotResources.GetBitmap("Email.Image"); + private static readonly Bitmap MailIcon = GreenshotResources.Instance.GetBitmap("Email.Image"); private readonly string _exePath; private readonly bool _isActiveFlag; private readonly string _outlookInspectorCaption; private readonly OlObjectClass _outlookInspectorType; + private readonly OutlookExporter _outlookExporter; - public OutlookDestination( + /// + /// Constructor used for dependency injection + /// + /// IOfficeConfiguration + /// ICoreConfiguration + /// IGreenshotLanguage + /// ExportNotification + public OutlookDestination( IOfficeConfiguration officeConfiguration, ICoreConfiguration coreConfiguration, IGreenshotLanguage greenshotLanguage, @@ -68,6 +78,7 @@ namespace Greenshot.Addon.Office.Destinations ) : base(coreConfiguration, greenshotLanguage) { _officeConfiguration = officeConfiguration; + _outlookExporter = new OutlookExporter(officeConfiguration); _exportNotification = exportNotification; if (EmailConfigHelper.HasOutlook()) { @@ -84,7 +95,16 @@ namespace Greenshot.Addon.Office.Destinations } } - protected OutlookDestination( + /// + /// Constructor used for dependency injection + /// + /// OlObjectClass + /// OlObjectClass + /// IOfficeConfiguration + /// ICoreConfiguration + /// IGreenshotLanguage + /// ExportNotification + protected OutlookDestination( string outlookInspectorCaption, OlObjectClass outlookInspectorType, IOfficeConfiguration officeConfiguration, @@ -97,14 +117,19 @@ namespace Greenshot.Addon.Office.Destinations _outlookInspectorType = outlookInspectorType; } + /// public override string Description => _outlookInspectorCaption ?? MapiClient; + /// public override bool IsActive => base.IsActive && _isActiveFlag; + /// public override bool IsDynamic => true; + /// public override Keys EditorShortcutKeys => Keys.Control | Keys.E; + /// public override Bitmap GetDisplayIcon(double dpi) { if (_outlookInspectorCaption == null) @@ -119,9 +144,10 @@ namespace Greenshot.Addon.Office.Destinations return MailIcon; } + /// public override IEnumerable DynamicDestinations() { - var inspectorCaptions = OutlookExporter.RetrievePossibleTargets(); + var inspectorCaptions = _outlookExporter.RetrievePossibleTargets(); if (inspectorCaptions == null) { yield break; @@ -169,14 +195,14 @@ namespace Greenshot.Addon.Office.Destinations if (_outlookInspectorCaption != null) { - OutlookExporter.ExportToInspector(_outlookInspectorCaption, tmpFile, attachmentName); + _outlookExporter.ExportToInspector(_outlookInspectorCaption, tmpFile, attachmentName); exportInformation.ExportMade = true; } else { if (!manuallyInitiated) { - var inspectorCaptions = OutlookExporter.RetrievePossibleTargets(); + var inspectorCaptions = _outlookExporter.RetrievePossibleTargets(); if (inspectorCaptions != null && inspectorCaptions.Count > 0) { var destinations = new List @@ -193,7 +219,7 @@ namespace Greenshot.Addon.Office.Destinations } else { - exportInformation.ExportMade = OutlookExporter.ExportToOutlook(_officeConfiguration.OutlookEmailFormat, tmpFile, + exportInformation.ExportMade = _outlookExporter.ExportToOutlook(_officeConfiguration.OutlookEmailFormat, tmpFile, FilenameHelper.FillPattern(_officeConfiguration.EmailSubjectPattern, captureDetails, false), attachmentName, _officeConfiguration.EmailTo, _officeConfiguration.EmailCC, _officeConfiguration.EmailBCC, null); } diff --git a/src/Greenshot.Addon.Office/Destinations/PowerpointDestination.cs b/src/Greenshot.Addon.Office/Destinations/PowerpointDestination.cs index 03d1635a8..a9675415e 100644 --- a/src/Greenshot.Addon.Office/Destinations/PowerpointDestination.cs +++ b/src/Greenshot.Addon.Office/Destinations/PowerpointDestination.cs @@ -28,6 +28,7 @@ using System.Drawing; using System.IO; using System.Linq; using System.Text.RegularExpressions; +using Greenshot.Addon.Office.Configuration; using Greenshot.Addon.Office.OfficeExport; using Greenshot.Addons; using Greenshot.Addons.Components; @@ -45,21 +46,33 @@ namespace Greenshot.Addon.Office.Destinations [Destination("Powerpoint", DestinationOrder.Powerpoint)] public class PowerpointDestination : AbstractDestination { + private readonly IOfficeConfiguration _officeConfiguration; private readonly ExportNotification _exportNotification; - private const int IconApplication = 0; - private const int IconPresentation = 1; private readonly string _exePath; private readonly string _presentationName; + private readonly PowerpointExporter _powerpointExporter; + private const int IconApplication = 0; + private const int IconPresentation = 1; - public PowerpointDestination( + /// + /// Constructor used for dependency injection + /// + /// ICoreConfiguration + /// IGreenshotLanguage + /// IOfficeConfiguration + /// ExportNotification + public PowerpointDestination( ICoreConfiguration coreConfiguration, IGreenshotLanguage greenshotLanguage, + IOfficeConfiguration officeConfiguration, ExportNotification exportNotification ) : base(coreConfiguration, greenshotLanguage) { + _officeConfiguration = officeConfiguration; _exportNotification = exportNotification; + _powerpointExporter = new PowerpointExporter(officeConfiguration); _exePath = PluginUtils.GetExePath("POWERPNT.EXE"); if (_exePath != null && !File.Exists(_exePath)) { @@ -67,14 +80,24 @@ namespace Greenshot.Addon.Office.Destinations } } - public PowerpointDestination(string presentationName, + /// + /// Constructor used for dependency injection + /// + /// string with the name of the presentation + /// ICoreConfiguration + /// IGreenshotLanguage + /// IOfficeConfiguration + /// ExportNotification + public PowerpointDestination(string presentationName, ICoreConfiguration coreConfiguration, IGreenshotLanguage greenshotLanguage, - ExportNotification exportNotification) : this(coreConfiguration, greenshotLanguage, exportNotification) + IOfficeConfiguration officeConfiguration, + ExportNotification exportNotification) : this(coreConfiguration, greenshotLanguage, officeConfiguration, exportNotification) { _presentationName = presentationName; } + /// public override string Description { get @@ -87,10 +110,13 @@ namespace Greenshot.Addon.Office.Destinations } } + /// public override bool IsDynamic => true; + /// public override bool IsActive => base.IsActive && _exePath != null; + /// public override Bitmap GetDisplayIcon(double dpi) { if (!string.IsNullOrEmpty(_presentationName)) @@ -101,11 +127,13 @@ namespace Greenshot.Addon.Office.Destinations return PluginUtils.GetCachedExeIcon(_exePath, IconApplication, dpi > 100); } + /// public override IEnumerable DynamicDestinations() { - return PowerpointExporter.GetPowerpointPresentations().Select(presentationName => new PowerpointDestination(presentationName, CoreConfiguration, GreenshotLanguage, _exportNotification)); + return _powerpointExporter.GetPowerpointPresentations().Select(presentationName => new PowerpointDestination(presentationName, CoreConfiguration, GreenshotLanguage, _officeConfiguration, _exportNotification)); } + /// protected override ExportInformation ExportCapture(bool manuallyInitiated, ISurface surface, ICaptureDetails captureDetails) { var exportInformation = new ExportInformation(Designation, Description); @@ -118,22 +146,22 @@ namespace Greenshot.Addon.Office.Destinations } if (_presentationName != null) { - exportInformation.ExportMade = PowerpointExporter.ExportToPresentation(_presentationName, tmpFile, imageSize, captureDetails.Title); + exportInformation.ExportMade = _powerpointExporter.ExportToPresentation(_presentationName, tmpFile, imageSize, captureDetails.Title); } else { if (!manuallyInitiated) { - var presentations = PowerpointExporter.GetPowerpointPresentations().ToList(); + var presentations = _powerpointExporter.GetPowerpointPresentations().ToList(); if (presentations.Count > 0) { var destinations = new List { - new PowerpointDestination(CoreConfiguration, GreenshotLanguage, _exportNotification) + new PowerpointDestination(CoreConfiguration, GreenshotLanguage, _officeConfiguration, _exportNotification) }; foreach (var presentation in presentations) { - destinations.Add(new PowerpointDestination(presentation, CoreConfiguration, GreenshotLanguage, _exportNotification)); + destinations.Add(new PowerpointDestination(presentation, CoreConfiguration, GreenshotLanguage, _officeConfiguration, _exportNotification)); } // Return the ExportInformation from the picker without processing, as this indirectly comes from us self return ShowPickerMenu(false, surface, captureDetails, destinations); @@ -141,7 +169,7 @@ namespace Greenshot.Addon.Office.Destinations } else if (!exportInformation.ExportMade) { - exportInformation.ExportMade = PowerpointExporter.InsertIntoNewPresentation(tmpFile, imageSize, captureDetails.Title); + exportInformation.ExportMade = _powerpointExporter.InsertIntoNewPresentation(tmpFile, imageSize, captureDetails.Title); } } _exportNotification.NotifyOfExport(this, exportInformation, surface); diff --git a/src/Greenshot.Addon.Office/Destinations/WordDestination.cs b/src/Greenshot.Addon.Office/Destinations/WordDestination.cs index b74ed4c71..4ad6f5255 100644 --- a/src/Greenshot.Addon.Office/Destinations/WordDestination.cs +++ b/src/Greenshot.Addon.Office/Destinations/WordDestination.cs @@ -30,6 +30,7 @@ using System.IO; using System.Linq; using System.Text.RegularExpressions; using Dapplo.Log; +using Greenshot.Addon.Office.Configuration; using Greenshot.Addon.Office.OfficeExport; using Greenshot.Addons; using Greenshot.Addons.Components; @@ -47,20 +48,32 @@ namespace Greenshot.Addon.Office.Destinations [Destination("Word", DestinationOrder.Word)] public class WordDestination : AbstractDestination { + private readonly IOfficeConfiguration _officeConfiguration; private readonly ExportNotification _exportNotification; private const int IconApplication = 0; private const int IconDocument = 1; private static readonly LogSource Log = new LogSource(); private readonly string _exePath; private readonly string _documentCaption; + private readonly WordExporter _wordExporter; - public WordDestination( + /// + /// Constructor used for dependency injection + /// + /// ICoreConfiguration + /// IGreenshotLanguage + /// IOfficeConfiguration + /// ExportNotification + public WordDestination( ICoreConfiguration coreConfiguration, IGreenshotLanguage greenshotLanguage, + IOfficeConfiguration officeConfiguration, ExportNotification exportNotification ) : base(coreConfiguration, greenshotLanguage) { + _officeConfiguration = officeConfiguration; _exportNotification = exportNotification; + _wordExporter = new WordExporter(officeConfiguration); _exePath = PluginUtils.GetExePath("WINWORD.EXE"); if (_exePath != null && !File.Exists(_exePath)) { @@ -68,30 +81,45 @@ namespace Greenshot.Addon.Office.Destinations } } - protected WordDestination(string wordCaption, + /// + /// Constructor used for dependency injection + /// + /// string with the caption of the word document + /// ICoreConfiguration + /// IGreenshotLanguage + /// IOfficeConfiguration + /// ExportNotification + protected WordDestination(string wordCaption, ICoreConfiguration coreConfiguration, IGreenshotLanguage greenshotLanguage, - ExportNotification exportNotification) : this(coreConfiguration, greenshotLanguage, exportNotification) + IOfficeConfiguration officeConfiguration, + ExportNotification exportNotification) : this(coreConfiguration, greenshotLanguage, officeConfiguration, exportNotification) { _documentCaption = wordCaption; } - public override string Description => _documentCaption ?? "Microsoft Word"; + /// + public override string Description => _documentCaption ?? "Microsoft Word"; + /// public override bool IsDynamic => true; + /// public override bool IsActive => base.IsActive && _exePath != null; + /// public override Bitmap GetDisplayIcon(double dpi) { return PluginUtils.GetCachedExeIcon(_exePath, !string.IsNullOrEmpty(_documentCaption) ? IconDocument : IconApplication, dpi > 100); - } - - public override IEnumerable DynamicDestinations() - { - return WordExporter.GetWordDocuments().Select(wordCaption => new WordDestination(wordCaption, CoreConfiguration, GreenshotLanguage, _exportNotification)); } + /// + public override IEnumerable DynamicDestinations() + { + return _wordExporter.GetWordDocuments().Select(wordCaption => new WordDestination(wordCaption, CoreConfiguration, GreenshotLanguage, _officeConfiguration, _exportNotification)); + } + + /// protected override ExportInformation ExportCapture(bool manuallyInitiated, ISurface surface, ICaptureDetails captureDetails) { var exportInformation = new ExportInformation(Designation, Description); @@ -104,14 +132,14 @@ namespace Greenshot.Addon.Office.Destinations { try { - WordExporter.InsertIntoExistingDocument(_documentCaption, tmpFile); + _wordExporter.InsertIntoExistingDocument(_documentCaption, tmpFile); exportInformation.ExportMade = true; } catch (Exception) { try { - WordExporter.InsertIntoExistingDocument(_documentCaption, tmpFile); + _wordExporter.InsertIntoExistingDocument(_documentCaption, tmpFile); exportInformation.ExportMade = true; } catch (Exception ex) @@ -126,16 +154,16 @@ namespace Greenshot.Addon.Office.Destinations { if (!manuallyInitiated) { - var documents = WordExporter.GetWordDocuments().ToList(); + var documents = _wordExporter.GetWordDocuments().ToList(); if (documents.Count > 0) { var destinations = new List { - new WordDestination(CoreConfiguration, GreenshotLanguage, _exportNotification) + new WordDestination(CoreConfiguration, GreenshotLanguage, _officeConfiguration, _exportNotification) }; foreach (var document in documents) { - destinations.Add(new WordDestination(document, CoreConfiguration, GreenshotLanguage, _exportNotification)); + destinations.Add(new WordDestination(document, CoreConfiguration, GreenshotLanguage, _officeConfiguration, _exportNotification)); } // Return the ExportInformation from the picker without processing, as this indirectly comes from us self return ShowPickerMenu(false, surface, captureDetails, destinations); @@ -143,7 +171,7 @@ namespace Greenshot.Addon.Office.Destinations } try { - WordExporter.InsertIntoNewDocument(tmpFile, null, null); + _wordExporter.InsertIntoNewDocument(tmpFile, null, null); exportInformation.ExportMade = true; } catch (Exception) @@ -151,7 +179,7 @@ namespace Greenshot.Addon.Office.Destinations // Retry once, just in case try { - WordExporter.InsertIntoNewDocument(tmpFile, null, null); + _wordExporter.InsertIntoNewDocument(tmpFile, null, null); exportInformation.ExportMade = true; } catch (Exception ex) diff --git a/src/Greenshot.Addon.Office/FodyWeavers.xml b/src/Greenshot.Addon.Office/FodyWeavers.xml new file mode 100644 index 000000000..7f5a26669 --- /dev/null +++ b/src/Greenshot.Addon.Office/FodyWeavers.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/Greenshot.Addon.Office/FodyWeavers.xsd b/src/Greenshot.Addon.Office/FodyWeavers.xsd new file mode 100644 index 000000000..061979a03 --- /dev/null +++ b/src/Greenshot.Addon.Office/FodyWeavers.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + 'true' to run assembly verification on the target assembly after all weavers have been finished. + + + + + A comma separated list of error codes that can be safely ignored in assembly verification. + + + + + \ No newline at end of file diff --git a/src/Greenshot.Addon.Office/Greenshot.Addon.Office.csproj b/src/Greenshot.Addon.Office/Greenshot.Addon.Office.csproj index 54467a948..c40f064cf 100644 --- a/src/Greenshot.Addon.Office/Greenshot.Addon.Office.csproj +++ b/src/Greenshot.Addon.Office/Greenshot.Addon.Office.csproj @@ -1,219 +1,62 @@ - - - + + - {92599C09-FF29-4ABD-B6E6-C48ECD781BAB} - {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Debug - x86 - Library Greenshot.Addon.Office Greenshot.Addon.Office - v4.6.1 - Properties - OnBuildSuccess - False - False - 4 - false - - - + net471;netcoreapp3.0 + - - ..\packages\Autofac.4.8.1\lib\net45\Autofac.dll - - - ..\packages\Autofac.Extras.AttributeMetadata.4.0.1\lib\net45\Autofac.Extras.AttributeMetadata.dll - - - ..\packages\Autofac.Mef.4.0.0\lib\net45\Autofac.Integration.Mef.dll - - - ..\packages\Caliburn.Micro.Core.3.2.0\lib\net45\Caliburn.Micro.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\Caliburn.Micro.Platform.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\Caliburn.Micro.Platform.Core.dll - - - ..\packages\CommonServiceLocator.2.0.4\lib\net46\CommonServiceLocator.dll - - - ..\packages\Dapplo.Addons.1.0.79\lib\net461\Dapplo.Addons.dll - - - ..\packages\Dapplo.Addons.Bootstrapper.1.0.79\lib\net461\Dapplo.Addons.Bootstrapper.dll - - - ..\packages\Dapplo.CaliburnMicro.1.0.75\lib\net461\Dapplo.CaliburnMicro.dll - - - ..\packages\Dapplo.CaliburnMicro.Configuration.1.0.75\lib\net461\Dapplo.CaliburnMicro.Configuration.dll - - - ..\packages\Dapplo.CaliburnMicro.Dapp.1.0.75\lib\net461\Dapplo.CaliburnMicro.Dapp.dll - - - ..\packages\Dapplo.CaliburnMicro.Menu.1.0.75\lib\net461\Dapplo.CaliburnMicro.Menu.dll - - - ..\packages\Dapplo.CaliburnMicro.Security.1.0.75\lib\net461\Dapplo.CaliburnMicro.Security.dll - - - ..\packages\Dapplo.CaliburnMicro.Translations.1.0.75\lib\net461\Dapplo.CaliburnMicro.Translations.dll - - - ..\packages\Dapplo.Ini.0.5.31\lib\net45\Dapplo.Ini.dll - - - ..\packages\Dapplo.InterfaceImpl.0.2.12\lib\net45\Dapplo.InterfaceImpl.dll - - - ..\packages\Dapplo.Language.0.5.31\lib\net45\Dapplo.Language.dll - - - ..\packages\Dapplo.Log.1.2.1\lib\net45\Dapplo.Log.dll - - - ..\packages\Dapplo.Utils.1.0.161\lib\net45\Dapplo.Utils.dll - - - ..\packages\Dapplo.Windows.0.5.109\lib\net461\Dapplo.Windows.dll - - - ..\packages\Dapplo.Windows.Clipboard.0.5.109\lib\net461\Dapplo.Windows.Clipboard.dll - - - ..\packages\Dapplo.Windows.Common.0.5.109\lib\net461\Dapplo.Windows.Common.dll - - - ..\packages\Dapplo.Windows.DesktopWindowsManager.0.5.109\lib\net461\Dapplo.Windows.DesktopWindowsManager.dll - - - ..\packages\Dapplo.Windows.Dpi.0.5.109\lib\net461\Dapplo.Windows.Dpi.dll - - - ..\packages\Dapplo.Windows.Gdi32.0.5.109\lib\net461\Dapplo.Windows.Gdi32.dll - - - ..\packages\Dapplo.Windows.Input.0.5.109\lib\net461\Dapplo.Windows.Input.dll - - - ..\packages\Dapplo.Windows.Kernel32.0.5.109\lib\net461\Dapplo.Windows.Kernel32.dll - - - ..\packages\Dapplo.Windows.Messages.0.5.109\lib\net461\Dapplo.Windows.Messages.dll - - - ..\packages\Dapplo.Windows.User32.0.5.109\lib\net461\Dapplo.Windows.User32.dll - - - ..\packages\Interop.Microsoft.Office.Interop.OneNote.1.1.0.0\lib\net40\Interop.Microsoft.Office.Interop.OneNote.dll - True - - + + PreserveNewest + + + + + + + + + True - - ..\packages\Microsoft.Office.Interop.Excel.15.0.4795.1000\lib\net20\Microsoft.Office.Interop.Excel.dll - True - - - ..\packages\Microsoft.Office.Interop.Outlook.15.0.4797.1003\lib\net20\Microsoft.Office.Interop.Outlook.dll - True - - - ..\packages\Microsoft.Office.Interop.PowerPoint.15.0.4420.1017\lib\net20\Microsoft.Office.Interop.PowerPoint.dll - True - - - ..\packages\Microsoft.Office.Interop.Word.15.0.4797.1003\lib\net20\Microsoft.Office.Interop.Word.dll - True - - - ..\packages\MicrosoftOfficeCore.15.0.0\lib\net35\Office.dll - True - - - ..\packages\System.Reactive.4.1.0\lib\net46\System.Reactive.dll - - - ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.1\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll - - - ..\packages\System.Threading.Tasks.Extensions.4.5.1\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll - - - ..\packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\System.Windows.Interactivity.dll - + - - - - - - - - - - - - - - - - - + + + + - - {5B924697-4DCD-4F98-85F1-105CB84B7341} - Greenshot.Addons - - - {bf35190d-b2a7-4cfa-b397-51cb384cf0d7} - Greenshot.Core - + + + + + + + + + + + + all + runtime; build; native; contentfiles; analyzers + - - - - - - - MSBuild:Compile - Designer - - - - - mkdir "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons" -copy "$(ProjectDir)bin\$(Configuration)\$(ProjectName).dll" "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons\" -copy "$(ProjectDir)bin\$(Configuration)\$(ProjectName).pdb" "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons\" -mkdir "$(SolutionDir)Greenshot\bin\$(Configuration)\Languages\$(ProjectName)" -copy "$(ProjectDir)\Languages\*.xml" "$(SolutionDir)Greenshot\bin\$(Configuration)\Languages\$(ProjectName)" - - \ No newline at end of file + diff --git a/src/Greenshot.Addon.Office/OfficeAddonModule.cs b/src/Greenshot.Addon.Office/OfficeAddonModule.cs index b54f44be0..da83d0a9f 100644 --- a/src/Greenshot.Addon.Office/OfficeAddonModule.cs +++ b/src/Greenshot.Addon.Office/OfficeAddonModule.cs @@ -24,8 +24,10 @@ using Autofac; using Dapplo.Addons; using Dapplo.CaliburnMicro.Configuration; -using Dapplo.Ini; -using Dapplo.Language; +using Dapplo.Config.Ini; +using Dapplo.Config.Language; +using Greenshot.Addon.Office.Configuration; +using Greenshot.Addon.Office.Configuration.Impl; using Greenshot.Addon.Office.Destinations; using Greenshot.Addon.Office.ViewModels; using Greenshot.Addons.Components; @@ -36,6 +38,10 @@ namespace Greenshot.Addon.Office /// public class OfficeAddonModule : AddonModule { + /// + /// Define the dependencies of this project + /// + /// ContainerBuilder protected override void Load(ContainerBuilder builder) { var hasDestination = false; @@ -88,14 +94,16 @@ namespace Greenshot.Addon.Office if (hasDestination) { builder - .Register(context => IniConfig.Current.Get()) + .RegisterType() .As() + .As() .SingleInstance(); builder - .Register(context => LanguageLoader.Current.Get()) + .RegisterType() .As() + .As() .SingleInstance(); builder diff --git a/src/Greenshot.Addon.Office/OfficeExport/Entities/OneNoteNotebook.cs b/src/Greenshot.Addon.Office/OfficeExport/Entities/OneNoteNotebook.cs new file mode 100644 index 000000000..13c450d0b --- /dev/null +++ b/src/Greenshot.Addon.Office/OfficeExport/Entities/OneNoteNotebook.cs @@ -0,0 +1,46 @@ +#region Greenshot GNU General Public License + +// Greenshot - a free and open source screenshot tool +// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom +// +// For more information see: http://getgreenshot.org/ +// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 1 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#endregion + +#region Usings + + +#endregion + +namespace Greenshot.Addon.Office.OfficeExport.Entities +{ + /// + /// Container for transporting notebook information + /// + public class OneNoteNotebook + { + /// + /// ID of the notebook + /// + public string Id { get; set; } + + /// + /// Name of the notebook + /// + public string Name { get; set; } + } +} \ No newline at end of file diff --git a/src/Greenshot.Addon.Jira/Properties/AssemblyInfo.cs b/src/Greenshot.Addon.Office/OfficeExport/Entities/OneNotePage.cs similarity index 51% rename from src/Greenshot.Addon.Jira/Properties/AssemblyInfo.cs rename to src/Greenshot.Addon.Office/OfficeExport/Entities/OneNotePage.cs index 71bb42f97..794835774 100644 --- a/src/Greenshot.Addon.Jira/Properties/AssemblyInfo.cs +++ b/src/Greenshot.Addon.Office/OfficeExport/Entities/OneNotePage.cs @@ -1,53 +1,62 @@ -#region Greenshot GNU General Public License - -// Greenshot - a free and open source screenshot tool -// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom -// -// For more information see: http://getgreenshot.org/ -// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 1 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -#endregion - -#region Usings - -using System.Reflection; -using System.Runtime.InteropServices; - -#endregion - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. - -[assembly: AssemblyTitle("Greenshot.Addon.Jira")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Greenshot")] -[assembly: AssemblyProduct("Jira Plugin")] -[assembly: AssemblyCopyright("Copyright (C) 2007-2018")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// This sets the default COM visibility of types in the assembly to invisible. -// If you need to expose a type to COM, use [ComVisible(true)] on that type. - -[assembly: ComVisible(false)] - -// The assembly version, replaced by build scripts - -[assembly: AssemblyVersion("1.3.0.0")] -[assembly: AssemblyInformationalVersion("1.3.0.0")] -[assembly: AssemblyFileVersion("1.3.0.0")] \ No newline at end of file +#region Greenshot GNU General Public License + +// Greenshot - a free and open source screenshot tool +// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom +// +// For more information see: http://getgreenshot.org/ +// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 1 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#endregion + +#region Usings + + +#endregion + +namespace Greenshot.Addon.Office.OfficeExport.Entities +{ + /// + /// Container for transporting Page information + /// + public class OneNotePage + { + /// + public string DisplayName + { + get + { + var notebook = Parent.Parent; + if (string.IsNullOrEmpty(notebook.Name)) + { + return string.Format("{0} / {1}", Parent.Name, Name); + } + return string.Format("{0} / {1} / {2}", Parent.Parent.Name, Parent.Name, Name); + } + } + + /// + public string Id { get; set; } + + /// + public bool IsCurrentlyViewed { get; set; } + + /// + public string Name { get; set; } + + /// + public OneNoteSection Parent { get; set; } + } +} \ No newline at end of file diff --git a/src/Greenshot/Properties/AssemblyInfo.cs b/src/Greenshot.Addon.Office/OfficeExport/Entities/OneNoteSection.cs similarity index 52% rename from src/Greenshot/Properties/AssemblyInfo.cs rename to src/Greenshot.Addon.Office/OfficeExport/Entities/OneNoteSection.cs index da93269bd..3c64cef73 100644 --- a/src/Greenshot/Properties/AssemblyInfo.cs +++ b/src/Greenshot.Addon.Office/OfficeExport/Entities/OneNoteSection.cs @@ -1,53 +1,51 @@ -#region Greenshot GNU General Public License - -// Greenshot - a free and open source screenshot tool -// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom -// -// For more information see: http://getgreenshot.org/ -// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 1 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -#endregion - -#region Usings - -using System.Reflection; -using System.Runtime.InteropServices; - -#endregion - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. - -[assembly: AssemblyTitle("Greenshot")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Greenshot")] -[assembly: AssemblyProduct("Greenshot")] -[assembly: AssemblyCopyright("")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// This sets the default COM visibility of types in the assembly to invisible. -// If you need to expose a type to COM, use [ComVisible(true)] on that type. - -[assembly: ComVisible(false)] - -// The assembly version, replaced by build scripts - -[assembly: AssemblyVersion("1.3.0.0")] -[assembly: AssemblyInformationalVersion("1.3.0.0")] -[assembly: AssemblyFileVersion("1.3.0.0")] \ No newline at end of file +#region Greenshot GNU General Public License + +// Greenshot - a free and open source screenshot tool +// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom +// +// For more information see: http://getgreenshot.org/ +// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 1 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#endregion + +#region Usings + + +#endregion + +namespace Greenshot.Addon.Office.OfficeExport.Entities +{ + /// + /// Container for transporting section information + /// + public class OneNoteSection + { + /// + /// ID of the section + /// + public string Id { get; set; } + + /// + /// Name of the section + /// + public string Name { get; set; } + + /// + /// Parent notebook + /// + public OneNoteNotebook Parent { get; set; } + } +} \ No newline at end of file diff --git a/src/Greenshot.Addon.Office/OfficeExport/ExcelExporter.cs b/src/Greenshot.Addon.Office/OfficeExport/ExcelExporter.cs index 0e6f439d4..9d976e5ee 100644 --- a/src/Greenshot.Addon.Office/OfficeExport/ExcelExporter.cs +++ b/src/Greenshot.Addon.Office/OfficeExport/ExcelExporter.cs @@ -28,8 +28,8 @@ using System.Collections.Generic; using System.Drawing; using System.Runtime.InteropServices; using Dapplo.Log; +using Dapplo.Windows.Com; using Dapplo.Windows.Desktop; -using Dapplo.Windows.Interop; using Greenshot.Addon.Office.OfficeInterop; using Microsoft.Office.Core; using Microsoft.Office.Interop.Excel; @@ -56,14 +56,14 @@ namespace Greenshot.Addon.Office.OfficeExport IDisposableCom excelApplication; try { - excelApplication = DisposableCom.Create((Application)Marshal.GetActiveObject("Excel.Application")); + excelApplication = OleAut32Api.GetActiveObject("Excel.Application"); } catch { // Ignore, probably no excel running return null; } - if ((excelApplication != null) && (excelApplication.ComObject != null)) + if (excelApplication?.ComObject != null) { InitializeVariables(excelApplication); } @@ -76,7 +76,7 @@ namespace Greenshot.Addon.Office.OfficeExport /// ComDisposable for Excel.Application private static IDisposableCom GetOrCreateExcelApplication() { - IDisposableCom excelApplication = GetExcelApplication(); + var excelApplication = GetExcelApplication(); if (excelApplication == null) { excelApplication = DisposableCom.Create(new Application()); diff --git a/src/Greenshot.Addon.Office/OfficeExport/OneNoteExporter.cs b/src/Greenshot.Addon.Office/OfficeExport/OneNoteExporter.cs index 645246ff0..6a3333f55 100644 --- a/src/Greenshot.Addon.Office/OfficeExport/OneNoteExporter.cs +++ b/src/Greenshot.Addon.Office/OfficeExport/OneNoteExporter.cs @@ -29,7 +29,8 @@ using System.IO; using System.Runtime.InteropServices; using System.Xml; using Dapplo.Log; -using Dapplo.Windows.Interop; +using Dapplo.Windows.Com; +using Greenshot.Addon.Office.OfficeExport.Entities; using Greenshot.Addons.Core; using Greenshot.Addons.Interfaces; using Greenshot.Addons.Interfaces.Plugin; @@ -134,7 +135,7 @@ namespace Greenshot.Addon.Office.OfficeExport IDisposableCom oneNoteApplication; try { - oneNoteApplication = DisposableCom.Create((Application)Marshal.GetActiveObject("OneNote.Application")); + oneNoteApplication = OleAut32Api.GetActiveObject("OneNote.Application"); } catch { @@ -323,53 +324,4 @@ namespace Greenshot.Addon.Office.OfficeExport return null; } } - - /// - /// Container for transporting Page information - /// - public class OneNotePage - { - public string DisplayName - { - get - { - OneNoteNotebook notebook = Parent.Parent; - if (string.IsNullOrEmpty(notebook.Name)) - { - return string.Format("{0} / {1}", Parent.Name, Name); - } - return string.Format("{0} / {1} / {2}", Parent.Parent.Name, Parent.Name, Name); - } - } - - public string Id { get; set; } - - public bool IsCurrentlyViewed { get; set; } - - public string Name { get; set; } - - public OneNoteSection Parent { get; set; } - } - - /// - /// Container for transporting section information - /// - public class OneNoteSection - { - public string Id { get; set; } - - public string Name { get; set; } - - public OneNoteNotebook Parent { get; set; } - } - - /// - /// Container for transporting notebook information - /// - public class OneNoteNotebook - { - public string Id { get; set; } - - public string Name { get; set; } - } } \ No newline at end of file diff --git a/src/Greenshot.Addon.Office/OfficeExport/OutlookEmailExporter.cs b/src/Greenshot.Addon.Office/OfficeExport/OutlookEmailExporter.cs index 231fdf797..ac721e577 100644 --- a/src/Greenshot.Addon.Office/OfficeExport/OutlookEmailExporter.cs +++ b/src/Greenshot.Addon.Office/OfficeExport/OutlookEmailExporter.cs @@ -26,11 +26,10 @@ using System; using System.Collections.Generic; using System.IO; -using System.Runtime.InteropServices; using System.Text; -using Dapplo.Ini; using Dapplo.Log; -using Dapplo.Windows.Interop; +using Dapplo.Windows.Com; +using Greenshot.Addon.Office.Configuration; using Greenshot.Addon.Office.OfficeInterop; using mshtml; using Microsoft.Office.Interop.Outlook; @@ -49,6 +48,8 @@ namespace Greenshot.Addon.Office.OfficeExport ///
public class OutlookExporter { + private readonly IOfficeConfiguration _officeConfiguration; + // The signature key can be found at: // HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\\9375CFF0413111d3B88A00104B2A6676\ [New Signature] private const string ProfilesKey = @"Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\"; @@ -58,10 +59,20 @@ namespace Greenshot.Addon.Office.OfficeExport // Schema definitions for the MAPI properties, see: http://msdn.microsoft.com/en-us/library/aa454438.aspx and: http://msdn.microsoft.com/en-us/library/bb446117.aspx private const string AttachmentContentId = @"http://schemas.microsoft.com/mapi/proptag/0x3712001E"; private static readonly LogSource Log = new LogSource(); - private static readonly IOfficeConfiguration Conf = IniConfig.Current.Get(); private static readonly string SignaturePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), @"Microsoft\Signatures"); private static Version _outlookVersion; private static string _currentUser; + private readonly WordExporter _wordExporter; + + /// + /// Constructor used for dependency injection + /// + /// + public OutlookExporter(IOfficeConfiguration officeConfiguration) + { + _officeConfiguration = officeConfiguration; + _wordExporter = new WordExporter(officeConfiguration); + } /// /// Export the image stored in tmpFile to the Inspector with the caption @@ -70,7 +81,7 @@ namespace Greenshot.Addon.Office.OfficeExport /// Path to image file /// name of the attachment (used as the tooltip of the image) /// true if it worked - public static bool ExportToInspector(string inspectorCaption, string tmpFile, string attachmentName) + public bool ExportToInspector(string inspectorCaption, string tmpFile, string attachmentName) { using (var outlookApplication = GetOrCreateOutlookApplication()) { @@ -100,7 +111,7 @@ namespace Greenshot.Addon.Office.OfficeExport } break; case AppointmentItem appointmentItem: - if ((_outlookVersion.Major >= (int)OfficeVersions.Office2010) && Conf.OutlookAllowExportInMeetings) + if ((_outlookVersion.Major >= (int)OfficeVersions.Office2010) && _officeConfiguration.OutlookAllowExportInMeetings) { if (!string.IsNullOrEmpty(appointmentItem.Organizer) && appointmentItem.Organizer.Equals(_currentUser)) { @@ -151,7 +162,7 @@ namespace Greenshot.Addon.Office.OfficeExport } break; case AppointmentItem appointmentItem: - if ((_outlookVersion.Major >= (int)OfficeVersions.Office2010) && Conf.OutlookAllowExportInMeetings) + if ((_outlookVersion.Major >= (int)OfficeVersions.Office2010) && _officeConfiguration.OutlookAllowExportInMeetings) { if (!string.IsNullOrEmpty(appointmentItem.Organizer) && !appointmentItem.Organizer.Equals(_currentUser)) { @@ -194,7 +205,7 @@ namespace Greenshot.Addon.Office.OfficeExport /// /// /// - private static bool ExportToInspector(IDisposableCom<_Inspector> inspector, IDisposableCom<_Explorer> explorer, OlObjectClass itemClass, MailItem mailItem, string tmpFile, string attachmentName) + private bool ExportToInspector(IDisposableCom<_Inspector> inspector, IDisposableCom<_Explorer> explorer, OlObjectClass itemClass, MailItem mailItem, string tmpFile, string attachmentName) { bool isMail = OlObjectClass.olMail.Equals(itemClass); bool isAppointment = OlObjectClass.olAppointment.Equals(itemClass); @@ -240,7 +251,7 @@ namespace Greenshot.Addon.Office.OfficeExport { try { - if (WordExporter.InsertIntoExistingDocument(application, wordDocument, tmpFile, null, null)) + if (_wordExporter.InsertIntoExistingDocument(application, wordDocument, tmpFile, null, null)) { Log.Info().WriteLine("Inserted into Wordmail"); return true; @@ -396,7 +407,7 @@ namespace Greenshot.Addon.Office.OfficeExport /// /// /// - private static void ExportToNewEmail(IDisposableCom outlookApplication, EmailFormat format, string tmpFile, string subject, string attachmentName, string to, string cc, string bcc, string url) + private void ExportToNewEmail(IDisposableCom outlookApplication, EmailFormat format, string tmpFile, string subject, string attachmentName, string to, string cc, string bcc, string url) { using (var newItem = DisposableCom.Create((MailItem)outlookApplication.ComObject.CreateItem(OlItemType.olMailItem))) { @@ -543,7 +554,7 @@ namespace Greenshot.Addon.Office.OfficeExport /// /// /// true if it worked, false if not - public static bool ExportToOutlook(EmailFormat format, string tmpFile, string subject, string attachmentName, string to, string cc, string bcc, string url) + public bool ExportToOutlook(EmailFormat format, string tmpFile, string subject, string attachmentName, string to, string cc, string bcc, string url) { bool exported = false; try @@ -569,9 +580,9 @@ namespace Greenshot.Addon.Office.OfficeExport /// Call this to get the running Outlook application, or create a new instance /// /// IDisposableCom for Outlook.Application - private static IDisposableCom GetOrCreateOutlookApplication() + private IDisposableCom GetOrCreateOutlookApplication() { - IDisposableCom outlookApplication = GetOutlookApplication(); + var outlookApplication = GetOutlookApplication(); if (outlookApplication == null) { outlookApplication = DisposableCom.Create(new Application()); @@ -584,12 +595,12 @@ namespace Greenshot.Addon.Office.OfficeExport /// Call this to get the running Outlook application, returns null if there isn't any. ///
/// IDisposableCom for Outlook.Application or null - private static IDisposableCom GetOutlookApplication() + private IDisposableCom GetOutlookApplication() { IDisposableCom outlookApplication; try { - outlookApplication = DisposableCom.Create((Application)Marshal.GetActiveObject("Outlook.Application")); + outlookApplication = OleAut32Api.GetActiveObject("Outlook.Application"); } catch (Exception) { @@ -607,9 +618,9 @@ namespace Greenshot.Addon.Office.OfficeExport /// Helper method to get the Outlook signature ///
/// - private static string GetOutlookSignature(EmailFormat format) + private string GetOutlookSignature(EmailFormat format) { - using (RegistryKey profilesKey = Registry.CurrentUser.OpenSubKey(ProfilesKey, false)) + using (var profilesKey = Registry.CurrentUser.OpenSubKey(ProfilesKey, false)) { if (profilesKey == null) { @@ -617,7 +628,7 @@ namespace Greenshot.Addon.Office.OfficeExport } string defaultProfile = (string)profilesKey.GetValue(DefaultProfileValue); Log.Debug().WriteLine("defaultProfile={0}", defaultProfile); - using (RegistryKey profileKey = profilesKey.OpenSubKey(defaultProfile + @"\" + AccountKey, false)) + using (var profileKey = profilesKey.OpenSubKey(defaultProfile + @"\" + AccountKey, false)) { if (profileKey != null) { @@ -625,7 +636,7 @@ namespace Greenshot.Addon.Office.OfficeExport foreach (string number in numbers) { Log.Debug().WriteLine("Found subkey {0}", number); - using (RegistryKey numberKey = profileKey.OpenSubKey(number, false)) + using (var numberKey = profileKey.OpenSubKey(number, false)) { if (numberKey != null) { @@ -673,7 +684,7 @@ namespace Greenshot.Addon.Office.OfficeExport /// Initialize static outlook variables like version and currentuser ///
/// - private static void InitializeVariables(IDisposableCom outlookApplication) + private void InitializeVariables(IDisposableCom outlookApplication) { if ((outlookApplication == null) || (outlookApplication.ComObject == null) || (_outlookVersion != null)) { @@ -709,7 +720,7 @@ namespace Greenshot.Addon.Office.OfficeExport /// A method to retrieve all inspectors which can act as an export target ///
/// IDictionary with inspector captions (window title) and object class - public static IDictionary RetrievePossibleTargets() + public IDictionary RetrievePossibleTargets() { IDictionary inspectorCaptions = new SortedDictionary(); try @@ -744,7 +755,7 @@ namespace Greenshot.Addon.Office.OfficeExport } break; case AppointmentItem appointmentItem: - if ((_outlookVersion.Major >= (int)OfficeVersions.Office2010) && Conf.OutlookAllowExportInMeetings) + if ((_outlookVersion.Major >= (int)OfficeVersions.Office2010) && _officeConfiguration.OutlookAllowExportInMeetings) { if (!string.IsNullOrEmpty(appointmentItem.Organizer) && appointmentItem.Organizer.Equals(_currentUser)) { @@ -787,7 +798,7 @@ namespace Greenshot.Addon.Office.OfficeExport inspectorCaptions.Add(caption, mailItem.Class); break; case AppointmentItem appointmentItem: - if ((_outlookVersion.Major >= (int)OfficeVersions.Office2010) && Conf.OutlookAllowExportInMeetings) + if ((_outlookVersion.Major >= (int)OfficeVersions.Office2010) && _officeConfiguration.OutlookAllowExportInMeetings) { if (!string.IsNullOrEmpty(appointmentItem.Organizer) && !appointmentItem.Organizer.Equals(_currentUser)) { diff --git a/src/Greenshot.Addon.Office/OfficeExport/PowerpointExporter.cs b/src/Greenshot.Addon.Office/OfficeExport/PowerpointExporter.cs index 15fa32215..0ef7ff3f5 100644 --- a/src/Greenshot.Addon.Office/OfficeExport/PowerpointExporter.cs +++ b/src/Greenshot.Addon.Office/OfficeExport/PowerpointExporter.cs @@ -27,9 +27,9 @@ using System; using System.Collections.Generic; using System.Drawing; using System.Runtime.InteropServices; -using Dapplo.Ini; using Dapplo.Log; -using Dapplo.Windows.Interop; +using Dapplo.Windows.Com; +using Greenshot.Addon.Office.Configuration; using Greenshot.Addon.Office.OfficeInterop; using Microsoft.Office.Core; using Microsoft.Office.Interop.PowerPoint; @@ -39,11 +39,23 @@ using Shape = Microsoft.Office.Interop.PowerPoint.Shape; namespace Greenshot.Addon.Office.OfficeExport { - public static class PowerpointExporter + /// + /// Export logic for powerpoint + /// + public class PowerpointExporter { private static readonly LogSource Log = new LogSource(); - private static readonly IOfficeConfiguration OfficeConfig = IniConfig.Current.Get(); - private static Version _powerpointVersion; + private readonly IOfficeConfiguration _officeConfiguration; + private Version _powerpointVersion; + + /// + /// Constructor used for dependency injection + /// + /// + public PowerpointExporter(IOfficeConfiguration officeConfiguration) + { + _officeConfiguration = officeConfiguration; + } /// /// Internal method to add a picture to a presentation @@ -52,7 +64,7 @@ namespace Greenshot.Addon.Office.OfficeExport /// /// /// - private static void AddPictureToPresentation(IDisposableCom presentation, string tmpFile, Size imageSize, string title) + private void AddPictureToPresentation(IDisposableCom presentation, string tmpFile, Size imageSize, string title) { if (presentation != null) { @@ -75,7 +87,7 @@ namespace Greenshot.Addon.Office.OfficeExport { using (var slides = DisposableCom.Create(presentation.ComObject.Slides)) { - slide = DisposableCom.Create(slides.ComObject.Add(slides.ComObject.Count + 1, OfficeConfig.PowerpointSlideLayout)); + slide = DisposableCom.Create(slides.ComObject.Add(slides.ComObject.Count + 1, _officeConfiguration.PowerpointSlideLayout)); } using (var shapes = DisposableCom.Create(slide.ComObject.Shapes)) @@ -122,7 +134,7 @@ namespace Greenshot.Addon.Office.OfficeExport { using (var shape = DisposableCom.Create(shapes.ComObject.AddPicture(tmpFile, MsoTriState.msoFalse, MsoTriState.msoTrue, 0, 0, width, height))) { - if (OfficeConfig.PowerpointLockAspectRatio) + if (_officeConfiguration.PowerpointLockAspectRatio) { shape.ComObject.LockAspectRatio = MsoTriState.msoTrue; } @@ -200,7 +212,7 @@ namespace Greenshot.Addon.Office.OfficeExport /// Size of the image /// A string with the image title /// - public static bool ExportToPresentation(string presentationName, string tmpFile, Size imageSize, string title) + public bool ExportToPresentation(string presentationName, string tmpFile, Size imageSize, string title) { using (var powerpointApplication = GetPowerPointApplication()) { @@ -243,9 +255,9 @@ namespace Greenshot.Addon.Office.OfficeExport /// Call this to get the running PowerPoint application, or create a new instance /// /// ComDisposable for PowerPoint.Application - private static IDisposableCom GetOrCreatePowerPointApplication() + private IDisposableCom GetOrCreatePowerPointApplication() { - IDisposableCom powerPointApplication = GetPowerPointApplication(); + var powerPointApplication = GetPowerPointApplication(); if (powerPointApplication == null) { powerPointApplication = DisposableCom.Create(new Application()); @@ -258,12 +270,12 @@ namespace Greenshot.Addon.Office.OfficeExport /// Call this to get the running PowerPoint application, returns null if there isn't any. ///
/// ComDisposable for PowerPoint.Application or null - private static IDisposableCom GetPowerPointApplication() + private IDisposableCom GetPowerPointApplication() { IDisposableCom powerPointApplication; try { - powerPointApplication = DisposableCom.Create((Application)Marshal.GetActiveObject("PowerPoint.Application")); + powerPointApplication = OleAut32Api.GetActiveObject("PowerPoint.Application"); } catch (Exception) { @@ -281,7 +293,7 @@ namespace Greenshot.Addon.Office.OfficeExport /// Get the captions of all the open powerpoint presentations ///
/// - public static IEnumerable GetPowerpointPresentations() + public IEnumerable GetPowerpointPresentations() { using (var powerpointApplication = GetPowerPointApplication()) { @@ -323,7 +335,7 @@ namespace Greenshot.Addon.Office.OfficeExport /// Initialize static powerpoint variables like version /// /// IPowerpointApplication - private static void InitializeVariables(IDisposableCom powerpointApplication) + private void InitializeVariables(IDisposableCom powerpointApplication) { if ((powerpointApplication == null) || (powerpointApplication.ComObject == null) || (_powerpointVersion != null)) { @@ -343,7 +355,7 @@ namespace Greenshot.Addon.Office.OfficeExport /// /// /// - public static bool InsertIntoNewPresentation(string tmpFile, Size imageSize, string title) + public bool InsertIntoNewPresentation(string tmpFile, Size imageSize, string title) { bool isPictureAdded = false; using (var powerpointApplication = GetOrCreatePowerPointApplication()) @@ -372,7 +384,7 @@ namespace Greenshot.Addon.Office.OfficeExport return isPictureAdded; } - private static bool IsAfter2003() + private bool IsAfter2003() { return _powerpointVersion.Major > (int)OfficeVersions.Office2003; } diff --git a/src/Greenshot.Addon.Office/OfficeExport/WordExporter.cs b/src/Greenshot.Addon.Office/OfficeExport/WordExporter.cs index c4152aae5..8e633d15f 100644 --- a/src/Greenshot.Addon.Office/OfficeExport/WordExporter.cs +++ b/src/Greenshot.Addon.Office/OfficeExport/WordExporter.cs @@ -21,10 +21,9 @@ using System; using System.Collections.Generic; -using System.Runtime.InteropServices; -using Dapplo.Ini; using Dapplo.Log; -using Dapplo.Windows.Interop; +using Dapplo.Windows.Com; +using Greenshot.Addon.Office.Configuration; using Greenshot.Addon.Office.OfficeInterop; using Microsoft.Office.Core; using Microsoft.Office.Interop.Word; @@ -34,11 +33,23 @@ using Version = System.Version; namespace Greenshot.Addon.Office.OfficeExport { - public static class WordExporter + /// + /// This makes it possible to export to word + /// + public class WordExporter { private static readonly LogSource Log = new LogSource(); private static Version _wordVersion; - private static readonly IOfficeConfiguration Config = IniConfig.Current.Get(); + private readonly IOfficeConfiguration _officeConfiguration; + + /// + /// Constructor used for dependency injection + /// + /// + public WordExporter(IOfficeConfiguration officeConfiguration) + { + _officeConfiguration = officeConfiguration; + } /// /// Helper method to add the file as image to the selection @@ -46,13 +57,13 @@ namespace Greenshot.Addon.Office.OfficeExport /// /// /// - private static IDisposableCom AddPictureToSelection(IDisposableCom selection, string tmpFile) + private IDisposableCom AddPictureToSelection(IDisposableCom selection, string tmpFile) { using (var shapes = DisposableCom.Create(selection.ComObject.InlineShapes)) { var shape = DisposableCom.Create(shapes.ComObject.AddPicture(tmpFile, false, true, Type.Missing)); // Lock aspect ratio - if (Config.WordLockAspectRatio) + if (_officeConfiguration.WordLockAspectRatio) { shape.ComObject.LockAspectRatio = MsoTriState.msoTrue; } @@ -66,9 +77,9 @@ namespace Greenshot.Addon.Office.OfficeExport /// Call this to get the running Word application, or create a new instance /// /// ComDisposable for Word.Application - private static IDisposableCom GetOrCreateWordApplication() + private IDisposableCom GetOrCreateWordApplication() { - IDisposableCom wordApplication = GetWordApplication(); + var wordApplication = GetWordApplication(); if (wordApplication == null) { wordApplication = DisposableCom.Create(new Application()); @@ -81,12 +92,12 @@ namespace Greenshot.Addon.Office.OfficeExport /// Call this to get the running Word application, returns null if there isn't any. /// /// ComDisposable for Word.Application or null - private static IDisposableCom GetWordApplication() + private IDisposableCom GetWordApplication() { IDisposableCom wordApplication; try { - wordApplication = DisposableCom.Create((Application)Marshal.GetActiveObject("Word.Application")); + wordApplication = OleAut32Api.GetActiveObject("Word.Application"); } catch (Exception) { @@ -104,7 +115,7 @@ namespace Greenshot.Addon.Office.OfficeExport /// Get the captions of all the open word documents /// /// - public static IEnumerable GetWordDocuments() + public IEnumerable GetWordDocuments() { using (var wordApplication = GetWordApplication()) { @@ -143,7 +154,7 @@ namespace Greenshot.Addon.Office.OfficeExport /// Initialize static word variables like version /// /// - private static void InitializeVariables(IDisposableCom wordApplication) + private void InitializeVariables(IDisposableCom wordApplication) { if ((wordApplication == null) || (wordApplication.ComObject == null) || (_wordVersion != null)) { @@ -161,8 +172,8 @@ namespace Greenshot.Addon.Office.OfficeExport /// /// /// - /// - public static bool InsertIntoExistingDocument(string wordCaption, string tmpFile) + /// bool + public bool InsertIntoExistingDocument(string wordCaption, string tmpFile) { using (var wordApplication = GetWordApplication()) { @@ -193,13 +204,13 @@ namespace Greenshot.Addon.Office.OfficeExport /// /// Internal method for the insert /// - /// - /// - /// - /// - /// tooltip of the image - /// - internal static bool InsertIntoExistingDocument(IDisposableCom wordApplication, IDisposableCom<_Document> wordDocument, string tmpFile, string address, string tooltip) + /// IDisposableCom with Application + /// IDisposableCom with _Document + /// string + /// string + /// string with the tooltip of the image + /// bool + internal bool InsertIntoExistingDocument(IDisposableCom wordApplication, IDisposableCom<_Document> wordDocument, string tmpFile, string address, string tooltip) { // Bug #1517: image will be inserted into that document, where the focus was last. It will not inserted into the chosen one. // Solution: Make sure the selected document is active, otherwise the insert will be made in a different document! @@ -289,7 +300,13 @@ namespace Greenshot.Addon.Office.OfficeExport } } - public static void InsertIntoNewDocument(string tmpFile, string address, string tooltip) + /// + /// Insert a capture into a new document + /// + /// string + /// string + /// string + public void InsertIntoNewDocument(string tmpFile, string address, string tooltip) { using (var wordApplication = GetOrCreateWordApplication()) { @@ -367,7 +384,7 @@ namespace Greenshot.Addon.Office.OfficeExport /// Check if the used version is higher than Office 2003 /// /// - private static bool IsAfter2003() + private bool IsAfter2003() { return _wordVersion.Major > (int)OfficeVersions.Office2003; } diff --git a/src/Greenshot.Addon.Office/OfficeInterop/EmailFormat.cs b/src/Greenshot.Addon.Office/OfficeInterop/EmailFormat.cs index b9b5510c2..a8a716d0b 100644 --- a/src/Greenshot.Addon.Office/OfficeInterop/EmailFormat.cs +++ b/src/Greenshot.Addon.Office/OfficeInterop/EmailFormat.cs @@ -28,7 +28,13 @@ namespace Greenshot.Addon.Office.OfficeInterop /// public enum EmailFormat { + /// + /// Use the plain text format + /// Text, + /// + /// Use HTML format + /// Html } } \ No newline at end of file diff --git a/src/Greenshot.Addon.Office/OfficeInterop/OfficeVersions.cs b/src/Greenshot.Addon.Office/OfficeInterop/OfficeVersions.cs index d28d8d31f..5f199efe2 100644 --- a/src/Greenshot.Addon.Office/OfficeInterop/OfficeVersions.cs +++ b/src/Greenshot.Addon.Office/OfficeInterop/OfficeVersions.cs @@ -28,12 +28,41 @@ namespace Greenshot.Addon.Office.OfficeInterop /// public enum OfficeVersions { + /// + /// Office 97 + /// Office97 = 8, + /// + /// Office 2000 + /// Office2000 = 9, + /// + /// Office 2002 + /// Office2002 = 10, + /// + /// Office 2003 + /// Office2003 = 11, + /// + /// Office 2007 + /// Office2007 = 12, + /// + /// Office 2010 + /// Office2010 = 14, - Office2013 = 15 + /// + /// Office 2013 + /// + Office2013 = 15, + /// + /// Office 2016 + /// + Office2016 = 16, + /// + /// Office 2019 + /// + Office2019 = 17 } } \ No newline at end of file diff --git a/src/Greenshot.Addon.Office/Properties/AssemblyInfo.cs b/src/Greenshot.Addon.Office/Properties/AssemblyInfo.cs deleted file mode 100644 index dc524c2bb..000000000 --- a/src/Greenshot.Addon.Office/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,53 +0,0 @@ -#region Greenshot GNU General Public License - -// Greenshot - a free and open source screenshot tool -// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom -// -// For more information see: http://getgreenshot.org/ -// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 1 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -#endregion - -#region Usings - -using System.Reflection; -using System.Runtime.InteropServices; - -#endregion - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. - -[assembly: AssemblyTitle("Greenshot.Addon.Office")] -[assembly: AssemblyDescription("A plugin to export images to Office applications")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Greenshot")] -[assembly: AssemblyProduct("Office Plugin")] -[assembly: AssemblyCopyright("Copyright (C) 2007-2018")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// This sets the default COM visibility of types in the assembly to invisible. -// If you need to expose a type to COM, use [ComVisible(true)] on that type. - -[assembly: ComVisible(false)] - -// The assembly version, replaced by build scripts - -[assembly: AssemblyVersion("1.3.0.0")] -[assembly: AssemblyInformationalVersion("1.3.0.0")] -[assembly: AssemblyFileVersion("1.3.0.0")] \ No newline at end of file diff --git a/src/Greenshot.Addon.Office/ViewModels/OfficeConfigViewModel.cs b/src/Greenshot.Addon.Office/ViewModels/OfficeConfigViewModel.cs index 475e31495..792dc6f19 100644 --- a/src/Greenshot.Addon.Office/ViewModels/OfficeConfigViewModel.cs +++ b/src/Greenshot.Addon.Office/ViewModels/OfficeConfigViewModel.cs @@ -25,6 +25,7 @@ using System.Collections.Generic; using System.Reactive.Disposables; using Dapplo.CaliburnMicro.Configuration; using Dapplo.CaliburnMicro.Extensions; +using Greenshot.Addon.Office.Configuration; using Greenshot.Addons; using Greenshot.Addons.Core.Enums; using Greenshot.Addons.Extensions; @@ -32,6 +33,9 @@ using Microsoft.Office.Interop.PowerPoint; namespace Greenshot.Addon.Office.ViewModels { + /// + /// View model for the office configuration + /// public sealed class OfficeConfigViewModel : SimpleConfigScreen { /// @@ -39,10 +43,26 @@ namespace Greenshot.Addon.Office.ViewModels /// private CompositeDisposable _disposables; + /// + /// Used to modify the office configuration from the view + /// public IOfficeConfiguration OfficeConfiguration { get; } + /// + /// Used to supply translations to the view + /// public IOfficeLanguage OfficeLanguage { get; } + + /// + /// Used to supply translations to the view + /// public IGreenshotLanguage GreenshotLanguage { get; } + /// + /// Constructor used for dependency injection + /// + /// IOfficeConfiguration + /// IOfficeLanguage + /// IGreenshotLanguage public OfficeConfigViewModel( IOfficeConfiguration officeConfiguration, IOfficeLanguage officeLanguage, @@ -53,6 +73,7 @@ namespace Greenshot.Addon.Office.ViewModels GreenshotLanguage = greenshotLanguage; } + /// public override void Initialize(IConfig config) { // Prepare disposables @@ -74,12 +95,16 @@ namespace Greenshot.Addon.Office.ViewModels base.Initialize(config); } + /// protected override void OnDeactivate(bool close) { _disposables.Dispose(); base.OnDeactivate(close); } + /// + /// The selected slide layout + /// public PpSlideLayout SelectedSlideLayout { get => OfficeConfiguration.PowerpointSlideLayout; @@ -90,6 +115,9 @@ namespace Greenshot.Addon.Office.ViewModels } } + /// + /// The available slide layouts + /// public IDictionary SlideLayouts => GreenshotLanguage.TranslationValuesForEnum(); } } diff --git a/src/Greenshot.Addon.Office/packages.config b/src/Greenshot.Addon.Office/packages.config deleted file mode 100644 index 9074a1870..000000000 --- a/src/Greenshot.Addon.Office/packages.config +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Greenshot.Addon.OneDrive/IOneDriveConfiguration.cs b/src/Greenshot.Addon.OneDrive/Configuration/IOneDriveConfiguration.cs similarity index 88% rename from src/Greenshot.Addon.OneDrive/IOneDriveConfiguration.cs rename to src/Greenshot.Addon.OneDrive/Configuration/IOneDriveConfiguration.cs index f1c133630..d729dd396 100644 --- a/src/Greenshot.Addon.OneDrive/IOneDriveConfiguration.cs +++ b/src/Greenshot.Addon.OneDrive/Configuration/IOneDriveConfiguration.cs @@ -25,18 +25,17 @@ using System.ComponentModel; using System.Runtime.Serialization; +using Dapplo.Config.Ini; using Dapplo.HttpExtensions.OAuth; -using Dapplo.Ini; -using Dapplo.InterfaceImpl.Extensions; using Greenshot.Addons.Core; #endregion -namespace Greenshot.Addon.OneDrive +namespace Greenshot.Addon.OneDrive.Configuration { [IniSection("OneDrive")] [Description("Greenshot OneDrive Addon configuration")] - public interface IOneDriveConfiguration : IIniSection, IDestinationFileConfiguration, IOAuth2Token, ITransactionalProperties, INotifyPropertyChanged + public interface IOneDriveConfiguration : IIniSection, IDestinationFileConfiguration, IOAuth2Token { [Description("After upload copy OneDrive link to clipboard.")] [DefaultValue("true")] diff --git a/src/Greenshot.Addon.OneDrive/IOneDriveLanguage.cs b/src/Greenshot.Addon.OneDrive/Configuration/IOneDriveLanguage.cs similarity index 94% rename from src/Greenshot.Addon.OneDrive/IOneDriveLanguage.cs rename to src/Greenshot.Addon.OneDrive/Configuration/IOneDriveLanguage.cs index c924699e5..377bfd237 100644 --- a/src/Greenshot.Addon.OneDrive/IOneDriveLanguage.cs +++ b/src/Greenshot.Addon.OneDrive/Configuration/IOneDriveLanguage.cs @@ -24,11 +24,11 @@ #region Usings using System.ComponentModel; -using Dapplo.Language; +using Dapplo.Config.Language; #endregion -namespace Greenshot.Addon.OneDrive +namespace Greenshot.Addon.OneDrive.Configuration { [Language("OneDrive")] public interface IOneDriveLanguage : ILanguage, INotifyPropertyChanged diff --git a/src/Greenshot.Addon.OneDrive/Configuration/Impl/OneDriveConfigurationImpl.cs b/src/Greenshot.Addon.OneDrive/Configuration/Impl/OneDriveConfigurationImpl.cs new file mode 100644 index 000000000..6a09a13b8 --- /dev/null +++ b/src/Greenshot.Addon.OneDrive/Configuration/Impl/OneDriveConfigurationImpl.cs @@ -0,0 +1,77 @@ +#region Greenshot GNU General Public License + +// Greenshot - a free and open source screenshot tool +// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom +// +// For more information see: http://getgreenshot.org/ +// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 1 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#endregion + +using System; +using System.ComponentModel; +using Dapplo.Config.Ini; +using Dapplo.Config.Ini.Converters; +using Greenshot.Core.Enums; + +namespace Greenshot.Addon.OneDrive.Configuration.Impl +{ + internal class OneDriveConfigurationImpl : IniSectionBase, IOneDriveConfiguration + { + #region Implementation of IFileConfiguration + + public string OutputFilePath { get; set; } + public bool OutputFileAllowOverwrite { get; set; } + public string OutputFileFilenamePattern { get; set; } + public OutputFormats OutputFileFormat { get; set; } + public bool OutputFileReduceColors { get; set; } + public bool OutputFileAutoReduceColors { get; set; } + public int OutputFileReduceColorsTo { get; set; } + public int OutputFileJpegQuality { get; set; } + public bool OutputFilePromptQuality { get; set; } + public uint OutputFileIncrementingNumber { get; set; } + public string OptimizePNGCommand { get; set; } + public string OptimizePNGCommandArguments { get; set; } + + #endregion + + #region Implementation of IDestinationFileConfiguration + + public bool UseOwnSettings { get; set; } + + #endregion + + #region Implementation of IOAuth2Token + + [TypeConverter(typeof(StringEncryptionTypeConverter))] + public string OAuth2AccessToken { get; set; } + + public DateTimeOffset OAuth2AccessTokenExpires { get; set; } + + [TypeConverter(typeof(StringEncryptionTypeConverter))] + public string OAuth2RefreshToken { get; set; } + + #endregion + + #region Implementation of IOneDriveConfiguration + + public bool AfterUploadLinkToClipBoard { get; set; } + public OneDriveLinkType LinkType { get; set; } + public string ClientId { get; set; } + + #endregion + } +} diff --git a/src/Greenshot.Addon.OneDrive/Configuration/Impl/OneDriveLanguageImpl.cs b/src/Greenshot.Addon.OneDrive/Configuration/Impl/OneDriveLanguageImpl.cs new file mode 100644 index 000000000..66a24d894 --- /dev/null +++ b/src/Greenshot.Addon.OneDrive/Configuration/Impl/OneDriveLanguageImpl.cs @@ -0,0 +1,49 @@ +#region Greenshot GNU General Public License + +// Greenshot - a free and open source screenshot tool +// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom +// +// For more information see: http://getgreenshot.org/ +// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 1 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#endregion + +using System.Diagnostics.CodeAnalysis; +using Dapplo.Config.Language; + +namespace Greenshot.Addon.OneDrive.Configuration.Impl +{ + /// + /// This implements IOneDriveLanguage and takes care of storing, all setters are replaced via AutoProperties.Fody + /// + [SuppressMessage("ReSharper", "UnassignedGetOnlyAutoProperty")] +#pragma warning disable CS1591 + public class OneDriveLanguageImpl : LanguageBase, IOneDriveLanguage + { + #region Implementation of IOneDriveLanguage + + public string CommunicationWait { get; } + public string LabelUploadFormat { get; } + public string LabelLinkType { get; } + public string SettingsTitle { get; } + public string UploadFailure { get; } + public string UploadMenuItem { get; } + public string UsePageLink { get; } + public string ResetCredentialsButton { get; } + + #endregion + } +} diff --git a/src/Greenshot.Addon.OneDrive/FodyWeavers.xml b/src/Greenshot.Addon.OneDrive/FodyWeavers.xml new file mode 100644 index 000000000..7f5a26669 --- /dev/null +++ b/src/Greenshot.Addon.OneDrive/FodyWeavers.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/Greenshot.Addon.OneDrive/FodyWeavers.xsd b/src/Greenshot.Addon.OneDrive/FodyWeavers.xsd new file mode 100644 index 000000000..061979a03 --- /dev/null +++ b/src/Greenshot.Addon.OneDrive/FodyWeavers.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + 'true' to run assembly verification on the target assembly after all weavers have been finished. + + + + + A comma separated list of error codes that can be safely ignored in assembly verification. + + + + + \ No newline at end of file diff --git a/src/Greenshot.Addon.OneDrive/Greenshot.Addon.OneDrive.csproj b/src/Greenshot.Addon.OneDrive/Greenshot.Addon.OneDrive.csproj index 542e9ee7e..753945a78 100644 --- a/src/Greenshot.Addon.OneDrive/Greenshot.Addon.OneDrive.csproj +++ b/src/Greenshot.Addon.OneDrive/Greenshot.Addon.OneDrive.csproj @@ -1,158 +1,20 @@ - - - + + - {B35272D3-4631-4FA5-9A3E-85D70ECA9A8D} - {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library Greenshot.Addon.OneDrive Greenshot.Addon.OneDrive - v4.6.1 - Properties - False - False - 4 - false - Always - - - - 3.5 - - - - + net471;netcoreapp3.0 - + - - {bf35190d-b2a7-4cfa-b397-51cb384cf0d7} - Greenshot.Core - - - {f041c685-eb96-4ed1-9ace-0f5bd836610f} - Greenshot.Gfx - - - {5B924697-4DCD-4F98-85F1-105CB84B7341} - Greenshot.Addons - - - ..\packages\Autofac.4.8.1\lib\net45\Autofac.dll - - - ..\packages\Autofac.Extras.AttributeMetadata.4.0.1\lib\net45\Autofac.Extras.AttributeMetadata.dll - - - ..\packages\Autofac.Mef.4.0.0\lib\net45\Autofac.Integration.Mef.dll - - - ..\packages\Caliburn.Micro.Core.3.2.0\lib\net45\Caliburn.Micro.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\Caliburn.Micro.Platform.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\Caliburn.Micro.Platform.Core.dll - - - ..\packages\CommonServiceLocator.2.0.4\lib\net46\CommonServiceLocator.dll - - - ..\packages\ControlzEx.3.0.2.4\lib\net45\ControlzEx.dll - - - ..\packages\Dapplo.Addons.1.0.79\lib\net461\Dapplo.Addons.dll - - - ..\packages\Dapplo.Addons.Bootstrapper.1.0.79\lib\net461\Dapplo.Addons.Bootstrapper.dll - - - ..\packages\Dapplo.CaliburnMicro.1.0.75\lib\net461\Dapplo.CaliburnMicro.dll - - - ..\packages\Dapplo.CaliburnMicro.Configuration.1.0.75\lib\net461\Dapplo.CaliburnMicro.Configuration.dll - - - ..\packages\Dapplo.CaliburnMicro.Dapp.1.0.75\lib\net461\Dapplo.CaliburnMicro.Dapp.dll - - - ..\packages\Dapplo.CaliburnMicro.Menu.1.0.75\lib\net461\Dapplo.CaliburnMicro.Menu.dll - - - ..\packages\Dapplo.CaliburnMicro.Security.1.0.75\lib\net461\Dapplo.CaliburnMicro.Security.dll - - - ..\packages\Dapplo.CaliburnMicro.Translations.1.0.75\lib\net461\Dapplo.CaliburnMicro.Translations.dll - - - ..\packages\Dapplo.HttpExtensions.0.8.46\lib\net46\Dapplo.HttpExtensions.dll - - - ..\packages\Dapplo.HttpExtensions.JsonNet.0.8.46\lib\net46\Dapplo.HttpExtensions.JsonNet.dll - - - ..\packages\Dapplo.HttpExtensions.OAuth.0.8.46\lib\net46\Dapplo.HttpExtensions.OAuth.dll - - - ..\packages\Dapplo.Ini.0.5.31\lib\net45\Dapplo.Ini.dll - - - ..\packages\Dapplo.InterfaceImpl.0.2.12\lib\net45\Dapplo.InterfaceImpl.dll - - - ..\packages\Dapplo.Language.0.5.31\lib\net45\Dapplo.Language.dll - - - ..\packages\Dapplo.Log.1.2.1\lib\net45\Dapplo.Log.dll - - - ..\packages\Dapplo.Utils.1.0.161\lib\net45\Dapplo.Utils.dll - - - ..\packages\Dapplo.Windows.0.5.109\lib\net461\Dapplo.Windows.dll - - - ..\packages\Dapplo.Windows.Clipboard.0.5.109\lib\net461\Dapplo.Windows.Clipboard.dll - - - ..\packages\Dapplo.Windows.Com.0.5.109\lib\net461\Dapplo.Windows.Com.dll - - - ..\packages\Dapplo.Windows.Common.0.5.109\lib\net461\Dapplo.Windows.Common.dll - - - ..\packages\Dapplo.Windows.DesktopWindowsManager.0.5.109\lib\net461\Dapplo.Windows.DesktopWindowsManager.dll - - - ..\packages\Dapplo.Windows.Dpi.0.5.109\lib\net461\Dapplo.Windows.Dpi.dll - - - ..\packages\Dapplo.Windows.EmbeddedBrowser.0.5.109\lib\net461\Dapplo.Windows.EmbeddedBrowser.dll - - - ..\packages\Dapplo.Windows.Gdi32.0.5.109\lib\net461\Dapplo.Windows.Gdi32.dll - - - ..\packages\Dapplo.Windows.Input.0.5.109\lib\net461\Dapplo.Windows.Input.dll - - - ..\packages\Dapplo.Windows.Kernel32.0.5.109\lib\net461\Dapplo.Windows.Kernel32.dll - - - ..\packages\Dapplo.Windows.Messages.0.5.109\lib\net461\Dapplo.Windows.Messages.dll - - - ..\packages\Dapplo.Windows.User32.0.5.109\lib\net461\Dapplo.Windows.User32.dll - - - ..\packages\MahApps.Metro.1.6.5\lib\net46\MahApps.Metro.dll - + + PreserveNewest + + + + - - ..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll - @@ -161,58 +23,38 @@ - - ..\packages\System.Reactive.4.1.0\lib\net46\System.Reactive.dll - - - ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.1\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll - - - ..\packages\System.Threading.Tasks.Extensions.4.5.1\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll - - - ..\packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll - - - ..\packages\ControlzEx.3.0.2.4\lib\net45\System.Windows.Interactivity.dll - + - - - - - - - - - - - - - - + + - - MSBuild:Compile - Designer - + + + - - mkdir "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons" -copy "$(ProjectDir)bin\$(Configuration)\$(ProjectName).dll" "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons\" -copy "$(ProjectDir)bin\$(Configuration)\$(ProjectName).pdb" "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons\" -mkdir "$(SolutionDir)Greenshot\bin\$(Configuration)\Languages\$(ProjectName)" -copy "$(ProjectDir)\Languages\*.xml" "$(SolutionDir)Greenshot\bin\$(Configuration)\Languages\$(ProjectName)" - - \ No newline at end of file + + + + + + + + + + + all + runtime; build; native; contentfiles; analyzers + + + diff --git a/src/Greenshot.Addon.OneDrive/OneDriveAddonModule.cs b/src/Greenshot.Addon.OneDrive/OneDriveAddonModule.cs index 6f3ef98ed..734202c9b 100644 --- a/src/Greenshot.Addon.OneDrive/OneDriveAddonModule.cs +++ b/src/Greenshot.Addon.OneDrive/OneDriveAddonModule.cs @@ -24,8 +24,10 @@ using Autofac; using Dapplo.Addons; using Dapplo.CaliburnMicro.Configuration; -using Dapplo.Ini; -using Dapplo.Language; +using Dapplo.Config.Ini; +using Dapplo.Config.Language; +using Greenshot.Addon.OneDrive.Configuration; +using Greenshot.Addon.OneDrive.Configuration.Impl; using Greenshot.Addon.OneDrive.ViewModels; using Greenshot.Addons.Components; @@ -37,13 +39,15 @@ namespace Greenshot.Addon.OneDrive protected override void Load(ContainerBuilder builder) { builder - .Register(context => IniConfig.Current.Get()) + .RegisterType() .As() + .As() .SingleInstance(); builder - .Register(context => LanguageLoader.Current.Get()) + .RegisterType() .As() + .As() .SingleInstance(); builder diff --git a/src/Greenshot.Addon.OneDrive/OneDriveDestination.cs b/src/Greenshot.Addon.OneDrive/OneDriveDestination.cs index 9efe97a1d..dfa9da5e1 100644 --- a/src/Greenshot.Addon.OneDrive/OneDriveDestination.cs +++ b/src/Greenshot.Addon.OneDrive/OneDriveDestination.cs @@ -39,6 +39,7 @@ using Dapplo.HttpExtensions.OAuth; using Dapplo.Log; using Dapplo.Utils; using Dapplo.Windows.Clipboard; +using Greenshot.Addon.OneDrive.Configuration; using Greenshot.Addon.OneDrive.Entities; using Greenshot.Addons; using Greenshot.Addons.Components; diff --git a/src/Greenshot.Addon.OneDrive/Properties/AssemblyInfo.cs b/src/Greenshot.Addon.OneDrive/Properties/AssemblyInfo.cs deleted file mode 100644 index dbfba15a1..000000000 --- a/src/Greenshot.Addon.OneDrive/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,54 +0,0 @@ -#region Greenshot GNU General Public License - -// Greenshot - a free and open source screenshot tool -// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom -// -// For more information see: http://getgreenshot.org/ -// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 1 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -#endregion - -#region Usings - -using System.Reflection; -using System.Runtime.InteropServices; - -#endregion - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. - -[assembly: AssemblyTitle("Greenshot.Addon.OneDrive")] -[assembly: AssemblyDescription("A plugin to upload images to OneDrive")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Greenshot")] -[assembly: AssemblyProduct("OneDrive plugin")] -[assembly: AssemblyCopyright("Copyright (C) 2018")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// This sets the default COM visibility of types in the assembly to invisible. -// If you need to expose a type to COM, use [ComVisible(true)] on that type. - -[assembly: ComVisible(false)] - -// The assembly version, replaced by build scripts - -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyInformationalVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] - diff --git a/src/Greenshot.Addon.OneDrive/ViewModels/OneDriveConfigViewModel.cs b/src/Greenshot.Addon.OneDrive/ViewModels/OneDriveConfigViewModel.cs index b4fdda484..f17d0c7e0 100644 --- a/src/Greenshot.Addon.OneDrive/ViewModels/OneDriveConfigViewModel.cs +++ b/src/Greenshot.Addon.OneDrive/ViewModels/OneDriveConfigViewModel.cs @@ -26,6 +26,7 @@ using System.Reactive.Disposables; using Dapplo.CaliburnMicro.Configuration; using Dapplo.CaliburnMicro.Extensions; using Dapplo.HttpExtensions.OAuth; +using Greenshot.Addon.OneDrive.Configuration; using Greenshot.Addons; using Greenshot.Addons.Core.Enums; using Greenshot.Addons.Extensions; diff --git a/src/Greenshot.Addon.OneDrive/packages.config b/src/Greenshot.Addon.OneDrive/packages.config deleted file mode 100644 index 65c48eebc..000000000 --- a/src/Greenshot.Addon.OneDrive/packages.config +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Greenshot.Addon.Photobucket/IPhotobucketConfiguration.cs b/src/Greenshot.Addon.Photobucket/Configuration/IPhotobucketConfiguration.cs similarity index 89% rename from src/Greenshot.Addon.Photobucket/IPhotobucketConfiguration.cs rename to src/Greenshot.Addon.Photobucket/Configuration/IPhotobucketConfiguration.cs index e19120598..c34adaa80 100644 --- a/src/Greenshot.Addon.Photobucket/IPhotobucketConfiguration.cs +++ b/src/Greenshot.Addon.Photobucket/Configuration/IPhotobucketConfiguration.cs @@ -25,22 +25,21 @@ using System.ComponentModel; using System.Runtime.Serialization; +using Dapplo.Config.Ini; +using Dapplo.Config.Ini.Converters; using Dapplo.HttpExtensions.OAuth; -using Dapplo.Ini; -using Dapplo.Ini.Converters; -using Dapplo.InterfaceImpl.Extensions; using Greenshot.Addons.Core; #endregion -namespace Greenshot.Addon.Photobucket +namespace Greenshot.Addon.Photobucket.Configuration { /// /// The Photobucket configuration. /// [IniSection("Photobucket")] [Description("Greenshot Photobucket Plugin configuration")] - public interface IPhotobucketConfiguration : IIniSection, IDestinationFileConfiguration, INotifyPropertyChanged, ITransactionalProperties, IOAuth1Token + public interface IPhotobucketConfiguration : IIniSection, IDestinationFileConfiguration, IOAuth1Token { [Description("Use pagelink instead of direct link on the clipboard")] [DefaultValue(false)] diff --git a/src/Greenshot.Addon.Photobucket/IPhotobucketLanguage.cs b/src/Greenshot.Addon.Photobucket/Configuration/IPhotobucketLanguage.cs similarity index 91% rename from src/Greenshot.Addon.Photobucket/IPhotobucketLanguage.cs rename to src/Greenshot.Addon.Photobucket/Configuration/IPhotobucketLanguage.cs index a76cb2f31..3a3eb9b8b 100644 --- a/src/Greenshot.Addon.Photobucket/IPhotobucketLanguage.cs +++ b/src/Greenshot.Addon.Photobucket/Configuration/IPhotobucketLanguage.cs @@ -20,11 +20,11 @@ #region Usings using System.ComponentModel; -using Dapplo.Language; +using Dapplo.Config.Language; #endregion -namespace Greenshot.Addon.Photobucket +namespace Greenshot.Addon.Photobucket.Configuration { [Language("Photobucket")] public interface IPhotobucketLanguage : ILanguage, INotifyPropertyChanged diff --git a/src/Greenshot.Addon.Photobucket/Configuration/Impl/PhotobucketConfigurationImpl.cs b/src/Greenshot.Addon.Photobucket/Configuration/Impl/PhotobucketConfigurationImpl.cs new file mode 100644 index 000000000..ffe5a28cb --- /dev/null +++ b/src/Greenshot.Addon.Photobucket/Configuration/Impl/PhotobucketConfigurationImpl.cs @@ -0,0 +1,81 @@ +#region Greenshot GNU General Public License + +// Greenshot - a free and open source screenshot tool +// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom +// +// For more information see: http://getgreenshot.org/ +// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 1 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#endregion + +using System.ComponentModel; +using Dapplo.Config.Ini; +using Dapplo.Config.Ini.Converters; +using Greenshot.Core.Enums; + +namespace Greenshot.Addon.Photobucket.Configuration.Impl +{ + internal class PhotobucketConfigurationImpl : IniSectionBase, IPhotobucketConfiguration + { + #region Implementation of IFileConfiguration + + public string OutputFilePath { get; set; } + public bool OutputFileAllowOverwrite { get; set; } + public string OutputFileFilenamePattern { get; set; } + public OutputFormats OutputFileFormat { get; set; } + public bool OutputFileReduceColors { get; set; } + public bool OutputFileAutoReduceColors { get; set; } + public int OutputFileReduceColorsTo { get; set; } + public int OutputFileJpegQuality { get; set; } + public bool OutputFilePromptQuality { get; set; } + public uint OutputFileIncrementingNumber { get; set; } + public string OptimizePNGCommand { get; set; } + public string OptimizePNGCommandArguments { get; set; } + + #endregion + + #region Implementation of IDestinationFileConfiguration + + public bool UseOwnSettings { get; set; } + + #endregion + + #region Implementation of IOAuth1Token + + [TypeConverter(typeof(StringEncryptionTypeConverter))] + public string OAuthToken { get; set; } + + [TypeConverter(typeof(StringEncryptionTypeConverter))] + public string OAuthTokenSecret { get; set; } + + [TypeConverter(typeof(StringEncryptionTypeConverter))] + public string OAuthTokenVerifier { get; set; } + + #endregion + + #region Implementation of IPhotobucketConfiguration + + public bool UsePageLink { get; set; } + public string SubDomain { get; set; } + public string Username { get; set; } + public string Album { get; set; } + public int Credits { get; set; } + public string ClientId { get; set; } + public string ClientSecret { get; set; } + + #endregion + } +} diff --git a/src/Greenshot.Addon.Photobucket/Configuration/Impl/PhotobucketLanguageImpl.cs b/src/Greenshot.Addon.Photobucket/Configuration/Impl/PhotobucketLanguageImpl.cs new file mode 100644 index 000000000..c145ef19d --- /dev/null +++ b/src/Greenshot.Addon.Photobucket/Configuration/Impl/PhotobucketLanguageImpl.cs @@ -0,0 +1,50 @@ +#region Greenshot GNU General Public License + +// Greenshot - a free and open source screenshot tool +// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom +// +// For more information see: http://getgreenshot.org/ +// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 1 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#endregion + +using System.Diagnostics.CodeAnalysis; +using Dapplo.Config.Language; + +namespace Greenshot.Addon.Photobucket.Configuration.Impl +{ + /// + /// This implements IPhotobucketLanguage and takes care of storing, all setters are replaced via AutoProperties.Fody + /// +#pragma warning disable CS1591 + [SuppressMessage("ReSharper", "UnassignedGetOnlyAutoProperty")] + public class PhotobucketLanguageImpl : LanguageBase, IPhotobucketLanguage + { + #region Implementation of IPhotobucketLanguage + + public string CommunicationWait { get; } + public string Configure { get; } + public string LabelClear { get; } + public string LabelUploadFormat { get; } + public string SettingsTitle { get; } + public string UploadFailure { get; } + public string UploadMenuItem { get; } + public string UploadSuccess { get; } + public string UsePageLink { get; } + + #endregion + } +} diff --git a/src/Greenshot.Addon.Photobucket/FodyWeavers.xml b/src/Greenshot.Addon.Photobucket/FodyWeavers.xml new file mode 100644 index 000000000..7f5a26669 --- /dev/null +++ b/src/Greenshot.Addon.Photobucket/FodyWeavers.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/Greenshot.Addon.Photobucket/FodyWeavers.xsd b/src/Greenshot.Addon.Photobucket/FodyWeavers.xsd new file mode 100644 index 000000000..061979a03 --- /dev/null +++ b/src/Greenshot.Addon.Photobucket/FodyWeavers.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + 'true' to run assembly verification on the target assembly after all weavers have been finished. + + + + + A comma separated list of error codes that can be safely ignored in assembly verification. + + + + + \ No newline at end of file diff --git a/src/Greenshot.Addon.Photobucket/Greenshot.Addon.Photobucket.csproj b/src/Greenshot.Addon.Photobucket/Greenshot.Addon.Photobucket.csproj index cbe225d88..1b5242fc7 100644 --- a/src/Greenshot.Addon.Photobucket/Greenshot.Addon.Photobucket.csproj +++ b/src/Greenshot.Addon.Photobucket/Greenshot.Addon.Photobucket.csproj @@ -1,144 +1,18 @@ - - - + + - {9C0ECC4C-7807-4111-916A-4F57BB29788A} - {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library Greenshot.Addon.Photobucket Greenshot.Addon.Photobucket - v4.6.1 - Properties - False - False - 4 - false - OnBuildSuccess - - - - - - 3.5 + net471;netcoreapp3.0 - - false - latest - - - false - - - false - latest - - - false - - + - - ..\packages\Autofac.4.8.1\lib\net45\Autofac.dll - - - ..\packages\Autofac.Extras.AttributeMetadata.4.0.1\lib\net45\Autofac.Extras.AttributeMetadata.dll - - - ..\packages\Autofac.Mef.4.0.0\lib\net45\Autofac.Integration.Mef.dll - - - ..\packages\Caliburn.Micro.Core.3.2.0\lib\net45\Caliburn.Micro.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\Caliburn.Micro.Platform.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\Caliburn.Micro.Platform.Core.dll - - - ..\packages\CommonServiceLocator.2.0.4\lib\net46\CommonServiceLocator.dll - - - ..\packages\Dapplo.Addons.1.0.79\lib\net461\Dapplo.Addons.dll - - - ..\packages\Dapplo.Addons.Bootstrapper.1.0.79\lib\net461\Dapplo.Addons.Bootstrapper.dll - - - ..\packages\Dapplo.CaliburnMicro.1.0.75\lib\net461\Dapplo.CaliburnMicro.dll - - - ..\packages\Dapplo.CaliburnMicro.Configuration.1.0.75\lib\net461\Dapplo.CaliburnMicro.Configuration.dll - - - ..\packages\Dapplo.CaliburnMicro.Dapp.1.0.75\lib\net461\Dapplo.CaliburnMicro.Dapp.dll - - - ..\packages\Dapplo.CaliburnMicro.Menu.1.0.75\lib\net461\Dapplo.CaliburnMicro.Menu.dll - - - ..\packages\Dapplo.CaliburnMicro.Security.1.0.75\lib\net461\Dapplo.CaliburnMicro.Security.dll - - - ..\packages\Dapplo.CaliburnMicro.Translations.1.0.75\lib\net461\Dapplo.CaliburnMicro.Translations.dll - - - ..\packages\Dapplo.HttpExtensions.0.8.46\lib\net46\Dapplo.HttpExtensions.dll - - - ..\packages\Dapplo.HttpExtensions.OAuth.0.8.46\lib\net46\Dapplo.HttpExtensions.OAuth.dll - - - ..\packages\Dapplo.Ini.0.5.31\lib\net45\Dapplo.Ini.dll - - - ..\packages\Dapplo.InterfaceImpl.0.2.12\lib\net45\Dapplo.InterfaceImpl.dll - - - ..\packages\Dapplo.Language.0.5.31\lib\net45\Dapplo.Language.dll - - - ..\packages\Dapplo.Log.1.2.1\lib\net45\Dapplo.Log.dll - - - ..\packages\Dapplo.Utils.1.0.161\lib\net45\Dapplo.Utils.dll - - - ..\packages\Dapplo.Windows.0.5.109\lib\net461\Dapplo.Windows.dll - - - ..\packages\Dapplo.Windows.Clipboard.0.5.109\lib\net461\Dapplo.Windows.Clipboard.dll - - - ..\packages\Dapplo.Windows.Com.0.5.109\lib\net461\Dapplo.Windows.Com.dll - - - ..\packages\Dapplo.Windows.Common.0.5.109\lib\net461\Dapplo.Windows.Common.dll - - - ..\packages\Dapplo.Windows.DesktopWindowsManager.0.5.109\lib\net461\Dapplo.Windows.DesktopWindowsManager.dll - - - ..\packages\Dapplo.Windows.Dpi.0.5.109\lib\net461\Dapplo.Windows.Dpi.dll - - - ..\packages\Dapplo.Windows.EmbeddedBrowser.0.5.109\lib\net461\Dapplo.Windows.EmbeddedBrowser.dll - - - ..\packages\Dapplo.Windows.Gdi32.0.5.109\lib\net461\Dapplo.Windows.Gdi32.dll - - - ..\packages\Dapplo.Windows.Input.0.5.109\lib\net461\Dapplo.Windows.Input.dll - - - ..\packages\Dapplo.Windows.Kernel32.0.5.109\lib\net461\Dapplo.Windows.Kernel32.dll - - - ..\packages\Dapplo.Windows.Messages.0.5.109\lib\net461\Dapplo.Windows.Messages.dll - - - ..\packages\Dapplo.Windows.User32.0.5.109\lib\net461\Dapplo.Windows.User32.dll - + + PreserveNewest + + + + @@ -149,100 +23,36 @@ - - ..\packages\System.Reactive.4.1.0\lib\net46\System.Reactive.dll - - - ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.1\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll - - - ..\packages\System.Threading.Tasks.Extensions.4.5.1\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll - - - ..\packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\System.Windows.Interactivity.dll - + - - - - - - - - - - Never - - - Never - - - Never - - - Never - - - + + - - {5B924697-4DCD-4F98-85F1-105CB84B7341} - Greenshot.Addons - - - {bf35190d-b2a7-4cfa-b397-51cb384cf0d7} - Greenshot.Core - - - {f041c685-eb96-4ed1-9ace-0f5bd836610f} - Greenshot.Gfx - + + + + - + + + + + + + all + runtime; build; native; contentfiles; analyzers + - - - - - - - - - - - - - - - - - - MSBuild:Compile - Designer - - - - - - mkdir "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons" -copy "$(ProjectDir)bin\$(Configuration)\$(ProjectName).dll" "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons\" -copy "$(ProjectDir)bin\$(Configuration)\$(ProjectName).pdb" "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons\" -mkdir "$(SolutionDir)Greenshot\bin\$(Configuration)\Languages\$(ProjectName)" -copy "$(ProjectDir)\Languages\*.xml" "$(SolutionDir)Greenshot\bin\$(Configuration)\Languages\$(ProjectName)" - - \ No newline at end of file + diff --git a/src/Greenshot.Addon.Photobucket/PhotobucketAddonModule.cs b/src/Greenshot.Addon.Photobucket/PhotobucketAddonModule.cs index c7c78fa33..e79619b5d 100644 --- a/src/Greenshot.Addon.Photobucket/PhotobucketAddonModule.cs +++ b/src/Greenshot.Addon.Photobucket/PhotobucketAddonModule.cs @@ -24,8 +24,10 @@ using Autofac; using Dapplo.Addons; using Dapplo.CaliburnMicro.Configuration; -using Dapplo.Ini; -using Dapplo.Language; +using Dapplo.Config.Ini; +using Dapplo.Config.Language; +using Greenshot.Addon.Photobucket.Configuration; +using Greenshot.Addon.Photobucket.Configuration.Impl; using Greenshot.Addon.Photobucket.ViewModels; using Greenshot.Addons.Components; @@ -37,13 +39,15 @@ namespace Greenshot.Addon.Photobucket protected override void Load(ContainerBuilder builder) { builder - .Register(context => IniConfig.Current.Get()) + .RegisterType() .As() + .As() .SingleInstance(); builder - .Register(context => LanguageLoader.Current.Get()) + .RegisterType() .As() + .As() .SingleInstance(); builder diff --git a/src/Greenshot.Addon.Photobucket/PhotobucketDestination.cs b/src/Greenshot.Addon.Photobucket/PhotobucketDestination.cs index a9aa15a51..507857e52 100644 --- a/src/Greenshot.Addon.Photobucket/PhotobucketDestination.cs +++ b/src/Greenshot.Addon.Photobucket/PhotobucketDestination.cs @@ -37,6 +37,7 @@ using Dapplo.HttpExtensions.Extensions; using Dapplo.HttpExtensions.OAuth; using Dapplo.Log; using Dapplo.Utils; +using Greenshot.Addon.Photobucket.Configuration; using Greenshot.Addons; using Greenshot.Addons.Components; using Greenshot.Addons.Core; diff --git a/src/Greenshot.Addon.Photobucket/Properties/AssemblyInfo.cs b/src/Greenshot.Addon.Photobucket/Properties/AssemblyInfo.cs deleted file mode 100644 index 4fa76ff4c..000000000 --- a/src/Greenshot.Addon.Photobucket/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,53 +0,0 @@ -#region Greenshot GNU General Public License - -// Greenshot - a free and open source screenshot tool -// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom -// -// For more information see: http://getgreenshot.org/ -// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 1 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -#endregion - -#region Usings - -using System.Reflection; -using System.Runtime.InteropServices; - -#endregion - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. - -[assembly: AssemblyTitle("Greenshot.Addon.Photobucket")] -[assembly: AssemblyDescription("A plugin to upload images to Photobucket")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Greenshot")] -[assembly: AssemblyProduct("Photobucket Plugin")] -[assembly: AssemblyCopyright("Copyright (C) 2007-2018")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// This sets the default COM visibility of types in the assembly to invisible. -// If you need to expose a type to COM, use [ComVisible(true)] on that type. - -[assembly: ComVisible(false)] - -// The assembly version, replaced by build scripts - -[assembly: AssemblyVersion("1.3.0.0")] -[assembly: AssemblyInformationalVersion("1.3.0.0")] -[assembly: AssemblyFileVersion("1.3.0.0")] \ No newline at end of file diff --git a/src/Greenshot.Addon.Photobucket/ViewModels/PhotobucketConfigViewModel.cs b/src/Greenshot.Addon.Photobucket/ViewModels/PhotobucketConfigViewModel.cs index 3c5d61214..5ffcad8f5 100644 --- a/src/Greenshot.Addon.Photobucket/ViewModels/PhotobucketConfigViewModel.cs +++ b/src/Greenshot.Addon.Photobucket/ViewModels/PhotobucketConfigViewModel.cs @@ -24,6 +24,7 @@ using System.Reactive.Disposables; using Dapplo.CaliburnMicro.Configuration; using Dapplo.CaliburnMicro.Extensions; +using Greenshot.Addon.Photobucket.Configuration; using Greenshot.Addons; using Greenshot.Addons.Core.Enums; using Greenshot.Addons.ViewModels; diff --git a/src/Greenshot.Addon.Photobucket/packages.config b/src/Greenshot.Addon.Photobucket/packages.config deleted file mode 100644 index 4f4d2c4e1..000000000 --- a/src/Greenshot.Addon.Photobucket/packages.config +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Greenshot.Addon.Tfs/ITfsConfiguration.cs b/src/Greenshot.Addon.Tfs/Configuration/ITfsConfiguration.cs similarity index 88% rename from src/Greenshot.Addon.Tfs/ITfsConfiguration.cs rename to src/Greenshot.Addon.Tfs/Configuration/ITfsConfiguration.cs index c8b9fac76..5a32ff1b3 100644 --- a/src/Greenshot.Addon.Tfs/ITfsConfiguration.cs +++ b/src/Greenshot.Addon.Tfs/Configuration/ITfsConfiguration.cs @@ -25,9 +25,8 @@ using System; using System.ComponentModel; -using Dapplo.Ini; -using Dapplo.Ini.Converters; -using Dapplo.InterfaceImpl.Extensions; +using Dapplo.Config.Ini; +using Dapplo.Config.Ini.Converters; using Greenshot.Addons.Core; #endregion @@ -36,7 +35,7 @@ namespace Greenshot.Addon.Tfs { [IniSection("Tfs")] [Description("Greenshot Tfs Addon configuration")] - public interface ITfsConfiguration : IIniSection, IDestinationFileConfiguration, ITransactionalProperties, INotifyPropertyChanged + public interface ITfsConfiguration : IIniSection, IDestinationFileConfiguration { [Description("After upload copy OneDrive link to clipboard.")] [DefaultValue("true")] diff --git a/src/Greenshot.Addon.Tfs/ITfsLanguage.cs b/src/Greenshot.Addon.Tfs/Configuration/ITfsLanguage.cs similarity index 97% rename from src/Greenshot.Addon.Tfs/ITfsLanguage.cs rename to src/Greenshot.Addon.Tfs/Configuration/ITfsLanguage.cs index a40c99144..df724c5bf 100644 --- a/src/Greenshot.Addon.Tfs/ITfsLanguage.cs +++ b/src/Greenshot.Addon.Tfs/Configuration/ITfsLanguage.cs @@ -24,7 +24,7 @@ #region Usings using System.ComponentModel; -using Dapplo.Language; +using Dapplo.Config.Language; #endregion diff --git a/src/Greenshot.Addon.Tfs/Configuration/Impl/TfsConfigurationImpl.cs b/src/Greenshot.Addon.Tfs/Configuration/Impl/TfsConfigurationImpl.cs new file mode 100644 index 000000000..82611e9f3 --- /dev/null +++ b/src/Greenshot.Addon.Tfs/Configuration/Impl/TfsConfigurationImpl.cs @@ -0,0 +1,63 @@ +#region Greenshot GNU General Public License + +// Greenshot - a free and open source screenshot tool +// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom +// +// For more information see: http://getgreenshot.org/ +// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 1 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#endregion + +using System; +using Dapplo.Config.Ini; +using Greenshot.Core.Enums; + +namespace Greenshot.Addon.Tfs.Configuration.Impl +{ + internal class TfsConfigurationImpl : IniSectionBase, ITfsConfiguration + { + #region Implementation of IFileConfiguration + + public string OutputFilePath { get; set; } + public bool OutputFileAllowOverwrite { get; set; } + public string OutputFileFilenamePattern { get; set; } + public OutputFormats OutputFileFormat { get; set; } + public bool OutputFileReduceColors { get; set; } + public bool OutputFileAutoReduceColors { get; set; } + public int OutputFileReduceColorsTo { get; set; } + public int OutputFileJpegQuality { get; set; } + public bool OutputFilePromptQuality { get; set; } + public uint OutputFileIncrementingNumber { get; set; } + public string OptimizePNGCommand { get; set; } + public string OptimizePNGCommandArguments { get; set; } + + #endregion + + #region Implementation of IDestinationFileConfiguration + + public bool UseOwnSettings { get; set; } + + #endregion + + #region Implementation of ITfsConfiguration + + public bool AfterUploadLinkToClipBoard { get; set; } + public Uri TfsUri { get; set; } + public string ApiKey { get; set; } + + #endregion + } +} diff --git a/src/Greenshot.Addon.Tfs/Configuration/Impl/TfsLanguageImpl.cs b/src/Greenshot.Addon.Tfs/Configuration/Impl/TfsLanguageImpl.cs new file mode 100644 index 000000000..6ed612ed9 --- /dev/null +++ b/src/Greenshot.Addon.Tfs/Configuration/Impl/TfsLanguageImpl.cs @@ -0,0 +1,48 @@ +#region Greenshot GNU General Public License + +// Greenshot - a free and open source screenshot tool +// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom +// +// For more information see: http://getgreenshot.org/ +// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 1 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#endregion + +using System.Diagnostics.CodeAnalysis; +using Dapplo.Config.Language; + +namespace Greenshot.Addon.Tfs.Configuration.Impl +{ + /// + /// This implements ITfsLanguage and takes care of storing, all setters are replaced via AutoProperties.Fody + /// + [SuppressMessage("ReSharper", "UnassignedGetOnlyAutoProperty")] +#pragma warning disable CS1591 + public class TfsLanguageImpl : LanguageBase, ITfsLanguage + { + #region Implementation of ITfsLanguage + + public string CommunicationWait { get; } + public string LabelUrl { get; } + public string LabelApiKey { get; } + public string SettingsTitle { get; } + public string UploadFailure { get; } + public string UploadMenuItem { get; } + public string UsePageLink { get; } + + #endregion + } +} diff --git a/src/Greenshot.Addon.Tfs/FodyWeavers.xml b/src/Greenshot.Addon.Tfs/FodyWeavers.xml new file mode 100644 index 000000000..7f5a26669 --- /dev/null +++ b/src/Greenshot.Addon.Tfs/FodyWeavers.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/Greenshot.Addon.Tfs/FodyWeavers.xsd b/src/Greenshot.Addon.Tfs/FodyWeavers.xsd new file mode 100644 index 000000000..061979a03 --- /dev/null +++ b/src/Greenshot.Addon.Tfs/FodyWeavers.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + 'true' to run assembly verification on the target assembly after all weavers have been finished. + + + + + A comma separated list of error codes that can be safely ignored in assembly verification. + + + + + \ No newline at end of file diff --git a/src/Greenshot.Addon.Tfs/Greenshot.Addon.Tfs.csproj b/src/Greenshot.Addon.Tfs/Greenshot.Addon.Tfs.csproj index 2f6afa236..ddfa88c55 100644 --- a/src/Greenshot.Addon.Tfs/Greenshot.Addon.Tfs.csproj +++ b/src/Greenshot.Addon.Tfs/Greenshot.Addon.Tfs.csproj @@ -1,149 +1,20 @@ - - - + + - {8B3643A5-AFED-49FF-8D66-6348FB102EB2} - {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library Greenshot.Addon.Tfs Greenshot.Addon.Tfs - v4.6.1 - Properties - False - False - 4 - false - Always - - - - 3.5 - - - - + net471;netcoreapp3.0 - + - - {bf35190d-b2a7-4cfa-b397-51cb384cf0d7} - Greenshot.Core - - - {f041c685-eb96-4ed1-9ace-0f5bd836610f} - Greenshot.Gfx - - - {5B924697-4DCD-4F98-85F1-105CB84B7341} - Greenshot.Addons - - - ..\packages\Autofac.4.8.1\lib\net45\Autofac.dll - - - ..\packages\Autofac.Extras.AttributeMetadata.4.0.1\lib\net45\Autofac.Extras.AttributeMetadata.dll - - - ..\packages\Autofac.Mef.4.0.0\lib\net45\Autofac.Integration.Mef.dll - - - ..\packages\Caliburn.Micro.Core.3.2.0\lib\net45\Caliburn.Micro.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\Caliburn.Micro.Platform.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\Caliburn.Micro.Platform.Core.dll - - - ..\packages\CommonServiceLocator.2.0.4\lib\net46\CommonServiceLocator.dll - - - ..\packages\ControlzEx.3.0.2.4\lib\net45\ControlzEx.dll - - - ..\packages\Dapplo.Addons.1.0.79\lib\net461\Dapplo.Addons.dll - - - ..\packages\Dapplo.Addons.Bootstrapper.1.0.79\lib\net461\Dapplo.Addons.Bootstrapper.dll - - - ..\packages\Dapplo.CaliburnMicro.1.0.75\lib\net461\Dapplo.CaliburnMicro.dll - - - ..\packages\Dapplo.CaliburnMicro.Configuration.1.0.75\lib\net461\Dapplo.CaliburnMicro.Configuration.dll - - - ..\packages\Dapplo.CaliburnMicro.Dapp.1.0.75\lib\net461\Dapplo.CaliburnMicro.Dapp.dll - - - ..\packages\Dapplo.CaliburnMicro.Menu.1.0.75\lib\net461\Dapplo.CaliburnMicro.Menu.dll - - - ..\packages\Dapplo.CaliburnMicro.Security.1.0.75\lib\net461\Dapplo.CaliburnMicro.Security.dll - - - ..\packages\Dapplo.CaliburnMicro.Translations.1.0.75\lib\net461\Dapplo.CaliburnMicro.Translations.dll - - - ..\packages\Dapplo.HttpExtensions.0.8.46\lib\net46\Dapplo.HttpExtensions.dll - - - ..\packages\Dapplo.HttpExtensions.JsonNet.0.8.46\lib\net46\Dapplo.HttpExtensions.JsonNet.dll - - - ..\packages\Dapplo.Ini.0.5.31\lib\net45\Dapplo.Ini.dll - - - ..\packages\Dapplo.InterfaceImpl.0.2.12\lib\net45\Dapplo.InterfaceImpl.dll - - - ..\packages\Dapplo.Language.0.5.31\lib\net45\Dapplo.Language.dll - - - ..\packages\Dapplo.Log.1.2.1\lib\net45\Dapplo.Log.dll - - - ..\packages\Dapplo.Utils.1.0.161\lib\net45\Dapplo.Utils.dll - - - ..\packages\Dapplo.Windows.0.5.109\lib\net461\Dapplo.Windows.dll - - - ..\packages\Dapplo.Windows.Clipboard.0.5.109\lib\net461\Dapplo.Windows.Clipboard.dll - - - ..\packages\Dapplo.Windows.Common.0.5.109\lib\net461\Dapplo.Windows.Common.dll - - - ..\packages\Dapplo.Windows.DesktopWindowsManager.0.5.109\lib\net461\Dapplo.Windows.DesktopWindowsManager.dll - - - ..\packages\Dapplo.Windows.Dpi.0.5.109\lib\net461\Dapplo.Windows.Dpi.dll - - - ..\packages\Dapplo.Windows.Gdi32.0.5.109\lib\net461\Dapplo.Windows.Gdi32.dll - - - ..\packages\Dapplo.Windows.Input.0.5.109\lib\net461\Dapplo.Windows.Input.dll - - - ..\packages\Dapplo.Windows.Kernel32.0.5.109\lib\net461\Dapplo.Windows.Kernel32.dll - - - ..\packages\Dapplo.Windows.Messages.0.5.109\lib\net461\Dapplo.Windows.Messages.dll - - - ..\packages\Dapplo.Windows.User32.0.5.109\lib\net461\Dapplo.Windows.User32.dll - - - ..\packages\MahApps.Metro.1.6.5\lib\net46\MahApps.Metro.dll - + + PreserveNewest + + + + - - ..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll - @@ -152,64 +23,38 @@ - - ..\packages\System.Reactive.4.1.0\lib\net46\System.Reactive.dll - - - ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.1\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll - - - ..\packages\System.Threading.Tasks.Extensions.4.5.1\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll - - - ..\packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll - - - ..\packages\ControlzEx.3.0.2.4\lib\net45\System.Windows.Interactivity.dll - + - - - - - - - - - - - - - - - - - - - + + - - MSBuild:Compile - Designer - + + + + + + + + + + + + + + + all + runtime; build; native; contentfiles; analyzers + - - - mkdir "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons" -copy "$(ProjectDir)bin\$(Configuration)\$(ProjectName).dll" "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons\" -copy "$(ProjectDir)bin\$(Configuration)\$(ProjectName).pdb" "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons\" -mkdir "$(SolutionDir)Greenshot\bin\$(Configuration)\Languages\$(ProjectName)" -copy "$(ProjectDir)\Languages\*.xml" "$(SolutionDir)Greenshot\bin\$(Configuration)\Languages\$(ProjectName)" - \ No newline at end of file diff --git a/src/Greenshot.Addon.Tfs/Properties/AssemblyInfo.cs b/src/Greenshot.Addon.Tfs/Properties/AssemblyInfo.cs deleted file mode 100644 index 2b0625fa5..000000000 --- a/src/Greenshot.Addon.Tfs/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,54 +0,0 @@ -#region Greenshot GNU General Public License - -// Greenshot - a free and open source screenshot tool -// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom -// -// For more information see: http://getgreenshot.org/ -// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 1 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -#endregion - -#region Usings - -using System.Reflection; -using System.Runtime.InteropServices; - -#endregion - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. - -[assembly: AssemblyTitle("Greenshot.Addon.Tfs")] -[assembly: AssemblyDescription("A plugin to upload screenshots to Tfs")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Greenshot")] -[assembly: AssemblyProduct("Tfs plugin")] -[assembly: AssemblyCopyright("Copyright (C) Greenshot 2018")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// This sets the default COM visibility of types in the assembly to invisible. -// If you need to expose a type to COM, use [ComVisible(true)] on that type. - -[assembly: ComVisible(false)] - -// The assembly version, replaced by build scripts - -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyInformationalVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] - diff --git a/src/Greenshot.Addon.Tfs/TfsAddonModule.cs b/src/Greenshot.Addon.Tfs/TfsAddonModule.cs index 4db22afbf..52b8d3413 100644 --- a/src/Greenshot.Addon.Tfs/TfsAddonModule.cs +++ b/src/Greenshot.Addon.Tfs/TfsAddonModule.cs @@ -24,8 +24,9 @@ using Autofac; using Dapplo.Addons; using Dapplo.CaliburnMicro.Configuration; -using Dapplo.Ini; -using Dapplo.Language; +using Dapplo.Config.Ini; +using Dapplo.Config.Language; +using Greenshot.Addon.Tfs.Configuration.Impl; using Greenshot.Addon.Tfs.ViewModels; using Greenshot.Addons.Components; @@ -37,13 +38,15 @@ namespace Greenshot.Addon.Tfs protected override void Load(ContainerBuilder builder) { builder - .Register(context => IniConfig.Current.Get()) + .RegisterType() .As() + .As() .SingleInstance(); builder - .Register(context => LanguageLoader.Current.Get()) + .RegisterType() .As() + .As() .SingleInstance(); diff --git a/src/Greenshot.Addon.Tfs/TfsClient.cs b/src/Greenshot.Addon.Tfs/TfsClient.cs index 89d3524a7..9554d46b1 100644 --- a/src/Greenshot.Addon.Tfs/TfsClient.cs +++ b/src/Greenshot.Addon.Tfs/TfsClient.cs @@ -94,7 +94,7 @@ namespace Greenshot.Addon.Tfs public async Task GetOwnWorkitems() { _tfsHttpBehaviour.MakeCurrent(); - Uri apiUri = _tfsConfiguration.TfsUri.AppendSegments("_apis").ExtendQuery("api-version", "3.0"); + var apiUri = _tfsConfiguration.TfsUri.AppendSegments("_apis").ExtendQuery("api-version", "3.0"); var client = HttpClientFactory.Create(_tfsConfiguration.TfsUri).SetBasicAuthorization("", _tfsConfiguration.ApiKey); var workitemsQueryUri = apiUri.AppendSegments("wit", "wiql"); @@ -127,7 +127,7 @@ namespace Greenshot.Addon.Tfs _tfsHttpBehaviour.MakeCurrent(); var client = HttpClientFactory.Create(_tfsConfiguration.TfsUri).SetBasicAuthorization("", _tfsConfiguration.ApiKey); - Uri apiUri = _tfsConfiguration.TfsUri.AppendSegments("_apis").ExtendQuery("api-version", "3.0"); + var apiUri = _tfsConfiguration.TfsUri.AppendSegments("_apis").ExtendQuery("api-version", "3.0"); var filename = surface.GenerateFilename(_coreConfiguration, _tfsConfiguration); var attachmentUri = apiUri.AppendSegments("wit", "attachments").ExtendQuery("fileName", filename); @@ -159,7 +159,7 @@ namespace Greenshot.Addon.Tfs _tfsHttpBehaviour.MakeCurrent(); var client = HttpClientFactory.Create(_tfsConfiguration.TfsUri).SetBasicAuthorization("", _tfsConfiguration.ApiKey); - Uri apiUri = _tfsConfiguration.TfsUri.AppendSegments("_apis").ExtendQuery("api-version", "3.0"); + var apiUri = _tfsConfiguration.TfsUri.AppendSegments("_apis").ExtendQuery("api-version", "3.0"); // https://docs.microsoft.com/en-us/rest/api/vsts/wit/work%20items/update#add_an_attachment var linkAttachmentUri = apiUri.AppendSegments("wit", "workItems", workItem.Id); var linkAttachmentRequest = new List diff --git a/src/Greenshot.Addon.Tfs/packages.config b/src/Greenshot.Addon.Tfs/packages.config deleted file mode 100644 index 4dac2319d..000000000 --- a/src/Greenshot.Addon.Tfs/packages.config +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Greenshot.Addon.Win10/Greenshot.Addon.Win10.csproj b/src/Greenshot.Addon.Win10/Greenshot.Addon.Win10.csproj index 2fad3504f..36e68b158 100644 --- a/src/Greenshot.Addon.Win10/Greenshot.Addon.Win10.csproj +++ b/src/Greenshot.Addon.Win10/Greenshot.Addon.Win10.csproj @@ -1,176 +1,25 @@ - - - + + - Debug - AnyCPU - {9801F62C-540F-4BFE-9211-6405DEDE563B} - {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library - Properties Greenshot.Addon.Win10 Greenshot.Addon.Win10 - v4.6.1 - 512 - - 8.1 - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 + net471;netcoreapp3.0 + - - ..\packages\Autofac.4.8.1\lib\net45\Autofac.dll - - - ..\packages\Autofac.Extras.AttributeMetadata.4.0.1\lib\net45\Autofac.Extras.AttributeMetadata.dll - - - ..\packages\Autofac.Mef.4.0.0\lib\net45\Autofac.Integration.Mef.dll - - - ..\packages\Caliburn.Micro.Core.3.2.0\lib\net45\Caliburn.Micro.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\Caliburn.Micro.Platform.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\Caliburn.Micro.Platform.Core.dll - - - ..\packages\CommonServiceLocator.2.0.4\lib\net46\CommonServiceLocator.dll - - - ..\packages\Dapplo.Addons.1.0.79\lib\net461\Dapplo.Addons.dll - - - ..\packages\Dapplo.Addons.Bootstrapper.1.0.79\lib\net461\Dapplo.Addons.Bootstrapper.dll - - - ..\packages\Dapplo.CaliburnMicro.1.0.75\lib\net461\Dapplo.CaliburnMicro.dll - - - ..\packages\Dapplo.CaliburnMicro.Configuration.1.0.75\lib\net461\Dapplo.CaliburnMicro.Configuration.dll - - - ..\packages\Dapplo.CaliburnMicro.Dapp.1.0.75\lib\net461\Dapplo.CaliburnMicro.Dapp.dll - - - ..\packages\Dapplo.CaliburnMicro.Menu.1.0.75\lib\net461\Dapplo.CaliburnMicro.Menu.dll - - - ..\packages\Dapplo.CaliburnMicro.Security.1.0.75\lib\net461\Dapplo.CaliburnMicro.Security.dll - - - ..\packages\Dapplo.CaliburnMicro.Translations.1.0.75\lib\net461\Dapplo.CaliburnMicro.Translations.dll - - - ..\packages\Dapplo.Ini.0.5.31\lib\net45\Dapplo.Ini.dll - - - ..\packages\Dapplo.InterfaceImpl.0.2.12\lib\net45\Dapplo.InterfaceImpl.dll - - - ..\packages\Dapplo.Language.0.5.31\lib\net45\Dapplo.Language.dll - - - ..\packages\Dapplo.Log.1.2.1\lib\net45\Dapplo.Log.dll - - - ..\packages\Dapplo.Utils.1.0.161\lib\net45\Dapplo.Utils.dll - - - ..\packages\Dapplo.Windows.0.5.109\lib\net461\Dapplo.Windows.dll - - - ..\packages\Dapplo.Windows.Clipboard.0.5.109\lib\net461\Dapplo.Windows.Clipboard.dll - - - ..\packages\Dapplo.Windows.Common.0.5.109\lib\net461\Dapplo.Windows.Common.dll - - - ..\packages\Dapplo.Windows.DesktopWindowsManager.0.5.109\lib\net461\Dapplo.Windows.DesktopWindowsManager.dll - - - ..\packages\Dapplo.Windows.Dpi.0.5.109\lib\net461\Dapplo.Windows.Dpi.dll - - - ..\packages\Dapplo.Windows.Gdi32.0.5.109\lib\net461\Dapplo.Windows.Gdi32.dll - - - ..\packages\Dapplo.Windows.Input.0.5.109\lib\net461\Dapplo.Windows.Input.dll - - - ..\packages\Dapplo.Windows.Kernel32.0.5.109\lib\net461\Dapplo.Windows.Kernel32.dll - - - ..\packages\Dapplo.Windows.Messages.0.5.109\lib\net461\Dapplo.Windows.Messages.dll - - - ..\packages\Dapplo.Windows.User32.0.5.109\lib\net461\Dapplo.Windows.User32.dll - - - - - - - - - - - ..\packages\System.Reactive.4.1.0\lib\net46\System.Reactive.dll - - - - ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.1\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll - - - - ..\packages\System.Threading.Tasks.Extensions.4.5.1\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll - - - ..\packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll - - - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\System.Windows.Interactivity.dll - - - - - - - - + + PreserveNewest + - - - - - - - - - - + + + + + C:\Program Files (x86)\Windows Kits\10\UnionMetadata\10.0.16299.0\Windows.winmd + - - + + False @@ -180,28 +29,36 @@ C:\Program Files (x86)\Windows Kits\10\UnionMetadata\10.0.16299.0\Windows.winmd - - {bf35190d-b2a7-4cfa-b397-51cb384cf0d7} - Greenshot.Core - - - {f041c685-eb96-4ed1-9ace-0f5bd836610f} - Greenshot.Gfx - - - {5B924697-4DCD-4F98-85F1-105CB84B7341} - Greenshot.Addons - + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + - - - mkdir "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons" -copy "$(ProjectDir)bin\$(Configuration)\$(ProjectName).dll" "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons\" -copy "$(ProjectDir)bin\$(Configuration)\$(ProjectName).pdb" "$(SolutionDir)Greenshot\bin\$(Configuration)\Addons\" - - \ No newline at end of file diff --git a/src/Greenshot.Addon.Win10/Properties/AssemblyInfo.cs b/src/Greenshot.Addon.Win10/Properties/AssemblyInfo.cs deleted file mode 100644 index ed29b9b22..000000000 --- a/src/Greenshot.Addon.Win10/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Greenshot.Addon.Win10")] -[assembly: AssemblyDescription("A plug-in for Windows 10 only functionality")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Greenshot")] -[assembly: AssemblyProduct("Windown 10 Plug-in")] -[assembly: AssemblyCopyright("Copyright © Greenshot 2007-2018")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("9801f62c-540f-4bfe-9211-6405dede563b")] - -// The assembly version, replaced by build scripts -[assembly: AssemblyVersion("1.2.0.0")] -[assembly: AssemblyInformationalVersion("1.2.0.0")] -[assembly: AssemblyFileVersion("1.2.0.0")] diff --git a/src/Greenshot.Addon.Win10/Win10ShareDestination.cs b/src/Greenshot.Addon.Win10/Win10ShareDestination.cs index b912265b7..5a6f23402 100644 --- a/src/Greenshot.Addon.Win10/Win10ShareDestination.cs +++ b/src/Greenshot.Addon.Win10/Win10ShareDestination.cs @@ -41,6 +41,7 @@ using Greenshot.Addons.Interfaces.Plugin; using Greenshot.Core.Enums; using Greenshot.Gfx; using Color = Windows.UI.Color; +using Greenshot.Addons.Resources; namespace Greenshot.Addon.Win10 { @@ -78,7 +79,7 @@ namespace Greenshot.Addon.Win10 public bool IsDestroyed { get; set; } public bool IsShareCompleted { get; set; } - public TaskCompletionSource ShareTask { get; } = new TaskCompletionSource(); + public TaskCompletionSource ShareTask { get; } = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); public bool IsDataRequested { get; set; } } @@ -89,7 +90,7 @@ namespace Greenshot.Addon.Win10 /// /// /// ExportInformation - protected override ExportInformation ExportCapture(bool manuallyInitiated, ISurface surface, ICaptureDetails captureDetails) + public override async Task ExportCaptureAsync(bool manuallyInitiated, ISurface surface, ICaptureDetails captureDetails) { var exportInformation = new ExportInformation(Designation, Description); try @@ -120,7 +121,7 @@ namespace Greenshot.Addon.Win10 }); var windowHandle = new WindowInteropHelper(triggerWindow).Handle; - Share(shareInfo, windowHandle, surface, captureDetails).Wait(); + await Share(shareInfo, windowHandle, surface, captureDetails); Log.Debug().WriteLine("Sharing finished, closing window."); triggerWindow.Close(); if (string.IsNullOrWhiteSpace(shareInfo.ApplicationName)) @@ -180,7 +181,7 @@ namespace Greenshot.Addon.Win10 // Create logo RandomAccessStreamReference logoRandomAccessStreamReference; - using (var logo = GreenshotResources.GetGreenshotIcon().ToBitmap()) + using (var logo = GreenshotResources.Instance.GetGreenshotIcon().ToBitmap()) using (var logoThumbnail = logo.CreateThumbnail(30, 30)) { ImageOutput.SaveToStream(logoThumbnail, null, logoStream, outputSettings); @@ -215,6 +216,8 @@ namespace Greenshot.Addon.Win10 } // Signal that the stream is ready streamedFileDataRequest.Dispose(); + // Signal that the action is ready, bitmap was exported + shareInfo.ShareTask.TrySetResult(true); } catch (Exception) { diff --git a/src/Greenshot.Addon.Win10/packages.config b/src/Greenshot.Addon.Win10/packages.config deleted file mode 100644 index 2219eeae9..000000000 --- a/src/Greenshot.Addon.Win10/packages.config +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Greenshot.Addons/AddonsModule.cs b/src/Greenshot.Addons/AddonsModule.cs index 34e964617..09f128f08 100644 --- a/src/Greenshot.Addons/AddonsModule.cs +++ b/src/Greenshot.Addons/AddonsModule.cs @@ -24,11 +24,13 @@ using Autofac; using Dapplo.Addons; using Dapplo.CaliburnMicro.Configuration; -using Dapplo.Ini; -using Dapplo.Language; +using Dapplo.Config.Ini; +using Dapplo.Config.Language; using Greenshot.Addons.Components; +using Greenshot.Addons.Config.Impl; using Greenshot.Addons.Controls; using Greenshot.Addons.Core; +using Greenshot.Addons.Resources; using Greenshot.Addons.ViewModels; namespace Greenshot.Addons @@ -39,28 +41,28 @@ namespace Greenshot.Addons protected override void Load(ContainerBuilder builder) { builder - .Register(context => IniConfig.Current.Get()) - .As() - .SingleInstance(); - - builder - .Register(context => IniConfig.Current.Get()) + .RegisterType() .As() + .As() + .As() .SingleInstance(); builder - .Register(context => LanguageLoader.Current.Get()) + .RegisterType() .As() + .As() .SingleInstance(); builder - .Register(context => IniConfig.Current.Get()) + .RegisterType() .As() + .As() .SingleInstance(); builder .RegisterType() .AsSelf(); + builder .RegisterType() .AsSelf(); @@ -69,26 +71,19 @@ namespace Greenshot.Addons .RegisterType() .AsSelf(); - builder.RegisterType() - .As() - .SingleInstance(); - builder.RegisterType() .AsSelf() .SingleInstance(); + builder.RegisterType() .AsSelf(); - base.Load(builder); - } - /// - private class SetupConfig : IStartable - { - public void Start() - { - // Register the after load, so it's called when the configuration is created - IniConfig.Current.AfterLoad(coreConfiguration => coreConfiguration.AfterLoad()); - } + builder + .RegisterType() + .AsSelf() + .SingleInstance(); + + base.Load(builder); } } } diff --git a/src/Greenshot.Addons/Animation/EasePower.cs b/src/Greenshot.Addons/Animation/EasePower.cs index 82abe6d93..d13ab152f 100644 --- a/src/Greenshot.Addons/Animation/EasePower.cs +++ b/src/Greenshot.Addons/Animation/EasePower.cs @@ -34,11 +34,23 @@ namespace Greenshot.Addons.Animation /// public static class EasePower { + /// + /// Calculate EaseIn + /// + /// double + /// int + /// double public static double EaseIn(double s, int power) { return Math.Pow(s, power); } + /// + /// Calculate EaseInOut + /// + /// double + /// int + /// double public static double EaseInOut(double s, int power) { s *= 2; @@ -50,6 +62,12 @@ namespace Greenshot.Addons.Animation return sign / 2.0 * (Math.Pow(s - 2, power) + sign * 2); } + /// + /// Calculate EaseOut + /// + /// double + /// int + /// double public static double EaseOut(double s, int power) { var sign = power % 2 == 0 ? -1 : 1; diff --git a/src/Greenshot.Addons/Config/Impl/CoreConfigurationImpl.cs b/src/Greenshot.Addons/Config/Impl/CoreConfigurationImpl.cs new file mode 100644 index 000000000..1eac3c3e4 --- /dev/null +++ b/src/Greenshot.Addons/Config/Impl/CoreConfigurationImpl.cs @@ -0,0 +1,164 @@ +#region Greenshot GNU General Public License + +// Greenshot - a free and open source screenshot tool +// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom +// +// For more information see: http://getgreenshot.org/ +// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 1 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#endregion + +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Windows; +using Dapplo.Config.Ini; +using Dapplo.Windows.Common.Structs; +using Dapplo.Windows.User32.Structs; +using Greenshot.Addons.Core; +using Greenshot.Addons.Core.Enums; +using Greenshot.Core.Enums; + +namespace Greenshot.Addons.Config.Impl +{ + public class CoreConfigurationImpl : IniSectionBase, ICoreConfiguration + { + #region Overrides of IniSectionBase + + public override void AfterLoad() + { + CoreConfigurationExtensions.AfterLoad(this); + } + + #endregion + + #region Implementation of IFileConfiguration + + public string OutputFilePath { get; set; } + public bool OutputFileAllowOverwrite { get; set; } + public string OutputFileFilenamePattern { get; set; } + public OutputFormats OutputFileFormat { get; set; } + public bool OutputFileReduceColors { get; set; } + public bool OutputFileAutoReduceColors { get; set; } + public int OutputFileReduceColorsTo { get; set; } + public int OutputFileJpegQuality { get; set; } + public bool OutputFilePromptQuality { get; set; } + public uint OutputFileIncrementingNumber { get; set; } + public string OptimizePNGCommand { get; set; } + public string OptimizePNGCommandArguments { get; set; } + + #endregion + + #region Implementation of ICaptureConfiguration + + public NativeSize Win10BorderCrop { get; set; } + public bool CaptureMousepointer { get; set; } + public bool CaptureWindowsInteractive { get; set; } + public int CaptureDelay { get; set; } + public ScreenCaptureMode ScreenCaptureMode { get; set; } + public int ScreenToCapture { get; set; } + public WindowCaptureModes WindowCaptureMode { get; set; } + public Color DWMBackgroundColor { get; set; } + public IList NoGDICaptureForProduct { get; set; } + public IList NoDWMCaptureForProduct { get; set; } + public bool WindowCaptureRemoveCorners { get; set; } + public IList WindowCornerCutShape { get; set; } + + #endregion + + #region Implementation of ICoreConfiguration + + public string Language { get; set; } + public string RegionHotkey { get; set; } + public string WindowHotkey { get; set; } + public string FullscreenHotkey { get; set; } + public string LastregionHotkey { get; set; } + public string IEHotkey { get; set; } + public bool IsFirstLaunch { get; set; } + public IList OutputDestinations { get; set; } + public IList PickerDestinations { get; set; } + public IList ClipboardFormats { get; set; } + public bool WindowCaptureAllChildLocations { get; set; } + public bool PlayCameraSound { get; set; } + public bool ShowTrayNotification { get; set; } + public bool OutputFileCopyPathToClipboard { get; set; } + public string OutputFileAsFullpath { get; set; } + public bool OutputPrintPromptOptions { get; set; } + public bool OutputPrintAllowRotate { get; set; } + public bool OutputPrintAllowEnlarge { get; set; } + public bool OutputPrintAllowShrink { get; set; } + public bool OutputPrintCenter { get; set; } + public bool OutputPrintInverted { get; set; } + public bool OutputPrintGrayscale { get; set; } + public bool OutputPrintMonochrome { get; set; } + public byte OutputPrintMonochromeThreshold { get; set; } + public bool OutputPrintFooter { get; set; } + public string OutputPrintFooterPattern { get; set; } + public string NotificationSound { get; set; } + public bool UseProxy { get; set; } + public bool IECapture { get; set; } + public bool IEFieldCapture { get; set; } + public IList WindowClassesToCheckForIE { get; set; } + public int AutoCropDifference { get; set; } + public IList IncludePlugins { get; set; } + public IList ExcludePlugins { get; set; } + public IList ExcludeDestinations { get; set; } + public bool CheckForUpdates { get; set; } + public int UpdateCheckInterval { get; set; } + public DateTime LastUpdateCheck { get; set; } + public bool DisableSettings { get; set; } + public bool DisableQuickSettings { get; set; } + public bool HideTrayicon { get; set; } + public bool HideExpertSettings { get; set; } + public bool ThumnailPreview { get; set; } + public bool OptimizeForRDP { get; set; } + public bool DisableRDPOptimizing { get; set; } + public bool MinimizeWorkingSetSize { get; set; } + public bool CheckForUnstable { get; set; } + public IList ActiveTitleFixes { get; set; } + public IDictionary TitleFixMatcher { get; set; } + public IDictionary TitleFixReplacer { get; set; } + public IList ExperimentalFeatures { get; set; } + public bool EnableSpecialDIBClipboardReader { get; set; } + public ClickActions LeftClickAction { get; set; } + public ClickActions DoubleClickAction { get; set; } + public bool ZoomerEnabled { get; set; } + public float ZoomerOpacity { get; set; } + public int MaxMenuItemLength { get; set; } + public string MailApiTo { get; set; } + public string MailApiCC { get; set; } + public string MailApiBCC { get; set; } + public string LastSaveWithVersion { get; set; } + public bool ProcessEXIFOrientation { get; set; } + public NativeRect LastCapturedRegion { get; set; } + public NativeSize IconSize { get; set; } + public int WebRequestTimeout { get; set; } + public int WebRequestReadWriteTimeout { get; set; } + public bool IsScrollingCaptureEnabled { get; set; } + public bool IsPortable { get; set; } + public ISet Permissions { get; set; } + + #endregion + + #region Implementation of IUiConfiguration + + public WindowStartupLocation DefaultWindowStartupLocation { get; set; } + public bool AreWindowLocationsStored { get; set; } + public IDictionary WindowLocations { get; set; } + + #endregion + } +} diff --git a/src/Greenshot.Addons/Config/Impl/GreenshotLanguageImpl.cs b/src/Greenshot.Addons/Config/Impl/GreenshotLanguageImpl.cs new file mode 100644 index 000000000..19ebfaaba --- /dev/null +++ b/src/Greenshot.Addons/Config/Impl/GreenshotLanguageImpl.cs @@ -0,0 +1,184 @@ +#region Greenshot GNU General Public License + +// Greenshot - a free and open source screenshot tool +// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom +// +// For more information see: http://getgreenshot.org/ +// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 1 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#endregion + +using System.Diagnostics.CodeAnalysis; +using Dapplo.Config.Language; + +namespace Greenshot.Addons.Config.Impl +{ + /// + /// This implements IGreenshotLanguage and takes care of storing, all setters are replaced via AutoProperties.Fody + /// + [SuppressMessage("ReSharper", "UnassignedGetOnlyAutoProperty")] +#pragma warning disable CS1591 + internal class GreenshotLanguageImpl : LanguageBase, IGreenshotLanguage + { + #region Implementation of ICoreTranslations + + public string Cancel { get; } + public string Ok { get; } + + #endregion + + #region Implementation of IGreenshotLanguage + + public string None { get; } + public string AboutBugs { get; } + public string AboutDonations { get; } + public string AboutHost { get; } + public string AboutIcons { get; } + public string AboutLicense { get; } + public string AboutTitle { get; } + public string AboutTranslation { get; } + public string ApplicationTitle { get; } + public string BugreportCancel { get; } + public string BugreportInfo { get; } + public string BugreportTitle { get; } + public string ClipboardError { get; } + public string ClipboardInuse { get; } + public string Close { get; } + public string ColorpickerAlpha { get; } + public string ColorpickerApply { get; } + public string ColorpickerBlue { get; } + public string ColorpickerGreen { get; } + public string ColorpickerHtmlcolor { get; } + public string ColorpickerRecentcolors { get; } + public string ColorpickerRed { get; } + public string ColorpickerTitle { get; } + public string ColorpickerTransparent { get; } + public string ConfigUnauthorizedaccessWrite { get; } + public string ContextmenuAbout { get; } + public string ContextmenuCapturearea { get; } + public string ContextmenuCaptureclipboard { get; } + public string ContextmenuCapturefullscreen { get; } + public string ContextmenuCapturefullscreenAll { get; } + public string ContextmenuCapturefullscreenLeft { get; } + public string ContextmenuCapturefullscreenTop { get; } + public string ContextmenuCapturefullscreenRight { get; } + public string ContextmenuCapturefullscreenBottom { get; } + public string ContextmenuCapturelastregion { get; } + public string ContextmenuCapturewindow { get; } + public string ContextmenuDonate { get; } + public string ContextmenuExit { get; } + public string ContextmenuHelp { get; } + public string ContextmenuOpenfile { get; } + public string ContextmenuQuicksettings { get; } + public string ContextmenuSettings { get; } + public string ContextmenuCaptureie { get; } + public string ContextmenuOpenrecentcapture { get; } + public string Error { get; } + public string ErrorMultipleinstances { get; } + public string ErrorNowriteaccess { get; } + public string ErrorOpenfile { get; } + public string ErrorOpenlink { get; } + public string ErrorSave { get; } + public string ErrorSaveInvalidChars { get; } + public string HelpTitle { get; } + public string JpegqualitydialogChoosejpegquality { get; } + public string QualitydialogDontaskagain { get; } + public string QualitydialogTitle { get; } + public string SettingsReducecolors { get; } + public string PrintError { get; } + public string PrintoptionsAllowcenter { get; } + public string PrintoptionsAllowenlarge { get; } + public string PrintoptionsAllowrotate { get; } + public string PrintoptionsAllowshrink { get; } + public string PrintoptionsColors { get; } + public string PrintoptionsDontaskagain { get; } + public string PrintoptionsPagelayout { get; } + public string PrintoptionsPrintcolor { get; } + public string PrintoptionsPrintgrayscale { get; } + public string PrintoptionsPrintmonochrome { get; } + public string PrintoptionsTimestamp { get; } + public string PrintoptionsInverted { get; } + public string PrintoptionsTitle { get; } + public string QuicksettingsDestinationFile { get; } + public string SettingsAlwaysshowqualitydialog { get; } + public string SettingsAlwaysshowprintoptionsdialog { get; } + public string SettingsApplicationsettings { get; } + public string SettingsAutostartshortcut { get; } + public string SettingsCapture { get; } + public string SettingsCaptureMousepointer { get; } + public string SettingsCaptureWindowsInteractive { get; } + public string SettingsCopypathtoclipboard { get; } + public string SettingsDestination { get; } + public string SettingsDestinationClipboard { get; } + public string SettingsDestinationEditor { get; } + public string SettingsDestinationEmail { get; } + public string SettingsDestinationFile { get; } + public string SettingsDestinationFileas { get; } + public string SettingsDestinationPrinter { get; } + public string SettingsDestinationPicker { get; } + public string SettingsEditor { get; } + public string SettingsFilenamepattern { get; } + public string SettingsGeneral { get; } + public string SettingsIecapture { get; } + public string SettingsJpegquality { get; } + public string SettingsQualitysettings { get; } + public string SettingsLanguage { get; } + public string SettingsMessageFilenamepattern { get; } + public string SettingsOutput { get; } + public string SettingsPlaysound { get; } + public string SettingsPlugins { get; } + public string SettingsPluginsName { get; } + public string SettingsPluginsVersion { get; } + public string SettingsPluginsCreatedby { get; } + public string SettingsPluginsDllpath { get; } + public string SettingsPreferredfilesettings { get; } + public string SettingsPrimaryimageformat { get; } + public string SettingsPrinter { get; } + public string SettingsPrintoptions { get; } + public string SettingsRegisterhotkeys { get; } + public string SettingsShowflashlight { get; } + public string SettingsStoragelocation { get; } + public string SettingsTitle { get; } + public string SettingsTooltipFilenamepattern { get; } + public string SettingsTooltipLanguage { get; } + public string SettingsTooltipPrimaryimageformat { get; } + public string SettingsTooltipRegisterhotkeys { get; } + public string SettingsTooltipStoragelocation { get; } + public string SettingsVisualization { get; } + public string SettingsShownotify { get; } + public string SettingsWaittime { get; } + public string SettingsZoom { get; } + public string SettingsWindowscapture { get; } + public string SettingsWindowCaptureMode { get; } + public string SettingsScreenCaptureMode { get; } + public string SettingsNetwork { get; } + public string SettingsCheckperiod { get; } + public string SettingsUsedefaultproxy { get; } + public string TooltipFirststart { get; } + public string Warning { get; } + public string WarningHotkeys { get; } + public string Hotkeys { get; } + public string WaitIeCapture { get; } + public string UpdateFound { get; } + public string ExportedTo { get; } + public string LatestVersion { get; } + public string CurrentVersion { get; } + public string Expert { get; } + public string DestinationExportFailed { get; } + + #endregion + } +} diff --git a/src/Greenshot.Addons/Config/Impl/HttpConfigurationImpl.cs b/src/Greenshot.Addons/Config/Impl/HttpConfigurationImpl.cs new file mode 100644 index 000000000..bf1a2f62e --- /dev/null +++ b/src/Greenshot.Addons/Config/Impl/HttpConfigurationImpl.cs @@ -0,0 +1,76 @@ +#region Greenshot GNU General Public License + +// Greenshot - a free and open source screenshot tool +// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom +// +// For more information see: http://getgreenshot.org/ +// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 1 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#endregion + +using System; +using System.Net; +using System.Net.Cache; +using System.Net.Http; +using System.Net.Security; +using System.Security.Cryptography.X509Certificates; +using System.Security.Principal; +using Dapplo.Config.Ini; +using Dapplo.HttpExtensions; +using Greenshot.Addons.Core; + +namespace Greenshot.Addons.Config.Impl +{ + internal class HttpConfigurationImpl : IniSectionBase, IHttpConfiguration + { + public bool AllowAutoRedirect { get; set; } + public ICredentials Credentials { get; set; } + public ClientCertificateOption ClientCertificateOptions { get; set; } + public DecompressionMethods DefaultDecompressionMethods { get; set; } + public string DefaultUserAgent { get; set; } + public bool Expect100Continue { get; set; } + public int MaxAutomaticRedirections { get; set; } + public long MaxResponseContentBufferSize { get; set; } + public bool PreAuthenticate { get; set; } + public TimeSpan RequestTimeout { get; set; } + public bool UseCookies { get; set; } + public bool UseDefaultCredentials { get; set; } + public AuthenticationLevel AuthenticationLevel { get; set; } + public X509CertificateCollection ClientCertificates { get; set; } + public int MaxConnectionsPerServer { get; set; } + public Uri ProxyUri { get; set; } + public string[] ProxyBypassList { get; set; } + public bool ProxyBypassOnLocal { get; set; } + public ICredentials ProxyCredentials { get; set; } + public long MaxRequestContentBufferSize { get; set; } + public int MaxResponseHeadersLength { get; set; } + public bool UseProxy { get; set; } + public bool IgnoreSslCertificateErrors { get; set; } + public bool UseDefaultCredentialsForProxy { get; set; } + public bool UseDefaultProxy { get; set; } + public TimeSpan ContinueTimeout { get; set; } + public bool AllowPipelining { get; set; } + + public TokenImpersonationLevel ImpersonationLevel { get; set; } + public RequestCacheLevel RequestCacheLevel { get; set; } + public int ReadWriteTimeout { get; set; } + + IHttpSettings IHttpSettings.ShallowClone() + { + return ShallowClone() as IHttpSettings; + } + } +} diff --git a/src/Greenshot.Addons/Controls/AnimatingForm.cs b/src/Greenshot.Addons/Controls/AnimatingForm.cs index 606f9521d..3f007f65e 100644 --- a/src/Greenshot.Addons/Controls/AnimatingForm.cs +++ b/src/Greenshot.Addons/Controls/AnimatingForm.cs @@ -25,7 +25,7 @@ using System; using System.Windows.Forms; -using Dapplo.Language; +using Dapplo.Config.Language; using Dapplo.Log; using Dapplo.Windows.Gdi32; using Dapplo.Windows.Gdi32.Enums; @@ -41,7 +41,7 @@ namespace Greenshot.Addons.Controls /// public class AnimatingForm : GreenshotForm { - private readonly ICoreConfiguration _coreConfiguration; + protected readonly ICoreConfiguration _coreConfiguration; private const int DefaultVerticalRefresh = 60; private static readonly LogSource Log = new LogSource(); private Timer _timer; diff --git a/src/Greenshot.Addons/Controls/BackgroundForm.cs b/src/Greenshot.Addons/Controls/BackgroundForm.cs index d96007089..e9958a493 100644 --- a/src/Greenshot.Addons/Controls/BackgroundForm.cs +++ b/src/Greenshot.Addons/Controls/BackgroundForm.cs @@ -28,6 +28,7 @@ using System.Drawing; using System.Threading; using System.Windows.Forms; using Greenshot.Addons.Core; +using Greenshot.Addons.Resources; #endregion @@ -46,7 +47,7 @@ namespace Greenshot.Addons.Controls // The InitializeComponent() call is required for Windows Forms designer support. // InitializeComponent(); - Icon = GreenshotResources.GetGreenshotIcon(); + Icon = GreenshotResources.Instance.GetGreenshotIcon(); _shouldClose = false; Text = title; label_pleasewait.Text = text; diff --git a/src/Greenshot.Addons/Controls/ContextMenuToolStripProfessionalRenderer.cs b/src/Greenshot.Addons/Controls/ContextMenuToolStripProfessionalRenderer.cs index 4121b6cc0..7ba5aaeee 100644 --- a/src/Greenshot.Addons/Controls/ContextMenuToolStripProfessionalRenderer.cs +++ b/src/Greenshot.Addons/Controls/ContextMenuToolStripProfessionalRenderer.cs @@ -25,7 +25,8 @@ using System.Drawing; using System.Windows.Forms; -using Dapplo.Ini; +using Dapplo.Windows.Common.Structs; +using Greenshot.Addons.Config.Impl; using Greenshot.Addons.Core; using Greenshot.Gfx; @@ -38,12 +39,14 @@ namespace Greenshot.Addons.Controls /// public class ContextMenuToolStripProfessionalRenderer : ToolStripProfessionalRenderer { - private static readonly ICoreConfiguration CoreConfig = IniConfig.Current.Get(); - private Image _scaledCheckbox; + // TODO: Solve, was static reference! + private static readonly ICoreConfiguration CoreConfig = new CoreConfigurationImpl(); + + private Image _scaledCheckbox; private bool _newImage; protected override void OnRenderItemCheck(ToolStripItemImageRenderEventArgs e) { - if (_scaledCheckbox == null || _scaledCheckbox.Size != CoreConfig.IconSize) + if (_scaledCheckbox == null || (NativeSize)_scaledCheckbox.Size != CoreConfig.IconSize) { if (_newImage) { diff --git a/src/Greenshot.Addons/Controls/GreenshotComboBox.cs b/src/Greenshot.Addons/Controls/GreenshotComboBox.cs index f806fb477..e95b1e014 100644 --- a/src/Greenshot.Addons/Controls/GreenshotComboBox.cs +++ b/src/Greenshot.Addons/Controls/GreenshotComboBox.cs @@ -25,8 +25,9 @@ using System; using System.ComponentModel; +using System.Linq; using System.Windows.Forms; -using Dapplo.Language; +using Dapplo.Config.Language; #endregion diff --git a/src/Greenshot.Addons/Controls/GreenshotForm.cs b/src/Greenshot.Addons/Controls/GreenshotForm.cs index 3a911e7a2..b7885413f 100644 --- a/src/Greenshot.Addons/Controls/GreenshotForm.cs +++ b/src/Greenshot.Addons/Controls/GreenshotForm.cs @@ -26,16 +26,19 @@ using System; using System.Collections.Generic; using System.ComponentModel; +using System.Linq; using System.Reflection; using System.Windows.Forms; -using Dapplo.Ini; -using Dapplo.InterfaceImpl.Extensions; -using Dapplo.Language; +using Dapplo.Config.Ini; +using Dapplo.Config.Interfaces; +using Dapplo.Config.Language; using Dapplo.Log; +using Dapplo.Utils; using Dapplo.Windows.Desktop; using Dapplo.Windows.Dpi; using Dapplo.Windows.Dpi.Forms; using Greenshot.Addons.Core; +using Greenshot.Addons.Resources; using Greenshot.Gfx; #endregion @@ -66,7 +69,7 @@ namespace Greenshot.Addons.Controls { _language = language; // Add the Dapplo.Windows DPI change handler - ScaleHandler = BitmapScaleHandler.WithComponentResourceManager(FormDpiHandler, GetType(), (bitmap, dpi) => bitmap.ScaleIconForDisplaying(dpi)); + ScaleHandler = BitmapScaleHandler.Create(FormDpiHandler, (imageName, dpi) => GreenshotResources.Instance.GetBitmap(imageName, GetType()), (bitmap, dpi) => bitmap.ScaleIconForDisplaying(dpi)); } protected bool ManualLanguageApply { get; set; } @@ -87,7 +90,7 @@ namespace Greenshot.Addons.Controls { // Every GreenshotForm should have it's default icon // And it might not ne needed for a Tool Window, but still for the task manager / switcher it's important - Icon = GreenshotResources.GetGreenshotIcon(); + Icon = GreenshotResources.Instance.GetGreenshotIcon(); if (!ManualLanguageApply) { ApplyLanguage(); @@ -142,17 +145,33 @@ namespace Greenshot.Addons.Controls return; } - if (!string.IsNullOrEmpty(languageKey) && _language.Keys().Contains(languageKey)) + string translation; + if (!string.IsNullOrEmpty(languageKey)) { - applyTo.Text = _language[languageKey]; + if (_language.TryGetTranslation(languageKey, out translation)) + { + applyTo.Text = translation; + return; + } + + var dotIndex = languageKey.IndexOf('.'); + if (dotIndex >= 0) + { + var alternativeKey = languageKey.Substring(dotIndex + 1); + if (_language.TryGetTranslation(alternativeKey, out translation)) + { + applyTo.Text = translation; + return; + } + } + } + + if (_language.TryGetTranslation(applyTo.Name, out translation)) + { + applyTo.Text = translation; return; } - if (_language.Keys().Contains(applyTo.Name)) - { - applyTo.Text = _language[applyTo.Name]; - return; - } Log.Warn().WriteLine("Unknown language key '{0}' configured for control '{1}'", languageKey, applyTo.Name); } @@ -194,7 +213,8 @@ namespace Greenshot.Addons.Controls return; } - var section = IniConfig.Current[configBindable.SectionName]; + // TODO: Fix this + IIniSection section = null; // IniConfig.Current[configBindable.SectionName]; if (section == null) { return; @@ -202,7 +222,7 @@ namespace Greenshot.Addons.Controls // Only update the language, so get the actual value and than repopulate var currentValue = comboxBox.GetSelectedEnum(); - comboxBox.Populate(section[configBindable.PropertyName].ValueType); + comboxBox.Populate(section.GetIniValue(configBindable.PropertyName).ValueType); comboxBox.SetValue(currentValue); } @@ -234,7 +254,7 @@ namespace Greenshot.Addons.Controls try { // Set title of the form - if (!string.IsNullOrEmpty(LanguageKey) && _language.Keys().Contains(LanguageKey)) + if (!string.IsNullOrEmpty(LanguageKey) && _language.Keys().Contains(LanguageKey, AbcComparer.Instance)) { Text = _language[LanguageKey]; } @@ -280,15 +300,30 @@ namespace Greenshot.Addons.Controls return; } - if (!string.IsNullOrEmpty(languageKey) && _language.Keys().Contains(languageKey)) + string translation; + if (!string.IsNullOrEmpty(languageKey)) { - applyTo.Text = _language[languageKey]; - return; + if (_language.TryGetTranslation(languageKey, out translation)) + { + applyTo.Text = translation; + return; + } + + var dotIndex = languageKey.IndexOf('.'); + if (dotIndex >= 0) + { + var alternativeKey = languageKey.Substring(dotIndex + 1); + if (_language.TryGetTranslation(alternativeKey, out translation)) + { + applyTo.Text = translation; + return; + } + } } - if (_language.Keys().Contains(applyTo.Name)) + if (_language.TryGetTranslation(applyTo.Name, out translation)) { - applyTo.Text = _language[applyTo.Name]; + applyTo.Text = translation; return; } Log.Warn().WriteLine("Wrong language key '{0}' configured for control '{1}'", languageKey, applyTo.Name); @@ -308,7 +343,8 @@ namespace Greenshot.Addons.Controls continue; } - var section = IniConfig.Current[configBindable.SectionName]; + // TODO: Fix this + IIniSection section = null;//IniConfig.Current[configBindable.SectionName]; if (section == null) { continue; @@ -375,7 +411,8 @@ namespace Greenshot.Addons.Controls continue; } - var section = IniConfig.Current[configBindable.SectionName]; + // TODO: Fix this + IIniSection section = null;//IniConfig.Current[configBindable.SectionName]; if (section == null) { continue; diff --git a/src/Greenshot.Addons/Controls/InvertedBoolenConverter.cs b/src/Greenshot.Addons/Controls/InvertedBooleanConverter.cs similarity index 93% rename from src/Greenshot.Addons/Controls/InvertedBoolenConverter.cs rename to src/Greenshot.Addons/Controls/InvertedBooleanConverter.cs index 7c42d8b75..bc45d5a97 100644 --- a/src/Greenshot.Addons/Controls/InvertedBoolenConverter.cs +++ b/src/Greenshot.Addons/Controls/InvertedBooleanConverter.cs @@ -27,7 +27,7 @@ using System.Windows.Data; namespace Greenshot.Addons.Controls { - public class InvertedBoolenConverter : IValueConverter + public class InvertedBooleanConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { diff --git a/src/Greenshot.Addons/Controls/PleaseWaitForm.cs b/src/Greenshot.Addons/Controls/PleaseWaitForm.cs index 4084e0c36..04d74c3c7 100644 --- a/src/Greenshot.Addons/Controls/PleaseWaitForm.cs +++ b/src/Greenshot.Addons/Controls/PleaseWaitForm.cs @@ -29,6 +29,7 @@ using System.Threading.Tasks; using System.Windows.Forms; using Dapplo.Log; using Greenshot.Addons.Core; +using Greenshot.Addons.Resources; #endregion @@ -57,7 +58,7 @@ namespace Greenshot.Addons.Controls // The InitializeComponent() call is required for Windows Forms designer support. // InitializeComponent(); - Icon = GreenshotResources.GetGreenshotIcon(); + Icon = GreenshotResources.Instance.GetGreenshotIcon(); } public PleaseWaitForm(IGreenshotLanguage greenshotLanguage, CancellationTokenSource cancellationTokenSource = default) : this(greenshotLanguage) diff --git a/src/Greenshot.Addons/Controls/ResourceImageManager.cs b/src/Greenshot.Addons/Controls/ResourceImageManager.cs index 50b0b7a81..04fb9ea29 100644 --- a/src/Greenshot.Addons/Controls/ResourceImageManager.cs +++ b/src/Greenshot.Addons/Controls/ResourceImageManager.cs @@ -25,6 +25,7 @@ using System; using System.Collections.Generic; using System.Drawing; using System.Linq; +using Greenshot.Addons.Resources; using Greenshot.Gfx; namespace Greenshot.Addons.Controls @@ -34,12 +35,12 @@ namespace Greenshot.Addons.Controls /// public class ResourceImageManager : IDisposable { - private readonly System.ComponentModel.ComponentResourceManager _resources; + private readonly Type _resourceType; private readonly IList _images = new List(); public ResourceImageManager(Type resourceType) { - _resources = new System.ComponentModel.ComponentResourceManager(resourceType); - } + _resourceType = resourceType; + } /// /// Get icons for displaying @@ -48,7 +49,7 @@ namespace Greenshot.Addons.Controls /// Bitmap public Bitmap GetIcon(string imageName) { - var bitmap = (Bitmap)_resources.GetObject(imageName); + var bitmap = GreenshotResources.Instance.GetBitmap(imageName, _resourceType); var result = bitmap.ScaleIconForDisplaying(96); if (Equals(bitmap, result)) { diff --git a/src/Greenshot.Addons/Controls/SaveImageFileDialog.cs b/src/Greenshot.Addons/Controls/SaveImageFileDialog.cs index 8671b2468..7a6de3ad1 100644 --- a/src/Greenshot.Addons/Controls/SaveImageFileDialog.cs +++ b/src/Greenshot.Addons/Controls/SaveImageFileDialog.cs @@ -26,8 +26,8 @@ using System; using System.IO; using System.Windows.Forms; -using Dapplo.Ini; using Dapplo.Log; +using Greenshot.Addons.Config.Impl; using Greenshot.Addons.Core; using Greenshot.Addons.Interfaces; using Greenshot.Core.Enums; @@ -43,8 +43,9 @@ namespace Greenshot.Addons.Controls public class SaveImageFileDialog : IDisposable { private static readonly LogSource Log = new LogSource(); - private static readonly ICoreConfiguration conf = IniConfig.Current.Get(); - private readonly ICaptureDetails _captureDetails; + // TODO: Solve, was static reference! + private static readonly ICoreConfiguration CoreConfiguration = new CoreConfigurationImpl(); + private readonly ICaptureDetails _captureDetails; private DirectoryInfo _eagerlyCreatedDirectory; private FilterOption[] _filterOptions; protected SaveFileDialog SaveFileDialog; @@ -145,21 +146,21 @@ namespace Greenshot.Addons.Controls string initialDirectory = null; try { - conf.ValidateAndCorrect(); - initialDirectory = Path.GetDirectoryName(conf.OutputFileAsFullpath); + CoreConfiguration.ValidateAndCorrect(); + initialDirectory = Path.GetDirectoryName(CoreConfiguration.OutputFileAsFullpath); } catch { - Log.Warn().WriteLine("OutputFileAsFullpath was set to {0}, ignoring due to problem in path.", conf.OutputFileAsFullpath); + Log.Warn().WriteLine("OutputFileAsFullpath was set to {0}, ignoring due to problem in path.", CoreConfiguration.OutputFileAsFullpath); } if (!string.IsNullOrEmpty(initialDirectory) && Directory.Exists(initialDirectory)) { SaveFileDialog.InitialDirectory = initialDirectory; } - else if (Directory.Exists(conf.OutputFilePath)) + else if (Directory.Exists(CoreConfiguration.OutputFilePath)) { - SaveFileDialog.InitialDirectory = conf.OutputFilePath; + SaveFileDialog.InitialDirectory = CoreConfiguration.OutputFilePath; } // The following property fixes a problem that the directory where we save is locked (bug #2899790) SaveFileDialog.RestoreDirectory = true; @@ -174,7 +175,7 @@ namespace Greenshot.Addons.Controls PrepareFilterOptions(); var fdf = ""; var preselect = 0; - var outputFileFormatAsString = Enum.GetName(typeof(OutputFormats), conf.OutputFileFormat); + var outputFileFormatAsString = Enum.GetName(typeof(OutputFormats), CoreConfiguration.OutputFileFormat); for (var i = 0; i < _filterOptions.Length; i++) { var fo = _filterOptions[i]; @@ -223,7 +224,7 @@ namespace Greenshot.Addons.Controls private void ApplySuggestedValues() { // build the full path and set dialog properties - FileName = FilenameHelper.GetFilenameWithoutExtensionFromPattern(conf.OutputFileFilenamePattern, _captureDetails); + FileName = FilenameHelper.GetFilenameWithoutExtensionFromPattern(CoreConfiguration.OutputFileFilenamePattern, _captureDetails); } private void CleanUp() diff --git a/src/Greenshot.Addons/Controls/ThumbnailForm.cs b/src/Greenshot.Addons/Controls/ThumbnailForm.cs index cd9aade6e..5b1b490b1 100644 --- a/src/Greenshot.Addons/Controls/ThumbnailForm.cs +++ b/src/Greenshot.Addons/Controls/ThumbnailForm.cs @@ -26,13 +26,14 @@ using System; using System.Drawing; using System.Windows.Forms; -using Dapplo.Ini; using Dapplo.Windows.Common.Extensions; using Dapplo.Windows.Common.Structs; using Dapplo.Windows.Desktop; using Dapplo.Windows.DesktopWindowsManager; +using Dapplo.Windows.DesktopWindowsManager.Structs; using Dapplo.Windows.User32; using Dapplo.Windows.User32.Enums; +using Greenshot.Addons.Config.Impl; using Greenshot.Addons.Core; using Greenshot.Core.Enums; @@ -47,9 +48,10 @@ namespace Greenshot.Addons.Controls /// public sealed class ThumbnailForm : FormWithoutActivation { - private static readonly ICoreConfiguration conf = IniConfig.Current.Get(); + // TODO: Solve, was static reference! + private static readonly ICoreConfiguration coreConfiguration = new CoreConfigurationImpl(); - private IntPtr _thumbnailHandle = IntPtr.Zero; + private IntPtr _thumbnailHandle = IntPtr.Zero; public ThumbnailForm() { @@ -57,9 +59,9 @@ namespace Greenshot.Addons.Controls FormBorderStyle = FormBorderStyle.None; TopMost = false; Enabled = false; - if (conf.WindowCaptureMode == WindowCaptureModes.Auto || conf.WindowCaptureMode == WindowCaptureModes.Aero) + if (coreConfiguration.WindowCaptureMode == WindowCaptureModes.Auto || coreConfiguration.WindowCaptureMode == WindowCaptureModes.Aero) { - BackColor = Color.FromArgb(255, conf.DWMBackgroundColor.R, conf.DWMBackgroundColor.G, conf.DWMBackgroundColor.B); + BackColor = Color.FromArgb(255, coreConfiguration.DWMBackgroundColor.R, coreConfiguration.DWMBackgroundColor.G, coreConfiguration.DWMBackgroundColor.B); } else { diff --git a/src/Greenshot.Addons/Core/AbstractDestination.cs b/src/Greenshot.Addons/Core/AbstractDestination.cs index f65cd915c..5b44ef420 100644 --- a/src/Greenshot.Addons/Core/AbstractDestination.cs +++ b/src/Greenshot.Addons/Core/AbstractDestination.cs @@ -40,6 +40,7 @@ using Dapplo.Windows.Extensions; using Greenshot.Addons.Components; using Greenshot.Addons.Extensions; using Greenshot.Addons.Interfaces; +using Greenshot.Addons.Resources; using Greenshot.Gfx; #endregion @@ -390,7 +391,7 @@ namespace Greenshot.Addons.Core menu.Items.Add(new ToolStripSeparator()); var closeItem = new ToolStripMenuItem(GreenshotLanguage.ContextmenuExit) { - Image = GreenshotResources.GetBitmap("Close.Image") + Image = GreenshotResources.Instance.GetBitmap("Close.Image") }; closeItem.Click += (sender, args) => { diff --git a/src/Greenshot.Addons/Core/AbstractProcessor.cs b/src/Greenshot.Addons/Core/AbstractProcessor.cs index 1f64a9008..c84b4726d 100644 --- a/src/Greenshot.Addons/Core/AbstractProcessor.cs +++ b/src/Greenshot.Addons/Core/AbstractProcessor.cs @@ -36,12 +36,11 @@ namespace Greenshot.Addons.Core { public virtual int CompareTo(object obj) { - var other = obj as IProcessor; - if (other == null) - { - return 1; - } - if (Priority == other.Priority) + if (!(obj is IProcessor other)) + { + return 1; + } + if (Priority == other.Priority) { return Description.CompareTo(other.Description); } @@ -52,22 +51,16 @@ namespace Greenshot.Addons.Core public abstract string Description { get; } - public virtual int Priority - { - get { return 10; } - } + public virtual int Priority => 10; - public void Dispose() + public void Dispose() { Dispose(true); } - public virtual bool IsActive - { - get { return true; } - } + public virtual bool IsActive => true; - public abstract bool ProcessCapture(ISurface surface, ICaptureDetails captureDetails); + public abstract bool ProcessCapture(ISurface surface, ICaptureDetails captureDetails); protected virtual void Dispose(bool disposing) { diff --git a/src/Greenshot.Addons/Core/CaptureDetails.cs b/src/Greenshot.Addons/Core/CaptureDetails.cs index 69c70aa63..b272cc2ad 100644 --- a/src/Greenshot.Addons/Core/CaptureDetails.cs +++ b/src/Greenshot.Addons/Core/CaptureDetails.cs @@ -38,23 +38,31 @@ namespace Greenshot.Addons.Core /// public class CaptureDetails : ICaptureDetails { + /// public CaptureDetails() { DateTime = DateTime.Now; } - public string Title { get; set; } + /// + public string Title { get; set; } + /// public string Filename { get; set; } + /// public DateTime DateTime { get; set; } + /// public float DpiX { get; set; } + /// public float DpiY { get; set; } + /// public Dictionary MetaData { get; } = new Dictionary(); + /// public void AddMetaData(string key, string value) { if (MetaData.ContainsKey(key)) @@ -67,15 +75,19 @@ namespace Greenshot.Addons.Core } } + /// public CaptureMode CaptureMode { get; set; } + /// public List CaptureDestinations { get; set; } = new List(); + /// public void ClearDestinations() { CaptureDestinations.Clear(); } + /// public void RemoveDestination(IDestination destination) { if (CaptureDestinations.Contains(destination)) @@ -84,6 +96,7 @@ namespace Greenshot.Addons.Core } } + /// public void AddDestination(IDestination captureDestination) { if (!CaptureDestinations.Contains(captureDestination)) @@ -92,6 +105,7 @@ namespace Greenshot.Addons.Core } } + /// public bool HasDestination(string designation) { foreach (var destination in CaptureDestinations) diff --git a/src/Greenshot.Addons/Core/ClipboardHelper.cs b/src/Greenshot.Addons/Core/ClipboardHelper.cs index 15a9854b4..a503b3afa 100644 --- a/src/Greenshot.Addons/Core/ClipboardHelper.cs +++ b/src/Greenshot.Addons/Core/ClipboardHelper.cs @@ -34,13 +34,13 @@ using System.Runtime.InteropServices; using System.Text; using System.Threading; using System.Windows.Forms; -using Dapplo.Ini; using Dapplo.Log; using Dapplo.Windows.Clipboard; using Dapplo.Windows.Common.Structs; using Dapplo.Windows.Gdi32.Enums; using Dapplo.Windows.Gdi32.Structs; using Dapplo.Windows.User32; +using Greenshot.Addons.Config.Impl; using Greenshot.Addons.Core.Enums; using Greenshot.Addons.Interfaces; using Greenshot.Addons.Interfaces.Plugin; @@ -101,8 +101,9 @@ EndSelection:<<<<<<<4 private const int BITMAPFILEHEADER_LENGTH = 14; private static readonly LogSource Log = new LogSource(); private static readonly object ClipboardLockObject = new object(); - private static readonly ICoreConfiguration CoreConfig = IniConfig.Current.Get(); - private static readonly string FORMAT_FILECONTENTS = "FileContents"; + // TODO: Solve, was static reference! + private static readonly ICoreConfiguration CoreConfig = new CoreConfigurationImpl(); + private static readonly string FORMAT_FILECONTENTS = "FileContents"; private static readonly string FORMAT_PNG = "PNG"; private static readonly string FORMAT_PNG_OFFICEART = "PNG+Office Art"; private static readonly string FORMAT_17 = "Format17"; @@ -191,11 +192,11 @@ EndSelection:<<<<<<<4 var clipboardOwner = GetClipboardOwner(); if (clipboardOwner != null) { - messageText = Language.GetFormattedString("clipboard_inuse", clipboardOwner); + messageText = "in use"; // Language.GetFormattedString("clipboard_inuse", clipboardOwner); } else { - messageText = Language.GetString("Core","clipboard_error"); + messageText = "error"; // Language.GetString("Core","clipboard_error"); } Log.Error().WriteLine(clipboardSetException, messageText); } @@ -222,13 +223,14 @@ EndSelection:<<<<<<<4 { string messageText; var clipboardOwner = GetClipboardOwner(); + // TODO: Translations if (clipboardOwner != null) { - messageText = Language.GetFormattedString("clipboard_inuse", clipboardOwner); + messageText = "In use"; // Language.GetFormattedString("clipboard_inuse", clipboardOwner); } else { - messageText = Language.GetString("Core", "clipboard_error"); + messageText = "Error"; // Language.GetString("Core", "clipboard_error"); } Log.Error().WriteLine(ee, messageText); } diff --git a/src/Greenshot.Addons/Core/CoreConfigurationExtensions.cs b/src/Greenshot.Addons/Core/CoreConfigurationExtensions.cs index 763c8c1f1..70e838201 100644 --- a/src/Greenshot.Addons/Core/CoreConfigurationExtensions.cs +++ b/src/Greenshot.Addons/Core/CoreConfigurationExtensions.cs @@ -131,7 +131,7 @@ namespace Greenshot.Addons.Core // Make sure we have clipboard formats, otherwise a paste doesn't make sense! if (coreConfiguration.ClipboardFormats == null || coreConfiguration.ClipboardFormats.Count == 0) { - coreConfiguration.ClipboardFormats = new List { Enums.ClipboardFormats.PNG, Enums.ClipboardFormats.HTML, Enums.ClipboardFormats.DIB }; + coreConfiguration.ClipboardFormats = new List { ClipboardFormats.PNG, ClipboardFormats.HTML, ClipboardFormats.DIB }; } // Make sure the lists are lowercase, to speedup the check diff --git a/src/Greenshot.Addons/Core/FilenameHelper.cs b/src/Greenshot.Addons/Core/FilenameHelper.cs index 1ec7ac53b..27ec291a9 100644 --- a/src/Greenshot.Addons/Core/FilenameHelper.cs +++ b/src/Greenshot.Addons/Core/FilenameHelper.cs @@ -29,8 +29,8 @@ using System.Collections.Generic; using System.IO; using System.Text.RegularExpressions; using System.Windows.Forms; -using Dapplo.Ini; using Dapplo.Log; +using Greenshot.Addons.Config.Impl; using Greenshot.Addons.Interfaces; using Greenshot.Core.Enums; @@ -53,14 +53,15 @@ namespace Greenshot.Addons.Core private static readonly Regex CmdVarRegexp = new Regex(@"%(?[^%]+)%", RegexOptions.Compiled); private static readonly Regex SplitRegexp = new Regex(";(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)", RegexOptions.Compiled); - private static readonly ICoreConfiguration CoreConfig = IniConfig.Current.Get(); + // TODO: Solve, was static reference! + private static readonly ICoreConfiguration CoreConfig = new CoreConfigurationImpl(); - /// - /// Remove invalid characters from the fully qualified filename - /// - /// string with the full path to a file - /// string with the full path to a file, without invalid characters - public static string MakeFqFilenameSafe(string fullPath) + /// + /// Remove invalid characters from the fully qualified filename + /// + /// string with the full path to a file + /// string with the full path to a file, without invalid characters + public static string MakeFqFilenameSafe(string fullPath) { var path = MakePathSafe(Path.GetDirectoryName(fullPath)); var filename = MakeFilenameSafe(Path.GetFileName(fullPath)); diff --git a/src/Greenshot.Addons/Core/GreenshotResources.cs b/src/Greenshot.Addons/Core/GreenshotResources.cs deleted file mode 100644 index c0052caab..000000000 --- a/src/Greenshot.Addons/Core/GreenshotResources.cs +++ /dev/null @@ -1,70 +0,0 @@ -#region Greenshot GNU General Public License - -// Greenshot - a free and open source screenshot tool -// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom -// -// For more information see: http://getgreenshot.org/ -// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 1 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -#endregion - -#region Usings - -using System.ComponentModel; -using System.Drawing; -using System.Windows.Media.Imaging; -using Dapplo.Windows.Icons; - -#endregion - -namespace Greenshot.Addons.Core -{ - /// - /// Centralized storage of the icons & bitmaps - /// - public static class GreenshotResources - { - private static readonly ComponentResourceManager greenshotResources = new ComponentResourceManager(typeof(GreenshotResources)); - - public static Bitmap GetBitmap(string imageName) - { - return (Bitmap) greenshotResources.GetObject(imageName); - } - - public static Icon GetIcon(string imageName) - { - return (Icon) greenshotResources.GetObject(imageName); - } - - public static BitmapSource GreenshotIconAsBitmapSource() - { - using (var icon = GetGreenshotIcon()) - { - return icon.ToBitmapSource(); - } - } - - public static Icon GetGreenshotIcon() - { - return GetIcon("Greenshot.Icon"); - } - - public static Image GetGreenshotImage() - { - return GetBitmap("Greenshot.Image"); - } - } -} \ No newline at end of file diff --git a/src/Greenshot.Addons/Core/GreenshotResources.resx b/src/Greenshot.Addons/Core/GreenshotResources.resx deleted file mode 100644 index dce181b2b..000000000 --- a/src/Greenshot.Addons/Core/GreenshotResources.resx +++ /dev/null @@ -1,471 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - - 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 - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPSkpKSisCAAAAAAAAAQAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFTg9JgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAgAAAgABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApEIAAAAAAACkQgAAAAAAAKRCAAAAAAAApEIA - AAAAAACkQgAAAAAAAKRCAAAAAAAApEIAAAAAAACkQgAAAAAAAKRCAAAAAAAApEIAAAAAAACkQgAAAAAA - AKRCAAAAAAAApEIAAAAAAACkQgAAAAAAAKRCAAAAAAAApEIAAAAAAACkQgAAAAAAAKRCAAAAAAAApEIA - AAAAAACkQgAAAAAAAKRCAAAAAAAApEIAAAAAAACkQgAAAAAAAKRCAAAAAAAApEIAAAAAAACkQgAAAAAA - AKRCAAAAAAAApEIAAAAAAACkQgAAAAAAAKRCAAAAAAAApEIAAAAAAACkQgAAAAAAAKRCAAAAAAAApEIA - AAAAAACkQgAAAAAAAKRCAAAAAAAApEIAAAAAAACkQgAAAAAAAKRCAAAAAAAApEIAAAAAAACkQgAAAAAA - AKRCAAAAAAAApEIAAAAAAACkQgAAAAAAAKRCAAAAAAAApEIAAAAAAACkQgAAAAAAAKRCKAAAACAAAABA - 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 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAwBQTFRFgICA//// - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAODgHVgAAAAlwSFlzAAAOvgAA - Dr4B6kKxwAAAABZJREFUGFdjYAABRhAAs4hlkq4DZDgACywAM12jTsYAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAnBJREFUOE+dk11I - k1Ecxs+2q1DLqwRvvCgoM6mLvoTAC6WLSrDUYBcSGK6y6EMzc6a2NnERlVKhSEMTYWSyksTZh7KZGboU - HNmUKemcupnuI5tuqHs6/7cSUenrwMPhPf/n97wPB46IrVrHCwuTxCJR5EbxbHiUZHQnEzE2uhj18Wsw - zPPLGgQmdErli9Ws8C2VX8wFX9y0rmiWnJ9/dg38Qc02dZdKUlQ3DrcuBINIfQTItMDJWiBHByj1gMEK - 0OxY9rkrywEvb7OQdzclR6tKDjRUV522qh7Kl5q6unDqQTnuNbZD89qEyhYTNK9M0PcMwLewgOsFh5oH - 70oSbXfYBmZUiM8P1Se06Z4WBP5UvarFALffj+q6goDjTXJTf7k4nWVmp159ayhDnVYu1Ot7tvmnImB+ - ztX4Y6dZUYMRzrk5VD4uxPueWmTlpVxmCVlZF1wuG8pqVJj0eKA+s5cHRMNm2Iapvn3wjCRirGOHUF2j - 12PY7Ubx/SJ4vJMglsXLZJcWefrI+Ge09PZCGr8V105sQU3xdgx0HYHfJ4O5ebdQXVNXjLb2Csy4x0EM - sexgRka2f2kJvkAAEzz9VmkCatWR0JaEoqkiDJ26cDxRh2LQ6YSyQgGna0zwEkMs25+envON13P7fII+ - 2e3QGo1rVN/RAZPFvOwjhli2RyrNdfNEh9eL0elpdFutsPMmLl55peiMZuQhLzHEsl1paXlf5udhdTjQ - abEIu21mZl2t9BBDLItOSpKP8HSj2Yx+Xn9oauq3Ig95iSGWRcTFKVr57Q/zv9pnZ/9K5CWGWBYaG5sZ - EhNT+j8idt0X+S+H3wE2DYYIXysH6QAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAm1JREFUOE+Nkl9I - U1Ecx39T31o9SBq97cWHiUIimKiQ0zFbbcJ1U2YkBtLuFYkQnMrcdKQyEUIwWk+GDy58EfUhmYoTRtKE - HitI8kGZIkEW/oF0um/nd3OyYUnn8rn3nMPn+733wNXYe3spOTQajVXMb55vpE/CiUTiqyB91+b1Ugry - j3gcWwcH2Nzfx8benspsJALhyII8qaeHUiHJ7U5F+Xl0hM3dXXzZ2cGn7W183NpCcG4OPISrmNvbdQZF - IaZOlolsNhvVOZ1U29XFtO4fH+ObeGtqyYuJCSTJM5s9Aqqqr1ez6s1ut5OtqYksHR1tB6Lg++HhhRL+ - Ej4OO+yqmbOCDLGwCuSsrKznLpcLl8EOu5wRBRkkSdJ1t9vdtyPOrCgK+vv74fV6L+DxeODz+VQnFouh - u7u7j7NksVj0o6Oj42tra3A4HOjs7ITT6URzczMkqQ7V1UaUl1egpOQ2zOZ7qjM/v4yBgcFxzlJNTU3l - 1NTU8urqKoxGowjLMJnMqKioFME7aRiNd1VndnYRIyOBZc6SwWBwRKPR9XA4jKKiIjQ0PBSS9a+YTLWq - 4xTX5OTbdc5SWVnZk1AohGAwCJ1OB7v9EazWB/+EnbGxMUxPT4OzVFxc7IpE3mFmJoS2tqcYHg5gaOgl - /P5ACq/E/A+tre1YXPygwlnS6/XupaUVLCysoLGx8b9IFnCWcnJyWrKzsweZzMzMIf5l7weA1++BN9HP - MPhacEv2o8o1iV8nJ2An6XOWxIK0Wi1dy82lG6Wlz9SfPmWcJhJg4qeniIsnO+xyhrPnBVcLC0lbUPD4 - Sn6+/zLYUd2zgt/AGvcWHCMAZwAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAW1JREFUOE+NkL1L - QlEYh9/b4NzS1BgNShBRQQ3VGEGr/0BDBEG0uLRIFIREIX2ANhgZKphj/4PLASOi0i4SYWWmWH5y/bhv - 5yc4HTl04YHD+z4893AMGvB53S7Hg+1cNQxjBGtm/p4YerrdvXlsDfJ7s7MlCp4ukgD7U3QX8mx+ZDIm - A5wx6+/hKiEs0+drnNiY5WTynlOpZ85mcz1wxgw7OHCVwPECCXlVDoev2ec75EDggiORGMfjCQ5dXrHf - f8LRaAwKw1UCR/MkbLns2Da/mOZAsIMDVwn45ki0pWB1OlrgwFUCBzMkrG6X662WFjhwlcDeNIlGu82/ - zaYWOHCVgHeSRFX+vVSraYEDVwnsuEj8WBbnKxUtcOAqAY+TREleP1cua4EDVwlsj5MoNBr8WixqgQNX - CWyNkfis19ksFLTAgasE1kdJvMsHTOfzWuDAVQLuYRJf8oHeqlUtcOAqgRUHBZcdJP4D3H7gDzdsNup2 - mXizAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAXJJREFUOE+lk0FL - AkEYhlvwv3jzoiDoQdCbdEnYf6CrqCgoHgRRAk/9EQVLdEGyFiQNMS+dvHnoEkgglGAmCL7NO6RMIZvU - wsMO3zzzzGk0ACf/+hjQNO1ccKlXKsYx0OUZeflXoFmtVsUS2P4CHboi0FQDrXK5jM12i/VmYwsduiLQ - UgNmqVTCuzj8tlrZQoeuCJhqoFMsFvG6XmO2WNhCh64IdNRAt1Ao4EXc/jSf20KHrgh01YCVy+Uwnkzw - vFzaQoeuCFhqoJfJZBCLxY6Crgj01EA/lUrB4/HA7XYfhHs78vk8A301MIzH4/B6vRiNHjAY3H+DM+7p - ug6fz4dsNsvAUA2Mo9Eo/H4/LOsOTqdTYprXEs64x0AwGEQ6nWZgrAYeDcNAIBBAu30r/6Reb0t2MwbC - 4TCSySQDj/uAeEyngqnL5fpoNG4QCoUktVpHspsxEIlEkEgk+AKnaoAP8kwwczgcF4fg3g+u9gEu/son - bfJW/NwRDyIAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAUNJREFUOE+lk79L - QlEcxW9/gqCrm6vg4uYoOAgOrqLk4ioP0r2Glhp0SSjoF1FE0BIUDU3RdIOGoKBVGlpapaHTObeuCPe6 - 9ITD5fs9n3Pue8JbAWBS/VSQRvPwKR/j3JgaZXVqPv5TzPOXLhYoZDEcQidVWyhw3qzfn3tBAWH7PRjg - uV7HV5JAM6USyX50u86btlrOCwoOCR7Q+Oz1cFcu473dhmbppdFwu8dq1e3EBgU0zB6NXQJvzSaui0U8 - VCq4LZWwn8vhLJ+HPDFiowUEzITADsGrQgFHmYzTSTYL7eSJiRZs0timRoTGhC956wXDXtrJEyM2eAIt - t34Be8NgTPLELCuQYe8Z9tK8ZBf+ieuEnxj20rzB26SYF7zCGsGEoVeW6NTMoJFiXlDAkFllqMOwTs2+ - IOYFBf/9oFJ9ibr0B4f94vVG3bWDAAAAAElFTkSuQmCC - - - \ No newline at end of file diff --git a/src/Greenshot.Addons/Core/ICoreConfiguration.cs b/src/Greenshot.Addons/Core/ICoreConfiguration.cs index c7f3a0128..f866ec414 100644 --- a/src/Greenshot.Addons/Core/ICoreConfiguration.cs +++ b/src/Greenshot.Addons/Core/ICoreConfiguration.cs @@ -27,8 +27,9 @@ using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; -using Dapplo.Ini; -using Dapplo.InterfaceImpl.Extensions; +using Dapplo.CaliburnMicro.Configuration; +using Dapplo.Config.Attributes; +using Dapplo.Config.Ini; using Dapplo.Windows.Common.Structs; using Greenshot.Addons.Core.Enums; using Greenshot.Core.Configuration; @@ -42,7 +43,7 @@ namespace Greenshot.Addons.Core /// [IniSection("Core")] [Description("Greenshot core configuration")] - public interface ICoreConfiguration : IIniSection, IFileConfiguration, ICaptureConfiguration, INotifyPropertyChanged, IWriteProtectProperties, IDefaultValue, ITagging, ITransactionalProperties + public interface ICoreConfiguration : IIniSection, IFileConfiguration, ICaptureConfiguration, IUiConfiguration { [Description("The language in IETF format (e.g. en-US)")] string Language { get; set; } @@ -294,7 +295,7 @@ namespace Greenshot.Addons.Core [Description("Defines the base size of the icons (e.g. for the buttons in the editor), default value 16,16 anything bigger will cause scaling")] [DefaultValue("16,16")] - Size IconSize { get; set; } + NativeSize IconSize { get; set; } [Description("The connect timeout value for webrequets, these are seconds")] [DefaultValue(100)] diff --git a/src/Greenshot.Addons/Core/IHttpConfiguration.cs b/src/Greenshot.Addons/Core/IHttpConfiguration.cs index 9efd1d60e..dfb804751 100644 --- a/src/Greenshot.Addons/Core/IHttpConfiguration.cs +++ b/src/Greenshot.Addons/Core/IHttpConfiguration.cs @@ -24,9 +24,8 @@ #region Usings using System.ComponentModel; +using Dapplo.Config.Ini; using Dapplo.HttpExtensions; -using Dapplo.Ini; -using Dapplo.InterfaceImpl.Extensions; #endregion @@ -37,7 +36,7 @@ namespace Greenshot.Addons.Core /// [IniSection("Network")] [Description("Greenshot network configuration")] - public interface IHttpConfiguration : IIniSection, IHttpSettings, INotifyPropertyChanged, IWriteProtectProperties, IDefaultValue, ITransactionalProperties + public interface IHttpConfiguration : IIniSection, IHttpSettings { } } \ No newline at end of file diff --git a/src/Greenshot.Addons/Core/ImageOutput.cs b/src/Greenshot.Addons/Core/ImageOutput.cs index 3fdecedc2..eae932b08 100644 --- a/src/Greenshot.Addons/Core/ImageOutput.cs +++ b/src/Greenshot.Addons/Core/ImageOutput.cs @@ -35,11 +35,10 @@ using System.Runtime.InteropServices; using System.Text; using System.Text.RegularExpressions; using System.Windows.Forms; -using Dapplo.Ini; -using Dapplo.Language; using Dapplo.Log; using Dapplo.Windows.Clipboard; using Dapplo.Windows.Common; +using Greenshot.Addons.Config.Impl; using Greenshot.Addons.Controls; using Greenshot.Addons.Interfaces; using Greenshot.Addons.Interfaces.Plugin; @@ -58,7 +57,8 @@ namespace Greenshot.Addons.Core public static class ImageOutput { private static readonly LogSource Log = new LogSource(); - private static readonly ICoreConfiguration CoreConfig = IniConfig.Current.Get(); + // TODO: Solve, was static reference! + private static readonly ICoreConfiguration CoreConfig = new CoreConfigurationImpl(); private static readonly int PROPERTY_TAG_SOFTWARE_USED = 0x0131; private static readonly Cache TmpFileCache = new Cache(10 * 60 * 60, RemoveExpiredTmpFile); @@ -139,8 +139,8 @@ namespace Greenshot.Addons.Core var outputSettings = new SurfaceOutputSettings(FormatForFilename(fileNameWithExtension)); if (CoreConfig.OutputFilePromptQuality) { - // TODO: Resolve - var qualityDialog = new QualityDialog(outputSettings, CoreConfig, LanguageLoader.Current.Get()); + // TODO: Resolve, was static reference + var qualityDialog = new QualityDialog(outputSettings, CoreConfig, new GreenshotLanguageImpl()); qualityDialog.ShowDialog(); } // TODO: For now we always overwrite, should be changed @@ -149,7 +149,9 @@ namespace Greenshot.Addons.Core } catch (ExternalException) { - MessageBox.Show(Language.GetFormattedString("error_nowriteaccess", saveImageFileDialog.FileName).Replace(@"\\", @"\"), Language.GetString("error")); + MessageBox.Show("Can't write to " + saveImageFileDialog.FileName.Replace(@"\\", @"\"), "Error"); + // TODO: Fix + //MessageBox.Show(Language.GetFormattedString("error_nowriteaccess", saveImageFileDialog.FileName).Replace(@"\\", @"\"), Language.GetString("error")); } } } @@ -543,10 +545,12 @@ namespace Greenshot.Addons.Core } else if (Equals(imageFormat, ImageFormat.Icon)) { - // FEATURE-916: Added Icon support - IList bitmaps = new List(); - bitmaps.Add(bitmapToSave); - WriteIcon(stream, bitmaps); + // FEATURE-916: Added Icon support + IList bitmaps = new List + { + bitmapToSave + }; + WriteIcon(stream, bitmaps); } else { diff --git a/src/Greenshot.Addons/Core/InteropWindowCaptureExtensions.cs b/src/Greenshot.Addons/Core/InteropWindowCaptureExtensions.cs index 4f574c1dd..9a9836120 100644 --- a/src/Greenshot.Addons/Core/InteropWindowCaptureExtensions.cs +++ b/src/Greenshot.Addons/Core/InteropWindowCaptureExtensions.cs @@ -28,7 +28,6 @@ using System.Diagnostics; using System.Drawing; using System.Drawing.Imaging; using System.Windows.Forms; -using Dapplo.Ini; using Dapplo.Log; using Dapplo.Windows.App; using Dapplo.Windows.Common; @@ -36,10 +35,12 @@ using Dapplo.Windows.Common.Extensions; using Dapplo.Windows.Common.Structs; using Dapplo.Windows.Desktop; using Dapplo.Windows.DesktopWindowsManager; +using Dapplo.Windows.DesktopWindowsManager.Structs; using Dapplo.Windows.Gdi32; using Dapplo.Windows.Icons; using Dapplo.Windows.Kernel32; using Dapplo.Windows.User32.Enums; +using Greenshot.Addons.Config.Impl; using Greenshot.Addons.Interfaces; using Greenshot.Core.Enums; using Greenshot.Gfx; @@ -55,7 +56,8 @@ namespace Greenshot.Addons.Core public static class InteropWindowCaptureExtensions { private static readonly LogSource Log = new LogSource(); - private static readonly ICoreConfiguration CoreConfiguration = IniConfig.Current.Get(); + // TODO: Solve, was static reference! + private static readonly ICoreConfiguration CoreConfiguration = new CoreConfigurationImpl(); private static Color _transparentColor = Color.Transparent; /// diff --git a/src/Greenshot.Addons/Core/Language.cs b/src/Greenshot.Addons/Core/Language.cs deleted file mode 100644 index a9e0bce23..000000000 --- a/src/Greenshot.Addons/Core/Language.cs +++ /dev/null @@ -1,231 +0,0 @@ -#region Greenshot GNU General Public License - -// Greenshot - a free and open source screenshot tool -// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom -// -// For more information see: http://getgreenshot.org/ -// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 1 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -#endregion - -#region Usings - -using System; -using System.Collections.Generic; -using System.Linq; -using Dapplo.Language; - -#endregion - -namespace Greenshot.Addons.Core -{ - public delegate void LanguageChangedHandler(object sender, EventArgs e); - - /// - /// This class supplies the GUI with translations, based upon keys. - /// The language resources are loaded from the language files found on fixed or supplied paths - /// - public class Language - { - private static LanguageLoader languageLoader = LanguageLoader.Current; - /// - /// Get or set the current language - /// - public static string CurrentLanguage - { - get => languageLoader.CurrentLanguage; - set { languageLoader.ChangeLanguageAsync(value); } - } - - /// - /// Return a list of all the supported languages - /// - public static IDictionary SupportedLanguages => languageLoader.AvailableLanguages; - - - /// - /// Check if a resource with prefix.key exists - /// - /// - /// - /// true if available - public static bool HasKey(string prefix, string key) - { - return languageLoader[prefix].Keys().Contains(key); - } - - /// - /// Check if a resource with prefix.key exists - /// - /// - /// - /// true if available - public static bool HasKey(string prefix, Enum key) - { - return languageLoader[prefix].Keys().Contains(key.ToString()); - } - - public static string Translate(object key) - { - var typename = key.GetType().Name; - var enumKey = typename + "." + key; - if (HasKey("Core", enumKey)) - { - return GetString("Core", enumKey); - } - return key.ToString(); - } - - /// - /// TryGet method which combines HasKey & GetString - /// - /// string with prefix - /// string with key - /// out string - /// bool - public static bool TryGetString(string prefix, string key, out string languageString) - { - if (languageLoader.Any(l => l.PrefixName() == prefix) && languageLoader[prefix].Keys().Contains(key)) - { - languageString = languageLoader[prefix][key]; - return true; - } - - languageString = null; - return false; - } - - /// - /// TryGet method which combines HasKey & GetString - /// - /// string with key - /// out string - /// bool - public static bool TryGetString(string key, out string languageString) - { - return TryGetString("Core", key, out languageString); - } - - /// - /// Get the resource for prefix.key - /// - /// - /// - /// resource or a "string ###prefix.key### not found" - public static string GetString(string prefix, string key) - { - if (key == null) - { - return null; - } - return languageLoader[prefix][key]; - } - - /// - /// Get the resource for key - /// - /// - /// resource or a "string ###prefix.key### not found" - public static string GetString(string key) - { - if (key == null) - { - return null; - } - return languageLoader["Core"][key]; - } - - /// - /// Get the resource for key - /// - /// Enum - /// resource or a "string ###prefix.key### not found" - public static string GetString(Enum key) - { - if (key == null) - { - return null; - } - return languageLoader["Core"][key.ToString()]; - } - - /// - /// Get the resource for prefix.key - /// - /// - /// - /// resource or a "string ###prefix.key### not found" - public static string GetString(string prefix, Enum key) - { - if (key == null) - { - return null; - } - return GetString(prefix, key.ToString()); - } - - /// - /// Get the resource for key, format with with string.format an supply the parameters - /// - /// - /// - /// formatted resource or a "string ###key### not found" - public static string GetFormattedString(Enum key, object param) - { - return GetFormattedString(key.ToString(), param); - } - - /// - /// Get the resource for prefix.key, format with with string.format an supply the parameters - /// - /// - /// - /// - /// formatted resource or a "string ###prefix.key### not found" - public static string GetFormattedString(string prefix, Enum key, object param) - { - return GetFormattedString(prefix, key.ToString(), param); - } - - /// - /// Get the resource for prefix.key, format with with string.format an supply the parameters - /// - /// - /// - /// - /// formatted resource or a "string ###prefix.key### not found" - public static string GetFormattedString(string prefix, string key, object param) - { - if (TryGetString(prefix, key, out var value)) - { - return string.Format(value, param); - } - - return $"string ###{prefix}.{key}### not found"; - } - - /// - /// Get the resource for key, format with with string.format an supply the parameters - /// - /// - /// - /// formatted resource or a "string ###key### not found" - public static string GetFormattedString(string key, object param) - { - return GetFormattedString("Core", key, param); - } - } -} \ No newline at end of file diff --git a/src/Greenshot.Addons/Core/PluginUtils.cs b/src/Greenshot.Addons/Core/PluginUtils.cs index 6cc252c02..50ea53b39 100644 --- a/src/Greenshot.Addons/Core/PluginUtils.cs +++ b/src/Greenshot.Addons/Core/PluginUtils.cs @@ -29,10 +29,10 @@ using System.ComponentModel; using System.Drawing; using System.IO; using System.Windows.Forms; -using Dapplo.Ini; using Dapplo.Log; using Dapplo.Windows.Icons; using Dapplo.Windows.Icons.Enums; +using Greenshot.Addons.Config.Impl; using Greenshot.Addons.Interfaces.Forms; using Microsoft.Win32; @@ -61,7 +61,7 @@ namespace Greenshot.Addons.Core } _isHooked = true; - var coreConfiguration = IniConfig.Current.Get(); + var coreConfiguration = new CoreConfigurationImpl(); coreConfiguration.PropertyChanged += OnIconSizeChanged; } diff --git a/src/Greenshot.Addons/Core/WindowCapture.cs b/src/Greenshot.Addons/Core/WindowCapture.cs index d1b2248a7..fc009b81d 100644 --- a/src/Greenshot.Addons/Core/WindowCapture.cs +++ b/src/Greenshot.Addons/Core/WindowCapture.cs @@ -30,7 +30,6 @@ using System.Drawing; using System.Drawing.Imaging; using System.Runtime.InteropServices; using System.Windows.Forms; -using Dapplo.Ini; using Dapplo.Log; using Dapplo.Windows.Common; using Dapplo.Windows.Common.Extensions; @@ -43,6 +42,7 @@ using Dapplo.Windows.Icons; using Dapplo.Windows.User32; using Dapplo.Windows.User32.Enums; using Dapplo.Windows.User32.Structs; +using Greenshot.Addons.Config.Impl; using Greenshot.Addons.Interfaces; using Greenshot.Gfx; @@ -56,7 +56,8 @@ namespace Greenshot.Addons.Core public static class WindowCapture { private static readonly LogSource Log = new LogSource(); - private static readonly ICoreConfiguration Configuration = IniConfig.Current.Get(); + // TODO: Solve, was static reference! + private static readonly ICoreConfiguration Configuration = new CoreConfigurationImpl(); /// /// Used to cleanup the unmanged resource in the iconInfo for the CaptureCursor method diff --git a/src/Greenshot.Addons/Extensions/LanguageExtensions.cs b/src/Greenshot.Addons/Extensions/LanguageExtensions.cs index a4d69f986..bbbbc7f99 100644 --- a/src/Greenshot.Addons/Extensions/LanguageExtensions.cs +++ b/src/Greenshot.Addons/Extensions/LanguageExtensions.cs @@ -24,7 +24,7 @@ using System; using System.Collections.Generic; using System.Linq; -using Dapplo.Language; +using Dapplo.Config.Language; using Dapplo.Utils.Extensions; namespace Greenshot.Addons.Extensions diff --git a/src/Greenshot.Addons/FodyWeavers.xml b/src/Greenshot.Addons/FodyWeavers.xml new file mode 100644 index 000000000..7f5a26669 --- /dev/null +++ b/src/Greenshot.Addons/FodyWeavers.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/Greenshot.Addons/FodyWeavers.xsd b/src/Greenshot.Addons/FodyWeavers.xsd new file mode 100644 index 000000000..061979a03 --- /dev/null +++ b/src/Greenshot.Addons/FodyWeavers.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + 'true' to run assembly verification on the target assembly after all weavers have been finished. + + + + + A comma separated list of error codes that can be safely ignored in assembly verification. + + + + + \ No newline at end of file diff --git a/src/Greenshot.Addons/Greenshot.Addons.csproj b/src/Greenshot.Addons/Greenshot.Addons.csproj index cf272b4d1..f1e57114a 100644 --- a/src/Greenshot.Addons/Greenshot.Addons.csproj +++ b/src/Greenshot.Addons/Greenshot.Addons.csproj @@ -1,387 +1,84 @@ - - - - + + - {5B924697-4DCD-4F98-85F1-105CB84B7341} - {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library - Greenshot.Addons - Greenshot.Addons - v4.6.1 - Properties - OnBuildSuccess - True - False - 4 - false - + net471;netcoreapp3.0 + true - - - ..\packages\Autofac.4.8.1\lib\net45\Autofac.dll - - - ..\packages\Autofac.Extras.AttributeMetadata.4.0.1\lib\net45\Autofac.Extras.AttributeMetadata.dll - - - ..\packages\Autofac.Mef.4.0.0\lib\net45\Autofac.Integration.Mef.dll - - - ..\packages\Caliburn.Micro.Core.3.2.0\lib\net45\Caliburn.Micro.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\Caliburn.Micro.Platform.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\Caliburn.Micro.Platform.Core.dll - - - ..\packages\CommonServiceLocator.2.0.4\lib\net46\CommonServiceLocator.dll - - - ..\packages\ControlzEx.3.0.2.4\lib\net45\ControlzEx.dll - - - - ..\packages\Dapplo.Addons.1.0.79\lib\net461\Dapplo.Addons.dll - - - ..\packages\Dapplo.Addons.Bootstrapper.1.0.79\lib\net461\Dapplo.Addons.Bootstrapper.dll - - - ..\packages\Dapplo.CaliburnMicro.1.0.75\lib\net461\Dapplo.CaliburnMicro.dll - - - ..\packages\Dapplo.CaliburnMicro.Configuration.1.0.75\lib\net461\Dapplo.CaliburnMicro.Configuration.dll - - - ..\packages\Dapplo.CaliburnMicro.Dapp.1.0.75\lib\net461\Dapplo.CaliburnMicro.Dapp.dll - - - ..\packages\Dapplo.CaliburnMicro.Menu.1.0.75\lib\net461\Dapplo.CaliburnMicro.Menu.dll - - - ..\packages\Dapplo.CaliburnMicro.Security.1.0.75\lib\net461\Dapplo.CaliburnMicro.Security.dll - - - ..\packages\Dapplo.CaliburnMicro.Toasts.1.0.75\lib\net461\Dapplo.CaliburnMicro.Toasts.dll - - - ..\packages\Dapplo.CaliburnMicro.Translations.1.0.75\lib\net461\Dapplo.CaliburnMicro.Translations.dll - - - ..\packages\Dapplo.HttpExtensions.0.8.46\lib\net46\Dapplo.HttpExtensions.dll - - - ..\packages\Dapplo.HttpExtensions.JsonNet.0.8.46\lib\net46\Dapplo.HttpExtensions.JsonNet.dll - - - ..\packages\Dapplo.HttpExtensions.OAuth.0.8.46\lib\net46\Dapplo.HttpExtensions.OAuth.dll - - - ..\packages\Dapplo.Ini.0.5.31\lib\net45\Dapplo.Ini.dll - - - ..\packages\Dapplo.InterfaceImpl.0.2.12\lib\net45\Dapplo.InterfaceImpl.dll - - - ..\packages\Dapplo.Language.0.5.31\lib\net45\Dapplo.Language.dll - - - ..\packages\Dapplo.Log.1.2.1\lib\net45\Dapplo.Log.dll - - - ..\packages\Dapplo.Utils.1.0.161\lib\net45\Dapplo.Utils.dll - - - ..\packages\Dapplo.Windows.0.5.109\lib\net461\Dapplo.Windows.dll - - - ..\packages\Dapplo.Windows.Clipboard.0.5.109\lib\net461\Dapplo.Windows.Clipboard.dll - - - ..\packages\Dapplo.Windows.Com.0.5.109\lib\net461\Dapplo.Windows.Com.dll - - - ..\packages\Dapplo.Windows.Common.0.5.109\lib\net461\Dapplo.Windows.Common.dll - - - ..\packages\Dapplo.Windows.DesktopWindowsManager.0.5.109\lib\net461\Dapplo.Windows.DesktopWindowsManager.dll - - - ..\packages\Dapplo.Windows.Dpi.0.5.109\lib\net461\Dapplo.Windows.Dpi.dll - - - ..\packages\Dapplo.Windows.EmbeddedBrowser.0.5.109\lib\net461\Dapplo.Windows.EmbeddedBrowser.dll - - - ..\packages\Dapplo.Windows.Gdi32.0.5.109\lib\net461\Dapplo.Windows.Gdi32.dll - - - ..\packages\Dapplo.Windows.Icons.0.5.109\lib\net461\Dapplo.Windows.Icons.dll - - - ..\packages\Dapplo.Windows.Input.0.5.109\lib\net461\Dapplo.Windows.Input.dll - - - ..\packages\Dapplo.Windows.Kernel32.0.5.109\lib\net461\Dapplo.Windows.Kernel32.dll - - - ..\packages\Dapplo.Windows.Messages.0.5.109\lib\net461\Dapplo.Windows.Messages.dll - - - ..\packages\Dapplo.Windows.Shell32.0.5.109\lib\net461\Dapplo.Windows.Shell32.dll - - - ..\packages\Dapplo.Windows.User32.0.5.109\lib\net461\Dapplo.Windows.User32.dll - - - ..\packages\MahApps.Metro.IconPacks.2.3.0\lib\net46\MahApps.Metro.IconPacks.dll - + + + + + + - - ..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll - - - - - ..\packages\Svg.2.3.0\lib\net35\Svg.dll - - + - - ..\packages\System.Reactive.4.1.0\lib\net46\System.Reactive.dll - - - ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.1\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll - - - - ..\packages\System.Threading.Tasks.Extensions.4.5.1\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll - - - ..\packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll - - - ..\packages\ControlzEx.3.0.2.4\lib\net45\System.Windows.Interactivity.dll - - + + - - ..\packages\ToastNotifications.2.3.4\lib\net40\ToastNotifications.dll - + + + - - - - - - - - - - - - - - - - - - - Form - - - - - Component - - - Form - - - MovableShowColorForm.cs - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Form - - - Component - - - Component - - - - Component - - - Form - - - Component - - - Component - - - Component - - - Component - - - Component - - - Form - - - BackgroundForm.cs - - - - - Component - - - Component - - - Component - - - Form - - - PleaseWaitForm.cs - - - Form - - - QualityDialog.cs - - - - Form - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GreenshotResources.cs - + + + + + + + + - - + + + 1.2.7 + + + 1.2.7 + + + 1.2.7 + + + 0.9.18 + + + 0.9.18 + + + 0.9.18 + + + 0.7.26 + + + 0.7.26 + + + all + runtime; build; native; contentfiles; analyzers + + + 3.0.0-alpha0089 + + + 2.3.0 + + {bf35190d-b2a7-4cfa-b397-51cb384cf0d7} @@ -392,24 +89,5 @@ Greenshot.Gfx - - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - Designer - MSBuild:Compile - - - - - - - + \ No newline at end of file diff --git a/src/Greenshot.Addons/IGreenshotLanguage.cs b/src/Greenshot.Addons/IGreenshotLanguage.cs index 74dd0e39f..25d9001c2 100644 --- a/src/Greenshot.Addons/IGreenshotLanguage.cs +++ b/src/Greenshot.Addons/IGreenshotLanguage.cs @@ -24,14 +24,14 @@ #region Usings using System.ComponentModel; -using Dapplo.Language; +using Dapplo.Config.Language; #endregion namespace Greenshot.Addons { [Language("Core")] - public interface IGreenshotLanguage : ILanguage, INotifyPropertyChanged, Dapplo.CaliburnMicro.Translations.ICoreTranslations + public interface IGreenshotLanguage : ILanguage, Dapplo.CaliburnMicro.Translations.ICoreTranslations { string None { get; } string AboutBugs { get; } diff --git a/src/Greenshot.Addons/Interfaces/Drawing/RenderMode.cs b/src/Greenshot.Addons/Interfaces/Drawing/RenderMode.cs index 40e12d024..de811c6df 100644 --- a/src/Greenshot.Addons/Interfaces/Drawing/RenderMode.cs +++ b/src/Greenshot.Addons/Interfaces/Drawing/RenderMode.cs @@ -23,9 +23,18 @@ namespace Greenshot.Addons.Interfaces.Drawing { + /// + /// Specifies how something needs to be rendered, the idea was that export needs more details and no "edit" adorners. + /// public enum RenderMode { - EDIT, - EXPORT + /// + /// Render for editing + /// + Edit, + /// + /// Render for exporting + /// + Export } } \ No newline at end of file diff --git a/src/Greenshot.Addons/Interfaces/IGreenshotContract.cs b/src/Greenshot.Addons/Interfaces/IGreenshotContract.cs index e394f36e9..745487308 100644 --- a/src/Greenshot.Addons/Interfaces/IGreenshotContract.cs +++ b/src/Greenshot.Addons/Interfaces/IGreenshotContract.cs @@ -21,6 +21,8 @@ #endregion +#if !NETCOREAPP3_0 + using System.ServiceModel; namespace Greenshot.Addons.Interfaces @@ -58,3 +60,5 @@ namespace Greenshot.Addons.Interfaces void OpenFile(string filename); } } + +#endif \ No newline at end of file diff --git a/src/Greenshot.Addons/Interfaces/Plugin/SurfaceOutputSettings.cs b/src/Greenshot.Addons/Interfaces/Plugin/SurfaceOutputSettings.cs index 99f947ea5..cebb2de72 100644 --- a/src/Greenshot.Addons/Interfaces/Plugin/SurfaceOutputSettings.cs +++ b/src/Greenshot.Addons/Interfaces/Plugin/SurfaceOutputSettings.cs @@ -24,7 +24,7 @@ #region Usings using System.Collections.Generic; -using Dapplo.Ini; +using Greenshot.Addons.Config.Impl; using Greenshot.Addons.Core; using Greenshot.Core.Enums; using Greenshot.Gfx.Effects; @@ -35,8 +35,9 @@ namespace Greenshot.Addons.Interfaces.Plugin { public class SurfaceOutputSettings { - private static readonly ICoreConfiguration CoreConfig = IniConfig.Current.Get(); - private bool _disableReduceColors; + // TODO: Solve, was static reference! + private static readonly ICoreConfiguration CoreConfig = new CoreConfigurationImpl(); + private bool _disableReduceColors; private bool _reduceColors; public SurfaceOutputSettings() diff --git a/src/Greenshot.Addons/Properties/AssemblyInfo.cs b/src/Greenshot.Addons/Properties/AssemblyInfo.cs deleted file mode 100644 index b2d51b603..000000000 --- a/src/Greenshot.Addons/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,53 +0,0 @@ -#region Greenshot GNU General Public License - -// Greenshot - a free and open source screenshot tool -// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom -// -// For more information see: http://getgreenshot.org/ -// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 1 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -#endregion - -#region Usings - -using System.Reflection; -using System.Runtime.InteropServices; - -#endregion - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. - -[assembly: AssemblyTitle("Greenshot.Addons")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Greenshot")] -[assembly: AssemblyProduct("Greenshot.Addons")] -[assembly: AssemblyCopyright("Copyright (C) 2007-2018")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// This sets the default COM visibility of types in the assembly to invisible. -// If you need to expose a type to COM, use [ComVisible(true)] on that type. - -[assembly: ComVisible(false)] - -// The assembly version, replaced by build scripts - -[assembly: AssemblyVersion("1.3.0.0")] -[assembly: AssemblyInformationalVersion("1.3.0.0")] -[assembly: AssemblyFileVersion("1.3.0.0")] \ No newline at end of file diff --git a/src/Greenshot.Addons/Resources/Checkerboard.Image.png b/src/Greenshot.Addons/Resources/Checkerboard.Image.png new file mode 100644 index 0000000000000000000000000000000000000000..798455aa5cc5267723855f8b394d9892fd3f34ea GIT binary patch literal 954 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 Bc;^5B literal 0 HcmV?d00001 diff --git a/src/Greenshot.Addons/Resources/GreenshotResources.cs b/src/Greenshot.Addons/Resources/GreenshotResources.cs new file mode 100644 index 000000000..6ac41ef40 --- /dev/null +++ b/src/Greenshot.Addons/Resources/GreenshotResources.cs @@ -0,0 +1,132 @@ +#region Greenshot GNU General Public License + +// Greenshot - a free and open source screenshot tool +// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom +// +// For more information see: http://getgreenshot.org/ +// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 1 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#endregion + +#region Usings + +using System; +using System.Drawing; +using System.IO; +using System.Windows.Media.Imaging; +using Dapplo.Addons; +using Dapplo.Windows.Icons; +using Greenshot.Gfx; + +#endregion + +namespace Greenshot.Addons.Resources +{ + /// + /// Centralized storage of the icons & bitmaps + /// + public class GreenshotResources + { + private readonly IResourceProvider _resourceProvider; + // TODO: Remove all usages + public static GreenshotResources Instance; + + public GreenshotResources(IResourceProvider resourceProvider) + { + _resourceProvider = resourceProvider; + Instance = this; + } + + /// + /// Get the Greenshot icon as BitmapSource + /// + /// BitmapSource + public BitmapSource GreenshotIconAsBitmapSource() + { + using (var icon = GetGreenshotIcon()) + { + return icon.ToBitmapSource(); + } + } + + /// + /// Get the Greenshot logo as an Icon + /// + /// Icon + public Icon GetGreenshotIcon() + { + return GetIcon("Greenshot", GetType()); + } + + /// + /// Get an embedded icon + /// + /// string + /// Type + /// Icon + public Icon GetIcon(string name, Type type = null) + { + using (var iconStream = _resourceProvider.ResourceAsStream((type ?? GetType()).Assembly, "Resources", $"{name}.Icon.ico")) + { + return new Icon(iconStream); + } + } + + /// + /// Get the Greenshot logo as a Bitmap + /// + /// Bitmap + public Bitmap GetGreenshotImage() + { + return GetBitmap("Greenshot.Image.png", GetType()); + } + + /// + /// Get a bitmap from an embedded resource + /// + /// string + /// Type + /// Bitmap + public Bitmap GetBitmap(string name, Type type = null) + { + if (name.EndsWith(".Image")) + { + name = name + ".png"; + + } + using (var imageStream = _resourceProvider.ResourceAsStream((type ?? GetType()).Assembly, "Resources", name)) + { + return BitmapHelper.FromStream(imageStream); + } + } + + /// + /// Get a byte[] from an embedded resource + /// + /// string + /// Type + /// bate[] + public byte[] GetBytes(string name, Type type = null) + { + using (var stream = _resourceProvider.ResourceAsStream((type ?? GetType()).Assembly, "Resources", name)) + using (var memoryStream = new MemoryStream()) + { + stream.CopyTo(memoryStream); + return memoryStream.ToArray(); + } + } + } +} \ No newline at end of file diff --git a/src/Greenshot.Addons/Resources/Printer.Image.png b/src/Greenshot.Addons/Resources/Printer.Image.png new file mode 100644 index 0000000000000000000000000000000000000000..18738f6c562946458eca6444fbd286c6a55e70b0 GIT binary patch literal 738 zcmV<80v-K{P)Px#1ZP1_K>z@;j|==^1poj5AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBU!U`a$lR5(wKl3z$uQ5?q)>07IZk@mWWe3&RS1d}<)>6ooH;qH&j zNES$UlMx{}mASc*%0vjkXgwJ|xY&!R56M(i7)cxSSV4jhiOLAF&6(9EW_n;L6WR!YBHd{UWeM+J208<3uj?r6+=VA zlayu6&CLzd)6=WzbQ%VOfrs5N8copY8hG&TISht-!kL>}!q`}Jm9k8)*E>_G)W*un z3N#uGT3a7+$?{K(#unko{D{ZjZBUkJwc4kNL;|r`3@VihcKc&kEDtY)oQa7E%*@Py zvaF`2#+OXK$LwqZUhgxEjz%#u@(Phiw1C%nIy<|twDeIxS*BL2{maX1SX^8~TU*Px#1ZP1_K>z@;j|==^1poj5AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBUzXGugsR5(wijZI4eQ5c04{4cX}qcETgL3h$7Vg7-RqN1R<5JU-F z^+yz}$N}kNAkq+X7EP9Eo73q@XWou?>W!70Q?L2al74Tf(xTo zGmn8;c2vPtyfrV=#C|ulMu~&bTuS1A#yQ z`Fx&&zA6~T<8cIoLD=>qG) _configViewModel; private readonly IConfigScreen _configScreen; private static readonly LogSource Log = new LogSource(); + public ExportNotificationViewModel( IDestination source, ExportInformation exportInformation, @@ -62,7 +64,7 @@ namespace Greenshot.Addons.ViewModels } } - public ImageSource GreenshotIcon => GreenshotResources.GreenshotIconAsBitmapSource(); + public ImageSource GreenshotIcon => GreenshotResources.Instance.GreenshotIconAsBitmapSource(); public ImageSource ExportBitmapSource { get; } diff --git a/src/Greenshot.Addons/app.config b/src/Greenshot.Addons/app.config index c20c0c817..b98217257 100644 --- a/src/Greenshot.Addons/app.config +++ b/src/Greenshot.Addons/app.config @@ -2,26 +2,6 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/src/Greenshot.Addons/packages.config b/src/Greenshot.Addons/packages.config deleted file mode 100644 index 349060502..000000000 --- a/src/Greenshot.Addons/packages.config +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Greenshot.Core/Extensions/InteropWindowCaptureExtensions.cs b/src/Greenshot.Core/Extensions/InteropWindowCaptureExtensions.cs index bace08038..38a935c57 100644 --- a/src/Greenshot.Core/Extensions/InteropWindowCaptureExtensions.cs +++ b/src/Greenshot.Core/Extensions/InteropWindowCaptureExtensions.cs @@ -37,6 +37,7 @@ using Dapplo.Windows.Common.Extensions; using Dapplo.Windows.Common.Structs; using Dapplo.Windows.Desktop; using Dapplo.Windows.DesktopWindowsManager; +using Dapplo.Windows.DesktopWindowsManager.Structs; using Dapplo.Windows.Gdi32; using Dapplo.Windows.User32; using Dapplo.Windows.User32.Structs; @@ -74,7 +75,7 @@ namespace Greenshot.Core.Extensions public static ICaptureElement CaptureFromScreen(this IInteropWindow interopWindow, bool clientBounds = false) { var bounds = clientBounds ? interopWindow.GetInfo().ClientBounds: interopWindow.GetInfo().Bounds; - ICaptureElement result = ScreenSource.CaptureRectangle(bounds); + var result = ScreenSource.CaptureRectangle(bounds); return result; } diff --git a/src/Greenshot.Core/Greenshot.Core.csproj b/src/Greenshot.Core/Greenshot.Core.csproj index dea6a2888..fb2fe5c33 100644 --- a/src/Greenshot.Core/Greenshot.Core.csproj +++ b/src/Greenshot.Core/Greenshot.Core.csproj @@ -1,110 +1,40 @@ - - - - + + - {BF35190D-B2A7-4CFA-B397-51CB384CF0D7} - Library - Properties - Greenshot.Core - Greenshot.Core - v4.6.1 - 512 - - + net471;netcoreapp3.0 true - - true - - - - ..\packages\Dapplo.Log.1.2.1\lib\net45\Dapplo.Log.dll - - - ..\packages\Dapplo.Windows.0.5.109\lib\net461\Dapplo.Windows.dll - - - ..\packages\Dapplo.Windows.Common.0.5.109\lib\net461\Dapplo.Windows.Common.dll - - - ..\packages\Dapplo.Windows.DesktopWindowsManager.0.5.109\lib\net461\Dapplo.Windows.DesktopWindowsManager.dll - - - ..\packages\Dapplo.Windows.Gdi32.0.5.109\lib\net461\Dapplo.Windows.Gdi32.dll - - - ..\packages\Dapplo.Windows.Icons.0.5.109\lib\net461\Dapplo.Windows.Icons.dll - - - ..\packages\Dapplo.Windows.Input.0.5.109\lib\net461\Dapplo.Windows.Input.dll - - - ..\packages\Dapplo.Windows.Kernel32.0.5.109\lib\net461\Dapplo.Windows.Kernel32.dll - - - ..\packages\Dapplo.Windows.Messages.0.5.109\lib\net461\Dapplo.Windows.Messages.dll - - - ..\packages\Dapplo.Windows.User32.0.5.109\lib\net461\Dapplo.Windows.User32.dll - + + - - + - - - - ..\packages\System.Reactive.4.1.0\lib\net46\System.Reactive.dll - - - ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.1\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll - - - ..\packages\System.Threading.Tasks.Extensions.4.5.1\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll - - - ..\packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll - + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + 0.7.26 + + - - + - - - {f041c685-eb96-4ed1-9ace-0f5bd836610f} - Greenshot.Gfx - - - + \ No newline at end of file diff --git a/src/Greenshot.Core/Properties/AssemblyInfo.cs b/src/Greenshot.Core/Properties/AssemblyInfo.cs deleted file mode 100644 index d5e9309ab..000000000 --- a/src/Greenshot.Core/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Greenshot.Core")] -[assembly: AssemblyDescription("Core capture functionality for Greenshot")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Greenshot")] -[assembly: AssemblyProduct("Greenshot.Core")] -[assembly: AssemblyCopyright("Copyright © Greenshot 2018")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("bf35190d-b2a7-4cfa-b397-51cb384cf0d7")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/src/Greenshot.Core/Sources/DwmWindowSource.cs b/src/Greenshot.Core/Sources/DwmWindowSource.cs index 21d5ae708..afd7baf61 100644 --- a/src/Greenshot.Core/Sources/DwmWindowSource.cs +++ b/src/Greenshot.Core/Sources/DwmWindowSource.cs @@ -43,7 +43,7 @@ namespace Greenshot.Core.Sources public DwmWindowSource(ICaptureConfiguration captureConfiguration, Func retrieveWindowFunc = null) { _captureConfiguration = captureConfiguration; - _retrieveWindowFunc = retrieveWindowFunc ?? InteropWindowQuery.GetActiveWindow; + _retrieveWindowFunc = retrieveWindowFunc ?? InteropWindowQuery.GetForegroundWindow; } public ValueTask> Import(CancellationToken cancellationToken = default) diff --git a/src/Greenshot.Core/app.config b/src/Greenshot.Core/app.config index 4ce296638..dc12e2573 100644 --- a/src/Greenshot.Core/app.config +++ b/src/Greenshot.Core/app.config @@ -2,18 +2,6 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Greenshot.Core/packages.config b/src/Greenshot.Core/packages.config deleted file mode 100644 index 3fb8454d9..000000000 --- a/src/Greenshot.Core/packages.config +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Greenshot.Gfx.Experimental/Greenshot.Gfx.Experimental.csproj b/src/Greenshot.Gfx.Experimental/Greenshot.Gfx.Experimental.csproj index 012f15b46..d991ba5e9 100644 --- a/src/Greenshot.Gfx.Experimental/Greenshot.Gfx.Experimental.csproj +++ b/src/Greenshot.Gfx.Experimental/Greenshot.Gfx.Experimental.csproj @@ -1,79 +1,56 @@ - - - + + - Debug - AnyCPU - {14894A45-AA2C-4BC3-85A3-E388D0BDC1CA} - Library - Properties - Greenshot.Gfx.Experimental - Greenshot.Gfx.Experimental - v4.6.1 - 512 - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - latest + net471;netcoreapp3.0 true - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - latest - true - - - - - ..\packages\System.Buffers.4.5.0\lib\netstandard2.0\System.Buffers.dll - - - - - ..\packages\System.Memory.4.5.1\lib\netstandard2.0\System.Memory.dll - - - - ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll - - - ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.1\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll - - - + + - + + + + + + + + + + + + + + + + + - - - - - + + + + + 4.5.0 + + + 4.5.1 + + + 4.5.0 + + + 4.5.2 + + + {f041c685-eb96-4ed1-9ace-0f5bd836610f} Greenshot.Gfx - - - - - + \ No newline at end of file diff --git a/src/Greenshot.Gfx.Experimental/Properties/AssemblyInfo.cs b/src/Greenshot.Gfx.Experimental/Properties/AssemblyInfo.cs deleted file mode 100644 index 5b43d1766..000000000 --- a/src/Greenshot.Gfx.Experimental/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Greenshot.Gfx.Experimental")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("Greenshot.Gfx.Experimental")] -[assembly: AssemblyCopyright("Copyright © 2018")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("14894a45-aa2c-4bc3-85a3-e388d0bdc1ca")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/src/Greenshot.Gfx.Experimental/app.config b/src/Greenshot.Gfx.Experimental/app.config index b64150bec..b3e5dcbbe 100644 --- a/src/Greenshot.Gfx.Experimental/app.config +++ b/src/Greenshot.Gfx.Experimental/app.config @@ -2,22 +2,9 @@ - - - - - - - - - - - - - - - - - + + + + diff --git a/src/Greenshot.Gfx.Experimental/packages.config b/src/Greenshot.Gfx.Experimental/packages.config deleted file mode 100644 index bac5c5225..000000000 --- a/src/Greenshot.Gfx.Experimental/packages.config +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/src/Greenshot.Gfx/BitmapHelper.cs b/src/Greenshot.Gfx/BitmapHelper.cs index 11fa1d29d..3c8b6bacc 100644 --- a/src/Greenshot.Gfx/BitmapHelper.cs +++ b/src/Greenshot.Gfx/BitmapHelper.cs @@ -57,8 +57,7 @@ namespace Greenshot.Gfx { using (var tmpImage = Image.FromStream(stream, true, true)) { - var bitmap = tmpImage as Bitmap; - if (bitmap == null) + if (!(tmpImage is Bitmap bitmap)) { return null; } @@ -69,8 +68,6 @@ namespace Greenshot.Gfx static BitmapHelper() { - - // Fallback StreamConverters[""] = FromStreamReader; diff --git a/src/Greenshot.Gfx/Greenshot.Gfx.csproj b/src/Greenshot.Gfx/Greenshot.Gfx.csproj index ce72ed38f..9dc228c0f 100644 --- a/src/Greenshot.Gfx/Greenshot.Gfx.csproj +++ b/src/Greenshot.Gfx/Greenshot.Gfx.csproj @@ -1,184 +1,38 @@ - - - - + + - Debug - AnyCPU - {F041C685-EB96-4ED1-9ACE-0F5BD836610F} - Library - Properties - Greenshot.Gfx - Greenshot.Gfx - v4.6.1 - 512 + net471;netcoreapp3.0 true - - - - ..\packages\Autofac.4.8.1\lib\net45\Autofac.dll - - - ..\packages\Autofac.Extras.AttributeMetadata.4.0.1\lib\net45\Autofac.Extras.AttributeMetadata.dll - - - ..\packages\Autofac.Mef.4.0.0\lib\net45\Autofac.Integration.Mef.dll - - - ..\packages\Caliburn.Micro.Core.3.2.0\lib\net45\Caliburn.Micro.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\Caliburn.Micro.Platform.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\Caliburn.Micro.Platform.Core.dll - - - ..\packages\CommonServiceLocator.2.0.4\lib\net46\CommonServiceLocator.dll - - - ..\packages\Dapplo.Addons.1.0.79\lib\net461\Dapplo.Addons.dll - - - ..\packages\Dapplo.Addons.Bootstrapper.1.0.79\lib\net461\Dapplo.Addons.Bootstrapper.dll - - - ..\packages\Dapplo.CaliburnMicro.1.0.75\lib\net461\Dapplo.CaliburnMicro.dll - - - ..\packages\Dapplo.CaliburnMicro.Translations.1.0.75\lib\net461\Dapplo.CaliburnMicro.Translations.dll - - - ..\packages\Dapplo.Ini.0.5.31\lib\net45\Dapplo.Ini.dll - - - ..\packages\Dapplo.InterfaceImpl.0.2.12\lib\net45\Dapplo.InterfaceImpl.dll - - - ..\packages\Dapplo.Language.0.5.31\lib\net45\Dapplo.Language.dll - - - ..\packages\Dapplo.Log.1.2.1\lib\net45\Dapplo.Log.dll - - - ..\packages\Dapplo.Utils.1.0.161\lib\net45\Dapplo.Utils.dll - - - ..\packages\Dapplo.Windows.0.5.109\lib\net461\Dapplo.Windows.dll - - - ..\packages\Dapplo.Windows.Common.0.5.109\lib\net461\Dapplo.Windows.Common.dll - - - ..\packages\Dapplo.Windows.DesktopWindowsManager.0.5.109\lib\net461\Dapplo.Windows.DesktopWindowsManager.dll - - - ..\packages\Dapplo.Windows.Dpi.0.5.109\lib\net461\Dapplo.Windows.Dpi.dll - - - ..\packages\Dapplo.Windows.Gdi32.0.5.109\lib\net461\Dapplo.Windows.Gdi32.dll - - - ..\packages\Dapplo.Windows.Input.0.5.109\lib\net461\Dapplo.Windows.Input.dll - - - ..\packages\Dapplo.Windows.Kernel32.0.5.109\lib\net461\Dapplo.Windows.Kernel32.dll - - - ..\packages\Dapplo.Windows.Messages.0.5.109\lib\net461\Dapplo.Windows.Messages.dll - - - ..\packages\Dapplo.Windows.User32.0.5.109\lib\net461\Dapplo.Windows.User32.dll - + + + - - - - ..\packages\Svg.2.3.0\lib\net35\Svg.dll - - - - - ..\packages\System.Reactive.4.1.0\lib\net46\System.Reactive.dll - + + + - - ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.1\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll - - - ..\packages\System.Threading.Tasks.Extensions.4.5.1\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll - - - ..\packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\System.Windows.Interactivity.dll - + + - - - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + 1.2.7 + + + 2.3.0 + - - - - - - \ No newline at end of file + diff --git a/src/Greenshot.Gfx/Properties/AssemblyInfo.cs b/src/Greenshot.Gfx/Properties/AssemblyInfo.cs deleted file mode 100644 index d8e5b7c49..000000000 --- a/src/Greenshot.Gfx/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Greenshot.Gfx")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Greenshot")] -[assembly: AssemblyProduct("Greenshot.Gfx")] -[assembly: AssemblyCopyright("Copyright © Greenshot 2007-2018")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("f041c685-eb96-4ed1-9ace-0f5bd836610f")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/src/Greenshot.Gfx/app.config b/src/Greenshot.Gfx/app.config index 8fca7d315..b3e5dcbbe 100644 --- a/src/Greenshot.Gfx/app.config +++ b/src/Greenshot.Gfx/app.config @@ -2,18 +2,9 @@ - - - - - - - - - - - - - + + + + diff --git a/src/Greenshot.Gfx/packages.config b/src/Greenshot.Gfx/packages.config deleted file mode 100644 index 0838eca01..000000000 --- a/src/Greenshot.Gfx/packages.config +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Greenshot.PerformanceTests/App.config b/src/Greenshot.PerformanceTests/App.config index fa3ddd4fe..320e26190 100644 --- a/src/Greenshot.PerformanceTests/App.config +++ b/src/Greenshot.PerformanceTests/App.config @@ -1,126 +1,10 @@  - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/Greenshot.PerformanceTests/GfxPerformanceShort.cs b/src/Greenshot.PerformanceTests/GfxPerformanceShort.cs new file mode 100644 index 000000000..a986a5e14 --- /dev/null +++ b/src/Greenshot.PerformanceTests/GfxPerformanceShort.cs @@ -0,0 +1,49 @@ +using System.Drawing; +using System.Drawing.Imaging; +using BenchmarkDotNet.Attributes; +using Greenshot.Gfx; +using Greenshot.Gfx.Experimental; + +namespace Greenshot.PerformanceTests +{ + /// + /// This defines the benchmarks which can be done + /// + [MinColumn, MaxColumn, MemoryDiagnoser] + public class GfxPerformanceShort + { + [Benchmark] + [Arguments(PixelFormat.Format24bppRgb)] + [Arguments(PixelFormat.Format32bppRgb)] + [Arguments(PixelFormat.Format32bppArgb)] + public void Blur(PixelFormat pixelFormat) + { + using (var bitmap = BitmapFactory.CreateEmpty(400, 400, pixelFormat, Color.White)) + { + using (var graphics = Graphics.FromImage(bitmap)) + using (var pen = new SolidBrush(Color.Blue)) + { + graphics.FillRectangle(pen, new Rectangle(30, 30, 340, 340)); + } + bitmap.ApplyBoxBlur(10); + } + } + + [Benchmark] + [Arguments(PixelFormat.Format24bppRgb)] + [Arguments(PixelFormat.Format32bppRgb)] + [Arguments(PixelFormat.Format32bppArgb)] + public void BlurSpan(PixelFormat pixelFormat) + { + using (var bitmap = BitmapFactory.CreateEmpty(400, 400, pixelFormat, Color.White)) + { + using (var graphics = Graphics.FromImage(bitmap)) + using (var pen = new SolidBrush(Color.Blue)) + { + graphics.FillRectangle(pen, new Rectangle(30, 30, 340, 340)); + } + bitmap.ApplyBoxBlurSpan(10); + } + } + } +} diff --git a/src/Greenshot.PerformanceTests/Greenshot.PerformanceTests.csproj b/src/Greenshot.PerformanceTests/Greenshot.PerformanceTests.csproj index 627bf0e50..53d92bab8 100644 --- a/src/Greenshot.PerformanceTests/Greenshot.PerformanceTests.csproj +++ b/src/Greenshot.PerformanceTests/Greenshot.PerformanceTests.csproj @@ -1,246 +1,42 @@ - - - - + + - {5D594C8A-2137-46E1-8D01-B83662825C7B} - Exe Greenshot.PerformanceTests Greenshot.PerformanceTests - v4.6.1 - 512 - - true + Exe + net471;netcoreapp3.0 + true - - - ..\packages\Autofac.4.8.1\lib\net45\Autofac.dll - - - ..\packages\Autofac.Extras.AttributeMetadata.4.0.1\lib\net45\Autofac.Extras.AttributeMetadata.dll - - - ..\packages\Autofac.Mef.4.0.0\lib\net45\Autofac.Integration.Mef.dll - - - ..\packages\BenchmarkDotNet.0.11.1\lib\net46\BenchmarkDotNet.dll - - - ..\packages\Caliburn.Micro.Core.3.2.0\lib\net45\Caliburn.Micro.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\Caliburn.Micro.Platform.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\Caliburn.Micro.Platform.Core.dll - - - ..\packages\CommandLineParser.2.3.0\lib\net45\CommandLine.dll - - - ..\packages\CommonServiceLocator.2.0.4\lib\net46\CommonServiceLocator.dll - - - ..\packages\Dapplo.Addons.1.0.79\lib\net461\Dapplo.Addons.dll - - - ..\packages\Dapplo.Addons.Bootstrapper.1.0.79\lib\net461\Dapplo.Addons.Bootstrapper.dll - - - ..\packages\Dapplo.CaliburnMicro.1.0.75\lib\net461\Dapplo.CaliburnMicro.dll - - - ..\packages\Dapplo.CaliburnMicro.Translations.1.0.75\lib\net461\Dapplo.CaliburnMicro.Translations.dll - - - ..\packages\Dapplo.HttpExtensions.0.8.46\lib\net46\Dapplo.HttpExtensions.dll - - - ..\packages\Dapplo.HttpExtensions.OAuth.0.8.46\lib\net46\Dapplo.HttpExtensions.OAuth.dll - - - ..\packages\Dapplo.Ini.0.5.31\lib\net45\Dapplo.Ini.dll - - - ..\packages\Dapplo.InterfaceImpl.0.2.12\lib\net45\Dapplo.InterfaceImpl.dll - - - ..\packages\Dapplo.Language.0.5.31\lib\net45\Dapplo.Language.dll - - - ..\packages\Dapplo.Log.1.2.1\lib\net45\Dapplo.Log.dll - - - ..\packages\Dapplo.Utils.1.0.161\lib\net45\Dapplo.Utils.dll - - - ..\packages\Dapplo.Windows.0.5.109\lib\net461\Dapplo.Windows.dll - - - ..\packages\Dapplo.Windows.Com.0.5.109\lib\net461\Dapplo.Windows.Com.dll - - - ..\packages\Dapplo.Windows.Common.0.5.109\lib\net461\Dapplo.Windows.Common.dll - - - ..\packages\Dapplo.Windows.DesktopWindowsManager.0.5.109\lib\net461\Dapplo.Windows.DesktopWindowsManager.dll - - - ..\packages\Dapplo.Windows.Dpi.0.5.109\lib\net461\Dapplo.Windows.Dpi.dll - - - ..\packages\Dapplo.Windows.EmbeddedBrowser.0.5.109\lib\net461\Dapplo.Windows.EmbeddedBrowser.dll - - - ..\packages\Dapplo.Windows.Gdi32.0.5.109\lib\net461\Dapplo.Windows.Gdi32.dll - - - ..\packages\Dapplo.Windows.Input.0.5.109\lib\net461\Dapplo.Windows.Input.dll - - - ..\packages\Dapplo.Windows.Kernel32.0.5.109\lib\net461\Dapplo.Windows.Kernel32.dll - - - ..\packages\Dapplo.Windows.Messages.0.5.109\lib\net461\Dapplo.Windows.Messages.dll - - - ..\packages\Dapplo.Windows.User32.0.5.109\lib\net461\Dapplo.Windows.User32.dll - - - ..\packages\JeremyAnsel.ColorQuant.1.0.55\lib\net40\JeremyAnsel.ColorQuant.dll - - - ..\packages\Microsoft.CodeAnalysis.Common.2.9.0\lib\netstandard1.3\Microsoft.CodeAnalysis.dll - - - ..\packages\Microsoft.CodeAnalysis.CSharp.2.9.0\lib\netstandard1.3\Microsoft.CodeAnalysis.CSharp.dll - - - ..\packages\Microsoft.DotNet.InternalAbstractions.1.0.0\lib\net451\Microsoft.DotNet.InternalAbstractions.dll - - - ..\packages\Microsoft.DotNet.PlatformAbstractions.2.1.0\lib\net45\Microsoft.DotNet.PlatformAbstractions.dll - + + + + + + + + + + + + + + - - ..\packages\Microsoft.Win32.Registry.4.5.0\lib\net461\Microsoft.Win32.Registry.dll - - - ..\packages\System.AppContext.4.3.0\lib\net46\System.AppContext.dll - - - ..\packages\System.Collections.Immutable.1.5.0\lib\netstandard2.0\System.Collections.Immutable.dll - - - ..\packages\System.Console.4.3.1\lib\net46\System.Console.dll - True - True - - - ..\packages\System.Diagnostics.FileVersionInfo.4.3.0\lib\net46\System.Diagnostics.FileVersionInfo.dll - True - True - - - ..\packages\System.Diagnostics.StackTrace.4.3.0\lib\net46\System.Diagnostics.StackTrace.dll - True - True - - - ..\packages\System.IO.Compression.4.3.0\lib\net46\System.IO.Compression.dll - True - True - - - ..\packages\System.IO.FileSystem.4.3.0\lib\net46\System.IO.FileSystem.dll - True - True - - - ..\packages\System.IO.FileSystem.Primitives.4.3.0\lib\net46\System.IO.FileSystem.Primitives.dll - True - True - - - ..\packages\System.Reactive.4.1.0\lib\net46\System.Reactive.dll - - - ..\packages\System.Reflection.Metadata.1.6.0\lib\netstandard2.0\System.Reflection.Metadata.dll - - - ..\packages\System.Reflection.TypeExtensions.4.1.0\lib\net46\System.Reflection.TypeExtensions.dll - - - ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.1\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll - - - ..\packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll - True - True - - - ..\packages\System.Runtime.Serialization.Primitives.4.3.0\lib\net46\System.Runtime.Serialization.Primitives.dll - True - True - - - ..\packages\System.Security.AccessControl.4.5.0\lib\net461\System.Security.AccessControl.dll - - - ..\packages\System.Security.Cryptography.Algorithms.4.3.1\lib\net461\System.Security.Cryptography.Algorithms.dll - True - True - - - ..\packages\System.Security.Cryptography.Encoding.4.3.0\lib\net46\System.Security.Cryptography.Encoding.dll - True - True - - - ..\packages\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll - True - True - - - ..\packages\System.Security.Cryptography.X509Certificates.4.3.2\lib\net461\System.Security.Cryptography.X509Certificates.dll - True - True - - - ..\packages\System.Security.Principal.Windows.4.5.0\lib\net461\System.Security.Principal.Windows.dll - - - ..\packages\System.Text.Encoding.CodePages.4.5.0\lib\net461\System.Text.Encoding.CodePages.dll - - - ..\packages\System.Threading.Tasks.Extensions.4.5.1\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll - - - ..\packages\System.Threading.Thread.4.3.0\lib\net46\System.Threading.Thread.dll - True - True - - - ..\packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\System.Windows.Interactivity.dll - @@ -248,57 +44,29 @@ - - ..\packages\System.Xml.ReaderWriter.4.3.1\lib\net46\System.Xml.ReaderWriter.dll - True - True - - - ..\packages\System.Xml.XmlDocument.4.3.0\lib\net46\System.Xml.XmlDocument.dll - True - True - - - ..\packages\System.Xml.XPath.4.3.0\lib\net46\System.Xml.XPath.dll - True - True - - - ..\packages\System.Xml.XPath.XDocument.4.3.0\lib\net46\System.Xml.XPath.XDocument.dll - True - True - - - ..\packages\System.Xml.XPath.XmlDocument.4.3.0\lib\net46\System.Xml.XPath.XmlDocument.dll - + - - - + + + + + + - - + + + + + 2.6.2 + runtime; build; native; contentfiles; analyzers + all + + + + + - - - {14894a45-aa2c-4bc3-85a3-e388d0bdc1ca} - Greenshot.Gfx.Experimental - - - {F041C685-EB96-4ED1-9ACE-0F5BD836610F} - Greenshot.Gfx - - - {9b162e60-12d8-44fd-8093-7d40392f23fa} - Greenshot.Tests - - - - - - - \ No newline at end of file diff --git a/src/Greenshot.PerformanceTests/Program.cs b/src/Greenshot.PerformanceTests/Program.cs index d065bb97a..45f6d2e46 100644 --- a/src/Greenshot.PerformanceTests/Program.cs +++ b/src/Greenshot.PerformanceTests/Program.cs @@ -1,4 +1,7 @@ using System; +using BenchmarkDotNet.Configs; +using BenchmarkDotNet.Environments; +using BenchmarkDotNet.Jobs; using BenchmarkDotNet.Running; namespace Greenshot.PerformanceTests @@ -11,7 +14,9 @@ namespace Greenshot.PerformanceTests // ReSharper disable once UnusedParameter.Local private static void Main(string[] args) { - BenchmarkRunner.Run(); + var job = Job.Default.With(Platform.X64); + var config = DefaultConfig.Instance.With(job).KeepBenchmarkFiles(true); + BenchmarkRunner.Run(config); Console.ReadLine(); } } diff --git a/src/Greenshot.PerformanceTests/Properties/AssemblyInfo.cs b/src/Greenshot.PerformanceTests/Properties/AssemblyInfo.cs deleted file mode 100644 index 2cdf6affd..000000000 --- a/src/Greenshot.PerformanceTests/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Greenshot.PerformanceTests")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Greenshot")] -[assembly: AssemblyProduct("Greenshot.PerformanceTests")] -[assembly: AssemblyCopyright("Copyright © Greenshot 2007-2018")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("5d594c8a-2137-46e1-8d01-b83662825c7b")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/src/Greenshot.PerformanceTests/packages.config b/src/Greenshot.PerformanceTests/packages.config deleted file mode 100644 index 182b12837..000000000 --- a/src/Greenshot.PerformanceTests/packages.config +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Greenshot.Tests/CaptureTests.cs b/src/Greenshot.Tests/CaptureTests.cs index b5b97176a..bbca527c5 100644 --- a/src/Greenshot.Tests/CaptureTests.cs +++ b/src/Greenshot.Tests/CaptureTests.cs @@ -26,8 +26,8 @@ using System.Linq; using System.Threading.Tasks; using System.Windows.Media.Imaging; using Dapplo.CaliburnMicro.Extensions; -using Dapplo.Ini; using Dapplo.Windows.Desktop; +using Greenshot.Addons.Config.Impl; using Greenshot.Addons.Core; using Greenshot.Core; using Greenshot.Core.Enums; @@ -81,8 +81,7 @@ namespace Greenshot.Tests [WpfFact] public async Task Test_CaptureFlow_DwmWindowSource() { - var iniConfig = new IniConfig("Greenshot.Tests", "Greenshot.Tests"); - var config = iniConfig.Get(); + ICoreConfiguration config = new CoreConfigurationImpl(); var windowToCapture = InteropWindowQuery.GetTopLevelWindows().First(window => window.GetCaption().Contains("Notepad")); var bounds = windowToCapture.GetInfo().Bounds; diff --git a/src/Greenshot.Tests/FilterTests.cs b/src/Greenshot.Tests/FilterTests.cs index 63933952c..36905abe1 100644 --- a/src/Greenshot.Tests/FilterTests.cs +++ b/src/Greenshot.Tests/FilterTests.cs @@ -3,6 +3,7 @@ using System.Drawing.Imaging; using Dapplo.Log; using Dapplo.Log.XUnit; using Greenshot.Gfx; +using Greenshot.Tests.Implementation; using Xunit; using Xunit.Abstractions; diff --git a/src/Greenshot.Tests/Greenshot.Tests.csproj b/src/Greenshot.Tests/Greenshot.Tests.csproj index 355c220d7..ed2663672 100644 --- a/src/Greenshot.Tests/Greenshot.Tests.csproj +++ b/src/Greenshot.Tests/Greenshot.Tests.csproj @@ -1,275 +1,39 @@ - - - - - + + - Debug - AnyCPU - {9B162E60-12D8-44FD-8093-7D40392F23FA} - Library - Properties - Greenshot.Tests - Greenshot.Tests - v4.6.1 - 512 - - - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 + net471;netcoreapp3.0 true - latest - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - true - latest - - - - ..\packages\Autofac.4.8.1\lib\net45\Autofac.dll - - - ..\packages\Autofac.Extras.AttributeMetadata.4.0.1\lib\net45\Autofac.Extras.AttributeMetadata.dll - - - ..\packages\Autofac.Mef.4.0.0\lib\net45\Autofac.Integration.Mef.dll - - - ..\packages\BenchmarkDotNet.0.11.1\lib\net46\BenchmarkDotNet.dll - - - ..\packages\BenchmarkDotNet.Core.0.10.14\lib\net46\BenchmarkDotNet.Core.dll - - - ..\packages\BenchmarkDotNet.Toolchains.Roslyn.0.10.14\lib\net46\BenchmarkDotNet.Toolchains.Roslyn.dll - - - ..\packages\Caliburn.Micro.Core.3.2.0\lib\net45\Caliburn.Micro.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\Caliburn.Micro.Platform.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\Caliburn.Micro.Platform.Core.dll - - - ..\packages\CommandLineParser.2.3.0\lib\net45\CommandLine.dll - - - ..\packages\CommonServiceLocator.2.0.4\lib\net46\CommonServiceLocator.dll - - - ..\packages\Dapplo.Addons.1.0.79\lib\net461\Dapplo.Addons.dll - - - ..\packages\Dapplo.Addons.Bootstrapper.1.0.79\lib\net461\Dapplo.Addons.Bootstrapper.dll - - - ..\packages\Dapplo.CaliburnMicro.1.0.75\lib\net461\Dapplo.CaliburnMicro.dll - - - ..\packages\Dapplo.CaliburnMicro.Translations.1.0.75\lib\net461\Dapplo.CaliburnMicro.Translations.dll - - - ..\packages\Dapplo.HttpExtensions.0.8.46\lib\net46\Dapplo.HttpExtensions.dll - - - ..\packages\Dapplo.HttpExtensions.OAuth.0.8.46\lib\net46\Dapplo.HttpExtensions.OAuth.dll - - - ..\packages\Dapplo.Ini.0.5.31\lib\net45\Dapplo.Ini.dll - - - ..\packages\Dapplo.InterfaceImpl.0.2.12\lib\net45\Dapplo.InterfaceImpl.dll - - - ..\packages\Dapplo.Language.0.5.31\lib\net45\Dapplo.Language.dll - - - ..\packages\Dapplo.Log.1.2.1\lib\net45\Dapplo.Log.dll - - - ..\packages\Dapplo.Utils.1.0.161\lib\net45\Dapplo.Utils.dll - - - ..\packages\Dapplo.Windows.0.5.109\lib\net461\Dapplo.Windows.dll - - - ..\packages\Dapplo.Windows.Com.0.5.109\lib\net461\Dapplo.Windows.Com.dll - - - ..\packages\Dapplo.Windows.Common.0.5.109\lib\net461\Dapplo.Windows.Common.dll - - - ..\packages\Dapplo.Windows.DesktopWindowsManager.0.5.109\lib\net461\Dapplo.Windows.DesktopWindowsManager.dll - - - ..\packages\Dapplo.Windows.Dpi.0.5.109\lib\net461\Dapplo.Windows.Dpi.dll - - - ..\packages\Dapplo.Windows.EmbeddedBrowser.0.5.109\lib\net461\Dapplo.Windows.EmbeddedBrowser.dll - - - ..\packages\Dapplo.Windows.Gdi32.0.5.109\lib\net461\Dapplo.Windows.Gdi32.dll - - - ..\packages\Dapplo.Windows.Input.0.5.109\lib\net461\Dapplo.Windows.Input.dll - - - ..\packages\Dapplo.Windows.Kernel32.0.5.109\lib\net461\Dapplo.Windows.Kernel32.dll - - - ..\packages\Dapplo.Windows.Messages.0.5.109\lib\net461\Dapplo.Windows.Messages.dll - - - ..\packages\Dapplo.Windows.User32.0.5.109\lib\net461\Dapplo.Windows.User32.dll - - - ..\packages\Microsoft.CodeAnalysis.Common.2.9.0\lib\netstandard1.3\Microsoft.CodeAnalysis.dll - - - ..\packages\Microsoft.CodeAnalysis.CSharp.2.9.0\lib\netstandard1.3\Microsoft.CodeAnalysis.CSharp.dll - - - ..\packages\Microsoft.DotNet.InternalAbstractions.1.0.0\lib\net451\Microsoft.DotNet.InternalAbstractions.dll - - - ..\packages\Microsoft.DotNet.PlatformAbstractions.2.1.0\lib\net45\Microsoft.DotNet.PlatformAbstractions.dll - + + + + + + + + + + + + + + - - ..\packages\Microsoft.Win32.Registry.4.5.0\lib\net461\Microsoft.Win32.Registry.dll - - - ..\packages\System.AppContext.4.3.0\lib\net46\System.AppContext.dll - - - ..\packages\System.Collections.Immutable.1.5.0\lib\netstandard2.0\System.Collections.Immutable.dll - - - ..\packages\System.Console.4.3.1\lib\net46\System.Console.dll - True - True - - - ..\packages\System.Diagnostics.FileVersionInfo.4.3.0\lib\net46\System.Diagnostics.FileVersionInfo.dll - True - True - - - ..\packages\System.Diagnostics.StackTrace.4.3.0\lib\net46\System.Diagnostics.StackTrace.dll - True - True - - - ..\packages\System.IO.Compression.4.3.0\lib\net46\System.IO.Compression.dll - True - True - - - ..\packages\System.IO.FileSystem.4.3.0\lib\net46\System.IO.FileSystem.dll - True - True - - - ..\packages\System.IO.FileSystem.Primitives.4.3.0\lib\net46\System.IO.FileSystem.Primitives.dll - True - True - - - ..\packages\System.Reactive.4.1.0\lib\net46\System.Reactive.dll - - - ..\packages\System.Reflection.Metadata.1.6.0\lib\netstandard2.0\System.Reflection.Metadata.dll - - - ..\packages\System.Reflection.TypeExtensions.4.5.0\lib\net461\System.Reflection.TypeExtensions.dll - - - ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.1\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll - - - ..\packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll - True - True - - - ..\packages\System.Runtime.Serialization.Primitives.4.3.0\lib\net46\System.Runtime.Serialization.Primitives.dll - True - True - - - ..\packages\System.Security.AccessControl.4.5.0\lib\net461\System.Security.AccessControl.dll - - - ..\packages\System.Security.Cryptography.Algorithms.4.3.1\lib\net461\System.Security.Cryptography.Algorithms.dll - True - True - - - ..\packages\System.Security.Cryptography.Encoding.4.3.0\lib\net46\System.Security.Cryptography.Encoding.dll - True - True - - - ..\packages\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll - True - True - - - ..\packages\System.Security.Cryptography.X509Certificates.4.3.2\lib\net461\System.Security.Cryptography.X509Certificates.dll - True - True - - - ..\packages\System.Security.Principal.Windows.4.5.0\lib\net461\System.Security.Principal.Windows.dll - - - ..\packages\System.Text.Encoding.CodePages.4.5.0\lib\net461\System.Text.Encoding.CodePages.dll - - - ..\packages\System.Threading.Tasks.Extensions.4.5.1\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll - - - ..\packages\System.Threading.Thread.4.3.0\lib\net46\System.Threading.Thread.dll - True - True - - - ..\packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\System.Windows.Interactivity.dll - @@ -277,93 +41,11 @@ - - ..\packages\System.Xml.ReaderWriter.4.3.1\lib\net46\System.Xml.ReaderWriter.dll - True - True - - - ..\packages\System.Xml.XmlDocument.4.3.0\lib\net46\System.Xml.XmlDocument.dll - True - True - - - ..\packages\System.Xml.XPath.4.3.0\lib\net46\System.Xml.XPath.dll - True - True - - - ..\packages\System.Xml.XPath.XDocument.4.3.0\lib\net46\System.Xml.XPath.XDocument.dll - True - True - - - ..\packages\System.Xml.XPath.XmlDocument.4.3.0\lib\net46\System.Xml.XPath.XmlDocument.dll - - - ..\packages\xunit.abstractions.2.0.3\lib\net35\xunit.abstractions.dll - True - - - ..\packages\xunit.assert.2.4.0\lib\netstandard2.0\xunit.assert.dll - - - ..\packages\xunit.extensibility.core.2.4.0\lib\net452\xunit.core.dll - - - ..\packages\xunit.extensibility.execution.2.4.0\lib\net452\xunit.execution.desktop.dll - - - ..\packages\Xunit.StaFact.0.2.17\lib\net452\Xunit.StaFact.dll - + - - - - - - - - - - - - - - - {ad7cffe2-40e7-46cf-a172-d48cf7ae9a12} - Greenshot.Addon.Dropbox - - - {5b924697-4dcd-4f98-85f1-105cb84b7341} - Greenshot.Addons - - - {bf35190d-b2a7-4cfa-b397-51cb384cf0d7} - Greenshot.Core - - - {14894a45-aa2c-4bc3-85a3-e388d0bdc1ca} - Greenshot.Gfx.Experimental - - - {f041c685-eb96-4ed1-9ace-0f5bd836610f} - Greenshot.Gfx - - - {cd642bf4-d815-4d67-a0b5-c69f0b8231af} - Greenshot - - - - - - - - - + PreserveNewest @@ -378,26 +60,42 @@ PreserveNewest - - PreserveNewest Designer + - - - + + + + + + + runtime; build; native; contentfiles; analyzers + all + + + + + + + + + runtime; build; native; contentfiles; analyzers + all + + - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - - + + + + + + + + + + \ No newline at end of file diff --git a/src/Greenshot.Tests/IniTests.cs b/src/Greenshot.Tests/IniTests.cs index 4baa04ddb..b151ddd0e 100644 --- a/src/Greenshot.Tests/IniTests.cs +++ b/src/Greenshot.Tests/IniTests.cs @@ -21,10 +21,8 @@ #endregion -using System.Threading.Tasks; -using Dapplo.Ini; -using Dapplo.Ini.Converters; -using Greenshot.Addon.Dropbox; +using Dapplo.Config.Ini.Converters; +using Greenshot.Addon.Dropbox.Configuration.Impl; using Xunit; namespace Greenshot.Tests @@ -32,19 +30,15 @@ namespace Greenshot.Tests public class IniTests { [Fact] - public async Task ConstIniTest() + public void ConstIniTest() { // TODO: Set via build StringEncryptionTypeConverter.RgbIv = "dlgjowejgogkklwj"; StringEncryptionTypeConverter.RgbKey = "lsjvkwhvwujkagfauguwcsjgu2wueuff"; - using (var iniConfig = new IniConfig("greenshot", "greenshot")) - { - await iniConfig.LoadIfNeededAsync(); - var dropboxConfiguration = iniConfig.Get(); - // TODO: Fix this!! - Assert.NotEqual("@credentials_dropbox_consumer_key@", dropboxConfiguration.ClientId); - } + var dropboxConfiguration = new DropboxConfigurationImpl(); + // TODO: Fix this!! + Assert.NotEqual("@credentials_dropbox_consumer_key@", dropboxConfiguration.ClientId); } } } diff --git a/src/Greenshot.Tests/Properties/AssemblyInfo.cs b/src/Greenshot.Tests/Properties/AssemblyInfo.cs deleted file mode 100644 index e314bba58..000000000 --- a/src/Greenshot.Tests/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Greenshot.Tests")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Greenshot")] -[assembly: AssemblyProduct("Greenshot.Tests")] -[assembly: AssemblyCopyright("Copyright © Greenshot 2007-2018")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("9b162e60-12d8-44fd-8093-7d40392f23fa")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/src/Greenshot.Tests/UpdateTests.cs b/src/Greenshot.Tests/UpdateTests.cs index cb115cfa4..3e8ef09c3 100644 --- a/src/Greenshot.Tests/UpdateTests.cs +++ b/src/Greenshot.Tests/UpdateTests.cs @@ -21,6 +21,7 @@ #endregion +#if !NETCOREAPP3_0 using System; using System.ServiceModel.Syndication; using System.Threading.Tasks; @@ -55,3 +56,4 @@ namespace Greenshot.Tests } } } +#endif \ No newline at end of file diff --git a/src/Greenshot.Tests/app.config b/src/Greenshot.Tests/app.config index bf9c7a032..b3e5dcbbe 100644 --- a/src/Greenshot.Tests/app.config +++ b/src/Greenshot.Tests/app.config @@ -2,110 +2,9 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + diff --git a/src/Greenshot.Tests/packages.config b/src/Greenshot.Tests/packages.config deleted file mode 100644 index 447ff05a6..000000000 --- a/src/Greenshot.Tests/packages.config +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Greenshot.sln b/src/Greenshot.sln index e7a9fe6be..b493f13c7 100644 --- a/src/Greenshot.sln +++ b/src/Greenshot.sln @@ -3,55 +3,55 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 VisualStudioVersion = 15.0.27130.2027 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Greenshot", "Greenshot\Greenshot.csproj", "{CD642BF4-D815-4D67-A0B5-C69F0B8231AF}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Greenshot", "Greenshot\Greenshot.csproj", "{CD642BF4-D815-4D67-A0B5-C69F0B8231AF}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Greenshot.Addons", "Greenshot.Addons\Greenshot.Addons.csproj", "{5B924697-4DCD-4F98-85F1-105CB84B7341}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Greenshot.Addons", "Greenshot.Addons\Greenshot.Addons.csproj", "{5B924697-4DCD-4F98-85F1-105CB84B7341}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Greenshot.Addon.ExternalCommand", "Greenshot.Addon.ExternalCommand\Greenshot.Addon.ExternalCommand.csproj", "{47F23C86-604E-4CC3-8767-B3D4088F30BB}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Greenshot.Addon.ExternalCommand", "Greenshot.Addon.ExternalCommand\Greenshot.Addon.ExternalCommand.csproj", "{47F23C86-604E-4CC3-8767-B3D4088F30BB}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Greenshot.Addon.Confluence", "Greenshot.Addon.Confluence\Greenshot.Addon.Confluence.csproj", "{C3052651-598A-44E2-AAB3-2E41311D50F9}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Greenshot.Addon.Confluence", "Greenshot.Addon.Confluence\Greenshot.Addon.Confluence.csproj", "{C3052651-598A-44E2-AAB3-2E41311D50F9}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Greenshot.Addon.Imgur", "Greenshot.Addon.Imgur\Greenshot.Addon.Imgur.csproj", "{80D8DEB9-94E3-4876-8CCA-2DF1ED5F2C50}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Greenshot.Addon.Imgur", "Greenshot.Addon.Imgur\Greenshot.Addon.Imgur.csproj", "{80D8DEB9-94E3-4876-8CCA-2DF1ED5F2C50}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Greenshot.Addon.Jira", "Greenshot.Addon.Jira\Greenshot.Addon.Jira.csproj", "{19FEEF09-313F-43C7-819D-F1BCA782B08B}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Greenshot.Addon.Jira", "Greenshot.Addon.Jira\Greenshot.Addon.Jira.csproj", "{19FEEF09-313F-43C7-819D-F1BCA782B08B}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Greenshot.Addon.OCR", "Greenshot.Addon.OCR\Greenshot.Addon.OCR.csproj", "{C6988EE8-2FEE-4349-9F09-F9628A0D8965}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Greenshot.Addon.OCR", "Greenshot.Addon.OCR\Greenshot.Addon.OCR.csproj", "{C6988EE8-2FEE-4349-9F09-F9628A0D8965}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Greenshot.Addon.Box", "Greenshot.Addon.Box\Greenshot.Addon.Box.csproj", "{697CF066-9077-4F22-99D9-D989CCE7282B}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Greenshot.Addon.Box", "Greenshot.Addon.Box\Greenshot.Addon.Box.csproj", "{697CF066-9077-4F22-99D9-D989CCE7282B}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Greenshot.Addon.Dropbox", "Greenshot.Addon.Dropbox\Greenshot.Addon.Dropbox.csproj", "{AD7CFFE2-40E7-46CF-A172-D48CF7AE9A12}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Greenshot.Addon.Dropbox", "Greenshot.Addon.Dropbox\Greenshot.Addon.Dropbox.csproj", "{AD7CFFE2-40E7-46CF-A172-D48CF7AE9A12}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Greenshot.Addon.Flickr", "Greenshot.Addon.Flickr\Greenshot.Addon.Flickr.csproj", "{7EC72A5A-D73A-4B4B-9CA1-2216C7D92D5E}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Greenshot.Addon.Flickr", "Greenshot.Addon.Flickr\Greenshot.Addon.Flickr.csproj", "{7EC72A5A-D73A-4B4B-9CA1-2216C7D92D5E}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Greenshot.Addon.GooglePhotos", "Greenshot.Addon.GooglePhotos\Greenshot.Addon.GooglePhotos.csproj", "{1893A2E4-A78A-4713-A8E7-E70058DABEE0}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Greenshot.Addon.GooglePhotos", "Greenshot.Addon.GooglePhotos\Greenshot.Addon.GooglePhotos.csproj", "{1893A2E4-A78A-4713-A8E7-E70058DABEE0}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Greenshot.Addon.Office", "Greenshot.Addon.Office\Greenshot.Addon.Office.csproj", "{92599C09-FF29-4ABD-B6E6-C48ECD781BAB}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Greenshot.Addon.Office", "Greenshot.Addon.Office\Greenshot.Addon.Office.csproj", "{92599C09-FF29-4ABD-B6E6-C48ECD781BAB}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Greenshot.Addon.Photobucket", "Greenshot.Addon.Photobucket\Greenshot.Addon.Photobucket.csproj", "{9C0ECC4C-7807-4111-916A-4F57BB29788A}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Greenshot.Addon.Photobucket", "Greenshot.Addon.Photobucket\Greenshot.Addon.Photobucket.csproj", "{9C0ECC4C-7807-4111-916A-4F57BB29788A}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Greenshot.Addon.Win10", "Greenshot.Addon.Win10\Greenshot.Addon.Win10.csproj", "{9801F62C-540F-4BFE-9211-6405DEDE563B}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Greenshot.Addon.Win10", "Greenshot.Addon.Win10\Greenshot.Addon.Win10.csproj", "{9801F62C-540F-4BFE-9211-6405DEDE563B}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Greenshot.Addon.Lutim", "Greenshot.Addon.Lutim\Greenshot.Addon.Lutim.csproj", "{D106F86C-CD3D-44FF-B151-2A5D47268B5C}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Greenshot.Addon.Lutim", "Greenshot.Addon.Lutim\Greenshot.Addon.Lutim.csproj", "{D106F86C-CD3D-44FF-B151-2A5D47268B5C}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Greenshot.Gfx", "Greenshot.Gfx\Greenshot.Gfx.csproj", "{F041C685-EB96-4ED1-9ACE-0F5BD836610F}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Greenshot.Gfx", "Greenshot.Gfx\Greenshot.Gfx.csproj", "{F041C685-EB96-4ED1-9ACE-0F5BD836610F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Greenshot.PerformanceTests", "Greenshot.PerformanceTests\Greenshot.PerformanceTests.csproj", "{5D594C8A-2137-46E1-8D01-B83662825C7B}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Greenshot.PerformanceTests", "Greenshot.PerformanceTests\Greenshot.PerformanceTests.csproj", "{5D594C8A-2137-46E1-8D01-B83662825C7B}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Greenshot.Tests", "Greenshot.Tests\Greenshot.Tests.csproj", "{9B162E60-12D8-44FD-8093-7D40392F23FA}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Greenshot.Tests", "Greenshot.Tests\Greenshot.Tests.csproj", "{9B162E60-12D8-44FD-8093-7D40392F23FA}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Greenshot.Addon.LegacyEditor", "Greenshot.Addon.LegacyEditor\Greenshot.Addon.LegacyEditor.csproj", "{9F89C5A0-EB75-4F01-97EB-FBC0725733F2}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Greenshot.Addon.LegacyEditor", "Greenshot.Addon.LegacyEditor\Greenshot.Addon.LegacyEditor.csproj", "{9F89C5A0-EB75-4F01-97EB-FBC0725733F2}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Greenshot.Gfx.Experimental", "Greenshot.Gfx.Experimental\Greenshot.Gfx.Experimental.csproj", "{14894A45-AA2C-4BC3-85A3-E388D0BDC1CA}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Greenshot.Gfx.Experimental", "Greenshot.Gfx.Experimental\Greenshot.Gfx.Experimental.csproj", "{14894A45-AA2C-4BC3-85A3-E388D0BDC1CA}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Greenshot.Addon.OneDrive", "Greenshot.Addon.OneDrive\Greenshot.Addon.OneDrive.csproj", "{B35272D3-4631-4FA5-9A3E-85D70ECA9A8D}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Greenshot.Addon.OneDrive", "Greenshot.Addon.OneDrive\Greenshot.Addon.OneDrive.csproj", "{B35272D3-4631-4FA5-9A3E-85D70ECA9A8D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Greenshot.Addon.Tfs", "Greenshot.Addon.Tfs\Greenshot.Addon.Tfs.csproj", "{8B3643A5-AFED-49FF-8D66-6348FB102EB2}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Greenshot.Addon.Tfs", "Greenshot.Addon.Tfs\Greenshot.Addon.Tfs.csproj", "{8B3643A5-AFED-49FF-8D66-6348FB102EB2}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Greenshot.Addon.OcrCommand", "Greenshot.Addon.OcrCommand\Greenshot.Addon.OcrCommand.csproj", "{7B8E9055-A054-4290-B537-075EBFDF8BDF}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Greenshot.Addon.OcrCommand", "Greenshot.Addon.OcrCommand\Greenshot.Addon.OcrCommand.csproj", "{7B8E9055-A054-4290-B537-075EBFDF8BDF}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Greenshot.Core", "Greenshot.Core\Greenshot.Core.csproj", "{BF35190D-B2A7-4CFA-B397-51CB384CF0D7}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Greenshot.Core", "Greenshot.Core\Greenshot.Core.csproj", "{BF35190D-B2A7-4CFA-B397-51CB384CF0D7}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Greenshot.Addon.InternetExplorer", "Greenshot.Addon.InternetExplorer\Greenshot.Addon.InternetExplorer.csproj", "{4CCA2717-B8A4-44F7-965B-5687107E4921}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Greenshot.Addon.InternetExplorer", "Greenshot.Addon.InternetExplorer\Greenshot.Addon.InternetExplorer.csproj", "{4CCA2717-B8A4-44F7-965B-5687107E4921}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -63,98 +63,110 @@ Global GlobalSection(ProjectConfigurationPlatforms) = postSolution {CD642BF4-D815-4D67-A0B5-C69F0B8231AF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CD642BF4-D815-4D67-A0B5-C69F0B8231AF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CD642BF4-D815-4D67-A0B5-C69F0B8231AF}.Debug|x86.ActiveCfg = Debug|x86 - {CD642BF4-D815-4D67-A0B5-C69F0B8231AF}.Debug|x86.Build.0 = Debug|x86 + {CD642BF4-D815-4D67-A0B5-C69F0B8231AF}.Debug|x86.ActiveCfg = Debug|Any CPU + {CD642BF4-D815-4D67-A0B5-C69F0B8231AF}.Debug|x86.Build.0 = Debug|Any CPU {CD642BF4-D815-4D67-A0B5-C69F0B8231AF}.Release|Any CPU.ActiveCfg = Release|Any CPU {CD642BF4-D815-4D67-A0B5-C69F0B8231AF}.Release|Any CPU.Build.0 = Release|Any CPU - {CD642BF4-D815-4D67-A0B5-C69F0B8231AF}.Release|x86.ActiveCfg = Release|x86 + {CD642BF4-D815-4D67-A0B5-C69F0B8231AF}.Release|x86.ActiveCfg = Release|Any CPU + {CD642BF4-D815-4D67-A0B5-C69F0B8231AF}.Release|x86.Build.0 = Release|Any CPU {5B924697-4DCD-4F98-85F1-105CB84B7341}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5B924697-4DCD-4F98-85F1-105CB84B7341}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5B924697-4DCD-4F98-85F1-105CB84B7341}.Debug|x86.ActiveCfg = Debug|x86 - {5B924697-4DCD-4F98-85F1-105CB84B7341}.Debug|x86.Build.0 = Debug|x86 + {5B924697-4DCD-4F98-85F1-105CB84B7341}.Debug|x86.ActiveCfg = Debug|Any CPU + {5B924697-4DCD-4F98-85F1-105CB84B7341}.Debug|x86.Build.0 = Debug|Any CPU {5B924697-4DCD-4F98-85F1-105CB84B7341}.Release|Any CPU.ActiveCfg = Release|Any CPU {5B924697-4DCD-4F98-85F1-105CB84B7341}.Release|Any CPU.Build.0 = Release|Any CPU - {5B924697-4DCD-4F98-85F1-105CB84B7341}.Release|x86.ActiveCfg = Release|x86 + {5B924697-4DCD-4F98-85F1-105CB84B7341}.Release|x86.ActiveCfg = Release|Any CPU + {5B924697-4DCD-4F98-85F1-105CB84B7341}.Release|x86.Build.0 = Release|Any CPU {47F23C86-604E-4CC3-8767-B3D4088F30BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {47F23C86-604E-4CC3-8767-B3D4088F30BB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {47F23C86-604E-4CC3-8767-B3D4088F30BB}.Debug|x86.ActiveCfg = Debug|x86 - {47F23C86-604E-4CC3-8767-B3D4088F30BB}.Debug|x86.Build.0 = Debug|x86 + {47F23C86-604E-4CC3-8767-B3D4088F30BB}.Debug|x86.ActiveCfg = Debug|Any CPU + {47F23C86-604E-4CC3-8767-B3D4088F30BB}.Debug|x86.Build.0 = Debug|Any CPU {47F23C86-604E-4CC3-8767-B3D4088F30BB}.Release|Any CPU.ActiveCfg = Release|Any CPU {47F23C86-604E-4CC3-8767-B3D4088F30BB}.Release|Any CPU.Build.0 = Release|Any CPU - {47F23C86-604E-4CC3-8767-B3D4088F30BB}.Release|x86.ActiveCfg = Release|x86 + {47F23C86-604E-4CC3-8767-B3D4088F30BB}.Release|x86.ActiveCfg = Release|Any CPU + {47F23C86-604E-4CC3-8767-B3D4088F30BB}.Release|x86.Build.0 = Release|Any CPU {C3052651-598A-44E2-AAB3-2E41311D50F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C3052651-598A-44E2-AAB3-2E41311D50F9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C3052651-598A-44E2-AAB3-2E41311D50F9}.Debug|x86.ActiveCfg = Debug|x86 - {C3052651-598A-44E2-AAB3-2E41311D50F9}.Debug|x86.Build.0 = Debug|x86 + {C3052651-598A-44E2-AAB3-2E41311D50F9}.Debug|x86.ActiveCfg = Debug|Any CPU + {C3052651-598A-44E2-AAB3-2E41311D50F9}.Debug|x86.Build.0 = Debug|Any CPU {C3052651-598A-44E2-AAB3-2E41311D50F9}.Release|Any CPU.ActiveCfg = Release|Any CPU {C3052651-598A-44E2-AAB3-2E41311D50F9}.Release|Any CPU.Build.0 = Release|Any CPU - {C3052651-598A-44E2-AAB3-2E41311D50F9}.Release|x86.ActiveCfg = Release|x86 + {C3052651-598A-44E2-AAB3-2E41311D50F9}.Release|x86.ActiveCfg = Release|Any CPU + {C3052651-598A-44E2-AAB3-2E41311D50F9}.Release|x86.Build.0 = Release|Any CPU {80D8DEB9-94E3-4876-8CCA-2DF1ED5F2C50}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {80D8DEB9-94E3-4876-8CCA-2DF1ED5F2C50}.Debug|Any CPU.Build.0 = Debug|Any CPU - {80D8DEB9-94E3-4876-8CCA-2DF1ED5F2C50}.Debug|x86.ActiveCfg = Debug|x86 - {80D8DEB9-94E3-4876-8CCA-2DF1ED5F2C50}.Debug|x86.Build.0 = Debug|x86 + {80D8DEB9-94E3-4876-8CCA-2DF1ED5F2C50}.Debug|x86.ActiveCfg = Debug|Any CPU + {80D8DEB9-94E3-4876-8CCA-2DF1ED5F2C50}.Debug|x86.Build.0 = Debug|Any CPU {80D8DEB9-94E3-4876-8CCA-2DF1ED5F2C50}.Release|Any CPU.ActiveCfg = Release|Any CPU {80D8DEB9-94E3-4876-8CCA-2DF1ED5F2C50}.Release|Any CPU.Build.0 = Release|Any CPU - {80D8DEB9-94E3-4876-8CCA-2DF1ED5F2C50}.Release|x86.ActiveCfg = Release|x86 + {80D8DEB9-94E3-4876-8CCA-2DF1ED5F2C50}.Release|x86.ActiveCfg = Release|Any CPU + {80D8DEB9-94E3-4876-8CCA-2DF1ED5F2C50}.Release|x86.Build.0 = Release|Any CPU {19FEEF09-313F-43C7-819D-F1BCA782B08B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {19FEEF09-313F-43C7-819D-F1BCA782B08B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {19FEEF09-313F-43C7-819D-F1BCA782B08B}.Debug|x86.ActiveCfg = Debug|x86 - {19FEEF09-313F-43C7-819D-F1BCA782B08B}.Debug|x86.Build.0 = Debug|x86 + {19FEEF09-313F-43C7-819D-F1BCA782B08B}.Debug|x86.ActiveCfg = Debug|Any CPU + {19FEEF09-313F-43C7-819D-F1BCA782B08B}.Debug|x86.Build.0 = Debug|Any CPU {19FEEF09-313F-43C7-819D-F1BCA782B08B}.Release|Any CPU.ActiveCfg = Release|Any CPU {19FEEF09-313F-43C7-819D-F1BCA782B08B}.Release|Any CPU.Build.0 = Release|Any CPU - {19FEEF09-313F-43C7-819D-F1BCA782B08B}.Release|x86.ActiveCfg = Release|x86 + {19FEEF09-313F-43C7-819D-F1BCA782B08B}.Release|x86.ActiveCfg = Release|Any CPU + {19FEEF09-313F-43C7-819D-F1BCA782B08B}.Release|x86.Build.0 = Release|Any CPU {C6988EE8-2FEE-4349-9F09-F9628A0D8965}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C6988EE8-2FEE-4349-9F09-F9628A0D8965}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C6988EE8-2FEE-4349-9F09-F9628A0D8965}.Debug|x86.ActiveCfg = Debug|x86 - {C6988EE8-2FEE-4349-9F09-F9628A0D8965}.Debug|x86.Build.0 = Debug|x86 + {C6988EE8-2FEE-4349-9F09-F9628A0D8965}.Debug|x86.ActiveCfg = Debug|Any CPU + {C6988EE8-2FEE-4349-9F09-F9628A0D8965}.Debug|x86.Build.0 = Debug|Any CPU {C6988EE8-2FEE-4349-9F09-F9628A0D8965}.Release|Any CPU.ActiveCfg = Release|Any CPU {C6988EE8-2FEE-4349-9F09-F9628A0D8965}.Release|Any CPU.Build.0 = Release|Any CPU - {C6988EE8-2FEE-4349-9F09-F9628A0D8965}.Release|x86.ActiveCfg = Release|x86 + {C6988EE8-2FEE-4349-9F09-F9628A0D8965}.Release|x86.ActiveCfg = Release|Any CPU + {C6988EE8-2FEE-4349-9F09-F9628A0D8965}.Release|x86.Build.0 = Release|Any CPU {697CF066-9077-4F22-99D9-D989CCE7282B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {697CF066-9077-4F22-99D9-D989CCE7282B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {697CF066-9077-4F22-99D9-D989CCE7282B}.Debug|x86.ActiveCfg = Debug|x86 - {697CF066-9077-4F22-99D9-D989CCE7282B}.Debug|x86.Build.0 = Debug|x86 + {697CF066-9077-4F22-99D9-D989CCE7282B}.Debug|x86.ActiveCfg = Debug|Any CPU + {697CF066-9077-4F22-99D9-D989CCE7282B}.Debug|x86.Build.0 = Debug|Any CPU {697CF066-9077-4F22-99D9-D989CCE7282B}.Release|Any CPU.ActiveCfg = Release|Any CPU {697CF066-9077-4F22-99D9-D989CCE7282B}.Release|Any CPU.Build.0 = Release|Any CPU - {697CF066-9077-4F22-99D9-D989CCE7282B}.Release|x86.ActiveCfg = Release|x86 + {697CF066-9077-4F22-99D9-D989CCE7282B}.Release|x86.ActiveCfg = Release|Any CPU + {697CF066-9077-4F22-99D9-D989CCE7282B}.Release|x86.Build.0 = Release|Any CPU {AD7CFFE2-40E7-46CF-A172-D48CF7AE9A12}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AD7CFFE2-40E7-46CF-A172-D48CF7AE9A12}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AD7CFFE2-40E7-46CF-A172-D48CF7AE9A12}.Debug|x86.ActiveCfg = Debug|x86 - {AD7CFFE2-40E7-46CF-A172-D48CF7AE9A12}.Debug|x86.Build.0 = Debug|x86 + {AD7CFFE2-40E7-46CF-A172-D48CF7AE9A12}.Debug|x86.ActiveCfg = Debug|Any CPU + {AD7CFFE2-40E7-46CF-A172-D48CF7AE9A12}.Debug|x86.Build.0 = Debug|Any CPU {AD7CFFE2-40E7-46CF-A172-D48CF7AE9A12}.Release|Any CPU.ActiveCfg = Release|Any CPU {AD7CFFE2-40E7-46CF-A172-D48CF7AE9A12}.Release|Any CPU.Build.0 = Release|Any CPU - {AD7CFFE2-40E7-46CF-A172-D48CF7AE9A12}.Release|x86.ActiveCfg = Release|x86 + {AD7CFFE2-40E7-46CF-A172-D48CF7AE9A12}.Release|x86.ActiveCfg = Release|Any CPU + {AD7CFFE2-40E7-46CF-A172-D48CF7AE9A12}.Release|x86.Build.0 = Release|Any CPU {7EC72A5A-D73A-4B4B-9CA1-2216C7D92D5E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7EC72A5A-D73A-4B4B-9CA1-2216C7D92D5E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7EC72A5A-D73A-4B4B-9CA1-2216C7D92D5E}.Debug|x86.ActiveCfg = Debug|x86 - {7EC72A5A-D73A-4B4B-9CA1-2216C7D92D5E}.Debug|x86.Build.0 = Debug|x86 + {7EC72A5A-D73A-4B4B-9CA1-2216C7D92D5E}.Debug|x86.ActiveCfg = Debug|Any CPU + {7EC72A5A-D73A-4B4B-9CA1-2216C7D92D5E}.Debug|x86.Build.0 = Debug|Any CPU {7EC72A5A-D73A-4B4B-9CA1-2216C7D92D5E}.Release|Any CPU.ActiveCfg = Release|Any CPU {7EC72A5A-D73A-4B4B-9CA1-2216C7D92D5E}.Release|Any CPU.Build.0 = Release|Any CPU - {7EC72A5A-D73A-4B4B-9CA1-2216C7D92D5E}.Release|x86.ActiveCfg = Release|x86 + {7EC72A5A-D73A-4B4B-9CA1-2216C7D92D5E}.Release|x86.ActiveCfg = Release|Any CPU + {7EC72A5A-D73A-4B4B-9CA1-2216C7D92D5E}.Release|x86.Build.0 = Release|Any CPU {1893A2E4-A78A-4713-A8E7-E70058DABEE0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1893A2E4-A78A-4713-A8E7-E70058DABEE0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1893A2E4-A78A-4713-A8E7-E70058DABEE0}.Debug|x86.ActiveCfg = Debug|x86 - {1893A2E4-A78A-4713-A8E7-E70058DABEE0}.Debug|x86.Build.0 = Debug|x86 + {1893A2E4-A78A-4713-A8E7-E70058DABEE0}.Debug|x86.ActiveCfg = Debug|Any CPU + {1893A2E4-A78A-4713-A8E7-E70058DABEE0}.Debug|x86.Build.0 = Debug|Any CPU {1893A2E4-A78A-4713-A8E7-E70058DABEE0}.Release|Any CPU.ActiveCfg = Release|Any CPU {1893A2E4-A78A-4713-A8E7-E70058DABEE0}.Release|Any CPU.Build.0 = Release|Any CPU - {1893A2E4-A78A-4713-A8E7-E70058DABEE0}.Release|x86.ActiveCfg = Release|x86 + {1893A2E4-A78A-4713-A8E7-E70058DABEE0}.Release|x86.ActiveCfg = Release|Any CPU + {1893A2E4-A78A-4713-A8E7-E70058DABEE0}.Release|x86.Build.0 = Release|Any CPU {92599C09-FF29-4ABD-B6E6-C48ECD781BAB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {92599C09-FF29-4ABD-B6E6-C48ECD781BAB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {92599C09-FF29-4ABD-B6E6-C48ECD781BAB}.Debug|x86.ActiveCfg = Debug|x86 - {92599C09-FF29-4ABD-B6E6-C48ECD781BAB}.Debug|x86.Build.0 = Debug|x86 + {92599C09-FF29-4ABD-B6E6-C48ECD781BAB}.Debug|x86.ActiveCfg = Debug|Any CPU + {92599C09-FF29-4ABD-B6E6-C48ECD781BAB}.Debug|x86.Build.0 = Debug|Any CPU {92599C09-FF29-4ABD-B6E6-C48ECD781BAB}.Release|Any CPU.ActiveCfg = Release|Any CPU {92599C09-FF29-4ABD-B6E6-C48ECD781BAB}.Release|Any CPU.Build.0 = Release|Any CPU - {92599C09-FF29-4ABD-B6E6-C48ECD781BAB}.Release|x86.ActiveCfg = Release|x86 - {92599C09-FF29-4ABD-B6E6-C48ECD781BAB}.Release|x86.Build.0 = Release|x86 + {92599C09-FF29-4ABD-B6E6-C48ECD781BAB}.Release|x86.ActiveCfg = Release|Any CPU + {92599C09-FF29-4ABD-B6E6-C48ECD781BAB}.Release|x86.Build.0 = Release|Any CPU {9C0ECC4C-7807-4111-916A-4F57BB29788A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9C0ECC4C-7807-4111-916A-4F57BB29788A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9C0ECC4C-7807-4111-916A-4F57BB29788A}.Debug|x86.ActiveCfg = Debug|x86 - {9C0ECC4C-7807-4111-916A-4F57BB29788A}.Debug|x86.Build.0 = Debug|x86 + {9C0ECC4C-7807-4111-916A-4F57BB29788A}.Debug|x86.ActiveCfg = Debug|Any CPU + {9C0ECC4C-7807-4111-916A-4F57BB29788A}.Debug|x86.Build.0 = Debug|Any CPU {9C0ECC4C-7807-4111-916A-4F57BB29788A}.Release|Any CPU.ActiveCfg = Release|Any CPU {9C0ECC4C-7807-4111-916A-4F57BB29788A}.Release|Any CPU.Build.0 = Release|Any CPU - {9C0ECC4C-7807-4111-916A-4F57BB29788A}.Release|x86.ActiveCfg = Release|x86 - {9C0ECC4C-7807-4111-916A-4F57BB29788A}.Release|x86.Build.0 = Release|x86 + {9C0ECC4C-7807-4111-916A-4F57BB29788A}.Release|x86.ActiveCfg = Release|Any CPU + {9C0ECC4C-7807-4111-916A-4F57BB29788A}.Release|x86.Build.0 = Release|Any CPU {9801F62C-540F-4BFE-9211-6405DEDE563B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9801F62C-540F-4BFE-9211-6405DEDE563B}.Debug|Any CPU.Build.0 = Debug|Any CPU {9801F62C-540F-4BFE-9211-6405DEDE563B}.Debug|x86.ActiveCfg = Debug|Any CPU {9801F62C-540F-4BFE-9211-6405DEDE563B}.Debug|x86.Build.0 = Debug|Any CPU {9801F62C-540F-4BFE-9211-6405DEDE563B}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -162,12 +174,12 @@ Global {9801F62C-540F-4BFE-9211-6405DEDE563B}.Release|x86.Build.0 = Release|Any CPU {D106F86C-CD3D-44FF-B151-2A5D47268B5C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D106F86C-CD3D-44FF-B151-2A5D47268B5C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D106F86C-CD3D-44FF-B151-2A5D47268B5C}.Debug|x86.ActiveCfg = Debug|x86 - {D106F86C-CD3D-44FF-B151-2A5D47268B5C}.Debug|x86.Build.0 = Debug|x86 + {D106F86C-CD3D-44FF-B151-2A5D47268B5C}.Debug|x86.ActiveCfg = Debug|Any CPU + {D106F86C-CD3D-44FF-B151-2A5D47268B5C}.Debug|x86.Build.0 = Debug|Any CPU {D106F86C-CD3D-44FF-B151-2A5D47268B5C}.Release|Any CPU.ActiveCfg = Release|Any CPU {D106F86C-CD3D-44FF-B151-2A5D47268B5C}.Release|Any CPU.Build.0 = Release|Any CPU - {D106F86C-CD3D-44FF-B151-2A5D47268B5C}.Release|x86.ActiveCfg = Release|x86 - {D106F86C-CD3D-44FF-B151-2A5D47268B5C}.Release|x86.Build.0 = Release|x86 + {D106F86C-CD3D-44FF-B151-2A5D47268B5C}.Release|x86.ActiveCfg = Release|Any CPU + {D106F86C-CD3D-44FF-B151-2A5D47268B5C}.Release|x86.Build.0 = Release|Any CPU {F041C685-EB96-4ED1-9ACE-0F5BD836610F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F041C685-EB96-4ED1-9ACE-0F5BD836610F}.Debug|Any CPU.Build.0 = Debug|Any CPU {F041C685-EB96-4ED1-9ACE-0F5BD836610F}.Debug|x86.ActiveCfg = Debug|Any CPU @@ -210,20 +222,20 @@ Global {14894A45-AA2C-4BC3-85A3-E388D0BDC1CA}.Release|x86.Build.0 = Release|Any CPU {B35272D3-4631-4FA5-9A3E-85D70ECA9A8D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B35272D3-4631-4FA5-9A3E-85D70ECA9A8D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B35272D3-4631-4FA5-9A3E-85D70ECA9A8D}.Debug|x86.ActiveCfg = Debug|x86 - {B35272D3-4631-4FA5-9A3E-85D70ECA9A8D}.Debug|x86.Build.0 = Debug|x86 + {B35272D3-4631-4FA5-9A3E-85D70ECA9A8D}.Debug|x86.ActiveCfg = Debug|Any CPU + {B35272D3-4631-4FA5-9A3E-85D70ECA9A8D}.Debug|x86.Build.0 = Debug|Any CPU {B35272D3-4631-4FA5-9A3E-85D70ECA9A8D}.Release|Any CPU.ActiveCfg = Release|Any CPU {B35272D3-4631-4FA5-9A3E-85D70ECA9A8D}.Release|Any CPU.Build.0 = Release|Any CPU - {B35272D3-4631-4FA5-9A3E-85D70ECA9A8D}.Release|x86.ActiveCfg = Release|x86 - {B35272D3-4631-4FA5-9A3E-85D70ECA9A8D}.Release|x86.Build.0 = Release|x86 + {B35272D3-4631-4FA5-9A3E-85D70ECA9A8D}.Release|x86.ActiveCfg = Release|Any CPU + {B35272D3-4631-4FA5-9A3E-85D70ECA9A8D}.Release|x86.Build.0 = Release|Any CPU {8B3643A5-AFED-49FF-8D66-6348FB102EB2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8B3643A5-AFED-49FF-8D66-6348FB102EB2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8B3643A5-AFED-49FF-8D66-6348FB102EB2}.Debug|x86.ActiveCfg = Debug|x86 - {8B3643A5-AFED-49FF-8D66-6348FB102EB2}.Debug|x86.Build.0 = Debug|x86 + {8B3643A5-AFED-49FF-8D66-6348FB102EB2}.Debug|x86.ActiveCfg = Debug|Any CPU + {8B3643A5-AFED-49FF-8D66-6348FB102EB2}.Debug|x86.Build.0 = Debug|Any CPU {8B3643A5-AFED-49FF-8D66-6348FB102EB2}.Release|Any CPU.ActiveCfg = Release|Any CPU {8B3643A5-AFED-49FF-8D66-6348FB102EB2}.Release|Any CPU.Build.0 = Release|Any CPU - {8B3643A5-AFED-49FF-8D66-6348FB102EB2}.Release|x86.ActiveCfg = Release|x86 - {8B3643A5-AFED-49FF-8D66-6348FB102EB2}.Release|x86.Build.0 = Release|x86 + {8B3643A5-AFED-49FF-8D66-6348FB102EB2}.Release|x86.ActiveCfg = Release|Any CPU + {8B3643A5-AFED-49FF-8D66-6348FB102EB2}.Release|x86.Build.0 = Release|Any CPU {7B8E9055-A054-4290-B537-075EBFDF8BDF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7B8E9055-A054-4290-B537-075EBFDF8BDF}.Debug|Any CPU.Build.0 = Debug|Any CPU {7B8E9055-A054-4290-B537-075EBFDF8BDF}.Debug|x86.ActiveCfg = Debug|Any CPU diff --git a/src/Greenshot/App.config b/src/Greenshot/App.config index 66aa08b87..1345cf5df 100644 --- a/src/Greenshot/App.config +++ b/src/Greenshot/App.config @@ -10,34 +10,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/Greenshot/Components/CommandlineParser.cs b/src/Greenshot/Components/CommandlineParser.cs index 7ca035a6f..be13ecd2d 100644 --- a/src/Greenshot/Components/CommandlineParser.cs +++ b/src/Greenshot/Components/CommandlineParser.cs @@ -127,7 +127,7 @@ namespace Greenshot.Components { Log.Info().WriteLine("Sending all instances the exit command."); // Pass Exit to running instance, if any - GreenshotClient.Exit(); + //GreenshotClient.Exit(); } catch (Exception e) { @@ -146,7 +146,7 @@ namespace Greenshot.Components try { // Update running instances - GreenshotClient.ReloadConfig(); + //GreenshotClient.ReloadConfig(); } catch (Exception ex) { @@ -253,7 +253,7 @@ namespace Greenshot.Components } else { - GreenshotClient.Capture(arguments[1]); + //GreenshotClient.Capture(arguments[1]); } // TODO: //FreeMutex(); @@ -269,7 +269,7 @@ namespace Greenshot.Components // We didn't initialize the language yet, do it here just for the message box if (filesToOpen.Count > 0) { - GreenshotClient.OpenFiles(filesToOpen); + //GreenshotClient.OpenFiles(filesToOpen); } else { diff --git a/src/Greenshot/Components/GreenshotClient.cs b/src/Greenshot/Components/GreenshotClient.cs index da6ce4ad8..d154a93de 100644 --- a/src/Greenshot/Components/GreenshotClient.cs +++ b/src/Greenshot/Components/GreenshotClient.cs @@ -21,6 +21,8 @@ #endregion +#if !NETCOREAPP3_0 + using System.Collections.Generic; using System.ServiceModel; using Greenshot.Addons.Interfaces; @@ -78,3 +80,4 @@ namespace Greenshot.Components } } } +#endif \ No newline at end of file diff --git a/src/Greenshot/Components/GreenshotServer.cs b/src/Greenshot/Components/GreenshotServer.cs index 3bcdb6ca4..214ba25fe 100644 --- a/src/Greenshot/Components/GreenshotServer.cs +++ b/src/Greenshot/Components/GreenshotServer.cs @@ -21,6 +21,8 @@ #endregion +#if !NETCOREAPP3_0 + #region Usings using System; @@ -32,7 +34,6 @@ using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using Dapplo.Addons; -using Dapplo.Ini; using Dapplo.Log; using Greenshot.Addons.Components; using Greenshot.Addons.Core; @@ -102,7 +103,7 @@ namespace Greenshot.Components return Task.Factory.FromAsync((callback, stateObject) => _host.BeginClose(callback, stateObject), asyncResult => _host.EndClose(asyncResult), null); } - #region IGreenshotContract +#region IGreenshotContract /// public void Exit() @@ -116,7 +117,8 @@ namespace Greenshot.Components Log.Info().WriteLine("Reload requested"); try { - IniConfig.Current?.ReloadAsync().Wait(); + // TODO: Fix + //IniConfig.Current?.ReloadAsync().Wait(); _mainForm.Invoke((MethodInvoker)(() => { // Even update language when needed, this should be done automatically :) @@ -178,6 +180,7 @@ namespace Greenshot.Components break; } } - #endregion +#endregion } } +#endif \ No newline at end of file diff --git a/src/Greenshot/Components/HotkeyHandler.cs b/src/Greenshot/Components/HotkeyHandler.cs index 9edeb2896..c6fc90e43 100644 --- a/src/Greenshot/Components/HotkeyHandler.cs +++ b/src/Greenshot/Components/HotkeyHandler.cs @@ -51,7 +51,7 @@ namespace Greenshot.Components /// string with the property of the ICoreConfiguration to use public HotKeyHandler(ICoreConfiguration coreConfiguration, string propertyName) { - string RetrieveFunc() => coreConfiguration[propertyName].Value as string; + string RetrieveFunc() => coreConfiguration.GetIniValue(propertyName).Value as string; _propertyChangeSubscription = coreConfiguration .OnPropertyChanged(propertyName) .Subscribe(pc => UpdateKeyCombination(RetrieveFunc)); diff --git a/src/Greenshot/Components/MainFormStartup.cs b/src/Greenshot/Components/MainFormStartup.cs index 895407e59..682e9a493 100644 --- a/src/Greenshot/Components/MainFormStartup.cs +++ b/src/Greenshot/Components/MainFormStartup.cs @@ -40,7 +40,7 @@ namespace Greenshot.Components /// /// This startup action starts the MainForm /// - [Service(nameof(MainFormStartup), nameof(FormsStartup), nameof(CaliburnServices.IniSectionService), TaskSchedulerName = "ui")] + [Service(nameof(MainFormStartup), nameof(FormsStartup), nameof(CaliburnServices.ConfigurationService), TaskSchedulerName = "ui")] public class MainFormStartup : IStartup, IShutdown { private static readonly LogSource Log = new LogSource(); diff --git a/src/Greenshot/Components/SoundHelper.cs b/src/Greenshot/Components/SoundHelper.cs index 93252ab56..6bcee30ea 100644 --- a/src/Greenshot/Components/SoundHelper.cs +++ b/src/Greenshot/Components/SoundHelper.cs @@ -25,14 +25,14 @@ using System; using System.IO; -using System.Reflection; -using System.Resources; using System.Runtime.InteropServices; using Dapplo.Addons; using Dapplo.CaliburnMicro; using Dapplo.Log; using Dapplo.Windows.Multimedia; +using Dapplo.Windows.Multimedia.Enums; using Greenshot.Addons.Core; +using Greenshot.Addons.Resources; #endregion @@ -42,7 +42,7 @@ namespace Greenshot.Components /// Create to fix the sometimes wrongly played sample, especially after first start from IDE /// See: http://www.codeproject.com/KB/audio-video/soundplayerbug.aspx?msg=2487569 /// - [Service(nameof(SoundHelper), nameof(CaliburnServices.IniSectionService))] + [Service(nameof(SoundHelper), nameof(CaliburnServices.ConfigurationService))] public class SoundHelper : IStartup, IShutdown { private readonly ICoreConfiguration _coreConfiguration; @@ -68,8 +68,7 @@ namespace Greenshot.Components try { - var resources = new ResourceManager("Greenshot.Sounds", Assembly.GetExecutingAssembly()); - _soundBuffer = (byte[]) resources.GetObject("camera"); + _soundBuffer = GreenshotResources.Instance.GetBytes("camera.wav", GetType()); if (_coreConfiguration.NotificationSound != null && _coreConfiguration.NotificationSound.EndsWith(".wav")) { diff --git a/src/Greenshot/Components/UpdateService.cs b/src/Greenshot/Components/UpdateService.cs index a35369e59..7055a1e72 100644 --- a/src/Greenshot/Components/UpdateService.cs +++ b/src/Greenshot/Components/UpdateService.cs @@ -97,9 +97,8 @@ namespace Greenshot.Components /// public void Startup() { - //var ignore = BackgroundTask(() => TimeSpan.FromDays(_coreConfiguration.UpdateCheckInterval), UpdateCheck, _cancellationTokenSource.Token); - var ignore = BackgroundTask(() => TimeSpan.FromSeconds(20), UpdateCheck, _cancellationTokenSource.Token); - } + var ignore = BackgroundTask(() => TimeSpan.FromDays(_coreConfiguration.UpdateCheckInterval), UpdateCheck, _cancellationTokenSource.Token); + } /// public void Shutdown() diff --git a/src/Greenshot/Configuration/IConfigTranslations.cs b/src/Greenshot/Configuration/IConfigTranslations.cs index c006ad943..869b381cc 100644 --- a/src/Greenshot/Configuration/IConfigTranslations.cs +++ b/src/Greenshot/Configuration/IConfigTranslations.cs @@ -22,12 +22,12 @@ #endregion using System.ComponentModel; -using Dapplo.Language; +using Dapplo.Config.Language; namespace Greenshot.Configuration { [Language("Config")] - public interface IConfigTranslations : Dapplo.CaliburnMicro.Translations.IConfigTranslations, ILanguage, INotifyPropertyChanged + public interface IConfigTranslations : Dapplo.CaliburnMicro.Translations.IConfigTranslations, ILanguage { [DefaultValue("Theme")] string Theme { get; } diff --git a/src/Greenshot/Configuration/IMetroConfiguration.cs b/src/Greenshot/Configuration/IMetroConfiguration.cs index 6f4d390e7..cea89ffdc 100644 --- a/src/Greenshot/Configuration/IMetroConfiguration.cs +++ b/src/Greenshot/Configuration/IMetroConfiguration.cs @@ -1,17 +1,40 @@ -using System.ComponentModel; +#region Greenshot GNU General Public License + +// Greenshot - a free and open source screenshot tool +// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom +// +// For more information see: http://getgreenshot.org/ +// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 1 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#endregion + +using System.ComponentModel; using Dapplo.CaliburnMicro.Metro; -using Dapplo.Ini; -using Dapplo.InterfaceImpl.Extensions; +using Dapplo.CaliburnMicro.Metro.Configuration; +using Dapplo.Config.Ini; namespace Greenshot.Configuration { [IniSection("Metro")] - public interface IMetroConfiguration : IIniSection, ITransactionalProperties + public interface IMetroConfiguration : IIniSection, IMetroUiConfiguration { - [DefaultValue(Themes.BaseLight)] - Themes Theme { get; set; } + [DefaultValue(Themes.Light)] + new Themes Theme { get; set; } - [DefaultValue(ThemeAccents.Orange)] - ThemeAccents ThemeAccent { get; set; } + [DefaultValue(ThemeAccents.Olive)] + new ThemeAccents ThemeAccent { get; set; } } } diff --git a/src/Greenshot/Configuration/Impl/ConfigTranslationsImpl.cs b/src/Greenshot/Configuration/Impl/ConfigTranslationsImpl.cs new file mode 100644 index 000000000..cad8fa563 --- /dev/null +++ b/src/Greenshot/Configuration/Impl/ConfigTranslationsImpl.cs @@ -0,0 +1,40 @@ +#region Greenshot GNU General Public License + +// Greenshot - a free and open source screenshot tool +// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom +// +// For more information see: http://getgreenshot.org/ +// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 1 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#endregion + +using System.Diagnostics.CodeAnalysis; +using Dapplo.Config.Language; + +namespace Greenshot.Configuration.Impl +{ + /// + /// This implements IConfigTranslations and takes care of storing, all setters are replaced via AutoProperties.Fody + /// + [SuppressMessage("ReSharper", "UnassignedGetOnlyAutoProperty")] +#pragma warning disable CS1591 + internal class ConfigTranslationsImpl : LanguageBase, IConfigTranslations + { + public string Filter { get; } + + public string Theme { get; } + } +} diff --git a/src/Greenshot/Configuration/Impl/MetroConfigurationImpl.cs b/src/Greenshot/Configuration/Impl/MetroConfigurationImpl.cs new file mode 100644 index 000000000..397f29203 --- /dev/null +++ b/src/Greenshot/Configuration/Impl/MetroConfigurationImpl.cs @@ -0,0 +1,34 @@ +#region Greenshot GNU General Public License + +// Greenshot - a free and open source screenshot tool +// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom +// +// For more information see: http://getgreenshot.org/ +// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 1 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#endregion + +using Dapplo.CaliburnMicro.Metro; +using Dapplo.Config.Ini; + +namespace Greenshot.Configuration.Impl +{ + internal class MetroConfigurationImpl : IniSectionBase, IMetroConfiguration + { + public Themes Theme { get; set; } + public ThemeAccents ThemeAccent { get; set; } + } +} diff --git a/src/Greenshot/Configuration/LanguageKeys.cs b/src/Greenshot/Configuration/LanguageKeys.cs deleted file mode 100644 index f39f51d8e..000000000 --- a/src/Greenshot/Configuration/LanguageKeys.cs +++ /dev/null @@ -1,65 +0,0 @@ -#region Greenshot GNU General Public License - -// Greenshot - a free and open source screenshot tool -// Copyright (C) 2007-2018 Thomas Braun, Jens Klingen, Robin Krom -// -// For more information see: http://getgreenshot.org/ -// The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 1 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -#endregion - -#region Usings - -using System.Diagnostics.CodeAnalysis; - -#endregion - -namespace Greenshot.Configuration -{ - [SuppressMessage("ReSharper", "InconsistentNaming")] - public enum LangKey - { - contextmenu_capturefullscreen_all, - contextmenu_capturefullscreen_left, - contextmenu_capturefullscreen_top, - contextmenu_capturefullscreen_right, - contextmenu_capturefullscreen_bottom, - contextmenu_captureie, - editor_clipboardfailed, - editor_email, - error, - error_openfile, - error_openlink, - print_error, - settings_destination, - settings_destination_fileas, - settings_destination_printer, - settings_filenamepattern, - settings_message_filenamepattern, - settings_printoptions, - settings_tooltip_filenamepattern, - settings_tooltip_language, - settings_tooltip_primaryimageformat, - settings_tooltip_storagelocation, - settings_visualization, - settings_window_capture_mode, - tooltip_firststart, - warning, - warning_hotkeys, - wait_ie_capture, - update_found - } -} \ No newline at end of file diff --git a/src/Greenshot/Destinations/ClipboardDestination.cs b/src/Greenshot/Destinations/ClipboardDestination.cs index fdc2eec07..6a24944b1 100644 --- a/src/Greenshot/Destinations/ClipboardDestination.cs +++ b/src/Greenshot/Destinations/ClipboardDestination.cs @@ -34,6 +34,7 @@ using Greenshot.Addons.Core.Enums; using Greenshot.Addons.Extensions; using Greenshot.Addons.Interfaces; using Greenshot.Addons.Interfaces.Plugin; +using Greenshot.Addons.Resources; using Greenshot.Core.Enums; #endregion @@ -61,7 +62,7 @@ namespace Greenshot.Destinations public override Keys EditorShortcutKeys => Keys.Control | Keys.Shift | Keys.C; - public override Bitmap DisplayIcon => GreenshotResources.GetBitmap("Clipboard.Image"); + public override Bitmap DisplayIcon => GreenshotResources.Instance.GetBitmap("Clipboard.Image"); protected override ExportInformation ExportCapture(bool manuallyInitiated, ISurface surface, ICaptureDetails captureDetails) { diff --git a/src/Greenshot/Destinations/EmailDestination.cs b/src/Greenshot/Destinations/EmailDestination.cs index c06590e21..947186107 100644 --- a/src/Greenshot/Destinations/EmailDestination.cs +++ b/src/Greenshot/Destinations/EmailDestination.cs @@ -30,6 +30,7 @@ using Greenshot.Addons; using Greenshot.Addons.Components; using Greenshot.Addons.Core; using Greenshot.Addons.Interfaces; +using Greenshot.Addons.Resources; using Greenshot.Helpers; #endregion @@ -43,7 +44,7 @@ namespace Greenshot.Destinations public class EmailDestination : AbstractDestination { private readonly ExportNotification _exportNotification; - private static readonly Bitmap MailIcon = GreenshotResources.GetBitmap("Email.Image"); + private static readonly Bitmap MailIcon = GreenshotResources.Instance.GetBitmap("Email.Image"); private static bool _isActiveFlag; private static string _mapiClient; diff --git a/src/Greenshot/Destinations/FileDestination.cs b/src/Greenshot/Destinations/FileDestination.cs index 970126d56..cb00fb2ad 100644 --- a/src/Greenshot/Destinations/FileDestination.cs +++ b/src/Greenshot/Destinations/FileDestination.cs @@ -34,6 +34,7 @@ using Greenshot.Addons.Controls; using Greenshot.Addons.Core; using Greenshot.Addons.Interfaces; using Greenshot.Addons.Interfaces.Plugin; +using Greenshot.Addons.Resources; #endregion @@ -60,7 +61,7 @@ namespace Greenshot.Destinations public override Keys EditorShortcutKeys => Keys.Control | Keys.S; - public override Bitmap DisplayIcon => GreenshotResources.GetBitmap("Save.Image"); + public override Bitmap DisplayIcon => GreenshotResources.Instance.GetBitmap("Save.Image"); protected override ExportInformation ExportCapture(bool manuallyInitiated, ISurface surface, ICaptureDetails captureDetails) { diff --git a/src/Greenshot/Destinations/FileWithDialogDestination.cs b/src/Greenshot/Destinations/FileWithDialogDestination.cs index 261fb3c2f..fb3cd81a1 100644 --- a/src/Greenshot/Destinations/FileWithDialogDestination.cs +++ b/src/Greenshot/Destinations/FileWithDialogDestination.cs @@ -29,6 +29,7 @@ using Greenshot.Addons; using Greenshot.Addons.Components; using Greenshot.Addons.Core; using Greenshot.Addons.Interfaces; +using Greenshot.Addons.Resources; #endregion @@ -57,7 +58,7 @@ namespace Greenshot.Destinations public override Keys EditorShortcutKeys => Keys.Control | Keys.Shift | Keys.S; - public override Bitmap DisplayIcon => GreenshotResources.GetBitmap("Save.Image"); + public override Bitmap DisplayIcon => GreenshotResources.Instance.GetBitmap("Save.Image"); protected override ExportInformation ExportCapture(bool manuallyInitiated, ISurface surface, ICaptureDetails captureDetails) { diff --git a/src/Greenshot/Destinations/PrinterDestination.cs b/src/Greenshot/Destinations/PrinterDestination.cs index 0efe4c392..e8eedf3eb 100644 --- a/src/Greenshot/Destinations/PrinterDestination.cs +++ b/src/Greenshot/Destinations/PrinterDestination.cs @@ -33,6 +33,7 @@ using Greenshot.Addons; using Greenshot.Addons.Components; using Greenshot.Addons.Core; using Greenshot.Addons.Interfaces; +using Greenshot.Addons.Resources; using Greenshot.Helpers; #endregion @@ -86,7 +87,7 @@ namespace Greenshot.Destinations public override Keys EditorShortcutKeys => Keys.Control | Keys.P; - public override Bitmap DisplayIcon => GreenshotResources.GetBitmap("Printer.Image"); + public override Bitmap DisplayIcon => GreenshotResources.Instance.GetBitmap("Printer.Image"); public override bool IsDynamic => true; diff --git a/src/Greenshot/FodyWeavers.xml b/src/Greenshot/FodyWeavers.xml index d099b051c..7f5a26669 100644 --- a/src/Greenshot/FodyWeavers.xml +++ b/src/Greenshot/FodyWeavers.xml @@ -1,4 +1,4 @@  - - + + \ No newline at end of file diff --git a/src/Greenshot/FodyWeavers.xsd b/src/Greenshot/FodyWeavers.xsd new file mode 100644 index 000000000..061979a03 --- /dev/null +++ b/src/Greenshot/FodyWeavers.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + 'true' to run assembly verification on the target assembly after all weavers have been finished. + + + + + A comma separated list of error codes that can be safely ignored in assembly verification. + + + + + \ No newline at end of file diff --git a/src/Greenshot/Forms/AboutForm.cs b/src/Greenshot/Forms/AboutForm.cs index 9afd4d488..f6ffe5d8e 100644 --- a/src/Greenshot/Forms/AboutForm.cs +++ b/src/Greenshot/Forms/AboutForm.cs @@ -33,7 +33,6 @@ using System.Security.Permissions; using System.Windows.Forms; using Dapplo.CaliburnMicro; using Greenshot.Helpers; -using Dapplo.Ini; using Dapplo.Log; using Dapplo.Windows.Common.Structs; using Greenshot.Addons; @@ -387,20 +386,21 @@ namespace Greenshot.Forms } */ break; - case Keys.I: - try - { - using (Process.Start("\"" + IniConfig.Current.IniLocation + "\"")) - { - // Ignore - } - } - catch (Exception) - { - MessageBox.Show("Couldn't open the greenshot.ini, it's located here: " + IniConfig.Current.IniLocation, "Error opening greeenshot.ini", MessageBoxButtons.OK, - MessageBoxIcon.Asterisk); - } - break; + // TODO: Open configuration location + // case Keys.I: + //try + //{ + // using (Process.Start("\"" + IniConfig.Current.IniLocation + "\"")) + // { + // // Ignore + // } + //} + //catch (Exception) + //{ + // MessageBox.Show("Couldn't open the greenshot.ini, it's located here: " + IniConfig.Current.IniLocation, "Error opening greeenshot.ini", MessageBoxButtons.OK, + // MessageBoxIcon.Asterisk); + //} + //break; default: return base.ProcessCmdKey(ref msg, keyData); } diff --git a/src/Greenshot/Forms/CaptureForm.cs b/src/Greenshot/Forms/CaptureForm.cs index 8a0a2929a..78224fa9d 100644 --- a/src/Greenshot/Forms/CaptureForm.cs +++ b/src/Greenshot/Forms/CaptureForm.cs @@ -44,6 +44,7 @@ using Greenshot.Addons.Animation; using Greenshot.Addons.Controls; using Greenshot.Addons.Core; using Greenshot.Addons.Interfaces; +using Greenshot.Addons.Resources; using Greenshot.Gfx.Legacy; #endregion @@ -60,7 +61,6 @@ namespace Greenshot.Forms private static readonly Brush ScrollingOverlayBrush = new SolidBrush(Color.FromArgb(50, Color.GreenYellow)); private static readonly Pen OverlayPen = new Pen(Color.FromArgb(50, Color.Black)); - private readonly ICoreConfiguration _coreConfiguration; private static readonly Brush BackgroundBrush; private readonly ICapture _capture; private readonly bool _isZoomerTransparent; @@ -85,7 +85,7 @@ namespace Greenshot.Forms /// static CaptureForm() { - var backgroundForTransparency = GreenshotResources.GetBitmap("Checkerboard.Image"); + var backgroundForTransparency = GreenshotResources.Instance.GetBitmap("Checkerboard.Image"); BackgroundBrush = new TextureBrush(backgroundForTransparency, WrapMode.Tile); } @@ -97,7 +97,6 @@ namespace Greenshot.Forms /// IList of IInteropWindow public CaptureForm(ICoreConfiguration coreConfiguration, ICapture capture, IList windows) : base(coreConfiguration, null) { - _coreConfiguration = coreConfiguration; _isZoomerTransparent = _coreConfiguration.ZoomerOpacity < 1; ManualLanguageApply = true; ManualStoreFields = true; diff --git a/src/Greenshot/Forms/ColorPickerToolStripButton.cs b/src/Greenshot/Forms/ColorPickerToolStripButton.cs deleted file mode 100644 index f1160bd43..000000000 --- a/src/Greenshot/Forms/ColorPickerToolStripButton.cs +++ /dev/null @@ -1,78 +0,0 @@ -using System; -using System.Drawing; -using System.Drawing.Imaging; -using System.Windows.Forms; -using System.Diagnostics; - -namespace GreenShot -{ - public delegate void ColorPickerEventHandler(object o, ColorPickerEventArgs e); - - public class ColorPickerToolStripButton : System.Windows.Forms.ToolStripButton - { - private Color color; - public Point Offset = new Point(0,0); - public event ColorPickerEventHandler ColorPicked; - private ColorDialog cd; - - - public ColorPickerToolStripButton() - { - cd = ColorDialog.GetInstance(); - this.Click += new System.EventHandler(this.ToolStripButton1Click); - } - - public Color Color { - set {color = value;this.Invalidate();} - get {return color;} - } - - protected override void OnPaint (PaintEventArgs e) { - base.OnPaint(e); - if(color != null) { - // replace transparent color with selected color - Graphics g = e.Graphics; - //Graphics g = Graphics.FromImage(Image); - ColorMap[] colorMap = new ColorMap[1]; - colorMap[0] = new ColorMap(); - colorMap[0].OldColor = Color.Magenta;//this.ImageTransparentColor; - colorMap[0].NewColor = color; - ImageAttributes attr = new ImageAttributes(); - attr.SetRemapTable(colorMap); - Rectangle rect = new Rectangle(0, 0, Image.Width, Image.Height); - // todo find a way to retrieve transparency offset automatically - // for now, we use the public variable Offset to define this manually - rect.Offset(Offset.X,Offset.Y); - //Image. - Debug.WriteLine("paint!"+this.Text+": "+color); - //ssif(color.Equals(Color.Transparent)) ((Bitmap)Image).MakeTransparent(Color.Magenta); - g.DrawImage(Image, rect, 0, 0, rect.Width, rect.Height, GraphicsUnit.Pixel, attr); - //this.Image.In - - } - } - - void ToolStripButton1Click(object sender, System.EventArgs e) - { - cd.ShowDialog(this.Owner); - Color = cd.Color; - if(ColorPicked != null) { - ColorPicked(this, new ColorPickerEventArgs(Color, cd.RecentColors)); - } - } - } - - public class ColorPickerEventArgs : System.EventArgs { - public Color Color; - public Color[] RecentColors; - public ColorPickerEventArgs(Color color, Color[] recentColors) { - Color = color; - RecentColors = recentColors; - } - - } - - - - -} diff --git a/src/Greenshot/Forms/LanguageDialog.Designer.cs b/src/Greenshot/Forms/LanguageDialog.Designer.cs index c179cb7fa..3af037d55 100644 --- a/src/Greenshot/Forms/LanguageDialog.Designer.cs +++ b/src/Greenshot/Forms/LanguageDialog.Designer.cs @@ -46,7 +46,6 @@ namespace Greenshot.Forms { /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LanguageDialog)); this.comboBoxLanguage = new System.Windows.Forms.ComboBox(); this.btnOK = new System.Windows.Forms.Button(); this.SuspendLayout(); diff --git a/src/Greenshot/Forms/LanguageDialog.cs b/src/Greenshot/Forms/LanguageDialog.cs index 5898bab27..99434c97f 100644 --- a/src/Greenshot/Forms/LanguageDialog.cs +++ b/src/Greenshot/Forms/LanguageDialog.cs @@ -27,9 +27,9 @@ using System; using System.Linq; using System.Threading; using System.Windows.Forms; -using Dapplo.Language; using Dapplo.Log; using Greenshot.Addons.Core; +using Greenshot.Addons.Resources; #endregion @@ -49,7 +49,7 @@ namespace Greenshot.Forms // The InitializeComponent() call is required for Windows Forms designer support. // InitializeComponent(); - Icon = GreenshotResources.GetGreenshotIcon(); + Icon = GreenshotResources.Instance.GetGreenshotIcon(); Load += FormLoad; FormClosing += PreventFormClose; } @@ -70,11 +70,12 @@ namespace Greenshot.Forms comboBoxLanguage.DisplayMember = "Value"; comboBoxLanguage.ValueMember = "Key"; - // Set datasource last to prevent problems - // See: http://www.codeproject.com/KB/database/scomlistcontrolbinding.aspx?fid=111644 - comboBoxLanguage.DataSource = LanguageLoader.Current.AvailableLanguages.ToList(); + // Set datasource last to prevent problems + // See: http://www.codeproject.com/KB/database/scomlistcontrolbinding.aspx?fid=111644 + // TODO: Get languages + //comboBoxLanguage.DataSource = LanguageLoader.Current.AvailableLanguages.ToList(); - var currentLanguage = LanguageLoader.Current.CurrentLanguage; + var currentLanguage = "en-US"; // LanguageLoader.Current.CurrentLanguage; if (currentLanguage != null) { @@ -88,14 +89,14 @@ namespace Greenshot.Forms // Close again when there is only one language, this shows the form briefly! // But the use-case is not so interesting, only happens once, to invest a lot of time here. - if (LanguageLoader.Current.AvailableLanguages.Count != 1) + if (false) //LanguageLoader.Current.AvailableLanguages.Count != 1) { return; } - comboBoxLanguage.SelectedValue = LanguageLoader.Current.AvailableLanguages.Keys.FirstOrDefault(); - // TODO: Check - var ignoreTask = LanguageLoader.Current.ChangeLanguageAsync(SelectedLanguage); + comboBoxLanguage.SelectedValue = "en-US"; // LanguageLoader.Current.AvailableLanguages.Keys.FirstOrDefault(); + // TODO: Change language + //var ignoreTask = LanguageLoader.Current.ChangeLanguageAsync(SelectedLanguage); _properOkPressed = true; Close(); } @@ -104,7 +105,8 @@ namespace Greenshot.Forms { _properOkPressed = true; // Fix for Bug #3431100 - Language.CurrentLanguage = SelectedLanguage; + // TODO: Change language + //Language.CurrentLanguage = SelectedLanguage; Close(); } } diff --git a/src/Greenshot/Forms/MainForm.cs b/src/Greenshot/Forms/MainForm.cs index 06f525d34..5da89403b 100644 --- a/src/Greenshot/Forms/MainForm.cs +++ b/src/Greenshot/Forms/MainForm.cs @@ -34,7 +34,6 @@ using System.Reflection; using System.Windows.Forms; using Autofac.Features.OwnedInstances; using Caliburn.Micro; -using Dapplo.Ini; using Dapplo.Windows.Desktop; using Greenshot.Destinations; using Greenshot.Help; @@ -60,13 +59,16 @@ using Greenshot.Gfx; using Greenshot.Ui.Configuration.ViewModels; using Message = System.Windows.Forms.Message; using Screen = System.Windows.Forms.Screen; +using Dapplo.Config.Ini; +using Dapplo.Addons; +using Greenshot.Addons.Resources; #endregion namespace Greenshot.Forms { /// - /// Description of MainForm. + /// The MainForm provides the "shell" of the application /// public partial class MainForm : GreenshotForm { @@ -89,6 +91,7 @@ namespace Greenshot.Forms public MainForm(ICoreConfiguration coreConfiguration, IWindowManager windowManager, IGreenshotLanguage greenshotLanguage, + GreenshotResources greenshotResources, Func> configViewModelFactory, Func> aboutFormFactory, DestinationHolder destinationHolder) : base(greenshotLanguage) @@ -119,7 +122,8 @@ namespace Greenshot.Forms ex.Data.Add("more information here", "http://support.microsoft.com/kb/943140"); throw; } - notifyIcon.Icon = GreenshotResources.GetGreenshotIcon(); + + notifyIcon.Icon = GreenshotResources.Instance.GetGreenshotIcon(); // Disable access to the settings, for feature #3521446 contextmenu_settings.Visible = !_coreConfiguration.DisableSettings; @@ -367,7 +371,6 @@ namespace Greenshot.Forms } - /// /// Setup the Bitmap scaling (for icons) /// @@ -386,10 +389,10 @@ namespace Greenshot.Forms contextmenu_quicksettings.Size = new Size(170, width + 8); contextMenu.ResumeLayout(true); contextMenu.Refresh(); - notifyIcon.Icon = GreenshotResources.GetGreenshotIcon(); + notifyIcon.Icon = GreenshotResources.Instance.GetGreenshotIcon(); }); - var contextMenuResourceScaleHandler = BitmapScaleHandler.WithComponentResourceManager(ContextMenuDpiHandler, GetType(), (bitmap, dpi) => bitmap.ScaleIconForDisplaying(dpi)); + var contextMenuResourceScaleHandler = BitmapScaleHandler.Create(ContextMenuDpiHandler, (imageName, dpi) => GreenshotResources.Instance.GetBitmap(imageName, GetType()), (bitmap, dpi) => bitmap.ScaleIconForDisplaying(dpi)); contextMenuResourceScaleHandler.AddTarget(contextmenu_capturewindow, "contextmenu_capturewindow.Image"); contextMenuResourceScaleHandler.AddTarget(contextmenu_capturearea, "contextmenu_capturearea.Image"); @@ -512,8 +515,7 @@ namespace Greenshot.Forms now.Month == 3 && now.Day > 13 && now.Day < 21) { // birthday - var resources = new ComponentResourceManager(typeof(MainForm)); - contextmenu_donate.Image = (Image) resources.GetObject("contextmenu_present.Image"); + contextmenu_donate.Image = GreenshotResources.Instance.GetBitmap("contextmenu_present.Image", GetType()); } } @@ -923,6 +925,7 @@ namespace Greenshot.Forms contextmenu_quicksettings.DropDownItems.Add(selectList); } + var languageKeys = _greenshotLanguage.Keys().ToList(); if (!_coreConfiguration.IsWriteProtected("WindowCaptureMode")) { // Capture Modes @@ -933,7 +936,15 @@ namespace Greenshot.Forms var enumTypeName = typeof(WindowCaptureModes).Name; foreach (WindowCaptureModes captureMode in Enum.GetValues(typeof(WindowCaptureModes))) { - selectList.AddItem(Language.GetString(enumTypeName + "." + captureMode), captureMode, _coreConfiguration.WindowCaptureMode == captureMode); + var key = enumTypeName + "." + captureMode; + if (languageKeys.Contains(key)) + { + selectList.AddItem(_greenshotLanguage[key], captureMode, _coreConfiguration.WindowCaptureMode == captureMode); + } + else + { + Log.Warn().WriteLine("Missing translation for {0}", key); + } } selectList.CheckedChanged += QuickSettingCaptureModeChanged; contextmenu_quicksettings.DropDownItems.Add(selectList); @@ -947,7 +958,15 @@ namespace Greenshot.Forms foreach (var outputPrintIniValue in _coreConfiguration.GetIniValues().Values.Where(value => value.PropertyName.StartsWith("OutputPrint") && value.ValueType == typeof(bool) && !_coreConfiguration.IsWriteProtected(value.PropertyName))) { - selectList.AddItem(Language.GetString(outputPrintIniValue.PropertyName), outputPrintIniValue, (bool) outputPrintIniValue.Value); + var key = outputPrintIniValue.PropertyName; + if (languageKeys.Contains(key)) + { + selectList.AddItem(_greenshotLanguage[key], outputPrintIniValue, (bool)outputPrintIniValue.Value); + } + else + { + Log.Warn().WriteLine("Missing translation for {0}", key); + } } if (selectList.DropDownItems.Count > 0) { @@ -965,18 +984,32 @@ namespace Greenshot.Forms Text = _greenshotLanguage.SettingsVisualization }; - var iniValue = _coreConfiguration["PlayCameraSound"]; + var iniValue = _coreConfiguration.GetIniValue("PlayCameraSound"); var languageKey = _coreConfiguration.GetTagValue(iniValue.PropertyName, ConfigTags.LanguageKey) as string; if (!_coreConfiguration.IsWriteProtected(iniValue.PropertyName)) { - selectList.AddItem(Language.GetString(languageKey), iniValue, (bool) iniValue.Value); + if (languageKeys.Contains(languageKey)) + { + selectList.AddItem(_greenshotLanguage[languageKey], iniValue, (bool)iniValue.Value); + } + else + { + Log.Warn().WriteLine("Missing translation for {0}", languageKey); + } } - iniValue = _coreConfiguration["ShowTrayNotification"]; + iniValue = _coreConfiguration.GetIniValue("ShowTrayNotification"); languageKey = _coreConfiguration.GetTagValue(iniValue.PropertyName, ConfigTags.LanguageKey) as string; if (!_coreConfiguration.IsWriteProtected(iniValue.PropertyName)) { - selectList.AddItem(Language.GetString(languageKey), iniValue, (bool) iniValue.Value); + if (languageKeys.Contains(languageKey)) + { + selectList.AddItem(_greenshotLanguage[languageKey], iniValue, (bool)iniValue.Value); + } + else + { + Log.Warn().WriteLine("Missing translation for {0}", languageKey); + } } if (selectList.DropDownItems.Count > 0) { diff --git a/src/Greenshot/Forms/MainForm.resx b/src/Greenshot/Forms/MainForm.resx deleted file mode 100644 index 41c34bc68..000000000 --- a/src/Greenshot/Forms/MainForm.resx +++ /dev/null @@ -1,299 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 293, 17 - - - - - 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 - gg== - - - - - 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 - AOypQZHMHzM4AAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACbUlEQVQ4T6WTXUjTYRTGn33Z - lwVqrZZNZyrqioI2s0hbUAp9WxdBRDqjEsGEbqwYWl2URReR0geFF0EUFEh1UQuXJeVYma6NLXBBrLZF - JULIPlxjnt4znGzmXRc/ODzn+Z3/e/MHEeF/gAtaRurGqibBS4FV8FxwTOQyhuepjHfcaWKHXThQBie0 - Ro9668eJK3dD9MBM4Y7u4GdNtVPkJxmewxe7g3TfTNzhLjvsYhilEjtKLaFzN4J/TNcpcqiNIofbacLU - GXXIV9uYyKmrUc54x52QqSvIDrv4gJKMIbl2MHrhDo3taqGxHc0JxhvayV9zNOCvPhIYr2+bzrkTMXXR - kKxskF3YUCx/Jym2jbd0TPqq6slXWZfAb2ign3tOxH/sbo77DcbpnDujB1sn2WEXAyjEGxQ+/VV3OvhF - f4CSjKzdR/aiGrLmVlH/kgrqy9Yn6FduIJd+f5AddvEKGsb0SbfXG9jeSJ41tTSsNtCAKL/N0v3De/Vm - si0t97LDLizIQy/yCi3yAuu3ncfDzuWbaFiIs2FfvJ4cBVvCvdJ8a8IRLl5AneAZVhj7MkscX3W1MY8o - jogjqXjEizy5lTGLYqWDu0kPT6BKInkMVatlQZH7e/G2WCCnnALiSAIh+5QVsd4MjZs7wpEkvdQD6MEy - 6SMoz5jn5LvGVBtjv4XIjGbrYma52sU77qR8FDMP4B5ypLexyNSjULrDWeviTI9c6eaMd+JAmjPbAVzD - PNllKLosc1VehmfOxAF+ZfqBW1iIJDeRiU7MxyUocB4S1VngNcMzZ7zjTqqT/BvxEEqI8kwaRcak5dyd - +ovxF8BPsQ+FYS+HAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAUFJREFUOE+lk69L - Q1Ecxb//wmCra6uDlbXFwcJgYXVMXFkdD9y6BouGWRxM8BeiiGARFINJTFcwCApWMVisYvB4ztU3Bveu - +MLh8v2ezzn3vQfPAFgWZQrr4lnBsZmdmjUop1Pz4Z9iXvrU8wUKOYxG0Ek15gq89zkYzLyggLD7Hg7x - 2GziK0mgmVKJ5N57Pe+9djreCwr2Ce7R+Oj3cVOt4q3bhWbpqdXyu/t63e/EBgU0bIfGlMBLu43Lchl3 - tRquKxXsFgo4KRYhT4zYaAEBmxDYJnhRKuEgl/M6yuehnTwx0YJ1GpvUmNAW4XPeesZwKu3kiREbPIGW - G7+Au2IwJnliFhXIcLcMp9K8YBd+xFXCDwyn0rzG26SYF7zCCsGEoWeW6NTMoEkxLyhgyJYZWmJYp+a0 - IOYFBf/9IzP/jT+zZw/Woa9yPwAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m - dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAALQSURBVDhPTZJrSJNhFMefpyyQQUgNP/RhiOi8bN4Y - gqF5SURSRIb4TUW8jGlGJiOco0Wm4YdCIoYIXUCICMoZJIlkGpVic455n2nuomIup+LdtZ2e87xs9OHH - /33+57z/5+Wcl/yilGOn9KqT0ncuSt/OUfpsjJD8EULId6bTlL5wUGrEOvYF3gEAQp5mZhILOzA+QF8f - nLa3w3ZFxfaESGRiARM/RCKzp6xs57S1FfxGI2Af9t8IDxcClDoduVVZST5SOgRdXeApLYW5nBywJSTY - oaMDFuRyO57R9xsMgH3pcjkhMpkQUKzVFrEQ1WOJxDjMbgzQHxq6/r8GeCAWvw9LT29kAcU84Ep1tcrn - 94PX5+P8KSkBaGvj+nNtLehjj21zk7OyswNn4uKaeMDlvDzV7tERuDwezqZSCaDXc7UsLwd97PlssXCs - TieclUrv8YDzKSlFIUlJqjeDg/CSDXFCoQC/Tsf1SU8PPO/thdcDA9DR3R3knFT6KCQqSsUDLrEtiLOy - VLbVVZhnyauFheBrbuY6Pj/PPayNsmdkyuWCkOjo+wxhiNc1GkS17/XCzuEh2PPz4a9Gw3XO4eAe1r7O - zHAmV1aAymT1DCGgVK9H1LsnJ+De24Ol3FzwNjZynbbbuYe1EauVY1paArYBdXCNypYWpN5zfAzrbLq2 - 7GzwNjRwtbLb0MPa0OQkZ2xhAUh8fANDCChsakJuutmUHVtbMJuRAadqNVfcAnpYGzSZON9mZ4GwFTKE - gGt1dcjtjYMDWHa7wZqWBie1tVzN7HPRw9rA+Djny9QUkJgYLUMISCsvR+6s7e+DbWODr++4qoqraXGR - e1jrHx3l4H9AoqNbGUJATEEBcvc3G5STDWxYKgVvTQ1XCxsielj7ZDZzcJA0MrKTIQSIU1PJRYWiJiw5 - +SFiYP97gICHXEhM7AyNjTWERES8ohKJlsECgPwD74Vfj6xWOBYAAAAASUVORK5CYII= - - - - 193, 17 - - - 17, 17 - - \ No newline at end of file diff --git a/src/Greenshot/Forms/ToolStripMenuSelectList.cs b/src/Greenshot/Forms/ToolStripMenuSelectList.cs index 5544d1e6e..38bfab424 100644 --- a/src/Greenshot/Forms/ToolStripMenuSelectList.cs +++ b/src/Greenshot/Forms/ToolStripMenuSelectList.cs @@ -29,8 +29,8 @@ using System.Drawing; using System.Drawing.Imaging; using System.Windows.Forms; using Greenshot.Gfx; -using Dapplo.Ini; using Greenshot.Addons.Core; +using Greenshot.Addons.Config.Impl; #endregion @@ -41,8 +41,9 @@ namespace Greenshot.Forms /// public sealed class ToolStripMenuSelectList : ToolStripMenuItem { - private static readonly ICoreConfiguration CoreConfig = IniConfig.Current.Get(); - private static Image _defaultImage; + // TODO: Solve, was static reference! + private static readonly ICoreConfiguration CoreConfig = new CoreConfigurationImpl(); + private static Image _defaultImage; private readonly bool _multiCheckAllowed; private bool _updateInProgress; diff --git a/src/Greenshot/Greenshot.csproj b/src/Greenshot/Greenshot.csproj index 81e7174e5..63e18ae53 100644 --- a/src/Greenshot/Greenshot.csproj +++ b/src/Greenshot/Greenshot.csproj @@ -1,577 +1,127 @@ - - - + + - {CD642BF4-D815-4D67-A0B5-C69F0B8231AF} - {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} WinExe - Greenshot - Greenshot - OnBuildSuccess - icons\applicationIcon\icon.ico - Properties - True - False - 4 - false - v4.6.1 - greenshot.manifest - 3.5 - - + net471;netcoreapp3.0 latest - + icons\applicationIcon\icon.ico + True + greenshot.manifest + Greenshot + Greenshot + - - ..\packages\Autofac.4.8.1\lib\net45\Autofac.dll - - - ..\packages\Autofac.Extras.AttributeMetadata.4.0.1\lib\net45\Autofac.Extras.AttributeMetadata.dll - - - ..\packages\Autofac.Extras.CommonServiceLocator.5.0.0\lib\net45\Autofac.Extras.CommonServiceLocator.dll - - - ..\packages\Autofac.Mef.4.0.0\lib\net45\Autofac.Integration.Mef.dll - - - ..\packages\Caliburn.Micro.Core.3.2.0\lib\net45\Caliburn.Micro.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\Caliburn.Micro.Platform.dll - - - ..\packages\Caliburn.Micro.3.2.0\lib\net45\Caliburn.Micro.Platform.Core.dll - - - ..\packages\CommandLineParser.2.3.0\lib\net45\CommandLine.dll - - - ..\packages\CommonServiceLocator.2.0.4\lib\net46\CommonServiceLocator.dll - - - ..\packages\ControlzEx.3.0.2.4\lib\net45\ControlzEx.dll - - - ..\packages\Costura.Fody.3.1.0\lib\net46\Costura.dll - - - ..\packages\Dapplo.Addons.1.0.79\lib\net461\Dapplo.Addons.dll - - - ..\packages\Dapplo.Addons.Bootstrapper.1.0.79\lib\net461\Dapplo.Addons.Bootstrapper.dll - - - ..\packages\Dapplo.Addons.Config.1.0.79\lib\net461\Dapplo.Addons.Config.dll - - - ..\packages\Dapplo.CaliburnMicro.1.0.75\lib\net461\Dapplo.CaliburnMicro.dll - - - ..\packages\Dapplo.CaliburnMicro.Configuration.1.0.75\lib\net461\Dapplo.CaliburnMicro.Configuration.dll - - - ..\packages\Dapplo.CaliburnMicro.Dapp.1.0.75\lib\net461\Dapplo.CaliburnMicro.Dapp.dll - - - ..\packages\Dapplo.CaliburnMicro.Menu.1.0.75\lib\net461\Dapplo.CaliburnMicro.Menu.dll - - - ..\packages\Dapplo.CaliburnMicro.Metro.1.0.75\lib\net461\Dapplo.CaliburnMicro.Metro.dll - - - ..\packages\Dapplo.CaliburnMicro.Security.1.0.75\lib\net461\Dapplo.CaliburnMicro.Security.dll - - - ..\packages\Dapplo.CaliburnMicro.Toasts.1.0.75\lib\net461\Dapplo.CaliburnMicro.Toasts.dll - - - ..\packages\Dapplo.CaliburnMicro.Translations.1.0.75\lib\net461\Dapplo.CaliburnMicro.Translations.dll - - - ..\packages\Dapplo.HttpExtensions.0.8.46\lib\net46\Dapplo.HttpExtensions.dll - - - ..\packages\Dapplo.HttpExtensions.JsonNet.0.8.46\lib\net46\Dapplo.HttpExtensions.JsonNet.dll - - - ..\packages\Dapplo.HttpExtensions.OAuth.0.8.46\lib\net46\Dapplo.HttpExtensions.OAuth.dll - - - ..\packages\Dapplo.Ini.0.5.31\lib\net45\Dapplo.Ini.dll - - - ..\packages\Dapplo.InterfaceImpl.0.2.12\lib\net45\Dapplo.InterfaceImpl.dll - - - ..\packages\Dapplo.Language.0.5.31\lib\net45\Dapplo.Language.dll - - - ..\packages\Dapplo.Log.1.2.1\lib\net45\Dapplo.Log.dll - - - ..\packages\Dapplo.Log.LogFile.1.2.1\lib\net45\Dapplo.Log.LogFile.dll - - - ..\packages\Dapplo.Log.Loggers.1.2.1\lib\net45\Dapplo.Log.Loggers.dll - - - ..\packages\Dapplo.Utils.1.0.161\lib\net45\Dapplo.Utils.dll - - - ..\packages\Dapplo.Windows.0.5.109\lib\net461\Dapplo.Windows.dll - - - ..\packages\Dapplo.Windows.Clipboard.0.5.109\lib\net461\Dapplo.Windows.Clipboard.dll - - - ..\packages\Dapplo.Windows.Com.0.5.109\lib\net461\Dapplo.Windows.Com.dll - - - ..\packages\Dapplo.Windows.Common.0.5.109\lib\net461\Dapplo.Windows.Common.dll - - - ..\packages\Dapplo.Windows.DesktopWindowsManager.0.5.109\lib\net461\Dapplo.Windows.DesktopWindowsManager.dll - - - ..\packages\Dapplo.Windows.Dpi.0.5.109\lib\net461\Dapplo.Windows.Dpi.dll - - - ..\packages\Dapplo.Windows.EmbeddedBrowser.0.5.109\lib\net461\Dapplo.Windows.EmbeddedBrowser.dll - - - ..\packages\Dapplo.Windows.Gdi32.0.5.109\lib\net461\Dapplo.Windows.Gdi32.dll - - - ..\packages\Dapplo.Windows.Icons.0.5.109\lib\net461\Dapplo.Windows.Icons.dll - - - ..\packages\Dapplo.Windows.Input.0.5.109\lib\net461\Dapplo.Windows.Input.dll - - - ..\packages\Dapplo.Windows.Kernel32.0.5.109\lib\net461\Dapplo.Windows.Kernel32.dll - - - ..\packages\Dapplo.Windows.Messages.0.5.109\lib\net461\Dapplo.Windows.Messages.dll - - - ..\packages\Dapplo.Windows.Multimedia.0.5.109\lib\net461\Dapplo.Windows.Multimedia.dll - - - ..\packages\Dapplo.Windows.Shell32.0.5.109\lib\net461\Dapplo.Windows.Shell32.dll - - - ..\packages\Dapplo.Windows.User32.0.5.109\lib\net461\Dapplo.Windows.User32.dll - - - ..\packages\gong-wpf-dragdrop.1.1.0\lib\net46\GongSolutions.Wpf.DragDrop.dll - - - ..\packages\MahApps.Metro.1.6.5\lib\net46\MahApps.Metro.dll - - - ..\packages\MahApps.Metro.IconPacks.2.3.0\lib\net46\MahApps.Metro.IconPacks.dll - + + PreserveNewest + + + + + + + + + + + + + + + + + + + + + + - - True - - - ..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll - - - - - ..\packages\Svg.2.3.0\lib\net35\Svg.dll - - - - ..\packages\System.Console.4.0.0\lib\net46\System.Console.dll - - + + - - ..\packages\System.Reactive.4.1.0\lib\net46\System.Reactive.dll - - - ..\packages\System.Reflection.TypeExtensions.4.5.0\lib\net461\System.Reflection.TypeExtensions.dll - - - ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.1\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll - - - - ..\packages\System.Threading.Tasks.Extensions.4.5.1\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll - - - ..\packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll - - - ..\packages\ControlzEx.3.0.2.4\lib\net45\System.Windows.Interactivity.dll - - + + - - ..\packages\ToastNotifications.2.3.4\lib\net40\ToastNotifications.dll - + + + - - - - - - - - - - - - - - - - - - - - Form - - - AboutForm.cs - - - Form - - - CaptureForm.cs - - - Form - - - LanguageDialog.cs - - - Form - - - MainForm.cs - - - Form - - - PrintOptionsDialog.cs - - - Component - - - Form - - - BugReportForm.cs - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - MainForm.cs - - - - - Always - - - Always - - - Always - - - Always - - - Always - - - Always - - - Always - - - Always - - - Always - - - Always - - - Always - - - Always - - - Always - - - Always - - - Always - - - Always - - - Always - - - Always - - - Always - - - Always - - - Always - - - Always - - - Always - - - Always - - - Always - - - Always - - - Always - - - Always - - - Always - - - Always - - - Always - - - Always - - - Always - - - Always - - - Always - - - Always - - - Always - - - Always - - - Always - - - Always - - - Always - - - Always - - - Always - - - Always - - - Always - - + + + + + + + + + + + + + + - - {4cca2717-b8a4-44f7-965b-5687107e4921} - Greenshot.Addon.InternetExplorer - - - {bf35190d-b2a7-4cfa-b397-51cb384cf0d7} - Greenshot.Core - - - {f041c685-eb96-4ed1-9ace-0f5bd836610f} - Greenshot.Gfx - - - {5B924697-4DCD-4F98-85F1-105CB84B7341} - Greenshot.Addons - + + + + + + + + + + + + + + + + + + all + runtime; build; native; contentfiles; analyzers + + + + + - - Always - + + + + + + + + + + + + + + + + + + + - - - Always - - - Always - - - Always - - - Always - - - Always - - - Always - - - Always - + + - - - Designer - - - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - Designer - MSBuild:Compile - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - Designer - MSBuild:Compile - - - MSBuild:Compile - Designer - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - - - - - - - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - \ No newline at end of file diff --git a/src/Greenshot/GreenshotAutofacModule.cs b/src/Greenshot/GreenshotAutofacModule.cs index cbf43592c..006cbdd74 100644 --- a/src/Greenshot/GreenshotAutofacModule.cs +++ b/src/Greenshot/GreenshotAutofacModule.cs @@ -21,16 +21,20 @@ #endregion +using System.Collections.Generic; +using System.IO; +using System.Linq; using Autofac; using Autofac.Features.AttributeFilters; using Dapplo.Addons; using Dapplo.CaliburnMicro.Configuration; using Dapplo.CaliburnMicro.Security; -using Dapplo.Ini; -using Dapplo.Language; +using Dapplo.Config.Ini; +using Dapplo.Config.Language; using Greenshot.Addons.Components; using Greenshot.Components; using Greenshot.Configuration; +using Greenshot.Configuration.Impl; using Greenshot.Forms; using Greenshot.Helpers; using Greenshot.Ui.Configuration.ViewModels; @@ -45,14 +49,31 @@ namespace Greenshot { protected override void Load(ContainerBuilder builder) { - builder - .Register(context => IniConfig.Current.Get()) - .As() + // Specify the directories for the translations manually, this is a workaround + builder.Register(context => LanguageConfigBuilder.Create() + .WithSpecificDirectories(GenerateScanDirectories( +#if NET471 + "net471", +#else + "netcoreapp3.0", +#endif + "Greenshot.Addon.LegacyEditor", + "Greenshot").ToArray() + ) + .BuildLanguageConfig()) + .As() .SingleInstance(); builder - .Register(context => LanguageLoader.Current.Get()) + .RegisterType() + .As() + .As() + .SingleInstance(); + + builder + .RegisterType() .As() + .As() .SingleInstance(); builder @@ -130,5 +151,28 @@ namespace Greenshot base.Load(builder); } + + + /// + /// Helper method to create a list of paths where the files can be located + /// + /// string with the platform + /// + /// IEnumerable with paths + private IEnumerable GenerateScanDirectories(string platform, params string[] addons) + { + var location = GetType().Assembly.Location; + foreach (var addon in addons) + { + yield return Path.Combine(location, @"..\..\..\..\..\", addon, "bin", +#if DEBUG + "Debug", +#else + "Release", +#endif + platform + ); + } + } } } diff --git a/src/Greenshot/Help/HelpFileLoader.cs b/src/Greenshot/Help/HelpFileLoader.cs index 8c1843527..cb0e9d1d6 100644 --- a/src/Greenshot/Help/HelpFileLoader.cs +++ b/src/Greenshot/Help/HelpFileLoader.cs @@ -44,7 +44,7 @@ namespace Greenshot.Help public static void LoadHelp() { - var uri = FindOnlineHelpUrl(Language.CurrentLanguage);// ?? Language.HelpFilePath; + var uri = FindOnlineHelpUrl("en-US");// Language.CurrentLanguage);// ?? Language.HelpFilePath; Process.Start(uri); } diff --git a/src/Greenshot/Helpers/CaptureHelper.cs b/src/Greenshot/Helpers/CaptureHelper.cs index ec9287759..72208a745 100644 --- a/src/Greenshot/Helpers/CaptureHelper.cs +++ b/src/Greenshot/Helpers/CaptureHelper.cs @@ -31,7 +31,6 @@ using System.IO; using System.Linq; using System.Threading; using System.Windows.Forms; -using Dapplo.Ini; using Dapplo.Windows.App; using Dapplo.Windows.Desktop; using Greenshot.Destinations; @@ -50,7 +49,7 @@ using Greenshot.Addons.Interfaces; using Greenshot.Components; using Greenshot.Core.Enums; using Greenshot.Gfx; -using LangKey = Greenshot.Configuration.LangKey; +using Greenshot.Addons.Config.Impl; #endregion @@ -62,7 +61,8 @@ namespace Greenshot.Helpers public class CaptureHelper : IDisposable { private static readonly LogSource Log = new LogSource(); - private static readonly ICoreConfiguration CoreConfig = IniConfig.Current.Get(); + // TODO: Solve, was static reference! + private static readonly ICoreConfiguration CoreConfig = new CoreConfigurationImpl(); private readonly bool _captureMouseCursor; private ICapture _capture; private CaptureMode _captureMode; @@ -425,7 +425,8 @@ namespace Greenshot.Helpers } else { - MessageBox.Show(Language.GetString("clipboard_noimage")); + // TODO: Translation + //MessageBox.Show(Language.GetString("clipboard_noimage")); } break; case CaptureMode.File: @@ -449,7 +450,8 @@ namespace Greenshot.Helpers catch (Exception e) { Log.Error().WriteLine(e, e.Message); - MessageBox.Show(Language.GetFormattedString(LangKey.error_openfile, filename)); + // TODO: Translation + //MessageBox.Show(Language.GetFormattedString(LangKey.error_openfile, filename)); } try { @@ -458,7 +460,8 @@ namespace Greenshot.Helpers catch (Exception e) { Log.Error().WriteLine(e, e.Message); - MessageBox.Show(Language.GetFormattedString(LangKey.error_openfile, filename)); + // TODO: Translation + //MessageBox.Show(Language.GetFormattedString(LangKey.error_openfile, filename)); } } if (fileImage != null) @@ -678,7 +681,7 @@ namespace Greenshot.Helpers } else { - SelectedCaptureWindow = InteropWindowQuery.GetActiveWindow(); + SelectedCaptureWindow = InteropWindowQuery.GetForegroundWindow(); if (SelectedCaptureWindow != null) { if (Log.IsDebugEnabled()) @@ -720,7 +723,7 @@ namespace Greenshot.Helpers /// WindowDetails with the target Window OR a replacement public static IInteropWindow SelectCaptureWindow(IInteropWindow windowToCapture) { - NativeRect windowRectangle = windowToCapture.GetInfo().Bounds; + var windowRectangle = windowToCapture.GetInfo().Bounds; if (windowRectangle.Width == 0 || windowRectangle.Height == 0) { Log.Warn().WriteLine("Window {0} has nothing to capture, using workaround to find other window of same process.", windowToCapture.Text); @@ -781,7 +784,7 @@ namespace Greenshot.Helpers { captureForWindow = new Capture(); } - NativeRect windowRectangle = windowToCapture.GetInfo().Bounds; + var windowRectangle = windowToCapture.GetInfo().Bounds; // When Vista & DWM (Aero) enabled var dwmEnabled = Dwm.IsDwmEnabled; @@ -997,7 +1000,7 @@ namespace Greenshot.Helpers private void SetDpi() { // Workaround for proble with DPI retrieval, the FromHwnd activates the window... - var previouslyActiveWindow = InteropWindowQuery.GetActiveWindow(); + var previouslyActiveWindow = InteropWindowQuery.GetForegroundWindow(); // Workaround for changed DPI settings in Windows 7 using (var graphics = Graphics.FromHwnd(MainForm.Instance.Handle)) { diff --git a/src/Greenshot/Helpers/MailHelper.cs b/src/Greenshot/Helpers/MailHelper.cs index f9d068095..bb4cb0b32 100644 --- a/src/Greenshot/Helpers/MailHelper.cs +++ b/src/Greenshot/Helpers/MailHelper.cs @@ -31,8 +31,8 @@ using System.IO; using System.Runtime.InteropServices; using System.Threading; using System.Windows.Forms; -using Dapplo.Ini; using Dapplo.Log; +using Greenshot.Addons.Config.Impl; using Greenshot.Addons.Core; using Greenshot.Addons.Interfaces; using Greenshot.Addons.Interfaces.Plugin; @@ -77,11 +77,12 @@ namespace Greenshot.Helpers #endregion Enums private static readonly LogSource Log = new LogSource(); - private static readonly ICoreConfiguration CoreConfig = IniConfig.Current.Get(); + // TODO: Solve, was static reference! + private static readonly ICoreConfiguration CoreConfig = new CoreConfigurationImpl(); - #region Member Variables + #region Member Variables - private readonly ManualResetEvent _manualResetEvent; + private readonly ManualResetEvent _manualResetEvent; #endregion Member Variables diff --git a/src/Greenshot/Helpers/PrintHelper.cs b/src/Greenshot/Helpers/PrintHelper.cs index 5441528a9..fc14725f6 100644 --- a/src/Greenshot/Helpers/PrintHelper.cs +++ b/src/Greenshot/Helpers/PrintHelper.cs @@ -39,7 +39,6 @@ using Greenshot.Addons.Interfaces.Plugin; using Greenshot.Core.Enums; using Greenshot.Gfx.Effects; using Greenshot.Gfx.Legacy; -using LangKey = Greenshot.Configuration.LangKey; #endregion @@ -131,9 +130,10 @@ namespace Greenshot.Helpers catch (Exception e) { Log.Error().WriteLine(e, "An error ocurred while trying to print"); - MessageBox.Show(Language.GetString(LangKey.print_error), Language.GetString(LangKey.error)); - } - return returnPrinterSettings; + // TODO: Translation + //MessageBox.Show(Language.GetString(LangKey.print_error), Language.GetString(LangKey.error)); + } + return returnPrinterSettings; } /// @@ -164,9 +164,10 @@ namespace Greenshot.Helpers catch (Exception e) { Log.Error().WriteLine(e, "An error ocurred while trying to print"); - MessageBox.Show(Language.GetString(LangKey.print_error), Language.GetString(LangKey.error)); - } - return returnPrinterSettings; + // TODO: Translation + //MessageBox.Show(Language.GetString(LangKey.print_error), Language.GetString(LangKey.error)); + } + return returnPrinterSettings; } private bool IsColorPrint() diff --git a/src/Greenshot/Processors/TitleFixProcessor.cs b/src/Greenshot/Processors/TitleFixProcessor.cs index ca313ef06..f6980cc97 100644 --- a/src/Greenshot/Processors/TitleFixProcessor.cs +++ b/src/Greenshot/Processors/TitleFixProcessor.cs @@ -25,8 +25,8 @@ using System.Collections.Generic; using System.Text.RegularExpressions; -using Dapplo.Ini; using Dapplo.Log; +using Greenshot.Addons.Config.Impl; using Greenshot.Addons.Core; using Greenshot.Addons.Interfaces; @@ -40,9 +40,10 @@ namespace Greenshot.Processors public class TitleFixProcessor : AbstractProcessor { private static readonly LogSource Log = new LogSource(); - private static readonly ICoreConfiguration config = IniConfig.Current.Get(); + // TODO: Solve, was static reference! + private static readonly ICoreConfiguration config = new CoreConfigurationImpl(); - public TitleFixProcessor() + public TitleFixProcessor() { var corruptKeys = new List(); foreach (var key in config.ActiveTitleFixes) diff --git a/src/Greenshot/sounds/camera.wav b/src/Greenshot/Resources/camera.wav similarity index 100% rename from src/Greenshot/sounds/camera.wav rename to src/Greenshot/Resources/camera.wav diff --git a/src/Greenshot/Resources/contextmenu_capturearea.Image.png b/src/Greenshot/Resources/contextmenu_capturearea.Image.png new file mode 100644 index 0000000000000000000000000000000000000000..9e0637204abe9d4abda0514ed1987d6ba83c7982 GIT binary patch literal 272 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 literal 0 HcmV?d00001 diff --git a/src/Greenshot/Resources/contextmenu_donate.Image.png b/src/Greenshot/Resources/contextmenu_donate.Image.png new file mode 100644 index 0000000000000000000000000000000000000000..3c045def031957a058cbf37a0a45d97eb09b398b GIT binary patch literal 740 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 literal 0 HcmV?d00001 diff --git a/src/Greenshot/Resources/contextmenu_settings.Image.png b/src/Greenshot/Resources/contextmenu_settings.Image.png new file mode 100644 index 0000000000000000000000000000000000000000..913586a4e03c5181ca736c3aa671ea2b66c8b9d1 GIT binary patch literal 630 zcmV-+0*U>JP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00063 zNkl}A&?)CELmzoDG5>%i(Ei*?GO+oG?yX2{((%TNGBnnXa_+= zaIlz8E()!?lBuZ*8cxUs5_6$Z8f_XbD%nFJ%h&fg%n{Ma4$r+0&-e2@!!aWIFX^9H zEXLyTI7=pzER{;>Zzhuwxjx)W9KC@>=g~kSk$B62kNkascQ6=Gzu%|P49t@Qk|e#$ z<#HRnUXQZb>;i{oudllV!6U;B4A=()(P$L<)NZ#)QOeZqYE&o`eruXW5PYlE(r;kE zqGJq*qR1kV$XGg^{(N>;qgt&>S67$R>HO6Nj|?|3V9_xK!r^d)2XoNQ&UUNOP-%Df zdovgeeudzX;Wp&ZF$M%d$W8VWhdYvXF-mIF@sKc0$CwYlg~hAO8FLuIu}*_j}*Hy5@PFweI_OKkHe~de*vs_bmVn z;DA>!fQO?B0E^JIx%ouBPy%2SwP|Qf*6{#8>jEe$PSk6J0OpwiNJ&l9gOMp23P6gh z%Up30Wf5dboaw}H=Sle*NFV&x7OntL2xBtrJ=V9qJ@iANr>9!=&{C0OZqr?zGF2~9 zMIPI~lUp6IUhZZ+5%jA_4kcw?Xc#?x1ZM#h>uR&BP6a4NJO%{ki~GuGVK7qE8iT8b7&`xYBZ zbGqmXc&4HVkO*{)hW1i@;Ao5C*y)^~Kx((SEI3FfBBks9U6uB~!gbyXvRk=;`!wlu zol$kgop(>X_Kpp7ru062tMf3f?=xlKIZ--GAJ-XEG``Q~>ht!n2VGZsd)C=`aW5ss z>LCb`;WUh7Pn2zZrUT_wbRC@iv~Z)H7v|WHVG?7dg!e9ef^huGLiHnyQ&OUrG z)Lay|Xt%@_8Mf&xjLwl1O`3MkA>fDzw4K3No{=_F_c<~fPk2ASPf)`{^M23ynI>!R zKJ_l2b|uT^-0QjZLn~~s8P}Q6`S2z)DNgfpLPA<%c0sAG!{Tgl%F$S8ElB{&(^{8B zqzEUm?D-O>Da#(3>Z#@g_WNiZHredH?k7e3le$3}g)8enFZmSRA~;(~=CrH`xRfjW zxVbSnveM6SflZIpqE~AJlApJZzj@YYCq~~^HS>cY=-OTn3p!P{WNXXkXP3-Uyam=b zpQ8`^GMx%_P`#(Isd_KST_s4=f3 zmK+K=t~9r}++rVRW&g2h2UnJU+Pr^^l7Dd3$i3^AqE+U{i6{|j^CA~Z+)c-J{$}$mt2(CsCR3z75#OMh zeDGJhl@@y#8mWQuobHHcmMH<96=}77XF4y1VTPp~1h!Zt!)(%x9oYb(SBknSUByzgU$@KD! zl$N?2Pp;~{(PyYheGY%3ofDc3gK(Ou!u5Q})XV?>)hz9c4yZA-F2XmAKsb_R?&r z++PX;@$(u*^w(Zbc%6DJx@-Nb90+iG?((LnVZlgM!z)6-rO~9hNZ5#)Pa|TcW3nR}knH|B zvhQl>4y_IWVO(Zfpqm`D?+-uax_8cW(cc7``+j-Yx*=ud=hwqgF1kPN!(H2FCcIbW zvwHNb+qs57vG9u`t>Tns%jztBUO8~1JH|5Zk|9)#&g(Rsu{l`agQTFV96Qf?P-@S* z?4`!OSQ+zLD`$K6B@P7I0jPIa5?kU4v#qrmMN2cPersQsa9J-mI%CeOjq>t`WRd}8 z9;c~tmWos}_^;#St{z;JT%eq|UywE{RXMAciGN!2B1_xO!$p`v*Xb@0kTjY88NZ^C z@%U!8M!sa{&!;l&I~I%FdTJU(9!?i`Z~vUQ!sdCuZbA{H+K_XpHemc0vo9(B#g*t+V`9pg(< z3wMhbW7(;aR~KcjOI&55e5cA#aNEqm@Vht-kNM?4DvIXczn}LuIi@8(-*hx`)1u(e z+OqpA+)QYVOO@u=R|r*Q33?9k_+fX=1J?HKK_(Ag3u`Rd zWw1dm`KaK99h_uA*>KwYICtZpy4u9;^Y4#a^YUX@oqOGqjWw|(0oO;$BborPuA z4SkSP=2WZ4oU7nEZKjbRhnyH~Htam9LTN~E3S;5?c zB7YiFCDf2c5)9XLFUB!9=kEm%s-1&eU{$o9)_90dmf#!dkc!enBb8R7P_a`~c+M%q zWU~#gpMS8oWjy&%nxgipX7v4NT4KH|M>MkSXUeb6)!V1(VQAMSt;d5N$2qtp{{-m; z8X@A1yB%t8ip@U`olVt&9tt}7Ak|h+pO_$QVUp{Tv;ld}v`|8e9m0D-ry`!ZtT|&cW1bJt;dMp}Hh4x0BRXL0@WFF*j$#FVf!)H*g!grR=+ytyFAI`Yqp(tE^6oVSe#p{e?4x1={0^lL>~E1|d#>Z;->}96yDv`jhF53H z(H80W)Ryx$BB}bx2DCqRyd?A}rs9yPr&nf0wMNvkk8FLgkrRzxDAbJ&kFPotXGa&AxeSuD#rA9fWtq6;+2>uH zjuhS%Y*HS+)qR-rYN3xPd(&9Tw#5(Bx(C`1Dk^C(G8#f@ZzG>5d!}&GtGlqS(IcxU zL#l~AHJn!&X+lP?PwsHOS~}M9Ks}j=aTq8W6m056ewXiNnY<)VDC^@2%@M%YR~kb5 zF8|*;>RWJ4gxvRfB!*fMT;9?hmM)wJQh9S<76YO-18Cd6yXk`NX=!av&2l+N{j|lA z6XwEl3iZO#W{bDxJ~*5sdYcVozzwh+9M=KZ7VjN*%puu~qGgn7j%mu5lL5}@gGR1Dj z7@@wJ2@orwNv%1CkN6-XEx!^2if?V+cX*m9#hZ`Tk0l*Ek{;0{4fM>?fJDSqx)yG2 z9oUxMKSLS>IAEr*1N3YuHa26N=%hv1fNKxHHh$0YCnh5?F=lp|F(XHhFK`;_*91=b z76%@+lSex>HO) zKdh2%pkwM5S0A}^gY7_b;_jcRcG;i=Z>p;J!q3hjHcoX^3H&Dt@QxLv^ugxxT?OoMGVTPgle z8)zQzN^C&#^5^BFr*~YHyq<`740WJd=Q>(K6*A)dZMN9o9ryw7d#*aI5ZH*qB#!T_ z&s{g7qTl(Rj(J54u6gZ#swWdMsb#S-Rjv?=wdPKcs{@iPfr};5IOD?%ya;Up&7X_N zT=95Cg)ZgbMZv+OUim!iwLp!y;M!p0yyE0apIet4xo3Lb8?qL~m*g%r&e`c~FOgIT z_csm9RTl&t^9%iKej-UWpH`4;num=Tc{|@DWFAb>Xhw(4Crlz7Jn@9MI?smw_h_k}J&#OkpDCT90HM`O1}Xyc|wHs*BaE zU2-W)LKAzfi>Typ7qw{2CVZD)su4j_dc$Q=u;H%d)CeL6>U#UtkF8}x{(_GEh6Xzp zV*)G)-uHW>o^^Vj8#+r}TitQRe|A%g?BM>a8wa7ktA!M8si7LzzQE6eIwsz0M5^vw zvvTp>axKJB@`R;bOLea=Yw&f$bIy(8kujtS-qr;$20U5g0b-&w9*EVTt6 z@%mh?-%9M=gA!sdCEgv75)|9(6&$Lm9nHOY=CY^kg3l37H=o#hi}`;LneKd0KFF(O z!Kv}cj;d8Bms@D-1j(lg>y6P^f+wUS95|ZxkAvAtS!ZJJJa+#zK9iWFWE-{JM#=ze zgf!W2*piu#EOF=GAZN?&;+lf`nB94HJFrrih`S{6vEw1Tx=$r{UXXnn?G2lb&U-$} zRxId@QoOuwec;}0nxm2@F~e(02!5w=HSKJz^Y?5n6k$8t$=hoLX8BZCn05aKot>2m zInQkLDFH&289RFHBf6C%@|K>h#56bE71x2Fo)_+J8M5vf3Od-Q9&D=Oha}zFdPSBy zC;WC+^n8b2Dn8)=+qD91h?$ZZ={Gp~^U9BEuhMb6;g=RLAGd<4Yk+Opf%xEwieo0V zevQg0>+S`Gn9xLGG~CtSuAwjIqu z@HWM_P~sL@jdKqx_47!^pi?sKflp(vQ(1cJoX1pA82v1xf)~H8cfWi(F=h*A^hDd% zB-R}4EfENA%);p5%JwZx2p74r(=wZyAEFq!1j|M|87%!`nPl$l2U$ z-Vo+!@AL5~xqE4hl2zM%&+{n#w?86#I-bQ zq53^3kPMf)q#P`6kou`VQW_3^Iz4UI@z>r9+DIAAMvuMb#0G@+wk*)Ylst|rJ63g{ zq@NVHG_4HpRBPnC^opkl?bVhr(UfzR3!U=kreb<(yL<)RLw5NZKzZxR!Z2fhfzLnh z@iBVKto})m>!?yB+bj|)?XEP}-w=Whnt0gHX%w?>G?e&qOTs zIviosq0nM+!x5JLT+{YD>ym!8tMHq(1Gj7OG{@d&a?lYLUGRR)uXK@a;@Ym8*^Aoe zDyIpzyt}hn-`9F~UG$3@r|82^T{Sxbn>h!zh!x>(IEm8tS}AtcSjNOYo3k8)Cu>Qx zHcYp4Ios;oV(JqqYM+I*(LHgICBATI*1_q>2|BR6-S$HM_%+APgmZ^=%H2YiD6q@( z4*NJ?B_L_o>{#ZEjbS88qgxcIIy&y{2^hZTTy@c&p(p=zkZFWTzx`{uTVVVuy)zuK z<(~?6U^Vva-RTi{Siq->%ah zD(%pvRpqW}xP-N;Qa4vQM zK^XRT_U!g4bf&oK>A^jB>s5z}M66rzKQLcT3*Hf2-=pGC6N0n8UIg&S2s!d1&H>AQ z-skt=S>Ht%E?m%pUm6m$uFa)Gs&UKmyS-uYF&HQ~6#cmP%sPt;7mdO8$oz{(_s)rG zIdktKN%fbVcxwj+i0Q_)cSR_em|G||H3hbivJ_OZ=Ck%%)#p3X+QiNiR-jj&9Nw@- zhJnjXewy7|KGg2oQxkNHwtErthl8v3TJ9tC)TBl>End=uyEc=goZ0HW+fx2)^qhl| z>bo%U34O<%U!6P4OiDR*p@_g0ZqHVP*!bKb6n+P$qYI9cH>Pz=~-PR?c*=bYs8_&p9x|Yc5#$IKd2WCz!s331%zj zgK4M>n1n3=a=<(=U+xU%fzDvE+7*l=-M}!~9SmbUz+i(1=x<&GdhErZyUh!961+h> z*$1?D_vLC;|YV4j@tjAX*0?(T|cVTxsNV zkinPh1{=7Mu%DX&=eVWN#I65|mqmC@SM%-#`TJb~11exdHcdByfMtKsHN(`=b6EUI5_*5gsLw(g_HUQcHDW2#*p} zTn%a9+LD3m=LX!^NZ{_v0B(6HaGUDC;XwjiK>;Fw1nFP|B|w2Xpg}({flKrOE;$0Y zZi&E+%mHr38Q_-I0Jr|z`!fR#gr^|9Gr})J`1J_C3*qw-{w%^*Abd5#qkCpNLiiU5 z-~aXg#$X2XkcALrAqiPHiY!zi3r~@Sej*osBXeQEjSGX3To}sW!lzO$jMj6%;#Cmd z1mW!v-W}nWBm9pDpN#Mah+HTjbD_+Q3)dsLP?y1lN2OeNQ~wQ*M|j={$RWH6!jlkQ z7vYT&-j>J(FESS*-MFwb64}b&!qrkPwAFvbV|C4SvBE4=m=?k|ES5bQdeB8x8n4D; z&HirfprSS#ER!cP1gxwq7Re{7BsE^+w5j@7kma?p6b#UT$+OHaV*ExUm`0_ld}-sK z8L~=zkqW3;7=Kj>o;3Lt6EVj7~V01ZhkzO}Ph zI5`Iv9i=_LD_9~Z$=!gKigAgrc=KF;q7PxSpG8}sJIA1qG*k%a#JyTWSQ zQ~&T#llRe@Idv9%ck@53Dp*+jm9an5=TEoa&%r-a``X5v{k&oRhXu?3gwW#p4~x1M z&%VJw)CMra8ag@}f16ML38;Y-FbX8e|D^Xtjx1wlq8@2~Y4{Ikw3I9Go?yx+^tTAs zOx(mL^cV95eGST_DHE8*vXtbRXHLxWKR&n+8t^F}AyNhObNt$b zrYC@y9FEAJq`c;@BCI)!X^!Q8W~{Ft0*ggLIz+VEn0-~8d|*SKWqnoN5!sw9ru@0d zpA`Jhh7ZE>*E)NirY(ldV$JzB7z7g=Qv!c+p0bMZ`Y?wui>FUTe}o~62K`I1MQ!#I zU#tPI>tYHxtT69;WN9g)1M~Y&gC}7r@m4+lXUQL`iN)Cvq)g2IFi-gU${=e%;=KSF zUX>}ve;nil{7K=h+jDrTDzhgq0k^kD|ND|-P@ZX^Llg?O0+xGNY%xr6aq#8KD%2}g}b95vAgbW(iz z993(VA87BKc2eoe;`j)q!JxJGH?vcUx}m5plF5_lR+DVZmNtcB=rZUuB_tR9W|M*9Z(oZ!lHpWMr+QQj zhV54|$kOTLZ#Dka49YhSiU{i;{5DXvGDXhCUlsxyp6__y?{xXY_q&$gS5%DX)G5RF zdm*ZcBTw7p>)ZH)7_I#z2E%@eBm12SUDX8jQ1rW2tgh)~6T@EIo-yNhV)VF%42JbY z8#)UU)u+BCMSFV%OJs9mR4h^7C=7tYrDbg0k}F_a8wmVY%&;tU3wQ-4!r_0W6xxBMTB0MAe1%^nou{ChuTN<4iQ1NkWn zP%ND_5lg3_Sh^*OrSp80>Hf@#xH&Io{>3NZ#m)c9C*j4-zxX65ZqD;bG&3e+=h@3Z z?eOxiar0?Be`GRl&Wo8VqL?{9PLAT^lC>y4KIwl*-J0}28c}SV=YR0x;>iENKSllr zFDCvH`5&)&G4XBuc=*&>rYKLRQUui|wt6acA|xe%teZ*d zO}GvSPqo5Nn$faQoMMuw^v9imcRNYcO?2YlnSbEj6crUJ71`v61}2*)PLlE(Q+J%N zIE)a5syqSx_8h2Ak*891zOY1eB>(sB@A6{NVvARZm%85_Ol1-h!Ce*Fe4@+TfKa+Inc5 zRAn%egFE>o=2R-?=!KxaX(I2dx77=DITQPrI@+s9 zdjcl&yC|=Vc(XF%%e=fUKc|bhvfQOL{G2X-ue!b#h*fJ*9(Nr`)KBhHZ5u%Z5VFqyX&4>FBc%bT!#2^1>(#9 z?qmPvh5yY9f1ek|>L{7$iAsQpjy7`Q(7t0dO_;~;R26Z$JU@6cLm?_=u4cqrI?ed| zk`!50XChf?$XjFpr-J95P?0s5B*GI_P&WA@nP?D{=ig>hiq?J2uXI(3N3pd)jhDI* z#_8&ijL?Fsr);VVL@_g6b#?x(WS}NAO`5E&G$nIFo+kTs`RCacpI~~t%m4f3zW@&2 Bc;^5B literal 0 HcmV?d00001 diff --git a/src/Greenshot/Sounds.resx b/src/Greenshot/Sounds.resx deleted file mode 100644 index 56901a7fe..000000000 --- a/src/Greenshot/Sounds.resx +++ /dev/null @@ -1,399 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - - UklGRiRAAABXQVZFZm10IBAAAAABAAEAESsAACJWAAACABAAZGF0YQBAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAID/gACA/4AAgP+AAAAAAAAAAIAAgP8AAAAAAAAAAID/gAAAAID/ - gAAAAID/gAAAAID/gAAAAAAAAAAAAID/gAAAAAAAAAAAAID/gACA/wABAP+AAAAAAAAAAAAAgAAAAID/ - AACAAAAAgP8AAAAAAAAAAAAAgP+AAAAAAAAAAAAAAAAAAAAAAAAAAID/gAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAgP8AAYD/AAAAAAAAgP8AAAABAACA/wAAgP+AAAAAgP8AAAAAAACAAAAAAAAAAIAAgP8AAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAID/gAAAAID/gACA/4AAAACA/4AAAACA/4AAAAAAAAAAgP+AAAAA - AAAAAAAAAAAAAID/gAAAAAAAAAAAAID/gACA/4AAAAAAAAAAAAAAAAAAAAAAAID/AACAAID/gAAAAAAA - AAAAAID/AACAAAAAgP+AAAAAAAAAAID/gACA/4AAgP8AAIAAAACA/wAAAACAAAAAAACA/wABgP8AAAAA - AACA/4AAAACA/wAAgAAAAID/AAAAAIAAAAAAAAAAAAAAAAAAAACA/4AAgP+AAID/gAAAAAAAAACA/wAA - AAAAAAAAgAAAAID/gAAAAID/AACAAID/AACAAAAAAAAAAAAAAAAAAAAAgP+AAID/AAAAAIAAAACA/wAA - gAAAAID/AAAAAAAAgACA/wAAgAAAAAAAgP+AAAAAgP8AAIAAgP8AAAAAAAAAAAAAAACAAID/AAAAAAAA - AAAAAAAAAACAAID/AAAAAAAAAACAAAAAgP8AAIAAAACA/wAAAAAAAIAAgP8AAAAAAAAAAIAAgP+AAAAA - gAAAAAAAgAAAAID/gACA/4D/AAAAAAABAAGA/4D/gP+AAYD/gP6AA4D/gACAAgD9gP4AAID9AAKAAwAB - gACAAID+gP8A/4D9gP8ABIABAACAAID/gP4A/wAAgACAAQACgAAAAID+gP0A/wABgAEAAQACAP8A/gD9 - AAAAAYABgP2AAQADgAMA/AD8gP8AAQADAAGA/YADgPyAAAD/gP+A/4ACgP+AAoD7gP8AAIACAACAAID/ - AAGA/YAAAACA/4AAAAOA/wD/AACAAYD/AACA/4ABgAKA/4D/gP8A/wABgAGA/gACgAAA/gD9gP6AAAD8 - AP0ABwD9gAUA94AFgPwACoDygAQABYD8AAGA9oAIgP6AAIABAAsA5IAEAOaA5YD6gDUA0QAFgBiAPYAF - gN0AEYDkAMaAIoAugNEA6YASAPYALAA7gP4A34D/ABgAEoACgOAA5wAVAPaA9IACAPyACIALAP2A64Aj - AAkA04DPgC2AGID1APKAEYAxAPAABAD8gOUA+wAdgOyA1YAFAAgA/IATAAGAAIABAPWAE4ANAOEACAAI - gPMA+oADAAGAF4D4gPEA+oAJAAGAAYDtgASAAYD+APOABQATgP2A/4D/gPeA/YABAPmA94ASAAuA/QAA - APyABAD0gPIACYAEAPGAAgACAP0A/QAMAAOA+4ABgAMAAQD9gPmA/gACgAQAAAADAAGA/gD+gPoAA4AC - gP+A+AAAAASA/YD7gAmABAACAPcAAQABAAGAAIAAAPwAAQAHgACA+oD+AAQAA4D3gP6ABoD/AP2AAgD9 - gAUAAIAAAAMA/oD8gAQA/wD+gACAAgAAgAIA/gD/AP0AAgAAgAKA/gD+APwA+QD9gAQAAQAUgAOAAAAC - gAaAAAABgAYA/YD/gP4A9gDxgPoA+AD7AAgAEQAEgNcAJ4DIgBeA2IAAgPcAHwD5gO+A7IAngCYA2IAb - ABKABgDhgAoACIDlgOYANAD8APKAJgD4AOQA3QAggBmA6YACgCgAzQD8gC0AC4DwAAyA6IAJgOMADAAi - AOoA8QAQAAEAHwDygOwA/oD8AAgAEgD7gPaA+YABAB0A94D5gAiA74D/AAUA/AAKAPkAAoAPgPQAAgD8 - gAQA+4DygPwACIAMgAQA8ID/AAAABIACgASA+wD+AAGABAADgAEA/QD+gPyABQAFgPwA/AADgP0A/wD+ - AAIA/wD8AAgA/QD+gAUA+4D+AP+AAAAJgAAA/ID6gP4AAwADAAGA/YD6AP2ABoAEgAEAAQD/gP+A/QAA - gAOA/oD/gAQA/oAAAACA/ID6gP+AAQABAAGAAQAAAP0A/QAAAACAAAAAAP8AAwABAAKAAAD/AP0AAQAD - AP+A/oD+gACAAQD/gACA/oAAAAKA/gD/gAGA/wD/gAAA/4D/gACA/wD/AACAAIADAP8A/4AAgP0AAoAB - AP6A/wD/AAGAAIABgAAAAAD+gAKAAID/gP+A/4AAAAEAAYD+gP4AAQD/AACA/wADgAKA/oAAAACA/wD+ - AAGA/gAAAAIA/4D+AAEAAgAAgP8AAQAAgACAAAD/gP6AAAABgACAAgAAgP+A/4D/AP8A/wACAAAA/gD+ - AAIAAYACAAEAAIAAgP6AAAAAgAAAAID+AAGA/QAAgAEA/wAAgACAAQD/gP4AAIAAgACAAIAAAACA/gAB - AAAA/wACAAIAAAD/AAAAAID/gAAAAIAAgP+AAID/AAEAAYD/gACA/gD/AAEAAQAAAACA/QAAgAEAAYD/ - gP8A/4ACAP+A/gAAgACAAID/AP8AAYD/gP+AAAD+gACAAQAAgP+A/oD/AAGAAAD/gP8AAQAAgAAAAAAA - gACA/gD/AP6AAgABgP8A/4ABAP8AAQAAAAAAAAAAgACA/4D/gP8A/4AAgP8A/4D/AACA/4AAAAAA/wAB - gP+AAIABAAEAAAD/gAAAAYD/AACAAID/gP6A/4D/AAEAAAABAP+A/4AAAACA/wAAgACAAIABAACAAAAB - AP+A/oAAAAGAAQD/AACA/wAAAAEAAID/gP8A/wABgAEAAAAAgP8AAAAAAACAAYD/AAAA/wAAgAAAAID/ - AAEAAAD/gAGA/4AAgP8AAAABAP4AAAABgP+A/4D/gAAAAYD+gACAAQAAgP+AAID/AAGA/4ABgP+A/wAA - AAKA/4AAgP8AAAAAgP8AAIAAAP8AAAD/AACAAAABgP4AAIAAgAAAAAAAgP8AAID/AACA/wABgP+A/4AA - gAAA/wAAgACA/4AAAAGA/wAAgACA/wAAgAAAAAAAAP+AAAAAAAAA/wABAACAAID+AAEA/4ABgP6AAYD+ - gAMAAAACgPyA/wD/gPwABgAFAAEA/AD7AAMA/AAEgPoA/AAAAAUAAoACgAKAAAD8gP2AAID+gP+A/wAC - gAIAAgD/AAEA/QD8AAEA/gD9AAMABgABgPsA/QACAAOA/4AAgP6A/AADAP8A/4D/AAOABAADAACA/QD9 - gAAA/4D7AAGAAoAAAP+A/4D/AAOAAID9gAAAAIAAAP6A/oAAAAAAAwACAAAA/wABgP2A/gD+gAAAAAAB - gACA/wAAgACA/wAAgP8AAQACgAEAAID/AP8A/wD/AAAAAAABAACAAIAAgACAAID/gP8AAAAAgP8AAIAA - gP8A/wAAgP8AAID/AP+A/oD/AAGAAAABAACAAAADgAEAAoABgAIABAAAAP6A/gD+APyA/wD6APwAAQD4 - AASABgABAPgAA4D+AAAA9AAMgA0ADID9gPqAAoD9APwA/gAFAAeA+ID+APuA/oD3AAaA+IAAAP2ABwAD - APwAAYAMgAOA/ID8gAEABgAGAAWABQACgACA/YD8APwAAAABgP4A+gD4APyA/ID5APyA/gAEgAIA/AD7 - APsA/YD+gAIAAwADgASAAoD/gP6AAAAAAP8AAwAFAAOAAIABAP6A/gAAAACAAYADgAOAAoACgACAAgAC - gAQABYADAAKAAwABgAGAAYACgAGA/gAAgP2A/ID8AP0A/YD5APqA+oD6gPoA+4D9gP4AAID/gP6A/gAA - AAGAAQACAAGAAYADgAIAAQAAgAEAAQABAP8AAQABAP+AAIAAgAGAAYACAAIAAgACgAKAAoABAAKAAQAC - gAGAAYABAACAAAD/gP6A/gD+gP0A/gD9gP2A/YD9gPwA/QD9gP4A/gD/AP8A/wD/AP8A/4D+gP4AAID/ - gAAA/4D/AACA/4D+AP+AAAAAgAAAAYAAAAAAAYABAAGAAgABgAEAAwACAAOAAQACAAEAAIAAAAGAAAAA - gACAAID/gP6A/4D+AP4A/wD/gP4A/wD/AP8A/oD/AACAAAAAgAAA/4ABAACAAAAAAAAAAQABAAGAAQAB - gAAAAAAAgAEAAAABAACA/4AAgP+AAYAAgAGAAAACgAGAAAACAAAAAAAFAAMAAwD/gPsA/IABAP6AA4D3 - gP+A/wAEAACA/4AAgPyA/QD+AP4AAID+AAEAA4ABAACAAQADgAAAAAABgP+AAYABgAEAAQD/gAKAAoD/ - AP4A/4D9AAKAAIAAAACAAQD+gP2A/YD+gPyA/gD/gAGA/4D/AP4A/oD/AACA/wABgP4AAIAAAAGA/wAA - AAEAAQAAgP8A/wAAgP8AAAAAgP+AAID/AP+AAAD/gAAAAIAAAAAAAID/gP+A/4ABgAAAAYD/gAEAAIAA - gP8AAQAAgAAAAIAAgP+A/oD+gP8A/4D/AP8AAAD/gP8A/wAAAACA/4AAgACAAQABAAKAAQAAgAGAAYAB - gAEAAQACgAAAAQABAAGAAAAAgP8AAIAAAAAAAQABgP4AAQD+AP8AAAD/AAMAAID/AAOAAID7APoAAwAF - gACACwADAP+AAAD/AAiA+AD7AAYA/ID1gPwACAAAAAGA+AD0gAAABYD5AAqAAQAFAP4A+4D0gAEAAIAD - gAOAAQADgAKAAAAAAP8ABAAFgAGA+YD8gP4ABAD9gPoA/oADgASA+QD6gAIABIADgAIA/ID+AP6A/wD/ - AP0A/wACAAQAAAD+AACAAAD+gAAAAgAAAACAAYD+gP8AAIAAAAEAAAD/gP8A/oD9gPyA/gAAgAKA/gAB - gP6A/oAAgP8A/oAAgAKAAoAAAP8AAQABgACAAgABgAEAAYAAgP8A/4D/AAKAAQABAAAAAIABgP6AAIAA - gP+AAYABAP8AAAAAAAGAAIAAAACAAQAAAAAAAAAAgAGA/wAAgP+AAQAAgAAAAAD/AAAAAAAAgACAAAAB - gAAAAAD+AAAA/wD/AAAAAIAAgAGAAQABgAAAAQD/AP+A/oD9gP+AAIAAgACAAAABAP8AAAAAgP8A/wAA - AACAAAD/gP8AAAAAAP4A/4D/AP+AAQAAAP8AAYAAgAEAAQABAAAAAID/gP8AAAD/gACA/4AAAACA/oAB - gP6A/wD/AP4AAID+gACA/wAAAAEAAIAAgP4AAAABgP6AAAD/gP+A/4AAgP+A/4AAgACA/YD/gP4AAAAB - gP8A/4AEAP8AAgD7gACA/QACAPwAAoABgP+AA4ABgAGA/gACAACAAQAAgACAAIAAgAEAAAABAACAAQAD - AAIAAwABgACAAYAAgP4A/4D+gACA+wD/gAGA/4D/AASAAAD9AAAA/4AAgP6A/gD+AP4A/4AAAAKAAIAB - gAGAAAAAAP+A/wD/AAGA/4D/AAGA/4ABAAAA/4AAAAAAAgAAAAAAA4AAAACAAAD+gP4A/wABAAIA/wAB - gAGAAgAAAP4A/4D9AAAAAgAAAAEAAID/AAAAAQD/APwA/oD9AAKA/gD+AAOAAoAAgP4AAAAAAP4AAID/ - AACAAAAAAAGA/oD9AAKA/4D9gP+AAIABgP6A/oAAgAIAAQD+AP8AAIAAgP4A/4D/gAEAAQD+AAQAAgD/ - AAGA/oAAgP6AAAAAgAAAAgACAAKA/gABgP0A/4D+AP8A/YD+AAAAA4ABgASAAAD/gAAAAAD9gP0AAAAB - gP+AAAADAAMAAIACAP8AAAAAAP8AAgADgAAAAIABAP4AAQD/gPyA/IAAAAAAA4ABgAGAAoAAgP4AAID/ - gP2A/AD/AP+ABQABAP4ABQABgP+AAYD7AAIAAID/gP+ABIAAgACA/ID+gACA/4D8gACAAoAAAAKAAQD/ - AP2A/gD/gACA/gD/gAMA/YABgAEAAIAAAACAAAADAP2A/wD/gP+AAQAAAP2A/YD9AAGA/4AAAP+A/wAA - gP8A/4D+AP+AAAACAP4A/wADAP6AAoD/gAGAAYD+AACAAQABgP+A/YAAgP6A/4AAAAKAAAABgAKAAAD+ - AP+A/4AAgP4ABIAAAAEAAAADgP6A/YABAASA/AACgP+AAID/gP6A/4D7APuAAYACgAQAAAD9AAEAAQD9 - AP+AA4D9gAEA/wAAgP6A/wACAAEAAwD/gAGAAIABgP6A/QD9gAIAAYAAAACAAYABgAEAAYD9AP+AAQAA - AP8AAoABAAAAAgABgP4A/wACgP+AAIABAP6A/wD/AAIAAID+AP4AAQD/gP+AAYD9AP+AAYD+gAIAAID/ - AAKAAYD+gP+AAoD/gP+A/gD+gAIAAoD6gP+A/wD/gACAA4D+gP+AAID+gAOAAAD9AAKA/4D+gP8AAID/ - AACAAAACAAIAAwD9gP0A/oD9gACAAAD+AAMA/YD/gAAAAYD+gAGA/QACgP6AAQAAAAMA/YAAAAGA/oD/ - gACAAYD/AP+AAYABgACA/oABgP4AAAD/gACAAAD9gAGAA4D/gP+AAQADgP4AAAD/gAKA/QD/AAMAA4D8 - AP+A/gD/AAOAAgD8gPuABYAGAP4A/YACAPuA/YABgAQAA4D4gAIAAAD6gAEABQD+gPwAA4AIAAAA/AD+ - AACA/IADAPYACQD8gAAA/wAPAPUACADzAAgAAwD7gAoABQAJgOOA6IA8AN8A94AagOkAGID/AOAAKADk - APwAFAD+APeABIDtACYAFoDUAMYAFoAygP8A84D3gCSAGQDKgPcA1YApAAGACADmACiA4QAEABCAGIDn - APqA/QA4AN+A4oAPgA6A/wDvACyA/ADZAOEAFgD/gD8A7AD2APWACIAEAMUA8YA/gAWA1ADmgD+AC4DY - gOwAJADxgOcA/QAfgA4ABgD7AO6ABYD+gOGAEAAOAAqA3gAFgCwA8wD5gNyACQAJAPiABoDvgO+ALAD6 - AASA5wADABQA+ID6gAKABgAGgPcA+QAXgOWACoD7AAGAAIAOAOmAEwD1gP8A8YAWAAyABADjAAoAAoD3 - APgAEgAAgP+A7wAIAAUAAwAEgP6A+QAEgAkA9oD+gP0ABQAEgP8A/QAEgPyAA4ACAP0A/oAOAPYA/QAI - gAGA/4D+AAKAAYAAAPmA/wD+gP0A/4D+gACABoD9gAGA/YADgAUA/YD6gAOA+QD/gP8AAgD+gP+AAQAG - gP8A/oD+gAAA/ID+gAKAAAABgPwA/YADAPyABIACAAAABID9gPyAAgD/AAWA+QACAP8A/4DvAAwAFYD0 - AOUA8wAJgCGAEwDoAN+A+YATgAoAAAD+AOkABAAcgAeACAAGgO+ADoAGgAoACYD3AO8ACwAFAAQA/oAA - AAAAAIAFAAEA7oAKAAeA/YD/gP0A+gAGgPsA9gABgP8ABoD+gPaA9wD/AAuAAwD8gAgAAQAAAP8A8IDv - gAKAA4D7AAMAA4AFAAKAAwD8AACA/oAAgPuA/YD2AAKA/4AEAAIAAoD5AAaAAYADAAGA/4D9AAMAAQD+ - APsA+YD6AACA/gADgPuAAwAFAAEABAAHgAGABAD+gP2A/AADgPkA+wD/gAGAAID/AAAAAIABAAKA/wAB - AAQAAQADAP8AAoAAAP+A/wD6AP+A/4ACAASAA4AAAP+AAQAAAPyA/4D/APyAAwABAACAAwD/gACA/wAH - gAGA+4AAAP2AA4AGgP6A+YAAAAAA/AAAgP4AAAAAgAEAAwABAACAAYD+gASAAYD8gAEAAAD8gASA/AD/ - gP8AAAD/gP0AAYAAgP0AAYAEgP8AAoD/AASAAIAAgPyAAYD/AACAAAABgAIA/YAAAAAAAQAAgP+A+gD+ - AAmA+gABgAMAAYAAAP2ACAD8AP8A/ID+AAMAAwADAPuAAIAAAP4A/wD/gP8A/QABgAAA+wAEAP6A/wAF - AP6A/AACgAGAAID/gP2AAYD/gAAAAAD/AP8AAgD8AAAAAoD/gAMAAoAAAACA/wD9gAGA/gD/AAIAAQAA - gACAAAAEgAAA/IAAAPwAAoACAPyAA4D8AAMA+4ACAAAA+oACAP4AAIADAAAAAIABgAAA/YABAP+A/4D7 - gP4ABID+AP4AAgD8AAOAAQD8gACAAgD9AAAABAD9AACA/oAAAP+AAID/gAKA+4ADAAAAA4ACAAAA/wAB - AP8A/QABgAAA/oACgAEAAYABgAEAAoAAgAAA/YD9gAMAA4D/gAEAAID+gAEAAgABgPmAAYD9gAEABYD/ - APwAAAABAAEAAgABgPyA/oD+AAIA/4D/AACA+wAEAAIA+QD8AAgAAQD4gPiA+gAKAAmABAD2APWA+4D+ - gP6ABIACAPsABQAKAAUAAQAIgPmAAoAFAAgAAQAGAPwA+gAKgAAA+AD+AAaA/QD2gAuAAgD/gAGAB4D6 - gP4AA4D4gPgA+4ADgP+ABID+gPyA/ID+gASABoABgPwA/wD/AP2A+QD5gPoABYD/gACA/YAAAAOABYAB - gACAAgD8AAKA/oD7AP4AAID6gAAAAgADgP6AAIAEgAOAAoD+gAEA/oAAAP+AAYD9gP8AAID+AP6A/4AB - APwACQAFAP+ABYABgAAA+wAFgPoA/gD/AAAAAYABAAGA/4D8AAOAAgAAgAAA/ID8gAOABYD8AACAAQAA - AAYA/YD7gP4AAwD8AAMA/4D+gP8AAwD/AAEA/oD+AP+A/gAAgAAAAYAAgAOA/4ACAP2A/YACgPwAAgAD - gP6AAAABgAEAAQD/APyA/wAAgAMAAQAAAAKAAQD+gAKABAD6gPwAAoD9gAEABAD8gP+A/wD9gAIAAAD/ - gPwA/wD/gAIA/4D/AAAA/wAFgP0A/4AAAP4A/4ADgP2AAQD9AAQA/gABgP+A/wD9AAAAAoAAAAGAAQAB - AAAAAgD8AAIA/QABgAYA/gD+AAKABoD3AAOABAD8gPiAA4ABAPuACAAAAP0A+4AAgAcA/QAAAP8A/YD6 - gP+AAYD9AAKA/QD+AAgABID4gASAAoAFAP8ABoD+AAMABAD9gP0A/oD9gAKAAYD+AAAAAIAEAAOA/gD+ - AAGA/IAFgP2A/IABAAKA+4ACgP+A+4ACgP6A/YADAAWAAYACAAOA/gD8gPsA+oD7AAWA/AAAgAIA/wAC - gP8ABwD8gP0AAoD9gAKAAAD+AACA/YAAAAKA/wD/gP2A+wACAAKA/AD9AACA/wAHAAIA/oD+AAEA/QAE - AAEA/YD/AAEAAYABgP8A/wD+AAEAAYD+AAQAAID+gAGAAID8gAAAAYD/AAIABAD+gAEAAQABgAIA/YD/ - gP0AAIABgP8AA4D+AP+AAQADAAGA+YD+AAQA/AAHAAOA+QD/AP+AAIADAAGA+gD9gACAA4ADAPwA/4D+ - AP0AAwD/gP0AAoD+AP6ACoD+gP6AAgAAAAOAAYD/AAIA/gD/AASA/gADAP6AAAAAgAGA+wAAAAMA/ID/ - AAQAAoD6gAEAAoAAgPyAAAAAgP6AAID/AACA/IAAAASA/4ADAPwA/wD/gPwAAQD/AAKA+4AAgP+AAgAA - AP0A/oD/gAKAAID8gAEAAIAAgASA/YD7AAAAAQD/AAGA/AD/gP+AAAACAP+A/4ABgPuAAwAAgP8AAoD9 - gAIAAQAAAP8A/oD9AAAAAIAAgAAAAwD/gAOAAwD/gP+A/wABgAOAAIAFgPyABAD9gAEAAoD5gAAAAIAB - AAOA/wD/AP+AA4D+AAUA/ID8gP6A/QADAACA/AADgAAAA4D/AP+A/QD+gP4AAwABAAAA/4D9gAGA/4D/ - gP+A/4D8gAKAAYD+AAKA/oABAAGAAQD8gAAAAoAAAAKAAoD/AAEA/4AFAAAA/oD9AP4A/4AAgAGAAoD9 - gAMAAQABgAMA9gACAAIA/QAFAP8A+gAAgAGA/4ABgAAA/AD8gP4AAYAAgPwAAoD/AAMAA4D8AP4A/gAA - AAAABID/gP2AAAABAACA/wD/gP+A/YD/gASA/wADAP2ABYABAP8AAQD5AAGA/oAIgPyA/wABgAEA/oAF - gAKA+QD8gAOA/gAAgAUA/oD+gAGAAQAFgPkA+wAFAP4ABAABgP4A/oD/AAGAAIACAP6A/YD9gACAAgD/ - gP6AAYD/gAMAAQD/APyA/4ABAAMAAAD/AP+AAgD/gAEAAAD+AP4A/4AEgACAAgD+AAIAA4D+gACA+wAA - gACAAgACAAOA/oABgP8AAgD/AP2A/IAAgAIAAIABgAAA/wADgP4ABYD9APiAAgAAgAGAAoAAAPyA/oAC - AP+AAoD/gPuA/oAAAAOA/YD/AAAAAYAEAACA/AD9gAAA/wABgAKA/4D8AAKAAAAAAAEA/gD/AP+AAoD/ - AAOAAYD+AAOA/gAAgPqA/wAAgP+AA4ACAP8AAYD/gAIAAID+APsA/4ADgAEAAID/AAAA/4ADAAEAAgD3 - AAAAAQD+AAUAAQD9gP4AAAABAAMAAoD9AP6A/wD+gAOA/YD+gAIAAIADgP8A/QD/gP6AAAAFgP0AAAAA - gAIA/YAAgAKA/YD8gP0AB4D/AAAA/4AGAP2AAYABgPuA/4D9AAQAAwD9AAGAA4D8gASAAAD5gPwAAwAA - AAOABAD6gP+AAQAEgAMA+oD7AAMA/YAAgAIA/wD+AACA/wACgAGAAAD9gP2A/4D/gACA/oABAP6AAoAB - gP0A/wD9AP8AA4ADgP6A/4ACAP8A/4D/AP0AAID9AAWA/gACgP+AAgD/AAOA/4D7gAGA/YACAAOAAYD+ - gAGA/wABgP+A/oD6AAIAAwD8gAQA/oAAAAEAAQAFgPmA/IAAAP4AAYADAP4A/YD/AAOAAIABgPyA/ID+ - gAEAAoD9AAEA/wACgASA/4D8AP0AAQD+AAUAAQAAAP6AAYD/gAEAAID/AP4A/4ACAACAAoD/gAIAAAAC - AP+A/AD/AAAAA4ADgP+A/wABgAMAAYAAAPyA+4ACAAEAAAACgP6AAAAFAAEABYD5gPqABAD8gAIABID/ - APyAAoABgAAAAgD/APsA/wAAAASA/oD/gAAAAQADgP+A/AD/AP4A/wAEAAEAAQAAAP6AAoABAP4A+QAF - gP+A/QD/gAgA+wABgAIAAgD9gPuA/4D/gAIABQAAAPsABAD/gAMA/4D6AP6AAwAAgP4ABAD+gP+AAwAD - AAMA/AD5AAOA+gADAASA/gD9AAAAAQACgAOA+oD9gP6AAYABAP0AAIABAAAABAD+gPuA/gD+AAAAAgAD - AP6AAIAAgACAAAABgP2A/YD/AAOA/4ADgP0AAgABAAAAAAD8AACAAAACAAKAAAAAgAAAAoABgP4A/gD+ - AAEAA4D7AASA/QADAAIAAYAEAPkA/YACgP2AAgABAACA/IACgAEAAIAAAP2A/AAAAAKAAQD9gAEA/oAE - gAMA/wD7gP0AAYAAAAKAAwD+AP+AAQACAP+AAID9AP4AAAAFgPyABAAAAAEAAIABAP0A+4ABAAEAAAAF - AAEA/YABgAOA/wD/gP6A+gAAgAKA/wAAgACA/wAEAAIAAgD7gPmAAwD8gAMAAwAAAPsAAQABgAEAAgD+ - APqA/gAAAAQA/QAAAACAAYAEAP4A/QD9gP6AAgABAAIAAgD8gPwABgAGAPcA/oAFAPyA/wACgAUA/AD/ - AAMAAoD9APyAAwD9AAEABYAAgP6AAQD/AASAAgD8gPoAAQADgP0AAwAAgP0ABQADgACA/YD5gAKA/gAB - AASA/oD+AACAAQABgAKA+4D+AP+AAQAAAAGA/gD/AASAAoD/AP6A/YD/AACAAIACAAAA/YAAAAMAAAAA - AP2A/gABgAAAAoAAAAEA/YAFAP+AAYD6AP4AAQAAAAEABAAAAP+AAAACAAIA/YD8AP2ABID/AACAAAAA - AAMA/4ADgACA9gABAAGA/4ADgAEA/QD+gAIAAQABAP8A+4D+gAAAA4D/gP0AAYAAAAQAAAD/gPqAAIAA - gP+AAgADgPqAAAAEgP6A/4D/AP2AAYAAgAIA/4ACgP6AAoAAAAAA/QD6AAQAAIABAAMAAoD/AAGAAIAB - AAAA/gD4AAIAA4ACgP6AAQD/gAQA/4AFAPwA94AEAP6AAQAFgP6A+gABgAGA/4ADAP6A+wD/AAGAAoD/ - gP+AAIAAAAQA/oD+gP0AAAD+gAIABID+gP6AAQAAgACA/wD/gP2AAYABAAGA/gADAP6ABoD7gAIA+oD+ - gP8ABIACgAIA+wAEAAIA+wACgAKA+QD9AAYAAAABAP4A/wABAAQA/oAGgPeA+gAEAP0ABYABgP0A/QAC - AP6AAoABgP2A/AD7gAWA/wD+gP8AAAAEgAAA/wD+gP2AAID/gAIAAQD+gP4AAgD+AAKA/4D9AAAAAYD/ - AAKAAIABAACAAwD8gAOA+YD/AAIAAYAAgAUA/gABAP+AAYD+AAKA+oD/AAMA/4ABAAGA/wADgACAAoD/ - APqAAAACgP6AAgADgPoA/QAEgP8AAoD/AP0A/wAAAAEAAAD+AAIAAIADAAAAAwD5gP+AAIAAgAGABID6 - gP8AAgD/gAAAAoD8gP+A/4AEAP6AAoABgAAAAID/AP0A/YABAAGAAAABgAUA/oAAAP8AAQAAAAEA+wD+ - AAIAAQD/gAGAAAABAAIAAQACgPeAA4D9gACABIAAAPuA/gACAAAAAgACgPsA/oD+gAKAAAD+gAEA/wAE - AP8AAQD+gP2AAAAAgAIAAID+AAAAAAD/gP8AAID+gP8AAIACgAAAAAABgAEAAwAAgPiA/gADgAEA/IAF - AAUA/QAAAAAAAoD9AP+A/QD/AP8AAwAEgP2AAAAAgAQA/YAFgPuA/QADAPmAB4AAAP2A/QACAAEAAYAB - APyA/YD/AAOA/gD+gAGAAAAEAACA/4D/gPwAAIABgAEAAgD+AACAAAD9gAIA/gD+AAEA/gACAAMAAIAC - gP0ABYD9gAAA+4D8AAQAAID/gASAAAD/gACAAQD+AAGA/AD9gAKAAQD+AAEAAAABAAKAAIAAAP6A+4AE - gP+AAIABAP8A/IABAAGA/wABgPsA/4D/gP8AAwD8AAMA/4AEgP4AAID/APoAAgABgP+AAgD/gPuAAoAA - gP6AAQD+gP8AAIACgAEA/wACAAEAAoD/gP2A/gD6gAMABAD/gAKABID8AACAAIAAAAAA/4D6AP+AAwAA - AAGAAYAAAAIAAgD+AASA9wACAACA/gAFAACA+wD+gAIAAYACgAAA/ID9gP+AAgAAgP+AAID/AASA/oAA - gP6A/YABgAAAA4AAgPwA/wADgP2AAAD/gAEA/QABAAKAAQD/AAOAAIAGgPUABAD9gP4A/wAFgAOA+wAG - AP0AAgD5gAaA/YD8gP4AAwACAP8AAwACgPyABQD7gAKAAoD5gAEA/oAEAASA+YABAP6AAAACgAMA+oAA - gPuAAgABgP2AAYABgAOAAAD9gAEA/AAAAAIAAoD+AAGA/IABgPwAAwAAAP4AAQD9AP+ABAAAgAGA/4AC - AP+A/gD/gPmAAgAEAACAAAAEgP0AAQD/gP6AAgD+APyA/oADAACA/4ADAAGAAYABAP4AAgD5AACABYD8 - gAOA/wD9AP2AAwAAgAKA/QD+AP2A/oADAAEA/gACgACABAD/gAAA/QD8gAOAAIABgAAA/gD7gAUA/IAD - AP8A/oD+gACABIAAAAIAAYD/AAKA/gD9gPyA/AAGAAAAAIAEgACA/YAAgP0AAQABgP6A+YABgASA/wAA - AAIAAYAAAAOA/IACAPmAAYAAgP4ABgD+gPsA/YABAAKAA4D/AP6A/QD9AASA/oD/AAIAAAADAP+AAID9 - AP+AAoD+AAGAAAD8AAEAAAD+gAGA/4ABgP2A/wAEgAGA/YD9gAiAAoD3AAAAAQD7AAOABoAAAACA/gAA - APyA/gAHAP+A/YD7AAMAAAABAAAAAoD+gAaA+4D/AASA9wADAP4AA4ABAP6A+wD/gACAAwADAPsA/4D8 - gACAAwD9gAEA/4ADAAIA/QADgPqA/wADAAGA/4D+AP0A/4AAAAGAAQD+AACA/AAAAASA/wABgAKA/4AD - APsAAgD6gP8ABQAAAAGAA4D+gACA/oD/AAOA/oD8APyAA4ABgP8AA4ABAAEAA4D9AAIA/gD7AAUAAIAA - AAGA/YD8AAIAAYACgP+A/YD7gP0ABIABgP4AAoAAAASA/4D+AAEA+wACgACAAYAAgP6A/YABAP8AAIAB - gP2AAAD/gAGAAgD+gAIAAgABgAAA/AABAPoAAwAFAP4AAwADAPwAAID+AAGAAQD+AP2A/AAEAACAAgAB - gAEAAYADAP4AAgD7gPwAB4D6gAIAAgD9APoABAABAAOAAID9gPyA/IACAAEAAIABAAAABID/gP8AAQD6 - gAKAAIAAAAIA/QD9AAKA/wABgP0AAQAAAP4AAAAEAASA/AD/AAYAAgD4gAMA+wACgACAA4ABAACA/oAB - gPoAAgADAP+A/ID+AAOA/4AEgACA/oAAAAaA/IABgP6A+wAEgP2ABQD9AP8A/oABgACAAwD/AP0A/gD/ - AAGAAYD8AAQAAIAFgP2A/wABgPoAAIACgAIA/gD+gP6AAYD+gAIA/wD/gP+A/YACAAKA/wACgACAAQAA - gPyAAQD5gAQAAoACAACAAQD+AACA/wABgP8A/wD8AP6ABAAAAACAAoAAgAIAAYD8AAOA+oD/AAQA/wAB - AP4A/4D8AAQAAQABgP2A/YD7AAGAAoD/AP6AAgD/gAOA/oABgP0A+4ACAAIAAQD/gP+A/AACAP8AAAAB - AP4A/wD/AAQAAAABAAIAAQAAAP+A/ID/gPqABoAAgAEAAoACgPuAAAD+gACAAID/gPyA/YAFAAAAAIAB - gAGAAIADgP2AAAD+gPwABoD7AASAAAD9APwAAwAAgASAAQD9APqAAYABAAAA/4ACgACAAYABgAAA/4D6 - AAEAAgAAAAOA/QD/AAOA/oD6AAcAAQD5gPwACAABAP6ABAABAP+AAID7AAKA+AAFAAMAAgAAAAOA/gD8 - gP2AAAABgAIA+4D+AASAAQD/gAGAAoD9AASA/gAAgP6A+4AHAPsAAQADAP0A/YD/AAGAAYABgP0A/YD/ - AAKA/gAAAAOA/oAEgP+A/4D9gPyA/4ACAAIA/QACgP4AAQD/gACA/wD+AACA/IABAAQAAIABgAAAAgAB - gPoAAQD5gASAAgADgP8AA4D+gP4A/gAAgP8AAQD+gPyABYACgPyAAQADAAEAAoD8AAMA+4D8AAiA/oAB - AP+A/4D8gACAAoABgP6A/oD7gAGAAYAAgP4AAoAAAAOAAYD+gP8A+4ABAAIAAoD+gAGA/IABAAAA/4AA - gP4AAAD/gAKAAgAAAAKAAYAAgAGA+gABgPqAAoAFgAEAAQACgP+A/YD+AAAAAAABAP0A/AAGAAGA/wAC - AAKA/wACgP2AAQAAgPiAB4D9gACAAYD+APuAAAABgAGAAID/APwA/oAAgAGA/QACgAAAA4AAAP6AAAD7 - gACAAQD/gAEAAgD6AAAAAYD/gP+A/IABgP8AAgABAP+AAoABgP6AA4D5gAAA/QAAAAQABAABgACA/QD+ - AP6A/gACgP8AAID8gAQA/4AAAAGAA4D9gAMA/YD/AAOA+AAEgAAA/wADgP8A+gD/gAMAAIADAP4A/gD9 - AAKAAID9AAKAAIACgAOA+gADgPyA/gAAgAIAAYD/gP8A/gABAP8AAgAAAP8A/gAAgAKAAAACAAGAAQAD - APoA/4D9gPuABwADgAIA/QAEgP2A/YD7AAMAAAADAPkAA4AEgP4A/gAFgP+AAgD+gP6AAgD4AAQAAoD+ - AAEAAID8AP2AA4ABAAIAAAD+APuAAQADgP4AAAACgP4ABgD+gAGA+wD8gAGAAoABAP+AAAD+AAIA/QAB - gP+AAAD+AAAAAwABAAAABQAAgAIA/ID9AP0A/wAGgAGAAQACAAIA/QAAgPwAAQD/AAOA+gACAAWA/oD+ - gAOAAAABAAKA/YABgPoAA4ACAPwABAAAgPwA/QABAAEABYAAgPwA/YD/AAEAAID+gASA/gAFAP8A/4D/ - APsAA4D/AAKAAoD9AP2ABID+AP6AA4D+AP+A/IABgAKAAIACAAIABAD8AP0AAYD6AAOABAADAAKAAYD7 - AP4A/QACgP8AAYD9AAEAAgD/gAKAAYABAP6AAoD8gAQA/ID9gAQA/AADAAGA+wD+gAAAAAAEgAGA+wD9 - gP0AAwD+AACAAwD/AAMA/wADgPsA+wACAAKAAAAAgAAA/IADgPwA/wACgP0A/wD+AAIAAgABAAOA/oAE - APwA/gD/APuABIACgAGAAgABgP4A/4D7gP8AAAACgPsAAYAEAP4A/gAEgAEAAoD/gPyAAoD6gAAABAD+ - gAKA/wD9AP2A/4ABAAOA/4D8AP2A/gADgP8A/4ADAP6ABoD9gAEA+4D9AAGAAwAAgAEA/4D+AAEA/QD/ - gACA/wAAAPwABQACgP+AAwAAAASA+oD/gPyA+4AEgAOAAwABgAAA/YD+gPwA/4ABAAWA/YD4AAMABAAE - AAUA94D+AAOAAoANAPGA7wANgAmABYD6gPAAA4AGAP6AAYADAPYA/oACAAOA9wACgAeAA4ABAPyA/oAB - gP8A/ID8AAiAB4D4gPsABID+gP6ABAD+gP2A+gAEAAKAAgADgAGAAgD7gAIA+4D7AAQAAwAFgAOA+wD+ - gP+A/AACAAGA/QD/gASA/4AAAACAA4AAAASA/YD/gAEA+gADAACA/wAFAP4A/IAAAACAAIAEAPyA/wD9 - gAAAAoD+AAMAAAAGAP8AAgD9APuA/4ABAAOAAQABAP2AAgD/gP6AAQD/gP8A/QABAAaAAAADgP4ABgD+ - gP6A/YD6gAOAAwACgAOAAwD8AAGA/AAAAAAAAID6AAIABAABAP8AA4ABAAOA/4D8AAGA+oABAASA/AAF - gAGA/ID8gAEAAAACAAGA+wD8AACABYD9AACAAYD/gAYA/gD/gPmA/4D/gAOAAAACgP0A/oACAP2AAYAA - APyA/wD/gAOAAAACgAGAAIADgPqA/oD5gAAABAACAAMABoD8gP8A/gD9AP4AAoD9gPoABQAEAP8AAAAE - AP4AAoD+gACA/wD8gP+AAoD/AAUA/QD9AP0A/4ADgASA/AD8gPwA/4AEgPyAA4D8gASAAYACAPoA/QAE - APwAAIAFAACA/IAFAP6A+wD/AAEA/gD8gAGABYD/AAOA/4AEAPwA/gD/APuAA4ABgAOAAoAAAP4AAQD7 - gAOA/4D9AP0ABAD+gASA/4ABAP4ABAD+AP8AAgD4gAIAAwD+AAWA/oD6AAGAAQD/AAMA/YD8gP2AAQAB - AP6AAoAAgAOAAYD+gP8A+4D/AAIAAAAAgAKA/AABgAGA/oABgP0A/oD/gP+ABAD/gAKAAYABAACA+oAA - gPoAAAAFgAGAAIAFgPwAAAD+gP8AAYD/APsA/gADgACAAAABgAKAAgD/gPyAA4D6AP8AAwD/gAAAA4D8 - AP2AAgABgAEA/4D9gPyA/YAEgAKA/YACAACABQD9AAOA+wD8gAEAAgABgAAA/gAAAASA/QAAgP8A/4D+ - AP8AAoACAP8AB4D9gAMA+4D9gP4A/QACgASA/4AEgAAA/oD/gP6AAQD9gAGA+gABgAGABAD/gAGA/4AD - gP4AAID/APoAA4AAAAGA/wACAPyAAoAAAAEAAQD/APyA/QAAgAKAAIAAAAEAAwAEgPgABID8AAAA/QAE - AAQA/YD8gAKAA4D4gAaAAID+gPoAAoAAAAMABAADAPwABgD6gP6A/IAAAAOAAQAIgP8A/gD+gAKA+gAF - gP6A+4D7AAYA/gACAAOABwAAgAGA/YD7AAKA94ACAP6AAQAFAP8A/AACAAMA/oACgP6A+4D9AAGA/gAC - gP8ACAABgASA9AAIgPyA+YD9AAaA/oD+AASA/QAEgP6ABID/AP0A/oD/gAAAAIAFgP6AA4ABAACA+YAE - APkAA4ABgAGAAIABgP4A/gADAAEAAQD/AP4A/IACAAEAAQABgAIAAoADAPqAAYD/gPmABAABAAGA+gAC - gPwAA4ADgACA/wD+AP2AAoD3AASAAYABgP8AAoAEgPwAAQD8AAAA/4ABgAGA/ID/APwABoD7gAMAAYAA - APwABAD7gASAA4D/AAAAAYD8AAAA/wD6gAMABIAAAP+AAgD8AP6ABAD7gASAAID9APeABYACgAMA9wAG - gAiA9QABgAKAAgD6AP6ABAD9gP8A/4D9gAIA+gAHgAMA+QD/gP6A/IACAAyA+gACAP4ABoD7AP4A/4D7 - gAMABID/gPsAAYD8AAQA+gAEgAIA/wD6AAUA/wADgAAA/4AFAAEA/gD5AAUA+4D/AAWAAgD+AP+AAAD7 - AAAA/QAHgACA/YD8gAMA/gAGAP2AAwAAAAKA/oD9gAOA94AFAP8AAQD9gACA/QAAAAOAAAADAP0A+gAA - AAGA/gAEAACAAwAAAASA+QACgP0A/YADAAAAAQD6gAEA/YACgP4AAgAEAP2A/4D+gP+AAIAFgP2AAYD/ - gAGA+oADAPwA/wAFAAAAAID+AAMA+oACAP+AAoACgPsA/AACgP8AA4ACgP8AA4D/gAMA+QAGAPiAAoAD - gACA/AABgP4A/YADAAIAAgABAPqA/IABgP8AA4ABAAEAAoABgAEA/QAEgPeABQD/gAKA/QD+gP6A/gAD - AP6ABAABgPwAAYABgP2ABQABgP8AAQABAP+A/oADAPiABoACAAKA/YACgPwA/gACgP+AA4ACgPqA/QAF - AP4ABYABAAEAAIABAAEA/AAEgPmABID/AAKA+gACgP2A/QAEAAMAAAAAgPwA/wD9APyADAD8AAEA/oAI - APeABAACAPmAAYD+AASA+4D/AP0AA4D+AAGAAwD+APwAAQACAP4ABYD9gAOA/gAEAPsA/4AAAPsABoD/ - AAIA/IACAPyA/oD/gAKAA4D+APoAAgABgP2ABgAAgAKA+wAFAPwA/wAAgP2AAoD8gAMA/QAAgPuAAYAD - AAIAAoD8APoAAoD9gAAABQD+AASA/gAFgPmABID8AP8A/4AAgAKA+gAAgP2AAgAAAAIABQD9AP2AAAAB - gP8ABQD+AAMA/wAAgPwAAgD+gP0ABAABAAOA+oAFAPoAAYD+gAQAAQAAAPmAAgAAgAGAA4ACAAGA/gAD - APuAAwD8gP4ABID/gP8A/wABgPqABQABgAMAAID8APoAAwD9AAOAAwAAAAAAAAAEgPuABQD3AAGAAAAC - gACA/ID/gPwAAwD+AAQAAYD+APwAAYACgACAAoABAACAAAD+gPyAAgD7AAMAAYABAAGAAoD+gPsAAQD+ - gAMAAAABAPkAA4AAAP0ABYAQgBMACQDwgPOACAD8gO0AAQD6gPyA5QAHgDsA4AACgAOAEoD9APqA7wDl - ACYA7YD3ABkA5IACAOKAH4AYgO4A74ALgPYAFAD+ABSA5QAFgAuA7oD7AAOA8gABgA2AEwD6gO0A9oAa - APyA4IAOgBqADAAFgPyA9gAEAASAAQDwAAGA8oAQAP2ADwDqgAuA/oADAP4ADID1ABGA+QD3APmACgD5 - gAQABoD+AAoAAwD5gPyA+YD+AO+A/4DOgBKAHYDdAAIA8wANgAAAEIDKgCQA5IAdgPCA2IA8AMYABAAG - gPCAJoAlgO2A1QD9ABEAIIDAgBIAOoDKgOQADIANACmAGwD5gN6A5AAPgCCA+AD1gAiA4YAmgAoACoAC - gPWACoD0AAgA+IABAAGACoD3APSAEoDygBKAAQDxgA6A8AAAgAAA/YD7AAiAB4AGgPwA9wAHAPmAAgAA - AAmA/QD5gA6A+wD4AAYA+gADgP4A/AD+gAGABYAEgAkA+IANAP2AAYAIAPYA/AAOAPUA/wD4AA0ABQAK - AOcAEoAJAP4AAQD2gP2ADAD1gASAC4D5gAkAAAD+APoAAYAIgP6A9oAHAAEAAIABgP8ABQD6gAOAAoD6 - AAKA/gAAAAOAB4D0AASAAAD+APyADIAAgP+A/AD8gAgA+oABgPyA+4AGAP4A+YAQgPKABYD+AAiA/QDw - ABGACQDwgAKA/AAQAP6A+4D8gPuACIAFgPaA+AAEgAMAAwD6AACACQAHgPUA+QAIgAGA/oD4AAEABoAA - AP0AAgD6gPsABIAFAP4A+wAAgAQAAwD0APwABAAMAAKA+AABAP4ABoD+gPeA/4ACgAGA/IAAAAIA/4AA - gASAAIAAAP+A/wD7AASAAwADgP+A/oD7gAAA/QABAACA/oABgAMAAQD+gP0A/wADAAAAAoABAP8A/YAA - gAIAAAD+gAIA/4D9AAEA/YACgPyA/YAEAAGAAQD/gP8AAoACgP0A/QACAACA/wACAAGAAQD9gP4AAIAA - AAEAAIABgP2AAAABgPsABAABAAAAAgD9gP6AAgABAAUA/4AAgP2A+wAAgP0ABQACAPwAAQD+AP0AAIAB - gP6AAAD+AAaAAQAAAP0AAQD/AAMA/AD/gAGA/YD/gPyA+gD6gAOABwD5AAQAC4AFgPuA/QAAgACA9YD7 - gAYAAoD+gAGA/4ACgPsA/wD5gAAABoAEgP+A/wD9gP+A/wAKAP8A+gADAACA+4D8gAKABIACAP6A/gAC - gPuAAAD7AAMAA4D/AAGAAoD/APqA/4D+gAMA/QABAAUAAYADgPsA/QADgP0A/4ADAP8AAYD+AP8AA4AA - gP+A/4D+gAKA/oD+AAUA/oD7gP+A/oABAP2A/4AEgAGAAoD/AAIAAQD+gAAAAwABAPyA/gAAgAGA/IAB - AAUA/4ACAAEA/wD/AAAA/gACAAAA/wABgP2A/wD/gP6AAIAAAAEAAYD9gAOA/QABAAEAAQABgPuAAYAB - gPsA/wABAP+A/wD/AP8A/wAAAAMAAYD+AAGAAYD/gAEA/QD/gP8AAIAAAP8AAID9AACAAIACgAAA/oAD - AACAAYD/AACAAQD/AP6A/gAAgP6AAYACAAMA/wACgACA/YAAAP8A/gD/AP+A/4D+AAAAAQAAgP8A/4AC - gP8AAAAAgP4AAID+gP+AAAD/AACAAID/gP6A/4AAgACA/oABAAGA/4ABAACAAAAAAAIA/oACAP4AAAAC - AP8AAgABgACAAID/gP8AAQAAAAIAAID/AAKAAIAAgAEA/4AAgP+A/oABgP8AAQAAgAGAAYAAAP8AAYD/ - AP8A/wD/gAEA/4D/AAGA/4AAgAAAAID/AACA/4D/AAEAAAD/AAAAAAAAAP8AAYD/AP8AAQD/gP+AAAAB - gP+AAID/gP8A/wABgP8AAID/AP4AAYD/AACAAYD/AAAAAIAAAACAAID/AAAAAQAAAAAA/wAAAACA/wAA - AACAAAABgP+A/wAAAP8AAAAAAP8AAYD/gP+A/4D/AACA/4AAAACAAID/AACAAAD/gP8A/wAAgP8AAAAA - AAAAAID/gAAAAIAAgAAAAAAAgP+A/wABgP8AAYD/AAAAAYAAgACAAID/AACAAIAAAAGA/4AAgACAAIAA - gAAAAAAAgACAAIAAgAAAAAABgP+AAAABgAAAAAAAgAAAAID/gP8AAQAAgP8AAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAID/gACA/4AAgP+AAAAAAAAAAIAAgP8AAAAAAAAAAID/gAAAAID/ - gAAAAID/gAAAAID/gAAAAAAAAAAAAID/gAAAAAAAAAAAAID/gACA/wABAP+AAAAAAAAAAAAAgAAAAID/ - AACAAAAAgP8AAAAAAAAAAAAAgP+AAAAAAAAAAAAAAAAAAAAAAAAAAID/gAAAAAAA - - - \ No newline at end of file diff --git a/src/Greenshot/Startup.cs b/src/Greenshot/Startup.cs index c21beefa1..8f8e770d5 100644 --- a/src/Greenshot/Startup.cs +++ b/src/Greenshot/Startup.cs @@ -32,8 +32,8 @@ using Autofac.Features.OwnedInstances; using Caliburn.Micro; using Dapplo.Addons.Bootstrapper; using Dapplo.CaliburnMicro.Dapp; -using Dapplo.Ini.Converters; -using Dapplo.Language; +using Dapplo.Config.Ini.Converters; +using Dapplo.Config.Language; using Dapplo.Log; using Dapplo.Log.Loggers; using Dapplo.Utils; @@ -42,6 +42,7 @@ using Dapplo.Windows.Dpi.Forms; using Dapplo.Windows.Kernel32; using Greenshot.Addons; using Greenshot.Addons.Core; +using Greenshot.Addons.Resources; using Greenshot.Ui.Misc.ViewModels; namespace Greenshot @@ -65,15 +66,17 @@ namespace Greenshot //LogSettings.ExceptionToStacktrace = exception => exception.ToStringDemystified(); #if DEBUG // Initialize a debug logger for Dapplo packages - LogSettings.RegisterDefaultLogger(LogLevels.Debug); + LogSettings.RegisterDefaultLogger(LogLevels.Verbose); #endif var applicationConfig = ApplicationConfigBuilder .Create() .WithApplicationName("Greenshot") .WithMutex("F48E86D3-E34C-4DB7-8F8F-9A0EA55F0D08") - .WithConfigSupport() .WithCaliburnMicro() .WithoutCopyOfEmbeddedAssemblies() +#if !NETCOREAPP3_0 + .WithoutCopyOfAssembliesToProbingPath() +#endif .WithAssemblyPatterns("Greenshot.Addon*") .BuildApplicationConfig(); @@ -92,7 +95,7 @@ namespace Greenshot return -1; } - RegisterErrorHandlers(application); + //RegisterErrorHandlers(application); application.Run(); return 0; @@ -171,7 +174,9 @@ namespace Greenshot // A dirty fix to make sure the messagebox is visible as a Greenshot window on the taskbar using (var multiInstanceForm = new DpiAwareForm { - Icon = GreenshotResources.GetGreenshotIcon(), + + // TODO: Fix a problem that in this case instance is null + Icon = GreenshotResources.Instance.GetGreenshotIcon(), ShowInTaskbar = true, MaximizeBox = false, MinimizeBox = false, diff --git a/src/Greenshot/Ui/Configuration/ViewModels/UiConfigViewModel.cs b/src/Greenshot/Ui/Configuration/ViewModels/UiConfigViewModel.cs index 53dbf409c..676016190 100644 --- a/src/Greenshot/Ui/Configuration/ViewModels/UiConfigViewModel.cs +++ b/src/Greenshot/Ui/Configuration/ViewModels/UiConfigViewModel.cs @@ -30,7 +30,6 @@ using Caliburn.Micro; using Dapplo.CaliburnMicro.Configuration; using Dapplo.CaliburnMicro.Extensions; using Dapplo.CaliburnMicro.Metro; -using Dapplo.Language; using Dapplo.Utils.Extensions; using Greenshot.Addons; using Greenshot.Addons.Core; @@ -60,13 +59,15 @@ namespace Greenshot.Ui.Configuration.ViewModels /// Used from the View /// // ReSharper disable once UnusedMember.Global - public IDictionary AvailableLanguages => LanguageLoader.Current.AvailableLanguages; + // TODO: Fix + public IDictionary AvailableLanguages => new Dictionary();//LanguageLoader.Current.AvailableLanguages; /// /// Can the login button be pressed? /// + // TODO: Fix public bool CanChangeLanguage - => !string.IsNullOrWhiteSpace(CoreConfiguration.Language) && CoreConfiguration.Language != LanguageLoader.Current.CurrentLanguage; + => !string.IsNullOrWhiteSpace(CoreConfiguration.Language); // && CoreConfiguration.Language != LanguageLoader.Current.CurrentLanguage; public IMetroConfiguration MetroConfiguration { get; } @@ -98,11 +99,11 @@ namespace Greenshot.Ui.Configuration.ViewModels { // Manually commit MetroConfiguration.CommitTransaction(); - MetroWindowManager.ChangeTheme(MetroConfiguration.Theme); - MetroWindowManager.ChangeThemeAccent(MetroConfiguration.ThemeAccent); + MetroWindowManager.ChangeTheme(MetroConfiguration.Theme, MetroConfiguration.ThemeAccent); CoreConfiguration.CommitTransaction(); - Execute.OnUIThread(async () => { await LanguageLoader.Current.ChangeLanguageAsync(CoreConfiguration.Language).ConfigureAwait(false); }); + // TODO: Fix + //Execute.OnUIThread(async () => { await LanguageLoader.Current.ChangeLanguageAsync(CoreConfiguration.Language).ConfigureAwait(false); }); } diff --git a/src/Greenshot/Ui/Configuration/Views/CaptureConfigView.xaml b/src/Greenshot/Ui/Configuration/Views/CaptureConfigView.xaml index ff9824bd6..76b551a8f 100644 --- a/src/Greenshot/Ui/Configuration/Views/CaptureConfigView.xaml +++ b/src/Greenshot/Ui/Configuration/Views/CaptureConfigView.xaml @@ -10,7 +10,7 @@ d:DataContext="{d:DesignInstance viewModels:CaptureConfigViewModel,IsDesignTimeCreatable=False}" > - + @@ -24,7 +24,7 @@ - + diff --git a/src/Greenshot/Ui/Notifications/ViewModels/UpdateNotificationViewModel.cs b/src/Greenshot/Ui/Notifications/ViewModels/UpdateNotificationViewModel.cs index 39ce40c0a..53799eea1 100644 --- a/src/Greenshot/Ui/Notifications/ViewModels/UpdateNotificationViewModel.cs +++ b/src/Greenshot/Ui/Notifications/ViewModels/UpdateNotificationViewModel.cs @@ -28,6 +28,7 @@ using Dapplo.CaliburnMicro.Toasts.ViewModels; using Dapplo.Log; using Greenshot.Addons; using Greenshot.Addons.Core; +using Greenshot.Addons.Resources; namespace Greenshot.Ui.Notifications.ViewModels { @@ -50,7 +51,7 @@ namespace Greenshot.Ui.Notifications.ViewModels public string Message => string.Format(_greenshotLanguage.UpdateFound, LatestVersion); - public ImageSource GreenshotIcon => GreenshotResources.GreenshotIconAsBitmapSource(); + public ImageSource GreenshotIcon => GreenshotResources.Instance.GreenshotIconAsBitmapSource(); /// /// Handle the click diff --git a/src/Greenshot/packages.config b/src/Greenshot/packages.config deleted file mode 100644 index bb052a7a9..000000000 --- a/src/Greenshot/packages.config +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Greenshot/tools/7zip/7za.exe b/src/Greenshot/tools/7zip/7za.exe deleted file mode 100644 index 12b9499a28960378cd26a7b7f0733681c49a5d71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 536064 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�cMLak1v=h`Ytqds~iE6Xn0Xu7% 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