Browse Source

use script name for dialog caption

Johann ELSASS 5 years ago
parent
commit
e17809dfb0

+ 6 - 0
lazpaint/lazpaintdialogs.inc

@@ -124,6 +124,12 @@ begin
   result := srOk;
   result := srOk;
 end;
 end;
 
 
+function TLazPaintInstance.ScriptGetName(AVars: TVariableSet): TScriptResult;
+begin
+  AVars.Strings['Result'] := FScriptName;
+  result := srOk;
+end;
+
 function TLazPaintInstance.ScriptImageCanvasSize(AVars: TVariableSet): TScriptResult;
 function TLazPaintInstance.ScriptImageCanvasSize(AVars: TVariableSet): TScriptResult;
 var
 var
   w, h: Int64;
   w, h: Int64;

+ 2 - 0
lazpaint/lazpaintinstance.pas

@@ -54,6 +54,7 @@ type
     function ScriptColorShiftColors(AVars: TVariableSet): TScriptResult;
     function ScriptColorShiftColors(AVars: TVariableSet): TScriptResult;
     function ScriptFileGetTemporaryName(AVars: TVariableSet): TScriptResult;
     function ScriptFileGetTemporaryName(AVars: TVariableSet): TScriptResult;
     function ScriptFileNew(AVars: TVariableSet): TScriptResult;
     function ScriptFileNew(AVars: TVariableSet): TScriptResult;
+    function ScriptGetName(AVars: TVariableSet): TScriptResult;
     function ScriptImageCanvasSize(AVars: TVariableSet): TScriptResult;
     function ScriptImageCanvasSize(AVars: TVariableSet): TScriptResult;
     function ScriptImageRepeat(AVars: TVariableSet): TScriptResult;
     function ScriptImageRepeat(AVars: TVariableSet): TScriptResult;
     function ScriptImageResample(AParams: TVariableSet): TScriptResult;
     function ScriptImageResample(AParams: TVariableSet): TScriptResult;
@@ -396,6 +397,7 @@ begin
   ScriptContext.RegisterScriptFunction('InputBox',@ScriptInputBox,ARegister);
   ScriptContext.RegisterScriptFunction('InputBox',@ScriptInputBox,ARegister);
   ScriptContext.RegisterScriptFunction('LazPaintGetVersion',@ScriptLazPaintGetVersion,ARegister);
   ScriptContext.RegisterScriptFunction('LazPaintGetVersion',@ScriptLazPaintGetVersion,ARegister);
   ScriptContext.RegisterScriptFunction('TranslateText',@ScriptTranslateText,ARegister);
   ScriptContext.RegisterScriptFunction('TranslateText',@ScriptTranslateText,ARegister);
+  ScriptContext.RegisterScriptFunction('ScriptGetName',@ScriptGetName,ARegister);
 end;
 end;
 
 
 function TLazPaintInstance.ScriptFileGetTemporaryName(AVars: TVariableSet): TScriptResult;
 function TLazPaintInstance.ScriptFileGetTemporaryName(AVars: TVariableSet): TScriptResult;

+ 7 - 2
lazpaint/lazpaintmainform.pas

@@ -862,7 +862,7 @@ uses LCLIntf, BGRAUTF8, ugraph, math, umac, uclipboard, ucursors,
    ufilters, ULoadImage, ULoading, UFileExtensions, UBrushType,
    ufilters, ULoadImage, ULoading, UFileExtensions, UBrushType,
    ugeometricbrush, UPreviewDialog, UQuestion, BGRALayerOriginal,
    ugeometricbrush, UPreviewDialog, UQuestion, BGRALayerOriginal,
    BGRATransform, LCVectorPolyShapes, URaw, UFileSystem,
    BGRATransform, LCVectorPolyShapes, URaw, UFileSystem,
-   UTranslation;
+   UTranslation, UPython;
 
 
 const PenWidthFactor = 10;
 const PenWidthFactor = 10;
 
 
@@ -3460,6 +3460,8 @@ procedure TFMain.FileRunScriptExecute(Sender: TObject);
 var
 var
   dlg: TOpenDialog;
   dlg: TOpenDialog;
   tmi: TTopMostInfo;
   tmi: TTopMostInfo;
+  title: String;
+  posSub: Integer;
 begin
 begin
   tmi := LazPaintInstance.HideTopmost;
   tmi := LazPaintInstance.HideTopmost;
   try
   try
