Dialog mit zwei zwei datenbankgestützten Popupmenüs.

Dialog mit zwei zwei datenbankgestützten Popupmenüs.

Die Funktion ist eingeschränkt auch in comet_pdf verfügbar. In diesem Fall werden Einträge der ersten Werteliste popupEntries im Terminal als Aufzählungsliste gezeigt und mit der Eingabe der Listennummer kann ein Eintrag ausgewählt werden. Mit den Parametern title und label kann die Liste zusätzlich beschrieben werden. Weitere Angaben werden von comet_pdf nicht unterstützt.

Beachten Sie bitte, dass dabei die Bearbeitung des Programmes bis zur Eingabe unterbrochen wird.

Name Typ Default Beschreibung
Return int   0 : Abbruch

sonst : Okay
title char* "" Fenstertitel
okay char* "" Beschriftung des OK-Buttons

"" : "Okay"
cancel char* "" Beschriftung des Abbrechen-Buttons

"" : "Abbrechen"
dbc DBC - Datenbankverbindung, über die die Popupmenüs geladen werden
label char* - Kurze Beschriftung des Popupmenüs. Enthält der Name an beliebiger Stelle die Kennung '@INDEX' wird der Inhalt von mValue als Menü-Index (0-basiert) und nicht als ID ausgewertet. mValue == 2 ist dann also der dritte Eintrag im Popup, nicht der (erste) Eintrag mit der ID 2.
mValue int* - Beim Aufbau wird versucht, den Eintrag mit dem übergebenen Wert im Popup auszuwählen (ID oder Index bei label3 mit '@INDEX'). Nach Dialog-Ende mit "Okay" enthält die Variable die ID (oder den Index) des ausgewählten Eintrages.
selectStmt char* - Select zum Laden der Popupeinträge, liefert ID und Name, z.B select id, name, value from domain where id > 0
nullEntry char* - Name des Popupeintrag für ID 0. Leerstring verhindert den Eintrag
popupEntries IDTypeList - Liste von Einträgen für das Popup. Ist der Parameter ungleich 0, werden die Angaben in dbc, selectStmt und nullEntry ignoriert und das Popup wird mit den ID1/String-Werten dieser Liste gefüllt. 0 - beliebige viele Zeichen
⇨ Zweites Popup-Menü.

Die Einträge werden bei Auswahländerungen im ersten Popup neu geladen (ab CS4). Dabei werden alle <ID> der Anweisung durch die aktuelle ID im ersten Popup ersetzt. Wurde das zweite Popup mit Werten einer Liste gefüllt (entriesPopup2 != 0), wird das Popup bei Änderungen des ersten Popupmenüs nicht neu geladen.
labelPopup2 char* - Kurze Beschriftung des Popupmenüs. Enthält der Name an beliebiger Stelle die Kennung '@INDEX' wird der Inhalt von valuePopup2 als Menü-Index (0-basiert) und nicht als ID ausgewertet. valuePopup2 == 2 ist dann also der dritte Eintrag im Popup, nicht der (erste) Eintrag mit der ID 2.
valuePopup2 int* - Beim Aufbau des Dialoges wird versucht, den Popupentrag mit dieser ID auszuwählen.

Enthält labelPopup2 die Markierung @INDEX, wird der Wert als (0-basierter) Index im Menü verwendet. Am Ende des Dialoges enthält die Variable die ID des ausgewählten Eintrages des zweiten Popupmenüs.
selectStmtPopup2 char* - Anweisung zum Füllen des zweiten Popupmenüs. Die Anweisung muss jeweils eine Zahl und einen String liefern. Die Zahl ist die ID des Eintrages, der String der angezeigte Text.

nullentryPopup2 char* - Nulleintrag für das zweite Popup. Ist die Angabe nicht leer, wird der Eintrag als erster in das Popup eingetragen.
entriesPopup2 IDTypeList - Zweites Popup mit Hilfe dieser Liste füllen. Ist die Angabe ungleich 0, werden selectStmtPopup2 und nullentryPopup2 ignoriert und das zweite Popup wird mit den ID1/String-Werten dieser Liste gefüllt.
Preconditions
#include "internal/types.h"
#include "internal/panels.h"
#include "internal/products.h"

