├── .gitattributes ├── .gitignore ├── .gitmodules ├── Configurations ├── BCF2000.bcf ├── BCF2000.xml ├── X-Touch_Mini_LayerA.bin ├── X-Touch_Mini_LayerB.bin └── XTouchMini.xml ├── Development Catalog ├── Development Catalog.lrcat ├── Library │ ├── L1004220.DNG │ ├── L1004235.DNG │ ├── L1004432.DNG │ └── README.txt └── Lightroom Settings │ ├── Auto Layout Presets │ ├── Left Blank, Right One Photo, With Photo Text.lrtemplate │ ├── Left Blank, Right One Photo.lrtemplate │ └── One Photo Per Page.lrtemplate │ ├── Filename Templates │ ├── Custom Name (x of y).lrtemplate │ ├── Custom Name - Original File Number.lrtemplate │ ├── Custom Name - Sequence.lrtemplate │ ├── Custom Name.lrtemplate │ ├── Date - Filename.lrtemplate │ ├── Filename - Sequence.lrtemplate │ ├── Filename.lrtemplate │ ├── Session Name - Sequence.lrtemplate │ ├── Shoot Name - Original File Number.lrtemplate │ └── Shoot Name - Sequence.lrtemplate │ ├── Filter Presets │ ├── Camera Info.lrtemplate │ ├── Default Columns.lrtemplate │ ├── Exposure Info.lrtemplate │ ├── Filters Off.lrtemplate │ ├── Flagged.lrtemplate │ ├── Location Columns.lrtemplate │ ├── Rated.lrtemplate │ ├── Unrated.lrtemplate │ ├── Unused.lrtemplate │ └── Used.lrtemplate │ ├── Keyword Sets │ ├── Outdoor Photography.lrtemplate │ ├── Portrait Photography.lrtemplate │ └── Wedding Photography.lrtemplate │ ├── Label Sets │ ├── Bridge Default.lrtemplate │ ├── Lightroom Default.lrtemplate │ └── Review Status.lrtemplate │ ├── Local Adjustment Presets │ ├── Burn (Darken).lrtemplate │ ├── Dodge (Lighten).lrtemplate │ ├── Iris Enhance.lrtemplate │ ├── Soften Skin.lrtemplate │ └── Teeth Whitening.lrtemplate │ ├── Smart Collection Templates │ ├── Colored Red.lrtemplate │ ├── Five Stars.lrtemplate │ ├── Past Month.lrtemplate │ ├── Recently Modified.lrtemplate │ ├── Video Files.lrtemplate │ └── Without Keywords.lrtemplate │ ├── Text Style Presets │ ├── caption - sans serif.lrtemplate │ ├── caption - serif.lrtemplate │ ├── caption - wedding.lrtemplate │ ├── title - sans serif.lrtemplate │ ├── title - serif.lrtemplate │ └── title - wedding.lrtemplate │ ├── Text Templates │ ├── Caption.lrtemplate │ ├── Custom Text.lrtemplate │ ├── Date.lrtemplate │ ├── Equipment.lrtemplate │ ├── Exposure.lrtemplate │ ├── Filename.lrtemplate │ ├── Sequence.lrtemplate │ └── Title.lrtemplate │ └── config.lua ├── Docs └── Lightroom SDK 6.0 │ ├── API Reference │ ├── 1dot.gif │ ├── adobe.css │ ├── asn.gif │ ├── index.html │ ├── lrapi.png │ ├── luadoc.css │ └── modules │ │ ├── LrApplication.html │ │ ├── LrApplicationView.html │ │ ├── LrBinding.html │ │ ├── LrCatalog.html │ │ ├── LrCollection.html │ │ ├── LrCollectionSet.html │ │ ├── LrColor.html │ │ ├── LrDate.html │ │ ├── LrDevelopController.html │ │ ├── LrDevelopPreset.html │ │ ├── LrDevelopPresetFolder.html │ │ ├── LrDialogs.html │ │ ├── LrErrors.html │ │ ├── LrExportContext.html │ │ ├── LrExportRendition.html │ │ ├── LrExportSession.html │ │ ├── LrExportSettings.html │ │ ├── LrFileUtils.html │ │ ├── LrFilterContext.html │ │ ├── LrFolder.html │ │ ├── LrFtp.html │ │ ├── LrFunctionContext.html │ │ ├── LrHttp.html │ │ ├── LrKeyword.html │ │ ├── LrLocalization.html │ │ ├── LrLogger.html │ │ ├── LrMD5.html │ │ ├── LrMath.html │ │ ├── LrObservableTable.html │ │ ├── LrPasswords.html │ │ ├── LrPathUtils.html │ │ ├── LrPhoto.html │ │ ├── LrPhotoInfo.html │ │ ├── LrPlugin.html │ │ ├── LrPrefs.html │ │ ├── LrProgressScope.html │ │ ├── LrPublishService.html │ │ ├── LrPublishedCollection.html │ │ ├── LrPublishedCollectionSet.html │ │ ├── LrPublishedPhoto.html │ │ ├── LrRecursionGuard.html │ │ ├── LrSelection.html │ │ ├── LrShell.html │ │ ├── LrSlideshow.html │ │ ├── LrSocket.html │ │ ├── LrSounds.html │ │ ├── LrStringUtils.html │ │ ├── LrSystemInfo.html │ │ ├── LrTasks.html │ │ ├── LrTether.html │ │ ├── LrUndo.html │ │ ├── LrVideoExportPreset.html │ │ ├── LrView child layout properties.html │ │ ├── LrView control view properties.html │ │ ├── LrView edit view properties.html │ │ ├── LrView node layout properties.html │ │ ├── LrView text properties.html │ │ ├── LrView view properties.html │ │ ├── LrView.html │ │ ├── LrWebViewFactory.html │ │ ├── LrXml.html │ │ ├── SDK - Export service provider.html │ │ ├── SDK - Metadata tagset provider.html │ │ └── SDK - Publish service provider.html │ ├── Manual │ └── Lightroom SDK Guide.pdf │ ├── Readme.txt │ └── Sample Plugins │ ├── creatorfilter.lrdevplugin │ ├── CreatorExternalToolFilterProvider.lua │ ├── Info.lua │ ├── mac │ │ └── LightroomCreatorXMP │ └── win │ │ └── LightroomCreatorXMP.exe │ ├── custommetadatasample.lrdevplugin │ ├── AllMetadataTagset.lua │ ├── CustomMetadataDefinition.lua │ ├── CustomMetadataTagset.lua │ ├── DisplayMetadata.lua │ ├── Info.lua │ ├── PluginInfoProvider.lua │ ├── PluginInit.lua │ └── strings │ │ └── en │ │ └── TranslatedStrings.txt │ ├── flickr.lrdevplugin │ ├── FlickrAPI.lua │ ├── FlickrExportServiceProvider.lua │ ├── FlickrMetadataDefinition.lua │ ├── FlickrPublishSupport.lua │ ├── FlickrUser.lua │ ├── Info.lua │ ├── small_flickr.png │ └── small_flickr@2x.png │ ├── ftp_upload.lrdevplugin │ ├── FtpUploadExportDialogSections.lua │ ├── FtpUploadServiceProvider.lua │ ├── FtpUploadTask.lua │ └── Info.lua │ ├── helloworld.lrdevplugin │ ├── CustomDialogWithMultipleBind.lua │ ├── CustomDialogWithObserver.lua │ ├── ExportMenuItem.lua │ ├── Info.lua │ ├── RadioButtons.lua │ └── ShowCustomDialog.lua │ ├── languagefilter.lrdevplugin │ ├── Info.lua │ ├── LanguageExternalToolFilterProvider.lua │ ├── mac │ │ └── LightroomLanguageXMP │ └── win │ │ └── LightroomLanguageXMP.exe │ ├── metaexportfilter.lrdevplugin │ ├── Info.lua │ └── MetadataExportFilterProvider.lua │ ├── mymetadata.lrdevplugin │ ├── Info.lua │ ├── MyMetadataDefinitionFile.lua │ ├── MyMetadataTagset.lua │ └── MyMetadataTagsetAll.lua │ ├── mysample.lrwebengine │ ├── footer.html │ ├── galleryInfo.lrweb │ ├── grid.html │ ├── header.html │ ├── large.html │ ├── manifest.lrweb │ ├── myExampleTags.lrweb │ └── resources │ │ └── live_update.js │ └── websample.lrwebengine │ ├── footer.html │ ├── galleryInfo.lrweb │ ├── grid.html │ ├── header.html │ ├── manifest.lrweb │ ├── readme.txt │ ├── resources │ ├── blank.JPG │ ├── css │ │ ├── ie6.css │ │ ├── ie7.css │ │ └── stylesheet.css │ └── js │ │ ├── live_update.js │ │ └── pngfix.js │ └── strings │ └── en │ └── TranslatedStrings.txt ├── LICENSE └── Source ├── LrControl.Api ├── ApiException.cs ├── Common │ ├── Attributes │ │ ├── LuaMethodAttribute.cs │ │ ├── LuaNativeModuleAttribute.cs │ │ └── LuaRequireModuleAttribute.cs │ ├── ClassEnum.cs │ ├── IClassEnum.cs │ ├── ModuleBase.cs │ ├── ProcessingThread.cs │ └── Range.cs ├── Communication │ ├── MessageProtocol.cs │ ├── PluginClient.cs │ ├── PluginEvent.cs │ ├── PluginEventType.cs │ └── Sockets │ │ ├── ReceiveSocket.cs │ │ ├── SendSocket.cs │ │ └── SocketBase.cs ├── LrApi.cs ├── LrControl.Api.csproj ├── Modules │ ├── LrApplicationView │ │ ├── ILrApplicationView.cs │ │ ├── LrApplicationView.cs │ │ ├── Module.cs │ │ ├── PrimaryView.cs │ │ └── SecondaryView.cs │ ├── LrControl │ │ ├── ILrControl.cs │ │ └── LrControl.cs │ ├── LrDevelopController │ │ ├── ILrDevelopController.cs │ │ ├── IParameter.cs │ │ ├── LrDevelopController.cs │ │ ├── Panels.cs │ │ ├── Parameter.cs │ │ ├── Parameters │ │ │ ├── AdjustPanelParameter.cs │ │ │ ├── CalibratePanelParameter.cs │ │ │ ├── CropParameter.cs │ │ │ ├── DetailPanelParameter.cs │ │ │ ├── EffectsPanelParameter.cs │ │ │ ├── EnablePanelParameter.cs │ │ │ ├── LensCorrectionsPanelParameter.cs │ │ │ ├── LocalizedAdjustmentsParameter.cs │ │ │ ├── MixerPanelParameter.cs │ │ │ ├── ParameterGroup.cs │ │ │ ├── Parameters.cs │ │ │ ├── SplitToningPanelParameter.cs │ │ │ └── TonePanelParameter.cs │ │ ├── PostCropVignetteStyle.cs │ │ ├── ProcessVersion.cs │ │ ├── ProfileValue.cs │ │ ├── Tool.cs │ │ ├── UprightValue.cs │ │ └── WhiteBalanceValue.cs │ ├── LrDialogs │ │ ├── ConfirmResult.cs │ │ ├── DialogStyle.cs │ │ ├── ILrDialogs.cs │ │ └── LrDialogs.cs │ ├── LrSelection │ │ ├── ColorLabel.cs │ │ ├── Direction.cs │ │ ├── Flag.cs │ │ ├── ILrSelection.cs │ │ └── LrSelection.cs │ └── LrUndo │ │ ├── ILrUndo.cs │ │ └── LrUndo.cs └── t4 │ ├── GeneratorBase.cs │ └── ModuleGenerator.cs ├── LrControl.Console ├── LrControl.Console.csproj └── Program.cs ├── LrControl.Core ├── Configurations │ ├── ControllerConfiguration.cs │ ├── ControllerConfigurationKey.cs │ ├── ControllerFunctionConfiguration.cs │ ├── FunctionGroupConfiguration.cs │ ├── MappingConfiguration.cs │ ├── ModuleConfiguration.cs │ └── Settings.cs ├── Devices │ ├── Controller.cs │ ├── ControllerKey.cs │ ├── Device.cs │ └── Enums │ │ ├── ControllerMessageType.cs │ │ └── ControllerType.cs ├── Functions │ ├── Catalog │ │ ├── FunctionCatalog.LrApplicationView.cs │ │ ├── FunctionCatalog.LrDevelopController.cs │ │ ├── FunctionCatalog.LrSelection.cs │ │ ├── FunctionCatalog.LrUndo.cs │ │ ├── FunctionCatalog.cs │ │ ├── FunctionCatalogGroup.cs │ │ ├── IFunctionCatalog.cs │ │ └── IFunctionCatalogGroup.cs │ ├── EnablePanelFunction.cs │ ├── Factories │ │ ├── EnablePanelFunctionFactory.cs │ │ ├── FunctionFactory.cs │ │ ├── IFunctionFactory.cs │ │ ├── MethodFunctionFactory.cs │ │ ├── ParameterFunctionFactory.cs │ │ ├── ToggleDevelopBeforeAfterFunctionFactory.cs │ │ └── ToggleParameterFunctionFactory.cs │ ├── Function.cs │ ├── IFunction.cs │ ├── MethodFunction.cs │ ├── ParameterFunction.cs │ ├── TemperatureParameterFunction.cs │ ├── ToggleDevelopBeforeAfterFunction.cs │ └── ToggleParameterFunction.cs ├── ILrControlApplication.cs ├── LrControl.Core.csproj ├── LrControlApplication.cs ├── Mapping │ ├── ControllerFunction.cs │ ├── FunctionGroup.cs │ ├── FunctionGroupManager.cs │ └── ModuleGroup.cs ├── Midi │ ├── ControlChangeKey.cs │ ├── ControlChangeMessageHolder.cs │ ├── InputDeviceDecorator.cs │ ├── MessageHolder.cs │ ├── NrpnKey.cs │ └── NrpnMessageHolder.cs └── Util │ ├── ExceptionStringBuilder.cs │ └── Serializer.cs ├── LrControl.Plugin ├── About.lua ├── ChangeObserverParameters.lua ├── ChangeObserverParameters.tt ├── CommandInterpreter.lua ├── DisablePlugin.lua ├── Info.lua ├── Logger.lua ├── LrControl.Plugin.csproj ├── LrControlApp.lua ├── Main.lua ├── ModuleTools.lua ├── Modules.lua ├── ModulesLrApplicationView.lua ├── ModulesLrApplicationView.tt ├── ModulesLrDevelopController.lua ├── ModulesLrDevelopController.tt ├── ModulesLrDialogs.lua ├── ModulesLrDialogs.tt ├── ModulesLrSelection.lua ├── ModulesLrSelection.tt ├── ModulesLrUndo.lua ├── ModulesLrUndo.tt ├── Options.lua ├── Shutdown.lua └── ShutdownPlugin.lua ├── LrControl.Ui ├── App.config ├── App.xaml ├── App.xaml.cs ├── Core │ ├── IDialogProvider.cs │ ├── MetroWindowDialogProvider.cs │ ├── ObservableCollectionExtensions.cs │ └── ViewModel.cs ├── ErrorDialog.xaml ├── ErrorDialog.xaml.cs ├── Gui │ ├── ControllerFunctionView.xaml │ ├── ControllerFunctionView.xaml.cs │ ├── ControllerFunctionViewModel.cs │ ├── ControllerViewModel.cs │ ├── FunctionCatalogView.xaml │ ├── FunctionCatalogView.xaml.cs │ ├── FunctionGroupManagerViewModel.cs │ ├── FunctionGroupView.xaml │ ├── FunctionGroupView.xaml.cs │ ├── FunctionGroupViewModel.cs │ ├── FunctionViewModel.cs │ ├── ModuleGroupView.xaml │ ├── ModuleGroupView.xaml.cs │ ├── ModuleGroupViewModel.cs │ ├── SettingsView.xaml │ ├── SettingsView.xaml.cs │ └── Utils │ │ ├── BooleanFillValueConverter.cs │ │ ├── ButtonFillValueConverter.cs │ │ ├── DebugConverter.cs │ │ ├── DependencyObjectExtensions.cs │ │ ├── EncoderAngleValueConverter.cs │ │ └── RangeTickFrequencyValueConverter.cs ├── LrControl.Ui.csproj ├── MainWindow.xaml ├── MainWindow.xaml.cs ├── MainWindowDialogProvider.cs ├── MainWindowModel.cs ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ ├── Resources.resx │ ├── Settings.Designer.cs │ └── Settings.settings ├── Resources │ ├── AppIcon.ico │ ├── Entypo-license.txt │ ├── Entypo.ttf │ ├── Icons.xaml │ ├── IconsNonShared.xaml │ └── WindowsIcons-license.txt └── packages.config ├── LrControl.sln └── LrControl.sln.DotSettings /.gitmodules: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/micdah/LrControl/2d9ad6c7a5075dbb042d05dd50b89ab4bf36b8da/.gitmodules -------------------------------------------------------------------------------- /Configurations/X-Touch_Mini_LayerA.bin: -------------------------------------------------------------------------------- 1 |   2 |  3 |  4 |  5 |  6 |  7 |  8 |  9 |  10 |  11 |  12 |  13 |  14 |  15 |  16 |  17 |  18 |  19 |  20 | 21 |  22 |  23 |  24 |  25 |  26 |  27 |  28 |  29 |  30 |  31 |  32 |  33 |  34 | LayerA -------------------------------------------------------------------------------- /Configurations/X-Touch_Mini_LayerB.bin: -------------------------------------------------------------------------------- 1 |   2 | ( 3 | ) 4 | * 5 | + 6 | , 7 | - 8 | . 9 | / 10 |  11 | ! 12 | " 13 | # 14 | $ 15 | % 16 | & 17 | ' 18 |  19 |  20 | 21 |  22 |  23 |  24 |  25 |  26 |  27 |  28 |  29 |  30 |  31 |  32 |  33 |  34 | LayerB -------------------------------------------------------------------------------- /Development Catalog/Development Catalog.lrcat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/micdah/LrControl/2d9ad6c7a5075dbb042d05dd50b89ab4bf36b8da/Development Catalog/Development Catalog.lrcat -------------------------------------------------------------------------------- /Development Catalog/Library/L1004220.DNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/micdah/LrControl/2d9ad6c7a5075dbb042d05dd50b89ab4bf36b8da/Development Catalog/Library/L1004220.DNG -------------------------------------------------------------------------------- /Development Catalog/Library/L1004235.DNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/micdah/LrControl/2d9ad6c7a5075dbb042d05dd50b89ab4bf36b8da/Development Catalog/Library/L1004235.DNG -------------------------------------------------------------------------------- /Development Catalog/Library/L1004432.DNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/micdah/LrControl/2d9ad6c7a5075dbb042d05dd50b89ab4bf36b8da/Development Catalog/Library/L1004432.DNG -------------------------------------------------------------------------------- /Development Catalog/Library/README.txt: -------------------------------------------------------------------------------- 1 | Images are from http://www.kenrockwell.com/leica/m9/sample-photos-3.htm -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Auto Layout Presets/Left Blank, Right One Photo, With Photo Text.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | id = "CA72AD82-4A73-457E-AE6C-48548ECE4855", 3 | internalName = "left blank, right one photo, with photo text", 4 | title = ZSTR "$$$/AutoLayoutPresets/LeftBlankRightOnePhotoWithPhotoText=Left Blank, Right One Photo, With Photo Text", 5 | type = "AutoLayoutPreset", 6 | value = { 7 | items = { 8 | { 9 | left_alignPhoto = true, 10 | left_blank = true, 11 | left_captionsEnabled = false, 12 | left_fixedLayout = "23", 13 | left_fixedLayoutKey = "1-a", 14 | left_matchLongEdges = false, 15 | left_paddingEnabled = false, 16 | left_paddingValue = 9, 17 | left_sameAsRight = false, 18 | left_textStyleEnabled = false, 19 | left_textStylePreset = "654", 20 | left_useFavorites = false, 21 | left_useFixedLayout = false, 22 | left_useFourPhotoPages = false, 23 | left_useOnePhotoPages = false, 24 | left_useThreePhotoPages = false, 25 | left_useTwoPhotoPages = true, 26 | left_zoomMode = "fit", 27 | right_alignPhoto = true, 28 | right_blank = false, 29 | right_captionsEnabled = true, 30 | right_fixedLayout = "E65E0436-8D5D-4286-B300-B9570D6C806D", 31 | right_fixedLayoutKey = "1-a", 32 | right_matchLongEdges = false, 33 | right_paddingEnabled = false, 34 | right_paddingValue = 9, 35 | right_textStyleEnabled = true, 36 | right_textStylePreset = "D368FE2B-03A0-40DA-90DF-78792A01D08D", 37 | right_useFavorites = false, 38 | right_useFixedLayout = true, 39 | right_useFourPhotoPages = false, 40 | right_useOnePhotoPages = false, 41 | right_useThreePhotoPages = false, 42 | right_useTwoPhotoPages = true, 43 | right_zoomMode = "fit", 44 | }, 45 | }, 46 | }, 47 | version = 0, 48 | } 49 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Auto Layout Presets/Left Blank, Right One Photo.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | id = "0A9B2E60-02FA-464B-845B-675C578EEA7F", 3 | internalName = "left blank, right one photo", 4 | title = ZSTR "$$$/AutoLayoutPresets/LeftBlankRightOnePhoto=Left Blank, Right One Photo", 5 | type = "AutoLayoutPreset", 6 | value = { 7 | items = { 8 | { 9 | left_alignPhoto = true, 10 | left_blank = true, 11 | left_captionsEnabled = false, 12 | left_fixedLayout = "23", 13 | left_fixedLayoutKey = "1-a", 14 | left_matchLongEdges = false, 15 | left_paddingEnabled = false, 16 | left_paddingValue = 9, 17 | left_sameAsRight = false, 18 | left_textStyleEnabled = false, 19 | left_textStylePreset = "654", 20 | left_useFavorites = false, 21 | left_useFixedLayout = false, 22 | left_useFourPhotoPages = false, 23 | left_useOnePhotoPages = false, 24 | left_useThreePhotoPages = false, 25 | left_useTwoPhotoPages = true, 26 | left_zoomMode = "fit", 27 | right_alignPhoto = true, 28 | right_blank = false, 29 | right_captionsEnabled = false, 30 | right_fixedLayout = "E65E0436-8D5D-4286-B300-B9570D6C806D", 31 | right_fixedLayoutKey = "1-a", 32 | right_matchLongEdges = false, 33 | right_paddingEnabled = false, 34 | right_paddingValue = 9, 35 | right_textStyleEnabled = false, 36 | right_textStylePreset = "1231", 37 | right_useFavorites = false, 38 | right_useFixedLayout = true, 39 | right_useFourPhotoPages = false, 40 | right_useOnePhotoPages = false, 41 | right_useThreePhotoPages = false, 42 | right_useTwoPhotoPages = true, 43 | right_zoomMode = "fit", 44 | }, 45 | }, 46 | }, 47 | version = 0, 48 | } 49 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Auto Layout Presets/One Photo Per Page.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | id = "A2D3B400-7BED-423A-806D-EDA0E3B98007", 3 | internalName = "One Photo Per Page", 4 | title = ZSTR "$$$/AutoLayoutPresets/OnePhotoPerPage=One Photo Per Page", 5 | type = "AutoLayoutPreset", 6 | value = { 7 | items = { 8 | { 9 | left_alignPhoto = true, 10 | left_blank = false, 11 | left_captionsEnabled = false, 12 | left_fixedLayout = "23", 13 | left_fixedLayoutKey = "1-a", 14 | left_matchLongEdges = false, 15 | left_paddingEnabled = false, 16 | left_paddingValue = 9, 17 | left_sameAsRight = true, 18 | left_textStyleEnabled = false, 19 | left_textStylePreset = "654", 20 | left_useFavorites = false, 21 | left_useFixedLayout = false, 22 | left_useFourPhotoPages = false, 23 | left_useOnePhotoPages = false, 24 | left_useThreePhotoPages = false, 25 | left_useTwoPhotoPages = true, 26 | left_zoomMode = "fit", 27 | right_alignPhoto = true, 28 | right_blank = false, 29 | right_captionsEnabled = false, 30 | right_fixedLayout = "6EBFCDBA-9C44-4F09-8DA5-D9D00DD57603", 31 | right_fixedLayoutKey = "1-a", 32 | right_matchLongEdges = false, 33 | right_paddingEnabled = false, 34 | right_paddingValue = 9, 35 | right_textStyleEnabled = true, 36 | right_textStylePreset = "D368FE2B-03A0-40DA-90DF-78792A01D08D", 37 | right_useFavorites = false, 38 | right_useFixedLayout = true, 39 | right_useFourPhotoPages = false, 40 | right_useOnePhotoPages = false, 41 | right_useThreePhotoPages = false, 42 | right_useTwoPhotoPages = true, 43 | right_zoomMode = "fill", 44 | }, 45 | }, 46 | }, 47 | version = 0, 48 | } 49 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Filename Templates/Custom Name (x of y).lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | deflated = { 3 | { 4 | { 5 | value = "custom_token", 6 | }, 7 | " (", 8 | { 9 | value = "naming_sequenceNumber_1Digit", 10 | }, 11 | ZSTR "$$$/TokenPresets/Naming/CustomNameXofY/of= of ", 12 | { 13 | value = "naming_sequenceTotal_1Digit", 14 | }, 15 | ")", 16 | name = "Custom Name (x of y)", 17 | presetType = "Naming", 18 | }, 19 | "AgTokenPresets", 20 | "restoreTokenFromArchivedState", 21 | }, 22 | title = ZSTR "$$$/TokenPresets/Naming/Title/CustomNameXofY=Custom Name (x of y)", 23 | internalName = "CustomNameXofY", 24 | type = "Naming_Tokens", 25 | version = 1, 26 | } 27 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Filename Templates/Custom Name - Original File Number.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | deflated = { 3 | { 4 | { 5 | value = "custom_token", 6 | }, 7 | "-", 8 | { 9 | value = "image_filename_number_suffix", 10 | }, 11 | name = "Custom Name - Original File Number", 12 | presetType = "Naming", 13 | }, 14 | "AgTokenPresets", 15 | "restoreTokenFromArchivedState", 16 | }, 17 | title = ZSTR "$$$/TokenPresets/Naming/Title/CustomNameOriginalFileNumber=Custom Name - Original File Number", 18 | internalName = "CustomNameOriginalFileNumber", 19 | type = "Naming_Tokens", 20 | version = 1, 21 | } 22 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Filename Templates/Custom Name - Sequence.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | deflated = { 3 | { 4 | { 5 | value = "custom_token", 6 | }, 7 | "-", 8 | { 9 | value = "naming_sequenceNumber_1Digit", 10 | }, 11 | name = "Custom Name - Sequence", 12 | presetType = "Naming", 13 | }, 14 | "AgTokenPresets", 15 | "restoreTokenFromArchivedState", 16 | }, 17 | title = ZSTR "$$$/TokenPresets/Naming/Title/CustomNameSequence=Custom Name - Sequence", 18 | internalName = "CustomNameSequence", 19 | type = "Naming_Tokens", 20 | version = 1, 21 | } 22 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Filename Templates/Custom Name.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | deflated = { 3 | { 4 | { 5 | value = "custom_token", 6 | }, 7 | name = "Custom Name", 8 | presetType = "Naming", 9 | }, 10 | "AgTokenPresets", 11 | "restoreTokenFromArchivedState", 12 | }, 13 | title = ZSTR "$$$/TokenPresets/Naming/Title/CustomText=Custom Name", 14 | internalName = "CustomName", 15 | type = "Naming_Tokens", 16 | version = 2, 17 | } 18 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Filename Templates/Date - Filename.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | deflated = { 3 | { 4 | { 5 | value = "date_YYYYMMDD", 6 | }, 7 | "-", 8 | { 9 | value = "image_name", 10 | }, 11 | name = "Date - Filename", 12 | presetType = "Naming", 13 | }, 14 | "AgTokenPresets", 15 | "restoreTokenFromArchivedState", 16 | }, 17 | title = ZSTR "$$$/TokenPresets/Naming/Title/DateFilename=Date - Filename", 18 | internalName = "DateFilename", 19 | type = "Naming_Tokens", 20 | version = 1, 21 | } 22 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Filename Templates/Filename - Sequence.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | deflated = { 3 | { 4 | { 5 | value = "image_name", 6 | }, 7 | "-", 8 | { 9 | value = "naming_sequenceNumber_1Digit", 10 | }, 11 | name = "Filename - Sequence", 12 | presetType = "Naming", 13 | }, 14 | "AgTokenPresets", 15 | "restoreTokenFromArchivedState", 16 | }, 17 | title = ZSTR "$$$/TokenPresets/Naming/Title/FilenameSequence=Filename - Sequence", 18 | internalName = "FilenameSequence", 19 | type = "Naming_Tokens", 20 | version = 1, 21 | } 22 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Filename Templates/Filename.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | deflated = { 3 | { 4 | { 5 | value = "image_name", 6 | }, 7 | name = "Filename", 8 | presetType = "Naming", 9 | }, 10 | "AgTokenPresets", 11 | "restoreTokenFromArchivedState", 12 | }, 13 | title = ZSTR "$$$/TokenPresets/Naming/Title/Filename=Filename", 14 | internalName = "Filename", 15 | type = "Naming_Tokens", 16 | version = 1, 17 | } 18 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Filename Templates/Session Name - Sequence.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | deflated = { 3 | { 4 | { 5 | value = "shoot_custom_token", 6 | }, 7 | "-", 8 | { 9 | value = "naming_sequenceNumber_3Digits", 10 | }, 11 | name = "Session Name - Sequence", 12 | presetType = "Naming", 13 | }, 14 | "AgTokenPresets", 15 | "restoreTokenFromArchivedState", 16 | }, 17 | internalName = "SessionNameSequence", 18 | title = ZSTR "$$$/TokenPresets/Naming/Title/SessionNameSequence=Session Name - Sequence", 19 | type = "Naming_Tokens", 20 | specialClass = { "tether" }, 21 | version = 2, 22 | } 23 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Filename Templates/Shoot Name - Original File Number.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | deflated = { 3 | { 4 | { 5 | value = "shoot_custom_token", 6 | }, 7 | "-", 8 | { 9 | value = "image_filename_number_suffix", 10 | }, 11 | name = "Shoot Name - Original File Number", 12 | presetType = "Naming", 13 | }, 14 | "AgTokenPresets", 15 | "restoreTokenFromArchivedState", 16 | }, 17 | internalName = "ShootName-OriginalFileNumber", 18 | title = ZSTR "$$$/TokenPresets/Naming/Title/ShootNameOriginalFileNumber=Shoot Name - Original File Number", 19 | type = "Naming_Tokens", 20 | specialClass = { "import" }, 21 | version = 1, 22 | } 23 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Filename Templates/Shoot Name - Sequence.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | deflated = { 3 | { 4 | { 5 | value = "shoot_custom_token", 6 | }, 7 | "-", 8 | { 9 | value = "naming_sequenceNumber_3Digits", 10 | }, 11 | name = "Shoot Name - Sequence", 12 | presetType = "Naming", 13 | }, 14 | "AgTokenPresets", 15 | "restoreTokenFromArchivedState", 16 | }, 17 | internalName = "ShootNameSequence2", 18 | title = ZSTR "$$$/TokenPresets/Naming/Title/ShootNameSequence=Shoot Name - Sequence", 19 | type = "Naming_Tokens", 20 | specialClass = { "import" }, 21 | version = 2, 22 | } 23 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Filter Presets/Camera Info.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | id = "AA3F9B24-337A-4DF5-A60B-2709C90BD554", 3 | internalName = "Camera Info", 4 | title = ZSTR "$$$/AgLibrary/FilterPresets/CameraInfo=Camera Info", 5 | type = "LibraryFilter", 6 | value = { 7 | columnBrowserActive = true, 8 | columnBrowserDesc = { 9 | { 10 | criteria = "camera", 11 | }, 12 | { 13 | criteria = "lens", 14 | }, 15 | { 16 | criteria = "focalLength", 17 | }, 18 | { 19 | criteria = "flashFired", 20 | }, 21 | }, 22 | customLabel = false, 23 | filtersActive = false, 24 | label1 = false, 25 | label2 = false, 26 | label3 = false, 27 | label4 = false, 28 | label5 = false, 29 | labelOp = "any", 30 | minRating = 1, 31 | noLabel = false, 32 | pick = "", 33 | ratingOp = ">=", 34 | searchOp = "all", 35 | searchString = "", 36 | searchStringActive = false, 37 | searchTarget = "all", 38 | usage = "", 39 | whichCopies = "", 40 | }, 41 | version = 0, 42 | } 43 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Filter Presets/Default Columns.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | id = "6277E12D-FA51-4872-934E-5B14A91889BD", 3 | internalName = "Default Columns", 4 | title = ZSTR "$$$/AgLibrary/FilterPresets/DefaultColumns=Default Columns", 5 | type = "LibraryFilter", 6 | value = { 7 | columnBrowserActive = true, 8 | columnBrowserDesc = { 9 | { 10 | criteria = "date", 11 | }, 12 | { 13 | criteria = "camera", 14 | }, 15 | { 16 | criteria = "lens", 17 | }, 18 | { 19 | criteria = "label", 20 | }, 21 | }, 22 | }, 23 | version = 0, 24 | } 25 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Filter Presets/Exposure Info.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | id = "56A24080-5EE7-4700-903F-9881DC72BFE9", 3 | internalName = "Exposure Info", 4 | title = ZSTR "$$$/AgLibrary/FilterPresets/ExposureInfo=Exposure Info", 5 | type = "LibraryFilter", 6 | value = { 7 | columnBrowserActive = true, 8 | columnBrowserDesc = { 9 | { 10 | criteria = "focalLength", 11 | }, 12 | { 13 | criteria = "isoSpeed", 14 | }, 15 | { 16 | criteria = "aperture", 17 | }, 18 | { 19 | criteria = "shutterSpeed", 20 | }, 21 | }, 22 | }, 23 | version = 1, 24 | } 25 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Filter Presets/Filters Off.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | id = "32983D2E-E1F3-47C6-A74C-15E3D3FA06E4", 3 | internalName = "Filters Off", 4 | title = ZSTR "$$$/AgLibrary/FilterPresets/FiltersOff=Filters Off", 5 | type = "LibraryFilter", 6 | value = { 7 | columnBrowserActive = false, 8 | customLabel = false, 9 | datePreset = "all", 10 | dateSearchActive = false, 11 | filtersActive = false, 12 | label1 = false, 13 | label2 = false, 14 | label3 = false, 15 | label4 = false, 16 | label5 = false, 17 | labelOp = "any", 18 | minRating = "", 19 | noLabel = false, 20 | pick = "", 21 | ratingOp = ">=", 22 | searchOp = "all", 23 | searchString = "", 24 | searchStringActive = false, 25 | searchTarget = "all", 26 | usage = "", 27 | whichCopies = "", 28 | visualSearchActive = false, 29 | }, 30 | version = 1, 31 | } 32 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Filter Presets/Flagged.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | id = "4DCC28BF-BAF4-43F8-8956-4584FA18520D", 3 | internalName = "Flagged", 4 | title = ZSTR "$$$/AgLibrary/FilterPresets/Flagged=Flagged", 5 | type = "LibraryFilter", 6 | version = 0, 7 | value = { 8 | filtersActive = true, 9 | 10 | labelOp = "any", 11 | label1 = false, 12 | label2 = false, 13 | label3 = false, 14 | label4 = false, 15 | label5 = false, 16 | customLabel = false, 17 | noLabel = false, 18 | 19 | ratingOp = ">=", 20 | minRating = "", 21 | 22 | pick = "flagged", 23 | 24 | usage = "", 25 | whichCopies = "", 26 | }, 27 | } 28 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Filter Presets/Location Columns.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | id = "E30E1A00-B808-4CB4-8DF0-02A279A18DF5", 3 | internalName = "Location Columns", 4 | title = ZSTR "$$$/AgLibrary/FilterPresets/LocationColumns=Location Columns", 5 | type = "LibraryFilter", 6 | version = 0, 7 | value = { 8 | columnBrowserActive = true, 9 | columnBrowserDesc = { 10 | { 11 | criteria = "country", 12 | }, 13 | { 14 | criteria = "state", 15 | }, 16 | { 17 | criteria = "city", 18 | }, 19 | { 20 | criteria = "location", 21 | }, 22 | }, 23 | }, 24 | } 25 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Filter Presets/Rated.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | id = "44AB3522-FCD5-42B3-BDB8-302FDAEF8EE8", 3 | internalName = "Rated", 4 | title = ZSTR "$$$/AgLibrary/FilterPresets/Rated=Rated", 5 | type = "LibraryFilter", 6 | value = { 7 | filtersActive = true, 8 | 9 | labelOp = "any", 10 | label1 = false, 11 | label2 = false, 12 | label3 = false, 13 | label4 = false, 14 | label5 = false, 15 | noLabel = false, 16 | customLabel = false, 17 | 18 | ratingOp = ">=", 19 | minRating = 1, 20 | 21 | pick = "", 22 | usage = "", 23 | whichCopies = "", 24 | }, 25 | version = 0, 26 | } 27 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Filter Presets/Unrated.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | id = "D0F48510-7810-41F8-A98A-613B4AEC1022", 3 | internalName = "Unrated", 4 | title = ZSTR "$$$/AgLibrary/FilterPresets/Unrated=Unrated", 5 | type = "LibraryFilter", 6 | version = 2, 7 | value = { 8 | filtersActive = true, 9 | 10 | labelOp = "any", 11 | label1 = false, 12 | label2 = false, 13 | label3 = false, 14 | label4 = false, 15 | label5 = false, 16 | noLabel = false, 17 | customLabel = false, 18 | 19 | ratingOp = "==", 20 | minRating = "", 21 | 22 | pick = "", 23 | usage = "", 24 | whichCopies = "", 25 | }, 26 | } 27 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Filter Presets/Unused.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | id = "DC269F40-3C71-4C4D-8166-9437EC641A79", 3 | internalName = "Unused", 4 | title = ZSTR "$$$/AgLibrary/FilterPresets/Unused=Unused", 5 | type = "LibraryFilter", 6 | value = { 7 | filtersActive = true, 8 | 9 | labelOp = "any", 10 | label1 = false, 11 | label2 = false, 12 | label3 = false, 13 | label4 = false, 14 | label5 = false, 15 | noLabel = false, 16 | customLabel = false, 17 | 18 | ratingOp = ">=", 19 | minRating = "", 20 | 21 | pick = "", 22 | usage = "unused", 23 | whichCopies = "", 24 | }, 25 | 26 | version = 0, 27 | } 28 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Filter Presets/Used.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | id = "B531679B-7BE5-4F58-BC9E-59F6A2350802", 3 | internalName = "Used", 4 | title = ZSTR "$$$/AgLibrary/FilterPresets/Used=Used", 5 | type = "LibraryFilter", 6 | value = { 7 | filtersActive = true, 8 | 9 | labelOp = "any", 10 | label1 = false, 11 | label2 = false, 12 | label3 = false, 13 | label4 = false, 14 | label5 = false, 15 | noLabel = false, 16 | customLabel = false, 17 | 18 | ratingOp = ">=", 19 | minRating = "", 20 | 21 | pick = "", 22 | usage = "used", 23 | whichCopies = "", 24 | }, 25 | 26 | version = 0, 27 | } 28 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Keyword Sets/Outdoor Photography.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | title = ZSTR "$$$/AgLibrary/KeywordSetFactoryDefaults/OutdoorPhotography=Outdoor Photography", 3 | internalName = "Outdoor Photography", 4 | type = "KeywordSet", 5 | version = 1, 6 | value = { 7 | shortcut1title = ZSTR "$$$/AgLibrary/KeywordSetFactoryDefaults/OutdoorPhotography/Fall=Fall", 8 | shortcut2title = ZSTR "$$$/AgLibrary/KeywordSetFactoryDefaults/OutdoorPhotography/Winter=Winter", 9 | shortcut3title = ZSTR "$$$/AgLibrary/KeywordSetFactoryDefaults/OutdoorPhotography/People=People", 10 | shortcut4title = ZSTR "$$$/AgLibrary/KeywordSetFactoryDefaults/OutdoorPhotography/Spring=Spring", 11 | shortcut5title = ZSTR "$$$/AgLibrary/KeywordSetFactoryDefaults/OutdoorPhotography/Summer=Summer", 12 | shortcut6title = ZSTR "$$$/AgLibrary/KeywordSetFactoryDefaults/OutdoorPhotography/Wildlife=Wildlife", 13 | shortcut7title = ZSTR "$$$/AgLibrary/KeywordSetFactoryDefaults/OutdoorPhotography/Landscape=Landscape", 14 | shortcut8title = ZSTR "$$$/AgLibrary/KeywordSetFactoryDefaults/OutdoorPhotography/Macro=Macro", 15 | shortcut9title = ZSTR "$$$/AgLibrary/KeywordSetFactoryDefaults/OutdoorPhotography/FlowersAndPlants=Flowers & Plants", 16 | }, 17 | } 18 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Keyword Sets/Portrait Photography.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | title = ZSTR "$$$/AgLibrary/KeywordSetFactoryDefaults/PortraitPhotography=Portrait Photography", 3 | internalName = "Portrait Photography", 4 | type = "KeywordSet", 5 | value = { 6 | shortcut1title = ZSTR "$$$/AgLibrary/KeywordSetFactoryDefaults/PortraitPhotography/Kids=Kids", 7 | shortcut2title = ZSTR "$$$/AgLibrary/KeywordSetFactoryDefaults/PortraitPhotography/Babies=Babies", 8 | shortcut3title = ZSTR "$$$/AgLibrary/KeywordSetFactoryDefaults/PortraitPhotography/Families=Families", 9 | shortcut4title = ZSTR "$$$/AgLibrary/KeywordSetFactoryDefaults/PortraitPhotography/Pets=Pets", 10 | shortcut5title = ZSTR "$$$/AgLibrary/KeywordSetFactoryDefaults/PortraitPhotography/Headshots=Headshots", 11 | shortcut6title = ZSTR "$$$/AgLibrary/KeywordSetFactoryDefaults/PortraitPhotography/Individuals=Individuals", 12 | shortcut7title = ZSTR "$$$/AgLibrary/KeywordSetFactoryDefaults/PortraitPhotography/Outdoor=Outdoor", 13 | shortcut8title = ZSTR "$$$/AgLibrary/KeywordSetFactoryDefaults/PortraitPhotography/Candid=Candid", 14 | shortcut9title = ZSTR "$$$/AgLibrary/KeywordSetFactoryDefaults/PortraitPhotography/Fashion=Fashion", 15 | }, 16 | version = 1, 17 | } 18 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Keyword Sets/Wedding Photography.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | title = ZSTR "$$$/AgLibrary/KeywordSetFactoryDefaults/WeddingPhotography=Wedding Photography", 3 | internalName = "Wedding Photography", 4 | type = "KeywordSet", 5 | value = { 6 | shortcut1title = ZSTR "$$$/AgLibrary/KeywordSetFactoryDefaults/WeddingPhotographyPreCeremony/=Pre-Ceremony", 7 | shortcut2title = ZSTR "$$$/AgLibrary/KeywordSetFactoryDefaults/WeddingPhotography/Ceremony=Ceremony", 8 | shortcut3title = ZSTR "$$$/AgLibrary/KeywordSetFactoryDefaults/WeddingPhotography/Reception=Reception", 9 | shortcut4title = ZSTR "$$$/AgLibrary/KeywordSetFactoryDefaults/WeddingPhotography/WeddingParty=Wedding Party", 10 | shortcut5title = ZSTR "$$$/AgLibrary/KeywordSetFactoryDefaults/WeddingPhotography/Family=Family", 11 | shortcut6title = ZSTR "$$$/AgLibrary/KeywordSetFactoryDefaults/WeddingPhotography/BlackAndWhite=Black & White", 12 | shortcut7title = ZSTR "$$$/AgLibrary/KeywordSetFactoryDefaults/WeddingPhotography/Bride=Bride", 13 | shortcut8title = ZSTR "$$$/AgLibrary/KeywordSetFactoryDefaults/WeddingPhotography/Groom=Groom", 14 | shortcut9title = ZSTR "$$$/AgLibrary/KeywordSetFactoryDefaults/WeddingPhotography/Candid=Candid", 15 | }, 16 | version = 1, 17 | } 18 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Label Sets/Bridge Default.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | title = ZSTR "$$$/AgLibrary/ColorSetFactoryDefaults/BridgeDefault=Bridge Default", 3 | internalName = "Bridge Default", 4 | type = "LabelSet", 5 | version = 1, 6 | value = { 7 | label1 = ZSTR "$$$/AgLibrary/ColorSetFactoryDefaults/Bridge/Select=Select", 8 | label2 = ZSTR "$$$/AgLibrary/ColorSetFactoryDefaults/Bridge/Second=Second", 9 | label3 = ZSTR "$$$/AgLibrary/ColorSetFactoryDefaults/Bridge/Approved=Approved", 10 | label4 = ZSTR "$$$/AgLibrary/ColorSetFactoryDefaults/Bridge/Review=Review", 11 | label5 = ZSTR "$$$/AgLibrary/ColorSetFactoryDefaults/Bridge/ToDo=To Do", 12 | }, 13 | } 14 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Label Sets/Lightroom Default.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | title = ZSTR "$$$/AgLibrary/ColorSetFactoryDefaults/LrDefault=Lightroom Default", 3 | internalName = "Default", 4 | type = "LabelSet", 5 | version = 1, 6 | value = { 7 | label1 = ZSTR "$$$/AgLibrary/Menu/Photo/Label/Red=Red", 8 | label2 = ZSTR "$$$/AgLibrary/Menu/Photo/Label/Yellow=Yellow", 9 | label3 = ZSTR "$$$/AgLibrary/Menu/Photo/Label/Green=Green", 10 | label4 = ZSTR "$$$/AgLibrary/Menu/Photo/Label/Blue=Blue", 11 | label5 = ZSTR "$$$/AgLibrary/Menu/Photo/Label/Purple=Purple", 12 | }, 13 | } 14 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Label Sets/Review Status.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | title = ZSTR "$$$/AgLibrary/ColorSetFactoryDefaults/ReviewStatus=Review Status", 3 | internalName = "Review Status", 4 | type = "LabelSet", 5 | version = 1, 6 | value = { 7 | label1 = ZSTR "$$$/AgLibrary/ColorSetFactoryDefaults/ReviewStatus/ToDelete=To Delete", 8 | label2 = ZSTR "$$$/AgLibrary/ColorSetFactoryDefaults/ReviewStatus/ColorCorrectionNeeded=Color Correction Needed", 9 | label3 = ZSTR "$$$/AgLibrary/ColorSetFactoryDefaults/ReviewStatus/GoodToUse=Good to Use", 10 | label4 = ZSTR "$$$/AgLibrary/ColorSetFactoryDefaults/ReviewStatus/RetouchingNeeded=Retouching Needed", 11 | label5 = ZSTR "$$$/AgLibrary/ColorSetFactoryDefaults/ReviewStatus/ToPrint=To Print", 12 | }, 13 | } 14 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Local Adjustment Presets/Burn (Darken).lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | id = "86261CEB-3283-4FD0-A084-4118957DC6F2", 3 | internalName = "Burn (Darken)", 4 | title = ZSTR "$$$/AgDevelop/Localized/Preset/BurnDarken=Burn (Darken)", 5 | type = "LocalizedAdjustmentPreset", 6 | value = { 7 | clarity = 0, 8 | clarity2012 = 0, 9 | contrast = 0, 10 | contrast2012 = 0, 11 | exposure = -0.080459770114943, 12 | exposure2012 = -0.075000002980232, 13 | highlights2012 = 0, 14 | luminanceNoise = 0, 15 | moire = 0, 16 | saturation = 0, 17 | shadows2012 = 0, 18 | sharpness = 0, 19 | temperature = 0, 20 | tint = 0, 21 | toningHue = 240, 22 | toningLuminance = 0, 23 | toningSaturation = 0, 24 | }, 25 | version = 1, 26 | } 27 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Local Adjustment Presets/Dodge (Lighten).lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | id = "4B2C93F8-F28C-4254-9F34-19D75CF854CA", 3 | internalName = "Dodge (Lighten)", 4 | title = ZSTR "$$$/AgDevelop/Localized/Preset/DodgeLighten=Dodge (Lighten)", 5 | type = "LocalizedAdjustmentPreset", 6 | value = { 7 | clarity = 0, 8 | clarity2012 = 0, 9 | contrast = 0, 10 | contrast2012 = 0, 11 | exposure = 0.057470999658108, 12 | exposure2012 = 0.0625, 13 | highlights2012 = 0, 14 | luminanceNoise = 0, 15 | moire = 0, 16 | saturation = 0, 17 | shadows2012 = 0, 18 | sharpness = 0, 19 | temperature = 0, 20 | tint = 0, 21 | toningHue = 240, 22 | toningLuminance = 0, 23 | toningSaturation = 0, 24 | }, 25 | version = 1, 26 | } 27 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Local Adjustment Presets/Iris Enhance.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | id = "48862CD1-0B08-477A-933E-E5922F27B950", 3 | internalName = "Iris Enhance", 4 | title = ZSTR "$$$/AgDevelop/Localized/Preset/IrisEnhance=Iris Enhance", 5 | type = "LocalizedAdjustmentPreset", 6 | value = { 7 | clarity = 0.65517199039459, 8 | clarity2012 = 0.10000000149012, 9 | contrast = 0, 10 | contrast2012 = 0, 11 | exposure = 0.1724140048027, 12 | exposure2012 = 0.087499998509884, 13 | highlights2012 = 0, 14 | luminanceNoise = 0, 15 | moire = 0, 16 | saturation = 0.40000000596046, 17 | shadows2012 = 0, 18 | sharpness = 0, 19 | temperature = 0, 20 | tint = 0, 21 | toningHue = 240, 22 | toningLuminance = 0, 23 | toningSaturation = 0, 24 | }, 25 | version = 1, 26 | } 27 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Local Adjustment Presets/Soften Skin.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | id = "D53DFBA7-E4C3-4E1D-974E-4FF9EF534DF8", 3 | internalName = "Soften Skin", 4 | title = ZSTR "$$$/AgDevelop/Localized/Preset/SoftenSkin=Soften Skin", 5 | type = "LocalizedAdjustmentPreset", 6 | value = { 7 | clarity = -1, 8 | clarity2012 = -1, 9 | contrast = 0, 10 | contrast2012 = 0, 11 | exposure = 0, 12 | exposure2012 = 0, 13 | highlights2012 = 0, 14 | luminanceNoise = 0, 15 | moire = 0, 16 | saturation = 0, 17 | shadows2012 = 0, 18 | sharpness = 0.25, 19 | temperature = 0, 20 | tint = 0, 21 | toningHue = 240, 22 | toningLuminance = 0, 23 | toningSaturation = 0, 24 | }, 25 | version = 2, 26 | } 27 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Local Adjustment Presets/Teeth Whitening.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | id = "5D68DBAD-147B-4CD3-833A-803DFA2C5C78", 3 | internalName = "Teeth Whitening", 4 | title = ZSTR "$$$/AgDevelop/Localized/Preset/TeethWhitening=Teeth Whitening", 5 | type = "LocalizedAdjustmentPreset", 6 | value = { 7 | clarity = 0, 8 | clarity2012 = 0, 9 | contrast = 0, 10 | contrast2012 = 0, 11 | exposure = 0.1034480035305, 12 | exposure2012 = 0.10000000149012, 13 | highlights2012 = 0, 14 | luminanceNoise = 0, 15 | moire = 0, 16 | saturation = -0.60000002384186, 17 | shadows2012 = 0, 18 | sharpness = 0, 19 | temperature = 0, 20 | tint = 0, 21 | toningHue = 233, 22 | toningLuminance = 0, 23 | toningSaturation = 0, 24 | }, 25 | version = 1, 26 | } 27 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Smart Collection Templates/Colored Red.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | id = "D21C0CF6-DD52-4DF8-84E6-E7D84D557D48", 3 | internalName = "Colored Red", 4 | title = ZSTR "$$$/LibraryToolkit/Defaults/SmartCollections/ColoredRed=Colored Red", 5 | type = "LibrarySmartCollection", 6 | value = { 7 | { 8 | criteria = "labelColor", 9 | operation = "==", 10 | value = 1, 11 | }, 12 | combine = "intersect", 13 | }, 14 | version = 1, 15 | } 16 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Smart Collection Templates/Five Stars.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | id = "90124AC6-5E0E-466D-B4FA-8DEB40ECC70F", 3 | internalName = "Five Stars", 4 | title = ZSTR "$$$/LibraryToolkit/Defaults/SmartCollections/FiveStars=Five Stars", 5 | type = "LibrarySmartCollection", 6 | value = { 7 | { 8 | criteria = "rating", 9 | operation = ">=", 10 | value = 5, 11 | }, 12 | combine = "intersect", 13 | }, 14 | version = 0, 15 | } 16 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Smart Collection Templates/Past Month.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | id = "8943DC86-01C5-4092-BBE4-745760DCEC59", 3 | internalName = "Past Month", 4 | title = ZSTR "$$$/LibraryToolkit/Defaults/SmartCollections/Past Month=Past Month", 5 | type = "LibrarySmartCollection", 6 | value = { 7 | { 8 | criteria = "captureTime", 9 | operation = "inLast", 10 | value = 1, 11 | value_units = "months", 12 | }, 13 | combine = "intersect", 14 | }, 15 | version = 1, 16 | } 17 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Smart Collection Templates/Recently Modified.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | id = "7BE6EC78-BE76-4777-98FB-CA5BEF790324", 3 | internalName = "Recently Modified", 4 | title = ZSTR "$$$/LibraryToolkit/Defaults/SmartCollections/RecentlyModified=Recently Modified", 5 | type = "LibrarySmartCollection", 6 | value = { 7 | { 8 | criteria = "touchTime", 9 | operation = "inLast", 10 | value = 2, 11 | value_units = "days", 12 | }, 13 | combine = "intersect", 14 | }, 15 | version = 1, 16 | } 17 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Smart Collection Templates/Video Files.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | id = "F4AB36C8-9E4F-40F4-8E08-75AEFF78A1FE", 3 | internalName = "Video Files", 4 | title = ZSTR "$$$/LibraryToolkit/Defaults/SmartCollections/VideoFiles=Video Files", 5 | type = "LibrarySmartCollection", 6 | value = { 7 | { 8 | criteria = "fileFormat", 9 | operation = "==", 10 | value = "VIDEO", 11 | }, 12 | combine = "intersect", 13 | }, 14 | version = 1, 15 | } 16 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Smart Collection Templates/Without Keywords.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | id = "7C560C96-8635-43C9-9D69-B94E9A192534", 3 | internalName = "Without Keywords", 4 | title = ZSTR "$$$/LibraryToolkit/Defaults/SmartCollections/Without Keywords=Without Keywords", 5 | type = "LibrarySmartCollection", 6 | value = { 7 | { 8 | criteria = "keywords", 9 | operation = "empty", 10 | }, 11 | combine = "intersect", 12 | }, 13 | version = 1, 14 | } 15 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Text Style Presets/caption - sans serif.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | id = "0B9FA9F9-3989-4E1F-A283-35DC715AA88D", 3 | internalName = "caption - sans serif", 4 | title = ZSTR "$$$/TextStylePreset/CaptionSansSerif=caption - sans serif", 5 | type = "NamedTextStylePreset", 6 | value = { 7 | items = { 8 | { 9 | alignment = "AlignLeft", 10 | autoKerning = true, 11 | autoLeading = true, 12 | baselineShift = 0, 13 | blue = 0, 14 | fontFamily = "Myriad Pro", 15 | fontSize = 8, 16 | fontStyle = "Regular", 17 | green = 0, 18 | leading = 9.6000003814697, 19 | opacity = 100, 20 | red = 0, 21 | tracking = 0, 22 | }, 23 | }, 24 | }, 25 | version = 0, 26 | } 27 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Text Style Presets/caption - serif.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | id = "D368FE2B-03A0-40DA-90DF-78792A01D08D", 3 | internalName = "caption - serif", 4 | title = ZSTR "$$$/TextStylePreset/CaptionSerif=caption - serif", 5 | type = "NamedTextStylePreset", 6 | value = { 7 | items = { 8 | { 9 | alignment = "AlignLeft", 10 | autoKerning = true, 11 | autoLeading = true, 12 | baselineShift = 0, 13 | blue = 0, 14 | fontFamily = "Adobe Garamond Pro", 15 | fontSize = 8, 16 | fontStyle = "Regular", 17 | green = 0, 18 | leading = 9.6000003814697, 19 | opacity = 100, 20 | red = 0, 21 | tracking = 0, 22 | }, 23 | }, 24 | }, 25 | version = 0, 26 | } 27 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Text Style Presets/caption - wedding.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | id = "389AFA59-B216-479C-9084-0E2704403AFD", 3 | internalName = "caption - wedding", 4 | title = ZSTR "$$$/TextStylePreset/CaptionWedding=caption - wedding", 5 | type = "NamedTextStylePreset", 6 | value = { 7 | items = { 8 | { 9 | alignment = "AlignLeft", 10 | autoKerning = true, 11 | autoLeading = true, 12 | baselineShift = 0, 13 | blue = 0, 14 | fontFamily = "Bickham Script Pro", 15 | fontSize = 18, 16 | fontStyle = "Regular", 17 | green = 0, 18 | leading = 21.60000038147, 19 | opacity = 100, 20 | red = 0, 21 | tracking = 0, 22 | }, 23 | }, 24 | }, 25 | version = 0, 26 | } 27 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Text Style Presets/title - sans serif.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | id = "2451091A-22CF-4F81-8E33-902705EEC72D", 3 | internalName = "title - sans serif", 4 | title = ZSTR "$$$/TextStylePreset/TitleSansSerif=title - sans serif", 5 | type = "NamedTextStylePreset", 6 | value = { 7 | items = { 8 | { 9 | alignment = "AlignCenter", 10 | autoKerning = true, 11 | autoLeading = true, 12 | baselineShift = 0, 13 | blue = 0, 14 | fontFamily = "Myriad Pro", 15 | fontSize = 24, 16 | fontStyle = "Regular", 17 | green = 0, 18 | leading = 9.6000003814697, 19 | opacity = 100, 20 | red = 0, 21 | tracking = 0, 22 | }, 23 | }, 24 | }, 25 | version = 0, 26 | } 27 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Text Style Presets/title - serif.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | id = "9495FB21-5F73-46F2-992B-4C76FD0BA0CF", 3 | internalName = "title - serif", 4 | title = ZSTR "$$$/TextStylePreset/TitleSerif=title - serif", 5 | type = "NamedTextStylePreset", 6 | value = { 7 | items = { 8 | { 9 | alignment = "AlignCenter", 10 | autoKerning = true, 11 | autoLeading = true, 12 | baselineShift = 0, 13 | blue = 0, 14 | fontFamily = "Adobe Garamond Pro", 15 | fontSize = 24, 16 | fontStyle = "Regular", 17 | green = 0, 18 | leading = 9.6000003814697, 19 | opacity = 100, 20 | red = 0, 21 | tracking = 0, 22 | }, 23 | }, 24 | }, 25 | version = 0, 26 | } 27 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Text Style Presets/title - wedding.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | id = "73B177AD-B75D-4A0E-B96D-2B9DA6FAF333", 3 | internalName = "title - wedding", 4 | title = ZSTR "$$$/TextStylePreset/Wedding=title - wedding", 5 | type = "NamedTextStylePreset", 6 | value = { 7 | items = { 8 | { 9 | alignment = "AlignCenter", 10 | autoKerning = true, 11 | autoLeading = true, 12 | baselineShift = 0, 13 | blue = 0, 14 | fontFamily = "Bickham Script Pro", 15 | fontSize = 48, 16 | fontStyle = "Regular", 17 | green = 0, 18 | leading = 21.60000038147, 19 | opacity = 100, 20 | red = 0, 21 | tracking = 0, 22 | }, 23 | }, 24 | }, 25 | version = 0, 26 | } 27 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Text Templates/Caption.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | deflated = { 3 | { 4 | deflatedTokens = { 5 | { 6 | value = "com.adobe.caption", 7 | }, 8 | }, 9 | presetType = "Metadata", 10 | uuid = "69B4C900-73DB-40E7-B52D-5AE8542E6BDA", 11 | }, 12 | "AgTokenPresets", 13 | "restoreTokenFromArchivedState", 14 | }, 15 | title = ZSTR "$$$/TokenPresets/Metadata/Title/Caption=Caption", 16 | internalName = "Caption", 17 | type = "Metadata_Tokens", 18 | version = 1, 19 | } 20 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Text Templates/Custom Text.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | deflated = { 3 | { 4 | { 5 | value = "custom_token", 6 | }, 7 | name = "Custom Text", 8 | presetType = "Metadata", 9 | }, 10 | "AgTokenPresets", 11 | "restoreTokenFromArchivedState", 12 | }, 13 | title = ZSTR "$$$/TokenPresets/Metadata/Title/CustomText=Custom Text", 14 | internalName = "CustomText", 15 | type = "Metadata_Tokens", 16 | version = 1, 17 | } 18 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Text Templates/Date.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | deflated = { 3 | { 4 | deflatedTokens = { 5 | { 6 | value = "date_LocalEncoding", 7 | }, 8 | }, 9 | presetType = "Metadata", 10 | uuid = "65A1BFF3-ED26-41D5-8E9A-BEC7FBD9EF21", 11 | }, 12 | "AgTokenPresets", 13 | "restoreTokenFromArchivedState", 14 | }, 15 | title = ZSTR "$$$/TokenPresets/Metadata/Title/Date=Date", 16 | internalName = "Date", 17 | type = "Metadata_Tokens", 18 | version = 1, 19 | } 20 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Text Templates/Equipment.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | deflated = { 3 | { 4 | deflatedTokens = { 5 | { 6 | value = "com.adobe.model", 7 | }, 8 | " - ", 9 | { 10 | value = "com.adobe.lens", 11 | }, 12 | }, 13 | presetType = "Metadata", 14 | uuid = "8CA7C24F-E76A-4EA7-A806-F5CBF0AB7AB6", 15 | }, 16 | "AgTokenPresets", 17 | "restoreTokenFromArchivedState", 18 | }, 19 | title = ZSTR "$$$/TokenPresets/Metadata/Title/Equipment=Equipment", 20 | internalName = "Equipment", 21 | type = "Metadata_Tokens", 22 | version = 2, 23 | } 24 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Text Templates/Exposure.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | deflated = { 3 | { 4 | deflatedTokens = { 5 | { 6 | value = "com.adobe.exposure", 7 | }, 8 | }, 9 | presetType = "Metadata", 10 | uuid = "9B09897E-CF29-4AE4-A6A6-43FAE8DBAE2D", 11 | }, 12 | "AgTokenPresets", 13 | "restoreTokenFromArchivedState", 14 | }, 15 | title = ZSTR "$$$/TokenPresets/Metadata/Title/Exposure=Exposure", 16 | internalName = "Exposure", 17 | type = "Metadata_Tokens", 18 | version = 1, 19 | } 20 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Text Templates/Filename.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | deflated = { 3 | { 4 | deflatedTokens = { 5 | { 6 | value = "image_name", 7 | }, 8 | }, 9 | presetType = "Metadata", 10 | uuid = "filename-metadata-token-preset", 11 | }, 12 | "AgTokenPresets", 13 | "restoreTokenFromArchivedState", 14 | }, 15 | title = ZSTR "$$$/TokenPresets/Metadata/Title/Filename=Filename", 16 | internalName = "Filename", 17 | type = "Metadata_Tokens", 18 | version = 1, 19 | } 20 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Text Templates/Sequence.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | deflated = { 3 | { 4 | deflatedTokens = { 5 | { 6 | value = "naming_operationSequence_1Digit", 7 | }, 8 | " / ", 9 | { 10 | value = "naming_sequenceTotal_1Digit", 11 | }, 12 | }, 13 | presetType = "Metadata", 14 | uuid = "19B390C7-E7C2-4050-8E1F-4656EC12C9F2", 15 | }, 16 | "AgTokenPresets", 17 | "restoreTokenFromArchivedState", 18 | }, 19 | title = ZSTR "$$$/TokenPresets/Metadata/Title/Sequence=Sequence", 20 | internalName = "Sequence", 21 | type = "Metadata_Tokens", 22 | version = 1, 23 | } 24 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/Text Templates/Title.lrtemplate: -------------------------------------------------------------------------------- 1 | s = { 2 | deflated = { 3 | { 4 | deflatedTokens = { 5 | { 6 | value = "com.adobe.title", 7 | }, 8 | }, 9 | presetType = "Metadata", 10 | uuid = "69B4C900-73DB-40E7-B52D-5AE8542E6BDB", 11 | }, 12 | "AgTokenPresets", 13 | "restoreTokenFromArchivedState", 14 | }, 15 | title = ZSTR "$$$/TokenPresets/Metadata/Title/Title=Title", 16 | internalName = "Title", 17 | type = "Metadata_Tokens", 18 | version = 1, 19 | } 20 | -------------------------------------------------------------------------------- /Development Catalog/Lightroom Settings/config.lua: -------------------------------------------------------------------------------- 1 | --[[---------------------------------------------------------------------------- 2 | 3 | Copyright © 2016 Michael Dahl 4 | 5 | This file is part of LrControl. 6 | 7 | LrControl is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | LrControl is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with LrControl. If not, see . 19 | 20 | ------------------------------------------------------------------------------]] 21 | 22 | loggers.LrControl = { 23 | logLevel = "trace", 24 | action = "logfile" 25 | } 26 | -------------------------------------------------------------------------------- /Docs/Lightroom SDK 6.0/API Reference/1dot.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/micdah/LrControl/2d9ad6c7a5075dbb042d05dd50b89ab4bf36b8da/Docs/Lightroom SDK 6.0/API Reference/1dot.gif -------------------------------------------------------------------------------- /Docs/Lightroom SDK 6.0/API Reference/asn.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/micdah/LrControl/2d9ad6c7a5075dbb042d05dd50b89ab4bf36b8da/Docs/Lightroom SDK 6.0/API Reference/asn.gif -------------------------------------------------------------------------------- /Docs/Lightroom SDK 6.0/API Reference/lrapi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/micdah/LrControl/2d9ad6c7a5075dbb042d05dd50b89ab4bf36b8da/Docs/Lightroom SDK 6.0/API Reference/lrapi.png -------------------------------------------------------------------------------- /Docs/Lightroom SDK 6.0/Manual/Lightroom SDK Guide.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/micdah/LrControl/2d9ad6c7a5075dbb042d05dd50b89ab4bf36b8da/Docs/Lightroom SDK 6.0/Manual/Lightroom SDK Guide.pdf -------------------------------------------------------------------------------- /Docs/Lightroom SDK 6.0/Readme.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/micdah/LrControl/2d9ad6c7a5075dbb042d05dd50b89ab4bf36b8da/Docs/Lightroom SDK 6.0/Readme.txt -------------------------------------------------------------------------------- /Docs/Lightroom SDK 6.0/Sample Plugins/creatorfilter.lrdevplugin/Info.lua: -------------------------------------------------------------------------------- 1 | --[[---------------------------------------------------------------------------- 2 | 3 | Info.lua 4 | Summary information for creator filter plug-in 5 | 6 | -------------------------------------------------------------------------------- 7 | 8 | ADOBE SYSTEMS INCORPORATED 9 | Copyright 2008 Adobe Systems Incorporated 10 | All Rights Reserved. 11 | 12 | NOTICE: Adobe permits you to use, modify, and distribute this file in accordance 13 | with the terms of the Adobe license agreement accompanying it. If you have received 14 | this file from a source other than Adobe, then your use, modification, or distribution 15 | of it requires the prior written permission of Adobe. 16 | 17 | 18 | ------------------------------------------------------------------------------]] 19 | 20 | return { 21 | 22 | LrSdkVersion = 3.0, 23 | LrSdkMinimumVersion = 2.0, 24 | 25 | LrPluginName = "Creator External Tool", 26 | LrToolkitIdentifier = 'com.adobe.lightroom.sdk.export.creator', 27 | 28 | LrExportFilterProvider = { 29 | title = "Creator External Tool", 30 | file = 'CreatorExternalToolFilterProvider.lua', 31 | }, 32 | 33 | VERSION = { major=6, minor=2, revision=0, build=1029764, }, 34 | 35 | } 36 | -------------------------------------------------------------------------------- /Docs/Lightroom SDK 6.0/Sample Plugins/creatorfilter.lrdevplugin/mac/LightroomCreatorXMP: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/micdah/LrControl/2d9ad6c7a5075dbb042d05dd50b89ab4bf36b8da/Docs/Lightroom SDK 6.0/Sample Plugins/creatorfilter.lrdevplugin/mac/LightroomCreatorXMP -------------------------------------------------------------------------------- /Docs/Lightroom SDK 6.0/Sample Plugins/creatorfilter.lrdevplugin/win/LightroomCreatorXMP.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/micdah/LrControl/2d9ad6c7a5075dbb042d05dd50b89ab4bf36b8da/Docs/Lightroom SDK 6.0/Sample Plugins/creatorfilter.lrdevplugin/win/LightroomCreatorXMP.exe -------------------------------------------------------------------------------- /Docs/Lightroom SDK 6.0/Sample Plugins/custommetadatasample.lrdevplugin/CustomMetadataTagset.lua: -------------------------------------------------------------------------------- 1 | --[[---------------------------------------------------------------------------- 2 | 3 | CustomMetadataTagset.lua 4 | Sample custom metadata tagset 5 | 6 | -------------------------------------------------------------------------------- 7 | 8 | ADOBE SYSTEMS INCORPORATED 9 | Copyright 2008 Adobe Systems Incorporated 10 | All Rights Reserved. 11 | 12 | NOTICE: Adobe permits you to use, modify, and distribute this file in accordance 13 | with the terms of the Adobe license agreement accompanying it. If you have received 14 | this file from a source other than Adobe, then your use, modification, or distribution 15 | of it requires the prior written permission of Adobe. 16 | 17 | ------------------------------------------------------------------------------]] 18 | 19 | return{ 20 | 21 | title = LOC "$$$/CustomMetadata/Tagset/Title=Custom Metadata", 22 | id = 'CustomMetadataTagset', 23 | 24 | items = { 25 | { 'com.adobe.label', label = LOC "$$$/Metadata/OrigLabel=Standard Metadata" }, 26 | 'com.adobe.filename', 27 | 'com.adobe.folder', 28 | 29 | 'com.adobe.separator', 30 | 31 | 'com.adobe.title', 32 | { 'com.adobe.caption', height_in_lines = 3 }, 33 | 34 | 'com.adobe.separator', 35 | 36 | 'com.adobe.lightroom.sdk.metadata.custommetadatasample.*', 37 | }, 38 | } 39 | -------------------------------------------------------------------------------- /Docs/Lightroom SDK 6.0/Sample Plugins/custommetadatasample.lrdevplugin/Info.lua: -------------------------------------------------------------------------------- 1 | --[[---------------------------------------------------------------------------- 2 | 3 | Info.lua 4 | Summary information for custom metadata sample plugin 5 | 6 | -------------------------------------------------------------------------------- 7 | 8 | ADOBE SYSTEMS INCORPORATED 9 | Copyright 2008 Adobe Systems Incorporated 10 | All Rights Reserved. 11 | 12 | NOTICE: Adobe permits you to use, modify, and distribute this file in accordance 13 | with the terms of the Adobe license agreement accompanying it. If you have received 14 | this file from a source other than Adobe, then your use, modification, or distribution 15 | of it requires the prior written permission of Adobe. 16 | 17 | ------------------------------------------------------------------------------]] 18 | 19 | return { 20 | 21 | LrSdkVersion = 3.0, 22 | LrSdkMinimumVersion = 2.0, 23 | LrToolkitIdentifier = 'com.adobe.lightroom.sdk.metadata.custommetadatasample', 24 | 25 | LrPluginName = LOC "$$$/CustomMetadata/PluginName=Custom Metadata Sample", 26 | LrPluginInfoUrl = "http://www.adobe.com", 27 | 28 | -- Add the Metadata Definition File 29 | LrMetadataProvider = 'CustomMetadataDefinition.lua', 30 | 31 | -- Add the Metadata Tagset File 32 | LrMetadataTagsetFactory = { 33 | 'CustomMetadataTagset.lua', 34 | 'AllMetadataTagset.lua', 35 | }, 36 | 37 | LrLibraryMenuItems = { 38 | title = 'Custom Metadata Dialog', 39 | file = 'DisplayMetadata.lua', 40 | enabledWhen = 'photosAvailable', 41 | }, 42 | 43 | -- Add the entry for the Plug-in Manager Dialog 44 | LrPluginInfoProvider = 'PluginInfoProvider.lua', 45 | 46 | VERSION = { major=6, minor=2, revision=0, build=1029764, }, 47 | 48 | } 49 | -------------------------------------------------------------------------------- /Docs/Lightroom SDK 6.0/Sample Plugins/custommetadatasample.lrdevplugin/PluginInit.lua: -------------------------------------------------------------------------------- 1 | PluginInit = { 2 | currentDisplayImage = "no", 3 | pluginID = "com.adobe.lightroom.sdk.metadata.custommetadatasample", 4 | URL = "http://www.adobe.com", 5 | } 6 | -------------------------------------------------------------------------------- /Docs/Lightroom SDK 6.0/Sample Plugins/custommetadatasample.lrdevplugin/strings/en/TranslatedStrings.txt: -------------------------------------------------------------------------------- 1 | "$$$/CustomMetadata/PluginName=Custom Metadata Sample" 2 | "$$$/CustomMetadata/Fields/RandomString=Random String" 3 | "$$$/CustomMetadata/Fields/Display=Display Image" 4 | "$$$/CustomMetadata/Fields/Display/Yes=Yes" 5 | "$$$/CustomMetadata/Fields/Display/No=No" 6 | "$$$/CustomMetadata/Fields/Rating=Rating" 7 | "$$$/CustomMetadata/Tagset/Title=Custom Metadata" 8 | "$$$/Metadata/OrigLabel=Standard Metadata" 9 | "$$$/Metadata/CusLabel=Custom Metadata" 10 | "$$$/CustomMetadata/Fields/ReadOnlyString=ReadOnly String" 11 | "$$$/CustomMetadata/PluginManager=Custom Metadata Sample" 12 | "$$$/CustomMetadata/Fields/Display/URL=URL" 13 | "$$$/CustomMetadata/Fields/Copyright=Copyright" 14 | "$$$/CustomMetadata/Fields/Workflow=Workflow" 15 | "$$$/CustomMetadata/Fields/FormalDescriptiveInfo=Image" 16 | "$$$/CustomMetadata/Fields/IPTCLabel=IPTC" 17 | "$$$/CustomMetadata/Fields/CreatorInfoLabel=Contact" 18 | "$$$/CustomMetadata/Fields/ExifLabel=EXIF" 19 | "$$$/CustomMetadata/Fields/AllPreset=All Metadata" 20 | -------------------------------------------------------------------------------- /Docs/Lightroom SDK 6.0/Sample Plugins/flickr.lrdevplugin/FlickrMetadataDefinition.lua: -------------------------------------------------------------------------------- 1 | --[[---------------------------------------------------------------------------- 2 | 3 | FlickrMetadataDefinition.lua 4 | Custom metadata definition for Flickr publish plug-in 5 | 6 | -------------------------------------------------------------------------------- 7 | 8 | ADOBE SYSTEMS INCORPORATED 9 | Copyright 2009 Adobe Systems Incorporated 10 | All Rights Reserved. 11 | 12 | NOTICE: Adobe permits you to use, modify, and distribute this file in accordance 13 | with the terms of the Adobe license agreement accompanying it. If you have received 14 | this file from a source other than Adobe, then your use, modification, or distribution 15 | of it requires the prior written permission of Adobe. 16 | 17 | ------------------------------------------------------------------------------]] 18 | 19 | return { 20 | 21 | metadataFieldsForPhotos = { 22 | 23 | { 24 | id = 'previous_tags', 25 | dataType = 'string', 26 | }, 27 | 28 | }, 29 | 30 | schemaVersion = 2, -- must be a number, preferably a positive integer 31 | 32 | } 33 | -------------------------------------------------------------------------------- /Docs/Lightroom SDK 6.0/Sample Plugins/flickr.lrdevplugin/Info.lua: -------------------------------------------------------------------------------- 1 | --[[---------------------------------------------------------------------------- 2 | 3 | Info.lua 4 | Summary information for Flickr sample plug-in 5 | 6 | -------------------------------------------------------------------------------- 7 | 8 | ADOBE SYSTEMS INCORPORATED 9 | Copyright 2007 Adobe Systems Incorporated 10 | All Rights Reserved. 11 | 12 | NOTICE: Adobe permits you to use, modify, and distribute this file in accordance 13 | with the terms of the Adobe license agreement accompanying it. If you have received 14 | this file from a source other than Adobe, then your use, modification, or distribution 15 | of it requires the prior written permission of Adobe. 16 | 17 | ------------------------------------------------------------------------------]] 18 | 19 | return { 20 | 21 | LrSdkVersion = 3.0, 22 | LrSdkMinimumVersion = 3.0, -- minimum SDK version required by this plug-in 23 | 24 | LrToolkitIdentifier = 'com.adobe.lightroom.export.flickr', 25 | LrPluginName = LOC "$$$/Flickr/PluginName=Flickr", 26 | 27 | LrExportServiceProvider = { 28 | title = LOC "$$$/Flickr/Flickr-title=Flickr", 29 | file = 'FlickrExportServiceProvider.lua', 30 | }, 31 | 32 | LrMetadataProvider = 'FlickrMetadataDefinition.lua', 33 | 34 | VERSION = { major=6, minor=2, revision=0, build=1029764, }, 35 | 36 | } 37 | -------------------------------------------------------------------------------- /Docs/Lightroom SDK 6.0/Sample Plugins/flickr.lrdevplugin/small_flickr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/micdah/LrControl/2d9ad6c7a5075dbb042d05dd50b89ab4bf36b8da/Docs/Lightroom SDK 6.0/Sample Plugins/flickr.lrdevplugin/small_flickr.png -------------------------------------------------------------------------------- /Docs/Lightroom SDK 6.0/Sample Plugins/flickr.lrdevplugin/small_flickr@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/micdah/LrControl/2d9ad6c7a5075dbb042d05dd50b89ab4bf36b8da/Docs/Lightroom SDK 6.0/Sample Plugins/flickr.lrdevplugin/small_flickr@2x.png -------------------------------------------------------------------------------- /Docs/Lightroom SDK 6.0/Sample Plugins/ftp_upload.lrdevplugin/FtpUploadServiceProvider.lua: -------------------------------------------------------------------------------- 1 | --[[---------------------------------------------------------------------------- 2 | 3 | FtpUploadExportServiceProvider.lua 4 | Export service provider description for Lightroom FtpUpload uploader 5 | 6 | -------------------------------------------------------------------------------- 7 | 8 | ADOBE SYSTEMS INCORPORATED 9 | Copyright 2007 Adobe Systems Incorporated 10 | All Rights Reserved. 11 | 12 | NOTICE: Adobe permits you to use, modify, and distribute this file in accordance 13 | with the terms of the Adobe license agreement accompanying it. If you have received 14 | this file from a source other than Adobe, then your use, modification, or distribution 15 | of it requires the prior written permission of Adobe. 16 | 17 | ------------------------------------------------------------------------------]] 18 | 19 | -- FtpUpload plug-in 20 | require "FtpUploadExportDialogSections" 21 | require "FtpUploadTask" 22 | 23 | 24 | --============================================================================-- 25 | 26 | return { 27 | 28 | hideSections = { 'exportLocation' }, 29 | 30 | allowFileFormats = nil, -- nil equates to all available formats 31 | 32 | allowColorSpaces = nil, -- nil equates to all color spaces 33 | 34 | exportPresetFields = { 35 | { key = 'putInSubfolder', default = false }, 36 | { key = 'path', default = 'photos' }, 37 | { key = "ftpPreset", default = nil }, 38 | { key = "fullPath", default = nil }, 39 | }, 40 | 41 | startDialog = FtpUploadExportDialogSections.startDialog, 42 | sectionsForBottomOfDialog = FtpUploadExportDialogSections.sectionsForBottomOfDialog, 43 | 44 | processRenderedPhotos = FtpUploadTask.processRenderedPhotos, 45 | 46 | } 47 | -------------------------------------------------------------------------------- /Docs/Lightroom SDK 6.0/Sample Plugins/ftp_upload.lrdevplugin/Info.lua: -------------------------------------------------------------------------------- 1 | --[[---------------------------------------------------------------------------- 2 | 3 | Info.lua 4 | Summary information for ftp_upload sample plug-in 5 | 6 | -------------------------------------------------------------------------------- 7 | 8 | ADOBE SYSTEMS INCORPORATED 9 | Copyright 2007 Adobe Systems Incorporated 10 | All Rights Reserved. 11 | 12 | NOTICE: Adobe permits you to use, modify, and distribute this file in accordance 13 | with the terms of the Adobe license agreement accompanying it. If you have received 14 | this file from a source other than Adobe, then your use, modification, or distribution 15 | of it requires the prior written permission of Adobe. 16 | 17 | 18 | ------------------------------------------------------------------------------]] 19 | 20 | return { 21 | 22 | LrSdkVersion = 3.0, 23 | LrSdkMinimumVersion = 1.3, -- minimum SDK version required by this plug-in 24 | 25 | LrToolkitIdentifier = 'com.adobe.lightroom.export.ftp_upload', 26 | 27 | LrPluginName = LOC "$$$/FTPUpload/PluginName=FTP Upload Sample", 28 | 29 | LrExportServiceProvider = { 30 | title = "FTP Upload", 31 | file = 'FtpUploadServiceProvider.lua', 32 | }, 33 | 34 | VERSION = { major=6, minor=2, revision=0, build=1029764, }, 35 | 36 | } 37 | -------------------------------------------------------------------------------- /Docs/Lightroom SDK 6.0/Sample Plugins/helloworld.lrdevplugin/ExportMenuItem.lua: -------------------------------------------------------------------------------- 1 | --[[---------------------------------------------------------------------------- 2 | 3 | ADOBE SYSTEMS INCORPORATED 4 | Copyright 2007 Adobe Systems Incorporated 5 | All Rights Reserved. 6 | 7 | NOTICE: Adobe permits you to use, modify, and distribute this file in accordance 8 | with the terms of the Adobe license agreement accompanying it. If you have received 9 | this file from a source other than Adobe, then your use, modification, or distribution 10 | of it requires the prior written permission of Adobe. 11 | 12 | -------------------------------------------------------------------------------- 13 | 14 | ExportMenuItem.lua 15 | From the Hello World sample plug-in. Displays a modal dialog and writes debug info. 16 | 17 | ------------------------------------------------------------------------------]] 18 | 19 | -- Access the Lightroom SDK namespaces. 20 | local LrDialogs = import 'LrDialogs' 21 | local LrLogger = import 'LrLogger' 22 | 23 | -- Create the logger and enable the print function. 24 | local myLogger = LrLogger( 'exportLogger' ) 25 | myLogger:enable( "print" ) -- Pass either a string or a table of actions. 26 | 27 | -------------------------------------------------------------------------------- 28 | -- Write trace information to the logger. 29 | 30 | local function outputToLog( message ) 31 | myLogger:trace( message ) 32 | end 33 | 34 | -------------------------------------------------------------------------------- 35 | -- Display a modal information dialog. 36 | 37 | local function showModalDialog() 38 | 39 | outputToLog( "MyHWExportItem.showModalMessage function entered." ) 40 | LrDialogs.message( "ExportMenuItem Selected", "Hello World!", "info" ); 41 | outputToLog( "MyHWExportItem.showModalMessage function exiting." ) 42 | 43 | end 44 | 45 | -------------------------------------------------------------------------------- 46 | -- Display a dialog. 47 | showModalDialog() 48 | 49 | 50 | -------------------------------------------------------------------------------- /Docs/Lightroom SDK 6.0/Sample Plugins/helloworld.lrdevplugin/Info.lua: -------------------------------------------------------------------------------- 1 | --[[---------------------------------------------------------------------------- 2 | 3 | ADOBE SYSTEMS INCORPORATED 4 | Copyright 2007 Adobe Systems Incorporated 5 | All Rights Reserved. 6 | 7 | NOTICE: Adobe permits you to use, modify, and distribute this file in accordance 8 | with the terms of the Adobe license agreement accompanying it. If you have received 9 | this file from a source other than Adobe, then your use, modification, or distribution 10 | of it requires the prior written permission of Adobe. 11 | 12 | -------------------------------------------------------------------------------- 13 | 14 | Info.lua 15 | Summary information for Hello World sample plug-in. 16 | 17 | Adds menu items to Lightroom. 18 | 19 | ------------------------------------------------------------------------------]] 20 | 21 | return { 22 | 23 | LrSdkVersion = 3.0, 24 | LrSdkMinimumVersion = 1.3, -- minimum SDK version required by this plug-in 25 | 26 | LrToolkitIdentifier = 'com.adobe.lightroom.sdk.helloworld', 27 | 28 | LrPluginName = LOC "$$$/HelloWorld/PluginName=Hello World Sample", 29 | 30 | -- Add the menu item to the File menu. 31 | 32 | LrExportMenuItems = { 33 | title = "Hello World Dialog", 34 | file = "ExportMenuItem.lua", 35 | }, 36 | 37 | -- Add the menu item to the Library menu. 38 | 39 | LrLibraryMenuItems = { 40 | { 41 | title = LOC "$$$/HelloWorld/CustomDialog=Hello World Custom Dialog", 42 | file = "ShowCustomDialog.lua", 43 | }, 44 | { 45 | title = LOC "$$$/HelloWorld/MultiBind=Hello World Custom Dialog with MultipleBind", 46 | file = "CustomDialogWithMultipleBind.lua", 47 | }, 48 | { 49 | title = LOC "$$$/HelloWorld/RadioButtons=Hello World RadioButtons", 50 | file = "RadioButtons.lua", 51 | }, 52 | { 53 | title = LOC "$$$/HelloWorld/DialogObserver=Hello World Custom Dialog with Observer", 54 | file = "CustomDialogWithObserver.lua", 55 | }, 56 | }, 57 | VERSION = { major=6, minor=2, revision=0, build=1029764, }, 58 | 59 | } 60 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /Docs/Lightroom SDK 6.0/Sample Plugins/languagefilter.lrdevplugin/Info.lua: -------------------------------------------------------------------------------- 1 | --[[---------------------------------------------------------------------------- 2 | 3 | Info.lua 4 | Summary information for language filter plug-in 5 | 6 | -------------------------------------------------------------------------------- 7 | 8 | ADOBE SYSTEMS INCORPORATED 9 | Copyright 2008 Adobe Systems Incorporated 10 | All Rights Reserved. 11 | 12 | NOTICE: Adobe permits you to use, modify, and distribute this file in accordance 13 | with the terms of the Adobe license agreement accompanying it. If you have received 14 | this file from a source other than Adobe, then your use, modification, or distribution 15 | of it requires the prior written permission of Adobe. 16 | 17 | 18 | ------------------------------------------------------------------------------]] 19 | 20 | return { 21 | 22 | LrSdkVersion = 3.0, 23 | LrSdkMinimumVersion = 2.0, 24 | 25 | LrPluginName = "Language External Tool", 26 | LrToolkitIdentifier = 'com.adobe.lightroom.sdk.export.language', 27 | 28 | LrExportFilterProvider = { 29 | title = "Language External Tool", 30 | file = 'LanguageExternalToolFilterProvider.lua', 31 | }, 32 | 33 | VERSION = { major=6, minor=2, revision=0, build=1029764, }, 34 | 35 | } 36 | -------------------------------------------------------------------------------- /Docs/Lightroom SDK 6.0/Sample Plugins/languagefilter.lrdevplugin/mac/LightroomLanguageXMP: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/micdah/LrControl/2d9ad6c7a5075dbb042d05dd50b89ab4bf36b8da/Docs/Lightroom SDK 6.0/Sample Plugins/languagefilter.lrdevplugin/mac/LightroomLanguageXMP -------------------------------------------------------------------------------- /Docs/Lightroom SDK 6.0/Sample Plugins/languagefilter.lrdevplugin/win/LightroomLanguageXMP.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/micdah/LrControl/2d9ad6c7a5075dbb042d05dd50b89ab4bf36b8da/Docs/Lightroom SDK 6.0/Sample Plugins/languagefilter.lrdevplugin/win/LightroomLanguageXMP.exe -------------------------------------------------------------------------------- /Docs/Lightroom SDK 6.0/Sample Plugins/metaexportfilter.lrdevplugin/Info.lua: -------------------------------------------------------------------------------- 1 | --[[---------------------------------------------------------------------------- 2 | 3 | Info.lua 4 | metaExportFilter Sample 5 | Summary information for Metadata Export Filter plugin sample plugin 6 | -------------------------------------------------------------------------------- 7 | ADOBE SYSTEMS INCORPORATED 8 | Copyright 2008 Adobe Systems Incorporated 9 | All Rights Reserved. 10 | 11 | NOTICE: Adobe permits you to use, modify, and distribute this file in accordance 12 | with the terms of the Adobe license agreement accompanying it. If you have received 13 | this file from a source other than Adobe, then your use, modification, or distribution 14 | of it requires the prior written permission of Adobe. 15 | ------------------------------------------------------------------------------]] 16 | 17 | return { 18 | 19 | LrSdkVersion = 3.0, 20 | LrSdkMinimumVersion = 1.3, -- minimum SDK version required by this plugin 21 | 22 | LrPluginName = LOC "$$$/SDK/MetaExportFilter/Sample=Metadata Post Process Sample", 23 | LrToolkitIdentifier = 'com.adobe.lightroom.sdk.export.metaexportfilter', 24 | 25 | LrExportFilterProvider = { 26 | title = LOC "$$$/SDK/MetaExportFilter/Sample=Metadata Post Process", -- the string that appears in the export filter section of the export dialog in LR 27 | file = 'MetadataExportFilterProvider.lua', -- name of the file containing the filter definition script 28 | id = "metadata", -- unique identifier for export filter 29 | }, 30 | 31 | VERSION = { major=6, minor=2, revision=0, build=1029764, }, 32 | 33 | } 34 | -------------------------------------------------------------------------------- /Docs/Lightroom SDK 6.0/Sample Plugins/mymetadata.lrdevplugin/Info.lua: -------------------------------------------------------------------------------- 1 | --[[---------------------------------------------------------------------------- 2 | 3 | Info.lua 4 | MyMetadata.lrplugin 5 | 6 | -------------------------------------------------------------------------------- 7 | 8 | ADOBE SYSTEMS INCORPORATED 9 | Copyright 2008 Adobe Systems Incorporated 10 | All Rights Reserved. 11 | 12 | NOTICE: Adobe permits you to use, modify, and distribute this file in accordance 13 | with the terms of the Adobe license agreement accompanying it. If you have received 14 | this file from a source other than Adobe, then your use, modification, or distribution 15 | of it requires the prior written permission of Adobe. 16 | 17 | ------------------------------------------------------------------------------]] 18 | 19 | return { 20 | 21 | LrSdkVersion = 3.0, 22 | 23 | LrToolkitIdentifier = 'sample.metadata.mymetadatasample', 24 | LrPluginName = "My Metadata Sample", 25 | 26 | LrMetadataTagsetFactory = { 27 | 'MyMetadataTagset.lua', 28 | 'MyMetadataTagsetAll.lua' 29 | }, 30 | 31 | VERSION = { major=6, minor=2, revision=0, build=1029764, }, 32 | 33 | } 34 | -------------------------------------------------------------------------------- /Docs/Lightroom SDK 6.0/Sample Plugins/mymetadata.lrdevplugin/MyMetadataDefinitionFile.lua: -------------------------------------------------------------------------------- 1 | --[[---------------------------------------------------------------------------- 2 | 3 | MyMetadataDefinitionFile.lua 4 | MyMetadata.lrplugin 5 | 6 | -------------------------------------------------------------------------------- 7 | 8 | ADOBE SYSTEMS INCORPORATED 9 | Copyright 2008 Adobe Systems Incorporated 10 | All Rights Reserved. 11 | 12 | NOTICE: Adobe permits you to use, modify, and distribute this file in accordance 13 | with the terms of the Adobe license agreement accompanying it. If you have received 14 | this file from a source other than Adobe, then your use, modification, or distribution 15 | of it requires the prior written permission of Adobe. 16 | 17 | ------------------------------------------------------------------------------]] 18 | 19 | return { 20 | 21 | metadataFieldsForPhotos = { 22 | 23 | { 24 | id = 'siteId', 25 | }, 26 | 27 | { 28 | id = 'myString', 29 | title = "My String", 30 | dataType = 'string', -- Specifies the data type for this field. 31 | searchable = true, 32 | browsable = true, 33 | version = 2, 34 | }, 35 | 36 | { 37 | id = 'myboolean', 38 | title = "My Boolean", 39 | dataType = 'enum', 40 | searchable = true, 41 | browsable = true, 42 | version = 2, 43 | values = { 44 | { 45 | value = 'true', 46 | title = "True", 47 | }, 48 | { 49 | value = 'false', 50 | title = "False", 51 | }, 52 | }, 53 | }, 54 | 55 | }, 56 | 57 | schemaVersion = 1, 58 | 59 | } 60 | -------------------------------------------------------------------------------- /Docs/Lightroom SDK 6.0/Sample Plugins/mymetadata.lrdevplugin/MyMetadataTagset.lua: -------------------------------------------------------------------------------- 1 | --[[---------------------------------------------------------------------------- 2 | 3 | MyMetadataTagset.lua 4 | MyMetadata.lrplugin 5 | 6 | -------------------------------------------------------------------------------- 7 | 8 | ADOBE SYSTEMS INCORPORATED 9 | Copyright 2008 Adobe Systems Incorporated 10 | All Rights Reserved. 11 | 12 | NOTICE: Adobe permits you to use, modify, and distribute this file in accordance 13 | with the terms of the Adobe license agreement accompanying it. If you have received 14 | this file from a source other than Adobe, then your use, modification, or distribution 15 | of it requires the prior written permission of Adobe. 16 | 17 | ------------------------------------------------------------------------------]] 18 | 19 | return { 20 | 21 | title = "My Metadata", 22 | id = 'MyMetadataTagset', 23 | 24 | items = { 25 | 'com.adobe.filename', 26 | 'com.adobe.folder', 27 | 28 | 'com.adobe.separator', 29 | 30 | 'sample.metadata.mymetadatasample.*', 31 | }, 32 | 33 | } 34 | -------------------------------------------------------------------------------- /Docs/Lightroom SDK 6.0/Sample Plugins/mysample.lrwebengine/footer.html: -------------------------------------------------------------------------------- 1 | <% 2 | --[[ 3 | 4 | footer.html 5 | This file adds closure to the html file. 6 | By separating the pages the footer can be used with the large.html and grid.html pages 7 | -------------------------------------------------------------------------------- 8 | 9 | ADOBE SYSTEMS INCORPORATED 10 | Copyright 2008 Adobe Systems Incorporated 11 | All Rights Reserved. 12 | 13 | NOTICE: Adobe permits you to use, modify, and distribute this file in accordance 14 | with the terms of the Adobe license agreement accompanying it. If you have received 15 | this file from a source other than Adobe, then your use, modification, or distribution 16 | of it requires the prior written permission of Adobe. 17 | 18 | ]] 19 | %> 20 | 21 | 22 | -------------------------------------------------------------------------------- /Docs/Lightroom SDK 6.0/Sample Plugins/mysample.lrwebengine/header.html: -------------------------------------------------------------------------------- 1 | <% 2 | --[[ 3 | 4 | header.html 5 | This file begins the html file. 6 | By separating the pages, the header can be used with the large.html and grid.html pages 7 | -------------------------------------------------------------------------------- 8 | 9 | ADOBE SYSTEMS INCORPORATED 10 | Copyright 2008 Adobe Systems Incorporated 11 | All Rights Reserved. 12 | 13 | NOTICE: Adobe permits you to use, modify, and distribute this file in accordance 14 | with the terms of the Adobe license agreement accompanying it. If you have received 15 | this file from a source other than Adobe, then your use, modification, or distribution 16 | of it requires the prior written permission of Adobe. 17 | 18 | ]] 19 | %> 20 | 21 | 22 | 23 | 24 | 25 | My Sample Plugin 26 | 27 | 28 | 29 | 30 |

