diff --git a/Builds/MacOSX/Info-App.plist b/Builds/MacOSX/Info-App.plist index efb9987a6..7acde2ff1 100644 --- a/Builds/MacOSX/Info-App.plist +++ b/Builds/MacOSX/Info-App.plist @@ -18,9 +18,9 @@ CFBundleSignature ???? CFBundleShortVersionString - 2.1.0.0 + 2.2.0.0 CFBundleVersion - 2.1.0.0 + 2.2.0.0 NSHumanReadableCopyright NSHighResolutionCapable diff --git a/Builds/MacOSX/MIDI2LR.xcodeproj/project.pbxproj b/Builds/MacOSX/MIDI2LR.xcodeproj/project.pbxproj index 24b0c0497..9ace9345e 100644 --- a/Builds/MacOSX/MIDI2LR.xcodeproj/project.pbxproj +++ b/Builds/MacOSX/MIDI2LR.xcodeproj/project.pbxproj @@ -2470,8 +2470,8 @@ "_DEBUG=1", "DEBUG=1", "JUCER_XCODE_MAC_F6D2F4CF=1", - "JUCE_APP_VERSION=2.1.0.0", - "JUCE_APP_VERSION_HEX=0x2010000", ); + "JUCE_APP_VERSION=2.2.0.0", + "JUCE_APP_VERSION_HEX=0x2020000", ); GCC_VERSION = com.apple.compilers.llvm.clang.1_0; HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../JuceLibraryCode/modules", "../../", "$(inherited)"); INFOPLIST_FILE = Info-App.plist; @@ -2495,8 +2495,8 @@ "_NDEBUG=1", "NDEBUG=1", "JUCER_XCODE_MAC_F6D2F4CF=1", - "JUCE_APP_VERSION=2.1.0.0", - "JUCE_APP_VERSION_HEX=0x2010000", ); + "JUCE_APP_VERSION=2.2.0.0", + "JUCE_APP_VERSION_HEX=0x2020000", ); GCC_SYMBOLS_PRIVATE_EXTERN = YES; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../JuceLibraryCode/modules", "../../", "$(inherited)"); diff --git a/Builds/VisualStudio2015/MIDI2LR.vcxproj b/Builds/VisualStudio2015/MIDI2LR.vcxproj index af37dfdf4..10c7dbded 100644 --- a/Builds/VisualStudio2015/MIDI2LR.vcxproj +++ b/Builds/VisualStudio2015/MIDI2LR.vcxproj @@ -58,7 +58,7 @@ Disabled EditAndContinue ..\..\JuceLibraryCode;..\..\JuceLibraryCode\modules;..\..\;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=2.1.0.0;JUCE_APP_VERSION_HEX=0x2010000;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=2.2.0.0;JUCE_APP_VERSION_HEX=0x2020000;%(PreprocessorDefinitions) MultiThreadedDebug true @@ -99,7 +99,7 @@ Full ..\..\JuceLibraryCode;..\..\JuceLibraryCode\modules;..\..\;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=2.1.0.0;JUCE_APP_VERSION_HEX=0x2010000;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=2.2.0.0;JUCE_APP_VERSION_HEX=0x2020000;%(PreprocessorDefinitions) MultiThreaded true diff --git a/Builds/VisualStudio2015/resources.rc b/Builds/VisualStudio2015/resources.rc index d020c7cb0..53aa4b6c1 100644 --- a/Builds/VisualStudio2015/resources.rc +++ b/Builds/VisualStudio2015/resources.rc @@ -7,16 +7,16 @@ #include VS_VERSION_INFO VERSIONINFO -FILEVERSION 2,1,0,0 +FILEVERSION 2,2,0,0 BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904E4" BEGIN VALUE "FileDescription", "MIDI2LR\0" - VALUE "FileVersion", "2.1.0.0\0" + VALUE "FileVersion", "2.2.0.0\0" VALUE "ProductName", "MIDI2LR\0" - VALUE "ProductVersion", "2.1.0.0\0" + VALUE "ProductVersion", "2.2.0.0\0" END END diff --git a/Builds/VisualStudio2017/MIDI2LR.vcxproj b/Builds/VisualStudio2017/MIDI2LR.vcxproj index 8c74bbc16..d76d6ca71 100644 --- a/Builds/VisualStudio2017/MIDI2LR.vcxproj +++ b/Builds/VisualStudio2017/MIDI2LR.vcxproj @@ -1,4 +1,4 @@ - + @@ -46,6 +46,10 @@ $(VC_IncludePath);$(WindowsSDK_IncludePath) + D:\Program Files\Visual Studio\Team Tools\Static Analysis Tools\Rule Sets\NativeRecommendedRules.ruleset + true + true + true @@ -58,8 +62,7 @@ Disabled EditAndContinue - ..\..\JuceLibraryCode;..\..\JuceLibraryCode\modules;..\..\;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=2.1.0.0;JUCE_APP_VERSION_HEX=0x2010000;%(PreprocessorDefinitions) + ..\..\JuceLibraryCode;..\..\JuceLibraryCode\modules;..\..\;%(AdditionalIncludeDirectories) _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=2.2.0.0;JUCE_APP_VERSION_HEX=0x2020000;%(PreprocessorDefinitions)PreprocessorDefinitions> MultiThreadedDebug true @@ -100,7 +103,8 @@ Full ..\..\JuceLibraryCode;..\..\JuceLibraryCode\modules;..\..\;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=2.1.0.0;JUCE_APP_VERSION_HEX=0x2010000;%(PreprocessorDefinitions) + + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=2.2.0.0;JUCE_APP_VERSION_HEX=0x2020000;%(PreprocessorDefinitions) MultiThreaded true @@ -110,6 +114,10 @@ Level4 true true + true + Speed + stdcpplatest + true NDEBUG;%(PreprocessorDefinitions) diff --git a/Builds/VisualStudio2017/MIDI2LR.vcxproj.filters b/Builds/VisualStudio2017/MIDI2LR.vcxproj.filters index 64ca861d6..5f6aee524 100644 --- a/Builds/VisualStudio2017/MIDI2LR.vcxproj.filters +++ b/Builds/VisualStudio2017/MIDI2LR.vcxproj.filters @@ -3491,6 +3491,15 @@ + + + + + + + + + diff --git a/Builds/VisualStudio2017/resources.rc b/Builds/VisualStudio2017/resources.rc index 500859802..53aa4b6c1 100644 --- a/Builds/VisualStudio2017/resources.rc +++ b/Builds/VisualStudio2017/resources.rc @@ -7,16 +7,16 @@ #include VS_VERSION_INFO VERSIONINFO -FILEVERSION 2,0,4,0 +FILEVERSION 2,2,0,0 BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904E4" BEGIN VALUE "FileDescription", "MIDI2LR\0" - VALUE "FileVersion", "2.0.4.0\0" + VALUE "FileVersion", "2.2.0.0\0" VALUE "ProductName", "MIDI2LR\0" - VALUE "ProductVersion", "2.0.4.0\0" + VALUE "ProductVersion", "2.2.0.0\0" END END diff --git a/Installer/MIDI2LR.xml b/Installer/MIDI2LR.xml index 7fd00530f..b723ab3cd 100644 --- a/Installer/MIDI2LR.xml +++ b/Installer/MIDI2LR.xml @@ -1,7 +1,7 @@ MIDI2LR MIDI2LR - 2.1.0.0 + 2.2.0.0 ../Source/LRPlugin/ReadMe.txt ../LICENSE.txt LICENSE.html @@ -33,6 +33,9 @@ ../Source/LRPlugin/MIDI2LR.lrplugin/Client.lua + + ../Source/LRPlugin/MIDI2LR.lrplugin/Virtual.lua + ../Source/LRPlugin/MIDI2LR.lrplugin/ClientUtilities.lua diff --git a/JuceLibraryCode/JuceHeader.h b/JuceLibraryCode/JuceHeader.h index db52c5250..c17056ec0 100644 --- a/JuceLibraryCode/JuceHeader.h +++ b/JuceLibraryCode/JuceHeader.h @@ -37,8 +37,8 @@ namespace ProjectInfo { const char* const projectName = "MIDI2LR"; - const char* const versionString = "2.1.0.0"; - const int versionNumber = 0x2010000; + const char* const versionString = "2.2.0.0"; + const int versionNumber = 0x2020000; } #endif diff --git a/MIDI2LR.jucer b/MIDI2LR.jucer index 8bba5f075..fb8fd965d 100644 --- a/MIDI2LR.jucer +++ b/MIDI2LR.jucer @@ -1,6 +1,6 @@ - diff --git a/Source/CommandTable.cpp b/Source/CommandTable.cpp index 38c5151bd..11f1eb084 100644 --- a/Source/CommandTable.cpp +++ b/Source/CommandTable.cpp @@ -36,8 +36,8 @@ CommandTable::CommandTable(const juce::String& component_name, CommandTableModel bool CommandTable::keyPressed(const KeyPress& k) { if (k.isKeyCode(KeyPress::deleteKey) && getSelectedRow() != -1) { - bool last = getSelectedRow() == getNumRows() - 1; - static_cast(getModel())->removeRow(static_cast(getSelectedRow())); + const bool last = getSelectedRow() == getNumRows() - 1; + dynamic_cast(getModel())->removeRow(static_cast(getSelectedRow())); updateContent(); if (last) { // keep selection at the end diff --git a/Source/ControlsModel.cpp b/Source/ControlsModel.cpp index 105f83847..db460b8c3 100644 --- a/Source/ControlsModel.cpp +++ b/Source/ControlsModel.cpp @@ -90,9 +90,9 @@ short ChannelModel::PluginToController(short controltype, size_t controlnumber, void ChannelModel::setCC(size_t controlnumber, short min, short max, RSJ::CCmethod controltype) noexcept(ndebug) { + setCCmethod(controlnumber, controltype); //has to be set before others or ranges won't be correct setCCmin(controlnumber, min); setCCmax(controlnumber, max); - setCCmethod(controlnumber, controltype); } void ChannelModel::setCCall(size_t controlnumber, short min, short max, RSJ::CCmethod controltype) noexcept(ndebug) diff --git a/Source/LRCommands.cpp b/Source/LRCommands.cpp index 1acf86951..6bbf010bb 100644 --- a/Source/LRCommands.cpp +++ b/Source/LRCommands.cpp @@ -1,6 +1,6 @@ // This is an open source non-commercial project. Dear PVS-Studio, please check it. // PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com -/* + /* ============================================================================== LRCommands.cpp is generated by Build.lua. To make persistent changes @@ -21,9 +21,8 @@ You should have received a copy of the GNU General Public License along with MIDI2LR. If not, see . ============================================================================== */ - #include "LRCommands.h" -#include +#include "CommandMap.h" const std::vector LRCommandList::KeyShortcuts = { "Key 1", @@ -133,8 +132,8 @@ const std::vector LRCommandList::Develop = { "Primary Display Before/After Left/Right", "Primary Display Before/After Top/Bottom", "Primary Display Before", - "Show Reference View Horizontal", - "Show Reference View Vertical", + "Primary Display Reference View — Left/Right", + "Primary Display Reference View — Top/Bottom", "Primary Display Loupe", }; @@ -207,6 +206,7 @@ const std::vector LRCommandList::Mixer = { "Saturation Adjustment Blue", "Saturation Adjustment Purple", "Saturation Adjustment Magenta", + "All Saturation Adjustment", "Hue Adjustment Red", "Hue Adjustment Orange", "Hue Adjustment Yellow", @@ -244,6 +244,7 @@ const std::vector LRCommandList::ResetMixer = { "Reset Saturation Adjustment Blue", "Reset Saturation Adjustment Purple", "Reset Saturation Adjustment Magenta", + "Reset All Saturation Adjustment", "Reset Hue Adjustment Red", "Reset Hue Adjustment Orange", "Reset Hue Adjustment Yellow", @@ -745,6 +746,7 @@ const std::vector LRCommandList::LRStringList = { "SaturationAdjustmentBlue", "SaturationAdjustmentPurple", "SaturationAdjustmentMagenta", + "AllSaturationAdjustment", "HueAdjustmentRed", "HueAdjustmentOrange", "HueAdjustmentYellow", @@ -780,6 +782,7 @@ const std::vector LRCommandList::LRStringList = { "ResetSaturationAdjustmentBlue", "ResetSaturationAdjustmentPurple", "ResetSaturationAdjustmentMagenta", + "ResetAllSaturationAdjustment", "ResetHueAdjustmentRed", "ResetHueAdjustmentOrange", "ResetHueAdjustmentYellow", diff --git a/Source/LRPlugin/Controller_Settings/TouchOSC/Mathieu Carbou/MIDI2LR_TouchOSC.xml b/Source/LRPlugin/Controller_Settings/TouchOSC/Mathieu Carbou/MIDI2LR_TouchOSC.xml index e304d038b..5e0f84fc5 100644 --- a/Source/LRPlugin/Controller_Settings/TouchOSC/Mathieu Carbou/MIDI2LR_TouchOSC.xml +++ b/Source/LRPlugin/Controller_Settings/TouchOSC/Mathieu Carbou/MIDI2LR_TouchOSC.xml @@ -31,8 +31,8 @@ - - + + diff --git a/Source/LRPlugin/MIDI2LR.lrplugin/Client.lua b/Source/LRPlugin/MIDI2LR.lrplugin/Client.lua index f33a67499..793b1dd41 100644 --- a/Source/LRPlugin/MIDI2LR.lrplugin/Client.lua +++ b/Source/LRPlugin/MIDI2LR.lrplugin/Client.lua @@ -75,6 +75,7 @@ LrTasks.startAsyncTask( local ParamList = require 'ParamList' local Profiles = require 'Profiles' local Ut = require 'Utilities' + local Virtual = require 'Virtual' local LrApplication = import 'LrApplication' local LrApplicationView = import 'LrApplicationView' local LrDevelopController = import 'LrDevelopController' @@ -100,6 +101,15 @@ LrTasks.startAsyncTask( end end + local function UpdateCameraProfile(name) + return function() + CU.fChangePanel('calibratePanel') + CU.ApplySettings({ + CameraProfile = name + }) + end + end + local ACTIONS = { AdjustmentBrush = CU.fToggleTool('localized'), AutoLateralCA = CU.fToggle01('AutoLateralCA'), @@ -224,27 +234,27 @@ LrTasks.startAsyncTask( Preset_39 = CU.fApplyPreset(39), Preset_40 = CU.fApplyPreset(40), Prev = LrSelection.previousPhoto, - Profile_Adobe_Standard = Ut.wrapFOM(LrDevelopController.setValue,'CameraProfile','Adobe Standard'), - Profile_Camera_Clear = Ut.wrapFOM(LrDevelopController.setValue,'CameraProfile','Camera Clear'), - Profile_Camera_Darker_Skin_Tone = Ut.wrapFOM(LrDevelopController.setValue,'CameraProfile','Camera Darker Skin Tone'), - Profile_Camera_Deep = Ut.wrapFOM(LrDevelopController.setValue,'CameraProfile','Camera Deep'), - Profile_Camera_Faithful = Ut.wrapFOM(LrDevelopController.setValue,'CameraProfile','Camera Faithful'), - Profile_Camera_Flat = Ut.wrapFOM(LrDevelopController.setValue,'CameraProfile','Camera Flat'), - Profile_Camera_Landscape = Ut.wrapFOM(LrDevelopController.setValue,'CameraProfile','Camera Landscape'), - Profile_Camera_Light = Ut.wrapFOM(LrDevelopController.setValue,'CameraProfile','Camera Light'), - Profile_Camera_Lighter_Skin_Tone= Ut.wrapFOM(LrDevelopController.setValue,'CameraProfile','Camera Lighter Skin Tone'), - Profile_Camera_Monochrome = Ut.wrapFOM(LrDevelopController.setValue,'CameraProfile','Camera Monochrome'), - Profile_Camera_Monotone = Ut.wrapFOM(LrDevelopController.setValue,'CameraProfile','Camera Monotone'), - Profile_Camera_Muted = Ut.wrapFOM(LrDevelopController.setValue,'CameraProfile','Camera Muted'), - Profile_Camera_Natural = Ut.wrapFOM(LrDevelopController.setValue,'CameraProfile','Camera Natural'), - Profile_Camera_Neutral = Ut.wrapFOM(LrDevelopController.setValue,'CameraProfile','Camera Neutral'), - Profile_Camera_Portrait = Ut.wrapFOM(LrDevelopController.setValue,'CameraProfile','Camera Portrait'), - Profile_Camera_Positive_Film = Ut.wrapFOM(LrDevelopController.setValue,'CameraProfile','Camera Positive Film'), - Profile_Camera_Standard = Ut.wrapFOM(LrDevelopController.setValue,'CameraProfile','Camera Standard'), - Profile_Camera_Vivid = Ut.wrapFOM(LrDevelopController.setValue,'CameraProfile','Camera Vivid'), - Profile_Camera_Vivid_Blue = Ut.wrapFOM(LrDevelopController.setValue,'CameraProfile','Camera Vivid Blue'), - Profile_Camera_Vivid_Green = Ut.wrapFOM(LrDevelopController.setValue,'CameraProfile','Camera Vivid Green'), - Profile_Camera_Vivid_Red = Ut.wrapFOM(LrDevelopController.setValue,'CameraProfile','Camera Vivid Red'), + Profile_Adobe_Standard = UpdateCameraProfile('Adobe Standard'), + Profile_Camera_Clear = UpdateCameraProfile('Camera Clear'), + Profile_Camera_Darker_Skin_Tone = UpdateCameraProfile('Camera Darker Skin Tone'), + Profile_Camera_Deep = UpdateCameraProfile('Camera Deep'), + Profile_Camera_Faithful = UpdateCameraProfile('Camera Faithful'), + Profile_Camera_Flat = UpdateCameraProfile('Camera Flat'), + Profile_Camera_Landscape = UpdateCameraProfile('Camera Landscape'), + Profile_Camera_Light = UpdateCameraProfile('Camera Light'), + Profile_Camera_Lighter_Skin_Tone= UpdateCameraProfile('Camera Lighter Skin Tone'), + Profile_Camera_Monochrome = UpdateCameraProfile('Camera Monochrome'), + Profile_Camera_Monotone = UpdateCameraProfile('Camera Monotone'), + Profile_Camera_Muted = UpdateCameraProfile('Camera Muted'), + Profile_Camera_Natural = UpdateCameraProfile('Camera Natural'), + Profile_Camera_Neutral = UpdateCameraProfile('Camera Neutral'), + Profile_Camera_Portrait = UpdateCameraProfile('Camera Portrait'), + Profile_Camera_Positive_Film = UpdateCameraProfile('Camera Positive Film'), + Profile_Camera_Standard = UpdateCameraProfile('Camera Standard'), + Profile_Camera_Vivid = UpdateCameraProfile('Camera Vivid'), + Profile_Camera_Vivid_Blue = UpdateCameraProfile('Camera Vivid Blue'), + Profile_Camera_Vivid_Green = UpdateCameraProfile('Camera Vivid Green'), + Profile_Camera_Vivid_Red = UpdateCameraProfile('Camera Vivid Red'), profile1 = function() Profiles.changeProfile('profile1', true) end, profile2 = function() Profiles.changeProfile('profile2', true) end, profile3 = function() Profiles.changeProfile('profile3', true) end, @@ -338,7 +348,13 @@ LrTasks.startAsyncTask( PostCropVignetteStyleHighlightPriority = Ut.wrapFOM(LrDevelopController.setValue,'PostCropVignetteStyle',1), PostCropVignetteStyleColorPriority = Ut.wrapFOM(LrDevelopController.setValue,'PostCropVignetteStyle',2), PostCropVignetteStylePaintOverlay = Ut.wrapFOM(LrDevelopController.setValue,'PostCropVignetteStyle',3), - AutoTone = function() Ut.wrapFOM(LrDevelopController.setValue,'AutoTone',true)(); CU.FullRefresh() end, + AutoTone = function() + CU.fChangePanel('tonePanel') + CU.ApplySettings({ + AutoTone = true + }) + CU.FullRefresh() + end, ZoomInLargeStep = LrApplicationView.zoomIn, ZoomInSmallStep = LrApplicationView.zoomInSome, ZoomOutLargeStep = LrApplicationView.zoomOut, @@ -404,27 +420,11 @@ LrTasks.startAsyncTask( end, } - local function MIDIValueToLRValue(param, midi_value) - -- map midi range to develop parameter range - -- expects midi_value 0.0-1.0, doesn't protect against out-of-range - local min,max = Limits.GetMinMax(param) - return midi_value * (max-min) + min - end - - local function LRValueToMIDIValue(param) - -- map develop parameter range to midi range - local min,max = Limits.GetMinMax(param) - local retval = (LrDevelopController.getValue(param)-min)/(max-min) - if retval > 1 then return 1 end - if retval < 0 then return 0 end - return retval - end - --called within LrRecursionGuard for setting function UpdateParamPickup() --closure local paramlastmoved = {} local lastfullrefresh = 0 - return function(param, midi_value) + return function(param, midi_value, silent) local value if LrApplicationView.getCurrentModuleName() ~= 'develop' then LrApplicationView.switchToModule('develop') @@ -432,13 +432,13 @@ LrTasks.startAsyncTask( if Limits.Parameters[param] then Limits.ClampValue(param) end - if((math.abs(midi_value - LRValueToMIDIValue(param)) <= PICKUP_THRESHOLD) or (paramlastmoved[param] ~= nil and paramlastmoved[param] + 0.5 > os.clock())) then -- pickup succeeded + if((math.abs(midi_value - CU.LRValueToMIDIValue(param)) <= PICKUP_THRESHOLD) or (paramlastmoved[param] ~= nil and paramlastmoved[param] + 0.5 > os.clock())) then -- pickup succeeded paramlastmoved[param] = os.clock() - value = MIDIValueToLRValue(param, midi_value) + value = CU.MIDIValueToLRValue(param, midi_value) MIDI2LR.PARAM_OBSERVER[param] = value LrDevelopController.setValue(param, value) LastParam = param - if ProgramPreferences.ClientShowBezelOnChange then + if ProgramPreferences.ClientShowBezelOnChange and not silent then local bezelname = ParamList.ParamDisplay[param] or param LrDialogs.showBezel(bezelname..' '..LrStringUtils.numberToStringWithSeparators(value,Ut.precision(value))) end @@ -447,7 +447,7 @@ LrTasks.startAsyncTask( end else --failed pickup if ProgramPreferences.ClientShowBezelOnChange then -- failed pickup. do I display bezel? - value = MIDIValueToLRValue(param, midi_value) + value = CU.MIDIValueToLRValue(param, midi_value) local actualvalue = LrDevelopController.getValue(param) local precision = Ut.precision(value) local bezelname = ParamList.ParamDisplay[param] or param @@ -462,16 +462,16 @@ LrTasks.startAsyncTask( end UpdateParamPickup = UpdateParamPickup() --complete closure --called within LrRecursionGuard for setting - function UpdateParamNoPickup(param, midi_value) + function UpdateParamNoPickup(param, midi_value, silent) local value if LrApplicationView.getCurrentModuleName() ~= 'develop' then LrApplicationView.switchToModule('develop') end - value = MIDIValueToLRValue(param, midi_value) + value = CU.MIDIValueToLRValue(param, midi_value) MIDI2LR.PARAM_OBSERVER[param] = value LrDevelopController.setValue(param, value) LastParam = param - if ProgramPreferences.ClientShowBezelOnChange then + if ProgramPreferences.ClientShowBezelOnChange and not silent then local bezelname = ParamList.ParamDisplay[param] or param LrDialogs.showBezel(bezelname..' '..LrStringUtils.numberToStringWithSeparators(value,Ut.precision(value))) end @@ -498,7 +498,7 @@ LrTasks.startAsyncTask( for _,param in ipairs(ParamList.SendToMidi) do local lrvalue = LrDevelopController.getValue(param) if observer[param] ~= lrvalue and type(lrvalue) == 'number' then - MIDI2LR.SERVER:send(string.format('%s %g\n', param, LRValueToMIDIValue(param))) + MIDI2LR.SERVER:send(string.format('%s %g\n', param, CU.LRValueToMIDIValue(param))) observer[param] = lrvalue LastParam = param end @@ -534,7 +534,16 @@ LrTasks.startAsyncTask( local param = message:sub(1,split-1) local value = message:sub(split+1) if(ACTIONS[param]) then -- perform a one time action - if(tonumber(value) > BUTTON_ON) then ACTIONS[param]() end + if(tonumber(value) > BUTTON_ON) then + ACTIONS[param]() + end + elseif(SETTINGS[param]) then -- do something requiring the transmitted value to be known + SETTINGS[param](value) + elseif(Virtual[param]) then -- handle a virtual command + local lp = Virtual[param](value, UpdateParam) + if lp then + LastParam = lp + end elseif(param:find('Reset') == 1) then -- perform a reset other than those explicitly coded in ACTIONS array if(tonumber(value) > BUTTON_ON) then local resetparam = param:sub(6) @@ -545,8 +554,6 @@ LrTasks.startAsyncTask( LrDialogs.showBezel(bezelname..' '..LrStringUtils.numberToStringWithSeparators(lrvalue,Ut.precision(lrvalue))) end end - elseif(SETTINGS[param]) then -- do something requiring the transmitted value to be known - SETTINGS[param](value) else -- otherwise update a develop parameter guardsetting:performWithGuard(UpdateParam,param,tonumber(value)) end diff --git a/Source/LRPlugin/MIDI2LR.lrplugin/ClientUtilities.lua b/Source/LRPlugin/MIDI2LR.lrplugin/ClientUtilities.lua index 903db5ebe..b6d8a347c 100644 --- a/Source/LRPlugin/MIDI2LR.lrplugin/ClientUtilities.lua +++ b/Source/LRPlugin/MIDI2LR.lrplugin/ClientUtilities.lua @@ -109,7 +109,24 @@ end local function fToggleTF(param) return function() - LrDevelopController.setValue(param,not Ut.execFOM(LrDevelopController.getValue,param)) + LrTasks.startAsyncTask ( function () + if LrApplication.activeCatalog():getTargetPhoto() == nil then return end + LrApplication.activeCatalog():withWriteAccessDo( + 'MIDI2LR: Apply settings', + function() + local params = LrApplication.activeCatalog():getTargetPhoto():getDevelopSettings() + params[param] = not params[param] + LrApplication.activeCatalog():getTargetPhoto():applyDevelopSettings(params) + end, + { timeout = 4, + callback = function() + LrDialogs.showError(LOC("$$$/AgCustomMetadataRegistry/UpdateCatalog/Error=The catalog could not be updated with additional module metadata.")..' ApplySettings') + end, + asynchronous = true + } + ) + end + ) end end @@ -231,6 +248,21 @@ local function FullRefresh() end end +local function MIDIValueToLRValue(param, midi_value) + -- map midi range to develop parameter range + -- expects midi_value 0.0-1.0, doesn't protect against out-of-range + local min,max = Limits.GetMinMax(param) + return midi_value * (max-min) + min +end + +local function LRValueToMIDIValue(param) + -- map develop parameter range to midi range + local min,max = Limits.GetMinMax(param) + local retval = (LrDevelopController.getValue(param)-min)/(max-min) + if retval > 1 then return 1 end + if retval < 0 then return 0 end + return retval +end return { CopySettings = CopySettings, @@ -246,5 +278,7 @@ return { FullRefresh = FullRefresh, PasteSelectedSettings = PasteSelectedSettings, PasteSettings = PasteSettings, - ApplySettings = ApplySettings + ApplySettings = ApplySettings, + MIDIValueToLRValue = MIDIValueToLRValue, + LRValueToMIDIValue = LRValueToMIDIValue } diff --git a/Source/LRPlugin/MIDI2LR.lrplugin/Database.lua b/Source/LRPlugin/MIDI2LR.lrplugin/Database.lua index 669ed235a..e889d209d 100644 --- a/Source/LRPlugin/MIDI2LR.lrplugin/Database.lua +++ b/Source/LRPlugin/MIDI2LR.lrplugin/Database.lua @@ -219,8 +219,8 @@ local DataBase = { {"ShoVwdevelop_before_after_horiz",false,false,true,false,true,false,primaryDisplay..' '..LOC("$$$/AgPhotoBin/ViewMode/Develop/BeforeAfterLR=Before/After Left/Right"),develop,"*button*"}, {"ShoVwdevelop_before_after_vert",false,false,true,false,true,false,primaryDisplay..' '..LOC("$$$/AgPhotoBin/ViewMode/Develop/BeforeAfterTB=Before/After Top/Bottom"),develop,"*button*"}, {"ShoVwdevelop_before",false,false,true,false,true,false,primaryDisplay..' '..LOC("$$$/AgPhotoBin/ViewMode/Develop/Before=Before"),develop,"*button*"}, - {"ShoVwRefHoriz",false,false,true,false,true,false,"Show Reference View Horizontal",develop,"Will not be supported until the next release after January 2017 *button*"}, - {"ShoVwRefVert",false,false,true,false,true,false,"Show Reference View Vertical",develop,"Will not be supported until the next release after January 2017 *button*"}, + {"ShoVwRefHoriz",false,false,true,false,true,false,primaryDisplay..' '..LOC("$$$/AgDevelop/Menu/View/ReferenceActiveLeftRight=Reference View — Left/Right"),develop,"*button*"}, + {"ShoVwRefVert",false,false,true,false,true,false,primaryDisplay..' '..LOC("$$$/AgDevelop/Menu/View/ReferenceActiveTopBottom=Reference View — Top/Bottom"),develop,"*button*"}, --develop: auto --develop: clipping indicators @@ -319,6 +319,7 @@ local DataBase = { {"SaturationAdjustmentBlue",'colorAdjustments',true,true,true,false,false,LOC("$$$/AgCameraRawNamedSettings/CameraRawSettingMapping/SaturationAdjustmentBlue=Saturation Adjustment Blue"),colorAdjustments,"Changes the color vividness or purity of the color.",'mixerPanel'}, {"SaturationAdjustmentPurple",'colorAdjustments',true,true,true,false,false,LOC("$$$/AgCameraRawNamedSettings/CameraRawSettingMapping/SaturationAdjustmentPurple=Saturation Adjustment Purple"),colorAdjustments,"Changes the color vividness or purity of the color.",'mixerPanel'}, {"SaturationAdjustmentMagenta",'colorAdjustments',true,true,true,false,false,LOC("$$$/AgCameraRawNamedSettings/CameraRawSettingMapping/SaturationAdjustmentMagenta=Saturation Adjustment Magenta"),colorAdjustments,"Changes the color vividness or purity of the color.",'mixerPanel'}, + {"AllSaturationAdjustment",false,false,true,false,false,false,LOC("$$$/AgCameraRawNamedSettings/CameraRawSettingMapping/SaturationAdjustment=All Saturation Adjustment"),colorAdjustments,"Changes all color vividness or purity of all colors.",'mixerPanel'}, {"HueAdjustmentRed",'colorAdjustments',true,true,true,false,false,LOC("$$$/AgCameraRawNamedSettings/CameraRawSettingMapping/HueAdjustmentRed=Hue Adjustment Red"),colorAdjustments,"Changes the color.",'mixerPanel'}, {"HueAdjustmentOrange",'colorAdjustments',true,true,true,false,false,LOC("$$$/AgCameraRawNamedSettings/CameraRawSettingMapping/HueAdjustmentOrange=Hue Adjustment Orange"),colorAdjustments,"Changes the color.",'mixerPanel'}, {"HueAdjustmentYellow",'colorAdjustments',true,true,true,false,false,LOC("$$$/AgCameraRawNamedSettings/CameraRawSettingMapping/HueAdjustmentYellow=Hue Adjustment Yellow"),colorAdjustments,"Changes the color.",'mixerPanel'}, @@ -353,6 +354,7 @@ local DataBase = { {"ResetSaturationAdjustmentBlue",false,false,true,false,true,false,reset..' '..LOC("$$$/AgCameraRawNamedSettings/CameraRawSettingMapping/SaturationAdjustmentBlue=Saturation Adjustment Blue"),resetColorAdjustments,"Reset to default. *button*",'mixerPanel'}, {"ResetSaturationAdjustmentPurple",false,false,true,false,true,false,reset..' '..LOC("$$$/AgCameraRawNamedSettings/CameraRawSettingMapping/SaturationAdjustmentPurple=Saturation Adjustment Purple"),resetColorAdjustments,"Reset to default. *button*",'mixerPanel'}, {"ResetSaturationAdjustmentMagenta",false,false,true,false,true,false,reset..' '..LOC("$$$/AgCameraRawNamedSettings/CameraRawSettingMapping/SaturationAdjustmentMagenta=Saturation Adjustment Magenta"),resetColorAdjustments,"Reset to default. *button*",'mixerPanel'}, + {"ResetAllSaturationAdjustment",false,false,true,false,true,false,reset..' '..LOC("$$$/AgCameraRawNamedSettings/CameraRawSettingMapping/SaturationAdjustment=All Saturation Adjustment"),resetColorAdjustments,"Reset to default. *button*",'mixerPanel'}, {"ResetHueAdjustmentRed",false,false,true,false,true,false,reset..' '..LOC("$$$/AgCameraRawNamedSettings/CameraRawSettingMapping/HueAdjustmentRed=Hue Adjustment Red"),resetColorAdjustments,"Reset to default. *button*",'mixerPanel'}, {"ResetHueAdjustmentOrange",false,false,true,false,true,false,reset..' '..LOC("$$$/AgCameraRawNamedSettings/CameraRawSettingMapping/HueAdjustmentOrange=Hue Adjustment Orange"),resetColorAdjustments,"Reset to default. *button*",'mixerPanel'}, {"ResetHueAdjustmentYellow",false,false,true,false,true,false,reset..' '..LOC("$$$/AgCameraRawNamedSettings/CameraRawSettingMapping/HueAdjustmentYellow=Hue Adjustment Yellow"),resetColorAdjustments,"Reset to default. *button*",'mixerPanel'}, diff --git a/Source/LRPlugin/MIDI2LR.lrplugin/Info.lua b/Source/LRPlugin/MIDI2LR.lrplugin/Info.lua index 50b718fa4..63d554ea6 100644 --- a/Source/LRPlugin/MIDI2LR.lrplugin/Info.lua +++ b/Source/LRPlugin/MIDI2LR.lrplugin/Info.lua @@ -55,5 +55,5 @@ return { file = "Build.lua" }, }, - VERSION = { major=2, minor=1, revision=0, build=0} + VERSION = { major=2, minor=2, revision=0, build=0} } diff --git a/Source/LRPlugin/MIDI2LR.lrplugin/MenuList.lua b/Source/LRPlugin/MIDI2LR.lrplugin/MenuList.lua index a7fa35fe9..95c18a38e 100644 --- a/Source/LRPlugin/MIDI2LR.lrplugin/MenuList.lua +++ b/Source/LRPlugin/MIDI2LR.lrplugin/MenuList.lua @@ -591,13 +591,13 @@ }, { "ShoVwRefHoriz", - "Show Reference View Horizontal", + "Primary Display Reference View — Left/Right", "Develop", true }, { "ShoVwRefVert", - "Show Reference View Vertical", + "Primary Display Reference View — Top/Bottom", "Develop", true }, @@ -979,6 +979,12 @@ "Color Adjustments", false }, + { + "AllSaturationAdjustment", + "All Saturation Adjustment", + "Color Adjustments", + false + }, { "HueAdjustmentRed", "Hue Adjustment Red", @@ -1183,6 +1189,12 @@ "Reset Color Adjustments", true }, + { + "ResetAllSaturationAdjustment", + "Reset All Saturation Adjustment", + "Reset Color Adjustments", + true + }, { "ResetHueAdjustmentRed", "Reset Hue Adjustment Red", diff --git a/Source/LRPlugin/MIDI2LR.lrplugin/ParamList.lua b/Source/LRPlugin/MIDI2LR.lrplugin/ParamList.lua index 34e4e9f0e..49b2970d0 100644 --- a/Source/LRPlugin/MIDI2LR.lrplugin/ParamList.lua +++ b/Source/LRPlugin/MIDI2LR.lrplugin/ParamList.lua @@ -937,11 +937,11 @@ }, BlueHue = { "Blue Hue Calibration", - 385 + 387 }, BlueSaturation = { "Blue Saturation Calibration", - 386 + 388 }, Brightness = { "Brightness", @@ -953,15 +953,15 @@ }, ColorNoiseReduction = { "Color Noise Reduction", - 262 + 264 }, ColorNoiseReductionDetail = { "Color Noise Reduction Detail", - 263 + 265 }, ColorNoiseReductionSmoothness = { "Color Noise Reduction Smoothness", - 264 + 266 }, Contrast = { "Contrast", @@ -969,51 +969,51 @@ }, CropAngle = { "Crop Angle", - 485 + 487 }, CropBottom = { "Crop - Bottom", - 486 + 488 }, CropLeft = { "Crop - Left", - 487 + 489 }, CropRight = { "Crop - Right", - 488 + 490 }, CropTop = { "Crop - Top", - 489 + 491 }, DefringeGreenAmount = { "Defringe Green Amount", - 292 + 294 }, DefringeGreenHueHi = { "Defringe Green Hue - High", - 294 + 296 }, DefringeGreenHueLo = { "Defringe Green Hue - Low", - 293 + 295 }, DefringePurpleAmount = { "Defringe Purple Amount", - 289 + 291 }, DefringePurpleHueHi = { "Defringe Purple Hue - High", - 291 + 293 }, DefringePurpleHueLo = { "Defringe Purple Hue - Low", - 290 + 292 }, Dehaze = { "Dehaze Amount", - 333 + 335 }, Exposure = { "Exposure", @@ -1021,55 +1021,55 @@ }, GrainAmount = { "Grain Amount", - 343 + 345 }, GrainFrequency = { "Grain Roughness", - 345 + 347 }, GrainSize = { "Grain Size", - 344 + 346 }, GrayMixerAqua = { "Gray Mixer Aqua", - 205 + 206 }, GrayMixerBlue = { "Gray Mixer Blue", - 206 + 207 }, GrayMixerGreen = { "Gray Mixer Green", - 204 + 205 }, GrayMixerMagenta = { "Gray Mixer Magenta", - 208 + 209 }, GrayMixerOrange = { "Gray Mixer Orange", - 202 + 203 }, GrayMixerPurple = { "Gray Mixer Purple", - 207 + 208 }, GrayMixerRed = { "Gray Mixer Red", - 201 + 202 }, GrayMixerYellow = { "Gray Mixer Yellow", - 203 + 204 }, GreenHue = { "Green Hue Calibration", - 383 + 385 }, GreenSaturation = { "Green Saturation Calibration", - 384 + 386 }, Highlights = { "Highlights (Highlight Recovery in PV2003 and PV2010)", @@ -1077,95 +1077,95 @@ }, HueAdjustmentAqua = { "Hue Adjustment Aqua", - 187 + 188 }, HueAdjustmentBlue = { "Hue Adjustment Blue", - 188 + 189 }, HueAdjustmentGreen = { "Hue Adjustment Green", - 186 + 187 }, HueAdjustmentMagenta = { "Hue Adjustment Magenta", - 190 + 191 }, HueAdjustmentOrange = { "Hue Adjustment Orange", - 184 + 185 }, HueAdjustmentPurple = { "Hue Adjustment Purple", - 189 + 190 }, HueAdjustmentRed = { "Hue Adjustment Red", - 183 + 184 }, HueAdjustmentYellow = { "Hue Adjustment Yellow", - 185 + 186 }, LensManualDistortionAmount = { "Lens Manual Distortion Amount", - 301 + 303 }, LensProfileChromaticAberrationScale = { "Lens Profile Chromatic Aberration Scale", - 283 + 285 }, LensProfileDistortionScale = { "Lens Profile Distortion Scale", - 282 + 284 }, LensProfileVignettingScale = { "Lens Profile Vignetting Scale", - 284 + 286 }, LuminanceAdjustmentAqua = { "Luminance Adjustment Aqua", - 195 + 196 }, LuminanceAdjustmentBlue = { "Luminance Adjustment Blue", - 196 + 197 }, LuminanceAdjustmentGreen = { "Luminance Adjustment Green", - 194 + 195 }, LuminanceAdjustmentMagenta = { "Luminance Adjustment Magenta", - 198 + 199 }, LuminanceAdjustmentOrange = { "Luminance Adjustment Orange", - 192 + 193 }, LuminanceAdjustmentPurple = { "Luminance Adjustment Purple", - 197 + 198 }, LuminanceAdjustmentRed = { "Luminance Adjustment Red", - 191 + 192 }, LuminanceAdjustmentYellow = { "Luminance Adjustment Yellow", - 193 + 194 }, LuminanceNoiseReductionContrast = { "Luminance Contrast", - 261 + 263 }, LuminanceNoiseReductionDetail = { "Luminance Detail", - 260 + 262 }, LuminanceSmoothing = { "Luminance Smoothing", - 259 + 261 }, ParametricDarks = { "Dark Tones", @@ -1197,63 +1197,63 @@ }, PerspectiveAspect = { "Perspective Aspect", - 321 + 323 }, PerspectiveHorizontal = { "Perspective Horizontal", - 318 + 320 }, PerspectiveRotate = { "Perspective Rotate", - 319 + 321 }, PerspectiveScale = { "Perspective Scale", - 320 + 322 }, PerspectiveVertical = { "Perspective Vertical", - 317 + 319 }, PerspectiveX = { "Perspective X", - 322 + 324 }, PerspectiveY = { "Perspective Y", - 323 + 325 }, PostCropVignetteAmount = { "Post Crop Vignette Amount", - 334 + 336 }, PostCropVignetteFeather = { "Post Crop Vignette Feather", - 336 + 338 }, PostCropVignetteHighlightContrast = { "Post Crop Vignette Highlight Contrast", - 342 + 344 }, PostCropVignetteMidpoint = { "Post Crop Vignette Midpoint", - 335 + 337 }, PostCropVignetteRoundness = { "Post Crop Vignette Roundness", - 337 + 339 }, PostCropVignetteStyle = { "Post Crop Vignette Style", - 338 + 340 }, RedHue = { "Red Hue Calibration", - 381 + 383 }, RedSaturation = { "Red Saturation Calibration", - 382 + 384 }, Saturation = { "Saturation", @@ -1293,7 +1293,7 @@ }, ShadowTint = { "Shadow Tint Calibration", - 380 + 382 }, Shadows = { "Shadows (Fill Light in PV2003 and PV2010)", @@ -1301,39 +1301,39 @@ }, SharpenDetail = { "Sharpen Detail", - 257 + 259 }, SharpenEdgeMasking = { "Sharpen Edge Masking", - 258 + 260 }, SharpenRadius = { "Sharpen Radius", - 256 + 258 }, Sharpness = { "Sharpness", - 255 + 257 }, SplitToningBalance = { "Split Toning Balance", - 247 + 249 }, SplitToningHighlightHue = { "Highlight Hue", - 245 + 247 }, SplitToningHighlightSaturation = { "Highlight Saturation", - 246 + 248 }, SplitToningShadowHue = { "Shadow Hue", - 243 + 245 }, SplitToningShadowSaturation = { "Shadow Saturation", - 244 + 246 }, Temperature = { "Temperature", @@ -1349,11 +1349,11 @@ }, VignetteAmount = { "Vignette Amount", - 302 + 304 }, VignetteMidpoint = { "Vignette Midpoint", - 303 + 305 }, Whites = { "Whites (no effect in PV2003 and PV2010)", @@ -1361,71 +1361,71 @@ }, local_Blacks2012 = { "Local Adjustments Blacks (PV2012)", - 447 + 449 }, local_Clarity = { "Local Adjustments Clarity (PV2010 and PV2012)", - 448 + 450 }, local_Contrast = { "Local Adjustments Contrast (PV2010 and PV2012)", - 443 + 445 }, local_Defringe = { "Local Adjustments Defringe (PV2012)", - 454 + 456 }, local_Dehaze = { "Local Adjustments Dehaze (PV2012)", - 449 + 451 }, local_Exposure = { "Local Adjustments Exposure (PV2010 and PV2012)", - 442 + 444 }, local_Highlights = { "Local Adjustments Highlights (PV2012)", - 444 + 446 }, local_LuminanceNoise = { "Local Adjustments Luminence Noise Reduction (PV2012)", - 452 + 454 }, local_Moire = { "Local Adjustments Moire (PV2012)", - 453 + 455 }, local_Saturation = { "Local Adjustments Saturation (PV2010 and PV2012)", - 450 + 452 }, local_Shadows = { "Local Adjustments Shadows (PV2012)", - 445 + 447 }, local_Sharpness = { "Local Adjustments Sharpness (PV2010 and PV2012)", - 451 + 453 }, local_Temperature = { "Local Adjustments Temp. (PV2012)", - 440 + 442 }, local_Tint = { "Local Adjustments Tint (PV2012)", - 441 + 443 }, local_ToningLuminance = { "Local Toning Luminance (PV2010)", - 455 + 457 }, local_Whites2012 = { "Local Adjustments Whites (PV2012)", - 446 + 448 }, straightenAngle = { "Straighten Angle", - 484 + 486 } } local SendToMidi = { @@ -1555,6 +1555,7 @@ "CropTop" } local ProfileMap = { + AllSaturationAdjustment = "mixerPanel", AutoLateralCA = "lensCorrectionsPanel", AutoTone = "adjustPanel", Blacks = "adjustPanel", @@ -1678,6 +1679,7 @@ Profile_Camera_Vivid_Red = "calibratePanel", RedHue = "calibratePanel", RedSaturation = "calibratePanel", + ResetAllSaturationAdjustment = "mixerPanel", ResetBlacks = "adjustPanel", ResetBlueHue = "calibratePanel", ResetBlueSaturation = "calibratePanel", diff --git a/Source/LRPlugin/MIDI2LR.lrplugin/ShutDownPlugin.lua b/Source/LRPlugin/MIDI2LR.lrplugin/ShutDownPlugin.lua index dff43a6b8..58b382e8a 100644 --- a/Source/LRPlugin/MIDI2LR.lrplugin/ShutDownPlugin.lua +++ b/Source/LRPlugin/MIDI2LR.lrplugin/ShutDownPlugin.lua @@ -16,10 +16,15 @@ PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with MIDI2LR. If not, see . ------------------------------------------------------------------------------]] -local LrTasks = import 'LrTasks' -MIDI2LR.SERVER:send('TerminateApplication 1\n') -LrTasks.yield() -MIDI2LR.RUNNING = false -MIDI2LR.SERVER:close() -MIDI2LR.CLIENT:close() +-- check if MIDI2LR is set because if plugin fails to load in LR, reloading mechanism will fail because MIDI2LR will be unset +if MIDI2LR and MIDI2LR.RUNNING then + MIDI2LR.RUNNING = false + if MIDI2LR.SERVER then + MIDI2LR.SERVER:send('TerminateApplication 1\n') + MIDI2LR.SERVER:close() + end + if MIDI2LR.CLIENT then + MIDI2LR.CLIENT:close() + end +end diff --git a/Source/LRPlugin/MIDI2LR.lrplugin/TranslatedStrings_de.txt b/Source/LRPlugin/MIDI2LR.lrplugin/TranslatedStrings_de.txt index 3f69e7bc4..543bb2de1 100644 --- a/Source/LRPlugin/MIDI2LR.lrplugin/TranslatedStrings_de.txt +++ b/Source/LRPlugin/MIDI2LR.lrplugin/TranslatedStrings_de.txt @@ -1,15 +1,4 @@ -"$$$/MIDI2LR/About/about=Verwendung: einen MIDI-Controller verbinden, MIDI2LR starten, und mit der Bearbeitung beginnen! Für Details siehe https://github.com/rsjaffe/MIDI2LR/wiki" -"$$$/MIDI2LR/Info/BuildFiles=Build Dateien (nur für Software-Entwickler)" -"$$$/MIDI2LR/Keys/Shortcut=Tastaturbefehl" -"$$$/MIDI2LR/Limits/Limits=Grenzwerte" -"$$$/MIDI2LR/Options/RevealAdjustedControls=Angepasste Bedienelemente anzeigen" -"$$$/MIDI2LR/Options/TrackingDelay=Tracking-Verzögerung" -"$$$/MIDI2LR/Options/dlgtitle=MIDI2LR Einstellungen" -"$$$/MIDI2LR/Options/pastesel=Auswahl einfügen" -"$$$/MIDI2LR/Preferences/cantload=Die Einstellungen konnten nicht geladen werden. Verwende Standard-Einstellungen." -"$$$/MIDI2LR/Profiles/NotifyWhenChanged=Bei Profil-Änderungen benachrichtigen" -"$$$/MIDI2LR/Shortcuts/Key=Taste" -"$$$/Ag/Layout/Book/ModuleTitle=Buch" +"$$$/Ag/Layout/Book/ModuleTitle=Buch" "$$$/AgApplication/Menu/Window/SecondMonitor/Compare=Vergleichen" "$$$/AgApplication/Menu/Window/SecondMonitor/Grid=Raster" "$$$/AgApplication/Menu/Window/SecondMonitor/LiveLoupe=Live-Lupe" @@ -222,6 +211,8 @@ "$$$/AgDevelop/Localized/Whites=Weiß" "$$$/AgDevelop/Menu/ProcessVersion=Prozess" "$$$/AgDevelop/Menu/Tools=Wer&kzeuge" +"$$$/AgDevelop/Menu/View/ReferenceActiveLeftRight=Referenzansicht – Links/Rechts" +"$$$/AgDevelop/Menu/View/ReferenceActiveTopBottom=Referenzansicht – Oben/Unten" "$$$/AgDevelop/Panel/BasicAdjustments=Grundeinstellungen" "$$$/AgDevelop/Panel/Calibration=Kalibrierung" "$$$/AgDevelop/Panel/Detail=Details" @@ -295,7 +286,6 @@ "$$$/AgWPG/Dialogs/About/Title=Info" "$$$/AgWatermarking/Alignment/Left=Links" "$$$/AgWatermarking/Alignment/Right=Rechts" -"$$$/AgWorkspace/ExitApplication/Button/Exit=Beenden" "$$$/Application/Menu/Window/Modules=Module:" "$$$/Bezel/RedoTitle=Wiederholen" "$$$/CRaw/Style/Profile/AdobeStandard=Adobe-Standard" @@ -338,4 +328,15 @@ "$$$/SmartCollection/Criteria/Heading/Develop=Entwickeln" "$$$/WFCatSearch/TermCategories/General=Allgemein" "$$$/WPG/Help/Shortcuts/WebHeader=Web" -"$$$/Win/MenuDisplay/KeyboardShortcutElement/Shift=Umschalt" \ No newline at end of file +"$$$/Win/MenuDisplay/KeyboardShortcutElement/Shift=Umschalt" +"$$$/MIDI2LR/About/about=Verwendung: einen MIDI-Controller verbinden, MIDI2LR starten, und mit der Bearbeitung beginnen! Für Details siehe https://github.com/rsjaffe/MIDI2LR/wiki" +"$$$/MIDI2LR/Info/BuildFiles=Build Dateien (nur für Software-Entwickler)" +"$$$/MIDI2LR/Keys/Shortcut=Tastaturbefehl" +"$$$/MIDI2LR/Limits/Limits=Grenzwerte" +"$$$/MIDI2LR/Options/RevealAdjustedControls=Angepasste Bedienelemente anzeigen" +"$$$/MIDI2LR/Options/TrackingDelay=Tracking-Verzögerung" +"$$$/MIDI2LR/Options/dlgtitle=MIDI2LR Einstellungen" +"$$$/MIDI2LR/Options/pastesel=Auswahl einfügen" +"$$$/MIDI2LR/Preferences/cantload=Die Einstellungen konnten nicht geladen werden. Verwende Standard-Einstellungen." +"$$$/MIDI2LR/Profiles/NotifyWhenChanged=Bei Profil-Änderungen benachrichtigen" +"$$$/MIDI2LR/Shortcuts/Key=Taste" \ No newline at end of file diff --git a/Source/LRPlugin/MIDI2LR.lrplugin/TranslatedStrings_es.txt b/Source/LRPlugin/MIDI2LR.lrplugin/TranslatedStrings_es.txt index 86097e10a..3e944a577 100644 --- a/Source/LRPlugin/MIDI2LR.lrplugin/TranslatedStrings_es.txt +++ b/Source/LRPlugin/MIDI2LR.lrplugin/TranslatedStrings_es.txt @@ -1,15 +1,4 @@ -"$$$/MIDI2LR/About/about=Modo de empleo: conectar un controlador MIDI, lanzar MIDI2LR, y comenzar a editar! Ver https://github.com/rsjaffe/MIDI2LR/wiki para más detalles." -"$$$/MIDI2LR/Info/BuildFiles=Crear archivos (uso de desarrollo solamente)" -"$$$/MIDI2LR/Keys/Shortcut=Método abreviado" -"$$$/MIDI2LR/Limits/Limits=Limites" -"$$$/MIDI2LR/Options/RevealAdjustedControls=Mostrar controles personalizados" -"$$$/MIDI2LR/Options/TrackingDelay=Retardo de seguimiento" -"$$$/MIDI2LR/Options/dlgtitle=Ajustar las opciones MIDI2LR " -"$$$/MIDI2LR/Options/pastesel=Pegar selecciones" -"$$$/MIDI2LR/Preferences/cantload=No se puede cargar preferencias. Utilizando la configuración predeterminada." -"$$$/MIDI2LR/Profiles/NotifyWhenChanged=Notificar cuando cambia el perfil" -"$$$/MIDI2LR/Shortcuts/Key=Tecla" -"$$$/Ag/Layout/Book/ModuleTitle=Libro" +"$$$/Ag/Layout/Book/ModuleTitle=Libro" "$$$/AgApplication/Menu/Window/SecondMonitor/Compare=Comparar" "$$$/AgApplication/Menu/Window/SecondMonitor/Grid=Cuadrícula" "$$$/AgApplication/Menu/Window/SecondMonitor/LiveLoupe=Lupa interactiva" @@ -222,6 +211,8 @@ "$$$/AgDevelop/Localized/Whites=Blancos" "$$$/AgDevelop/Menu/ProcessVersion=Proceso" "$$$/AgDevelop/Menu/Tools=&Herramientas" +"$$$/AgDevelop/Menu/View/ReferenceActiveLeftRight=Vista de referencia: izquierda/derecha" +"$$$/AgDevelop/Menu/View/ReferenceActiveTopBottom=Vista de referencia: arriba/abajo" "$$$/AgDevelop/Panel/BasicAdjustments=Básicos" "$$$/AgDevelop/Panel/Calibration=Calibración" "$$$/AgDevelop/Panel/Detail=Detalle" @@ -295,7 +286,6 @@ "$$$/AgWPG/Dialogs/About/Title=Acerca de" "$$$/AgWatermarking/Alignment/Left=Izquierda" "$$$/AgWatermarking/Alignment/Right=Derecha" -"$$$/AgWorkspace/ExitApplication/Button/Exit=Salir" "$$$/Application/Menu/Window/Modules=Módulos:" "$$$/Bezel/RedoTitle=Rehacer" "$$$/CRaw/Style/Profile/AdobeStandard=Estándar de Adobe" @@ -338,4 +328,15 @@ "$$$/SmartCollection/Criteria/Heading/Develop=Revelar" "$$$/WFCatSearch/TermCategories/General=Generales" "$$$/WPG/Help/Shortcuts/WebHeader=Métodos abreviados de Web" -"$$$/Win/MenuDisplay/KeyboardShortcutElement/Shift=Mayús" \ No newline at end of file +"$$$/Win/MenuDisplay/KeyboardShortcutElement/Shift=Mayús" +"$$$/MIDI2LR/About/about=Modo de empleo: conectar un controlador MIDI, lanzar MIDI2LR, y comenzar a editar! Ver https://github.com/rsjaffe/MIDI2LR/wiki para más detalles." +"$$$/MIDI2LR/Info/BuildFiles=Crear archivos (uso de desarrollo solamente)" +"$$$/MIDI2LR/Keys/Shortcut=Método abreviado" +"$$$/MIDI2LR/Limits/Limits=Limites" +"$$$/MIDI2LR/Options/RevealAdjustedControls=Mostrar controles personalizados" +"$$$/MIDI2LR/Options/TrackingDelay=Retardo de seguimiento" +"$$$/MIDI2LR/Options/dlgtitle=Ajustar las opciones MIDI2LR " +"$$$/MIDI2LR/Options/pastesel=Pegar selecciones" +"$$$/MIDI2LR/Preferences/cantload=No se puede cargar preferencias. Utilizando la configuración predeterminada." +"$$$/MIDI2LR/Profiles/NotifyWhenChanged=Notificar cuando cambia el perfil" +"$$$/MIDI2LR/Shortcuts/Key=Tecla" \ No newline at end of file diff --git a/Source/LRPlugin/MIDI2LR.lrplugin/TranslatedStrings_fr.txt b/Source/LRPlugin/MIDI2LR.lrplugin/TranslatedStrings_fr.txt index 6e0ecab2f..e1a3969a3 100644 --- a/Source/LRPlugin/MIDI2LR.lrplugin/TranslatedStrings_fr.txt +++ b/Source/LRPlugin/MIDI2LR.lrplugin/TranslatedStrings_fr.txt @@ -1,15 +1,4 @@ -"$$$/MIDI2LR/About/about=Mode d'emploi: connecter un contrôleur MIDI, lancer MIDI2LR, et commencer à éditer! Voir https://github.com/rsjaffe/MIDI2LR/wiki pour plus d'aide." -"$$$/MIDI2LR/Info/BuildFiles=Générer les fichiers (pour développeur seulement)" -"$$$/MIDI2LR/Keys/Shortcut=Raccourci" -"$$$/MIDI2LR/Limits/Limits=Limites" -"$$$/MIDI2LR/Options/RevealAdjustedControls=Afficher les paramètres ajustés" -"$$$/MIDI2LR/Options/TrackingDelay=Délai de réponse" <= not 100% sure about this one -"$$$/MIDI2LR/Options/dlgtitle=Options de MIDI2LR" -"$$$/MIDI2LR/Options/pastesel=Coller la sélection" -"$$$/MIDI2LR/Preferences/cantload=Impossible de charger les préférences. Utilisation des préférences par défaut." -"$$$/MIDI2LR/Profiles/NotifyWhenChanged=Alerter les changements de profile" -"$$$/MIDI2LR/Shortcuts/Key=Touche" -"$$$/Ag/Layout/Book/ModuleTitle=Livres" +"$$$/Ag/Layout/Book/ModuleTitle=Livres" "$$$/AgApplication/Menu/Window/SecondMonitor/Compare=Comparaison" "$$$/AgApplication/Menu/Window/SecondMonitor/Grid=Grille" "$$$/AgApplication/Menu/Window/SecondMonitor/LiveLoupe=Loupe interactive" @@ -222,6 +211,8 @@ "$$$/AgDevelop/Localized/Whites=Blancs" "$$$/AgDevelop/Menu/ProcessVersion=Processus" "$$$/AgDevelop/Menu/Tools=&Outils" +"$$$/AgDevelop/Menu/View/ReferenceActiveLeftRight=Vue de référence - Gauche/Droite" +"$$$/AgDevelop/Menu/View/ReferenceActiveTopBottom=Vue de référence - Haut/Bas" "$$$/AgDevelop/Panel/BasicAdjustments=Réglages de base" "$$$/AgDevelop/Panel/Calibration=Etalonnage" "$$$/AgDevelop/Panel/Detail=Détail" @@ -295,7 +286,6 @@ "$$$/AgWPG/Dialogs/About/Title=A propos de" "$$$/AgWatermarking/Alignment/Left=Gauche" "$$$/AgWatermarking/Alignment/Right=Droite" -"$$$/AgWorkspace/ExitApplication/Button/Exit=Fermer" "$$$/Application/Menu/Window/Modules=Modules :" "$$$/Bezel/RedoTitle=Rétablir" "$$$/CRaw/Style/Profile/AdobeStandard=Adobe Standard" @@ -338,4 +328,15 @@ "$$$/SmartCollection/Criteria/Heading/Develop=Développer" "$$$/WFCatSearch/TermCategories/General=Général" "$$$/WPG/Help/Shortcuts/WebHeader=Raccourcis du module web" -"$$$/Win/MenuDisplay/KeyboardShortcutElement/Shift=Maj" \ No newline at end of file +"$$$/Win/MenuDisplay/KeyboardShortcutElement/Shift=Maj" +"$$$/MIDI2LR/About/about=Mode d'emploi: connecter un contrôleur MIDI, lancer MIDI2LR, et commencer à éditer! Voir https://github.com/rsjaffe/MIDI2LR/wiki pour plus d'aide." +"$$$/MIDI2LR/Info/BuildFiles=Générer les fichiers (pour développeur seulement)" +"$$$/MIDI2LR/Keys/Shortcut=Raccourci" +"$$$/MIDI2LR/Limits/Limits=Limites" +"$$$/MIDI2LR/Options/RevealAdjustedControls=Afficher les paramètres ajustés" +"$$$/MIDI2LR/Options/TrackingDelay=Délai de réponse" +"$$$/MIDI2LR/Options/dlgtitle=Options de MIDI2LR" +"$$$/MIDI2LR/Options/pastesel=Coller la sélection" +"$$$/MIDI2LR/Preferences/cantload=Impossible de charger les préférences. Utilisation des préférences par défaut." +"$$$/MIDI2LR/Profiles/NotifyWhenChanged=Alerter les changements de profile" +"$$$/MIDI2LR/Shortcuts/Key=Touche" \ No newline at end of file diff --git a/Source/LRPlugin/MIDI2LR.lrplugin/TranslatedStrings_it.txt b/Source/LRPlugin/MIDI2LR.lrplugin/TranslatedStrings_it.txt index 762b3db4c..0c4081502 100644 --- a/Source/LRPlugin/MIDI2LR.lrplugin/TranslatedStrings_it.txt +++ b/Source/LRPlugin/MIDI2LR.lrplugin/TranslatedStrings_it.txt @@ -1,15 +1,4 @@ -"$$$/MIDI2LR/About/about=Modo d'uso: collegare un controller MIDI, avviare MIDI2LR ed iniziare a lavorare! Vedere https://github.com/rsjaffe/MIDI2LR/wiki per i dettagli." -"$$$/MIDI2LR/Info/BuildFiles=Build files (solo per gli sviluppatori)" -"$$$/MIDI2LR/Keys/Shortcut=Scelta rapida" -"$$$/MIDI2LR/Limits/Limits=Limiti" -"$$$/MIDI2LR/Options/RevealAdjustedControls=Rivela controlli di modifica" -"$$$/MIDI2LR/Options/TrackingDelay=Ritardo di monitoraggio" -"$$$/MIDI2LR/Options/dlgtitle=Imposta le opzioni di MIDI2LR" -"$$$/MIDI2LR/Options/pastesel=Incolla selezioni" -"$$$/MIDI2LR/Preferences/cantload=Impossibile caricare le preferenze. Utilizzo delle impostazioni predefinite." -"$$$/MIDI2LR/Profiles/NotifyWhenChanged=Notifica il cambio di profilo" -"$$$/MIDI2LR/Shortcuts/Key=Tasto" -"$$$/Ag/Layout/Book/ModuleTitle=Libro" +"$$$/Ag/Layout/Book/ModuleTitle=Libro" "$$$/AgApplication/Menu/Window/SecondMonitor/Compare=Confronto" "$$$/AgApplication/Menu/Window/SecondMonitor/Grid=Griglia" "$$$/AgApplication/Menu/Window/SecondMonitor/LiveLoupe=Lentino dinamico" @@ -222,6 +211,8 @@ "$$$/AgDevelop/Localized/Whites=Bianchi" "$$$/AgDevelop/Menu/ProcessVersion=Elaborazione" "$$$/AgDevelop/Menu/Tools=S&trumenti" +"$$$/AgDevelop/Menu/View/ReferenceActiveLeftRight=Vista di riferimento: sinistra/destra" +"$$$/AgDevelop/Menu/View/ReferenceActiveTopBottom=Vista di riferimento: sup./inf." "$$$/AgDevelop/Panel/BasicAdjustments=Base" "$$$/AgDevelop/Panel/Calibration=Calibrazione" "$$$/AgDevelop/Panel/Detail=Dettagli" @@ -295,7 +286,6 @@ "$$$/AgWPG/Dialogs/About/Title=Info su" "$$$/AgWatermarking/Alignment/Left=Sinistra" "$$$/AgWatermarking/Alignment/Right=Destra" -"$$$/AgWorkspace/ExitApplication/Button/Exit=Esci" "$$$/Application/Menu/Window/Modules=Moduli:" "$$$/Bezel/RedoTitle=Ripristina" "$$$/CRaw/Style/Profile/AdobeStandard=Adobe Standard" @@ -338,4 +328,15 @@ "$$$/SmartCollection/Criteria/Heading/Develop=Sviluppo" "$$$/WFCatSearch/TermCategories/General=Generali" "$$$/WPG/Help/Shortcuts/WebHeader=Scelte rapide per Web" -"$$$/Win/MenuDisplay/KeyboardShortcutElement/Shift=Maiuscole" \ No newline at end of file +"$$$/Win/MenuDisplay/KeyboardShortcutElement/Shift=Maiuscole" +"$$$/MIDI2LR/About/about=Modo d'uso: collegare un controller MIDI, avviare MIDI2LR ed iniziare a lavorare! Vedere https://github.com/rsjaffe/MIDI2LR/wiki per i dettagli." +"$$$/MIDI2LR/Info/BuildFiles=Build files (solo per gli sviluppatori)" +"$$$/MIDI2LR/Keys/Shortcut=Scelta rapida" +"$$$/MIDI2LR/Limits/Limits=Limiti" +"$$$/MIDI2LR/Options/RevealAdjustedControls=Rivela controlli di modifica" +"$$$/MIDI2LR/Options/TrackingDelay=Ritardo di monitoraggio" +"$$$/MIDI2LR/Options/dlgtitle=Imposta le opzioni di MIDI2LR" +"$$$/MIDI2LR/Options/pastesel=Incolla selezioni" +"$$$/MIDI2LR/Preferences/cantload=Impossibile caricare le preferenze. Utilizzo delle impostazioni predefinite." +"$$$/MIDI2LR/Profiles/NotifyWhenChanged=Notifica il cambio di profilo" +"$$$/MIDI2LR/Shortcuts/Key=Tasto" \ No newline at end of file diff --git a/Source/LRPlugin/MIDI2LR.lrplugin/TranslatedStrings_ja.txt b/Source/LRPlugin/MIDI2LR.lrplugin/TranslatedStrings_ja.txt index 0a1ec4b84..b62f67e65 100644 --- a/Source/LRPlugin/MIDI2LR.lrplugin/TranslatedStrings_ja.txt +++ b/Source/LRPlugin/MIDI2LR.lrplugin/TranslatedStrings_ja.txt @@ -1,15 +1,4 @@ -"$$$/MIDI2LR/About/about=使用方法:MIDIコントローラを接続し、MIDI2LRを起動し、編集を開始!詳細については、https://github.com/rsjaffe/MIDI2LR/wikiを参照してください。" -"$$$/MIDI2LR/Info/BuildFiles=Build files (development use only)" -"$$$/MIDI2LR/Keys/Shortcut=ショートカット" -"$$$/MIDI2LR/Limits/Limits=範囲" -"$$$/MIDI2LR/Options/RevealAdjustedControls=調整されたコントロールを公開する" -"$$$/MIDI2LR/Options/TrackingDelay=トラッキング遅延" -"$$$/MIDI2LR/Options/dlgtitle=MIDI2LRオプションを設定" -"$$$/MIDI2LR/Options/pastesel=ペーストの選択" -"$$$/MIDI2LR/Preferences/cantload=環境設定を読み込むことができません。デフォルト設定を使用して。" -"$$$/MIDI2LR/Profiles/NotifyWhenChanged=Notify when profile changes" -"$$$/MIDI2LR/Shortcuts/Key=キー" -"$$$/Ag/Layout/Book/ModuleTitle=ブック" +"$$$/Ag/Layout/Book/ModuleTitle=ブック" "$$$/AgApplication/Menu/Window/SecondMonitor/Compare=比較" "$$$/AgApplication/Menu/Window/SecondMonitor/Grid=グリッド" "$$$/AgApplication/Menu/Window/SecondMonitor/LiveLoupe=ライブルーペ" @@ -222,6 +211,8 @@ "$$$/AgDevelop/Localized/Whites=白レベル" "$$$/AgDevelop/Menu/ProcessVersion=処理" "$$$/AgDevelop/Menu/Tools=ツール(&T)" +"$$$/AgDevelop/Menu/View/ReferenceActiveLeftRight=参照ビュー - 左 / 右" +"$$$/AgDevelop/Menu/View/ReferenceActiveTopBottom=参照ビュー - 上 / 下" "$$$/AgDevelop/Panel/BasicAdjustments=基本補正" "$$$/AgDevelop/Panel/Calibration=キャリブレーション" "$$$/AgDevelop/Panel/Detail=ディテール" @@ -295,7 +286,6 @@ "$$$/AgWPG/Dialogs/About/Title=情報" "$$$/AgWatermarking/Alignment/Left=左端" "$$$/AgWatermarking/Alignment/Right=右端" -"$$$/AgWorkspace/ExitApplication/Button/Exit=終了" "$$$/Application/Menu/Window/Modules=モジュール :" "$$$/Bezel/RedoTitle=やり直し" "$$$/CRaw/Style/Profile/AdobeStandard=アドビ標準" @@ -338,4 +328,15 @@ "$$$/SmartCollection/Criteria/Heading/Develop=現像" "$$$/WFCatSearch/TermCategories/General=一般" "$$$/WPG/Help/Shortcuts/WebHeader=Web のショートカット" -"$$$/Win/MenuDisplay/KeyboardShortcutElement/Shift=Shift" \ No newline at end of file +"$$$/Win/MenuDisplay/KeyboardShortcutElement/Shift=Shift" +"$$$/MIDI2LR/About/about=使用方法:MIDIコントローラを接続し、MIDI2LRを起動し、編集を開始!詳細については、https://github.com/rsjaffe/MIDI2LR/wikiを参照してください。" +"$$$/MIDI2LR/Info/BuildFiles=Build files (development use only)" +"$$$/MIDI2LR/Keys/Shortcut=ショートカット" +"$$$/MIDI2LR/Limits/Limits=範囲" +"$$$/MIDI2LR/Options/RevealAdjustedControls=調整されたコントロールを公開する" +"$$$/MIDI2LR/Options/TrackingDelay=トラッキング遅延" +"$$$/MIDI2LR/Options/dlgtitle=MIDI2LRオプションを設定" +"$$$/MIDI2LR/Options/pastesel=ペーストの選択" +"$$$/MIDI2LR/Preferences/cantload=環境設定を読み込むことができません。デフォルト設定を使用して。" +"$$$/MIDI2LR/Profiles/NotifyWhenChanged=Notify when profile changes" +"$$$/MIDI2LR/Shortcuts/Key=キー" \ No newline at end of file diff --git a/Source/LRPlugin/MIDI2LR.lrplugin/TranslatedStrings_ko.txt b/Source/LRPlugin/MIDI2LR.lrplugin/TranslatedStrings_ko.txt index b4b28dea3..31cb3145f 100644 --- a/Source/LRPlugin/MIDI2LR.lrplugin/TranslatedStrings_ko.txt +++ b/Source/LRPlugin/MIDI2LR.lrplugin/TranslatedStrings_ko.txt @@ -1,15 +1,4 @@ -"$$$/MIDI2LR/About/about=사용 방법 : MIDI 컨트롤러를 연결 MIDI2LR를 시작하고, 편집을 시작! 자세한 내용은 https://github.com/rsjaffe/MIDI2LR/wiki를 참조하십시오." -"$$$/MIDI2LR/Info/BuildFiles=Build files (development use only)" -"$$$/MIDI2LR/Keys/Shortcut=바로 가기 키" -"$$$/MIDI2LR/Limits/Limits=제한" -"$$$/MIDI2LR/Options/RevealAdjustedControls=조정 된 컨트롤 공개" -"$$$/MIDI2LR/Options/TrackingDelay=추적 지연" -"$$$/MIDI2LR/Options/dlgtitle=MIDI2LR 옵션을 설정합니다" -"$$$/MIDI2LR/Options/pastesel=붙여 넣기 선택" -"$$$/MIDI2LR/Preferences/cantload=기본 설정을로드 할 수 없습니다. 기본 설정을 사용." -"$$$/MIDI2LR/Profiles/NotifyWhenChanged=Notify when profile changes" -"$$$/MIDI2LR/Shortcuts/Key=키" -"$$$/Ag/Layout/Book/ModuleTitle=책" +"$$$/Ag/Layout/Book/ModuleTitle=책" "$$$/AgApplication/Menu/Window/SecondMonitor/Compare=비교" "$$$/AgApplication/Menu/Window/SecondMonitor/Grid=격자" "$$$/AgApplication/Menu/Window/SecondMonitor/LiveLoupe=실시간 확대경" @@ -222,6 +211,8 @@ "$$$/AgDevelop/Localized/Whites=흰색 계열" "$$$/AgDevelop/Menu/ProcessVersion=프로세스" "$$$/AgDevelop/Menu/Tools=도구(&T)" +"$$$/AgDevelop/Menu/View/ReferenceActiveLeftRight=참조 보기 - 왼쪽/오른쪽" +"$$$/AgDevelop/Menu/View/ReferenceActiveTopBottom=참조 보기 - 상단/하단" "$$$/AgDevelop/Panel/BasicAdjustments=기본" "$$$/AgDevelop/Panel/Calibration=보정" "$$$/AgDevelop/Panel/Detail=세부" @@ -295,7 +286,6 @@ "$$$/AgWPG/Dialogs/About/Title=정보" "$$$/AgWatermarking/Alignment/Left=왼쪽" "$$$/AgWatermarking/Alignment/Right=오른쪽" -"$$$/AgWorkspace/ExitApplication/Button/Exit=종료" "$$$/Application/Menu/Window/Modules=모듈:" "$$$/Bezel/RedoTitle=다시 실행" "$$$/CRaw/Style/Profile/AdobeStandard=Adobe 표준" @@ -338,4 +328,15 @@ "$$$/SmartCollection/Criteria/Heading/Develop=현상" "$$$/WFCatSearch/TermCategories/General=일반" "$$$/WPG/Help/Shortcuts/WebHeader=웹 바로 가기 키" -"$$$/Win/MenuDisplay/KeyboardShortcutElement/Shift=Shift" \ No newline at end of file +"$$$/Win/MenuDisplay/KeyboardShortcutElement/Shift=Shift" +"$$$/MIDI2LR/About/about=사용 방법 : MIDI 컨트롤러를 연결 MIDI2LR를 시작하고, 편집을 시작! 자세한 내용은 https://github.com/rsjaffe/MIDI2LR/wiki를 참조하십시오." +"$$$/MIDI2LR/Info/BuildFiles=Build files (development use only)" +"$$$/MIDI2LR/Keys/Shortcut=바로 가기 키" +"$$$/MIDI2LR/Limits/Limits=제한" +"$$$/MIDI2LR/Options/RevealAdjustedControls=조정 된 컨트롤 공개" +"$$$/MIDI2LR/Options/TrackingDelay=추적 지연" +"$$$/MIDI2LR/Options/dlgtitle=MIDI2LR 옵션을 설정합니다" +"$$$/MIDI2LR/Options/pastesel=붙여 넣기 선택" +"$$$/MIDI2LR/Preferences/cantload=기본 설정을로드 할 수 없습니다. 기본 설정을 사용." +"$$$/MIDI2LR/Profiles/NotifyWhenChanged=Notify when profile changes" +"$$$/MIDI2LR/Shortcuts/Key=키" \ No newline at end of file diff --git a/Source/LRPlugin/MIDI2LR.lrplugin/TranslatedStrings_nl.txt b/Source/LRPlugin/MIDI2LR.lrplugin/TranslatedStrings_nl.txt index 400f51ba9..159f4cb3e 100644 --- a/Source/LRPlugin/MIDI2LR.lrplugin/TranslatedStrings_nl.txt +++ b/Source/LRPlugin/MIDI2LR.lrplugin/TranslatedStrings_nl.txt @@ -1,15 +1,4 @@ -"$$$/MIDI2LR/About/about=Instructies; sluit een MIDI controller aan, start MIDI2LR, en begin met bewerken! Zie https://github.com/rsjaffe/MIDI2LR/wiki voor meer gegevens." -"$$$/MIDI2LR/Info/BuildFiles=Build bestanden (alleen voor developers)" -"$$$/MIDI2LR/Keys/Shortcut=Sneltoets" -"$$$/MIDI2LR/Limits/Limits=Limieten" -"$$$/MIDI2LR/Options/RevealAdjustedControls=Laat aangepaste instellingen zien" -"$$$/MIDI2LR/Options/TrackingDelay=Tracking vertraging" -"$$$/MIDI2LR/Options/dlgtitle=Stel de MIDI2LR opties in" -"$$$/MIDI2LR/Options/pastesel=Geselecteerde instellingen plakken" -"$$$/MIDI2LR/Preferences/cantload=Het is niet mogelijk om de voorkeursinstellingen te laden. De standaardinstellingen worden gebruikt." -"$$$/MIDI2LR/Profiles/NotifyWhenChanged=Waarschuwen wanneer profiel aangepast wordt." -"$$$/MIDI2LR/Shortcuts/Key=Toets" -"$$$/Ag/Layout/Book/ModuleTitle=Boek" +"$$$/Ag/Layout/Book/ModuleTitle=Boek" "$$$/AgApplication/Menu/Window/SecondMonitor/Compare=Vergelijken" "$$$/AgApplication/Menu/Window/SecondMonitor/Grid=Raster" "$$$/AgApplication/Menu/Window/SecondMonitor/LiveLoupe=Actieve loep" @@ -222,6 +211,8 @@ "$$$/AgDevelop/Localized/Whites=Witte tinten" "$$$/AgDevelop/Menu/ProcessVersion=Procesversie" "$$$/AgDevelop/Menu/Tools=&Gereedschappen" +"$$$/AgDevelop/Menu/View/ReferenceActiveLeftRight=Weergave Referentie - links/rechts" +"$$$/AgDevelop/Menu/View/ReferenceActiveTopBottom=Weergave Referentie - boven/onder" "$$$/AgDevelop/Panel/BasicAdjustments=Standaard" "$$$/AgDevelop/Panel/Calibration=Kalibratie" "$$$/AgDevelop/Panel/Detail=Details" @@ -295,7 +286,6 @@ "$$$/AgWPG/Dialogs/About/Title=Info" "$$$/AgWatermarking/Alignment/Left=Links" "$$$/AgWatermarking/Alignment/Right=Rechts" -"$$$/AgWorkspace/ExitApplication/Button/Exit=Afsluiten" "$$$/Application/Menu/Window/Modules=Modules:" "$$$/Bezel/RedoTitle=Opnieuw" "$$$/CRaw/Style/Profile/AdobeStandard=Adobe Standard" @@ -338,4 +328,15 @@ "$$$/SmartCollection/Criteria/Heading/Develop=Ontwikkelen" "$$$/WFCatSearch/TermCategories/General=Algemeen" "$$$/WPG/Help/Shortcuts/WebHeader=Sneltoetsen voor web" -"$$$/Win/MenuDisplay/KeyboardShortcutElement/Shift=Shift" \ No newline at end of file +"$$$/Win/MenuDisplay/KeyboardShortcutElement/Shift=Shift" +"$$$/MIDI2LR/About/about=Instructies; sluit een MIDI controller aan, start MIDI2LR, en begin met bewerken! Zie https://github.com/rsjaffe/MIDI2LR/wiki voor meer gegevens." +"$$$/MIDI2LR/Info/BuildFiles=Build bestanden (alleen voor developers)" +"$$$/MIDI2LR/Keys/Shortcut=Sneltoets" +"$$$/MIDI2LR/Limits/Limits=Limieten" +"$$$/MIDI2LR/Options/RevealAdjustedControls=Laat aangepaste instellingen zien" +"$$$/MIDI2LR/Options/TrackingDelay=Tracking vertraging" +"$$$/MIDI2LR/Options/dlgtitle=Stel de MIDI2LR opties in" +"$$$/MIDI2LR/Options/pastesel=Geselecteerde instellingen plakken" +"$$$/MIDI2LR/Preferences/cantload=Het is niet mogelijk om de voorkeursinstellingen te laden. De standaardinstellingen worden gebruikt." +"$$$/MIDI2LR/Profiles/NotifyWhenChanged=Waarschuwen wanneer profiel aangepast wordt." +"$$$/MIDI2LR/Shortcuts/Key=Toets" \ No newline at end of file diff --git a/Source/LRPlugin/MIDI2LR.lrplugin/TranslatedStrings_pt.txt b/Source/LRPlugin/MIDI2LR.lrplugin/TranslatedStrings_pt.txt index ae794658c..7e4d0d9ad 100644 --- a/Source/LRPlugin/MIDI2LR.lrplugin/TranslatedStrings_pt.txt +++ b/Source/LRPlugin/MIDI2LR.lrplugin/TranslatedStrings_pt.txt @@ -1,15 +1,4 @@ -"$$$/MIDI2LR/About/about=Como usar: conecte um controlador MIDI, inicialize o MIDI2LR e comece a editar! Veja mais detalhes em https://github.com/rsjaffe/MIDI2LR/wiki." -"$$$/MIDI2LR/Info/BuildFiles=Compilar arquivos (apenas para desenvolvedores)" -"$$$/MIDI2LR/Keys/Shortcut=Atalho" -"$$$/MIDI2LR/Limits/Limits=Limite" -"$$$/MIDI2LR/Options/RevealAdjustedControls=Mostrar controles ajustados" -"$$$/MIDI2LR/Options/TrackingDelay=Retardo de acompanhamento" -"$$$/MIDI2LR/Options/dlgtitle=Definir preferências do MIDI2LR" -"$$$/MIDI2LR/Options/pastesel=Colar seleções" -"$$$/MIDI2LR/Preferences/cantload=Não foi possível carregar as preferências. Usando as configurações padrão." -"$$$/MIDI2LR/Profiles/NotifyWhenChanged=Notificar quando o perfil for alterado" -"$$$/MIDI2LR/Shortcuts/Key=Tecla" -"$$$/Ag/Layout/Book/ModuleTitle=Livro" +"$$$/Ag/Layout/Book/ModuleTitle=Livro" "$$$/AgApplication/Menu/Window/SecondMonitor/Compare=Comparação" "$$$/AgApplication/Menu/Window/SecondMonitor/Grid=Grade" "$$$/AgApplication/Menu/Window/SecondMonitor/LiveLoupe=Lupa dinâmica" @@ -222,6 +211,8 @@ "$$$/AgDevelop/Localized/Whites=Brancos" "$$$/AgDevelop/Menu/ProcessVersion=Processo" "$$$/AgDevelop/Menu/Tools=Ferra&mentas" +"$$$/AgDevelop/Menu/View/ReferenceActiveLeftRight=Visualização da referência- esquerda/direita" +"$$$/AgDevelop/Menu/View/ReferenceActiveTopBottom=Visualização da referência- superior/inferior" "$$$/AgDevelop/Panel/BasicAdjustments=Básico" "$$$/AgDevelop/Panel/Calibration=Calibração" "$$$/AgDevelop/Panel/Detail=Detalhe" @@ -295,7 +286,6 @@ "$$$/AgWPG/Dialogs/About/Title=Sobre" "$$$/AgWatermarking/Alignment/Left=Esquerda" "$$$/AgWatermarking/Alignment/Right=Direita" -"$$$/AgWorkspace/ExitApplication/Button/Exit=Sair" "$$$/Application/Menu/Window/Modules=Módulos:" "$$$/Bezel/RedoTitle=Refazer" "$$$/CRaw/Style/Profile/AdobeStandard=Adobe Standard" @@ -338,4 +328,15 @@ "$$$/SmartCollection/Criteria/Heading/Develop=Revelação" "$$$/WFCatSearch/TermCategories/General=Geral" "$$$/WPG/Help/Shortcuts/WebHeader=Atalhos da Web" -"$$$/Win/MenuDisplay/KeyboardShortcutElement/Shift=Shift" \ No newline at end of file +"$$$/Win/MenuDisplay/KeyboardShortcutElement/Shift=Shift" +"$$$/MIDI2LR/About/about=Como usar: conecte um controlador MIDI, inicialize o MIDI2LR e comece a editar! Veja mais detalhes em https://github.com/rsjaffe/MIDI2LR/wiki." +"$$$/MIDI2LR/Info/BuildFiles=Compilar arquivos (apenas para desenvolvedores)" +"$$$/MIDI2LR/Keys/Shortcut=Atalho" +"$$$/MIDI2LR/Limits/Limits=Limite" +"$$$/MIDI2LR/Options/RevealAdjustedControls=Mostrar controles ajustados" +"$$$/MIDI2LR/Options/TrackingDelay=Retardo de acompanhamento" +"$$$/MIDI2LR/Options/dlgtitle=Definir preferências do MIDI2LR" +"$$$/MIDI2LR/Options/pastesel=Colar seleções" +"$$$/MIDI2LR/Profiles/NotifyWhenChanged=Notificar quando o perfil for alterado" +"$$$/MIDI2LR/Shortcuts/Key=Tecla" +"$$$/MIDI2LR/Preferences/cantload=Não foi possível carregar as preferências. Usando as configurações padrão." \ No newline at end of file diff --git a/Source/LRPlugin/MIDI2LR.lrplugin/TranslatedStrings_sv.txt b/Source/LRPlugin/MIDI2LR.lrplugin/TranslatedStrings_sv.txt index 7da62d470..f8e24bbf6 100644 --- a/Source/LRPlugin/MIDI2LR.lrplugin/TranslatedStrings_sv.txt +++ b/Source/LRPlugin/MIDI2LR.lrplugin/TranslatedStrings_sv.txt @@ -1,15 +1,4 @@ -"$$$/MIDI2LR/About/about=Hur man använder: ansluta en MIDI-controller, starta MIDI2LR, och börja redigera! Se https://github.com/rsjaffe/MIDI2LR/wiki för mer information." -"$$$/MIDI2LR/Info/BuildFiles=Build files (development use only)" -"$$$/MIDI2LR/Keys/Shortcut=Kortkommando" -"$$$/MIDI2LR/Limits/Limits=Gränsvärden" -"$$$/MIDI2LR/Options/RevealAdjustedControls=Avslöjar justerade kontroller" -"$$$/MIDI2LR/Options/TrackingDelay=Spårning fördröjning" -"$$$/MIDI2LR/Options/dlgtitle=Ställa MIDI2LR optioner" -"$$$/MIDI2LR/Options/pastesel=Klistra selektioner" -"$$$/MIDI2LR/Preferences/cantload=Det går inte att läsa in inställningarna. Med standardinställningar ." -"$$$/MIDI2LR/Profiles/NotifyWhenChanged=Notify when profile changes" -"$$$/MIDI2LR/Shortcuts/Key=Nyckel" -"$$$/Ag/Layout/Book/ModuleTitle=Bok" +"$$$/Ag/Layout/Book/ModuleTitle=Bok" "$$$/AgApplication/Menu/Window/SecondMonitor/Compare=Jämför" "$$$/AgApplication/Menu/Window/SecondMonitor/Grid=Stödraster" "$$$/AgApplication/Menu/Window/SecondMonitor/LiveLoupe=Direktlupp" @@ -222,6 +211,8 @@ "$$$/AgDevelop/Localized/Whites=Vita" "$$$/AgDevelop/Menu/ProcessVersion=Process" "$$$/AgDevelop/Menu/Tools=V&erktyg" +"$$$/AgDevelop/Menu/View/ReferenceActiveLeftRight=Referensvy - vänster/höger" +"$$$/AgDevelop/Menu/View/ReferenceActiveTopBottom=Referensvy - överkant/underkant" "$$$/AgDevelop/Panel/BasicAdjustments=Grundläggande" "$$$/AgDevelop/Panel/Calibration=Kalibrering" "$$$/AgDevelop/Panel/Detail=Detalj" @@ -295,7 +286,6 @@ "$$$/AgWPG/Dialogs/About/Title=Om" "$$$/AgWatermarking/Alignment/Left=Vänster" "$$$/AgWatermarking/Alignment/Right=Höger" -"$$$/AgWorkspace/ExitApplication/Button/Exit=Avsluta" "$$$/Application/Menu/Window/Modules=Moduler:" "$$$/Bezel/RedoTitle=Gör om" "$$$/CRaw/Style/Profile/AdobeStandard=Adobe Standard" @@ -338,4 +328,15 @@ "$$$/SmartCollection/Criteria/Heading/Develop=Framkalla" "$$$/WFCatSearch/TermCategories/General=Allmänt" "$$$/WPG/Help/Shortcuts/WebHeader=Webbkortkommandon" -"$$$/Win/MenuDisplay/KeyboardShortcutElement/Shift=Skift" \ No newline at end of file +"$$$/Win/MenuDisplay/KeyboardShortcutElement/Shift=Skift" +"$$$/MIDI2LR/About/about=Hur man använder: ansluta en MIDI-controller, starta MIDI2LR, och börja redigera! Se https://github.com/rsjaffe/MIDI2LR/wiki för mer information." +"$$$/MIDI2LR/Info/BuildFiles=Build files (development use only)" +"$$$/MIDI2LR/Keys/Shortcut=Kortkommando" +"$$$/MIDI2LR/Limits/Limits=Gränsvärden" +"$$$/MIDI2LR/Options/RevealAdjustedControls=Avslöjar justerade kontroller" +"$$$/MIDI2LR/Options/TrackingDelay=Spårning fördröjning" +"$$$/MIDI2LR/Options/dlgtitle=Ställa MIDI2LR optioner" +"$$$/MIDI2LR/Options/pastesel=Klistra selektioner" +"$$$/MIDI2LR/Preferences/cantload=Det går inte att läsa in inställningarna. Med standardinställningar ." +"$$$/MIDI2LR/Profiles/NotifyWhenChanged=Notify when profile changes" +"$$$/MIDI2LR/Shortcuts/Key=Nyckel" \ No newline at end of file diff --git a/Source/LRPlugin/MIDI2LR.lrplugin/TranslatedStrings_zn_cn.txt b/Source/LRPlugin/MIDI2LR.lrplugin/TranslatedStrings_zn_cn.txt index ff4fa1118..cd25d295b 100644 --- a/Source/LRPlugin/MIDI2LR.lrplugin/TranslatedStrings_zn_cn.txt +++ b/Source/LRPlugin/MIDI2LR.lrplugin/TranslatedStrings_zn_cn.txt @@ -1,15 +1,4 @@ -"$$$/MIDI2LR/About/about=使用方法:连接MIDI控制器,启动MIDI2LR,并开始编辑!见https://github.com/rsjaffe/MIDI2LR/wiki了解详情。" -"$$$/MIDI2LR/Info/BuildFiles=Build files (development use only)" -"$$$/MIDI2LR/Keys/Shortcut=图快捷键" -"$$$/MIDI2LR/Limits/Limits=范围" -"$$$/MIDI2LR/Options/RevealAdjustedControls=顯示調整的控制" -"$$$/MIDI2LR/Options/TrackingDelay=跟踪延遲" -"$$$/MIDI2LR/Options/dlgtitle=设置MIDI2LR选项" -"$$$/MIDI2LR/Options/pastesel=粘贴选项" -"$$$/MIDI2LR/Preferences/cantload=无法加载偏好。使用默认设置。" -"$$$/MIDI2LR/Profiles/NotifyWhenChanged=Notify when profile changes" -"$$$/MIDI2LR/Shortcuts/Key=鍵" -"$$$/Ag/Layout/Book/ModuleTitle=画册" +"$$$/Ag/Layout/Book/ModuleTitle=画册" "$$$/AgApplication/Menu/Window/SecondMonitor/Compare=比较" "$$$/AgApplication/Menu/Window/SecondMonitor/Grid=网格" "$$$/AgApplication/Menu/Window/SecondMonitor/LiveLoupe=互动放大" @@ -222,6 +211,8 @@ "$$$/AgDevelop/Localized/Whites=白色色阶" "$$$/AgDevelop/Menu/ProcessVersion=处理版本" "$$$/AgDevelop/Menu/Tools=工具(&T)" +"$$$/AgDevelop/Menu/View/ReferenceActiveLeftRight=参考视图 - 左/右" +"$$$/AgDevelop/Menu/View/ReferenceActiveTopBottom=参考视图 - 上/下" "$$$/AgDevelop/Panel/BasicAdjustments=基本" "$$$/AgDevelop/Panel/Calibration=校准" "$$$/AgDevelop/Panel/Detail=细节" @@ -295,7 +286,6 @@ "$$$/AgWPG/Dialogs/About/Title=关于" "$$$/AgWatermarking/Alignment/Left=左对齐" "$$$/AgWatermarking/Alignment/Right=右对齐" -"$$$/AgWorkspace/ExitApplication/Button/Exit=退出" "$$$/Application/Menu/Window/Modules=模块:" "$$$/Bezel/RedoTitle=重做" "$$$/CRaw/Style/Profile/AdobeStandard=Adobe Standard" @@ -338,4 +328,15 @@ "$$$/SmartCollection/Criteria/Heading/Develop=修改照片" "$$$/WFCatSearch/TermCategories/General=常规" "$$$/WPG/Help/Shortcuts/WebHeader=Web 快捷键" -"$$$/Win/MenuDisplay/KeyboardShortcutElement/Shift=Shift" \ No newline at end of file +"$$$/Win/MenuDisplay/KeyboardShortcutElement/Shift=Shift" +"$$$/MIDI2LR/About/about=使用方法:连接MIDI控制器,启动MIDI2LR,并开始编辑!见https://github.com/rsjaffe/MIDI2LR/wiki了解详情。" +"$$$/MIDI2LR/Info/BuildFiles=Build files (development use only)" +"$$$/MIDI2LR/Keys/Shortcut=图快捷键" +"$$$/MIDI2LR/Limits/Limits=范围" +"$$$/MIDI2LR/Options/RevealAdjustedControls=顯示調整的控制" +"$$$/MIDI2LR/Options/TrackingDelay=跟踪延遲" +"$$$/MIDI2LR/Options/dlgtitle=设置MIDI2LR选项" +"$$$/MIDI2LR/Options/pastesel=粘贴选项" +"$$$/MIDI2LR/Preferences/cantload=无法加载偏好。使用默认设置。" +"$$$/MIDI2LR/Profiles/NotifyWhenChanged=Notify when profile changes" +"$$$/MIDI2LR/Shortcuts/Key=鍵" \ No newline at end of file diff --git a/Source/LRPlugin/MIDI2LR.lrplugin/TranslatedStrings_zn_tw.txt b/Source/LRPlugin/MIDI2LR.lrplugin/TranslatedStrings_zn_tw.txt index 5b147cfac..a324cff6e 100644 --- a/Source/LRPlugin/MIDI2LR.lrplugin/TranslatedStrings_zn_tw.txt +++ b/Source/LRPlugin/MIDI2LR.lrplugin/TranslatedStrings_zn_tw.txt @@ -1,15 +1,4 @@ -"$$$/MIDI2LR/About/about=使用方法:連接MIDI控制器,啟動MIDI2LR,並開始編輯!見https://github.com/rsjaffe/MIDI2LR/wiki了解詳情。" -"$$$/MIDI2LR/Info/BuildFiles=Build files (development use only)" -"$$$/MIDI2LR/Keys/Shortcut=快速鍵" -"$$$/MIDI2LR/Limits/Limits=範圍" -"$$$/MIDI2LR/Options/RevealAdjustedControls=显示调整的控制" -"$$$/MIDI2LR/Options/TrackingDelay=跟踪延迟" -"$$$/MIDI2LR/Options/dlgtitle=設置MIDI2LR選項" -"$$$/MIDI2LR/Options/pastesel=粘貼選項" -"$$$/MIDI2LR/Preferences/cantload=無法加載偏好。使用默認設置。" -"$$$/MIDI2LR/Profiles/NotifyWhenChanged=Notify when profile changes" -"$$$/MIDI2LR/Shortcuts/Key=键" -"$$$/Ag/Layout/Book/ModuleTitle=書冊" +"$$$/Ag/Layout/Book/ModuleTitle=書冊" "$$$/AgApplication/Menu/Window/SecondMonitor/Compare=比較" "$$$/AgApplication/Menu/Window/SecondMonitor/Grid=格點" "$$$/AgApplication/Menu/Window/SecondMonitor/LiveLoupe=動態放大" @@ -222,6 +211,8 @@ "$$$/AgDevelop/Localized/Whites=白色" "$$$/AgDevelop/Menu/ProcessVersion=處理版本" "$$$/AgDevelop/Menu/Tools=工具(&T)" +"$$$/AgDevelop/Menu/View/ReferenceActiveLeftRight=參考檢視 - 左/右" +"$$$/AgDevelop/Menu/View/ReferenceActiveTopBottom=參考檢視 - 上/下" "$$$/AgDevelop/Panel/BasicAdjustments=基本" "$$$/AgDevelop/Panel/Calibration=校正" "$$$/AgDevelop/Panel/Detail=細節" @@ -295,7 +286,6 @@ "$$$/AgWPG/Dialogs/About/Title=關於" "$$$/AgWatermarking/Alignment/Left=左側" "$$$/AgWatermarking/Alignment/Right=右側" -"$$$/AgWorkspace/ExitApplication/Button/Exit=結束" "$$$/Application/Menu/Window/Modules=模組:" "$$$/Bezel/RedoTitle=重做" "$$$/CRaw/Style/Profile/AdobeStandard=Adobe 標準" @@ -338,4 +328,15 @@ "$$$/SmartCollection/Criteria/Heading/Develop=編輯相片" "$$$/WFCatSearch/TermCategories/General=一般" "$$$/WPG/Help/Shortcuts/WebHeader=Web 快速鍵" -"$$$/Win/MenuDisplay/KeyboardShortcutElement/Shift=Shift" \ No newline at end of file +"$$$/Win/MenuDisplay/KeyboardShortcutElement/Shift=Shift" +"$$$/MIDI2LR/About/about=使用方法:連接MIDI控制器,啟動MIDI2LR,並開始編輯!見https://github.com/rsjaffe/MIDI2LR/wiki了解詳情。" +"$$$/MIDI2LR/Info/BuildFiles=Build files (development use only)" +"$$$/MIDI2LR/Keys/Shortcut=快速鍵" +"$$$/MIDI2LR/Limits/Limits=範圍" +"$$$/MIDI2LR/Options/RevealAdjustedControls=显示调整的控制" +"$$$/MIDI2LR/Options/TrackingDelay=跟踪延迟" +"$$$/MIDI2LR/Options/dlgtitle=設置MIDI2LR選項" +"$$$/MIDI2LR/Options/pastesel=粘貼選項" +"$$$/MIDI2LR/Preferences/cantload=無法加載偏好。使用默認設置。" +"$$$/MIDI2LR/Profiles/NotifyWhenChanged=Notify when profile changes" +"$$$/MIDI2LR/Shortcuts/Key=键" \ No newline at end of file diff --git a/Source/LRPlugin/MIDI2LR.lrplugin/Virtual.lua b/Source/LRPlugin/MIDI2LR.lrplugin/Virtual.lua new file mode 100644 index 000000000..bd2fdd2ae --- /dev/null +++ b/Source/LRPlugin/MIDI2LR.lrplugin/Virtual.lua @@ -0,0 +1,67 @@ +--[[---------------------------------------------------------------------------- + +Virtual.lua + +Defines virtual commands. + +This file is part of MIDI2LR. Copyright 2015-2016 by Rory Jaffe. + +MIDI2LR is free software: you can redistribute it and/or modify it under the +terms of the GNU General Public License as published by the Free Software +Foundation, either version 3 of the License, or (at your option) any later version. + +MIDI2LR is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +MIDI2LR. If not, see . +------------------------------------------------------------------------------]] + +local LrDevelopController = import 'LrDevelopController' +local LrDialogs = import 'LrDialogs' +local LrStringUtils = import 'LrStringUtils' + +local ParamList = require 'ParamList' +local CU = require 'ClientUtilities' +local Ut = require 'Utilities' + +local BUTTON_ON = 0.40 -- See Client.lua + +local SaturationAdjustments = { + "SaturationAdjustmentRed", + "SaturationAdjustmentOrange", + "SaturationAdjustmentYellow", + "SaturationAdjustmentGreen", + "SaturationAdjustmentAqua", + "SaturationAdjustmentBlue", + "SaturationAdjustmentPurple", + "SaturationAdjustmentMagenta" +} + +return { + AllSaturationAdjustment = function(value, UpdateParam) + local midi_value = tonumber(value) + for _, param in ipairs(SaturationAdjustments) do + UpdateParam(param, midi_value, true) + end + if ProgramPreferences.ClientShowBezelOnChange then + local value = CU.MIDIValueToLRValue(param, midi_value) + local bezelname = ParamList.ParamDisplay["AllSaturationAdjustment"] or "AllSaturationAdjustment" + LrDialogs.showBezel(bezelname .. ' ' .. LrStringUtils.numberToStringWithSeparators(value, 0)) + end + return "AllSaturationAdjustment" + end, + ResetAllSaturationAdjustment = function(value) + if (tonumber(value) > BUTTON_ON) then + end + for i, param in ipairs(SaturationAdjustments) do + LrDevelopController.resetToDefault(param) + if i == 8 and ProgramPreferences.ClientShowBezelOnChange then + local bezelname = ParamList.ParamDisplay["AllSaturationAdjustment"] or "AllSaturationAdjustment" + LrDialogs.showBezel(bezelname .. ' ' .. LrStringUtils.numberToStringWithSeparators(0, 0)) + end + end + MIDI2LR.SERVER:send(string.format('%s %g\n', "AllSaturationAdjustment", CU.LRValueToMIDIValue("SaturationAdjustmentRed"))) + end +} diff --git a/Source/LR_IPC_In.cpp b/Source/LR_IPC_In.cpp index 9c9ab29bc..2e8014add 100644 --- a/Source/LR_IPC_In.cpp +++ b/Source/LR_IPC_In.cpp @@ -105,7 +105,7 @@ void LR_IPC_IN::run() case 1: if (size_read == kBufferSize) throw std::out_of_range("Buffer overflow in LR_IPC_IN"); - auto read = juce::StreamingSocket::read(line + size_read, 1, false); + const auto read = juce::StreamingSocket::read(line + size_read, 1, false); if(read) { size_read += read; } else { diff --git a/Source/LR_IPC_Out.cpp b/Source/LR_IPC_Out.cpp index 8946099d0..dbb0709be 100644 --- a/Source/LR_IPC_Out.cpp +++ b/Source/LR_IPC_Out.cpp @@ -20,7 +20,7 @@ You should have received a copy of the GNU General Public License along with MIDI2LR. If not, see . ============================================================================== */ -#include "LR_IPC_OUT.h" +#include "LR_IPC_Out.h" #include "CommandMap.h" #include "ControlsModel.h" #include "LRCommands.h" @@ -48,7 +48,7 @@ LR_IPC_OUT::~LR_IPC_OUT() } void LR_IPC_OUT::Init( - std::shared_ptr& midi_processor) + const std::shared_ptr& midi_processor) { if (midi_processor) { midi_processor->addCallback(this, &LR_IPC_OUT::MIDIcmdCallback); @@ -78,7 +78,7 @@ void LR_IPC_OUT::MIDIcmdCallback(RSJ::MidiMessage mm) return; } auto command_to_send = command_map_->getCommandforMessage(message); - double computed_value = controls_model_->ControllerToPlugin(mm.message_type_byte, mm.channel, + const double computed_value = controls_model_->ControllerToPlugin(mm.message_type_byte, mm.channel, mm.number, mm.value); command_to_send += ' ' + std::to_string(computed_value) + '\n'; { diff --git a/Source/LR_IPC_Out.h b/Source/LR_IPC_Out.h index 95152e917..bbacc3e01 100644 --- a/Source/LR_IPC_Out.h +++ b/Source/LR_IPC_Out.h @@ -2,7 +2,7 @@ /* ============================================================================== - LR_IPC_OUT.h + LR_IPC_Out.h This file is part of MIDI2LR. Copyright 2015-2017 by Rory Jaffe. @@ -42,7 +42,7 @@ class LR_IPC_OUT final: public: LR_IPC_OUT(ControlsModel* c_model, CommandMap const * const mapCommand); virtual ~LR_IPC_OUT(); - void Init(std::shared_ptr& midiProcessor); + void Init(const std::shared_ptr& midiProcessor); template void addCallback(T* object, void(T::*mf)(bool)) { diff --git a/Source/Main.cpp b/Source/Main.cpp index e8e5f7b7a..335a94f99 100644 --- a/Source/Main.cpp +++ b/Source/Main.cpp @@ -38,8 +38,8 @@ MIDI2LR. If not, see . #include "CCoptions.h" #include "CommandMap.h" #include "ControlsModel.h" -#include "LR_IPC_IN.h" -#include "LR_IPC_OUT.h" +#include "LR_IPC_In.h" +#include "LR_IPC_Out.h" #include "MainComponent.h" #include "MainWindow.h" #include "MIDIProcessor.h" diff --git a/Source/ProfileManager.cpp b/Source/ProfileManager.cpp index caeac1220..da6bc50df 100644 --- a/Source/ProfileManager.cpp +++ b/Source/ProfileManager.cpp @@ -25,18 +25,18 @@ MIDI2LR. If not, see . #include #include "CommandMap.h" #include "ControlsModel.h" -#include "LR_IPC_OUT.h" +#include "LR_IPC_Out.h" #include "LRCommands.h" #include "MIDIProcessor.h" #include "MidiUtilities.h" using namespace std::literals::string_literals; ProfileManager::ProfileManager(ControlsModel* c_model, CommandMap* const cmap) noexcept: -controls_model_{c_model}, command_map_{cmap} +command_map_{cmap}, controls_model_{c_model} {} void ProfileManager::Init(std::weak_ptr&& out, - std::shared_ptr& midiProcessor) + const std::shared_ptr& midiProcessor) { //copy the pointers lr_ipc_out_ = std::move(out); diff --git a/Source/ProfileManager.h b/Source/ProfileManager.h index ee6a219a2..a14b913eb 100644 --- a/Source/ProfileManager.h +++ b/Source/ProfileManager.h @@ -42,7 +42,7 @@ class ProfileManager final: private juce::AsyncUpdater { ProfileManager(ProfileManager const&) = delete; void operator=(ProfileManager const&) = delete; void Init(std::weak_ptr&& out, - std::shared_ptr& midi_processor); + const std::shared_ptr& midi_processor); template void addCallback(T* object, void(T::*mf)(juce::XmlElement*, const juce::String&)) { diff --git a/Source/SendKeys.cpp b/Source/SendKeys.cpp index 78a503e65..97f87ad5c 100644 --- a/Source/SendKeys.cpp +++ b/Source/SendKeys.cpp @@ -36,103 +36,113 @@ MIDI2LR. If not, see . #include #include #include -pid_t GetPID() -{ - pid_t pids[1024]; - std::string LR{"Lightroom"}; - int numberOfProcesses = proc_listpids(PROC_ALL_PIDS, 0, NULL, 0); - proc_listpids(PROC_ALL_PIDS, 0, pids, sizeof(pids)); - for (int i = 0; i < numberOfProcesses; ++i) { - if (pids[i] == 0) { - continue; - } - char name[1024]; - proc_name(pids[i], name, sizeof(name)); - if (LR.compare(name) == 0) { - return pids[i]; +#endif +namespace { +#ifndef _WIN32 + + pid_t GetPID() + { + std::string LR{"Adobe Lightroom.app/Contents/MacOS/Adobe Lightroom"}; + int numberOfProcesses = proc_listpids(PROC_ALL_PIDS, 0, NULL, 0); + pid_t pids[numberOfProcesses]; + proc_listpids(PROC_ALL_PIDS, 0, pids, sizeof(pids)); + char pathBuffer[PROC_PIDPATHINFO_MAXSIZE]; + std::size_t found; + for (int i = 0; i < numberOfProcesses; ++i) { + if (pids[i] == 0) { + continue; + } + bzero(pathBuffer, PROC_PIDPATHINFO_MAXSIZE); + proc_pidpath(pids[i], pathBuffer, sizeof(pathBuffer)); + if (strlen(pathBuffer) > 0) { + found = std::string(pathBuffer).find(LR); + if (found != std::string::npos) { + return pids[i]; + } + } } + return 0; } - return 0; -} -/* From: https://stackoverflow.com/questions/1918841/how-to-convert-ascii-character-to-cgkeycode/1971027#1971027 - * - * Returns string representation of key, if it is printable. - * Ownership follows the Create Rule; that is, it is the caller's - * responsibility to release the returned object. */ -CFStringRef createStringForKey(CGKeyCode keyCode) -{ - TISInputSourceRef currentKeyboard = TISCopyCurrentKeyboardInputSource(); - CFDataRef layoutData = (CFDataRef)TISGetInputSourceProperty(currentKeyboard, kTISPropertyUnicodeKeyLayoutData); - const UCKeyboardLayout *keyboardLayout = - (const UCKeyboardLayout *)CFDataGetBytePtr(layoutData); - - UInt32 keysDown = 0; - UniChar chars[4]; - UniCharCount realLength; - - UCKeyTranslate(keyboardLayout, - keyCode, - kUCKeyActionDisplay, - 0, - LMGetKbdType(), - kUCKeyTranslateNoDeadKeysBit, - &keysDown, - sizeof(chars) / sizeof(chars[0]), - &realLength, - chars); - CFRelease(currentKeyboard); - - return CFStringCreateWithCharacters(kCFAllocatorDefault, chars, 1); -} + /* From: https://stackoverflow.com/questions/1918841/how-to-convert-ascii-character-to-cgkeycode/1971027#1971027 + * + * Returns string representation of key, if it is printable. + * Ownership follows the Create Rule; that is, it is the caller's + * responsibility to release the returned object. */ + CFStringRef createStringForKey(CGKeyCode keyCode) + { + TISInputSourceRef currentKeyboard = TISCopyCurrentKeyboardInputSource(); + CFDataRef layoutData = (CFDataRef)TISGetInputSourceProperty(currentKeyboard, kTISPropertyUnicodeKeyLayoutData); + const UCKeyboardLayout *keyboardLayout = + (const UCKeyboardLayout *)CFDataGetBytePtr(layoutData); + + UInt32 keysDown = 0; + UniChar chars[4]; + UniCharCount realLength; + + UCKeyTranslate(keyboardLayout, + keyCode, + kUCKeyActionDisplay, + 0, + LMGetKbdType(), + kUCKeyTranslateNoDeadKeysBit, + &keysDown, + sizeof(chars) / sizeof(chars[0]), + &realLength, + chars); + CFRelease(currentKeyboard); + + return CFStringCreateWithCharacters(kCFAllocatorDefault, chars, 1); + } -/* From: https://stackoverflow.com/questions/1918841/how-to-convert-ascii-character-to-cgkeycode/1971027#1971027 - * - * Returns key code for given character via the above function, or UINT16_MAX - * on error. */ -CGKeyCode keyCodeForChar(const char c) -{ - static CFMutableDictionaryRef charToCodeDict = NULL; - CGKeyCode code; - UniChar character = c; - CFStringRef charStr = NULL; - - /* Generate table of keycodes and characters. */ - if (charToCodeDict == NULL) { - size_t i; - charToCodeDict = CFDictionaryCreateMutable(kCFAllocatorDefault, - 128, - &kCFCopyStringDictionaryKeyCallBacks, - NULL); - if (charToCodeDict == NULL) return UINT16_MAX; - - /* Loop through every keycode (0 - 127) to find its current mapping. */ - for (i = 0; i < 128; ++i) { - CFStringRef string = createStringForKey((CGKeyCode)i); - if (string != NULL) { - CFDictionaryAddValue(charToCodeDict, string, (const void *)i); - CFRelease(string); + /* From: https://stackoverflow.com/questions/1918841/how-to-convert-ascii-character-to-cgkeycode/1971027#1971027 + * + * Returns key code for given character via the above function, or UINT16_MAX + * on error. */ + CGKeyCode keyCodeForChar(const char c) + { + static CFMutableDictionaryRef charToCodeDict = NULL; + CGKeyCode code; + UniChar character = c; + CFStringRef charStr = NULL; + + /* Generate table of keycodes and characters. */ + if (charToCodeDict == NULL) { + size_t i; + charToCodeDict = CFDictionaryCreateMutable(kCFAllocatorDefault, + 128, + &kCFCopyStringDictionaryKeyCallBacks, + NULL); + if (charToCodeDict == NULL) return UINT16_MAX; + + /* Loop through every keycode (0 - 127) to find its current mapping. */ + for (i = 0; i < 128; ++i) { + CFStringRef string = createStringForKey((CGKeyCode)i); + if (string != NULL) { + CFDictionaryAddValue(charToCodeDict, string, (const void *)i); + CFRelease(string); + } } } - } - charStr = CFStringCreateWithCharacters(kCFAllocatorDefault, &character, 1); + charStr = CFStringCreateWithCharacters(kCFAllocatorDefault, &character, 1); - /* Our values may be NULL (0), so we need to use this function. */ - if (!CFDictionaryGetValueIfPresent(charToCodeDict, charStr, - (const void **)&code)) { - code = UINT16_MAX; + /* Our values may be NULL (0), so we need to use this function. */ + if (!CFDictionaryGetValueIfPresent(charToCodeDict, charStr, + (const void **)&code)) { + code = UINT16_MAX; + } + + CFRelease(charStr); + return code; } - CFRelease(charStr); - return code; -} #endif -namespace { + std::string to_lower(const std::string& in) { auto s = in; - std::transform(s.begin(), s.end(), s.begin(), std::tolower); + std::transform(s.begin(), s.end(), s.begin(), ::tolower); return s; } @@ -299,7 +309,7 @@ void RSJ::SendKeyDownUp(const std::string& key, const bool alt_opt, } //construct virtual keystroke sequence - std::vector strokes{vk}; // start with actual key, then mods + std::vector strokes{vk}; // start with actual key, then mods if (shift || (vk_modifiers & 0x1)) { strokes.push_back(VK_SHIFT); } @@ -329,36 +339,42 @@ void RSJ::SendKeyDownUp(const std::string& key, const bool alt_opt, //send key down strokes std::lock_guard lock(mutex_sending_); for (auto it = strokes.crbegin(); it != strokes.crend(); ++it) { - ip.ki.wVk = static_cast(*it); + ip.ki.wVk = *it; SendInput(1, &ip, size_ip); } //send key up strokes ip.ki.dwFlags = KEYEVENTF_KEYUP; // KEYEVENTF_KEYUP for key release for (const auto it : strokes) { - ip.ki.wVk = static_cast(it); + ip.ki.wVk = it; SendInput(1, &ip, size_ip); } #else - const CGEventSourceRef source = - CGEventSourceCreate(kCGEventSourceStateHIDSystemState); - - ProcessSerialNumber psn; - GetFrontProcess(&psn); //first deprecated in macOS 10.9, but no good replacement yet + static ProcessSerialNumber psn{0}; + static pid_t lr_pid{0}; + if (lr_pid == 0) { + lr_pid = GetPID(); + if (lr_pid) { + GetProcessForPID(lr_pid, &psn); //first deprecated in macOS 10.9, but no good replacement yet + } + else { + lr_pid = -1; // cannot find LR pid, to try to find the forground process + GetFrontProcess(&psn); //first deprecated in macOS 10.9, but no good replacement yet + } + } CGEventRef d; CGEventRef u; - uint64_t flags = 0; if (in_keymap) { const auto vk = mapped_key->second; - d = CGEventCreateKeyboardEvent(source, vk, true); - u = CGEventCreateKeyboardEvent(source, vk, false); + d = CGEventCreateKeyboardEvent(NULL, vk, true); + u = CGEventCreateKeyboardEvent(NULL, vk, false); } else { const CGKeyCode keyCode = keyCodeForChar(key[0]); - d = CGEventCreateKeyboardEvent(source, keyCode, true); - u = CGEventCreateKeyboardEvent(source, keyCode, false); + d = CGEventCreateKeyboardEvent(NULL, keyCode, true); + u = CGEventCreateKeyboardEvent(NULL, keyCode, false); flags = CGEventGetFlags(d); //in case KeyCode has associated flag } @@ -378,6 +394,5 @@ void RSJ::SendKeyDownUp(const std::string& key, const bool alt_opt, CFRelease(d); CFRelease(u); - CFRelease(source); #endif } \ No newline at end of file diff --git a/Source/SettingsManager.cpp b/Source/SettingsManager.cpp index 5f2cdfbe0..acc57b303 100644 --- a/Source/SettingsManager.cpp +++ b/Source/SettingsManager.cpp @@ -23,7 +23,7 @@ MIDI2LR. If not, see . #include "SettingsManager.h" #include #include -#include "LR_IPC_OUT.h" +#include "LR_IPC_Out.h" #include "ProfileManager.h" using namespace std::literals::string_literals; diff --git a/Source/VersionChecker.cpp b/Source/VersionChecker.cpp index dbef6d9ea..5bf6e7035 100644 --- a/Source/VersionChecker.cpp +++ b/Source/VersionChecker.cpp @@ -61,7 +61,7 @@ void VersionChecker::handleAsyncUpdate() const juce::URL download_url{"https://github.com/rsjaffe/MIDI2LR/releases/latest"}; dialog_options.content.setOwned(new juce::HyperlinkButton{version_string, download_url}); dialog_options.content->setSize(300, 100); - (static_cast(dialog_options.content.get()))-> + (dynamic_cast(dialog_options.content.get()))-> setFont(juce::Font{18.f}, false); dialog_options.escapeKeyTriggersCloseButton = true; dialog_.reset(dialog_options.create()); diff --git a/cereal/access.hpp b/cereal/access.hpp index 407ffcc83..63c1f74af 100644 --- a/cereal/access.hpp +++ b/cereal/access.hpp @@ -34,8 +34,8 @@ #include #include -#include -#include +#include "cereal/macros.hpp" +#include "cereal/details/helpers.hpp" namespace cereal { diff --git a/cereal/archives/adapters.hpp b/cereal/archives/adapters.hpp index d9558adeb..0191e3239 100644 --- a/cereal/archives/adapters.hpp +++ b/cereal/archives/adapters.hpp @@ -30,7 +30,7 @@ #ifndef CEREAL_ARCHIVES_ADAPTERS_HPP_ #define CEREAL_ARCHIVES_ADAPTERS_HPP_ -#include +#include "cereal/details/helpers.hpp" #include namespace cereal diff --git a/cereal/archives/binary.hpp b/cereal/archives/binary.hpp index 74342b3a7..7e0032268 100644 --- a/cereal/archives/binary.hpp +++ b/cereal/archives/binary.hpp @@ -29,7 +29,7 @@ #ifndef CEREAL_ARCHIVES_BINARY_HPP_ #define CEREAL_ARCHIVES_BINARY_HPP_ -#include +#include "cereal/cereal.hpp" #include namespace cereal diff --git a/cereal/archives/json.hpp b/cereal/archives/json.hpp index 3eb95db5f..9d57434ab 100644 --- a/cereal/archives/json.hpp +++ b/cereal/archives/json.hpp @@ -29,8 +29,8 @@ #ifndef CEREAL_ARCHIVES_JSON_HPP_ #define CEREAL_ARCHIVES_JSON_HPP_ -#include -#include +#include "cereal/cereal.hpp" +#include "cereal/details/util.hpp" namespace cereal { @@ -50,11 +50,11 @@ namespace cereal #define CEREAL_RAPIDJSON_WRITE_DEFAULT_FLAGS kWriteNanAndInfFlag #define CEREAL_RAPIDJSON_PARSE_DEFAULT_FLAGS kParseFullPrecisionFlag | kParseNanAndInfFlag -#include -#include -#include -#include -#include +#include "cereal/external/rapidjson/prettywriter.h" +#include "cereal/external/rapidjson/ostreamwrapper.h" +#include "cereal/external/rapidjson/istreamwrapper.h" +#include "cereal/external/rapidjson/document.h" +#include "cereal/external/base64.hpp" #include #include @@ -96,8 +96,8 @@ namespace cereal { enum class NodeType { StartObject, InObject, StartArray, InArray }; - using WriteStream = rapidjson::OStreamWrapper; - using JSONWriter = rapidjson::PrettyWriter; + using WriteStream = CEREAL_RAPIDJSON_NAMESPACE::OStreamWrapper; + using JSONWriter = CEREAL_RAPIDJSON_NAMESPACE::PrettyWriter; public: /*! @name Common Functionality @@ -242,7 +242,7 @@ namespace cereal //! Saves a double to the current node void saveValue(double d) { itsWriter.Double(d); } //! Saves a string to the current node - void saveValue(std::string const & s) { itsWriter.String(s.c_str(), static_cast( s.size() )); } + void saveValue(std::string const & s) { itsWriter.String(s.c_str(), static_cast( s.size() )); } //! Saves a const char * to the current node void saveValue(char const * s) { itsWriter.String(s); } //! Saves a nullptr to the current node @@ -406,11 +406,11 @@ namespace cereal class JSONInputArchive : public InputArchive, public traits::TextArchive { private: - using ReadStream = rapidjson::IStreamWrapper; - typedef rapidjson::GenericValue> JSONValue; + using ReadStream = CEREAL_RAPIDJSON_NAMESPACE::IStreamWrapper; + typedef CEREAL_RAPIDJSON_NAMESPACE::GenericValue> JSONValue; typedef JSONValue::ConstMemberIterator MemberIterator; typedef JSONValue::ConstValueIterator ValueIterator; - typedef rapidjson::Document::GenericValue GenericValue; + typedef CEREAL_RAPIDJSON_NAMESPACE::Document::GenericValue GenericValue; public: /*! @name Common Functionality @@ -471,11 +471,17 @@ namespace cereal Iterator(MemberIterator begin, MemberIterator end) : itsMemberItBegin(begin), itsMemberItEnd(end), itsIndex(0), itsType(Member) - { } + { + if( std::distance( begin, end ) == 0 ) + itsType = Null_; + } Iterator(ValueIterator begin, ValueIterator end) : itsValueItBegin(begin), itsValueItEnd(end), itsIndex(0), itsType(Value) - { } + { + if( std::distance( begin, end ) == 0 ) + itsType = Null_; + } //! Advance to the next node Iterator & operator++() @@ -491,7 +497,7 @@ namespace cereal { case Value : return itsValueItBegin[itsIndex]; case Member: return itsMemberItBegin[itsIndex].value; - default: throw cereal::Exception("Invalid Iterator Type!"); + default: throw cereal::Exception("JSONInputArchive internal error: null or empty iterator to object or array!"); } } @@ -528,7 +534,7 @@ namespace cereal MemberIterator itsMemberItBegin, itsMemberItEnd; //!< The member iterator (object) ValueIterator itsValueItBegin, itsValueItEnd; //!< The value iterator (array) size_t itsIndex; //!< The current index of this iterator - enum Type {Value, Member, Null_} itsType; //!< Whether this holds values (array) or members (objects) or nothing + enum Type {Value, Member, Null_} itsType; //!< Whether this holds values (array) or members (objects) or nothing }; //! Searches for the expectedName node if it doesn't match the actualName @@ -713,7 +719,7 @@ namespace cereal const char * itsNextName; //!< Next name set by NVP ReadStream itsReadStream; //!< Rapidjson write stream std::vector itsIteratorStack; //!< 'Stack' of rapidJSON iterators - rapidjson::Document itsDocument; //!< Rapidjson document + CEREAL_RAPIDJSON_NAMESPACE::Document itsDocument; //!< Rapidjson document }; // ###################################################################### diff --git a/cereal/archives/portable_binary.hpp b/cereal/archives/portable_binary.hpp index f9d72d224..76e634ba6 100644 --- a/cereal/archives/portable_binary.hpp +++ b/cereal/archives/portable_binary.hpp @@ -29,7 +29,7 @@ #ifndef CEREAL_ARCHIVES_PORTABLE_BINARY_HPP_ #define CEREAL_ARCHIVES_PORTABLE_BINARY_HPP_ -#include +#include "cereal/cereal.hpp" #include #include diff --git a/cereal/archives/xml.hpp b/cereal/archives/xml.hpp index 63f737acc..c520f02e2 100644 --- a/cereal/archives/xml.hpp +++ b/cereal/archives/xml.hpp @@ -28,12 +28,12 @@ */ #ifndef CEREAL_ARCHIVES_XML_HPP_ #define CEREAL_ARCHIVES_XML_HPP_ -#include -#include +#include "cereal/cereal.hpp" +#include "cereal/details/util.hpp" -#include -#include -#include +#include "cereal/external/rapidxml/rapidxml.hpp" +#include "cereal/external/rapidxml/rapidxml_print.hpp" +#include "cereal/external/base64.hpp" #include #include diff --git a/cereal/cereal.hpp b/cereal/cereal.hpp index f6640d477..a77701037 100644 --- a/cereal/cereal.hpp +++ b/cereal/cereal.hpp @@ -39,10 +39,10 @@ #include #include -#include -#include -#include -#include +#include "cereal/macros.hpp" +#include "cereal/details/traits.hpp" +#include "cereal/details/helpers.hpp" +#include "cereal/types/base_class.hpp" namespace cereal { @@ -255,6 +255,20 @@ namespace cereal a large project from Boost to cereal. The preferred interface for cereal is using operator(). */ //! @{ + //! Indicates this archive is not intended for loading + /*! This ensures compatibility with boost archive types. If you are transitioning + from boost, you can check this value within a member or external serialize function + (i.e., Archive::is_loading::value) to disable behavior specific to loading, until + you can transition to split save/load or save_minimal/load_minimal functions */ + using is_loading = std::false_type; + + //! Indicates this archive is intended for saving + /*! This ensures compatibility with boost archive types. If you are transitioning + from boost, you can check this value within a member or external serialize function + (i.e., Archive::is_saving::value) to enable behavior specific to loading, until + you can transition to split save/load or save_minimal/load_minimal functions */ + using is_saving = std::true_type; + //! Serializes passed in data /*! This is a boost compatability layer and is not the preferred way of using cereal. If you are transitioning from boost, use this until you can @@ -611,6 +625,20 @@ namespace cereal a large project from Boost to cereal. The preferred interface for cereal is using operator(). */ //! @{ + //! Indicates this archive is intended for loading + /*! This ensures compatibility with boost archive types. If you are transitioning + from boost, you can check this value within a member or external serialize function + (i.e., Archive::is_loading::value) to enable behavior specific to loading, until + you can transition to split save/load or save_minimal/load_minimal functions */ + using is_loading = std::true_type; + + //! Indicates this archive is not intended for saving + /*! This ensures compatibility with boost archive types. If you are transitioning + from boost, you can check this value within a member or external serialize function + (i.e., Archive::is_saving::value) to disable behavior specific to loading, until + you can transition to split save/load or save_minimal/load_minimal functions */ + using is_saving = std::false_type; + //! Serializes passed in data /*! This is a boost compatability layer and is not the preferred way of using cereal. If you are transitioning from boost, use this until you can @@ -954,6 +982,6 @@ namespace cereal } // namespace cereal // This include needs to come after things such as binary_data, make_nvp, etc -#include +#include "cereal/types/common.hpp" #endif // CEREAL_CEREAL_HPP_ diff --git a/cereal/details/helpers.hpp b/cereal/details/helpers.hpp index 527c7c62b..909268809 100644 --- a/cereal/details/helpers.hpp +++ b/cereal/details/helpers.hpp @@ -37,8 +37,8 @@ #include #include -#include -#include +#include "cereal/macros.hpp" +#include "cereal/details/static_object.hpp" namespace cereal { @@ -55,8 +55,10 @@ namespace cereal //! The size type used by cereal /*! To ensure compatability between 32, 64, etc bit machines, we need to use a fixed size type instead of size_t, which may vary from machine to - machine. */ - using size_type = uint64_t; + machine. + + The default value for CEREAL_SIZE_TYPE is specified in cereal/macros.hpp */ + using size_type = CEREAL_SIZE_TYPE; // forward decls class BinaryOutputArchive; diff --git a/cereal/details/polymorphic_impl.hpp b/cereal/details/polymorphic_impl.hpp index e15075882..81128c8b1 100644 --- a/cereal/details/polymorphic_impl.hpp +++ b/cereal/details/polymorphic_impl.hpp @@ -45,13 +45,16 @@ #ifndef CEREAL_DETAILS_POLYMORPHIC_IMPL_HPP_ #define CEREAL_DETAILS_POLYMORPHIC_IMPL_HPP_ -#include -#include -#include -#include +#include "cereal/details/polymorphic_impl_fwd.hpp" +#include "cereal/details/static_object.hpp" +#include "cereal/types/memory.hpp" +#include "cereal/types/string.hpp" #include #include #include +#include +#include +#include //! Binds a polymorhic type to all registered archives /*! This binds a polymorphic type to all compatible registered archives that @@ -115,6 +118,8 @@ namespace cereal //! Maps from base type index to a map from derived type index to caster std::map>> map; + std::multimap reverseMap; + //! Error message used for unregistered polymorphic casts #define UNREGISTERED_POLYMORPHIC_CAST_EXCEPTION(LoadSave) \ throw cereal::Exception("Trying to " #LoadSave " a registered polymorphic type with an unregistered polymorphic cast.\n" \ @@ -186,8 +191,8 @@ namespace cereal auto const & mapping = lookup( baseInfo, typeid(Derived), [&](){ UNREGISTERED_POLYMORPHIC_CAST_EXCEPTION(load) } ); void * uptr = dptr; - for( auto const * map : mapping ) - uptr = map->upcast( uptr ); + for( auto mIter = mapping.rbegin(), mEnd = mapping.rend(); mIter != mEnd; ++mIter ) + uptr = (*mIter)->upcast( uptr ); return uptr; } @@ -199,8 +204,8 @@ namespace cereal auto const & mapping = lookup( baseInfo, typeid(Derived), [&](){ UNREGISTERED_POLYMORPHIC_CAST_EXCEPTION(load) } ); std::shared_ptr uptr = dptr; - for( auto const * map : mapping ) - uptr = map->upcast( uptr ); + for( auto mIter = mapping.rbegin(), mEnd = mapping.rend(); mIter != mEnd; ++mIter ) + uptr = (*mIter)->upcast( uptr ); return uptr; } @@ -218,72 +223,143 @@ namespace cereal assuming dynamic type information is available */ PolymorphicVirtualCaster() { + const auto baseKey = std::type_index(typeid(Base)); + const auto derivedKey = std::type_index(typeid(Derived)); + + // First insert the relation Base->Derived const auto lock = StaticObject::lock(); auto & baseMap = StaticObject::getInstance().map; - auto baseKey = std::type_index(typeid(Base)); auto lb = baseMap.lower_bound(baseKey); { auto & derivedMap = baseMap.insert( lb, {baseKey, {}} )->second; - auto derivedKey = std::type_index(typeid(Derived)); auto lbd = derivedMap.lower_bound(derivedKey); auto & derivedVec = derivedMap.insert( lbd, { std::move(derivedKey), {}} )->second; derivedVec.push_back( this ); } + // Insert reverse relation Derived->Base + auto & reverseMap = StaticObject::getInstance().reverseMap; + reverseMap.insert( {derivedKey, baseKey} ); + // Find all chainable unregistered relations - std::map>> unregisteredRelations; + /* The strategy here is to process only the nodes in the class hierarchy graph that have been + affected by the new insertion. The aglorithm iteratively processes a node an ensures that it + is updated with all new shortest length paths. It then rocesses the parents of the active node, + with the knowledge that all children have already been processed. + + Note that for the following, we'll use the nomenclature of parent and child to not confuse with + the inserted base derived relationship */ { - auto checkRelation = [](std::type_index const & baseInfo, std::type_index const & derivedInfo) + // Checks whether there is a path from parent->child and returns a pair + // dist is set to MAX if the path does not exist + auto checkRelation = [](std::type_index const & parentInfo, std::type_index const & childInfo) -> + std::pair> { - const bool exists = PolymorphicCasters::exists( baseInfo, derivedInfo ); - return std::make_pair( exists, exists ? PolymorphicCasters::lookup( baseInfo, derivedInfo, [](){} ) : - std::vector{} ); + if( PolymorphicCasters::exists( parentInfo, childInfo ) ) + { + auto const & path = PolymorphicCasters::lookup( parentInfo, childInfo, [](){} ); + return {path.size(), path}; + } + else + return {std::numeric_limits::max(), {}}; }; - for( auto baseIt : baseMap ) - for( auto derivedIt : baseIt.second ) + std::stack parentStack; // Holds the parent nodes to be processed + std::set dirtySet; // Marks child nodes that have been changed + std::set processedParents; // Marks parent nodes that have been processed + + // Begin processing the base key and mark derived as dirty + parentStack.push( baseKey ); + dirtySet.insert( derivedKey ); + + while( !parentStack.empty() ) + { + using Relations = std::multimap>>; + Relations unregisteredRelations; // Defer insertions until after main loop to prevent iterator invalidation + + const auto parent = parentStack.top(); + parentStack.pop(); + + // Update paths to all children marked dirty + for( auto const & childPair : baseMap[parent] ) { - for( auto otherBaseIt : baseMap ) + const auto child = childPair.first; + if( dirtySet.count( child ) && baseMap.count( child ) ) { - if( baseIt.first == otherBaseIt.first ) // only interested in chained relations - continue; + auto parentChildPath = checkRelation( parent, child ); - // Check if there exists a mapping otherBase -> base -> derived that is shorter than - // any existing otherBase -> derived direct mapping - auto otherBaseItToDerived = checkRelation( otherBaseIt.first, derivedIt.first ); - auto baseToDerived = checkRelation( baseIt.first, derivedIt.first ); - auto otherBaseToBase = checkRelation( otherBaseIt.first, baseIt.first ); + // Search all paths from the child to its own children (finalChild), + // looking for a shorter parth from parent to finalChild + for( auto const & finalChildPair : baseMap[child] ) + { + const auto finalChild = finalChildPair.first; + + auto parentFinalChildPath = checkRelation( parent, finalChild ); + auto childFinalChildPath = checkRelation( child, finalChild ); + + const size_t newLength = 1u + parentChildPath.first; + + if( newLength < parentFinalChildPath.first ) + { + std::vector path = parentChildPath.second; + path.insert( path.end(), childFinalChildPath.second.begin(), childFinalChildPath.second.end() ); + + // Check to see if we have a previous uncommitted path in unregisteredRelations + // that is shorter. If so, ignore this path + auto hintRange = unregisteredRelations.equal_range( parent ); + auto hint = hintRange.first; + for( ; hint != hintRange.second; ++hint ) + if( hint->second.first == finalChild ) + break; + + const bool uncommittedExists = hint != unregisteredRelations.end(); + if( uncommittedExists && (hint->second.second.size() <= newLength) ) + continue; + + auto newPath = std::pair>{finalChild, std::move(path)}; + + // Insert the new path if it doesn't exist, otherwise this will just lookup where to do the + // replacement + #ifdef CEREAL_OLDER_GCC + auto old = unregisteredRelations.insert( hint, std::make_pair(parent, newPath) ); + #else // NOT CEREAL_OLDER_GCC + auto old = unregisteredRelations.emplace_hint( hint, parent, newPath ); + #endif // NOT CEREAL_OLDER_GCC + + // If there was an uncommitted path, we need to perform a replacement + if( uncommittedExists ) + old->second = newPath; + } + } // end loop over child's children + } // end if dirty and child has children + } // end loop over children + + // Insert chained relations + for( auto const & it : unregisteredRelations ) + { + auto & derivedMap = baseMap.find( it.first )->second; + derivedMap[it.second.first] = it.second.second; + reverseMap.insert( {it.second.first, it.first} ); + } - const size_t newLength = otherBaseToBase.second.size() + baseToDerived.second.size(); - const bool isShorterOrFirstPath = !otherBaseItToDerived.first || (newLength < derivedIt.second.size()); + // Mark current parent as modified + dirtySet.insert( parent ); - if( isShorterOrFirstPath && - baseToDerived.first && - otherBaseToBase.first ) - { - std::vector path = otherBaseToBase.second; - path.insert( path.end(), baseToDerived.second.begin(), baseToDerived.second.end() ); - - #ifdef CEREAL_OLDER_GCC - unregisteredRelations.insert( std::make_pair(otherBaseIt.first, - std::pair>{derivedIt.first, std::move(path)}) ); - #else // NOT CEREAL_OLDER_GCC - unregisteredRelations.emplace( otherBaseIt.first, - std::pair>{derivedIt.first, std::move(path)} ); - #endif // NOT CEREAL_OLDER_GCC - } - } // end otherBaseIt - } // end derivedIt - } // end chain lookup - - // Insert chained relations - for( auto it : unregisteredRelations ) - { - auto & derivedMap = baseMap.find( it.first )->second; - derivedMap[it.second.first] = it.second.second; - } - } + // Insert all parents of the current parent node that haven't yet been processed + auto parentRange = reverseMap.equal_range( parent ); + for( auto pIter = parentRange.first; pIter != parentRange.second; ++pIter ) + { + const auto pParent = pIter->second; + if( !processedParents.count( pParent ) ) + { + parentStack.push( pParent ); + processedParents.insert( pParent ); + } + } + } // end loop over parent stack + } // end chainable relations + } // end PolymorphicVirtualCaster() //! Performs the proper downcast with the templated types void const * downcast( void const * const ptr ) const override @@ -644,8 +720,8 @@ namespace cereal { //! Binding for non abstract types void bind(std::false_type) const - { - instantiate_polymorphic_binding((T*) 0, 0, Tag{}, adl_tag{}); + { + instantiate_polymorphic_binding(static_cast(nullptr), 0, Tag{}, adl_tag{}); } //! Binding for abstract types diff --git a/cereal/details/static_object.hpp b/cereal/details/static_object.hpp index 6afdb75d1..c9c888d7d 100644 --- a/cereal/details/static_object.hpp +++ b/cereal/details/static_object.hpp @@ -28,7 +28,7 @@ #ifndef CEREAL_DETAILS_STATIC_OBJECT_HPP_ #define CEREAL_DETAILS_STATIC_OBJECT_HPP_ -#include +#include "cereal/macros.hpp" #if CEREAL_THREAD_SAFE #include @@ -109,6 +109,7 @@ namespace cereal static LockGuard lock() { #if CEREAL_THREAD_SAFE + static std::mutex instanceMutex; return LockGuard{instanceMutex}; #else return LockGuard{}; @@ -117,15 +118,9 @@ namespace cereal private: static T & instance; - #if CEREAL_THREAD_SAFE - static std::mutex instanceMutex; - #endif }; template T & StaticObject::instance = StaticObject::create(); - #if CEREAL_THREAD_SAFE - template std::mutex StaticObject::instanceMutex; - #endif } // namespace detail } // namespace cereal diff --git a/cereal/details/traits.hpp b/cereal/details/traits.hpp index f7e301cc8..3390bbd31 100644 --- a/cereal/details/traits.hpp +++ b/cereal/details/traits.hpp @@ -39,8 +39,8 @@ #include #include -#include -#include +#include "cereal/macros.hpp" +#include "cereal/access.hpp" namespace cereal { @@ -1180,9 +1180,9 @@ namespace cereal struct shared_from_this_wrapper { template - static auto check( U const & t ) -> decltype( ::cereal::access::shared_from_this(t), std::true_type() ); + static auto (check)( U const & t ) -> decltype( ::cereal::access::shared_from_this(t), std::true_type() ); - static auto check( ... ) -> decltype( std::false_type() ); + static auto (check)( ... ) -> decltype( std::false_type() ); template static auto get( U const & t ) -> decltype( t.shared_from_this() ); @@ -1191,7 +1191,7 @@ namespace cereal //! Determine if T or any base class of T has inherited from std::enable_shared_from_this template - struct has_shared_from_this : decltype(detail::shared_from_this_wrapper::check(std::declval())) + struct has_shared_from_this : decltype((detail::shared_from_this_wrapper::check)(std::declval())) { }; //! Get the type of the base class of T which inherited from std::enable_shared_from_this diff --git a/cereal/external/base64.hpp b/cereal/external/base64.hpp index 32e17cf8d..7eee0037b 100644 --- a/cereal/external/base64.hpp +++ b/cereal/external/base64.hpp @@ -50,10 +50,10 @@ namespace cereal while (in_len--) { char_array_3[i++] = *(bytes_to_encode++); if (i == 3) { - char_array_4[0] = (unsigned char) ((char_array_3[0] & 0xfc) >> 2); - char_array_4[1] = (unsigned char) ( ( ( char_array_3[0] & 0x03 ) << 4 ) + ( ( char_array_3[1] & 0xf0 ) >> 4 ) ); - char_array_4[2] = (unsigned char) ( ( ( char_array_3[1] & 0x0f ) << 2 ) + ( ( char_array_3[2] & 0xc0 ) >> 6 ) ); - char_array_4[3] = (unsigned char) ( char_array_3[2] & 0x3f ); + char_array_4[0] = static_cast((char_array_3[0] & 0xfc) >> 2); + char_array_4[1] = static_cast( ( ( char_array_3[0] & 0x03 ) << 4 ) + ( ( char_array_3[1] & 0xf0 ) >> 4 ) ); + char_array_4[2] = static_cast( ( ( char_array_3[1] & 0x0f ) << 2 ) + ( ( char_array_3[2] & 0xc0 ) >> 6 ) ); + char_array_4[3] = static_cast( char_array_3[2] & 0x3f ); for(i = 0; (i <4) ; i++) ret += chars[char_array_4[i]]; @@ -76,11 +76,9 @@ namespace cereal while((i++ < 3)) ret += '='; - } return ret; - } inline std::string decode(std::string const& encoded_string) { @@ -95,7 +93,7 @@ namespace cereal char_array_4[i++] = encoded_string[in_]; in_++; if (i ==4) { for (i = 0; i <4; i++) - char_array_4[i] = (unsigned char) chars.find( char_array_4[i] ); + char_array_4[i] = static_cast(chars.find( char_array_4[i] )); char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4); char_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2); @@ -112,7 +110,7 @@ namespace cereal char_array_4[j] = 0; for (j = 0; j <4; j++) - char_array_4[j] = (unsigned char) chars.find( char_array_4[j] ); + char_array_4[j] = static_cast(chars.find( char_array_4[j] )); char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4); char_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2); diff --git a/cereal/macros.hpp b/cereal/macros.hpp index eb2a05b9a..cfdc14c59 100644 --- a/cereal/macros.hpp +++ b/cereal/macros.hpp @@ -56,6 +56,20 @@ #define CEREAL_THREAD_SAFE 0 #endif // CEREAL_THREAD_SAFE +#ifndef CEREAL_SIZE_TYPE +//! Determines the data type used for size_type +/*! cereal uses size_type to ensure that the serialized size of + dynamic containers is compatible across different architectures + (e.g. 32 vs 64 bit), which may use different underlying types for + std::size_t. + + More information can be found in cereal/details/helpers.hpp. + + If you choose to modify this type, ensure that you use a fixed + size type (e.g. uint32_t). */ +#define CEREAL_SIZE_TYPE uint64_t +#endif // CEREAL_SIZE_TYPE + // ###################################################################### #ifndef CEREAL_SERIALIZE_FUNCTION_NAME //! The serialization/deserialization function name to search for. diff --git a/cereal/types/array.hpp b/cereal/types/array.hpp index 34766e9af..f5d510abf 100644 --- a/cereal/types/array.hpp +++ b/cereal/types/array.hpp @@ -30,7 +30,7 @@ #ifndef CEREAL_TYPES_ARRAY_HPP_ #define CEREAL_TYPES_ARRAY_HPP_ -#include +#include "cereal/cereal.hpp" #include namespace cereal diff --git a/cereal/types/base_class.hpp b/cereal/types/base_class.hpp index 10441ab95..37b551ede 100644 --- a/cereal/types/base_class.hpp +++ b/cereal/types/base_class.hpp @@ -30,8 +30,8 @@ #ifndef CEREAL_TYPES_BASE_CLASS_HPP_ #define CEREAL_TYPES_BASE_CLASS_HPP_ -#include -#include +#include "cereal/details/traits.hpp" +#include "cereal/details/polymorphic_impl_fwd.hpp" namespace cereal { diff --git a/cereal/types/bitset.hpp b/cereal/types/bitset.hpp index fe389a8af..12d3a8276 100644 --- a/cereal/types/bitset.hpp +++ b/cereal/types/bitset.hpp @@ -30,8 +30,8 @@ #ifndef CEREAL_TYPES_BITSET_HPP_ #define CEREAL_TYPES_BITSET_HPP_ -#include -#include +#include "cereal/cereal.hpp" +#include "cereal/types/string.hpp" #include namespace cereal @@ -148,6 +148,8 @@ namespace cereal std::uint8_t chunk = 0; std::uint8_t mask = 0; + bits.reset(); + // Load one chunk at a time, rotating through the chunk // to set bits in the bitset for( std::size_t i = 0; i < N; ++i ) diff --git a/cereal/types/boost_variant.hpp b/cereal/types/boost_variant.hpp index f74123828..e1863c14f 100644 --- a/cereal/types/boost_variant.hpp +++ b/cereal/types/boost_variant.hpp @@ -30,7 +30,7 @@ #ifndef CEREAL_TYPES_BOOST_VARIANT_HPP_ #define CEREAL_TYPES_BOOST_VARIANT_HPP_ -#include +#include "cereal/cereal.hpp" #include #include diff --git a/cereal/types/common.hpp b/cereal/types/common.hpp index 57ab204b1..b239daa76 100644 --- a/cereal/types/common.hpp +++ b/cereal/types/common.hpp @@ -30,7 +30,7 @@ #ifndef CEREAL_TYPES_COMMON_HPP_ #define CEREAL_TYPES_COMMON_HPP_ -#include +#include "cereal/cereal.hpp" namespace cereal { diff --git a/cereal/types/concepts/pair_associative_container.hpp b/cereal/types/concepts/pair_associative_container.hpp index 9936e5bc0..5f0fd746c 100644 --- a/cereal/types/concepts/pair_associative_container.hpp +++ b/cereal/types/concepts/pair_associative_container.hpp @@ -31,7 +31,7 @@ #ifndef CEREAL_CONCEPTS_PAIR_ASSOCIATIVE_CONTAINER_HPP_ #define CEREAL_CONCEPTS_PAIR_ASSOCIATIVE_CONTAINER_HPP_ -#include +#include "cereal/cereal.hpp" namespace cereal { diff --git a/cereal/types/deque.hpp b/cereal/types/deque.hpp index df93e64d4..0491d28d0 100644 --- a/cereal/types/deque.hpp +++ b/cereal/types/deque.hpp @@ -30,7 +30,7 @@ #ifndef CEREAL_TYPES_DEQUE_HPP_ #define CEREAL_TYPES_DEQUE_HPP_ -#include +#include "cereal/cereal.hpp" #include namespace cereal diff --git a/cereal/types/forward_list.hpp b/cereal/types/forward_list.hpp index 72a8b8822..db87e1f5c 100644 --- a/cereal/types/forward_list.hpp +++ b/cereal/types/forward_list.hpp @@ -30,7 +30,7 @@ #ifndef CEREAL_TYPES_FORWARD_LIST_HPP_ #define CEREAL_TYPES_FORWARD_LIST_HPP_ -#include +#include "cereal/cereal.hpp" #include namespace cereal diff --git a/cereal/types/list.hpp b/cereal/types/list.hpp index d071e72f8..6008204ff 100644 --- a/cereal/types/list.hpp +++ b/cereal/types/list.hpp @@ -30,7 +30,7 @@ #ifndef CEREAL_TYPES_LIST_HPP_ #define CEREAL_TYPES_LIST_HPP_ -#include +#include "cereal/cereal.hpp" #include namespace cereal diff --git a/cereal/types/map.hpp b/cereal/types/map.hpp index 3ed99581e..41845e980 100644 --- a/cereal/types/map.hpp +++ b/cereal/types/map.hpp @@ -30,7 +30,7 @@ #ifndef CEREAL_TYPES_MAP_HPP_ #define CEREAL_TYPES_MAP_HPP_ -#include +#include "cereal/types/concepts/pair_associative_container.hpp" #include #endif // CEREAL_TYPES_MAP_HPP_ diff --git a/cereal/types/memory.hpp b/cereal/types/memory.hpp index 6b0324085..40c965a6c 100644 --- a/cereal/types/memory.hpp +++ b/cereal/types/memory.hpp @@ -30,7 +30,7 @@ #ifndef CEREAL_TYPES_SHARED_PTR_HPP_ #define CEREAL_TYPES_SHARED_PTR_HPP_ -#include +#include "cereal/cereal.hpp" #include #include @@ -419,7 +419,7 @@ namespace cereal } // namespace cereal // automatically include polymorphic support -#include +#include "cereal/types/polymorphic.hpp" #undef CEREAL_ALIGNOF #endif // CEREAL_TYPES_SHARED_PTR_HPP_ \ No newline at end of file diff --git a/cereal/types/polymorphic.hpp b/cereal/types/polymorphic.hpp index a7754ca81..5acc11f8a 100644 --- a/cereal/types/polymorphic.hpp +++ b/cereal/types/polymorphic.hpp @@ -30,13 +30,13 @@ #ifndef CEREAL_TYPES_POLYMORPHIC_HPP_ #define CEREAL_TYPES_POLYMORPHIC_HPP_ -#include -#include +#include "cereal/cereal.hpp" +#include "cereal/types/memory.hpp" -#include -#include -#include -#include +#include "cereal/details/util.hpp" +#include "cereal/details/helpers.hpp" +#include "cereal/details/traits.hpp" +#include "cereal/details/polymorphic_impl.hpp" #ifdef _MSC_VER #define CEREAL_STATIC_CONSTEXPR static diff --git a/cereal/types/queue.hpp b/cereal/types/queue.hpp index c0e41a201..52d26a2f0 100644 --- a/cereal/types/queue.hpp +++ b/cereal/types/queue.hpp @@ -30,13 +30,13 @@ #ifndef CEREAL_TYPES_QUEUE_HPP_ #define CEREAL_TYPES_QUEUE_HPP_ -#include +#include "cereal/details/helpers.hpp" #include // The default container for queue is deque, so let's include that too -#include +#include "cereal/types/deque.hpp" // The default comparator for queue is less -#include +#include "cereal/types/functional.hpp" namespace cereal { diff --git a/cereal/types/set.hpp b/cereal/types/set.hpp index a5b3bc6ae..149a5b45a 100644 --- a/cereal/types/set.hpp +++ b/cereal/types/set.hpp @@ -30,7 +30,7 @@ #ifndef CEREAL_TYPES_SET_HPP_ #define CEREAL_TYPES_SET_HPP_ -#include +#include "cereal/cereal.hpp" #include namespace cereal diff --git a/cereal/types/stack.hpp b/cereal/types/stack.hpp index d2a666760..b69b66000 100644 --- a/cereal/types/stack.hpp +++ b/cereal/types/stack.hpp @@ -30,11 +30,11 @@ #ifndef CEREAL_TYPES_STACK_HPP_ #define CEREAL_TYPES_STACK_HPP_ -#include +#include "cereal/cereal.hpp" #include // The default container for stack is deque, so let's include that too -#include +#include "cereal/types/deque.hpp" namespace cereal { diff --git a/cereal/types/string.hpp b/cereal/types/string.hpp index 55ebe722a..e7488a9c2 100644 --- a/cereal/types/string.hpp +++ b/cereal/types/string.hpp @@ -30,7 +30,7 @@ #ifndef CEREAL_TYPES_STRING_HPP_ #define CEREAL_TYPES_STRING_HPP_ -#include +#include "cereal/cereal.hpp" #include namespace cereal diff --git a/cereal/types/tuple.hpp b/cereal/types/tuple.hpp index 2831728ae..7e56f0dc1 100644 --- a/cereal/types/tuple.hpp +++ b/cereal/types/tuple.hpp @@ -30,7 +30,7 @@ #ifndef CEREAL_TYPES_TUPLE_HPP_ #define CEREAL_TYPES_TUPLE_HPP_ -#include +#include "cereal/cereal.hpp" #include namespace cereal diff --git a/cereal/types/unordered_map.hpp b/cereal/types/unordered_map.hpp index 68ee9c4a8..3b0f80ba4 100644 --- a/cereal/types/unordered_map.hpp +++ b/cereal/types/unordered_map.hpp @@ -30,7 +30,7 @@ #ifndef CEREAL_TYPES_UNORDERED_MAP_HPP_ #define CEREAL_TYPES_UNORDERED_MAP_HPP_ -#include +#include "cereal/types/concepts/pair_associative_container.hpp" #include #endif // CEREAL_TYPES_UNORDERED_MAP_HPP_ diff --git a/cereal/types/unordered_set.hpp b/cereal/types/unordered_set.hpp index f3cdebda8..b86d8e5c1 100644 --- a/cereal/types/unordered_set.hpp +++ b/cereal/types/unordered_set.hpp @@ -30,7 +30,7 @@ #ifndef CEREAL_TYPES_UNORDERED_SET_HPP_ #define CEREAL_TYPES_UNORDERED_SET_HPP_ -#include +#include "cereal/cereal.hpp" #include namespace cereal diff --git a/cereal/types/utility.hpp b/cereal/types/utility.hpp index 1dc382dc5..076bea893 100644 --- a/cereal/types/utility.hpp +++ b/cereal/types/utility.hpp @@ -30,7 +30,7 @@ #ifndef CEREAL_TYPES_UTILITY_HPP_ #define CEREAL_TYPES_UTILITY_HPP_ -#include +#include "cereal/cereal.hpp" #include namespace cereal diff --git a/cereal/types/valarray.hpp b/cereal/types/valarray.hpp index eade2fe3b..dcc471d77 100644 --- a/cereal/types/valarray.hpp +++ b/cereal/types/valarray.hpp @@ -32,7 +32,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef CEREAL_TYPES_VALARRAY_HPP_ #define CEREAL_TYPES_VALARRAY_HPP_ -#include +#include "cereal/cereal.hpp" #include namespace cereal diff --git a/cereal/types/vector.hpp b/cereal/types/vector.hpp index 36a2a4ccf..8302cb900 100644 --- a/cereal/types/vector.hpp +++ b/cereal/types/vector.hpp @@ -30,7 +30,7 @@ #ifndef CEREAL_TYPES_VECTOR_HPP_ #define CEREAL_TYPES_VECTOR_HPP_ -#include +#include "cereal/cereal.hpp" #include namespace cereal