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;
 end;
 
+function TLazPaintInstance.ScriptGetName(AVars: TVariableSet): TScriptResult;
+begin
+  AVars.Strings['Result'] := FScriptName;
+  result := srOk;
+end;
+
 function TLazPaintInstance.ScriptImageCanvasSize(AVars: TVariableSet): TScriptResult;
 var
   w, h: Int64;

+ 2 - 0
lazpaint/lazpaintinstance.pas

@@ -54,6 +54,7 @@ type
     function ScriptColorShiftColors(AVars: TVariableSet): TScriptResult;
     function ScriptFileGetTemporaryName(AVars: TVariableSet): TScriptResult;
     function ScriptFileNew(AVars: TVariableSet): TScriptResult;
+    function ScriptGetName(AVars: TVariableSet): TScriptResult;
     function ScriptImageCanvasSize(AVars: TVariableSet): TScriptResult;
     function ScriptImageRepeat(AVars: TVariableSet): TScriptResult;
     function ScriptImageResample(AParams: TVariableSet): TScriptResult;
@@ -396,6 +397,7 @@ begin
   ScriptContext.RegisterScriptFunction('InputBox',@ScriptInputBox,ARegister);
   ScriptContext.RegisterScriptFunction('LazPaintGetVersion',@ScriptLazPaintGetVersion,ARegister);
   ScriptContext.RegisterScriptFunction('TranslateText',@ScriptTranslateText,ARegister);
+  ScriptContext.RegisterScriptFunction('ScriptGetName',@ScriptGetName,ARegister);
 end;
 
 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,
    ugeometricbrush, UPreviewDialog, UQuestion, BGRALayerOriginal,
    BGRATransform, LCVectorPolyShapes, URaw, UFileSystem,
-   UTranslation;
+   UTranslation, UPython;
 
 const PenWidthFactor = 10;
 
@@ -3460,6 +3460,8 @@ procedure TFMain.FileRunScriptExecute(Sender: TObject);
 var
   dlg: TOpenDialog;
   tmi: TTopMostInfo;
+  title: String;
+  posSub: Integer;
 begin
   tmi := LazPaintInstance.HideTopmost;
   try
@@ -3472,7 +3474,10 @@ begin
       if dlg.Execute then
       begin
         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;
     except
       on ex:exception do

+ 9 - 59
lazpaint/umenu.pas

@@ -283,46 +283,12 @@ procedure TMainFormMenu.AddInstalledScripts(AMenu: TMenuItem; AIndex: integer);
   end;
 
 var
-  path, fullname, header, title: String;
+  path, fullname, title: String;
   searchRec: TSearchRec;
   t: textFile;
   item: TMenuItem;
   items: TStringList;
   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
   if FInstalledScripts = nil then FInstalledScripts := TStringList.Create;
@@ -336,30 +302,14 @@ begin
         fullname := path+PathDelim+searchRec.Name;
         if FileExistsUTF8(fullname) then
         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;
       until FindNextUTF8(searchRec)<>0;

+ 62 - 0
lazpaint/upython.pas

@@ -47,6 +47,7 @@ type
   end;
 
 function GetPythonVersion(APythonBin: string = DefaultPythonBin): string;
+function GetScriptTitle(AFilename: string): string;
 
 var
   CustomScriptDirectory: string;
@@ -78,6 +79,67 @@ begin
   result := PythonVersionCache.Version;
 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 }
 
 procedure TPythonScript.PythonOutput(ALine: RawByteString);

+ 2 - 2
resources/scripts/layerfx_innerlight.py

@@ -22,7 +22,7 @@ if layer.is_empty():
 
 ############ image processing
 
-FRIENDLY_NAME = "Inner light"
+FRIENDLY_NAME = dialog.get_script_name()
 REGISTRY_NAME = "innerlight"
 OPPOSITE_REGISTRY_NAME = "innershadow"
 DEFAULT_ANGLE = 315
@@ -88,7 +88,7 @@ def create_shadow_layer():
     layer.select_id(source_layer_id)
     layer.duplicate()
     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)
     shadow_layer_id = layer.get_id()
     layer.set_registry("overlay-color", overlay_color)

+ 2 - 2
resources/scripts/layerfx_innershadow.py

@@ -22,7 +22,7 @@ if layer.is_empty():
 
 ############ image processing
 
-FRIENDLY_NAME = "Inner shadow"
+FRIENDLY_NAME = dialog.get_script_name()
 REGISTRY_NAME = "innershadow"
 OPPOSITE_REGISTRY_NAME = "innerlight"
 DEFAULT_ANGLE = 135
@@ -88,7 +88,7 @@ def create_shadow_layer():
     layer.select_id(source_layer_id)
     layer.duplicate()
     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)
     shadow_layer_id = layer.get_id()
     layer.set_registry("overlay-color", overlay_color)

+ 3 - 2
resources/scripts/layerfx_shadow.py

@@ -21,6 +21,7 @@ if layer.is_empty():
 
 ############ image processing
 
+FRIENDLY_NAME = dialog.get_script_name()
 MAX_RADIUS = 100
 MAX_OFFSET = 100
 MAX_OPACITY = 255
@@ -68,7 +69,7 @@ def create_shadow_layer():
         layer.remove()
     layer.select_id(source_layer_id)
     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)
     shadow_layer_id = layer.get_id()
     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)
 
 window = Tk()
-window.title("Layer shadow")
+window.title(FRIENDLY_NAME)
 window.resizable(False, False)
 
 frame = Frame(window)

+ 3 - 2
resources/scripts/layerfx_stroke.py

@@ -21,6 +21,7 @@ if layer.is_empty():
 
 ############ image processing
 
+FRIENDLY_NAME = dialog.get_script_name()
 MAX_RADIUS = 100
 MAX_OPACITY = 255
 
@@ -64,7 +65,7 @@ def create_stroke_layer():
     else:
         layer.select_id(source_layer_id)
         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)
         stroke_layer_id = layer.get_id()
         stroke_index = image.get_layer_index()
@@ -173,7 +174,7 @@ def button_color_click():
         apply_opacity()
 
 window = Tk()
-window.title("Layer stroke")
+window.title(FRIENDLY_NAME)
 window.resizable(False, False)
 
 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:
   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?')