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.

TDocTemplate

Die Klasse TDocTemplate ist eine abstrakte Basisklasse, die die Funktionalität für Dokument-Templates bereitstellt. Jeder Dokumenttyp benötigt sein eigenes Dokument-Template.

Template Instanzen

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.

 

Wichtige dtXXXX-Konstanten

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.

 

Erzeugung einer Template-Instanz

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