@@ -3472,7 +3474,10 @@ begin
       if dlg.Execute then
       if dlg.Execute then
       begin
       begin
         Config.SetDefaultScriptDirectory(ExtractFilePath(dlg.FileName));
         Config.SetDefaultScriptDirectory(ExtractFilePath(dlg.FileName));
-        LazPaintInstance.RunScript(dlg.FileName);
+        title := GetScriptTitle(dlg.FileName);
+        posSub := title.LastIndexOf('>');
+        if posSub <> -1 then title := title.Substring(posSub+1);
+        LazPaintInstance.RunScript(dlg.FileName, title);
       end;
       end;
     except
     except
       on ex:exception do
       on ex:exception do

+ 9 - 59
lazpaint/umenu.pas

@@ -283,46 +283,12 @@ procedure TMainFormMenu.AddInstalledScripts(AMenu: TMenuItem; AIndex: integer);
   end;
   end;
 
 
 var
 var
-  path, fullname, header, title: String;
+  path, fullname, title: String;
   searchRec: TSearchRec;
   searchRec: TSearchRec;
   t: textFile;
   t: textFile;
   item: TMenuItem;
   item: TMenuItem;
   items: TStringList;
   items: TStringList;
   i: Integer;
   i: Integer;
-  matchLang: boolean;
-
-  procedure RetrieveTitle(AText: string; ADefault: boolean; out ALangMatch: boolean);
-  var
-    posCloseBracket: SizeInt;
-    lang: String;
-  begin
-    If AText.StartsWith('#') then
-      Delete(AText, 1,1);
-    AText := AText.Trim;
-    ALangMatch := false;
-    if AText.StartsWith('(') then
-    begin
-      posCloseBracket := pos(')', AText);
-      if posCloseBracket > 0 then
-      begin
-        lang := copy(AText, 2, posCloseBracket-2);
-        delete(AText, 1, posCloseBracket);
-        AText := AText.Trim;
-        if lang = ActiveLanguage then
-          ALangMatch:= true;
-      end;
-    end else
-    begin
-      if not ADefault then exit;
-      if ActiveLanguage = DesignLanguage then ALangMatch:= true;
-    end;
-    if ALangMatch or ADefault then
-    begin
-      title := AText;
-      title := StringReplace(title, ' >', '>', [rfReplaceAll]);
-      title := StringReplace(title, '> ', '>', [rfReplaceAll]);
-    end;
-  end;
 
 
 begin
 begin
   if FInstalledScripts = nil then FInstalledScripts := TStringList.Create;
   if FInstalledScripts = nil then FInstalledScripts := TStringList.Create;
@@ -336,30 +302,14 @@ begin
         fullname := path+PathDelim+searchRec.Name;
         fullname := path+PathDelim+searchRec.Name;
         if FileExistsUTF8(fullname) then
         if FileExistsUTF8(fullname) then
         begin
         begin
-          assignFile(t, fullname);
-          reset(t);
-          try
-            readln(t, header);
-            if header.StartsWith('#') then
-            begin
-              title := '';
-              RetrieveTitle(header, true, matchLang);
-              while not matchLang do
-              begin
-                readln(t, header);
-                if header.StartsWith('#') then
-                begin
-                  RetrieveTitle(header, false, matchLang);
-                end else break;
-              end;
-              item := TMenuItem.Create(AMenu);
-              item.Caption := title;
-              item.Tag := FInstalledScripts.Add(fullname);
-              item.OnClick:=@Script_Click;
-              items.AddObject(title, item);
-            end;
-          finally
-            closefile(t);
+          title := GetScriptTitle(fullname);
+          if title <> '' then
+          begin
+            item := TMenuItem.Create(AMenu);
+            item.Caption := title;
+            item.Tag := FInstalledScripts.Add(fullname);
+            item.OnClick:=@Script_Click;
+            items.AddObject(title, item);
           end;
           end;
         end;
         end;
       until FindNextUTF8(searchRec)<>0;
       until FindNextUTF8(searchRec)<>0;

+ 62 - 0
lazpaint/upython.pas

@@ -47,6 +47,7 @@ type
   end;
   end;
 
 
 function GetPythonVersion(APythonBin: string = DefaultPythonBin): string;
 function GetPythonVersion(APythonBin: string = DefaultPythonBin): string;
