[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: 40

21. Sep 2018, 20:44
Beitrag # 1 von 5
Bewertung:
(3869 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"); }
}
})();

X

Korrektes Schließen von ScriptUI Dialogen?

Gerald Singelmann
  
Beiträge gesamt: 6269

22. Sep 2018, 11:40
Beitrag # 2 von 5
Beitrag ID: #566441
Bewertung:
(3841 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: 40

22. Sep 2018, 12:51
Beitrag # 3 von 5
Beitrag ID: #566444
Bewertung:
(3832 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);



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: 6269

22. Sep 2018, 14:21
Beitrag # 4 von 5
Beitrag ID: #566445
Bewertung:
(3820 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: 40

22. Sep 2018, 14:37
Beitrag # 5 von 5
Beitrag ID: #566447
Bewertung:
(3815 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...


als Antwort auf: [#566445]
X