Das erste Menü enthält alle Templates, die Untertemplates haben. Im zweiten Popup werden jeweils die Untertemplates gezeigt.

#include "internal/types.h"
int main () { int id = 50; int id2 = 0; int ok; char mainTemplates [1024]; char subTemplates [1024];
strcpy (mainTemplates, "select id, name from pageitems where id > 0 and spreadid < 2"); strcpy (subTemplates, "select id, concat (name, ', Links') from pageitems where id = <ID>"); strcat (subTemplates, " union"); strcat (subTemplates, " select id, concat (name, ', Rechts') from pageitems where spreadid = 3 and leftid = <ID>"); strcat (subTemplates, " union"); strcat (subTemplates, " select id, concat (name, ', Fortsetzung-Links') from pageitems where rightid > 0 and rightid = (select id from pageitems where leftid > 0 and leftid = (select continueid from pageitems where id = <ID>))"); strcat (subTemplates, " union"); strcat (subTemplates, " select id, concat (name, ', Fortsetzung-Rechts') from pageitems where leftid > 0 and leftid = (select continueid from pageitems where id = <ID>)");
ok = askpopup2 (   "Templates importieren", "", "",
  0,
  "Templates",   &id,   mainTemplates,   "",   0,
  "Subtemplates",   &id2,   subTemplates,   "",   0); if (!ok) return 0;
showmessage ("Popup1 : %d\nPopup2 : %d", id, id2);
return 0; }

Die beiden Popupmenüs enthalten jeweils alle Produkte, die gerade angezeigt werden. Als Eintragskennung wird jeweis der Index im Popup verwendet.

#include "internal/types.h"
#include "internal/panels.h" 
#include "internal/products.h"
int main () { int ix1 = 0; int ix2 = 0; int ok; IDTypeList fullIDs = idtypelist::alloc (); ProductList products = productlist::get ("list"); Product p;
for (p = productlist::first (products); p; p = productlist::next (products)) { ++ix1; idtypelist::append ( &npsb; fullIDs, &npsb; ix1, &npsb; 0, &npsb; 0, &npsb; product::gets (p, kRow1)); }
ix1 = 0; ix2 = 1; ok = askpopup2 (   "Auswahl zweier Produkte", "", "",   0,   "Produkt 1@INDEX", &ix1, "", "", fullIDs,   "Produkt 2@INDEX", &ix2, "", "", fullIDs); if (!ok) return 0;
idtypelist::get_from_panel (fullIDs, kPanelProducts, kAll);
showmessage ("Produkt 1 : [%d, %d, %d, '%s']",   idtype::id (idtypelist::get (fullIDs, ix1)),   idtype::id2 (idtypelist::get (fullIDs, ix1)),   idtype::id3 (idtypelist::get (fullIDs, ix1)),   idtype::stringid (idtypelist::get (fullIDs, ix1))); showmessage ("Produkt 2 : [%d, %d, %d, '%s']",   idtype::id (idtypelist::get (fullIDs, ix2)),   idtype::id2 (idtypelist::get (fullIDs, ix2)),   idtype::id3 (idtypelist::get (fullIDs, ix2)),   idtype::stringid (idtypelist::get (fullIDs, ix2)));
return 0; }

Und hier ein Beispiel für comet_pdf, das folgende Ausgabe erzeugt:

int main ()
{
    int 		res;
    IDTypeList	li = idtypelist::alloc ();
    IDType		id;
idtypelist::append (li, 1, 0, 0, "aaa"); idtypelist::append (li, 2, 0, 0, "bbb"); idtypelist::append (li, 3, 0, 0, "ccc"); idtypelist::append (li, 4, 0, 0, "ddd"); idtypelist::append (li, 5, 0, 0, "eee");
if (askpopup2 (   "This is a testt",   "", "", 0,   "Your choice",   &res,   0, 0,   li)) { id = idtypelist::get (li, res); printf ("Result : Index %d, Value '%s'\n", res, idtype::stringid (id)); }
return 0; }

Seit
Version 3.2.2 R2364, 19. März 2011
comet_pdf support since v4.2 R31300, 21. Jul 2022

Verfügbarkeit
priint:comet InDesign® Plug-Ins, comet_pdf

Alphabetic index HTML hierarchy of classes or Java