+function GetScriptTitle(AFilename: string): string;
 
 
 var
 var
   CustomScriptDirectory: string;
   CustomScriptDirectory: string;
@@ -78,6 +79,67 @@ begin
   result := PythonVersionCache.Version;
   result := PythonVersionCache.Version;
 end;
 end;
 
 
+function GetScriptTitle(AFilename: string): string;
+var t: textfile;
+  header: string;
+  matchLang: boolean;
+
+  procedure RetrieveTitle(AText: string; ADefault: boolean; var title: string; out ALangMatch: boolean);
+  var
+    posCloseBracket: SizeInt;
+    lang: String;
+  begin
+    If AText.StartsWith('#') then
+      Delete(AText, 1,1);
+    AText := AText.Trim;
+    ALangMatch := false;
+    if AText.StartsWith('(') then
+    begin
+      posCloseBracket := pos(')', AText);
+      if posCloseBracket > 0 then
+      begin
+        lang := copy(AText, 2, posCloseBracket-2);
+        delete(AText, 1, posCloseBracket);
+        AText := AText.Trim;
+        if lang = ActiveLanguage then
+          ALangMatch:= true;
+      end;
+    end else
+    begin
+      if not ADefault then exit;
+      if ActiveLanguage = DesignLanguage then ALangMatch:= true;
+    end;
+    if ALangMatch or ADefault then
+    begin
+      title := AText;
+      title := StringReplace(title, ' >', '>', [rfReplaceAll]);
+      title := StringReplace(title, '> ', '>', [rfReplaceAll]);
+    end;
+  end;
+
+begin
+  result := '';
+  assignFile(t, AFilename);
+  reset(t);
+  try
+    readln(t, header);
+    if header.StartsWith('#') then
+    begin
+      RetrieveTitle(header, true, result, matchLang);
+      while not matchLang do
+      begin
+        readln(t, header);
+        if header.StartsWith('#') then
+        begin
+          RetrieveTitle(header, false, result, matchLang);
+        end else break;
+      end;
+    end;
+  finally
+    closefile(t);
+  end;
+end;
+
 { TPythonScript }
 { TPythonScript }
 
 
 procedure TPythonScript.PythonOutput(ALine: RawByteString);
 procedure TPythonScript.PythonOutput(ALine: RawByteString);

+ 2 - 2
resources/scripts/layerfx_innerlight.py

@@ -22,7 +22,7 @@ if layer.is_empty():
 
 
 ############ image processing
 ############ image processing
 
 
-FRIENDLY_NAME = "Inner light"
+FRIENDLY_NAME = dialog.get_script_name()
 REGISTRY_NAME = "innerlight"
 REGISTRY_NAME = "innerlight"
 OPPOSITE_REGISTRY_NAME = "innershadow"
 OPPOSITE_REGISTRY_NAME = "innershadow"
 DEFAULT_ANGLE = 315
 DEFAULT_ANGLE = 315
@@ -88,7 +88,7 @@ def create_shadow_layer():
     layer.select_id(source_layer_id)
     layer.select_id(source_layer_id)
     layer.duplicate()
     layer.duplicate()
     layer.rasterize()
     layer.rasterize()
-    layer.set_name(FRIENDLY_NAME+" of "+source_layer_name)
+    layer.set_name(FRIENDLY_NAME+" - "+source_layer_name)
     layer.set_registry(REGISTRY_NAME+"-source-layer-id", source_layer_id)
     layer.set_registry(REGISTRY_NAME+"-source-layer-id", source_layer_id)
     shadow_layer_id = layer.get_id()
     shadow_layer_id = layer.get_id()
     layer.set_registry("overlay-color", overlay_color)
     layer.set_registry("overlay-color", overlay_color)

+ 2 - 2
resources/scripts/layerfx_innershadow.py

@@ -22,7 +22,7 @@ if layer.is_empty():
 
 
 ############ image processing
 ############ image processing
 
 
-FRIENDLY_NAME = "Inner shadow"
+FRIENDLY_NAME = dialog.get_script_name()
 REGISTRY_NAME = "innershadow"
 REGISTRY_NAME = "innershadow"
 OPPOSITE_REGISTRY_NAME = "innerlight"
 OPPOSITE_REGISTRY_NAME = "innerlight"
 DEFAULT_ANGLE = 135
 DEFAULT_ANGLE = 135
