Forenindex » Programme » Print/Bildbearbeitung » Adobe InDesign Skriptwerkstatt » In Absatzformatpalette ausgewählte Absatzformate ermitteln

In Absatzformatpalette ausgewählte Absatzformate ermitteln

Martin Fischer
  
Beiträge gesamt: 12783

13. Dez 2019, 07:55
Bewertung:

gelesen: 6560

Beitrag als Lesezeichen
Guten Morgen,

ist es möglich, per Skript eine Auswahl von Absatzformaten in der Absatzformatpalette zu ermitteln?

Zwar habe ich daran erhebliche Zweifel, aber möglicherweise übersehe ich etwas.

Viele Grüße
Martin


In Absatzformatpalette ausgewählte Absatzformate ermitteln

WernerPerplies
Beiträge gesamt: 2762

13. Dez 2019, 10:39
Bewertung:

gelesen: 6539

Beitrag als Lesezeichen
Moin Herr Fischer,
Zitat ist es möglich, per Skript eine Auswahl von Absatzformaten in der Absatzformatpalette zu ermitteln?

Meinen Sie ausgewählte Formate in der Palette finden?
oder
Formate mit bestimmten Eigenschaften ermitteln und ggf. gruppieren.

Ich vermute, eher Ersteres, oder?

Dann sind Ihre Zweifel wohl berechtigt.

Ein wenig von hinten durch den Kopf:
Vielleicht schaffen Sie es mit MenuAction.invoke()-> Neue Gruppe aus Formaten (temporär), danach diese Gruppe wieder löschen.

Einen schönen Tag wünscht

Werner Perplies
Praxisnahe Skript-Lösungen und Skript-Programmierung für Adobe InDesign
Aktuelles (Stand: 14.02.2024)
Kundenstimmen

In Absatzformatpalette ausgewählte Absatzformate ermitteln

Martin Fischer
  
Beiträge gesamt: 12783

13. Dez 2019, 11:13
Bewertung:

gelesen: 6520

Beitrag als Lesezeichen
Hallo Herr Perplies,

ja, ich meinte Ersteres.

Aber Ihr Vorschlag klingt interessant, so mutig das auch ist.

Man müsste noch ein paar Dinge abfangen (gleichnamige Absatzformate aus unterschiedlichen Gruppen temporär umbenennen und wieder einen Weg zurück bahnen).

Aber wenn es gar nicht anders geht, dann könnte dies tatsächlich eine Tür öffnen.

Vielen Dank für den Tipp.

Viele Grüße
Martin


In Absatzformatpalette ausgewählte Absatzformate ermitteln

WernerPerplies
Beiträge gesamt: 2762

13. Dez 2019, 11:24
Bewertung:

gelesen: 6502

Beitrag als Lesezeichen
Hallo Herr Fischer,
Zitat Man müsste noch ein paar Dinge abfangen (gleichnamige Absatzformate aus unterschiedlichen Gruppen temporär umbenennen und wieder einen Weg zurück bahnen).

Da könnte Ihnen meine WpsStylesClass helfen.

Einen schönen Tag wünscht

Werner Perplies
Praxisnahe Skript-Lösungen und Skript-Programmierung für Adobe InDesign
Aktuelles (Stand: 14.02.2024)
Kundenstimmen

In Absatzformatpalette ausgewählte Absatzformate ermitteln

Martin Fischer
  
Beiträge gesamt: 12783

13. Dez 2019, 12:00
Bewertung:

gelesen: 6494

Beitrag als Lesezeichen
Mal seh’n.

Vielleicht etikettiere ich die Absatzformate auch einfach mit insertLabel() und Infos zur ursprünglichen Gruppe und Namen.

Viele Grüße
Martin


In Absatzformatpalette ausgewählte Absatzformate ermitteln

Uwe Laubender
Beiträge gesamt: 5319

13. Dez 2019, 14:17
Bewertung:

gelesen: 6474

Beitrag als Lesezeichen
Hallo Martin,

Allgemein formuliert: Du brauchst im günstigsten Fall einen Menübefehl des Absatzformate-Bedienfeldes, der ohne Nachfragen an den Benutzer etwas macht.

"Neue Gruppe aus Formaten…" geht nicht.
Da kommt ein Dialog nach, der per Skript schwierig zu beantworten ist.

Bei einem ausgewählten Absatzformat:
Pech. "Format duplizieren…" öffnet ein weiteres Fenster.
Es bietet sich nur an: "Format löschen…" falls das Format nicht benutzt wird.
Wird es benutzt: Keine Chance

Bei zwei oder mehreren ausgewählten Absatzformaten:
"Formate duplizieren…"
Das sollte immer ohne Nachfrage funktionieren.
*****
Mit herzlichem Gruß,
Uwe Laubender