$model.metadata.siteTitle.value

31 | -------------------------------------------------------------------------------- /Docs/Lightroom SDK 6.0/Sample Plugins/mysample.lrwebengine/large.html: -------------------------------------------------------------------------------- 1 | <% 2 | --[[ 3 | 4 | large.html 5 | This file displays the larger image with dimensions specified in the galleryInfo.lrweb file 6 | The Pagination tagsets have been used to assist with navigation through the photos with 7 | a mechanism Index enabling the user to return to the thumbnail view. 8 | 9 | The lower section demonstrates the use of the custom tagsets defined in myExampleTags.lrweb 10 | -------------------------------------------------------------------------------- 11 | 12 | ADOBE SYSTEMS INCORPORATED 13 | Copyright 2008 Adobe Systems Incorporated 14 | All Rights Reserved. 15 | 16 | NOTICE: Adobe permits you to use, modify, and distribute this file in accordance 17 | with the terms of the Adobe license agreement accompanying it. If you have received 18 | this file from a source other than Adobe, then your use, modification, or distribution 19 | of it requires the prior written permission of Adobe. 20 | 21 | ]] 22 | %> 23 | <% 24 | --[[ Define some variables to make locating other resources easier.]] 25 | 26 | local image = getImage( index ) 27 | local theRoot = ".." 28 | local others = "." 29 | local mySize = "large" 30 | %> 31 | 32 | <% --[[ Include the page header]] %> 33 | <%@ include file="header.html" %> 34 |
35 |
    36 | 37 | 38 |
  • Previous
  • 39 |
    40 | 41 |
  • Previous
  • 42 |
    43 |
  • Index
  • 44 | 45 |
  • Next
  • 46 |
    47 | 48 |
  • Next
  • 49 |
    50 |
    51 |