@@ -88,7 +88,7 @@ def create_shadow_layer():
     layer.select_id(source_layer_id)
     layer.select_id(source_layer_id)
     layer.duplicate()
     layer.duplicate()
     layer.rasterize()
     layer.rasterize()
-    layer.set_name(FRIENDLY_NAME+" of "+source_layer_name)
+    layer.set_name(FRIENDLY_NAME+" - "+source_layer_name)
     layer.set_registry(REGISTRY_NAME+"-source-layer-id", source_layer_id)
     layer.set_registry(REGISTRY_NAME+"-source-layer-id", source_layer_id)
     shadow_layer_id = layer.get_id()
     shadow_layer_id = layer.get_id()
     layer.set_registry("overlay-color", overlay_color)
     layer.set_registry("overlay-color", overlay_color)

+ 3 - 2
resources/scripts/layerfx_shadow.py

@@ -21,6 +21,7 @@ if layer.is_empty():
 
 
 ############ image processing
 ############ image processing
 
 
+FRIENDLY_NAME = dialog.get_script_name()
 MAX_RADIUS = 100
 MAX_RADIUS = 100
 MAX_OFFSET = 100
 MAX_OFFSET = 100
 MAX_OPACITY = 255
 MAX_OPACITY = 255
@@ -68,7 +69,7 @@ def create_shadow_layer():
         layer.remove()
         layer.remove()
     layer.select_id(source_layer_id)
     layer.select_id(source_layer_id)
     layer.duplicate()
     layer.duplicate()
-    layer.set_name(translation["Shadow of "]+source_layer_name)
+    layer.set_name(FRIENDLY_NAME + " - " + source_layer_name)
     layer.set_registry("shadow-source-layer-id", source_layer_id)
     layer.set_registry("shadow-source-layer-id", source_layer_id)
     shadow_layer_id = layer.get_id()
     shadow_layer_id = layer.get_id()
     shadow_index = image.get_layer_index()
     shadow_index = image.get_layer_index()
@@ -173,7 +174,7 @@ def scale_opacity_update(event):
     scale_opacity_update_job = window.after(100, scale_opacity_update_do)
     scale_opacity_update_job = window.after(100, scale_opacity_update_do)
 
 
 window = Tk()
 window = Tk()
-window.title("Layer shadow")
+window.title(FRIENDLY_NAME)
 window.resizable(False, False)
 window.resizable(False, False)
 
 
 frame = Frame(window)
 frame = Frame(window)

+ 3 - 2
resources/scripts/layerfx_stroke.py

@@ -21,6 +21,7 @@ if layer.is_empty():
 
 
 ############ image processing
 ############ image processing
 
 
+FRIENDLY_NAME = dialog.get_script_name()
 MAX_RADIUS = 100
 MAX_RADIUS = 100
 MAX_OPACITY = 255
 MAX_OPACITY = 255
 
 
@@ -64,7 +65,7 @@ def create_stroke_layer():
     else:
     else:
         layer.select_id(source_layer_id)
         layer.select_id(source_layer_id)
         layer.duplicate()
         layer.duplicate()
-        layer.set_name("Stroke of "+source_layer_name)
+        layer.set_name(FRIENDLY_NAME + " - " + source_layer_name)
         layer.set_registry("stroke-source-layer-id", source_layer_id)
         layer.set_registry("stroke-source-layer-id", source_layer_id)
         stroke_layer_id = layer.get_id()
         stroke_layer_id = layer.get_id()
         stroke_index = image.get_layer_index()
         stroke_index = image.get_layer_index()
@@ -173,7 +174,7 @@ def button_color_click():
         apply_opacity()
         apply_opacity()
 
 
 window = Tk()
 window = Tk()
-window.title("Layer stroke")
+window.title(FRIENDLY_NAME)
 window.resizable(False, False)
 window.resizable(False, False)
 
 
 frame = Frame(window)
 frame = Frame(window)

+ 5 - 2
resources/scripts/lazpaint/dialog.py

@@ -17,5 +17,8 @@ def input_value(prompt, default):
 def show_color_dialog(color=None) -> str:
 def show_color_dialog(color=None) -> str:
   return command.send('ShowColorDialog?', Color=color)
   return command.send('ShowColorDialog?', Color=color)
 
 
-def translate_text(text):
-  return command.send('TranslateText?', Text=text)
+def translate_text(text) -> str:
+  return command.send('TranslateText?', Text=text)
+
+def get_script_name() -> str:
+  return command.send('ScriptGetName?')