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