summaryrefslogtreecommitdiff
path: root/sigalatvision/lib/stddlg.h
diff options
context:
space:
mode:
Diffstat (limited to 'sigalatvision/lib/stddlg.h')
-rw-r--r--sigalatvision/lib/stddlg.h1498
1 files changed, 1498 insertions, 0 deletions
diff --git a/sigalatvision/lib/stddlg.h b/sigalatvision/lib/stddlg.h
new file mode 100644
index 0000000..aa689d4
--- /dev/null
+++ b/sigalatvision/lib/stddlg.h
@@ -0,0 +1,1498 @@
+/*
+ * stddlg.h
+ *
+ * Turbo Vision - Version 2.0
+ *
+ * Copyright (c) 1994 by Borland International
+ * All Rights Reserved.
+ *
+ * Modified by Sergio Sigala <sergio@sigala.it>
+ */
+
+#if !defined( __FILE_CMDS )
+#define __FILE_CMDS
+
+/** \file stddlg.h
+ * stddlg.h
+ */
+
+const
+
+// Commands
+
+int cmFileOpen = 1001, // Returned from TFileDialog when Open pressed
+ cmFileReplace = 1002, // Returned from TFileDialog when Replace pressed
+ cmFileClear = 1003, // Returned from TFileDialog when Clear pressed
+ cmFileInit = 1004, // Used by TFileDialog internally
+ cmChangeDir = 1005, //
+ cmRevert = 1006, // Used by TChDirDialog internally
+#ifndef __UNPATCHED
+ cmDirSelection= 1007, //!! New event - Used by TChDirDialog internally
+#endif
+
+// Messages
+
+ cmFileFocused = 102, // A new file was focused in the TFileList
+ cmFileDoubleClicked // A file was selected in the TFileList
+ = 103;
+
+#endif // __FILE_CMDS
+
+#if defined( Uses_TSearchRec ) && !defined( __TSearchRec )
+#define __TSearchRec
+
+#include <limits.h>
+
+/* SS: some dos stuff */
+
+#define FA_ARCH 0x01
+#define FA_DIREC 0x02
+#define FA_RDONLY 0x04
+
+/** \struct ftime
+ * Stores date and time information about a specified file.
+ * @short Stores date and time information about a specified file
+ */
+struct ftime {
+ /**
+ * Undocumented.
+ */
+ unsigned ft_tsec : 5; /* Two second interval */
+ /**
+ * Undocumented.
+ */
+ unsigned ft_min : 6; /* Minutes */
+ /**
+ * Undocumented.
+ */
+ unsigned ft_hour : 5; /* Hours */
+ /**
+ * Undocumented.
+ */
+ unsigned ft_day : 5; /* Days */
+ /**
+ * Undocumented.
+ */
+ unsigned ft_month : 4; /* Months */
+ /**
+ * Undocumented.
+ */
+ unsigned ft_year : 7; /* Year */
+};
+
+/** \struct TSearchRec
+ * Internal structure used by @ref TFileCollection.
+ * @see TFileInfoPane::file_block
+ * @short Internal structure used by TFileCollection
+ */
+struct TSearchRec
+{
+ /**
+ * Undocumented.
+ */
+ uchar attr;
+ /**
+ * Undocumented.
+ */
+ long time;
+ /**
+ * Undocumented.
+ */
+ long size;
+ /**
+ * Undocumented.
+ */
+ char name[PATH_MAX];
+};
+
+#endif // Uses_TSearchRec
+
+#if defined( Uses_TFileInputLine ) && !defined( __TFileInputLine )
+#define __TFileInputLine
+
+class TRect;
+class TEvent;
+
+/**
+ * TFileInputLine implements a specialized @ref TInputLine allowing the input
+ * and editing of file names, including optional paths and wild cards.
+ *
+ * A TFileInputLine object is associated with a file dialog box.
+ * @short Allows the input and editing of file names, including optional paths
+ * and wild cards
+ */
+class TFileInputLine : public TInputLine
+{
+public:
+ /**
+ * Calls TInputLine constructor TInputLine(bounds, aMaxLen) to create a
+ * file input line with the given bounds and maximum length `aMaxLen'.
+ *
+ * @ref evBroadcast flag is set in the @ref eventMask.
+ */
+ TFileInputLine( const TRect& bounds, short aMaxLen );
+ /**
+ * Calls @ref TInputLine::handleEvent(), then handles broadcast
+ * cmFileFocused events by copying the entered file name into the input
+ * line's @ref TInputLine::data member and redrawing the view.
+ *
+ * If the edited name is a directory, the current file name in the owning
+ * @ref TFileDialog object is appended first.
+ */
+ virtual void handleEvent( TEvent& event );
+private:
+ virtual const char *streamableName() const
+ { return name; }
+protected:
+ /**
+ * Undocumented.
+ */
+ TFileInputLine( StreamableInit );
+public:
+ /**
+ * Undocumented.
+ */
+ static const char * const name;
+ /**
+ * Called to create an object in certain stream-reading situations.
+ */
+ static TStreamable *build();
+};
+
+/**
+ * Undocumented.
+ */
+inline ipstream& operator >> ( ipstream& is, TFileInputLine& cl )
+ { return is >> (TStreamable&)cl; }
+/**
+ * Undocumented.
+ */
+inline ipstream& operator >> ( ipstream& is, TFileInputLine*& cl )
+ { return is >> (void *&)cl; }
+
+/**
+ * Undocumented.
+ */
+inline opstream& operator << ( opstream& os, TFileInputLine& cl )
+ { return os << (TStreamable&)cl; }
+/**
+ * Undocumented.
+ */
+inline opstream& operator << ( opstream& os, TFileInputLine* cl )
+ { return os << (TStreamable *)cl; }
+
+#endif // Uses_TFileInputLine
+
+#if defined( Uses_TFileCollection ) && !defined( __TFileCollection )
+#define __TFileCollection
+
+class TSearchRec;
+
+/**
+ * TFileCollection is a simple derivative of TSortedCollection offering a
+ * sorted collection of file names.
+ * @short Implements a sorted collection of file names
+ */
+class TFileCollection: public TSortedCollection
+{
+public:
+ /**
+ * Calls the base @ref TSortedCollection constructor to create a
+ * collection with the given limit `aLimit' and delta `aDelta'.
+ */
+ TFileCollection( ccIndex aLimit, ccIndex aDelta) :
+ TSortedCollection( aLimit, aDelta ) {}
+ /**
+ * Returns a pointer to the @ref TSearchRec object indexed by `index'
+ * in this file collection.
+ */
+ TSearchRec *at( ccIndex index )
+ { return (TSearchRec *)TSortedCollection::at( index ); }
+ /**
+ * Returns the index of the given @ref TSearchRec file `item' in this
+ * file collection.
+ */
+ virtual ccIndex indexOf( TSearchRec *item )
+ { return TSortedCollection::indexOf( item ); }
+ /**
+ * Removes (deletes) the given @ref TSearchRec file `item' from this file
+ * collection. The space in the collection is not freed.
+ */
+ void remove( TSearchRec *item )
+ { TSortedCollection::remove( item ); }
+ /**
+ * Removes (deletes) the given @ref TSearchRec file `item' from the
+ * collection and frees the space in the collection.
+ */
+ void free( TSearchRec *item )
+ { TSortedCollection::free( item ); }
+ /**
+ * Inserts the @ref TSearchRec file referenced by `item' into the
+ * collection at the given `index' and moves the following items down
+ * one position.
+ *
+ * The collection will be expanded by @ref delta if the insertion causes
+ * the @ref limit to be exceeded.
+ */
+ void atInsert( ccIndex index, TSearchRec *item )
+ { TSortedCollection::atInsert( index, item ); }
+ /**
+ * Replaces the TSearchRec file found at `index' with the given `item'.
+ */
+ void atPut( ccIndex index, TSearchRec *item )
+ { TSortedCollection::atPut( index, item ); }
+ /**
+ * Inserts the @ref TSearchRec `item' into the collection, and adjusts the
+ * other indexes if necessary.
+ *
+ * By default, insertions are made at the end of the collection. The index
+ * of the inserted `item' is returned.
+ */
+ virtual ccIndex insert( TSearchRec *item )
+ { return TSortedCollection::insert( item ); }
+ /**
+ * This iterator returns a pointer to the first @ref TSearchRec object
+ * in the collection for which the `Test' function returns True.
+ */
+ TSearchRec *firstThat( ccTestFunc Test, void *arg );
+ /**
+ * This iterator scans the collection from last item to first. It returns
+ * a pointer to the first item (that is, the nearest the end) in the
+ * collection for which the `Test' function returns True.
+ */
+ TSearchRec *lastThat( ccTestFunc Test, void *arg );
+private:
+ virtual void freeItem( void *item )
+ { delete (TSearchRec *)item; }
+ /**
+ * Performs a standard file string compare and returns a value depending
+ * on the results.
+ *
+ * -# It returns 0 if the file names at `key1' and `key2' are the same
+ * -# It returns > 0
+ * - if the `key1' name is lexicographically higher than that at `key2'
+ * - if `key1' name is the directory ".."
+ * - if `key1' is a directory and `key2' is not a directory
+ * -# It returns < 0
+ * - if the `key1' name is lexicographically lower than that at `key2'
+ * - if `key2' references the directory ".."
+ * - if `key2' is a directory and `key1' is not a directory
+ */
+ virtual int compare( void *key1, void *key2 );
+ /**
+ * Undocumented.
+ */
+ virtual const char *streamableName() const
+ { return name; }
+ /**
+ * Called for each item in the collection. You'll need to override these
+ * in order to read the items correctly.
+ */
+ virtual void *readItem( ipstream& );
+ /**
+ * Called for each item in the collection. You'll need to override these
+ * in order to write the items correctly.
+ */
+ virtual void writeItem( void *, opstream& );
+protected:
+ /**
+ * Undocumented.
+ */
+ TFileCollection( StreamableInit ) : TSortedCollection ( streamableInit ) {}
+public:
+ /**
+ * Undocumented.
+ */
+ static const char * const name;
+ /**
+ * Called to create an object in certain stream-reading situations.
+ */
+ static TStreamable *build();
+};
+
+/**
+ * Undocumented.
+ */
+inline ipstream& operator >> ( ipstream& is, TFileCollection& cl )
+ { return is >> (TStreamable&)cl; }
+/**
+ * Undocumented.
+ */
+inline ipstream& operator >> ( ipstream& is, TFileCollection*& cl )
+ { return is >> (void *&)cl; }
+
+/**
+ * Undocumented.
+ */
+inline opstream& operator << ( opstream& os, TFileCollection& cl )
+ { return os << (TStreamable&)cl; }
+/**
+ * Undocumented.
+ */
+inline opstream& operator << ( opstream& os, TFileCollection* cl )
+ { return os << (TStreamable *)cl; }
+
+inline TSearchRec *TFileCollection::firstThat( ccTestFunc func, void *arg )
+{
+ return (TSearchRec *)TSortedCollection::firstThat( ccTestFunc(func), arg );
+}
+
+inline TSearchRec *TFileCollection::lastThat( ccTestFunc func, void *arg )
+{
+ return (TSearchRec *)TSortedCollection::lastThat( ccTestFunc(func), arg );
+}
+
+#endif // Uses_TFileCollection
+
+
+#if defined( Uses_TSortedListBox ) && !defined( __TSortedListBox )
+#define __TSortedListBox
+
+class TRect;
+class TScrollBar;
+class TEvent;
+class TSortedCollection;
+
+/**
+ * TSortedListBox is a specialized @ref TListBox derivative that maintains its
+ * items in a sorted sequence. It is intended as a base for other list box
+ * classes.
+ * @short A base for other list box classes
+ */
+class TSortedListBox: public TListBox
+{
+public:
+ /**
+ * Calls @ref TListBox constructor to create a list box with the given
+ * size `bounds', number of columns `aNumCols', and vertical scroll bar
+ * `aScrollBar'.
+ * @see TListBox::TListBox
+ *
+ * Data member @ref shiftState is set to 0 and the cursor is set at the
+ * first item.
+ */
+ TSortedListBox( const TRect& bounds,
+ ushort aNumCols,
+ TScrollBar *aScrollBar
+ );
+ /**
+ * Calls @ref TListBox::handleEvent(), then handles the special key and
+ * mouse events used to select items from the list.
+ */
+ virtual void handleEvent( TEvent& event );
+ /**
+ * Calls @ref TListBox::newList() to delete the existing
+ * @ref TSortedCollection object associated with this list box and
+ * replace it with the collection given by `aList'.
+ *
+ * The first item of the new collection will receive the focus.
+ */
+ void newList( TSortedCollection *aList );
+#ifndef __UNPATCHED
+ void *read( ipstream& is );
+#endif
+ /**
+ * Returns a pointer to the @ref TSortedCollection object currently
+ * associated with this sorted list box. This gives access the the
+ * private @ref items data member, a pointer to the items to be listed
+ * and selected.
+ * @see TListBox::list
+ *
+ * Derived sorted list box classes will typically override list() to
+ * provide a pointer to objects of a class derived from
+ * @ref TSortedCollection.
+ */
+ TSortedCollection *list();
+protected:
+ /**
+ * Undocumented.
+ */
+ uchar shiftState;
+private:
+ /**
+ * You must define this private member function in all derived classes to
+ * provide a means of returning the key for the given string `s'. This
+ * will depend on the sorting strategy adopted in your derived class. By
+ * default, getKey() returns `s'.
+ */
+ virtual void *getKey( const char *s );
+ short searchPos;
+ virtual const char *streamableName() const
+ { return name; }
+protected:
+ /**
+ * Undocumented.
+ */
+ TSortedListBox( StreamableInit ) : TListBox ( streamableInit ) {}
+public:
+ /**
+ * Undocumented.
+ */
+ static const char * const name;
+ /**
+ * Undocumented.
+ */
+ static TStreamable *build();
+};
+
+/**
+ * Undocumented.
+ */
+inline ipstream& operator >> ( ipstream& is, TSortedListBox& cl )
+ { return is >> (TStreamable&)cl; }
+/**
+ * Undocumented.
+ */
+inline ipstream& operator >> ( ipstream& is, TSortedListBox*& cl )
+ { return is >> (void *&)cl; }
+
+/**
+ * Undocumented.
+ */
+inline opstream& operator << ( opstream& os, TSortedListBox& cl )
+ { return os << (TStreamable&)cl; }
+/**
+ * Undocumented.
+ */
+inline opstream& operator << ( opstream& os, TSortedListBox* cl )
+ { return os << (TStreamable *)cl; }
+
+inline TSortedCollection *TSortedListBox::list()
+{
+ return (TSortedCollection *)TListBox::list();
+}
+
+#endif // Uses_TSortedListBox
+
+#if defined( Uses_TFileList ) && !defined( __TFileList )
+#define __TFileList
+
+class TRect;
+class TScrollBar;
+class TEvent;
+
+/**
+ * TFileList implements a sorted two-column list box of file names (held in a
+ * @ref TFileCollection object). You can select (highlight) a file name by
+ * mouse or keyboard cursor actions.
+ *
+ * TFileList inherits most of its functionality from @ref TSortedListBox.
+ * The following commands are broadcast by TFileList:
+ *
+ * <pre>
+ * Constant Value Meaning
+ *
+ * cmFileFocused 102 A new file was focused in object
+ * cmFileDoubleClicked 103 A file was selected in the TFileList object
+ * </pre>
+ * @short Implements a sorted two-column list box of file names; you can
+ * select a file name by mouse or keyboard cursor actions
+ */
+class TFileList : public TSortedListBox
+{
+public:
+ /**
+ * Calls the @ref TSortedListBox constructor to create a two-column
+ * TFileList object with the given bounds and, if `aScrollBar' is
+ * non-zero, a vertical scrollbar.
+ * @see TSortedListBox::TSortedListBox
+ */
+ TFileList( const TRect& bounds,
+ TScrollBar *aScrollBar
+ );
+ /**
+ * Deletes the file list.
+ */
+ ~TFileList();
+ /**
+ * Focuses the given item in the list. Calls
+ * @ref TSortedListBox::focusItem() and broadcasts a cmFileFocused event.
+ */
+ virtual void focusItem( short item );
+ /**
+ * Undocumented.
+ */
+ virtual void selectItem( short item );
+ /**
+ * Grabs the @ref TSearchRec object at `item' and sets the file name in
+ * `dest'.
+ * "\\" is appended if the name is a directory.
+ */
+ virtual void getText( char *dest, short item, short maxLen );
+ /**
+ * Calls @ref TSortedListBox::newList() to delete the existing
+ * @ref TFileCollection object associated with this list box and replace
+ * it with the file collection given by `aList'.
+ *
+ * The first item of the new collection will receive the focus.
+ */
+ void newList( TFileCollection *aList );
+ /**
+ * Allows the separate submission of a relative or absolute path in the
+ * `dir' argument. Either "/" or "\\" can be used as subdirectory
+ * separators (but "\\" is converted to "/" for output).
+ */
+ void readDirectory( const char *dir, const char *wildCard );
+ /**
+ * Expands the `wildCard' string to generate the file collection
+ * associated with this file list. The resulting @ref TFileCollection
+ * object (a sorted set of @ref TSearchRec objects) is assigned to the
+ * private @ref items data member (accessible via the @ref list() member
+ * function).
+ *
+ * If too many files are generated, a warning message box appears.
+ * readDirectory() knows about file attributes and will not generate
+ * hidden file names.
+ */
+ void readDirectory( const char *wildCard );
+ /**
+ * Undocumented.
+ */
+ virtual ushort dataSize();
+ /**
+ * Undocumented.
+ */
+ virtual void getData( void *rec );
+ /**
+ * Undocumented.
+ */
+ virtual void setData( void *rec );
+ /**
+ * Returns the private @ref items data member, a pointer to the
+ * @ref TFileCollection object currently associated with this file list
+ * box.
+ */
+ TFileCollection *list();
+private:
+ virtual void *getKey( const char *s );
+ static const char * tooManyFiles;
+ virtual const char *streamableName() const
+ { return name; }
+protected:
+ /**
+ * Undocumented.
+ */
+ TFileList( StreamableInit ) : TSortedListBox ( streamableInit ) {}
+public:
+ /**
+ * Undocumented.
+ */
+ static const char * const name;
+ /**
+ * Called to create an object in certain stream-reading situations.
+ */
+ static TStreamable *build();
+};
+
+/**
+ * Undocumented.
+ */
+inline ipstream& operator >> ( ipstream& is, TFileList& cl )
+ { return is >> (TStreamable&)cl; }
+/**
+ * Undocumented.
+ */
+inline ipstream& operator >> ( ipstream& is, TFileList*& cl )
+ { return is >> (void *&)cl; }
+
+/**
+ * Undocumented.
+ */
+inline opstream& operator << ( opstream& os, TFileList& cl )
+ { return os << (TStreamable&)cl; }
+/**
+ * Undocumented.
+ */
+inline opstream& operator << ( opstream& os, TFileList* cl )
+ { return os << (TStreamable *)cl; }
+
+inline void TFileList::newList( TFileCollection *f )
+{
+ TSortedListBox::newList( f );
+}
+
+inline TFileCollection *TFileList::list()
+{
+ return (TFileCollection *)TSortedListBox::list();
+}
+
+#endif // Uses_TFileList
+
+
+#if defined( Uses_TFileInfoPane ) && !defined( __TFileInfoPane )
+#define __TFileInfoPane
+
+class TRect;
+class TEvent;
+
+/**
+ * TFileInfoPane implements a simple, streamable view for displaying file
+ * information in the owning file dialog box.
+ * @short Implements a simple, streamable view for displaying file information
+ * in the owning file dialog box
+ */
+class TFileInfoPane : public TView
+{
+public:
+ /**
+ * Calls TView constructor TView(bounds) to create a file information pane
+ * with the given bounds.
+ * @see TView::TView
+ *
+ * @ref evBroadcast flag is set in @ref TView::eventMask.
+ */
+ TFileInfoPane( const TRect& bounds );
+ /**
+ * Draws the file info pane in the default palette. The block size and
+ * date/time stamp are displayed.
+ */
+ virtual void draw();
+ /**
+ * Returns the default palette.
+ */
+ virtual TPalette& getPalette() const;
+ /**
+ * Calls @ref TView::handleEvent(), then handles broadcast cmFileFocused
+ * events (triggered when a new file is focused in a file list) by
+ * displaying the file information pane.
+ */
+ virtual void handleEvent( TEvent& event );
+private:
+ /**
+ * The file name and attributes for this info pane. @ref TSearchRec is
+ * defined as follows:
+ *
+ * <pre>
+ * struct TSearchRec
+ * {
+ * uchar attr;
+ * long time;
+ * long size;
+ * char name[MAXFILE+MAXEXT-1];
+ * };
+ * </pre>
+ *
+ * where the fields have their obvious DOS file meanings.
+ */
+ TSearchRec file_block;
+ static const char * const months[13];
+ static const char * pmText;
+ static const char * amText;
+ virtual const char *streamableName() const
+ { return name; }
+protected:
+ /**
+ * Undocumented.
+ */
+ TFileInfoPane( StreamableInit ) : TView ( streamableInit ) {}
+public:
+ /**
+ * Undocumented.
+ */
+ static const char * const name;
+ /**
+ * Called to create an object in certain stream-reading situations.
+ */
+ static TStreamable *build();
+};
+
+/**
+ * Undocumented.
+ */
+inline ipstream& operator >> ( ipstream& is, TFileInfoPane& cl )
+ { return is >> (TStreamable&)cl; }
+/**
+ * Undocumented.
+ */
+inline ipstream& operator >> ( ipstream& is, TFileInfoPane*& cl )
+ { return is >> (void *&)cl; }
+
+/**
+ * Undocumented.
+ */
+inline opstream& operator << ( opstream& os, TFileInfoPane& cl )
+ { return os << (TStreamable&)cl; }
+/**
+ * Undocumented.
+ */
+inline opstream& operator << ( opstream& os, TFileInfoPane* cl )
+ { return os << (TStreamable *)cl; }
+
+#endif // Uses_TFileInfoPane
+
+#if defined( Uses_TFileDialog ) && !defined( __TFileDialog )
+#define __TFileDialog
+
+const
+ int fdOKButton = 0x0001, // Put an OK button in the dialog
+ fdOpenButton = 0x0002, // Put an Open button in the dialog
+ fdReplaceButton = 0x0004, // Put a Replace button in the dialog
+ fdClearButton = 0x0008, // Put a Clear button in the dialog
+ fdHelpButton = 0x0010, // Put a Help button in the dialog
+ fdNoLoadDir = 0x0100; // Do not load the current directory
+ // contents into the dialog at Init.
+ // This means you intend to change the
+ // WildCard by using SetData or store
+ // the dialog on a stream.
+
+class TEvent;
+class TFileInputLine;
+class TFileList;
+
+/**
+ * TFileDialog implements a file dialog box, history pick list, and input line
+ * from which file names (including wildcards) can be input, edited, selected,
+ * and opened for editing.
+ *
+ * The following commands are returned by TFileDialog when executed with a
+ * call to @ref TGroup::execView():
+ *
+ * <pre>
+ * Constant Value Meaning
+ *
+ * cmFileOpen 1001 Returned when Open pressed
+ * cmFileReplace 1002 Returned when Replace pressed
+ * cmFileClear 1003 Returned when Clear pressed
+ * cmFileInit 1004 Used by @ref valid()
+ * </pre>
+ * @short Implements a file dialog box, history pick list, and input line from
+ * which file names (including wildcards) can be input, edited, selected, and
+ * opened for editing
+ */
+class TFileDialog : public TDialog
+{
+public:
+ /**
+ * Creates a fixed-size, framed dialog box with the given title `aTitle'.
+ *
+ * A @ref TFileInputLine object (referenced by the @ref fileName data
+ * member) is created and inserted, labeled with `inputName' and with its
+ * @ref TFileInputLine::data field set to `aWildCard'.
+ *
+ * The `aWildCard' argument is expanded (if necessary) to provide a
+ * @ref TFileList object, referenced by the @ref fileList data member.
+ *
+ * A @ref THistory object is created and inserted with the given history
+ * ID `histID'.
+ *
+ * A vertical scroll bar is created and inserted. Depending on the
+ * `aOptions' flags, the appropriate buttons are set up. These options
+ * perform the specified operations:
+ *
+ * <pre>
+ * Constant Value Meaning
+ *
+ * fdOKButton 0x0001 Put an OK button in the dialog
+ *
+ * fdOpenButton 0x0002 Put an Open button in the dialog
+ *
+ * fdReplaceButton 0x0004 Put a Replace button in the dialog
+ *
+ * fdClearButton 0x0008 Put a Clear button in the dialog
+ *
+ * fdHelpButton 0x0010 Put a Help button in the dialog
+ *
+ * fdNoLoadDir 0x0100 Do not load the current directory contents into
+ * the dialog when intialized. This means you
+ * intend to change the wildcard by using
+ * @ref setData() or intend to store the dialog on
+ * a stream.
+ * </pre>
+ *
+ * A @ref TFileInfoPane object is created and inserted. If the
+ * fdNoLoadDir flag is not set, the files in the current directory are
+ * loaded into the file list.
+ */
+ TFileDialog( const char *aWildCard, const char *aTitle,
+ const char *inputName, ushort aOptions, uchar histId );
+ /**
+ * Deletes directory, then destroys the file dialog.
+ */
+ ~TFileDialog();
+ /**
+ * Undocumented.
+ */
+ virtual void getData( void *rec );
+ /**
+ * Takes the fileName->data field and expands it to a full path format.
+ * The result is set in `s'.
+ * @see TFileDialog::fileName
+ * @see TFileInputLine::data
+ */
+ void getFileName( char *s );
+ /**
+ * Calls @ref TDialog::handleEvent(), then handles cmFileOpen,
+ * cmFileReplace and cmFileClear events.
+ *
+ * These all call @ref TView::endModal() and pass their commands to the
+ * view that opened the file dialog.
+ */
+ virtual void handleEvent( TEvent& event );
+ /**
+ * Undocumented.
+ */
+ virtual void setData( void *rec );
+ /**
+ * Returns True if `command' is cmValid, indicating a successful
+ * construction. Otherwise calls @ref TDialog::valid().
+ *
+ * If this returns True, the current @ref fileName is checked for
+ * validity.
+ *
+ * Valid names will return True. Invalid names invoke an
+ * "Invalid file name" message box and return False.
+ */
+ virtual Boolean valid( ushort command );
+ /**
+ * Used internally by @ref TObject::destroy() to ensure correct
+ * destruction of derived and related objects.
+ *
+ * shutDown() is overridden in many classes to ensure the proper setting
+ * of related data members when @ref destroy() is called.
+ */
+ virtual void shutDown();
+ /**
+ * Pointer to the associated input line.
+ */
+ TFileInputLine *fileName;
+ /**
+ * Pointer to the associated file list.
+ */
+ TFileList *fileList;
+ /**
+ * The current path and file name.
+ */
+ char wildCard[PATH_MAX];
+ /**
+ * The current directory.
+ */
+ const char *directory;
+private:
+ void readDirectory();
+ Boolean checkDirectory( const char * );
+ static const char * filesText;
+ static const char * openText;
+ static const char * okText;
+ static const char * replaceText;
+ static const char * clearText;
+ static const char * cancelText;
+ static const char * helpText;
+ static const char * invalidDriveText;
+ static const char * invalidFileText;
+ virtual const char *streamableName() const
+ { return name; }
+protected:
+ /**
+ * Undocumented.
+ */
+ TFileDialog( StreamableInit ) : TDialog ( streamableInit ),
+ TWindowInit( TFileDialog::initFrame ) {}
+ /**
+ * Writes to the output stream `os'.
+ */
+ virtual void write( opstream& os );
+ /**
+ * Reads from the input stream `is'.
+ */
+ virtual void *read( ipstream& is );
+public:
+ /**
+ * Undocumented.
+ */
+ static const char * const name;
+ /**
+ * Called to create an object in certain stream-reading situations.
+ */
+ static TStreamable *build();
+};
+
+/**
+ * Undocumented.
+ */
+inline ipstream& operator >> ( ipstream& is, TFileDialog& cl )
+ { return is >> (TStreamable&)cl; }
+/**
+ * Undocumented.
+ */
+inline ipstream& operator >> ( ipstream& is, TFileDialog*& cl )
+ { return is >> (void *&)cl; }
+
+/**
+ * Undocumented.
+ */
+inline opstream& operator << ( opstream& os, TFileDialog& cl )
+ { return os << (TStreamable&)cl; }
+/**
+ * Undocumented.
+ */
+inline opstream& operator << ( opstream& os, TFileDialog* cl )
+ { return os << (TStreamable *)cl; }
+
+#endif // Uses_TFileDialog
+
+
+#if defined( Uses_TDirEntry ) && !defined( __TDirEntry )
+#define __TDirEntry
+
+/**
+ * TDirEntry is a simple class providing directory paths and descriptions.
+ *
+ * TDirEntry objects are stored in @ref TDirCollection objects.
+ * @short Simple class providing directory paths and descriptions
+ */
+class TDirEntry
+{
+public:
+ /**
+ * Undocumented.
+ */
+ TDirEntry( const char *, const char * );
+ /**
+ * Undocumented.
+ */
+ ~TDirEntry();
+ /**
+ * Returns the current directory (the value of the private member
+ * directory).
+ */
+ char *dir() { return directory; }
+ /**
+ * Returns the current display text (the value of the private member
+ * displayText).
+ */
+ char *text() { return displayText; }
+private:
+ char *displayText;
+ char *directory;
+};
+
+inline TDirEntry::TDirEntry( const char *txt, const char *dir ) :
+ displayText( newStr( txt ) ), directory( newStr( dir ) )
+{
+}
+
+inline TDirEntry::~TDirEntry()
+{
+ delete displayText;
+ delete directory;
+}
+
+#endif // Uses_TDirEntry
+
+#if defined( Uses_TDirCollection ) && !defined( __TDirCollection )
+#define __TDirCollection
+
+class TDirEntry;
+
+/**
+ * TDirCollection is a simple @ref TCollection derivative used for storing
+ * @ref TDirEntry objects.
+ *
+ * TDirCollection is a streamable class, inheriting @ref TStreamable from
+ * its base class @ref TCollection.
+ * @short Simple TCollection derivative used for storing TDirEntry objects
+ */
+class TDirCollection : public TCollection
+{
+public:
+ /**
+ * Calls the base @ref TCollection constructor to create a directory
+ * collection with the given @ref limit `aLimit' and @ref delta `aDelta'.
+ */
+ TDirCollection( ccIndex aLimit, ccIndex aDelta) :
+ TCollection( aLimit, aDelta ) {}
+ /**
+ * Returns a pointer to the @ref TDirEntry object indexed by `index' in
+ * this directory collection.
+ * @see TCollection::at
+ */
+ TDirEntry *at( ccIndex index )
+ { return (TDirEntry *)TCollection::at( index );}
+ /**
+ * Returns the index of the given `item' in this directory collection.
+ * @see TCollection::indexOf
+ */
+ virtual ccIndex indexOf( TDirEntry *item )
+ { return TCollection::indexOf( item ); }
+ /**
+ * Removes (deletes) the given `item' from this collection. The space in
+ * the collection is not freed.
+ * @see TCollection::remove
+ */
+ void remove( TDirEntry *item )
+ { TCollection::remove( item ); }
+ /**
+ * Removes (deletes) the given `item' from the collection and frees the
+ * space in the collection.
+ * @see TCollection::free
+ */
+ void free( TDirEntry *item )
+ { TCollection::free( item ); }
+ /**
+ * Inserts the given `item' into the collection at the given `index' and
+ * moves the following items down one position. The collection will be
+ * expanded by @ref delta if the insertion causes the @ref limit to be
+ * exceeded.
+ * @see TCollection::atInsert
+ */
+ void atInsert( ccIndex index, TDirEntry *item )
+ { TCollection::atInsert( index, item ); }
+ /**
+ * Replaces the item at `index' with the given `item'.
+ * @see TCollection::atPut
+ */
+ void atPut( ccIndex index, TDirEntry *item )
+ { TCollection::atPut( index, item ); }
+ /**
+ * Inserts the `item' into the collection, and adjust the other indexes
+ * if necessary. By default, insertions are made at the end of the
+ * collection. The index of the inserted item is returned.
+ * @see TCollection::insert
+ */
+ virtual ccIndex insert( TDirEntry *item )
+ { return TCollection::insert( item ); }
+ /**
+ * This iterator returns a pointer to the first @ref TDirEntry object
+ * in the collection for which the `Test' function returns True.
+ */
+ TDirEntry *firstThat( ccTestFunc Test, void *arg );
+ /**
+ * This iterator scans the collection from the last @ref TDirEntry object
+ * to first. It returns a pointer to the first (that is, the nearest to
+ * the end) item in the collection for which the `Test' function returns
+ * True.
+ */
+ TDirEntry *lastThat( ccTestFunc Test, void *arg );
+private:
+ virtual void freeItem( void *item )
+ { delete (TDirEntry *)item; }
+ virtual const char *streamableName() const
+ { return name; }
+ /**
+ * Called for each item in the collection.
+ *
+ * You'll need to override these in everything derived from
+ * @ref TCollection or @ref TSortedCollection in order to read the items
+ * correctly.
+ *
+ * TSortedCollection already overrides this function.
+ */
+ virtual void *readItem( ipstream& );
+ /**
+ * Called for each item in the collection.
+ *
+ * You'll need to override these in everything derived from
+ * @ref TCollection or @ref TSortedCollection in order to write the
+ * items correctly.
+ *
+ * @ref TSortedCollection already overrides this function.
+ */
+ virtual void writeItem( void *, opstream& );
+protected:
+ /**
+ * Undocumented.
+ */
+ TDirCollection( StreamableInit ) : TCollection ( streamableInit ) {}
+public:
+ /**
+ * Undocumented.
+ */
+ static const char * const name;
+ /**
+ * Called to create an object in certain stream-reading situations.
+ */
+ static TStreamable *build();
+};
+
+/**
+ * Undocumented.
+ */
+inline ipstream& operator >> ( ipstream& is, TDirCollection& cl )
+ { return is >> (TStreamable&)cl; }
+/**
+ * Undocumented.
+ */
+inline ipstream& operator >> ( ipstream& is, TDirCollection*& cl )
+ { return is >> (void *&)cl; }
+
+/**
+ * Undocumented.
+ */
+inline opstream& operator << ( opstream& os, TDirCollection& cl )
+ { return os << (TStreamable&)cl; }
+/**
+ * Undocumented.
+ */
+inline opstream& operator << ( opstream& os, TDirCollection* cl )
+ { return os << (TStreamable *)cl; }
+
+inline TDirEntry *TDirCollection::firstThat( ccTestFunc func, void *arg )
+{
+ return (TDirEntry *)TCollection::firstThat( ccTestFunc(func), arg );
+}
+
+inline TDirEntry *TDirCollection::lastThat( ccTestFunc func, void *arg )
+{
+ return (TDirEntry *)TCollection::lastThat( ccTestFunc(func), arg );
+}
+
+#endif // Uses_TDirCollection
+
+
+#if defined( Uses_TDirListBox ) && !defined( __TDirListBox )
+#define __TDirListBox
+
+class TRect;
+class TScrollBar;
+class TEvent;
+class TDirCollection;
+
+/**
+ * TDirListBox is a specialized derivative of @ref TListBox for displaying and
+ * selecting directories stored in a @ref TDirCollection object.
+ *
+ * By default, these are displayed in a single column with an optional
+ * vertical scroll bar.
+ * @short Specialized derivative of TListBox for displaying and selecting
+ * directories stored in a TDirCollection object
+ */
+class TDirListBox : public TListBox
+{
+public:
+ /**
+ * Calls TListBox::TListBox(bounds, 1, aScrollBar) to create a
+ * single-column list box with the given bounds and vertical scroll bar.
+ * @see TListBox::TListBox
+ */
+ TDirListBox( const TRect& bounds, TScrollBar *aScrollBar );
+ /**
+ * Calls its base destructor to dispose of the list box.
+ * @see TListBox::~TListBox
+ */
+ ~TDirListBox();
+ /**
+ * Grabs the text string at index `item' and copies it to `dest'.
+ */
+ virtual void getText( char *dest, short item, short maxLen );
+ /**
+ * Handles double-click mouse events with putEvent(cmChangeDir).
+ * @see putEvent
+ *
+ * This allows a double click to change to the selected directory. Other
+ * events are handled by @ref TListBox::handleEvent().
+ */
+// virtual void handleEvent( TEvent& );
+ /**
+ * Returns True if `item' is selected, otherwise returns False.
+ */
+ virtual Boolean isSelected( short item );
+ /**
+ * Undocumented.
+ */
+ virtual void selectItem( short item );
+ /**
+ * Deletes the existing @ref TDirEntry object associated with this list
+ * box and replaces it with the file collection given by `aList'.
+ *
+ * The first item of the new collection will receive the focus.
+ */
+ void newDirectory( const char *aList );
+ /**
+ * By default, calls the ancestral @ref TListBox::setState().
+ */
+ virtual void setState( ushort aState, Boolean enable );
+ /**
+ * Returns a pointer to the @ref TDirCollection object currently
+ * associated with this directory list box.
+ */
+ TDirCollection *list();
+ /**
+ * Undocumented.
+ */
+ static const char * pathDir;
+ /**
+ * Undocumented.
+ */
+ static const char * firstDir;
+ /**
+ * Undocumented.
+ */
+ static const char * middleDir;
+ /**
+ * Undocumented.
+ */
+ static const char * lastDir;
+ /**
+ * Undocumented.
+ */
+ static const char * graphics;
+private:
+ void showDrives( TDirCollection * );
+ void showDirs( TDirCollection * );
+ char dir[PATH_MAX];
+ ushort cur;
+ static const char * drives;
+ virtual const char *streamableName() const
+ { return name; }
+protected:
+ /**
+ * Undocumented.
+ */
+ TDirListBox( StreamableInit ): TListBox( streamableInit ) {}
+public:
+ /**
+ * Undocumented.
+ */
+ static const char * const name;
+ /**
+ * Called to create an object in certain stream-reading situations.
+ */
+ static TStreamable *build();
+};
+
+/**
+ * Undocumented.
+ */
+inline ipstream& operator >> ( ipstream& is, TDirListBox& cl )
+ { return is >> (TStreamable&)cl; }
+/**
+ * Undocumented.
+ */
+inline ipstream& operator >> ( ipstream& is, TDirListBox*& cl )
+ { return is >> (void *&)cl; }
+
+/**
+ * Undocumented.
+ */
+inline opstream& operator << ( opstream& os, TDirListBox& cl )
+ { return os << (TStreamable&)cl; }
+/**
+ * Undocumented.
+ */
+inline opstream& operator << ( opstream& os, TDirListBox* cl )
+ { return os << (TStreamable *)cl; }
+
+inline TDirCollection *TDirListBox::list()
+{
+ return (TDirCollection *)TListBox::list();
+}
+
+#endif // Uses_TDirListBox
+
+#if defined( Uses_TChDirDialog ) && !defined( __TChDirDialog )
+#define __TChDirDialog
+
+const
+ int cdNormal = 0x0000, // Option to use dialog immediately
+ cdNoLoadDir = 0x0001, // Option to init the dialog to store on a stream
+ cdHelpButton = 0x0002; // Put a help button in the dialog
+
+class TEvent;
+class TInputLine;
+class TDirListBox;
+class TButton;
+
+/**
+ * TChDirDialog implements a dialog box labeled "Change Directory", used to
+ * change the current working directory.
+ * @see TDialog
+ *
+ * An input line is provided to accept a directory name from the user. A
+ * history window and directory list box with vertical scroll bar are
+ * available to show recent directory selections and a tree of all available
+ * directories.
+ * @see TDirListBox
+ * @see THistoryWindow
+ * @see TInputLine
+ *
+ * Mouse and keyboard selections can be made in the usual way by highlighting
+ * and clicking. The displayed options are:
+ *
+ * -# Directory name
+ * -# Directory tree
+ * -# OK (the default)
+ * -# Chdir
+ * -# Revert
+ * -# Help
+ *
+ * Method @ref TChDirDialog::handleEvent() generates the appropriate commands
+ * for these selections.
+ *
+ * Note: @ref TDirListBox is a friend of TChDirDialog, so that the member
+ * functions of @ref TDirListBox can access the private members of
+ * TChDirDialog.
+ * @short Dialog box used to change the current working directory
+ */
+class TChDirDialog : public TDialog
+{
+public:
+ friend class TDirListBox;
+ /**
+ * Constructor.
+ *
+ * Creates a change directory dialog object with the given history
+ * identifier `histId'. The `aOptions' argument is a bitmap of the
+ * following flags:
+ *
+ * <pre>
+ * Constant Value Meaning
+ *
+ * cdNormal 0x00 Option to use the dialog immediately.
+ *
+ * cdNoLoadDir 0x01 Option to initialize the dialog without loading the
+ * current directory into the dialog. Used if you
+ * intend using @ref setData() to reset the directory
+ * or prior to storage on a stream.
+ *
+ * cdHelpButton 0x02 Option to put a help button in the dialog.
+ * </pre>
+ *
+ * The constructor creates and inserts:
+ *
+ * -# a @ref TInputLine object (labeled "Directory ~n~ame")
+ * -# a @ref THistory object
+ * -# a vertical scroll bar, see @ref TScrollBar
+ * -# a TDirListBox object (labeled "Directory ~t~ree")
+ * -# three buttons "O~K~", "~C~hdir" and "~R~evert", see @ref TButton
+ *
+ * If `aOptions' has the cdHelpButton flag set, a fourth help button is
+ * created. Unless the cdNoLoadDir option is set, the dialog box is loaded
+ * with the current directory.
+ *
+ * Unsigned short `histId' is an arbitrary positive integer used to
+ * identify which history set to use. The library can use multiple history
+ * sets and all views with the same history identifier will share the same
+ * history set.
+ */
+ TChDirDialog( ushort aOptions, ushort histId );
+ /**
+ * Returns the size of the data record of this dialog.
+ *
+ * By default, dataSize() returns 0. Override to return the size (in
+ * bytes) of the data used by @ref getData() and @ref setData() to store
+ * and retrieve dialog box input data.
+ * @see TGroup::dataSize
+ */
+ virtual ushort dataSize();
+ /**
+ * Reads the data record of this dialog.
+ *
+ * By default, getData() does nothing. Override to copy @ref dataSize()
+ * bytes from the view to `rec'. Used in combination with @ref dataSize()
+ * and @ref setData() to store and retrieve dialog box input data.
+ * @see TGroup::getData
+ */
+ virtual void getData( void *rec );
+ /**
+ * Standard TChDirDialog event handler.
+ *
+ * Calls @ref TDialog::handleEvent() then processes cmRevert (restore
+ * previously current directory) and cmChangeDir (switch to selected
+ * directory) events. The dialog is redrawn if necessary.
+ */
+ virtual void handleEvent( TEvent& );
+ /**
+ * Writes the data record of this dialog.
+ *
+ * By default, setData() does nothing. Override to copy @ref dataSize()
+ * bytes from `rec' to the view. Used in combination with @ref dataSize()
+ * and @ref getData() to store and retrieve dialog box input data.
+ * @see TGroup::setData
+ */
+ virtual void setData( void *rec );
+ /**
+ * Checks if the command `command' is valid.
+ *
+ * The return value is True if `command' is not cmOK. Otherwise (the OK
+ * button was pressed) the return value depends on path existence. The
+ * function returns True if the path exists. An invalid directory invokes
+ * the "Invalid directory" message box and returns False.
+ * @see TDialog::valid
+ */
+ virtual Boolean valid( ushort command );
+ /**
+ * Releases TChDirDialog resources.
+ *
+ * Used internally by @ref TObject::destroy() to ensure correct
+ * destruction of derived and related objects. shutDown() is overridden
+ * in many classes to ensure the proper setting of related data members
+ * when @ref destroy() is called.
+ * @see TObject::shutDown
+ *
+ * This method releases all the resources allocated by the TChDirDialog
+ * dialog. It sets private pointers TChDirDialog::dirList,
+ * TChDirDialog::dirInput, TChDirDialog::okButton, and
+ * TChDirDialog::chDirButton to 0 and then calls @ref TDialog::shutDown().
+ */
+ virtual void shutDown();
+private:
+ void setUpDialog();
+ TInputLine *dirInput;
+ TDirListBox *dirList;
+ TButton *okButton;
+ TButton *chDirButton;
+ static const char * changeDirTitle;
+ static const char * dirNameText;
+ static const char * dirTreeText;
+ static const char * okText;
+ static const char * chdirText;
+ static const char * revertText;
+ static const char * helpText;
+ static const char * drivesText;
+ static const char * invalidText;
+ virtual const char *streamableName() const
+ { return name; }
+protected:
+ /**
+ * Constructor.
+ *
+ * Used to recover the view from a stream.
+ */
+ TChDirDialog( StreamableInit ) : TDialog( streamableInit ),
+ TWindowInit( TChDirDialog::initFrame ) {}
+ /**
+ * Used to store the view in a stream.
+ * Writes to the output stream `os'.
+ */
+ virtual void write( opstream& os );
+ /**
+ * Used to recover the view from a stream.
+ * Reads from the input stream `is'.
+ */
+ virtual void *read( ipstream& is );
+public:
+ /**
+ * Undocumented.
+ */
+ static const char * const name;
+ /**
+ * Creates a new TChDirDialog.
+ *
+ * Called to create an object in certain stream-reading situations.
+ */
+ static TStreamable *build();
+};
+
+/**
+ * Undocumented.
+ */
+inline ipstream& operator >> ( ipstream& is, TChDirDialog& cl )
+ { return is >> (TStreamable&)cl; }
+/**
+ * Undocumented.
+ */
+inline ipstream& operator >> ( ipstream& is, TChDirDialog*& cl )
+ { return is >> (void *&)cl; }
+
+/**
+ * Undocumented.
+ */
+inline opstream& operator << ( opstream& os, TChDirDialog& cl )
+ { return os << (TStreamable&)cl; }
+/**
+ * Undocumented.
+ */
+inline opstream& operator << ( opstream& os, TChDirDialog* cl )
+ { return os << (TStreamable *)cl; }
+
+#endif // Uses_TChDirDialog