Explorar o código

refactor code to load/save color-key association to config file

Lulu hai 1 ano
pai
achega
2a154d2e6d
Modificáronse 1 ficheiros con 65 adicións e 2 borrados
  1. 65 2
      lazpaint/upalettetoolbar.pas

+ 65 - 2
lazpaint/upalettetoolbar.pas

@@ -14,7 +14,15 @@ uses
 
 type
   TPaletteVisibilityChangedByUserHandler = procedure(Sender:TObject) of object;
-  TBGRAPixelBinding = specialize TFPGMap<integer, TBGRAPixel>;
+
+  { TBGRAPixelBinding }
+
+  TBGRAPixelBinding = class(specialize TFPGMap<integer, TBGRAPixel>)
+  private const FKeyPrefix = 'VK_';
+  public
+    function SaveContentToString: string;
+    procedure LoadContentFromString(const aContent: string; FTransparentPalette: boolean);
+  end;
 
   { TPaletteToolbar }
 
@@ -116,9 +124,61 @@ implementation
 uses LCScaleDPI, Graphics, Forms, UGraph,
   UResourceStrings, BGRAColorQuantization,
   ULayerAction, UCursors, UFileSystem,
-  udarktheme, UTool, LCVectorialFill, math,
+  udarktheme, UScripting, UScriptType, UTool, LCVectorialFill, math,
   LCLType;
 
+{ TBGRAPixelBinding }
+
+function TBGRAPixelBinding.SaveContentToString: string;
+var vars: TVariableSet;
+  i: integer;
+begin
+  Result := '';
+  vars := TVariableSet.Create('');
+  for i:=0 to Count-1 do
+    vars.Strings[FKeyPrefix+Keys[i].ToString] := BGRAToStr(Data[i]);
+  result := vars.VariablesAsString;
+  vars.Free;
+end;
+
+procedure TBGRAPixelBinding.LoadContentFromString(const aContent: string; FTransparentPalette: boolean);
+var vars: TVariableSet;
+  varName, strDigit: string;
+  colorValue: TBGRAPixel;
+  i, digit: Integer;
+  v: TScriptVariableReference;
+  missingValues, err: boolean;
+begin
+  if aContent = '' then exit;
+  vars := TVariableSet.Create('');
+  try
+    if vars.LoadFromVariablesAsString(aContent) = [] then
+    begin
+      Clear;
+      for i:=0 to vars.Count-1 do
+      begin
+        varName := vars.VariableName[i];
+        v := vars.GetVariable(varName);
+        if (Pos(FKeyPrefix,varName) = 1) and (Length(varName) > Length(FKeyPrefix)) and (v.variableType = svtString) then
+        begin
+          strDigit := Copy(varName, Length(FKeyPrefix)+1, Length(varName)-Length(FKeyPrefix));
+          if TryStrToInt(strDigit, digit) and (digit in [0..9]) then
+          begin
+            TryStrToBGRA(vars.Strings[varName], colorValue, missingValues, err);
+            if not missingValues and not err then
+            begin
+              if not FTransparentPalette then colorValue.alpha := 255;
+              AddOrSetData(digit, colorValue);
+            end;
+          end;
+        end;
+      end;
+    end;
+  finally
+    vars.Free;
+  end;
+end;
+
 { TPaletteToolbar }
 
 procedure TPaletteToolbar.SetContainer(AValue: TWinControl);
@@ -344,6 +404,8 @@ begin
     RemoveBinding;
     FColorsBindToKey.Add(aDigit, aColor);
   end;
+
+  LazPaintInstance.Config.SetDefaultColorsBoundToKeys(FColorsBindToKey.SaveContentToString);
 end;
 
 function TPaletteToolbar.TryToGetColorBoundToKey(aDigit: integer; out aColor: TBGRAPixel): boolean;
@@ -665,6 +727,7 @@ begin
     FVisible := FLazPaintInstance.Config.DefaultPaletteToolbarVisible;
     PanelPalette.Visible := FVisible;
     FillPaletteWithDefault;
+    FColorsBindToKey.LoadContentFromString(FLazPaintInstance.Config.DefaultColorsBoundToKeys, FTransparentPalette);
   end else
   begin
     FColors.Clear;