Dokument-Templates |
Ein Dokument-Template assoziiert eine Doc/View-Dokumentklasse mit einer View-Klasse und erzeugt eine neue Klasse, die dann über ein View mit einem festgelegten Doc/View-Dokument verbunden wird. Eine solche Dokument-Template-Klasse wird mit dem Makro DEFINE_DOC_TEMPLATE_CLASS (definiert in doctpl.h) erzeugt, welches drei Argumente erwartet:
DEFINE_DOC_TEMPLATE_CLASS( TFileDocument, TEditView, CEditTemplate);
Mit diesem Beispiel wird die Doc/View-Dokumentklasse TFileDocument mit der Viewklasse TEditView verbunden und eine neue Klasse mit dem Namen CEditTemplate erzeugt. Die Klassen TFileDocument und TEditView sind von der OWL bereits vorgegebene Klassen.
Die Klasse TDocTemplate ist eine abstrakte Basisklasse, die die Funktionalität für Dokument-Templates bereitstellt. Jeder Dokumenttyp benötigt sein eigenes Dokument-Template.
Nachdem wir eine Doc/View-Dokumentklasse definiert haben, können wir eine beliebige Anzahl von Instanzen dieser neuen Klasse erzeugen. Die Verwaltung der Klassen übernimmt dann der Dokument-Manager der Anwendung.
Es existieren zwei verschiedene Konstruktoren zur Erzeugung von Template-Klassen. Der erste Konstruktor hat folgendes Aussehen:
TemplateName name(const char* description, const char* filter, const char* directory, const char* extension, long flags)
Parameter | Bedeutung |
---|---|
TemplateName | Name der Dokument-Templateklasse, die bei dessen Definition angegeben wurde. |
name | beliebiger Name für die zu erzeugende Instanz |
description | Textbeschreibung für das Dokument-Template. Diese wird in den Auswahllisten des Dokument-Managers angezeigt, vorausgesetzt das Modus-Flag dtHidden wird nicht verwendet. Übliche Textbeschreibungen sind beispielsweise "Alle Dateien" oder "Textdateien" usw. |
filter | enthält eine Dateimaske zur Filterung von Dateinamen. Ein Beispiel für eine solche Maske ist beispielsweise "*.txt". |
directory | bezeichnet das zu verwendende Standardverzeichnis für die Doc/View-Dokumente dieser Klasse. Bei der Übergabe von 0, wird das aktuelle Verzeichnis verwendet. |
extension | enthält die Standard-Dateinamenserweiterung, die automatisch verwendet werden soll, wenn vom Benutzter ein Dateiname ohne Dateinamenserweiterung eingegeben wird. Wird hier 0 angegeben, wird die automatische Dateinamenserweiterung für diese Klasse deaktiviert. |
flags | bestimmt den Modus und verschiedene Eigenschaften der Template-Instanz. Nachfolgend finden Sie die wichtigsten Konstanten die Sie verwenden und in sinnvoller Weise miteinander kombinieren können. |
Konstante | Funktionsbeschreibung |
---|---|
dtAutoDelete | Das Doc/View-Dokumentobjekt wird automatisch gelöscht, wenn das letzte View gelöscht wird. |
dtNoAutoView | Es erfolgt keine automatische Erzeugung einer Standard-View. |
dtSingleView | Es kann je Doc/View-Dokument nur ein View verwendet werden. |
dtAutoOpen | Das Doc/View-Dokument wird bei der Erzeugung automatisch geöffnet. |
dtConfirm | Es besteht für den Benutzer die Möglichkeit, den Pfad zu bestätigen. |
dtHidden | Das Template erscheint nicht in den Auswahllisten des Dokument-Managers, wird also vor dem Benutzer verborgen. |
dtNewDoc | Erzeugt ein neues Doc/View-Dokument. |
dtUpdateDir | Bewirkt, daß das Standardverzeichnis jedesmal neu gesetzt wird, wenn durch eine Dateiauswahl mit dem Dokument-Manager ein neues Verzeichnis gewählt wird. |
Sehen wir uns nun ein Beispiel an, wie man Template-Instanzen erzeugt:
DEFINE_DOC_TEMPLATE_CLASS( TFileDocument, TEditView, CEditTemplate);
...
CEditTemplate TextTemplate( "Textdateien", "*.TXT", "C:\\TEXTE", "TXT", dtAutoDelete);
CEditTemplate AsmSources( "Assemblerdateien", "*.asm;*.ash;*.inc", 0, "ASM", dtAutoDelete);
CEditTemplate CSources( "C/C++ Quelltexte", "*.cpp;*.c;*.hpp;*.h", 0, "CPP", dtAutoDelete);
CEditTemplate AllFiles( "Alle Dateien", "*.*", 0, 0, dtAutoDelete | dtNoAutoView);
Mit diesem Beispiel werden vier Template-Instanzen erzeugt:
Den zweiten Konstruktor zur Erzeugung einer Template-Klasse sollte man vorziehen, da der erste Konstruktor eigentlich nur noch aus Gründen der Abwärtskompatibilität mit älteren OWL Versionen vorhanden ist. |
TemplateName name(TRegList& regTable);
Parameter | Bedeutung |
---|---|
TemplateName | Name der Dokument-Templateklasse, die bei dessen Definition angegeben wurde. |
name | beliebiger Name für die zu erzeugende Instanz |
regTable | Name der Registriertabelle, die mit den Makros BEGIN_REGISTRATION und END_REGISTRATION erzeugt wird |
Der Code für die bereits oben beschriebenen Instanzen könnte dann ungefähr wie folgt aussehen:
BEGIN_REGISTRATION(TextReg)
REGDATA(description,"Textdateien",
REGDATA(docfilter,"*.TXT",
REGDATA(extension,"TXT",
REGDATA(directory, "C:\\TEXTE", REGDOCFLAGS(dtAutoDelete)
END_REGISTRATION
BEGIN_REGISTRATION(AsmSourcesReg)
REGDATA(description,"Assemblerdateien",
REGDATA(docfilter,"*.ASM;*.ASH;*.INC",
REGDATA(extension,"ASM",
REGDOCFLAGS(dtAutoDelete)
END_REGISTRATION
BEGIN_REGISTRATION(CSourcesReg)
REGDATA(description,"C/C++ Quelltexte",
REGDATA(docfilter," *.CPP;*.C;*.HPP;*.H ",
REGDATA(extension,"CPP",
REGDOCFLAGS(dtAutoDelete)
END_REGISTRATION
BEGIN_REGISTRATION(AllReg)
REGDATA(description,"Alle Dateien",
REGDATA(docfilter," *.* ",
REGDOCFLAGS(dtAutoDelete | dtNoAutoView)
END_REGISTRATION
CEditTemplate TextTemplate(TextReg);
CEditTemplate AsmSources(AsmSourcesReg);
CEditTemplate CSources(CSourcesReg);
CEditTemplate AllFiles(AllReg);
Übersicht |
Stand: 25.02.00 22:08:58
© 1998,1999 by Hans Joachim Kiefer, hajokiefer@handshake.de