52 |
53 | 54 | 55 | 56 | 57 | You know what they say:
58 |
....how interesting!
59 |
60 | 61 | <% --[[ Include the page footer]] %> 62 | <%@ include file="footer.html" %> 63 | -------------------------------------------------------------------------------- /Docs/Lightroom SDK 6.0/Sample Plugins/mysample.lrwebengine/manifest.lrweb: -------------------------------------------------------------------------------- 1 | --[[ 2 | 3 | manifest.lrweb 4 | Sample web template 5 | 6 | Lightroom Web Gallery manifest. This file maps various template files to actual 7 | files to be produced for your website. 8 | 9 | -------------------------------------------------------------------------------- 10 | 11 | ADOBE SYSTEMS INCORPORATED 12 | Copyright 2008 Adobe Systems Incorporated 13 | All Rights Reserved. 14 | 15 | NOTICE: Adobe permits you to use, modify, and distribute this file in accordance 16 | with the terms of the Adobe license agreement accompanying it. If you have received 17 | this file from a source other than Adobe, then your use, modification, or distribution 18 | of it requires the prior written permission of Adobe. 19 | 20 | ]] 21 | 22 | importTags( "lr", "com.adobe.lightroom.default" ) 23 | importTags( "xmpl", "myExampleTags.lrweb" ) 24 | 25 | AddGridPages { 26 | template="grid.html", 27 | rows=3, 28 | columns=3, 29 | } 30 | 31 | AddCustomCSS { 32 | filename='content/custom.css', 33 | } 34 | AddPhotoPages { 35 | template="large.html", 36 | variant="_large", 37 | destination="content", 38 | } 39 | AddResources { 40 | source='resources', 41 | destination='resources', 42 | } -------------------------------------------------------------------------------- /Docs/Lightroom SDK 6.0/Sample Plugins/websample.lrwebengine/manifest.lrweb: -------------------------------------------------------------------------------- 1 | --[[ 2 | 3 | manifest.lrweb 4 | 5 | Lightroom Web Gallery manifest. This file maps various template files to actual 6 | files to be produced for your website. 7 | 8 | -------------------------------------------------------------------------------- 9 | 10 | ADOBE SYSTEMS INCORPORATED 11 | Copyright 2008 Adobe Systems Incorporated 12 | All Rights Reserved. 13 | 14 | NOTICE: Adobe permits you to use, modify, and distribute this file in accordance 15 | with the terms of the Adobe license agreement accompanying it. If you have received 16 | this file from a source other than Adobe, then your use, modification, or distribution 17 | of it requires the prior written permission of Adobe. 18 | 19 | ]] 20 | 21 | importTags( "lr", "com.adobe.lightroom.default" ) -- main lightroom tags including Pagination. 22 | 23 | 24 | -- create a GridPage called grid.html with 1 column and 50 rows as defined in the galleryInfo 25 | AddGridPages { 26 | template="grid.html", 27 | rows=model.nonCSS.numRows, 28 | columns=model.nonCSS.numCols, 29 | } 30 | -- Include custom stylesheet 31 | AddCustomCSS{ 32 | filename="content/custom.css", 33 | } 34 | -- include images and javascript resources 35 | AddResources { 36 | source='resources', 37 | destination='resources', 38 | } 39 | IdentityPlate { 40 | destination='content/logo.png', 41 | enabledBinding = [[appearance.logo.display]], 42 | } -------------------------------------------------------------------------------- /Docs/Lightroom SDK 6.0/Sample Plugins/websample.lrwebengine/readme.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/micdah/LrControl/2d9ad6c7a5075dbb042d05dd50b89ab4bf36b8da/Docs/Lightroom SDK 6.0/Sample Plugins/websample.lrwebengine/readme.txt -------------------------------------------------------------------------------- /Docs/Lightroom SDK 6.0/Sample Plugins/websample.lrwebengine/resources/blank.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/micdah/LrControl/2d9ad6c7a5075dbb042d05dd50b89ab4bf36b8da/Docs/Lightroom SDK 6.0/Sample Plugins/websample.lrwebengine/resources/blank.JPG -------------------------------------------------------------------------------- /Docs/Lightroom SDK 6.0/Sample Plugins/websample.lrwebengine/resources/css/ie6.css: -------------------------------------------------------------------------------- 1 | .alignmentMiddle { 2 | z-index: 3; 3 | position: absolute; 4 | top: 50%; 5 | left: 50%; 6 | } /* for explorer only*/ 7 | 8 | .alignmentInner{ 9 | z-index: 4; 10 | position: relative; 11 | top: -50%; 12 | left: -50%; 13 | } /* for explorer only */ 14 | .alignmentOuterGrid { 15 | z-index: 1; 16 | position: absolute; 17 | top: 0; 18 | left: 0; 19 | width: 100%; 20 | height: 100%; 21 | overflow: hidden; 22 | } 23 | 24 | 25 | .dropShadow:before, 26 | .dropShadow:after { 27 | display: none; 28 | } 29 | 30 | .dropShadow .inner, 31 | .dropShadow { 32 | background: none; 33 | display: inline; 34 | float: none; 35 | position: static; 36 | content: inherit; 37 | margin: 0; 38 | right: 0; 39 | left: 0; 40 | top: 0; 41 | height: auto; 42 | width: auto; 43 | 44 | } 45 | 46 | .thumb, .preview { 47 | filter:progid:DXImageTransform.Microsoft.Shadow(Color=#000000, Direction=135, Strength=1); 48 | } 49 | 50 | -------------------------------------------------------------------------------- /Docs/Lightroom SDK 6.0/Sample Plugins/websample.lrwebengine/resources/css/ie7.css: -------------------------------------------------------------------------------- 1 | .alignmentMiddle { 2 | margin-top: expression((parentNode.offsetHeight - this.offsetHeight) / 2) !important; 3 | } 4 | .alignmentOuterGrid { 5 | z-index: 1; 6 | position: absolute; 7 | top: 0; 8 | left: 0; 9 | width: 100%; 10 | height: 100%; 11 | overflow: hidden; 12 | } 13 | 14 | .dropShadow { 15 | background: none; 16 | 17 | } 18 | .thumb, .preview { 19 | filter:progid:DXImageTransform.Microsoft.Shadow(Color=#000000, Direction=135, Strength=1); 20 | } 21 | 22 | -------------------------------------------------------------------------------- /Docs/Lightroom SDK 6.0/Sample Plugins/websample.lrwebengine/resources/js/pngfix.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Correctly handle PNG transparency in Win IE 5.5 & 6. 4 | http://homepage.ntlworld.com/bobosola. Updated 18-Jan-2006. 5 | 6 | Use in with DEFER keyword wrapped in conditional comments: 7 | 10 | 11 | */ 12 | 13 | var arVersion = navigator.appVersion.split("MSIE") 14 | var version = parseFloat(arVersion[1]) 15 | var re = /^agwpg/i; 16 | var workAroundIEDeadlockBug = re.exec( document.location ) == null; 17 | 18 | if ((version >= 5.5) && (document.body.filters) && workAroundIEDeadlockBug) { 19 | for(var i=0; i" 34 | img.outerHTML = strNewHTML 35 | i = i-1 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /Source/LrControl.Api/ApiException.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Runtime.Serialization; 3 | 4 | namespace LrControl.Api 5 | { 6 | public class ApiException : Exception 7 | { 8 | public ApiException() 9 | { 10 | } 11 | 12 | public ApiException(string message) : base(message) 13 | { 14 | } 15 | 16 | public ApiException(string message, Exception innerException) : base(message, innerException) 17 | { 18 | } 19 | 20 | protected ApiException(SerializationInfo info, StreamingContext context) : base(info, context) 21 | { 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /Source/LrControl.Api/Common/Attributes/LuaMethodAttribute.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace LrControl.Api.Common.Attributes 4 | { 5 | [AttributeUsage(AttributeTargets.Method)] 6 | internal class LuaMethodAttribute : Attribute 7 | { 8 | } 9 | } -------------------------------------------------------------------------------- /Source/LrControl.Api/Common/Attributes/LuaNativeModuleAttribute.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace LrControl.Api.Common.Attributes 4 | { 5 | [AttributeUsage(AttributeTargets.Interface)] 6 | internal class LuaNativeModuleAttribute : Attribute 7 | { 8 | public readonly string Module; 9 | 10 | public LuaNativeModuleAttribute(string module) 11 | { 12 | if (string.IsNullOrEmpty(module)) 13 | throw new ArgumentException("Must not be null or empty", nameof(module)); 14 | 15 | Module = module; 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /Source/LrControl.Api/Common/Attributes/LuaRequireModuleAttribute.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace LrControl.Api.Common.Attributes 4 | { 5 | [AttributeUsage(AttributeTargets.Method)] 6 | internal class LuaRequireModuleAttribute : Attribute 7 | { 8 | public readonly string Module; 9 | 10 | public LuaRequireModuleAttribute(string module) 11 | { 12 | if (string.IsNullOrEmpty(module)) 13 | throw new ArgumentException("Must not be null or empty", nameof(module)); 14 | 15 | Module = module; 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /Source/LrControl.Api/Common/ClassEnum.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Reflection; 5 | using LrControl.Api.Modules.LrDevelopController; 6 | 7 | namespace LrControl.Api.Common 8 | { 9 | public abstract class ClassEnum : IClassEnum 10 | where TEnum : ClassEnum 11 | { 12 | private static readonly Lazy> AllEnumsCache = new Lazy>(GetAllEnums); 13 | 14 | protected ClassEnum(TValue value, string name) 15 | { 16 | Name = name; 17 | Value = value; 18 | } 19 | 20 | public string Name { get; } 21 | public TValue Value { get; } 22 | 23 | public override string ToString() 24 | { 25 | return Name; 26 | } 27 | 28 | public static void CallSetValue(LrApi api, IParameter parameter, TEnum value) 29 | { 30 | api.LrDevelopController.SetValue(parameter, value); 31 | } 32 | 33 | private static List GetAllEnums() 34 | { 35 | var fields = typeof (TEnum).GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly); 36 | return fields.Select(info => info.GetValue(null)).OfType().ToList(); 37 | } 38 | 39 | public static TEnum GetEnumForValue(TValue value) 40 | { 41 | return AllEnumsCache.Value.FirstOrDefault(e => e.Value.Equals(value)); 42 | } 43 | 44 | public static IList AllEnums => AllEnumsCache.Value.AsReadOnly(); 45 | } 46 | } -------------------------------------------------------------------------------- /Source/LrControl.Api/Common/IClassEnum.cs: -------------------------------------------------------------------------------- 1 | namespace LrControl.Api.Common 2 | { 3 | public interface IClassEnum 4 | { 5 | string Name { get; } 6 | TValue Value { get; } 7 | } 8 | } -------------------------------------------------------------------------------- /Source/LrControl.Api/Common/ModuleBase.cs: -------------------------------------------------------------------------------- 1 | using LrControl.Api.Communication; 2 | 3 | namespace LrControl.Api.Common 4 | { 5 | internal abstract class ModuleBase 6 | { 7 | private readonly MessageProtocol _messageProtocol; 8 | 9 | protected ModuleBase(MessageProtocol messageProtocol) 10 | { 11 | _messageProtocol = messageProtocol; 12 | } 13 | 14 | protected bool Invoke(string method, params object[] args) 15 | { 16 | return _messageProtocol.Invoke(method, args); 17 | } 18 | 19 | protected bool Invoke(out TResult result, string method, params object[] args) 20 | { 21 | return _messageProtocol.Invoke(out result, method, args); 22 | } 23 | 24 | protected bool Invoke(out TResult1 result1, out TResult2 result2, string method, 25 | params object[] args) 26 | { 27 | return _messageProtocol.Invoke(out result1, out result2, method, args); 28 | } 29 | 30 | protected bool Invoke(out TResult1 result1, out TResult2 result2, 31 | out TResult3 result3, string method, params object[] args) 32 | { 33 | return _messageProtocol.Invoke(out result1, out result2, out result3, method, args); 34 | } 35 | 36 | protected static bool False(out T1 t1) 37 | { 38 | t1 = default(T1); 39 | return false; 40 | } 41 | 42 | protected static bool False(out T1 t1, out T2 t2) 43 | { 44 | t1 = default(T1); 45 | t2 = default(T2); 46 | return false; 47 | } 48 | 49 | protected static bool False(out T1 t1, out T2 t2, out T3 t3) 50 | { 51 | t1 = default(T1); 52 | t2 = default(T2); 53 | t3 = default(T3); 54 | return false; 55 | } 56 | } 57 | } -------------------------------------------------------------------------------- /Source/LrControl.Api/Common/Range.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace LrControl.Api.Common 4 | { 5 | public class Range 6 | { 7 | public Range(double minimum, double maximum) 8 | { 9 | if (maximum < minimum) throw new ArgumentException("Maximum must be larger than minimum", nameof(maximum)); 10 | 11 | Minimum = minimum; 12 | Maximum = maximum; 13 | } 14 | 15 | public Range() : this(0,0) 16 | { 17 | } 18 | 19 | public double Minimum { get; set; } 20 | public double Maximum { get; set; } 21 | 22 | public bool IsWithin(double value) 23 | { 24 | return value <= Maximum && value >= Minimum; 25 | } 26 | 27 | public double FromRange(Range range, double value) 28 | { 29 | if (!range.IsWithin(value)) 30 | throw new ArgumentException($"{value} is not within {range}"); 31 | 32 | return Minimum + (Maximum - Minimum)*((value - range.Minimum)/(range.Maximum - range.Minimum)); 33 | } 34 | 35 | public override string ToString() 36 | { 37 | return $"[{Minimum},{Maximum}]"; 38 | } 39 | 40 | public static bool operator <(double value, Range range) 41 | { 42 | return value < range.Minimum; 43 | } 44 | 45 | public static bool operator <=(double value, Range range) 46 | { 47 | return value <= range.Minimum; 48 | } 49 | 50 | public static bool operator >(double value, Range range) 51 | { 52 | return value > range.Maximum; 53 | } 54 | 55 | public static bool operator >=(double value, Range range) 56 | { 57 | return value >= range.Maximum; 58 | } 59 | } 60 | } -------------------------------------------------------------------------------- /Source/LrControl.Api/Communication/PluginEvent.cs: -------------------------------------------------------------------------------- 1 | namespace LrControl.Api.Communication 2 | { 3 | internal struct PluginEvent 4 | { 5 | public PluginEvent(PluginEventType pluginEventType, string data) 6 | { 7 | PluginEventType = pluginEventType; 8 | Data = data; 9 | } 10 | 11 | public PluginEventType PluginEventType { get; } 12 | 13 | public string Data { get; } 14 | } 15 | } -------------------------------------------------------------------------------- /Source/LrControl.Api/Communication/PluginEventType.cs: -------------------------------------------------------------------------------- 1 | namespace LrControl.Api.Communication 2 | { 3 | internal enum PluginEventType 4 | { 5 | Module, 6 | Change 7 | } 8 | } -------------------------------------------------------------------------------- /Source/LrControl.Api/Communication/Sockets/SendSocket.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Net.Sockets; 3 | using System.Text; 4 | using Serilog; 5 | 6 | namespace LrControl.Api.Communication.Sockets 7 | { 8 | internal class SendSocket : SocketBase 9 | { 10 | private static readonly ILogger Log = Serilog.Log.ForContext(); 11 | 12 | public SendSocket(string hostName, int port) : base(hostName, port) 13 | { 14 | } 15 | 16 | public bool Send(string message) 17 | { 18 | if (!IsOpen) 19 | throw new InvalidOperationException("Cannot send when not open"); 20 | 21 | if (!IsConnected) 22 | return false; 23 | 24 | try 25 | { 26 | var bytes = Encoding.UTF8.GetBytes(message + "\n"); 27 | Socket.Send(bytes); 28 | return true; 29 | } 30 | catch (SocketException e) 31 | { 32 | Log.Error(e, "Error while sending message '{Message}', reconnecting", message); 33 | Reconnect(); 34 | 35 | return false; 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /Source/LrControl.Api/LrControl.Api.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netstandard2.0;net461 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /Source/LrControl.Api/Modules/LrApplicationView/Module.cs: -------------------------------------------------------------------------------- 1 | using LrControl.Api.Common; 2 | 3 | namespace LrControl.Api.Modules.LrApplicationView 4 | { 5 | public class Module : ClassEnum 6 | { 7 | public static readonly Module Library = new Module("library", "Library"); 8 | public static readonly Module Develop = new Module("develop", "Develop"); 9 | public static readonly Module Map = new Module("map", "Map"); 10 | public static readonly Module Slideshow = new Module("slideshow", "Slideshow"); 11 | public static readonly Module Print = new Module("print", "Print"); 12 | public static readonly Module Web = new Module("web", "Web"); 13 | public static readonly Module Book = new Module("book", "Book"); 14 | 15 | 16 | private Module(string value, string name) : base(value, name) 17 | { 18 | } 19 | } 20 | } -------------------------------------------------------------------------------- /Source/LrControl.Api/Modules/LrApplicationView/PrimaryView.cs: -------------------------------------------------------------------------------- 1 | using LrControl.Api.Common; 2 | 3 | namespace LrControl.Api.Modules.LrApplicationView 4 | { 5 | public class PrimaryView : ClassEnum 6 | { 7 | public static readonly PrimaryView Loupe = new PrimaryView("loupe", "Loupe"); 8 | public static readonly PrimaryView Grid =new PrimaryView("grid", "Grid"); 9 | public static readonly PrimaryView Compare = new PrimaryView("compare", "Compare"); 10 | public static readonly PrimaryView Survey = new PrimaryView("survey", "Survey"); 11 | public static readonly PrimaryView People = new PrimaryView("people", "People"); 12 | public static readonly PrimaryView DevelopLoupe = new PrimaryView("develop_loupe", "Develop Loupe"); 13 | public static readonly PrimaryView DevelopBeforeAfterHorizontal = new PrimaryView("develop_before_after_horiz", "Develop Before/After Horizontal"); 14 | public static readonly PrimaryView DevelopBeforeAfterVertical = new PrimaryView("develop_before_after_vert", "Develop Before/After Vertical"); 15 | public static readonly PrimaryView DevelopBefore = new PrimaryView("develop_before", "Develop Before"); 16 | 17 | 18 | private PrimaryView(string value, string name) : base(value, name) 19 | { 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /Source/LrControl.Api/Modules/LrApplicationView/SecondaryView.cs: -------------------------------------------------------------------------------- 1 | using LrControl.Api.Common; 2 | 3 | namespace LrControl.Api.Modules.LrApplicationView 4 | { 5 | public class SecondaryView : ClassEnum 6 | { 7 | public static readonly SecondaryView Loupe = new SecondaryView("loupe", "Loupe"); 8 | public static readonly SecondaryView LiveLoupe = new SecondaryView("live_loupe", "Live Loupe"); 9 | public static readonly SecondaryView LockedLoupe = new SecondaryView("locked_loupe", "Locked Loupe"); 10 | public static readonly SecondaryView Grid = new SecondaryView("grid", "Grid"); 11 | public static readonly SecondaryView Compare = new SecondaryView("compare", "Compare"); 12 | public static readonly SecondaryView Survey = new SecondaryView("survey", "Survey"); 13 | public static readonly SecondaryView Slideshow = new SecondaryView("slideshow", "Slidesohw"); 14 | 15 | 16 | private SecondaryView(string value, string name) : base(value, name) 17 | { 18 | } 19 | } 20 | } -------------------------------------------------------------------------------- /Source/LrControl.Api/Modules/LrControl/ILrControl.cs: -------------------------------------------------------------------------------- 1 | namespace LrControl.Api.Modules.LrControl 2 | { 3 | public interface ILrControl 4 | { 5 | /// 6 | /// Gets the running plugin version (major.minor) 7 | /// 8 | /// 9 | bool GetApiVersion(out string apiVersion); 10 | } 11 | } -------------------------------------------------------------------------------- /Source/LrControl.Api/Modules/LrControl/LrControl.cs: -------------------------------------------------------------------------------- 1 | using LrControl.Api.Common; 2 | using LrControl.Api.Communication; 3 | 4 | namespace LrControl.Api.Modules.LrControl 5 | { 6 | internal class LrControl : ModuleBase, ILrControl 7 | { 8 | public LrControl(MessageProtocol messageProtocol) : base(messageProtocol) 9 | { 10 | } 11 | 12 | public bool GetApiVersion(out string apiVersion) 13 | { 14 | return Invoke(out apiVersion, nameof(GetApiVersion)); 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /Source/LrControl.Api/Modules/LrDevelopController/IParameter.cs: -------------------------------------------------------------------------------- 1 | namespace LrControl.Api.Modules.LrDevelopController 2 | { 3 | public interface IParameter : IParameter 4 | { 5 | } 6 | 7 | public interface IParameter 8 | { 9 | string Name { get; } 10 | string DisplayName { get; } 11 | } 12 | } -------------------------------------------------------------------------------- /Source/LrControl.Api/Modules/LrDevelopController/Panels.cs: -------------------------------------------------------------------------------- 1 | using LrControl.Api.Common; 2 | 3 | namespace LrControl.Api.Modules.LrDevelopController 4 | { 5 | public class Panel : ClassEnum 6 | { 7 | public static readonly Panel Basic = new Panel("adjustPanel", "Basic"); 8 | public static readonly Panel ToneCurve = new Panel("tonePanel", "Tone Curve"); 9 | public static readonly Panel ColorAdjustment = new Panel("mixerPanel", "Color Adjustment"); 10 | public static readonly Panel SplitToning = new Panel("splitToningPanel", "Split Toning"); 11 | public static readonly Panel Detail = new Panel("detailPanel", "Detail"); 12 | public static readonly Panel LensCorrections = new Panel("lensCorrectionsPanel", "Lens Corrections"); 13 | public static readonly Panel Effects = new Panel("effectsPanel", "Effects"); 14 | public static readonly Panel CameraCalibration = new Panel("calibratePanel", "Camera Calibration"); 15 | 16 | 17 | private Panel(string value, string name) : base(value, name) 18 | { 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /Source/LrControl.Api/Modules/LrDevelopController/Parameter.cs: -------------------------------------------------------------------------------- 1 | namespace LrControl.Api.Modules.LrDevelopController 2 | { 3 | internal class Parameter : IParameter 4 | { 5 | public Parameter(string name, string displayName) 6 | { 7 | Name = name; 8 | DisplayName = displayName; 9 | } 10 | 11 | public string Name { get; } 12 | public string DisplayName { get; } 13 | 14 | private bool Equals(IParameter other) 15 | { 16 | return string.Equals(Name, other.Name); 17 | } 18 | 19 | public override bool Equals(object obj) 20 | { 21 | if (ReferenceEquals(null, obj)) return false; 22 | if (ReferenceEquals(this, obj)) return true; 23 | if (obj.GetType() != GetType()) return false; 24 | return Equals((Parameter) obj); 25 | } 26 | 27 | public override int GetHashCode() 28 | { 29 | return Name?.GetHashCode() ?? 0; 30 | } 31 | } 32 | } -------------------------------------------------------------------------------- /Source/LrControl.Api/Modules/LrDevelopController/Parameters/AdjustPanelParameter.cs: -------------------------------------------------------------------------------- 1 | namespace LrControl.Api.Modules.LrDevelopController.Parameters 2 | { 3 | public class AdjustPanelParameter : ParameterGroup 4 | { 5 | public readonly IParameter WhiteBalance = new Parameter("WhiteBalance", "Whitebalance"); 6 | public readonly IParameter Temperature = new Parameter("Temperature", "Whitebalance: Temperature"); 7 | public readonly IParameter Tint = new Parameter("Tint", "Whitebalance: Tint"); 8 | public readonly IParameter Exposure = new Parameter("Exposure", "Tone: Exposure"); 9 | public readonly IParameter Contrast = new Parameter("Contrast", "Tone: Contrast"); 10 | public readonly IParameter Highlights = new Parameter("Highlights", "Tone: Highlights"); 11 | public readonly IParameter Shadows = new Parameter("Shadows", "Tone: Shadows"); 12 | public readonly IParameter Whites = new Parameter("Whites", "Tone: Whites"); 13 | public readonly IParameter Blacks = new Parameter("Blacks", "Tone: Blacks"); 14 | public readonly IParameter Clarity = new Parameter("Clarity", "Presence: Clarity"); 15 | public readonly IParameter Vibrance = new Parameter("Vibrance", "Presence: Vibrance"); 16 | public readonly IParameter Saturation = new Parameter("Saturation", "Presence: Saturation"); 17 | 18 | internal AdjustPanelParameter() : base("Basic") 19 | { 20 | AddParameters(WhiteBalance, Temperature, Tint, Exposure, Contrast, Highlights, Shadows, Whites, Blacks, 21 | Clarity, Vibrance, Saturation); 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /Source/LrControl.Api/Modules/LrDevelopController/Parameters/CalibratePanelParameter.cs: -------------------------------------------------------------------------------- 1 | namespace LrControl.Api.Modules.LrDevelopController.Parameters 2 | { 3 | public class CalibratePanelParameter : ParameterGroup 4 | { 5 | public readonly IParameter Profile = new Parameter("CameraProfile", "Profile"); 6 | public readonly IParameter ShadowTint = new Parameter("ShadowTint", "Shadows: Tint"); 7 | public readonly IParameter RedHue = new Parameter("RedHue", "Red Primary: Hue"); 8 | public readonly IParameter RedSaturation = new Parameter("RedSaturation", "Red Primary: Saturation"); 9 | public readonly IParameter GreenHue = new Parameter("GreenHue", "Green Primary: Hue"); 10 | public readonly IParameter GreenSaturation = new Parameter("GreenSaturation", "Green Primary: Saturation"); 11 | public readonly IParameter BlueHue = new Parameter("BlueHue", "Blue Primary: Hue"); 12 | public readonly IParameter BlueSaturation = new Parameter("BlueSaturation", "Blue Primary: Saturation"); 13 | 14 | internal CalibratePanelParameter() : base("Camera calibration") 15 | { 16 | AddParameters(Profile, ShadowTint, RedHue, RedSaturation, GreenHue, GreenSaturation, BlueHue, BlueSaturation); 17 | } 18 | } 19 | } -------------------------------------------------------------------------------- /Source/LrControl.Api/Modules/LrDevelopController/Parameters/CropParameter.cs: -------------------------------------------------------------------------------- 1 | namespace LrControl.Api.Modules.LrDevelopController.Parameters 2 | { 3 | public class CropParameter : ParameterGroup 4 | { 5 | public readonly IParameter StraightenAngle = new Parameter("straightenAngle", "Angle"); 6 | public readonly IParameter CropAngle = new Parameter("CropAngle", "Crop Angle"); 7 | public readonly IParameter CropLeft = new Parameter("CropLeft", "Crop Left"); 8 | public readonly IParameter CropRight = new Parameter("CropRight", "Crop Right"); 9 | public readonly IParameter CropTop = new Parameter("CropTop", "Crop Top"); 10 | public readonly IParameter CropBottom = new Parameter("CropBottom", "Crop Bottom"); 11 | 12 | internal CropParameter() : base("Crop & Straigten") 13 | { 14 | AddParameters(StraightenAngle, CropAngle, CropLeft, CropRight, CropTop, CropBottom); 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /Source/LrControl.Api/Modules/LrDevelopController/Parameters/DetailPanelParameter.cs: -------------------------------------------------------------------------------- 1 | namespace LrControl.Api.Modules.LrDevelopController.Parameters 2 | { 3 | public class DetailPanelParameter : ParameterGroup 4 | { 5 | public readonly IParameter Sharpness = new Parameter("Sharpness", "Sharpening: Amount"); 6 | public readonly IParameter SharpenRadius = new Parameter("SharpenRadius", "Sharpening: Radius"); 7 | public readonly IParameter SharpenDetail = new Parameter("SharpenDetail", "Sharpening: Detail"); 8 | public readonly IParameter SharpenEdgeMasking = new Parameter("SharpenEdgeMasking", "Sharpening: Masking"); 9 | public readonly IParameter LuminanceSmoothing = new Parameter("LuminanceSmoothing", "Noise Reduction: Luminance"); 10 | public readonly IParameter LuminanceNoiseReductionDetail = new Parameter("LuminanceNoiseReductionDetail", "Noise Reduction: Detail"); 11 | public readonly IParameter LuminanceNoiseReductionContrast = new Parameter("LuminanceNoiseReductionContrast", "Noise Reduction: Contrast"); 12 | public readonly IParameter ColorNoiseReduction = new Parameter("ColorNoiseReduction", "Noise Reduction: Color"); 13 | public readonly IParameter ColorNoiseReductionDetail = new Parameter("ColorNoiseReductionDetail", "Noise Reduction: Detail"); 14 | public readonly IParameter ColorNoiseReductionSmoothness = new Parameter("ColorNoiseReductionSmoothness", "Noise Reduction: Smoothness"); 15 | 16 | internal DetailPanelParameter() : base("Detail") 17 | { 18 | AddParameters(Sharpness, SharpenRadius, SharpenDetail, SharpenEdgeMasking, LuminanceSmoothing, 19 | LuminanceNoiseReductionDetail, LuminanceNoiseReductionContrast, ColorNoiseReduction, 20 | ColorNoiseReductionDetail, ColorNoiseReductionSmoothness); 21 | } 22 | } 23 | } -------------------------------------------------------------------------------- /Source/LrControl.Api/Modules/LrDevelopController/Parameters/LocalizedAdjustmentsParameter.cs: -------------------------------------------------------------------------------- 1 | namespace LrControl.Api.Modules.LrDevelopController.Parameters 2 | { 3 | public class LocalizedAdjustmentsParameter : ParameterGroup 4 | { 5 | public readonly IParameter Temperature = new Parameter("local_Temperature", "Temperature"); 6 | public readonly IParameter Tint = new Parameter("local_Tint", "Tint"); 7 | public readonly IParameter Exposure = new Parameter("local_Exposure", "Exposure"); 8 | public readonly IParameter Contrast = new Parameter("local_Contrast", "Contrast"); 9 | public readonly IParameter Highlights = new Parameter("local_Highlights", "Highlights"); 10 | public readonly IParameter Shadows = new Parameter("local_Shadows", "Shadows"); 11 | public readonly IParameter Whites = new Parameter("local_Whites2012", "Whites"); 12 | public readonly IParameter Blacks = new Parameter("local_Blacks2012", "Blacks"); 13 | public readonly IParameter Clarity = new Parameter("local_Clarity", "Clarity"); 14 | public readonly IParameter Dehaze = new Parameter("local_Dehaze", "Dehaze"); 15 | public readonly IParameter Saturation = new Parameter("local_Saturation", "Saturation"); 16 | public readonly IParameter Sharpness = new Parameter("local_Sharpness", "Sharpness"); 17 | public readonly IParameter LuminanceNoise = new Parameter("local_LuminanceNoise", "Noise"); 18 | public readonly IParameter Moire = new Parameter("local_Moire", "Moiré"); 19 | public readonly IParameter Defringe = new Parameter("local_Defringe", "Defringe"); 20 | 21 | internal LocalizedAdjustmentsParameter() : base("Localized Adjustments") 22 | { 23 | AddParameters(Temperature, Tint, Exposure, Contrast, Highlights, Shadows, Whites, Blacks, Clarity, Dehaze, 24 | Saturation, Sharpness, LuminanceNoise, Moire, Defringe); 25 | } 26 | } 27 | } -------------------------------------------------------------------------------- /Source/LrControl.Api/Modules/LrDevelopController/Parameters/ParameterGroup.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Collections.ObjectModel; 3 | 4 | namespace LrControl.Api.Modules.LrDevelopController.Parameters 5 | { 6 | public abstract class ParameterGroup 7 | { 8 | private ReadOnlyCollection _allParameters; 9 | 10 | protected ParameterGroup(string name) 11 | { 12 | Name = name; 13 | } 14 | 15 | public string Name { get; } 16 | 17 | public IList AllParameters => _allParameters; 18 | 19 | protected void AddParameters(params IParameter[] parameters) 20 | { 21 | _allParameters = new ReadOnlyCollection(parameters); 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /Source/LrControl.Api/Modules/LrDevelopController/Parameters/SplitToningPanelParameter.cs: -------------------------------------------------------------------------------- 1 | namespace LrControl.Api.Modules.LrDevelopController.Parameters 2 | { 3 | public class SplitToningPanelParameter : ParameterGroup 4 | { 5 | public readonly IParameter SplitToningHighlightHue = new Parameter("SplitToningHighlightHue", "Highlights: Hue"); 6 | public readonly IParameter SplitToningHighlightSaturation = new Parameter("SplitToningHighlightSaturation", "Highlights: Saturation"); 7 | public readonly IParameter SplitToningBalance = new Parameter("SplitToningBalance", "Balance"); 8 | public readonly IParameter SplitToningShadowHue = new Parameter("SplitToningShadowHue", "Shadows: Hue"); 9 | public readonly IParameter SplitToningShadowSaturation = new Parameter("SplitToningShadowSaturation", "Shadows: Saturation"); 10 | 11 | internal SplitToningPanelParameter() : base("Split Toning") 12 | { 13 | AddParameters(SplitToningHighlightHue, SplitToningHighlightSaturation, SplitToningBalance, 14 | SplitToningShadowHue, SplitToningShadowSaturation); 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /Source/LrControl.Api/Modules/LrDevelopController/Parameters/TonePanelParameter.cs: -------------------------------------------------------------------------------- 1 | namespace LrControl.Api.Modules.LrDevelopController.Parameters 2 | { 3 | public class TonePanelParameter : ParameterGroup 4 | { 5 | public readonly IParameter ParametricHighlights = new Parameter("ParametricHighlights", "Highlights"); 6 | public readonly IParameter ParametricLights = new Parameter("ParametricLights", "Lights"); 7 | public readonly IParameter ParametricDarks = new Parameter("ParametricDarks", "Darks"); 8 | public readonly IParameter ParametricShadows = new Parameter("ParametricShadows", "Shadows"); 9 | public readonly IParameter ParametricShadowSplit = new Parameter("ParametricShadowSplit", "Shadow Split"); 10 | public readonly IParameter ParametricMidtoneSplit = new Parameter("ParametricMidtoneSplit", "Midtone Split"); 11 | public readonly IParameter ParametricHighlightSplit = new Parameter("ParametricHighlightSplit", "Highlight Split"); 12 | 13 | internal TonePanelParameter() : base("Tone Curve") 14 | { 15 | AddParameters(ParametricHighlights, ParametricLights, ParametricDarks, ParametricShadows, 16 | ParametricShadowSplit, ParametricMidtoneSplit, ParametricHighlightSplit); 17 | } 18 | } 19 | } -------------------------------------------------------------------------------- /Source/LrControl.Api/Modules/LrDevelopController/PostCropVignetteStyle.cs: -------------------------------------------------------------------------------- 1 | using LrControl.Api.Common; 2 | 3 | namespace LrControl.Api.Modules.LrDevelopController 4 | { 5 | public class PostCropVignetteStyle : ClassEnum 6 | { 7 | public static readonly PostCropVignetteStyle HighlightPriority = new PostCropVignetteStyle(1,"Highlight Priority"); 8 | public static readonly PostCropVignetteStyle ColorPriority = new PostCropVignetteStyle(2,"Color Priority"); 9 | public static readonly PostCropVignetteStyle PaintOverlay = new PostCropVignetteStyle(3,"Paint Overlay"); 10 | 11 | private PostCropVignetteStyle(int value, string name) : base(value, name) 12 | { 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /Source/LrControl.Api/Modules/LrDevelopController/ProcessVersion.cs: -------------------------------------------------------------------------------- 1 | using LrControl.Api.Common; 2 | 3 | // ReSharper disable InconsistentNaming 4 | 5 | namespace LrControl.Api.Modules.LrDevelopController 6 | { 7 | public class ProcessVersion : ClassEnum 8 | { 9 | public static readonly ProcessVersion PV2003 = new ProcessVersion("2003"); 10 | public static readonly ProcessVersion PV2010 = new ProcessVersion("2010"); 11 | public static readonly ProcessVersion PV2012 = new ProcessVersion("2012"); 12 | 13 | 14 | private ProcessVersion(string name) : base(name, name) 15 | { 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /Source/LrControl.Api/Modules/LrDevelopController/ProfileValue.cs: -------------------------------------------------------------------------------- 1 | using LrControl.Api.Common; 2 | 3 | namespace LrControl.Api.Modules.LrDevelopController 4 | { 5 | public class ProfileValue : ClassEnum 6 | { 7 | public static readonly ProfileValue AdobeStandard = new ProfileValue("Adobe Standard"); 8 | public static readonly ProfileValue CameraFaithful = new ProfileValue("Camera Faithful"); 9 | public static readonly ProfileValue CameraLandscape = new ProfileValue("Camera Landscape"); 10 | public static readonly ProfileValue CameraNeutral = new ProfileValue("Camera Neutral"); 11 | public static readonly ProfileValue CameraPortrait = new ProfileValue("Camera Portrait"); 12 | public static readonly ProfileValue CameraStandard = new ProfileValue("Camera Standard"); 13 | //public static readonly ProfileValue CameraClear = new ProfileValue("CameraClear"); 14 | //public static readonly ProfileValue CameraDeep = new ProfileValue("CameraDeep"); 15 | //public static readonly ProfileValue CameraLandscape = new ProfileValue("CameraLandscape"); 16 | //public static readonly ProfileValue CameraLight = new ProfileValue("CameraLight"); 17 | //public static readonly ProfileValue CameraNeutral = new ProfileValue("CameraNeutral"); 18 | //public static readonly ProfileValue CameraPortrait = new ProfileValue("CameraPortrait"); 19 | //public static readonly ProfileValue CameraStandard = new ProfileValue("CameraStandard"); 20 | //public static readonly ProfileValue CameraVivid = new ProfileValue("CameraVivid"); 21 | 22 | 23 | private ProfileValue(string name) : base(name, name) 24 | { 25 | } 26 | } 27 | } -------------------------------------------------------------------------------- /Source/LrControl.Api/Modules/LrDevelopController/Tool.cs: -------------------------------------------------------------------------------- 1 | using LrControl.Api.Common; 2 | 3 | namespace LrControl.Api.Modules.LrDevelopController 4 | { 5 | public class Tool : ClassEnum 6 | { 7 | public static readonly Tool Loupe = new Tool("loupe", "Loupe"); 8 | public static readonly Tool Crop = new Tool("crop", "Crop"); 9 | public static readonly Tool SpotRemoval = new Tool("dust", "Spot Removal"); 10 | public static readonly Tool RedEye = new Tool("redeye", "Red Eye Correction"); 11 | public static readonly Tool GraduatedFilter = new Tool("gradient", "Graduated Filter"); 12 | public static readonly Tool RadialFilter = new Tool("circularGradient", "Radial Filter"); 13 | public static readonly Tool AdjustmentBrush = new Tool("localized", "Adjustment Brush"); 14 | 15 | 16 | private Tool(string value, string name) : base(value, name) 17 | { 18 | } 19 | } 20 | } -------------------------------------------------------------------------------- /Source/LrControl.Api/Modules/LrDevelopController/UprightValue.cs: -------------------------------------------------------------------------------- 1 | using LrControl.Api.Common; 2 | 3 | namespace LrControl.Api.Modules.LrDevelopController 4 | { 5 | public class UprightValue : ClassEnum 6 | { 7 | public static readonly UprightValue Off = new UprightValue(0, "Off"); 8 | public static readonly UprightValue Auto = new UprightValue(1, "Auto"); 9 | public static readonly UprightValue Full = new UprightValue(2, "Full"); 10 | public static readonly UprightValue Level = new UprightValue(3, "Level"); 11 | public static readonly UprightValue Vertical = new UprightValue(4, "Vertical"); 12 | 13 | 14 | private UprightValue(int value, string name) : base(value, name) 15 | { 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /Source/LrControl.Api/Modules/LrDevelopController/WhiteBalanceValue.cs: -------------------------------------------------------------------------------- 1 | using LrControl.Api.Common; 2 | 3 | namespace LrControl.Api.Modules.LrDevelopController 4 | { 5 | public class WhiteBalanceValue : ClassEnum 6 | { 7 | public static readonly WhiteBalanceValue AsShot = new WhiteBalanceValue("As Shot"); 8 | public static readonly WhiteBalanceValue Auto = new WhiteBalanceValue("Auto"); 9 | public static readonly WhiteBalanceValue Cloudy = new WhiteBalanceValue("Cloudy"); 10 | public static readonly WhiteBalanceValue Daylight = new WhiteBalanceValue("Daylight"); 11 | public static readonly WhiteBalanceValue Flash = new WhiteBalanceValue("Flash"); 12 | public static readonly WhiteBalanceValue Flourescent = new WhiteBalanceValue("Flourescent"); 13 | public static readonly WhiteBalanceValue Shade = new WhiteBalanceValue("Shade"); 14 | public static readonly WhiteBalanceValue Tungsten = new WhiteBalanceValue("Tungsten"); 15 | 16 | private WhiteBalanceValue(string name) : base(name, name) 17 | { 18 | } 19 | } 20 | } -------------------------------------------------------------------------------- /Source/LrControl.Api/Modules/LrDialogs/ConfirmResult.cs: -------------------------------------------------------------------------------- 1 | using LrControl.Api.Common; 2 | 3 | namespace LrControl.Api.Modules.LrDialogs 4 | { 5 | public class ConfirmResult : ClassEnum 6 | { 7 | public static readonly ConfirmResult Ok = new ConfirmResult("ok", "Ok"); 8 | public static readonly ConfirmResult Cancel = new ConfirmResult("cancel", "Cancel"); 9 | public static readonly ConfirmResult Other = new ConfirmResult("other", "Other"); 10 | 11 | 12 | private ConfirmResult(string value, string name) : base(value, name) 13 | { 14 | } 15 | } 16 | } -------------------------------------------------------------------------------- /Source/LrControl.Api/Modules/LrDialogs/DialogStyle.cs: -------------------------------------------------------------------------------- 1 | using LrControl.Api.Common; 2 | 3 | namespace LrControl.Api.Modules.LrDialogs 4 | { 5 | public class DialogStyle : ClassEnum 6 | { 7 | public static readonly DialogStyle Info = new DialogStyle("info", "Info"); 8 | public static readonly DialogStyle Warning = new DialogStyle("warning", "Warning"); 9 | public static readonly DialogStyle Critical = new DialogStyle("critical", "Critical"); 10 | 11 | 12 | private DialogStyle(string value, string name) : base(value, name) 13 | { 14 | } 15 | } 16 | } -------------------------------------------------------------------------------- /Source/LrControl.Api/Modules/LrDialogs/LrDialogs.cs: -------------------------------------------------------------------------------- 1 | using LrControl.Api.Common; 2 | using LrControl.Api.Communication; 3 | 4 | namespace LrControl.Api.Modules.LrDialogs 5 | { 6 | internal class LrDialogs : ModuleBase, ILrDialogs 7 | { 8 | public LrDialogs(MessageProtocol messageProtocol) : base(messageProtocol) 9 | { 10 | } 11 | 12 | public bool Confirm(out ConfirmResult confirmResult, string message, string info, string actionVerb, string cancelVerb, 13 | string otherVerb = null) 14 | { 15 | if (Invoke(out string result, nameof(Confirm), message, info, actionVerb, cancelVerb, otherVerb)) 16 | { 17 | confirmResult = ConfirmResult.GetEnumForValue(result); 18 | return true; 19 | } 20 | confirmResult = null; 21 | return false; 22 | } 23 | 24 | public bool Message(string message, string info = null, DialogStyle style = null) 25 | { 26 | return Invoke(nameof(message), info, style); 27 | } 28 | 29 | public bool ShowBezel(string message, double? fadeDelay = null) 30 | { 31 | return Invoke(nameof(ShowBezel), message, fadeDelay); 32 | } 33 | 34 | public bool ShowError(string errorString) 35 | { 36 | return Invoke(nameof(ShowError), errorString); 37 | } 38 | } 39 | } -------------------------------------------------------------------------------- /Source/LrControl.Api/Modules/LrSelection/ColorLabel.cs: -------------------------------------------------------------------------------- 1 | using LrControl.Api.Common; 2 | 3 | namespace LrControl.Api.Modules.LrSelection 4 | { 5 | public class ColorLabel : ClassEnum 6 | { 7 | public static readonly ColorLabel Red = new ColorLabel("red", "Red"); 8 | public static readonly ColorLabel Yellow = new ColorLabel("yellow", "Yellow"); 9 | public static readonly ColorLabel Green = new ColorLabel("green", "Green"); 10 | public static readonly ColorLabel Blue = new ColorLabel("blue", "Blue"); 11 | public static readonly ColorLabel Purple = new ColorLabel("purple", "Purple"); 12 | public static readonly ColorLabel Other = new ColorLabel("other", "Other"); 13 | public static readonly ColorLabel None = new ColorLabel("none", "None"); 14 | 15 | private ColorLabel(string value, string name) : base(value, name) 16 | { 17 | } 18 | } 19 | } -------------------------------------------------------------------------------- /Source/LrControl.Api/Modules/LrSelection/Direction.cs: -------------------------------------------------------------------------------- 1 | using LrControl.Api.Common; 2 | 3 | namespace LrControl.Api.Modules.LrSelection 4 | { 5 | public class Direction : ClassEnum 6 | { 7 | public static readonly Direction Left = new Direction("left", "Left"); 8 | public static readonly Direction Right = new Direction("right", "Right"); 9 | 10 | private Direction(string value, string name) : base(value, name) 11 | { 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /Source/LrControl.Api/Modules/LrSelection/Flag.cs: -------------------------------------------------------------------------------- 1 | using LrControl.Api.Common; 2 | 3 | namespace LrControl.Api.Modules.LrSelection 4 | { 5 | public class Flag : ClassEnum 6 | { 7 | public static readonly Flag None = new Flag(0, "None"); 8 | public static readonly Flag Pick = new Flag(1, "Pick"); 9 | public static readonly Flag Reject = new Flag(-1, "Reject"); 10 | 11 | 12 | private Flag(int value, string name) : base(value, name) 13 | { 14 | } 15 | } 16 | } -------------------------------------------------------------------------------- /Source/LrControl.Api/Modules/LrUndo/ILrUndo.cs: -------------------------------------------------------------------------------- 1 | using LrControl.Api.Common.Attributes; 2 | 3 | namespace LrControl.Api.Modules.LrUndo 4 | { 5 | [LuaNativeModule("LrUndo")] 6 | public interface ILrUndo 7 | { 8 | /// 9 | /// Returns true of the redo command is currently enabled. 10 | /// 11 | /// 12 | [LuaMethod] 13 | bool CanRedo(out bool canRedo); 14 | 15 | /// 16 | /// Returns true of the undo command is currently enabled. 17 | /// 18 | /// 19 | [LuaMethod] 20 | bool CanUndo(out bool canUndo); 21 | 22 | /// 23 | /// Redoes the last undone history state. 24 | /// 25 | [LuaMethod] 26 | bool Redo(); 27 | 28 | /// 29 | /// Undoes the last history state. 30 | /// 31 | [LuaMethod] 32 | bool Undo(); 33 | } 34 | } -------------------------------------------------------------------------------- /Source/LrControl.Api/Modules/LrUndo/LrUndo.cs: -------------------------------------------------------------------------------- 1 | using LrControl.Api.Common; 2 | using LrControl.Api.Communication; 3 | 4 | namespace LrControl.Api.Modules.LrUndo 5 | { 6 | internal class LrUndo : ModuleBase, ILrUndo 7 | { 8 | public LrUndo(MessageProtocol messageProtocol) : base(messageProtocol) 9 | { 10 | } 11 | 12 | public bool CanRedo(out bool canRedo) 13 | { 14 | return Invoke(out canRedo, nameof(CanRedo)); 15 | } 16 | 17 | public bool CanUndo(out bool canUndo) 18 | { 19 | return Invoke(out canUndo, nameof(CanUndo)); 20 | } 21 | 22 | public bool Redo() 23 | { 24 | return Invoke(nameof(Redo)); 25 | } 26 | 27 | public bool Undo() 28 | { 29 | return Invoke(nameof(Undo)); 30 | } 31 | } 32 | } -------------------------------------------------------------------------------- /Source/LrControl.Console/LrControl.Console.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Exe 5 | netcoreapp2.0 6 | false 7 | 8 | 9 | 10 | ..\..\Build\Debug\LrControl.lrplugin\console\ 11 | 12 | 13 | 14 | ..\..\Build\Release\LrControl.lrplugin\console\ 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /Source/LrControl.Console/Program.cs: -------------------------------------------------------------------------------- 1 | using LrControl.Core; 2 | 3 | namespace LrControl.Console 4 | { 5 | class Program 6 | { 7 | static void Main(string[] args) 8 | { 9 | var lrControlApplication = LrControlApplication.Create(); 10 | 11 | lrControlApplication.ConnectionStatus += (connected, version) => 12 | System.Console.WriteLine($"Connection status: {connected} {version}"); 13 | 14 | lrControlApplication.UpdateConnectionStatus(); 15 | 16 | System.Console.ReadLine(); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Source/LrControl.Core/Configurations/ControllerConfiguration.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using JetBrains.Annotations; 3 | using LrControl.Core.Devices; 4 | using LrControl.Core.Devices.Enums; 5 | 6 | namespace LrControl.Core.Configurations 7 | { 8 | public class ControllerConfiguration : ControllerConfigurationKey 9 | { 10 | [UsedImplicitly] 11 | public ControllerConfiguration() 12 | { 13 | } 14 | 15 | public ControllerConfiguration(Controller controller) : base(controller) 16 | { 17 | ControllerType = controller.ControllerType; 18 | RangeMin = (int)controller.Range.Minimum; 19 | RangeMax = (int)controller.Range.Maximum; 20 | } 21 | 22 | public ControllerType ControllerType { get; set; } 23 | public int RangeMin { get; set; } 24 | public int RangeMax { get; set; } 25 | } 26 | } -------------------------------------------------------------------------------- /Source/LrControl.Core/Configurations/ControllerConfigurationKey.cs: -------------------------------------------------------------------------------- 1 | using LrControl.Core.Devices; 2 | using LrControl.Core.Devices.Enums; 3 | using Midi.Enums; 4 | 5 | namespace LrControl.Core.Configurations 6 | { 7 | public class ControllerConfigurationKey 8 | { 9 | public ControllerConfigurationKey() 10 | { 11 | } 12 | 13 | public ControllerConfigurationKey(Controller controller) 14 | { 15 | Channel = controller.Channel; 16 | MessageType = controller.MessageType; 17 | ControlNumber = controller.ControlNumber; 18 | } 19 | 20 | public Channel Channel { get; set; } 21 | public ControllerMessageType MessageType { get; set; } 22 | public int ControlNumber { get; set; } 23 | } 24 | } -------------------------------------------------------------------------------- /Source/LrControl.Core/Configurations/ControllerFunctionConfiguration.cs: -------------------------------------------------------------------------------- 1 | using JetBrains.Annotations; 2 | using LrControl.Core.Mapping; 3 | 4 | namespace LrControl.Core.Configurations 5 | { 6 | public class ControllerFunctionConfiguration 7 | { 8 | [UsedImplicitly] 9 | public ControllerFunctionConfiguration() 10 | { 11 | } 12 | 13 | public ControllerFunctionConfiguration(ControllerFunction controllerFunction) 14 | { 15 | ControllerKey = new ControllerConfigurationKey(controllerFunction.Controller); 16 | FunctionKey = controllerFunction.Function?.Key; 17 | } 18 | 19 | public ControllerConfigurationKey ControllerKey { get; set; } 20 | public string FunctionKey { get; set; } 21 | } 22 | } -------------------------------------------------------------------------------- /Source/LrControl.Core/Configurations/FunctionGroupConfiguration.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Linq; 3 | using JetBrains.Annotations; 4 | using LrControl.Core.Mapping; 5 | 6 | namespace LrControl.Core.Configurations 7 | { 8 | public class FunctionGroupConfiguration 9 | { 10 | [UsedImplicitly] 11 | public FunctionGroupConfiguration() 12 | { 13 | } 14 | 15 | public FunctionGroupConfiguration(FunctionGroup functionGroup) 16 | { 17 | Key = functionGroup.Key; 18 | ControllerFunctions = functionGroup.ControllerFunctions 19 | .Select(x => new ControllerFunctionConfiguration(x)) 20 | .ToList(); 21 | } 22 | 23 | public string Key { get; set; } 24 | public List ControllerFunctions { get; set; } 25 | } 26 | } -------------------------------------------------------------------------------- /Source/LrControl.Core/Configurations/MappingConfiguration.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using LrControl.Core.Util; 3 | using Serilog; 4 | 5 | namespace LrControl.Core.Configurations 6 | { 7 | public class MappingConfiguration 8 | { 9 | private static readonly ILogger Log = Serilog.Log.ForContext(); 10 | public const string ConfigurationsFile = @"..\Settings\Configuration.xml"; 11 | 12 | public List Controllers { get; set; } 13 | public List Modules { get; set; } 14 | 15 | public static MappingConfiguration Load(string file) 16 | { 17 | if (Serializer.Load(file, out MappingConfiguration conf)) 18 | { 19 | return conf; 20 | } 21 | return null; 22 | } 23 | 24 | public static void Save(MappingConfiguration conf, string file) 25 | { 26 | Serializer.Save(file, conf); 27 | } 28 | } 29 | } -------------------------------------------------------------------------------- /Source/LrControl.Core/Configurations/ModuleConfiguration.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Linq; 3 | using JetBrains.Annotations; 4 | using LrControl.Core.Mapping; 5 | 6 | namespace LrControl.Core.Configurations 7 | { 8 | public class ModuleConfiguration 9 | { 10 | [UsedImplicitly] 11 | public ModuleConfiguration() 12 | { 13 | } 14 | 15 | public ModuleConfiguration(ModuleGroup moduleGroup) 16 | { 17 | ModuleName = moduleGroup.Module.Value; 18 | FunctionGroups = moduleGroup.FunctionGroups 19 | .Select(x => new FunctionGroupConfiguration(x)) 20 | .ToList(); 21 | } 22 | 23 | public string ModuleName { get; set; } 24 | public List FunctionGroups { get; set; } 25 | } 26 | } -------------------------------------------------------------------------------- /Source/LrControl.Core/Devices/ControllerKey.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using LrControl.Core.Devices.Enums; 3 | using Midi.Enums; 4 | 5 | namespace LrControl.Core.Devices 6 | { 7 | internal struct ControllerKey : IEquatable 8 | { 9 | public ControllerMessageType ControllerMessageType { get; } 10 | public Channel Channel { get; } 11 | public int ControlNumber { get; } 12 | 13 | public ControllerKey(ControllerMessageType controllerMessageType, Channel channel, int controlNumber) 14 | { 15 | ControllerMessageType = controllerMessageType; 16 | Channel = channel; 17 | ControlNumber = controlNumber; 18 | } 19 | 20 | public ControllerKey(Controller controller) : this(controller.MessageType, controller.Channel, 21 | controller.ControlNumber) 22 | { 23 | } 24 | 25 | public bool Equals(ControllerKey other) 26 | { 27 | return ControllerMessageType == other.ControllerMessageType && Channel == other.Channel && ControlNumber == other.ControlNumber; 28 | } 29 | 30 | public override bool Equals(object obj) 31 | { 32 | if (ReferenceEquals(null, obj)) return false; 33 | return obj is ControllerKey && Equals((ControllerKey) obj); 34 | } 35 | 36 | public override int GetHashCode() 37 | { 38 | unchecked 39 | { 40 | var hashCode = (int) ControllerMessageType; 41 | hashCode = (hashCode * 397) ^ (int) Channel; 42 | hashCode = (hashCode * 397) ^ ControlNumber; 43 | return hashCode; 44 | } 45 | } 46 | } 47 | } -------------------------------------------------------------------------------- /Source/LrControl.Core/Devices/Enums/ControllerMessageType.cs: -------------------------------------------------------------------------------- 1 | namespace LrControl.Core.Devices.Enums 2 | { 3 | public enum ControllerMessageType 4 | { 5 | ControlChange, 6 | Nrpn 7 | } 8 | } -------------------------------------------------------------------------------- /Source/LrControl.Core/Devices/Enums/ControllerType.cs: -------------------------------------------------------------------------------- 1 | namespace LrControl.Core.Devices.Enums 2 | { 3 | public enum ControllerType 4 | { 5 | Button, 6 | Fader, 7 | Encoder 8 | } 9 | } -------------------------------------------------------------------------------- /Source/LrControl.Core/Functions/Catalog/FunctionCatalog.LrUndo.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.ObjectModel; 2 | using LrControl.Api; 3 | using LrControl.Core.Configurations; 4 | using LrControl.Core.Functions.Factories; 5 | 6 | namespace LrControl.Core.Functions.Catalog 7 | { 8 | public partial class FunctionCatalog 9 | { 10 | private static IFunctionCatalogGroup CreateUndoGroup(ISettings settings, LrApi api) 11 | { 12 | return new FunctionCatalogGroup 13 | { 14 | DisplayName = "Undo", 15 | Key = "LrUndo", 16 | Functions = new ObservableCollection(new[] 17 | { 18 | new MethodFunctionFactory(settings, api, "Undo", "Undo", a => 19 | { 20 | api.LrUndo.CanUndo(out var canUndo); 21 | if (canUndo) 22 | { 23 | api.LrDevelopController.StopTracking(); 24 | api.LrUndo.Undo(); 25 | } 26 | }), 27 | new MethodFunctionFactory(settings, api, "Redo", "Redo", a => 28 | { 29 | api.LrUndo.CanRedo(out var canRedo); 30 | if (canRedo) 31 | { 32 | api.LrDevelopController.StopTracking(); 33 | api.LrUndo.Redo(); 34 | } 35 | }), 36 | }) 37 | }; 38 | } 39 | } 40 | } -------------------------------------------------------------------------------- /Source/LrControl.Core/Functions/Catalog/FunctionCatalog.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Linq; 3 | using LrControl.Api; 4 | using LrControl.Core.Configurations; 5 | using LrControl.Core.Functions.Factories; 6 | 7 | namespace LrControl.Core.Functions.Catalog 8 | { 9 | public partial class FunctionCatalog : IFunctionCatalog 10 | { 11 | private FunctionCatalog(IEnumerable groups) 12 | { 13 | Groups = groups; 14 | } 15 | 16 | public IEnumerable Groups { get; } 17 | 18 | public IFunctionFactory GetFunctionFactory(string functionKey) 19 | { 20 | return Groups 21 | .SelectMany(g => g.Functions) 22 | .FirstOrDefault(f => f.Key == functionKey); 23 | } 24 | 25 | public static IFunctionCatalog DefaultCatalog(ISettings settings, LrApi api) 26 | { 27 | return new FunctionCatalog(CreateGroups(settings, api)); 28 | } 29 | 30 | private static IEnumerable CreateGroups(ISettings settings, LrApi api) 31 | { 32 | var groups = new List 33 | { 34 | CreateViewGroup(settings, api), 35 | CreateUndoGroup(settings, api), 36 | CreateSelectionGroup(settings, api) 37 | }; 38 | groups.AddRange(CreateDevelopGroups(settings, api)); 39 | return groups; 40 | } 41 | } 42 | } -------------------------------------------------------------------------------- /Source/LrControl.Core/Functions/Catalog/FunctionCatalogGroup.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using LrControl.Core.Functions.Factories; 3 | 4 | namespace LrControl.Core.Functions.Catalog 5 | { 6 | public class FunctionCatalogGroup : IFunctionCatalogGroup 7 | { 8 | public string DisplayName { get; internal set; } 9 | public string Key { get; internal set; } 10 | public IEnumerable Functions { get; internal set; } 11 | } 12 | } -------------------------------------------------------------------------------- /Source/LrControl.Core/Functions/Catalog/IFunctionCatalog.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using LrControl.Core.Functions.Factories; 3 | 4 | namespace LrControl.Core.Functions.Catalog 5 | { 6 | public interface IFunctionCatalog 7 | { 8 | IEnumerable Groups { get; } 9 | IFunctionFactory GetFunctionFactory(string functionKey); 10 | } 11 | } -------------------------------------------------------------------------------- /Source/LrControl.Core/Functions/Catalog/IFunctionCatalogGroup.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using LrControl.Core.Functions.Factories; 3 | 4 | namespace LrControl.Core.Functions.Catalog 5 | { 6 | public interface IFunctionCatalogGroup 7 | { 8 | string DisplayName { get; } 9 | string Key { get; } 10 | IEnumerable Functions { get; } 11 | } 12 | } -------------------------------------------------------------------------------- /Source/LrControl.Core/Functions/EnablePanelFunction.cs: -------------------------------------------------------------------------------- 1 | using LrControl.Api; 2 | using LrControl.Api.Common; 3 | using LrControl.Api.Modules.LrDevelopController; 4 | using LrControl.Core.Configurations; 5 | using LrControl.Core.Mapping; 6 | 7 | namespace LrControl.Core.Functions 8 | { 9 | internal class EnablePanelFunction : Function 10 | { 11 | private readonly IParameter _enablePanelParamter; 12 | private readonly Panel _panel; 13 | 14 | public EnablePanelFunction(ISettings settings, LrApi api, string displayName, Panel panel, IParameter enablePanelParameter, string key) : base(settings, api, displayName, key) 15 | { 16 | _panel = panel; 17 | _enablePanelParamter = enablePanelParameter; 18 | } 19 | 20 | public override void ControllerValueChanged(int controllerValue, Range controllerRange) 21 | { 22 | if (controllerValue != (int) controllerRange.Maximum) return; 23 | 24 | var functionGroup = FunctionGroup.GetFunctionGroupFor(_panel); 25 | if (functionGroup != null) 26 | { 27 | if (!functionGroup.Enabled) 28 | { 29 | functionGroup.Enable(); 30 | 31 | ShowHud($"Switched to panel: {functionGroup.Panel.Name}"); 32 | } 33 | else 34 | { 35 | if (_enablePanelParamter == null) return; 36 | 37 | if (Api.LrDevelopController.GetValue(out var enabled, _enablePanelParamter)) 38 | { 39 | Api.LrDevelopController.SetValue(_enablePanelParamter, !enabled); 40 | 41 | ShowHud($"{(!enabled ? "Enabled" : "Disabled")} panel: {functionGroup.Panel.Name}"); 42 | } 43 | } 44 | } 45 | else 46 | { 47 | Api.LrDevelopController.RevealPanel(_panel); 48 | ShowHud($"Switched to panel: {_panel.Name}"); 49 | } 50 | } 51 | } 52 | } -------------------------------------------------------------------------------- /Source/LrControl.Core/Functions/Factories/EnablePanelFunctionFactory.cs: -------------------------------------------------------------------------------- 1 | using LrControl.Api; 2 | using LrControl.Api.Modules.LrDevelopController; 3 | using LrControl.Core.Configurations; 4 | 5 | namespace LrControl.Core.Functions.Factories 6 | { 7 | internal class EnablePanelFunctionFactory : FunctionFactory 8 | { 9 | private readonly IParameter _enablePanelParameter; 10 | private readonly Panel _panel; 11 | 12 | public EnablePanelFunctionFactory(ISettings settings, LrApi api, Panel panel, 13 | IParameter enablePanelParameter) : base(settings, api) 14 | { 15 | _enablePanelParameter = enablePanelParameter; 16 | _panel = panel; 17 | } 18 | 19 | public override string DisplayName => $"Switch to panel {_panel.Name} (or toggle on/off)"; 20 | public override string Key => $"EnablePanelFunction:{_panel.Name}"; 21 | 22 | protected override IFunction CreateFunction(ISettings settings, LrApi api) 23 | { 24 | return new EnablePanelFunction(settings, api, DisplayName, _panel, _enablePanelParameter, Key); 25 | } 26 | } 27 | } -------------------------------------------------------------------------------- /Source/LrControl.Core/Functions/Factories/FunctionFactory.cs: -------------------------------------------------------------------------------- 1 | using LrControl.Api; 2 | using LrControl.Core.Configurations; 3 | 4 | namespace LrControl.Core.Functions.Factories 5 | { 6 | public abstract class FunctionFactory : IFunctionFactory 7 | { 8 | private readonly ISettings _settings; 9 | private readonly LrApi _api; 10 | 11 | protected FunctionFactory(ISettings settings, LrApi api) 12 | { 13 | _settings = settings; 14 | _api = api; 15 | } 16 | 17 | public IFunction CreateFunction() 18 | { 19 | return CreateFunction(_settings, _api); 20 | } 21 | 22 | public abstract string DisplayName { get; } 23 | 24 | public abstract string Key { get; } 25 | 26 | protected abstract IFunction CreateFunction(ISettings settings, LrApi api); 27 | } 28 | } -------------------------------------------------------------------------------- /Source/LrControl.Core/Functions/Factories/IFunctionFactory.cs: -------------------------------------------------------------------------------- 1 | namespace LrControl.Core.Functions.Factories 2 | { 3 | public interface IFunctionFactory 4 | { 5 | IFunction CreateFunction(); 6 | string DisplayName { get; } 7 | string Key { get; } 8 | } 9 | } -------------------------------------------------------------------------------- /Source/LrControl.Core/Functions/Factories/MethodFunctionFactory.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using LrControl.Api; 3 | using LrControl.Core.Configurations; 4 | 5 | namespace LrControl.Core.Functions.Factories 6 | { 7 | internal class MethodFunctionFactory : FunctionFactory 8 | { 9 | private readonly Action _method; 10 | 11 | public MethodFunctionFactory(ISettings settings, LrApi api, string displayName, string key, 12 | Action method) : base(settings, api) 13 | { 14 | _method = method; 15 | DisplayName = displayName; 16 | Key = $"MethodFunction:{key}"; 17 | } 18 | 19 | public override string DisplayName { get; } 20 | public override string Key { get; } 21 | 22 | protected override IFunction CreateFunction(ISettings settings, LrApi api) 23 | { 24 | return new MethodFunction(settings, api, DisplayName, _method, DisplayName, Key); 25 | } 26 | } 27 | } -------------------------------------------------------------------------------- /Source/LrControl.Core/Functions/Factories/ParameterFunctionFactory.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using LrControl.Api; 3 | using LrControl.Api.Modules.LrDevelopController; 4 | using LrControl.Api.Modules.LrDevelopController.Parameters; 5 | using LrControl.Core.Configurations; 6 | using Serilog; 7 | 8 | namespace LrControl.Core.Functions.Factories 9 | { 10 | internal class ParameterFunctionFactory : FunctionFactory 11 | { 12 | private static readonly ILogger Log = Serilog.Log.ForContext(); 13 | private readonly IParameter _parameter; 14 | 15 | public ParameterFunctionFactory(ISettings settings, LrApi api, IParameter parameter) : base(settings, api) 16 | { 17 | _parameter = parameter; 18 | } 19 | 20 | public override string DisplayName => $"Change {_parameter.DisplayName}"; 21 | public override string Key => $"ParameterFunction:{_parameter.Name}"; 22 | 23 | protected override IFunction CreateFunction(ISettings settings, LrApi api) 24 | { 25 | switch (_parameter) 26 | { 27 | case IParameter temperatureParameter when ReferenceEquals(temperatureParameter, Parameters.AdjustPanelParameters.Temperature): 28 | return new TemperatureParameterFunction(settings, api, DisplayName, temperatureParameter, Key); 29 | case IParameter intParameter: 30 | return new ParameterFunction(settings, api, DisplayName, intParameter, Key); 31 | case IParameter doubleParameter: 32 | return new ParameterFunction(settings, api, DisplayName, doubleParameter, Key); 33 | case IParameter boolParameter: 34 | return new ParameterFunction(settings, api, DisplayName, boolParameter, Key); 35 | default: 36 | { 37 | Log.Error("Unsupported Parameter {Parameter}", _parameter); 38 | throw new ArgumentException("Unsupported parameter type"); 39 | } 40 | } 41 | } 42 | } 43 | } -------------------------------------------------------------------------------- /Source/LrControl.Core/Functions/Factories/ToggleDevelopBeforeAfterFunctionFactory.cs: -------------------------------------------------------------------------------- 1 | using LrControl.Api; 2 | using LrControl.Core.Configurations; 3 | 4 | namespace LrControl.Core.Functions.Factories 5 | { 6 | internal class ToggleDevelopBeforeAfterFunctionFactory : FunctionFactory 7 | { 8 | public ToggleDevelopBeforeAfterFunctionFactory(ISettings settings, LrApi api) : base(settings, api) 9 | { 10 | } 11 | 12 | public override string DisplayName => "Toggle Develop Before/After view"; 13 | public override string Key => "ToggleDevelopBeforeAfterView"; 14 | protected override IFunction CreateFunction(ISettings settings, LrApi api) 15 | { 16 | return new ToggleDevelopBeforeAfterFunction(settings, api, DisplayName, Key); 17 | } 18 | } 19 | } -------------------------------------------------------------------------------- /Source/LrControl.Core/Functions/Factories/ToggleParameterFunctionFactory.cs: -------------------------------------------------------------------------------- 1 | using LrControl.Api; 2 | using LrControl.Api.Modules.LrDevelopController; 3 | using LrControl.Core.Configurations; 4 | 5 | namespace LrControl.Core.Functions.Factories 6 | { 7 | internal class ToggleParameterFunctionFactory : FunctionFactory 8 | { 9 | private readonly IParameter _parameter; 10 | 11 | public ToggleParameterFunctionFactory(ISettings settings, LrApi api, IParameter parameter) : base(settings, api) 12 | { 13 | _parameter = parameter; 14 | } 15 | 16 | public override string DisplayName => $"Toggle {_parameter.DisplayName}"; 17 | public override string Key => $"ToggleParameterFunction:{_parameter.Name}"; 18 | 19 | protected override IFunction CreateFunction(ISettings settings, LrApi api) 20 | { 21 | return new ToggleParameterFunction(settings, api, DisplayName, _parameter, Key); 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /Source/LrControl.Core/Functions/Function.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using LrControl.Api; 3 | using LrControl.Api.Common; 4 | using LrControl.Core.Configurations; 5 | 6 | namespace LrControl.Core.Functions 7 | { 8 | internal abstract class Function : IFunction 9 | { 10 | protected readonly ISettings Settings; 11 | private bool _dispoed; 12 | private Action _onRequestUpdateControllerValue; 13 | 14 | protected Function(ISettings settings, LrApi api, string displayName, string key) 15 | { 16 | Settings = settings; 17 | Api = api; 18 | DisplayName = displayName; 19 | Key = key; 20 | } 21 | 22 | protected LrApi Api { get; } 23 | public string Key { get; } 24 | public string DisplayName { get; } 25 | 26 | public abstract void ControllerValueChanged(int controllerValue, Range controllerRange); 27 | 28 | public virtual bool UpdateControllerValue(out int controllerValue, Range controllerRange) 29 | { 30 | controllerValue = default(int); 31 | return false; 32 | } 33 | 34 | public Action OnRequestUpdateControllerValue 35 | { 36 | set => _onRequestUpdateControllerValue = value; 37 | } 38 | 39 | public void Dispose() 40 | { 41 | if (_dispoed) return; 42 | 43 | Disposing(); 44 | _dispoed = true; 45 | } 46 | 47 | protected void RequestUpdateControllerValue() 48 | { 49 | _onRequestUpdateControllerValue?.Invoke(); 50 | } 51 | 52 | protected void ShowHud(string message) 53 | { 54 | if (Settings.ShowHudMessages) 55 | Api.LrDialogs.ShowBezel(message, 0.25); 56 | } 57 | 58 | protected virtual void Disposing() 59 | { 60 | } 61 | } 62 | } -------------------------------------------------------------------------------- /Source/LrControl.Core/Functions/IFunction.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using LrControl.Api.Common; 3 | 4 | namespace LrControl.Core.Functions 5 | { 6 | public interface IFunction : IDisposable 7 | { 8 | /// 9 | /// Unique key used for saving configuration 10 | /// 11 | string Key { get; } 12 | 13 | /// 14 | /// Display name shown to user 15 | /// 16 | string DisplayName { get; } 17 | 18 | /// 19 | /// Controller value has changed, apply function 20 | /// 21 | /// Controller value 22 | /// Range of controller value 23 | void ControllerValueChanged(int controllerValue, Range controllerRange); 24 | 25 | /// 26 | /// Update controller value, based on function 27 | /// 28 | /// Controller value to set 29 | /// Range of controller vlaue 30 | /// True if function has a value to assign the controller value, false otherwise 31 | bool UpdateControllerValue(out int controllerValue, Range controllerRange); 32 | 33 | /// 34 | /// Can be invoked, to request updating the controller value using , 35 | /// will only be invoked if the controller can be updated as this time. 36 | /// 37 | Action OnRequestUpdateControllerValue { set; } 38 | } 39 | } -------------------------------------------------------------------------------- /Source/LrControl.Core/Functions/MethodFunction.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using LrControl.Api; 3 | using LrControl.Api.Common; 4 | using LrControl.Core.Configurations; 5 | 6 | namespace LrControl.Core.Functions 7 | { 8 | internal class MethodFunction : Function 9 | { 10 | private readonly Action _method; 11 | private readonly string _displayText; 12 | 13 | public MethodFunction(ISettings settings, LrApi api, string displayName, Action method, string displayText, string key) : base(settings, api, displayName, key) 14 | { 15 | _method = method; 16 | _displayText = displayText; 17 | } 18 | 19 | public override void ControllerValueChanged(int controllerValue, Range controllerRange) 20 | { 21 | if (controllerValue != (int) controllerRange.Maximum) return; 22 | 23 | _method(Api); 24 | ShowHud(_displayText); 25 | } 26 | } 27 | } -------------------------------------------------------------------------------- /Source/LrControl.Core/Functions/ToggleDevelopBeforeAfterFunction.cs: -------------------------------------------------------------------------------- 1 | using LrControl.Api; 2 | using LrControl.Api.Common; 3 | using LrControl.Api.Modules.LrApplicationView; 4 | using LrControl.Core.Configurations; 5 | 6 | namespace LrControl.Core.Functions 7 | { 8 | internal class ToggleDevelopBeforeAfterFunction : Function 9 | { 10 | private bool _toggled; 11 | 12 | public ToggleDevelopBeforeAfterFunction(ISettings settings, LrApi api, string displayName, string key) : base(settings, api, displayName, key) 13 | { 14 | } 15 | 16 | public override void ControllerValueChanged(int controllerValue, Range controllerRange) 17 | { 18 | if (controllerValue != (int) controllerRange.Maximum) return; 19 | 20 | if (_toggled) 21 | { 22 | Api.LrApplicationView.ShowView(PrimaryView.DevelopLoupe); 23 | ShowHud("After"); 24 | _toggled = false; 25 | } 26 | else 27 | { 28 | Api.LrApplicationView.ShowView(PrimaryView.DevelopBefore); 29 | ShowHud("Before"); 30 | _toggled = true; 31 | } 32 | } 33 | } 34 | } -------------------------------------------------------------------------------- /Source/LrControl.Core/Functions/ToggleParameterFunction.cs: -------------------------------------------------------------------------------- 1 | using LrControl.Api; 2 | using LrControl.Api.Common; 3 | using LrControl.Api.Modules.LrDevelopController; 4 | using LrControl.Core.Configurations; 5 | 6 | namespace LrControl.Core.Functions 7 | { 8 | internal class ToggleParameterFunction : Function 9 | { 10 | private readonly IParameter _parameter; 11 | 12 | public ToggleParameterFunction(ISettings settings, LrApi api, string displayName, IParameter parameter, string key) : base(settings, api, displayName, key) 13 | { 14 | _parameter = parameter; 15 | } 16 | 17 | public override void ControllerValueChanged(int controllerValue, Range controllerRange) 18 | { 19 | if (controllerValue != (int) controllerRange.Maximum) return; 20 | 21 | if (Api.LrDevelopController.GetValue(out var enabled, _parameter)) 22 | { 23 | Api.LrDevelopController.SetValue(_parameter, !enabled); 24 | 25 | ShowHud($"{(!enabled ? "Enabled" : "Disabled")}: {_parameter.DisplayName}"); 26 | } 27 | } 28 | } 29 | } -------------------------------------------------------------------------------- /Source/LrControl.Core/ILrControlApplication.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using LrControl.Api; 5 | using LrControl.Core.Configurations; 6 | using LrControl.Core.Functions.Catalog; 7 | using LrControl.Core.Mapping; 8 | using Midi.Devices; 9 | 10 | namespace LrControl.Core 11 | { 12 | public interface ILrControlApplication : IDisposable, INotifyPropertyChanged 13 | { 14 | event ConnectionStatusHandler ConnectionStatus; 15 | ISettings Settings { get; } 16 | FunctionGroupManager FunctionGroupManager { get; } 17 | IFunctionCatalog FunctionCatalog { get; } 18 | IEnumerable InputDevices { get; } 19 | IEnumerable OutputDevices { get; } 20 | IInputDevice InputDevice { get; } 21 | IOutputDevice OutputDevice { get; } 22 | 23 | void SaveConfiguration(string file = MappingConfiguration.ConfigurationsFile); 24 | void LoadConfiguration(string file = MappingConfiguration.ConfigurationsFile); 25 | void Reset(); 26 | void RefreshAvailableDevices(bool restorePrevious = true); 27 | string GetSettingsFolder(); 28 | void UpdateConnectionStatus(); 29 | void SetInputDevice(IInputDevice inputDevice); 30 | void SetOutputDevice(IOutputDevice outputDevice); 31 | } 32 | } -------------------------------------------------------------------------------- /Source/LrControl.Core/LrControl.Core.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netstandard2.0 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /Source/LrControl.Core/Midi/ControlChangeKey.cs: -------------------------------------------------------------------------------- 1 | using Midi.Enums; 2 | using Midi.Messages; 3 | 4 | namespace LrControl.Core.Midi 5 | { 6 | public class ControlChangeKey 7 | { 8 | public ControlChangeKey(Channel channel, Control control) 9 | { 10 | Channel = channel; 11 | Control = control; 12 | } 13 | 14 | public ControlChangeKey(ControlChangeMessage msg) : this(msg.Channel, msg.Control) 15 | { 16 | } 17 | 18 | private Channel Channel { get; } 19 | private Control Control { get; } 20 | 21 | private bool Equals(ControlChangeKey other) 22 | { 23 | return Channel == other.Channel && Control == other.Control; 24 | } 25 | 26 | public override bool Equals(object obj) 27 | { 28 | if (ReferenceEquals(null, obj)) return false; 29 | if (ReferenceEquals(this, obj)) return true; 30 | if (obj.GetType() != GetType()) return false; 31 | return Equals((ControlChangeKey) obj); 32 | } 33 | 34 | public override int GetHashCode() 35 | { 36 | return (int) Control | (int) Channel << 4; 37 | } 38 | } 39 | } -------------------------------------------------------------------------------- /Source/LrControl.Core/Midi/ControlChangeMessageHolder.cs: -------------------------------------------------------------------------------- 1 | using Midi.Messages; 2 | 3 | namespace LrControl.Core.Midi 4 | { 5 | internal class ControlChangeMessageHolder : MessageHolder 6 | { 7 | public ControlChangeMessageHolder(ControlChangeMessage msg) : base(msg) 8 | { 9 | } 10 | 11 | protected override bool CalculateHasChanged() 12 | { 13 | return LastSent.Channel != Message.Channel 14 | || LastSent.Control != Message.Control 15 | || LastSent.Value != Message.Value; 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /Source/LrControl.Core/Midi/MessageHolder.cs: -------------------------------------------------------------------------------- 1 | using System.Diagnostics; 2 | 3 | namespace LrControl.Core.Midi 4 | { 5 | public abstract class MessageHolder where T : class 6 | { 7 | protected MessageHolder(T msg) 8 | { 9 | SetMessage(msg); 10 | } 11 | 12 | public T Message { get; private set; } 13 | public long MessageTimestamp { get; private set; } 14 | public T LastSent { get; private set; } 15 | public long LastSentTimestamp { get; private set; } 16 | 17 | public bool HasChanged 18 | { 19 | get 20 | { 21 | if (Message == null) return false; 22 | if (LastSent == null) return true; 23 | return CalculateHasChanged(); 24 | } 25 | } 26 | 27 | protected abstract bool CalculateHasChanged(); 28 | 29 | public void SetMessage(T msg) 30 | { 31 | MessageTimestamp = Stopwatch.GetTimestamp(); 32 | Message = msg; 33 | } 34 | 35 | public void SetLastSent(T lastSent) 36 | { 37 | LastSentTimestamp = Stopwatch.GetTimestamp(); 38 | LastSent = lastSent; 39 | } 40 | } 41 | } -------------------------------------------------------------------------------- /Source/LrControl.Core/Midi/NrpnKey.cs: -------------------------------------------------------------------------------- 1 | using Midi.Enums; 2 | using Midi.Messages; 3 | 4 | namespace LrControl.Core.Midi 5 | { 6 | public class NrpnKey 7 | { 8 | private NrpnKey(Channel channel, int parameter) 9 | { 10 | Channel = channel; 11 | Parameter = parameter; 12 | } 13 | 14 | public NrpnKey(NrpnMessage msg) : this(msg.Channel, msg.Parameter) 15 | { 16 | } 17 | 18 | private Channel Channel { get; } 19 | private int Parameter { get; } 20 | 21 | private bool Equals(NrpnKey other) 22 | { 23 | return Channel == other.Channel && Parameter == other.Parameter; 24 | } 25 | 26 | public override bool Equals(object obj) 27 | { 28 | if (ReferenceEquals(null, obj)) return false; 29 | if (ReferenceEquals(this, obj)) return true; 30 | if (obj.GetType() != GetType()) return false; 31 | return Equals((NrpnKey) obj); 32 | } 33 | 34 | public override int GetHashCode() 35 | { 36 | return (int) Channel | Parameter << 4; 37 | } 38 | } 39 | } -------------------------------------------------------------------------------- /Source/LrControl.Core/Midi/NrpnMessageHolder.cs: -------------------------------------------------------------------------------- 1 | using Midi.Messages; 2 | 3 | namespace LrControl.Core.Midi 4 | { 5 | public class NrpnMessageHolder : MessageHolder 6 | { 7 | public NrpnMessageHolder(NrpnMessage msg) : base(msg) 8 | { 9 | } 10 | 11 | protected override bool CalculateHasChanged() 12 | { 13 | return LastSent.Channel != Message.Channel 14 | || LastSent.Parameter != Message.Parameter 15 | || LastSent.Value != Message.Value; 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /Source/LrControl.Plugin/About.lua: -------------------------------------------------------------------------------- 1 | --[[---------------------------------------------------------------------------- 2 | 3 | Copyright © 2016 Michael Dahl 4 | 5 | This file is part of LrControl. 6 | 7 | LrControl is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | LrControl is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with LrControl. If not, see . 19 | 20 | ------------------------------------------------------------------------------]] 21 | 22 | local LrDialogs = import 'LrDialogs' 23 | local LrView = import 'LrView' 24 | 25 | local function showAboutDialog() 26 | local f = LrView.osFactory() 27 | 28 | local contents = f:view { 29 | f:static_text { 30 | title = "LrControl is created by Michael Dahl" 31 | } 32 | } -- view 33 | 34 | 35 | LrDialogs.presentModalDialog { 36 | title = "About LrControl", 37 | resizeable = false, 38 | actionVerb = "OK", 39 | cancelVerb = "< exclude >", 40 | contents = contents 41 | } 42 | end 43 | 44 | showAboutDialog() -------------------------------------------------------------------------------- /Source/LrControl.Plugin/DisablePlugin.lua: -------------------------------------------------------------------------------- 1 | --[[---------------------------------------------------------------------------- 2 | 3 | Copyright © 2016 Michael Dahl 4 | 5 | This file is part of LrControl. 6 | 7 | LrControl is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | LrControl is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with LrControl. If not, see . 19 | 20 | ------------------------------------------------------------------------------]] 21 | local LrControlApp = require 'LrControlApp' 22 | local Log = require 'Logger' 23 | 24 | -- Stop application 25 | Log.Info("DisablePlugin called") 26 | LrControlApp.Stop() -------------------------------------------------------------------------------- /Source/LrControl.Plugin/Info.lua: -------------------------------------------------------------------------------- 1 | --[[---------------------------------------------------------------------------- 2 | 3 | Copyright © 2016 Michael Dahl 4 | 5 | This file is part of LrControl. 6 | 7 | LrControl is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | LrControl is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with LrControl. If not, see . 19 | 20 | ------------------------------------------------------------------------------]] 21 | 22 | return { 23 | LrSdkVersion = 6.0, 24 | LrSdkMinimumVersion = 6.0, 25 | LrPluginName = "LrControl", 26 | LrToolkitIdentifier = "dk.micdah.lrcontrol", 27 | LrForceInitPlugin = true, 28 | LrInitPlugin = "Main.lua", 29 | LrShutdownPlugin = "ShutdownPlugin.lua", 30 | LrShutdownApp = "Shutdown.lua", 31 | LrDisablePlugin = "DisablePlugin.lua", 32 | LrEnablePlugin = "Main.lua", 33 | LrPluginInfoUrl = "https://github.com/micdah/LrControl", 34 | LrExportMenuItems = { 35 | { 36 | title = "About", 37 | file = "About.lua" 38 | } 39 | }, 40 | VERSION = { major = 0, minor = 9, revision = 1, build = 0 } 41 | } -------------------------------------------------------------------------------- /Source/LrControl.Plugin/Logger.lua: -------------------------------------------------------------------------------- 1 | --[[---------------------------------------------------------------------------- 2 | 3 | Copyright © 2016 Michael Dahl 4 | 5 | This file is part of LrControl. 6 | 7 | LrControl is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | LrControl is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with LrControl. If not, see . 19 | 20 | ------------------------------------------------------------------------------]] 21 | local LrLogger = import 'LrLogger' 22 | 23 | local log = LrLogger('LrControl') 24 | log:enable("logfile") 25 | 26 | local levels = { 27 | Trace = 0, 28 | Debug = 1, 29 | Info = 2, 30 | Warn = 3, 31 | Error = 4, 32 | Fatal = 5 33 | } 34 | 35 | local options = { 36 | Levels = levels, 37 | Level = levels.Debug 38 | } 39 | 40 | local function wrap(level,f) 41 | return function(...) 42 | if (level >= options.Level) then 43 | f(...) 44 | end 45 | end 46 | end 47 | 48 | local trace, debug, info, warn, error, fatal = log:quick('trace', 'debug', 'info', 'warn', 'error', 'fatal') 49 | local tracef, debugf, infof, warnf, errorf, fatalf = log:quickf('trace', 'debug', 'info', 'warn', 'error', 'fatal') 50 | 51 | local logger = { 52 | Options = options, 53 | Trace = wrap(levels.Trace, trace), 54 | Tracef = wrap(levels.Trace, tracef), 55 | Debug = wrap(levels.Debug, debug), 56 | Debugf = wrap(levels.Debug, debugf), 57 | Info = wrap(levels.Info, info), 58 | Infof = wrap(levels.Info, infof), 59 | Warn = wrap(levels.Warn, warn), 60 | Warnf = wrap(levels.Warn, warnf), 61 | Error = wrap(levels.Error, error), 62 | Errorf = wrap(levels.Error, errorf), 63 | Fatal = wrap(levels.Fatal, fatal), 64 | Fatalf = wrap(levels.Fatal, fatalf) 65 | } 66 | 67 | return logger -------------------------------------------------------------------------------- /Source/LrControl.Plugin/Modules.lua: -------------------------------------------------------------------------------- 1 | --[[---------------------------------------------------------------------------- 2 | 3 | Copyright © 2016 Michael Dahl 4 | 5 | This file is part of LrControl. 6 | 7 | LrControl is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | LrControl is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with LrControl. If not, see . 19 | 20 | ------------------------------------------------------------------------------]] 21 | local LrDevelopController = import 'LrDevelopController' 22 | local Options = require 'Options' 23 | local ModulesLrDevelopController = require 'ModulesLrDevelopController' 24 | local ModulesLrApplicationView = require 'ModulesLrApplicationView' 25 | local ModulesLrDialogs = require 'ModulesLrDialogs' 26 | local ModulesLrSelection = require 'ModulesLrSelection' 27 | local ModulesLrUndo = require 'ModulesLrUndo' 28 | 29 | return { 30 | LrControl = { 31 | getApiVersion = function() 32 | return "LrControl " .. Options.Version.major .. "." .. Options.Version.minor .. "." .. Options.Version.revision .. "." .. Options.Version.build 33 | end 34 | }, 35 | LrDevelopController = ModulesLrDevelopController, 36 | LrApplicationView = ModulesLrApplicationView, 37 | LrDialogs = ModulesLrDialogs, 38 | LrSelection = ModulesLrSelection, 39 | LrUndo = ModulesLrUndo, 40 | } -------------------------------------------------------------------------------- /Source/LrControl.Plugin/ModulesLrApplicationView.tt: -------------------------------------------------------------------------------- 1 | <#@ template debug="true" hostSpecific="true" #> 2 | <#@ output extension=".lua" encoding="us-ascii" #> 3 | <#@ assembly name="$(ProjectDir)\..\LrControl.Api\bin\Debug\net461\LrControl.Api.dll" #> 4 | <# 5 | var generator = new LrControl.Api.t4.ModuleGenerator( 6 | typeof(LrControl.Api.Modules.LrApplicationView.ILrApplicationView)); 7 | #> 8 | --[[---------------------------------------------------------------------------- 9 | 10 | Copyright © 2016 Michael Dahl 11 | 12 | This file is part of LrControl. 13 | 14 | LrControl is free software: you can redistribute it and/or modify 15 | it under the terms of the GNU General Public License as published by 16 | the Free Software Foundation, either version 3 of the License, or 17 | (at your option) any later version. 18 | 19 | LrControl is distributed in the hope that it will be useful, 20 | but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | GNU General Public License for more details. 23 | 24 | You should have received a copy of the GNU General Public License 25 | along with LrControl. If not, see . 26 | 27 | ------------------------------------------------------------------------------]] 28 | <#= generator.GenerateLuaModule() #> -------------------------------------------------------------------------------- /Source/LrControl.Plugin/ModulesLrDevelopController.tt: -------------------------------------------------------------------------------- 1 | <#@ template debug="true" hostSpecific="true" #> 2 | <#@ output extension=".lua" encoding="us-ascii" #> 3 | <#@ assembly name="$(ProjectDir)\..\LrControl.Api\bin\Debug\net461\LrControl.Api.dll" #> 4 | <# 5 | var generator = new LrControl.Api.t4.ModuleGenerator( 6 | typeof(LrControl.Api.Modules.LrDevelopController.ILrDevelopController)); 7 | #> 8 | --[[---------------------------------------------------------------------------- 9 | 10 | Copyright © 2016 Michael Dahl 11 | 12 | This file is part of LrControl. 13 | 14 | LrControl is free software: you can redistribute it and/or modify 15 | it under the terms of the GNU General Public License as published by 16 | the Free Software Foundation, either version 3 of the License, or 17 | (at your option) any later version. 18 | 19 | LrControl is distributed in the hope that it will be useful, 20 | but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | GNU General Public License for more details. 23 | 24 | You should have received a copy of the GNU General Public License 25 | along with LrControl. If not, see . 26 | 27 | ------------------------------------------------------------------------------]] 28 | <#= generator.GenerateLuaModule() #> -------------------------------------------------------------------------------- /Source/LrControl.Plugin/ModulesLrDialogs.lua: -------------------------------------------------------------------------------- 1 | --[[---------------------------------------------------------------------------- 2 | 3 | Copyright ? 2016 Michael Dahl 4 | 5 | This file is part of LrControl. 6 | 7 | LrControl is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | LrControl is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with LrControl. If not, see . 19 | 20 | ------------------------------------------------------------------------------]] 21 | 22 | local LrDialogs = import 'LrDialogs' 23 | local ModuleTools = require 'ModuleTools' 24 | 25 | return { 26 | confirm = 27 | ModuleTools.BeforeFunction("LrDialogs.confirm", 28 | ModuleTools.AfterFunction("LrDialogs.confirm", 29 | function(message,info,actionVerb,cancelVerb,otherVerb) 30 | return LrDialogs.confirm(message,info,actionVerb,cancelVerb,otherVerb) 31 | end)), 32 | 33 | message = 34 | ModuleTools.BeforeFunction("LrDialogs.message", 35 | ModuleTools.AfterFunction("LrDialogs.message", 36 | function(message,info,style) 37 | LrDialogs.message(message,info,style) 38 | end)), 39 | 40 | showBezel = 41 | ModuleTools.BeforeFunction("LrDialogs.showBezel", 42 | ModuleTools.AfterFunction("LrDialogs.showBezel", 43 | function(message,fadeDelay) 44 | LrDialogs.showBezel(message,fadeDelay) 45 | end)), 46 | 47 | showError = 48 | ModuleTools.BeforeFunction("LrDialogs.showError", 49 | ModuleTools.AfterFunction("LrDialogs.showError", 50 | function(errorString) 51 | LrDialogs.showError(errorString) 52 | end)), 53 | 54 | } -------------------------------------------------------------------------------- /Source/LrControl.Plugin/ModulesLrDialogs.tt: -------------------------------------------------------------------------------- 1 | <#@ template debug="true" hostSpecific="true" #> 2 | <#@ output extension=".lua" encoding="us-ascii" #> 3 | <#@ assembly name="$(ProjectDir)\..\LrControl.Api\bin\Debug\net461\LrControl.Api.dll" #> 4 | <# 5 | var generator = new LrControl.Api.t4.ModuleGenerator( 6 | typeof(LrControl.Api.Modules.LrDialogs.ILrDialogs)); 7 | #> 8 | --[[---------------------------------------------------------------------------- 9 | 10 | Copyright © 2016 Michael Dahl 11 | 12 | This file is part of LrControl. 13 | 14 | LrControl is free software: you can redistribute it and/or modify 15 | it under the terms of the GNU General Public License as published by 16 | the Free Software Foundation, either version 3 of the License, or 17 | (at your option) any later version. 18 | 19 | LrControl is distributed in the hope that it will be useful, 20 | but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | GNU General Public License for more details. 23 | 24 | You should have received a copy of the GNU General Public License 25 | along with LrControl. If not, see . 26 | 27 | ------------------------------------------------------------------------------]] 28 | <#= generator.GenerateLuaModule() #> -------------------------------------------------------------------------------- /Source/LrControl.Plugin/ModulesLrSelection.tt: -------------------------------------------------------------------------------- 1 | <#@ template debug="true" hostSpecific="true" #> 2 | <#@ output extension=".lua" encoding="us-ascii" #> 3 | <#@ assembly name="$(ProjectDir)\..\LrControl.Api\bin\Debug\net461\LrControl.Api.dll" #> 4 | <# 5 | var generator = new LrControl.Api.t4.ModuleGenerator( 6 | typeof(LrControl.Api.Modules.LrSelection.ILrSelection)); 7 | #> 8 | --[[---------------------------------------------------------------------------- 9 | 10 | Copyright © 2016 Michael Dahl 11 | 12 | This file is part of LrControl. 13 | 14 | LrControl is free software: you can redistribute it and/or modify 15 | it under the terms of the GNU General Public License as published by 16 | the Free Software Foundation, either version 3 of the License, or 17 | (at your option) any later version. 18 | 19 | LrControl is distributed in the hope that it will be useful, 20 | but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | GNU General Public License for more details. 23 | 24 | You should have received a copy of the GNU General Public License 25 | along with LrControl. If not, see . 26 | 27 | ------------------------------------------------------------------------------]] 28 | <#= generator.GenerateLuaModule() #> -------------------------------------------------------------------------------- /Source/LrControl.Plugin/ModulesLrUndo.lua: -------------------------------------------------------------------------------- 1 | --[[---------------------------------------------------------------------------- 2 | 3 | Copyright ? 2016 Michael Dahl 4 | 5 | This file is part of LrControl. 6 | 7 | LrControl is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | LrControl is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with LrControl. If not, see . 19 | 20 | ------------------------------------------------------------------------------]] 21 | 22 | local LrUndo = import 'LrUndo' 23 | local ModuleTools = require 'ModuleTools' 24 | 25 | return { 26 | canRedo = 27 | ModuleTools.BeforeFunction("LrUndo.canRedo", 28 | ModuleTools.AfterFunction("LrUndo.canRedo", 29 | function() 30 | return LrUndo.canRedo() 31 | end)), 32 | 33 | canUndo = 34 | ModuleTools.BeforeFunction("LrUndo.canUndo", 35 | ModuleTools.AfterFunction("LrUndo.canUndo", 36 | function() 37 | return LrUndo.canUndo() 38 | end)), 39 | 40 | redo = 41 | ModuleTools.BeforeFunction("LrUndo.redo", 42 | ModuleTools.AfterFunction("LrUndo.redo", 43 | function() 44 | LrUndo.redo() 45 | end)), 46 | 47 | undo = 48 | ModuleTools.BeforeFunction("LrUndo.undo", 49 | ModuleTools.AfterFunction("LrUndo.undo", 50 | function() 51 | LrUndo.undo() 52 | end)), 53 | 54 | } -------------------------------------------------------------------------------- /Source/LrControl.Plugin/ModulesLrUndo.tt: -------------------------------------------------------------------------------- 1 | <#@ template debug="true" hostSpecific="true" #> 2 | <#@ output extension=".lua" encoding="us-ascii" #> 3 | <#@ assembly name="$(ProjectDir)\..\LrControl.Api\bin\Debug\net461\LrControl.Api.dll" #> 4 | <# 5 | var generator = new LrControl.Api.t4.ModuleGenerator( 6 | typeof(LrControl.Api.Modules.LrUndo.ILrUndo)); 7 | #> 8 | --[[---------------------------------------------------------------------------- 9 | 10 | Copyright © 2016 Michael Dahl 11 | 12 | This file is part of LrControl. 13 | 14 | LrControl is free software: you can redistribute it and/or modify 15 | it under the terms of the GNU General Public License as published by 16 | the Free Software Foundation, either version 3 of the License, or 17 | (at your option) any later version. 18 | 19 | LrControl is distributed in the hope that it will be useful, 20 | but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | GNU General Public License for more details. 23 | 24 | You should have received a copy of the GNU General Public License 25 | along with LrControl. If not, see . 26 | 27 | ------------------------------------------------------------------------------]] 28 | <#= generator.GenerateLuaModule() #> -------------------------------------------------------------------------------- /Source/LrControl.Plugin/Options.lua: -------------------------------------------------------------------------------- 1 | --[[---------------------------------------------------------------------------- 2 | 3 | Copyright © 2016 Michael Dahl 4 | 5 | This file is part of LrControl. 6 | 7 | LrControl is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | LrControl is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with LrControl. If not, see . 19 | 20 | ------------------------------------------------------------------------------]] 21 | local Info = require 'Info' 22 | 23 | 24 | return { 25 | Version = Info.VERSION, 26 | MessageReceivePort = 52008, 27 | MessageSendPort = 52009 28 | } -------------------------------------------------------------------------------- /Source/LrControl.Plugin/Shutdown.lua: -------------------------------------------------------------------------------- 1 | --[[---------------------------------------------------------------------------- 2 | 3 | Copyright © 2016 Michael Dahl 4 | 5 | This file is part of LrControl. 6 | 7 | LrControl is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | LrControl is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with LrControl. If not, see . 19 | 20 | ------------------------------------------------------------------------------]] 21 | local LrTasks = import 'LrTasks' 22 | local LrControlApp = require 'LrControlApp' 23 | local Log = require 'Logger' 24 | 25 | 26 | return { 27 | LrShutdownFunction = function (doneFunction, progressFunction) 28 | Log.Info("Shutting down LrControl") 29 | progressFunction (0, "Shutting down LrControl") 30 | 31 | local pf = function(progress,message) 32 | progressFunction(progress,message) 33 | end 34 | 35 | Log.Debug("Calling LrControlApp.Stop") 36 | LrControlApp.Stop(pf) 37 | 38 | Log.Info("Finished shutting down LrControl") 39 | progressFunction (1, "Done") 40 | doneFunction() 41 | end 42 | } -------------------------------------------------------------------------------- /Source/LrControl.Plugin/ShutdownPlugin.lua: -------------------------------------------------------------------------------- 1 | --[[---------------------------------------------------------------------------- 2 | 3 | Copyright © 2016 Michael Dahl 4 | 5 | This file is part of LrControl. 6 | 7 | LrControl is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | LrControl is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with LrControl. If not, see . 19 | 20 | ------------------------------------------------------------------------------]] 21 | local LrControlApp = require 'LrControlApp' 22 | local Log = require 'Logger' 23 | 24 | -- Stop application 25 | Log.Info("ShutdownPlugin called") 26 | LrControlApp.Stop() -------------------------------------------------------------------------------- /Source/LrControl.Ui/App.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /Source/LrControl.Ui/Core/IDialogProvider.cs: -------------------------------------------------------------------------------- 1 | using System.Threading.Tasks; 2 | 3 | namespace LrControl.Ui.Core 4 | { 5 | public interface IDialogProvider 6 | { 7 | Task ShowMessage(string message, string title, DialogButtons buttons = DialogButtons.OkCancel); 8 | } 9 | 10 | public enum DialogResult 11 | { 12 | Ok, 13 | Cancel, 14 | Yes, 15 | No 16 | } 17 | 18 | public enum DialogButtons 19 | { 20 | Ok, 21 | OkCancel, 22 | YesNo, 23 | } 24 | } -------------------------------------------------------------------------------- /Source/LrControl.Ui/Core/ObservableCollectionExtensions.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Collections.ObjectModel; 4 | using System.Linq; 5 | 6 | namespace LrControl.Ui.Core 7 | { 8 | public static class ObservableCollectionExtensions 9 | { 10 | public static void SyncWith(this ObservableCollection observableCollection, IList source) 11 | { 12 | // Detect removed 13 | foreach (var item in observableCollection 14 | .Where(x => !source.Contains(x)) 15 | .ToList()) 16 | { 17 | if (item is IDisposable disposable) 18 | { 19 | disposable.Dispose(); 20 | } 21 | 22 | observableCollection.Remove(item); 23 | } 24 | 25 | // Detect added 26 | foreach (var item in source 27 | .Where(x => !observableCollection.Contains(x)) 28 | .ToList()) 29 | { 30 | observableCollection.Add(item); 31 | } 32 | } 33 | 34 | public static void DisposeAndClear(this ObservableCollection observableCollection) 35 | { 36 | foreach (var item in observableCollection) 37 | { 38 | if (item is IDisposable disposable) 39 | { 40 | disposable.Dispose(); 41 | } 42 | } 43 | 44 | observableCollection.Clear(); 45 | } 46 | } 47 | } -------------------------------------------------------------------------------- /Source/LrControl.Ui/Core/ViewModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.ComponentModel; 3 | using System.Runtime.CompilerServices; 4 | using System.Windows.Threading; 5 | using JetBrains.Annotations; 6 | using Serilog; 7 | 8 | namespace LrControl.Ui.Core 9 | { 10 | public abstract class ViewModel : INotifyPropertyChanged, IDisposable 11 | { 12 | private static readonly ILogger Log = Serilog.Log.ForContext(); 13 | 14 | protected readonly Dispatcher Dispatcher; 15 | private bool _disposed; 16 | 17 | protected ViewModel(Dispatcher dispatcher) 18 | { 19 | Dispatcher = dispatcher; 20 | } 21 | 22 | public event PropertyChangedEventHandler PropertyChanged; 23 | 24 | [NotifyPropertyChangedInvocator] 25 | protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) 26 | { 27 | PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 28 | } 29 | 30 | public void Dispose() 31 | { 32 | if (_disposed) return; 33 | 34 | try 35 | { 36 | Disposing(); 37 | } 38 | catch (Exception e) 39 | { 40 | Log.Error(e, "Exception occurred while dispogin view model"); 41 | throw; 42 | } 43 | finally 44 | { 45 | _disposed = true; 46 | } 47 | } 48 | 49 | protected virtual void Disposing() 50 | { 51 | 52 | } 53 | 54 | protected void SafeInvoke(Action action) 55 | { 56 | if (Dispatcher.CheckAccess()) 57 | { 58 | // Save to invoke 59 | action(); 60 | } 61 | else 62 | { 63 | // Invoke via dispatcher 64 | Dispatcher.BeginInvoke(action); 65 | } 66 | } 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /Source/LrControl.Ui/ErrorDialog.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.Windows; 4 | using System.Windows.Navigation; 5 | using LrControl.Core.Util; 6 | 7 | namespace LrControl.Ui 8 | { 9 | /// 10 | /// Interaction logic for ErrorDialog.xaml 11 | /// 12 | public partial class ErrorDialog 13 | { 14 | private readonly string _exceptionString; 15 | 16 | public ErrorDialog(Exception exception) 17 | { 18 | InitializeComponent(); 19 | 20 | _exceptionString = new ExceptionStringBuilder(exception).ToString(); 21 | ExceptionDetails.Text = _exceptionString; 22 | } 23 | 24 | 25 | protected override void OnClosed(EventArgs e) 26 | { 27 | Application.Current.Shutdown(); 28 | } 29 | 30 | private void ButtonClose_OnClick(object sender, RoutedEventArgs e) 31 | { 32 | Close(); 33 | } 34 | 35 | private void ButtonCopy_OnClick(object sender, RoutedEventArgs e) 36 | { 37 | Clipboard.SetText(_exceptionString); 38 | } 39 | 40 | private void Hyperlink_OnRequestNavigate(object sender, RequestNavigateEventArgs e) 41 | { 42 | Process.Start(new ProcessStartInfo(e.Uri.AbsoluteUri)); 43 | e.Handled = true; 44 | } 45 | } 46 | } -------------------------------------------------------------------------------- /Source/LrControl.Ui/Gui/FunctionCatalogView.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows; 2 | using System.Windows.Controls; 3 | using System.Windows.Input; 4 | using LrControl.Core.Functions.Catalog; 5 | using LrControl.Core.Functions.Factories; 6 | 7 | namespace LrControl.Ui.Gui 8 | { 9 | /// 10 | /// Interaction logic for FunctionCatalogView.xaml 11 | /// 12 | public partial class FunctionCatalogView 13 | { 14 | public FunctionCatalogView() 15 | { 16 | InitializeComponent(); 17 | } 18 | 19 | public static readonly DependencyProperty FunctionCatalogProperty = DependencyProperty.Register( 20 | "FunctionCatalog", typeof (IFunctionCatalog), typeof (FunctionCatalogView), new PropertyMetadata(default(FunctionCatalog))); 21 | 22 | public FunctionCatalog FunctionCatalog 23 | { 24 | get => (FunctionCatalog) GetValue(FunctionCatalogProperty); 25 | set => SetValue(FunctionCatalogProperty, value); 26 | } 27 | 28 | private void FunctionFactoryTextBlock_OnMouseMove(object sender, MouseEventArgs e) 29 | { 30 | var textBlock = sender as TextBlock; 31 | var functionFactory = textBlock?.Tag as IFunctionFactory; 32 | if (functionFactory != null && e.LeftButton == MouseButtonState.Pressed) 33 | { 34 | var dataObject = new DataObject(typeof (IFunctionFactory), functionFactory); 35 | DragDrop.DoDragDrop(textBlock, dataObject, DragDropEffects.Move); 36 | } 37 | } 38 | } 39 | } -------------------------------------------------------------------------------- /Source/LrControl.Ui/Gui/FunctionGroupView.xaml: -------------------------------------------------------------------------------- 1 |  10 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /Source/LrControl.Ui/Gui/FunctionGroupView.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows; 2 | 3 | namespace LrControl.Ui.Gui 4 | { 5 | /// 6 | /// Interaction logic for FunctionGroupView.xaml 7 | /// 8 | public partial class FunctionGroupView 9 | { 10 | public static readonly DependencyProperty FunctionGroupProperty = DependencyProperty.Register( 11 | "FunctionGroup", typeof (FunctionGroupViewModel), typeof (FunctionGroupView), 12 | new PropertyMetadata(default(FunctionGroupViewModel))); 13 | 14 | public FunctionGroupView() 15 | { 16 | InitializeComponent(); 17 | } 18 | 19 | public FunctionGroupViewModel FunctionGroup 20 | { 21 | get => (FunctionGroupViewModel) GetValue(FunctionGroupProperty); 22 | set => SetValue(FunctionGroupProperty, value); 23 | } 24 | } 25 | } -------------------------------------------------------------------------------- /Source/LrControl.Ui/Gui/FunctionViewModel.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Threading; 2 | using LrControl.Core.Functions; 3 | using LrControl.Ui.Core; 4 | 5 | namespace LrControl.Ui.Gui 6 | { 7 | public class FunctionViewModel : ViewModel 8 | { 9 | private string _displayName; 10 | 11 | public FunctionViewModel(Dispatcher dispatcher, IFunction function) : base(dispatcher) 12 | { 13 | DisplayName = function.DisplayName; 14 | } 15 | 16 | public string DisplayName 17 | { 18 | get => _displayName; 19 | private set 20 | { 21 | if (value == _displayName) return; 22 | _displayName = value; 23 | OnPropertyChanged(); 24 | } 25 | } 26 | } 27 | } -------------------------------------------------------------------------------- /Source/LrControl.Ui/Gui/ModuleGroupView.xaml: -------------------------------------------------------------------------------- 1 |  12 | 13 | 14 | 15 | 16 | 17 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /Source/LrControl.Ui/Gui/SettingsView.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows; 2 | using LrControl.Core.Configurations; 3 | 4 | namespace LrControl.Ui.Gui 5 | { 6 | /// 7 | /// Interaction logic for SettingsView.xaml 8 | /// 9 | public partial class SettingsView 10 | { 11 | 12 | public static readonly DependencyProperty SettingsProperty = DependencyProperty.Register( 13 | "Settings", typeof(ISettings), typeof(SettingsView), new PropertyMetadata(default(ISettings))); 14 | 15 | public ISettings Settings 16 | { 17 | get => (ISettings) GetValue(SettingsProperty); 18 | set => SetValue(SettingsProperty, value); 19 | } 20 | public SettingsView() 21 | { 22 | InitializeComponent(); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Source/LrControl.Ui/Gui/Utils/BooleanFillValueConverter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Globalization; 3 | using System.Windows; 4 | using System.Windows.Data; 5 | using System.Windows.Media; 6 | 7 | namespace LrControl.Ui.Gui.Utils 8 | { 9 | public class BooleanFillValueConverter : IValueConverter 10 | { 11 | public Brush TrueBrush { get; set; } 12 | public Brush FalseBrush { get; set; } 13 | 14 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 15 | { 16 | if (value is bool) 17 | { 18 | return (bool) value 19 | ? TrueBrush 20 | : FalseBrush; 21 | } 22 | return DependencyProperty.UnsetValue; 23 | } 24 | 25 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 26 | { 27 | throw new NotSupportedException(); 28 | } 29 | } 30 | } -------------------------------------------------------------------------------- /Source/LrControl.Ui/Gui/Utils/ButtonFillValueConverter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Globalization; 3 | using System.Windows; 4 | using System.Windows.Data; 5 | using System.Windows.Media; 6 | using LrControl.Api.Common; 7 | 8 | namespace LrControl.Ui.Gui.Utils 9 | { 10 | public class ButtonFillValueConverter : IMultiValueConverter 11 | { 12 | public Brush OffBrush { get; set; } 13 | public Brush OnBrush { get; set; } 14 | 15 | public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 16 | { 17 | if (values == null || values.Length != 2 || !(values[0] is Range) || !(values[1] is int)) 18 | return DependencyProperty.UnsetValue; 19 | 20 | var range = (Range) values[0]; 21 | var value = (int) values[1]; 22 | 23 | return value == (int) range.Maximum 24 | ? OnBrush 25 | : OffBrush; 26 | } 27 | 28 | public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) 29 | { 30 | throw new NotSupportedException(); 31 | } 32 | } 33 | } -------------------------------------------------------------------------------- /Source/LrControl.Ui/Gui/Utils/DebugConverter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.Globalization; 4 | using System.Windows.Data; 5 | 6 | namespace LrControl.Ui.Gui.Utils 7 | { 8 | public class DebugConverter : IValueConverter 9 | { 10 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 11 | { 12 | if (Debugger.IsAttached) 13 | { 14 | Debugger.Break(); 15 | } 16 | return value; 17 | } 18 | 19 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 20 | { 21 | if (Debugger.IsAttached) 22 | { 23 | Debugger.Break(); 24 | } 25 | return value; 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /Source/LrControl.Ui/Gui/Utils/DependencyObjectExtensions.cs: -------------------------------------------------------------------------------- 1 | using System.Windows; 2 | using System.Windows.Media; 3 | 4 | namespace LrControl.Ui.Gui.Utils 5 | { 6 | public static class DependencyObjectExtensions 7 | { 8 | public static T FindParent(this DependencyObject child) where T : class 9 | { 10 | while (true) 11 | { 12 | var parentObject = VisualTreeHelper.GetParent(child); 13 | if (parentObject == null) return null; 14 | 15 | var parent = parentObject as T; 16 | if (parent != null) return parent; 17 | child = parentObject; 18 | } 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /Source/LrControl.Ui/Gui/Utils/EncoderAngleValueConverter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Globalization; 3 | using System.Windows; 4 | using System.Windows.Data; 5 | using LrControl.Api.Common; 6 | 7 | namespace LrControl.Ui.Gui.Utils 8 | { 9 | public class EncoderAngleValueConverter : IMultiValueConverter 10 | { 11 | public Range AngleRange { get; set; } 12 | 13 | public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 14 | { 15 | if (values == null || values.Length != 2 || !(values[0] is Range) || !(values[1] is int)) 16 | return DependencyProperty.UnsetValue; 17 | 18 | var range = (Range) values[0]; 19 | var value = (double)(int) values[1]; 20 | 21 | // Clamp value to range 22 | if (value > range) 23 | value = range.Maximum; 24 | else if (value < range) 25 | value = range.Minimum; 26 | 27 | return AngleRange.FromRange(range, value); 28 | } 29 | 30 | public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) 31 | { 32 | throw new NotSupportedException(); 33 | } 34 | } 35 | } -------------------------------------------------------------------------------- /Source/LrControl.Ui/Gui/Utils/RangeTickFrequencyValueConverter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Globalization; 3 | using System.Windows; 4 | using System.Windows.Data; 5 | using LrControl.Api.Common; 6 | 7 | namespace LrControl.Ui.Gui.Utils 8 | { 9 | public class RangeTickFrequencyValueConverter : IValueConverter 10 | { 11 | public int NumberOfTicks { get; set; } 12 | 13 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 14 | { 15 | var range = value as Range; 16 | if (range != null) 17 | { 18 | return (range.Maximum - range.Minimum)/NumberOfTicks; 19 | } 20 | return DependencyProperty.UnsetValue; 21 | } 22 | 23 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 24 | { 25 | throw new NotSupportedException(); 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /Source/LrControl.Ui/MainWindow.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel; 2 | using System.Runtime.CompilerServices; 3 | using JetBrains.Annotations; 4 | 5 | namespace LrControl.Ui 6 | { 7 | /// 8 | /// Interaction logic for MainWindow.xaml 9 | /// 10 | public partial class MainWindow : INotifyPropertyChanged 11 | { 12 | private MainWindowModel _viewModel; 13 | 14 | public MainWindow() 15 | { 16 | InitializeComponent(); 17 | } 18 | 19 | public MainWindowModel ViewModel 20 | { 21 | get => _viewModel; 22 | set 23 | { 24 | if (Equals(value, _viewModel)) return; 25 | _viewModel = value; 26 | OnPropertyChanged(); 27 | } 28 | } 29 | 30 | public event PropertyChangedEventHandler PropertyChanged; 31 | 32 | [NotifyPropertyChangedInvocator] 33 | private void OnPropertyChanged([CallerMemberName] string propertyName = null) 34 | { 35 | PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 36 | } 37 | } 38 | } -------------------------------------------------------------------------------- /Source/LrControl.Ui/MainWindowDialogProvider.cs: -------------------------------------------------------------------------------- 1 | using LrControl.Ui.Core; 2 | using MahApps.Metro.Controls; 3 | using Microsoft.Win32; 4 | 5 | namespace LrControl.Ui 6 | { 7 | public interface IMainWindowDialogProvider : IDialogProvider 8 | { 9 | string ShowSaveDialog(string path); 10 | 11 | string ShowOpenDialog(string path); 12 | } 13 | 14 | public class MainWindowDialogProvider : MetroWindowDialogProvider, IMainWindowDialogProvider 15 | { 16 | public MainWindowDialogProvider(MetroWindow window) : base(window) 17 | { 18 | } 19 | 20 | public string ShowSaveDialog(string path) 21 | { 22 | var dialog = new SaveFileDialog 23 | { 24 | FileName = "Configuration", 25 | DefaultExt = ".xml", 26 | Filter = "Configuration files (.xml)|*.xml", 27 | InitialDirectory = path 28 | }; 29 | 30 | return dialog.ShowDialog() == true ? dialog.FileName : null; 31 | } 32 | 33 | public string ShowOpenDialog(string path) 34 | { 35 | var dialog = new OpenFileDialog 36 | { 37 | FileName = "Configuration", 38 | DefaultExt = ".xml", 39 | Filter = "Configuration filex (.xml)|*.xml", 40 | InitialDirectory = path 41 | }; 42 | 43 | return dialog.ShowDialog() == true ? dialog.FileName : null; 44 | } 45 | } 46 | } -------------------------------------------------------------------------------- /Source/LrControl.Ui/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace LrControl.Ui.Properties { 12 | 13 | 14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.3.0.0")] 16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { 17 | 18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 19 | 20 | public static Settings Default { 21 | get { 22 | return defaultInstance; 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Source/LrControl.Ui/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /Source/LrControl.Ui/Resources/AppIcon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/micdah/LrControl/2d9ad6c7a5075dbb042d05dd50b89ab4bf36b8da/Source/LrControl.Ui/Resources/AppIcon.ico -------------------------------------------------------------------------------- /Source/LrControl.Ui/Resources/Entypo-license.txt: -------------------------------------------------------------------------------- 1 | Entypo (http://www.entypo.com/) is created by Daniel Bruce and released under the Creative Commons, Share Alike/Attribution license. 2 | 3 | http://creativecommons.org/licenses/by-sa/3.0/ -------------------------------------------------------------------------------- /Source/LrControl.Ui/Resources/Entypo.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/micdah/LrControl/2d9ad6c7a5075dbb042d05dd50b89ab4bf36b8da/Source/LrControl.Ui/Resources/Entypo.ttf -------------------------------------------------------------------------------- /Source/LrControl.Ui/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Source/LrControl.sln.DotSettings: -------------------------------------------------------------------------------- 1 |  2 | True --------------------------------------------------------------------------------