In Absatzformatpalette ausgewählte Absatzformate ermitteln

WernerPerplies
Beiträge gesamt: 2762

13. Dez 2019, 14:23
Bewertung:

gelesen: 6470

Beitrag als Lesezeichen
Zitat Vielleicht etikettiere ich die Absatzformate auch einfach mit insertLabel() und Infos zur ursprünglichen Gruppe und Namen.

Warum einfach, wenn's .... :-)
Code
#include WpsStylesClass.jsx; 
var /*WpsStyleClass*/ wpsParagraphStyles = new WpsStylesClass({root: app.activeDocument, type: "paragraph"});
var /*Array*/styleGroups = wpsParagraphStyles.styleGroups;
// properties(styleGroups[0]) -> parent,parentName,name,styles,path


Und hier hätte ich noch eine Alternative, mit dieser Funktion fülle ich eine DropDownList zur Auswahl eines beliebigen Formates:
Code
var /*Object*/p = {type: "paragraph", parent: app.activeDocument} 
var /*Array*/allStyles = wpsDdlStylesContentList({type: "paragraph", parent: app.activeDocument});
var /*Int*/l = allStyles.length;
var /*Array*/styleList = new Array(l);
for (var j = 0; j < l; j++)
styleList[j] = allStyles[j].value;
alert(styleList.join("\n"));

/*Array*/function wpsDdlStylesContentList(/*Object*/p)
{
var /*Array*/allStylesA = [];

getAllStyles({type: p.type, name: "/", parent: p.parent, styles: allStylesA});
return allStylesA;
/*Void*/function getAllStyles(/*Object*/p)
{
try
{
/*Style*/style = null, /*StyleGroup*/ styleGroup = 0;

for (var j = 0; j < p.parent[p.type + "Styles"].length; j++)
{
style = p.parent[p.type + "Styles"][j];
p.styles.push({name: p.name + style.name, value: p.name + style.name, id: style.id});
}
for (var j = 0; j < p.parent[p.type + "StyleGroups"].length; j++)
{
styleGroup = p.parent[p.type + "StyleGroups"][j];
getAllStyles({type: p.type, name: p.name + styleGroup.name + "/", parent: styleGroup, styles: p.styles});
}

}
catch (error)
{
// wpsHandleError(error, $.stack, "wpsDdlStylesContentList");
}
}

}


Viele Grüße
Werner

Einen schönen Tag wünscht

Werner Perplies
Praxisnahe Skript-Lösungen und Skript-Programmierung für Adobe InDesign
Aktuelles (Stand: 14.02.2024)
Kundenstimmen

(Dieser Beitrag wurde von WernerPerplies am 13. Dez 2019, 14:26 geändert)

In Absatzformatpalette ausgewählte Absatzformate ermitteln

WernerPerplies
Beiträge gesamt: 2762

13. Dez 2019, 14:40
Bewertung:

gelesen: 6463

Beitrag als Lesezeichen
Moin Uwe,

danke, dass Du meine Idee ausprobiert hast.

Deine Idee, mit der Kopie wäre natürlich toll, wenn da die Einschränkung mit "zwei oder mehreren" nicht wäre.

Letztendlich wäre vermutlich ein eigenes DialogFenster die einzige Lösung für das Problem (wieder einmal! :-))

Einen schönen Tag wünscht

Werner Perplies
Praxisnahe Skript-Lösungen und Skript-Programmierung für Adobe InDesign
Aktuelles (Stand: 14.02.2024)
Kundenstimmen

In Absatzformatpalette ausgewählte Absatzformate ermitteln

Martin Fischer
  
Beiträge gesamt: 12783

13. Dez 2019, 15:15
Bewertung:

gelesen: 6457

Beitrag als Lesezeichen
Antwort auf [ Werner Perplies ] Letztendlich wäre vermutlich ein eigenes DialogFenster die einzige Lösung für das Problem (wieder einmal! :-))


Im ScriptUI for dummies von Peter Kahrel gibt es auf S. 48 (v. 2.16) ein treeview-Beispiel mit eben den Absatzformaten und Absatzformatgruppen eines Dokuments.



Allerdings lässt die treeview-Liste keine Mehrfachauswahl zu. Frown
Oder täusche ich mich?

Viele Grüße
Martin



(Dieser Beitrag wurde von Martin Fischer am 13. Dez 2019, 15:18 geändert)

Anhang:
treeview.png (93.1 KB)

In Absatzformatpalette ausgewählte Absatzformate ermitteln

Martin Fischer
  
Beiträge gesamt: 12783

13. Dez 2019, 15:23
Bewertung:

gelesen: 6450

Beitrag als Lesezeichen
Antwort auf: Allerdings lässt die treeview-Liste keine Mehrfachauswahl zu. Frown
Oder täusche ich mich?


Diese Frage haben sich andere auch schon gestellt:

