[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Korrektes Schließen von ScriptUI Dialogen?

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Print/Bildbearbeitung - Photos, Layout, Design
Themen
Beiträge
Moderatoren
Letzter Beitrag

Korrektes Schließen von ScriptUI Dialogen?

JeT
Beiträge gesamt: 34

21. Sep 2018, 20:44
Beitrag # 1 von 5
Bewertung:
(202 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen,

ich komm gerade nicht klar – ich bastel an einem Script, was mir u. a. ermöglicht eine ausgewählte Verknüpfung zu verschieben.

Problem: Das Relinken nach dem Verschieben klappt nicht, weil InDesign den Dialog anscheinend nicht korrekt zu schließen scheint:

Zitat Fehler: Die Anforderung kann nicht bearbeitet werden, da ein modales Dialogfeld oder eine modale Warnmeldung aktiv ist.


Ich könnte jetzt Window("palette") nutzen – das ist aber eigentlich nicht das, was ich will.


Hat jemand eine Idee?



Hier eine aufs nötigste reduzierte Variante:

Code
(function() { 
var gDoc = app.activeDocument;

if ((gDoc.allGraphics.length != 0) && (app.selection.length == 1)) {
switch (app.selection[0].constructor.name) {
case "Rectangle":
case "Oval":
case "Polygon":
if (app.selection[0].graphics.length != 0){
var cLink = app.selection[0].graphics.item(0).itemLink;
}
break;
case "Image":
case "EPS":
case "PDF":
var cLink = app.selection[0].itemLink;
break;
}
}

dialog(cLink);

function dialog(cLink) {
var dialog = new Window("dialog", "Verknüpfung verwalten");
var moveButton = dialog.add('button {text: "Datei zur indd verschieben..."}');
moveButton.onClick = function () { dialog.close(); moveLink(cLink); }

dialog.show();
}

function moveLink (cLink) {
if (cLink.status != LinkStatus.NORMAL) return;
if (gDoc.saved == true) var targetFolder = gDoc.filePath;
else {
var targetFolder = Folder(Folder.desktop).selectDlg();
if (targetFolder == null) exit();
}

var newFile = File(targetFolder.fsName+"/"+cLink.name);
if (!newFile.exists){
var cFile = File(cLink.filePath);
var copyMe = cFile.copy(newFile);
if (copyMe == true) {
try { cLink.relink(newFile); } catch(e) { alert(e); }
// cFile.remove();
}
} else { alert("Die Verknüpfung gibt es am Zielort bereits!\n-> keine Änderung"); }
}
})();



Grüße
Jens



Heute ist nicht aller Tage, ich komme wieder, keine Frage!
X

Korrektes Schließen von ScriptUI Dialogen?

Gerald Singelmann
  
Beiträge gesamt: 6192

22. Sep 2018, 11:40
Beitrag # 2 von 5
Beitrag ID: #566441
Bewertung:
(174 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Aus der Dokumentation im OMV:
Zitat Window.close(return:Any)
ScriptUI Classes
Closes this Window
If an onClose() callback is defined for the window, calls that function before closing the window.
return (optional:
A number (?) to be returned from the show() method that invoked this window as a modal dialog.


Mit anderen Worten: Mit show() geht's in den modalen Modus. Mit dem Befehl direkt nach show() bekommt das Script wieder die Kontrolle. Dazwischen steht die Bearbeitung des InDesign-Dokuments still. Nichts machbar. Es sei denn, man nimmt eine palette statt eines dialogs, denn die ist nicht modal.

Mit noch anderen Worten: Wir müssten wissen, wieso der folgende Ansatz nicht reicht, um zu beurteilen, wie eine Lösung aussehen kann
Code
function() { 
var doc = app.activeDocument;
var clink = fetch_link( app.selection );

if( confirm( "Got Link\rWanna move the link?" ) ) {
move_link( clink );
}

function fetch_link( obj_array ) {
// do something to extract link from array
return link;
}
function move_link( link ) {
// move the link
}
}



als Antwort auf: [#566435]

Korrektes Schließen von ScriptUI Dialogen?

JeT
Beiträge gesamt: 34

22. Sep 2018, 12:51
Beitrag # 3 von 5
Beitrag ID: #566444
Bewertung:
(165 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Gerald,

danke für deinen Tipp.


Mit folgender Anpassung konnte ich es jetzt lösen:

Zitat var move = false;
moveButton.onClick = function () { move = true; dialog.close(); }

dialog.show();
if (move == true) moveLink(cLink);



Grüße
Jens



Heute ist nicht aller Tage, ich komme wieder, keine Frage!


als Antwort auf: [#566441]
(Dieser Beitrag wurde von JeT am 22. Sep 2018, 12:52 geändert)

Korrektes Schließen von ScriptUI Dialogen?

Gerald Singelmann
  
Beiträge gesamt: 6192

22. Sep 2018, 14:21
Beitrag # 4 von 5
Beitrag ID: #566445
Bewertung:
(153 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
globale Variablen sind sehr selten nicht böse.

Besser also:
Code
moveButton.onClick = function() { dialog.close(true) } 
dontMoveButton.onClick = function() {dialog.close(false); }

if ( dialog.show() ) move();



als Antwort auf: [#566444]

Korrektes Schließen von ScriptUI Dialogen?

JeT
Beiträge gesamt: 34

22. Sep 2018, 14:37
Beitrag # 5 von 5
Beitrag ID: #566447
Bewertung:
(148 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: globale Variablen sind sehr selten nicht böse.


Wieso global? Ist doch im dialog()-Scope? Oder verstehe ich da was falsch?


Abgesehen davon, brauche ich die Unterscheidung, welcher Button jetzt angeklickt wurde – mein komplettes Script hat noch einige andere Funktionen und Buttons (umbenennen, neu verlinken etc).

Habe hier nur einen Auszug, das mein Problem reproduzierbar machte...


Grüße
Jens



Heute ist nicht aller Tage, ich komme wieder, keine Frage!


als Antwort auf: [#566445]
Hier Klicken X

Veranstaltungen

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen. pdf-icon Hier eine kleine Anleitung.

Veranstaltungen
17.10.2018

München
Mittwoch, 17. Okt. 2018, 10.31 Uhr

Seminar

Als „Next Generation Publishing“ (NGP) bezeichnen wir bei Cleverprinting eine Arbeitsweise, bei der Druckdaten auf moderne Art produziert werden. Für Photoshop bedeutet dies: Sie arbeiten jederzeit medienneutral mit RGB-Daten, die RGB-CMYK-Konvertierung wird von InDesign erst während der Ausgabe geleistet. Sie arbeiten nichtdestruktiv, alle Bearbeitungsschritte können zu einem späteren Zeitpunkt zurückgenommen/verändert werden. Sie arbeiten verlustfrei, Skalierungen von Bildbestandteilen können mit Smart Objects im Nachhinein verändert werden. Und: Sie arbeiten effizient, indem Sie clevere, schnelle Filter und wo immer möglich auch Skripte zur Automatisierung einsetzen.

München, Mittwoch, 17.10.2018, 9.30 Uhr bic 17.30 Uhr, Schulungsgebühr 415,31 Euro (incl 19% MwSt)

Ja

Organisator: Cleverprinting.de

https://www.cleverprinting.de/schulungen/photoshop-next-generation/

Next Generation Publishing mit Adobe Photoshop
Veranstaltungen
18.10.2018

Online
Donnerstag, 18. Okt. 2018, 20.00 - 21.00 Uhr

Webinar

Den Start ins E-Commerce leicht gemacht

Ja

Organisator: Eric Mächler

Kontaktinformation: E-Mailinfo AT ericmaechler DOT com

https://events.genndi.com/register/818182175026318367/66670f3c07

Hier Klicken