Xdv-Library
Die Xdv-Library verwendet Routinen aus X11R5 (Library X11), den X Toolkit Intrinsics (Library Xt) und das OSF/Motif-Widget-Set Version 1.2 (Library Xm). Bei der Übersetzung der Xdv-Library müssen diese Libraries noch nicht eingebunden werden:
cc -c libXdv.c
ar -r libXdv.a libXdv.o
Erst bei der Verwendung der Xdv-Library müssen nicht nur sie selbst, sondern auch die drei Basis-Bibliotheken angegeben werden:
cc -o your_exec your_source.c -lXdv -lXm -lXt -lX11
Die Reihenfolge der Bibliotheken sollte wie genannt übernommen werden; Motif definiert einige Routinen der Intrinsics neu! Die Xdv-Library sollte im Verzeichnis /usr/local/lib stehen; dieses Verzeichnis sollte ebenso in den Pfad-Variablen C_LIBRARY_PATH und LD_LIBRARY_PATH enthalten sein wie die Verzeichnisse der drei anderen Bibliotheken. Ihre Include-Datei Xdv.h gehört in das Verzeichnis /usr/local/include, das in der Pfad-Variablen C_INCLUDE_PATH aufgeführt sein sollte.
Alle Namen von Konstanten oder Unterprogrammen in der Xdv-Library beginnen mit der Library-Kennung Xdv.
Dimentor
Ein Dimentor ist ein DIMENsion vekTOR. Seine Definition lautet:
typedef struct Dimentor { Cardinal size; Dimension *value; } Dimentor ;
Der Dimentor wird als Funktionsergebnis und -Parameter verwendet.
Table
Eine Table (=Widget-Tabelle) ist ein horizontales RowColumn-Widget (eine Zeile); die Einträge sind die -unterschiedlich breiten- Spalten einer Matrix. Jede Spalte ist ein vertikales RowColumn-Widget mit Einträgen unterschiedlicher Höhen. Die Breiten- und Höhenunterschiede sollen tabellenartig ausgeglichen werden. Das Resultat ist eine Widget-Tabelle mit unterschiedlich breiten Spalten und verschieden hohen Zeilen, aber pro Zeile und Spalte gleich großen Einträgen. Mit einer Kontrollvariablen wird die Ausrichtung der Tabellen-Einträge in ihren Zellen sowie das Aussehen der Zeilen und Spalten bestimmt. Der Wert dieser Variablen wird aus den vordefinierten Alignment-Konstanten zusammen"ge-oder-t". Wenn eine Table als Prozedur-Parameter erwartet, statt dessen aber irgendein Widget-Typ übergeben wird, kann das Resultat beliebiger Unsinn sein.
Tabula
Eine Tabula (=Widget-Tabelle) ist ein vertikales RowColumn-Widget (eine Spalte); die Einträge sind die -unterschiedlich hohen- Zeilen einer Matrix. Die Bemerkungen zur Table gelten analog.
Alignment
Alignment-Konstanten werden bei der Ausrichtung und Anordnung z.B. von Widget-Tabellen verwendet. Ihre Namen enthalten den Text Align, meist mit vorangestelltem Buchstaben H für Horizontal oder V für Vertikal. Darauf folgt eine Beschreibung der Art der Ausrichtung: Center für Zentriert, Left oder Right für links- bzw. rechtsbündige Ausrichtung (nur horizontal), Top oder Bottom für kopf- bzw. fußbündige Ausrichtung (nur vertikal) sowie Various bzw. Equal für variable bzw. gleichmäßige Spaltenbreite (horizontal) bzw. Zeilenhöhe (vertikal). Die Konstanten XdvAlign, XdvHAlign und XdvVAlign bilden Masken für die jeweiligen Unter-Konstanten. Die Vorgabe-Werte Center und Various sind zu Null definiert.
XdvAlign
XdvHAlign
XdvHAlignCenter
XdvHAlignLeft
XdvHAlignRight
XdvHAlignVarious
XdvHAlignEqual
XdvVAlign
XdvVAlignCenter
XdvVAlignTop
XdvVAlignBottom
XdvVAlignVarious
XdvVAlignEqual
Dimentor
Dimension XdvDimentorMax ( Dimentor dv )
berechnet das Maximum der Einträge des Dimension-Feldes dv.value.
Dimension XdvDimentorSum ( Dimentor dv )
berechnet die Summe der Einträge des Dimension-Feldes dv.value.
Table
Dimension XdvTableColumnWidth ( Widget column )
berechnet die Breite der Widget-Spalte column als Maximum der Breiten der einzelnen Widget-Einträge.
Dimension XdvTableWidth ( Table table, int align, Dimension gap )
berechnet die Breite der Widget-Tabelle table als Summe ihrer Spaltenbreiten oder als Vielfaches der maximalen Spaltenbreite (abhängig von align). Dazu kommt zwischen je zwei Spalten der Abstand gap.
Dimension XdvTableRowHeight ( Table table, Cardinal j )
berechnet die Höhe der Zeile j der Widget-Tabelle table als Maximum der Höhen der einzelnen Widget-Einträge.
Dimension XdvTableHeight ( Table table, int align, Dimension gap )
berechnet die Höhe der Widget-Tabelle table als Summe ihrer Zeilenhöhen oder als Vielfaches der maximalen Zeilenhöhe (abhängig von align). Dazu kommt zwischen je zwei Zeilen der Abstand gap.
int XdvTableDimensions ( Table table, Dimentor *hor, Dimentor *ver )
berechnet die Spaltenbreiten und Zeilenhöhen der Widget-Tabelle table gemäß der Alignment-Option Various (ohne zusätzliche Abstände). Wenn die Einträge von table keinerlei Kind-Widgets haben, wird table selbst als eine einzeilige Tabelle behandelt und die Werte dazu berechnet. Ergebnis ist das Produkt der Zeilen- und Spaltenzahl; ein negatives Vorzeichen verweist auf obigen Sonderfall.
void XdvTableTrim ( Table table, int align, Dimension Hgap, Dimension Vgap )
positioniert die Einträge der Widget-Tabelle table gemäß den Alignment-Angaben align. Zwischen je zwei Zeilen oder Spalten wird der Abstand Vgap bzw. Hgap gelassen.
String & String*
unsigned int XdvStringIndex ( unsigned char *str, unsigned char **set )
bestimmt den Index des Eintrags str im Feld set (erstes Auftreten). Wenn der Eintrag nicht im Feld enthalten ist, wird die Länge des Feldes zurückgeliefert.
String XdvEventType ( XEvent *eve )
liefert den Typ des XEvents eve in Text-Form; Verwendung z.B. bei der Fehlerbehandlung.
String XdvWidgetClass ( Widget w )
liefert die Widget-Klasse des Widgets w in Text-Form; Verwendung z.B. bei der Fehlerbehandlung.
(noch nicht realisiert)
Sonstiges
Widget XdvParentOfClass ( Widget w, WidgetClass wc )
versucht, in der Widget-Hierarchie ein Elternwidget zu w der Klasse wc zu finden. Wenn w selbst von der gesuchten Klasse ist, ist es auch das Resultat. Wenn kein passendes Widget in der Hierarchie vertreten ist, wird NULL das Ergebnis.
Widget XdvShell ( Widget w )
liefert die Eltern-Shell zu w. Wenn w selbst eine Shell ist, ist es auch das Ergebnis.
void XdvShellRaise ( Widget w )
legt das Widget w nach oben auf den Stack; wenn es realisiert, gemanaged und gemapped ist, ist es anschließend mit Sicherheit sichtbar.
void XdvShellPosition ( Widget w, int align )
versucht, das Widget w in seinem Root-Window gemäß dem Alignment-Wert align zu positionieren.
void XdvPosition ( Widget w, Position *xx, Position *yy )
bestimmt die Position des Widgets w innerhalb seines Windows.
String XdvPath ( Widget w )
liefert den kompletten Pfad des Widgets w in Text-Form. Der Pfad eines Widgets ist sein kompletter Name, jedoch ohne den Namen des Widgets selbst. Ein leerer Pfad wird als leerer String dargestellt, nicht als NULL-String. Trennzeichen für die einzelnen Widget-Namen im Pfad ist der Punkt '.'. Das Ergebnis ist ein neuer String, den der Nutzer selbst löschen muß (free()).
String XdvSubPath ( Widget w, Widget root )
liefert einen Teil-Pfad des Widgets w in Text-Form. Der Sub-Pfad eines Widgets ist sein Pfad, jedoch ohne den Pfad des Widgets root; dabei ist vorausgesetzt, daß root ein Eltern-Widget von w ist. Ist root = NULL oder kein Eltern-Widget von w, so wird der komplette Pfad geliefert; ist w = NULL oder = root, so resultiert ein leerer String. Das Ergebnis ist ein neuer String, den der Nutzer selbst löschen muß (free()). Trennzeichen für die einzelnen Widget-Namen im Sub-Pfad ist der Punkt '.'.
String XdvName ( Widget w )
String XdvFullName ( Widget w )
wie XdvPath, nur daß der Name des Widgets w mit enthalten ist.
String XdvSubName ( Widget w, Widget root )
String XdvTailName ( Widget w, Widget root )
wie XdvSubPath, nur daß der Name des Widgets w mit enthalten ist.
void XdvTree ( FILE *out, Widget w )
gibt eine Namensliste aller Widgets in der Hierarchie unterhalb (inclusive) von w auf den File out. Die Namen werden mit XdvName bestimmt.
void XdvSubTree ( FILE *out, Widget w, Widget root )
wie XdvTree, nur daß die Namen der Widgets mit XdvSubName(...,root) bestimmt werden.
Klaus.Bernt@Math.Uni-Augsburg.DE, Mai '96