Adobe Support Community > InDesign
Creating list of checkboxes?

Viele Grüße
Martin


In Absatzformatpalette ausgewählte Absatzformate ermitteln

WernerPerplies
Beiträge gesamt: 2762

13. Dez 2019, 15:36
Bewertung:

gelesen: 6443

Beitrag als Lesezeichen
Hallo Herr Fischer,

das Treeview benutze ich seit CC nicht mehr, weil es damals plötzlich nicht mehr funktionierte.

Deshalb kann ich Ihnen diese Frage nicht beantworten.

Grundsätzlich können sie aber mit Sicherheit eine eigene Selektionsroutine schreiben, in dem Sie jedem selektierten Knoten einen Marker im Text hinzufügen, aber dabei funktionieren die Standardwerkzeuge zur Selektion nicht.

Ich löse solche Aufgaben je nach Anforderung mit Listboxen und DropDownlists.

Für Ihre Problematik bieten sich aus meiner sich drei Lösungen an:

1. einfache Listbox mit Pfadangaben,
2. Zwei nebeneinander liegende Listboxen
links parent, rechts childs für den links ausgewählten Eintrag, bei tieferer Schachtelung rutscht die rechte Spalte nach links, rechts wird dann mit Eintag von links gefüllt.
3. Für jede Ebene wird on the Fly ein neues Fenster mit einer Listbox für die tiefere Ebene geöffnet.

Alle drei Varianten habe ich schon verwendet.

Einen schönen Tag wünscht

Werner Perplies
Praxisnahe Skript-Lösungen und Skript-Programmierung für Adobe InDesign
Aktuelles (Stand: 14.02.2024)
Kundenstimmen

In Absatzformatpalette ausgewählte Absatzformate ermitteln

WernerPerplies
Beiträge gesamt: 2762

13. Dez 2019, 15:49
Bewertung:

gelesen: 6435

Beitrag als Lesezeichen
Natürlich können Sie auch solch eine Darstellung mit einzelenen Checkboxen nachbilden, aber dass wäre dann schon eine recht anspruchsvolle Aufgabe.

Im dem von Ihnen verlinkten Beitrag wird ja auch noch CEP angesprochen.

Allgemeiner ausgedrückt können Sie natürlich auch für die Dialoge InDesign-Extendedskript komplett verlassen und eine Lösung auf PWA-Basis schreiben, dafür würde sich zum Beispiel Electron anbieten, eine von mir für die Zukunft angestrebte Lösung, aber für Sie jetzt sicher ein Overkill.

Einen schönen Tag wünscht

Werner Perplies
Praxisnahe Skript-Lösungen und Skript-Programmierung für Adobe InDesign
Aktuelles (Stand: 14.02.2024)
Kundenstimmen

In Absatzformatpalette ausgewählte Absatzformate ermitteln

Uwe Laubender
Beiträge gesamt: 5319

16. Dez 2019, 11:31
Bewertung:

gelesen: 6219

Beitrag als Lesezeichen
Hallo Werner,

wo Du jetzt Listboxen angesprochen hast. Da gibt's mit dem aktuellen InDesign 2020 ein Darstellungsproblem mit der Eigenschaft checked.

Hier die Details:

listitem.checked on indesign 15.0 (2020)
Laubender, Nov 12, 2019

https://community.adobe.com/...m-p/10734040#M160426

Hier etwas zum Testen:

Code
/* 

BUG with InDesign 2020 version 15.0.0.155
BUG with InDesign 2020 version 15.0.1.209

checkmarks of listbox items are NOT visible.

Property checked can have 3 values:

undefined
false
true

See discussion here:
https://community.adobe.com/t5/InDesign/listitem-checked-on-indesign-15-0-2020/m-p/10734040#M160426

*/

#targetengine "Uwe-Listbox-Test"

var x = new Window ("dialog","test win", [0,0,150,150]);
var y = x.add("listbox",[10,10,140,116]);

for (var n=0; n<7; n++)
{
y.add( "item", "test " + n );

// Leave the first two items as undefined:
if( n < 2 ){ continue };

// Set the third item to checked:
if( n == 2 ){ y.items[n].checked = true ; continue };

// All other items to unchecked:
y.items[n].checked = false ;

};

for( var n=0; n<y.items.length; n++ )
{
$.writeln( n +"\t"+ y.items[n].checked );
};

x.center();
x.show();

*****
Mit herzlichem Gruß,
Uwe Laubender

In Absatzformatpalette ausgewählte Absatzformate ermitteln

WernerPerplies
Beiträge gesamt: 2762

16. Dez 2019, 15:19
Bewertung:

gelesen: 6198

Beitrag als Lesezeichen
Moin Uwe,

du hast recht!

