
                              Vorstellung des

                     VISUALPREFS-ENTWICKLERINTERFACE

                        in Entstehung befindlich


Als Entwickler können Sie von einigen Features von VisualPrefs profitieren.

Obwohl es noch keine vollständige Entwickler-API für VisualPrefs gibt, ist
es bereits möglich, die von VisualPrefs ins System eingebundenen BOOPSI-
Klassen zu nutzen.

Der Sinn dieser Klassen liegt darin, Programmierern einen einfachen Weg
zum Erzielen des "VisualPrefs-Looks" an die Hand zu geben, ohne daß sie
darauf warten müssen, daß ich einen Patch für ihre Applikationen in
VisualPrefs einbaue. ;-)

Im Moment gibt es nur eine Klasse:

"tbiclass" - Dei Titelzeilenbildklasse

Diese Klasse stellt Bilder für die gängigsten, von Applikationen in die
Titelzeilen ihrer Fenster eingefügten Gadgets, zur Verfügung.
Als Beispiel seien hier das allgegenwärtige "iconify"-Gadget oder das
"Vorhängeschloß" von DirOpus 5 genannt.

Alle Programme, die diese Klasse benutzen, erhalten automatisch das gleiche
Aussehen für ihre Titelzeilenbilder, sofern VisualPrefs läuft. Das ist
wahrscheinlich besser, als x Versionen des gleichen Bildes zu haben...

Sie können "tbiclass" ebenso benutzen wie "sysiclass"; sie sind beide Unter-
klassen der "imageclass". Ein "tbiclass"-Bild kann durch den Aufruf von
NewObject() mit den folgenden Argumenten erzeugt werden:

SYSIA_DrawInfo - Dies ist absolut unerläßlich. Sie MÜSSEN einen DrawInfo-
                 Pointer auf "tbiclass" übergeben oder NewObject() wird
                 scheitern.

SYSIA_Which - Zur Angabe des gewünschten Bildes; momentan gibt es sechs
              Bildtypen:

              POPUPIMAGE    - Ein MUI-"pop-up"-Titelzeilengadget-Bild
              MUIIMAGE      - Ein MUI-"settings"-Titelzeilengadget-Bild
              SNAPSHOTIMAGE - Ein MUI "snapshot"Titelzeilengadget-Bild
              ICONIFYIMAGE  - Ein "iconify"-Titelzeilengadget-Bild
              PADLOCKIMAGE  - Ein DirOpus-"Vorhängeschloß"-Titelzeilen-
                              gadget-Bild
              TBFRAMEIMAGE  - Ein leeres Allzweck Titelzeilengadget-Bild

IA_Width, IA_Height - Diese werden nur vom TBFRAMEIMAGE-Typ wahrgenommen;
                      die anderen Bildtypen ignorieren sie und haben stets
                      dieselbe Größe wie das Tiefengadget-Bild.

SYSIA_ReferenceFont - Dieses wird nur vom TBFRAMEIMAGE-Typ wahrgenommen;
                      die anderen Bildtypen ignorieren es und haben stets
                      dieselbe Höhe wie das Tiefengadget-Bild.

Natürlich sollten Sie für den Fall eines Scheiterns von NewObject() ein
eingebautes Rückgriff-Bild für Ihr Titelzeilengadget bereitstellen.
Auf jeden Fall plane ich, bald eine Disk-basierende Freeware-"tbiclass"
image class herauszubringen, die Sie in die Distribution Ihrer Applikationen
einbeziehen können. Diese Klasse wird die benötigten Bilder zur Verfügung
stellen und wird automatisch durch die VisualPrefs-eigene ersetzt, falls
vorhanden.
Daher können Sie Ihre eingebauten Bilder sehr einfach gestalten. ;-)

Es ist wichtig, festzuhalten, daß jedes Vorkommen eines "tbiclass"-Bildes
einen Bild->LinkerRand-Wert von -1 haben wird. Dies sollte nicht geändert
werden, und Sie sollten Ihre Titelzeilengadgets entsprechend plazieren. Der
Grund für dieses offenbar seltsame Verhalten ist, daß die Bilder von Intui-
tion-Titelzeilengadget ebenfalls so funktionieren, und wir versuchen sollten,
so Intuition-kompatibel wie möglich zu bleiben.

Stellen Sie außerdem sicher, daß Sie die Größe Ihres Gadgets wenn nötig anpassen,
um sie der zurückgegebenen Bildgröße anzugleichen.

Ein mögliches Beispiel dessen wäre:

   ...

   /* Create the image */

   if (!(iconifyimage = NewObject(NULL,"tbiclass",SYSIA_Which,ICONIFYIMAGE,
                                                  SYSIA_DrawInfo,dri,
                                                  TAG_END)))
   {
      iconifyimage = builtin_iconifyimage;
   }

   /* Use the image */

   gad->GadgetRender = iconifyimage;
   ...

   /* Free the image */

   if (iconifyimage != builtin_iconifyimage) DisposeObject(iconifyimage);

   ...

Das ist alles. Bis jetzt habe ich keine wirkliche Include-Datei, daher fügen
Sie zur Verwendung der "tbiclass" in Ihren Applikationen die folgenden paar
Zeilen am Beginn Ihres Quellcodes ein. :-]

------- schnipp! -------8<------- schnipp! -------8<------- schnipp! -------

#define POPUPIMAGE    (101)
#define MUIIMAGE      (102)
#define SNAPSHOTIMAGE (103)
#define ICONIFYIMAGE  (104)
#define PADLOCKIMAGE  (105)
#define TBFRAMEIMAGE  (106)

------- schnipp! -------8<------- schnipp! -------8<------- schnipp! -------

Es gibt bereits eine Applikation, die die "tbiclass" verwendet, ViNCEd von
Thomas Richter.

Ich hoffe, daß auch Sie "tbiclass" unterstützen und so dazu beitragen, endlich
allen in Applikationen eingesetzten Titelzeilengadgets ein einheitliches Aus-
sehen zu geben!

Danke,
                                      Massimo Tantignone (tanti@intercom.it)