Es ist schon bewundernswert, wie Adobes Programierer es immer wieder schaffen, einfache Betriebssystemmodule kapputt zu programmieren.

Ich muss also davon ausgehen, dass einige meiner Skripte unter CC2020 nicht mehr funktionieren.

Es ist also wirklich höcheste Zeit sich bei der Dialogprogrammierung von Adobe zu trennen.

Einen schönen Tag wünscht

Werner Perplies
Praxisnahe Skript-Lösungen und Skript-Programmierung für Adobe InDesign
Aktuelles (Stand: 14.02.2024)
Kundenstimmen

In Absatzformatpalette ausgewählte Absatzformate ermitteln

Uwe Laubender
Beiträge gesamt: 5319

22. Dez 2019, 20:24
Bewertung:

gelesen: 5927

Beitrag als Lesezeichen
Antwort auf: Moin Uwe,

danke, dass Du meine Idee ausprobiert hast.

Deine Idee, mit der Kopie wäre natürlich toll, wenn da die Einschränkung mit "zwei oder mehreren" nicht wäre.

Letztendlich wäre vermutlich ein eigenes DialogFenster die einzige Lösung für das Problem (wieder einmal! :-))


Hallo Werner,
neue Überlegung zum Problem mit einem ausgewählten Absatzformat:

Neuer Textrahmen dem Dokument hinzufügen mit ein wenig Inhalt.
Das zugewiesene Absatzformt des ersten Absatzes müsste das ausgewählte Format im Absatzformatbedienfeld sein.

Code
var tempFrame = app.documents[0].textFrames.add 
({ geometricBounds : [0,0,100,100] , contents : "Test" });
var selectedParaStyle = tempFrame.paragraphs[0].appliedParagraphStyle;

tempFrame.remove();

$.writeln( selectedParaStyle.name +"\r"+ selectedParaStyle.id +"\r"+ selectedParaStyle.parent );



Nun ja, das hat noch einen Haken:

Ist eine Formatgruppe ausgewählt oder es ist nichts ausgewählt, erinnert InDesign an die letzte Formatauswahl und verwendet diese für den temporären Textrahmen.
*****
Mit herzlichem Gruß,
Uwe Laubender

In Absatzformatpalette ausgewählte Absatzformate ermitteln

Uwe Laubender
Beiträge gesamt: 5319

30. Dez 2019, 14:26
Bewertung:

gelesen: 1806

Beitrag als Lesezeichen
Es sei noch folgendes angemerkt:

Mittlerweile habe ich einen Lösungsversuch unternommen, der über das Auslesen der Menübefehle im Absatzformat-Bedienfeld funktioniert. Mit isValid und enabled für einzelne menuItems kommt man da sehr, sehr weit. Eigentlich kommt man damit direkt zum Ziel.

Allerdings verhagelte mir folgendes Verhalten das Ergebnis:

Das Update der menuItems kommt sehr oft erst, wenn das Menü vom Benutzer aufgerufen wird. Und genau das, das Aufrufen des Menüs, lässt sich mit ExtendScript nicht bewerkstelligen. Da fehlt dem Objekt menu leider die entsprechende Methode.
*****
Mit herzlichem Gruß,
Uwe Laubender

In Absatzformatpalette ausgewählte Absatzformate ermitteln

WernerPerplies
Beiträge gesamt: 2762

30. Dez 2019, 14:46
Bewertung:

gelesen: 1799

Beitrag als Lesezeichen
Moin Uwe,

ich bewundere ja immer wieder Deinen Ehrgeiz, ein Problem zu lösen, danke dafür.

Aber ich denke, hier ist das eigene Menü wirklich der besserer Weg, unabhängig davon, wie es dann realisiert wird.

Einen schönen Tag wünscht

Werner Perplies
Praxisnahe Skript-Lösungen und Skript-Programmierung für Adobe InDesign
Aktuelles (Stand: 14.02.2024)
Kundenstimmen

In Absatzformatpalette ausgewählte Absatzformate ermitteln

Martin Fischer
  
Beiträge gesamt: 12783

30. Dez 2019, 16:31
Bewertung:

gelesen: 1782

Beitrag als Lesezeichen
Hallo Uwe,

die ursprüngliche Aufgabenstellung hat sich nach Rücksprache mit dem Interessenten dahingehend verändert und präzisiert, dass sie mit einem einfachen eigenen Dialog erledigt werden kann.

Unter "ausgewählten Absatzformaten" ist nunmehr "alle Absatzformate einer per Dialog auszuwählenden Formatgruppe" zu verstehen.

Klappt prima über ein Pull-Down Menü der Absatzformatgruppen.


Davor konnte ich bereits Erfolge mit der Duplizieren-Methode erzielen, sofern mehr als ein Absatzformat und darunter nicht [Einf. Absatz] ausgewählt waren.


Einen Guten Rutsch!
Martin