summaryrefslogtreecommitdiffstats
path: root/kdat/Node.h
diff options
context:
space:
mode:
Diffstat (limited to 'kdat/Node.h')
-rw-r--r--kdat/Node.h1051
1 files changed, 1051 insertions, 0 deletions
diff --git a/kdat/Node.h b/kdat/Node.h
new file mode 100644
index 0000000..84dfea8
--- /dev/null
+++ b/kdat/Node.h
@@ -0,0 +1,1051 @@
+// KDat - a tar-based DAT archiver
+// Copyright (C) 1998-2000 Sean Vyain, svyain@mail.tds.net
+// Copyright (C) 2001-2002 Lawrence Widman, kdat@cardiothink.com
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+#ifndef _Node_h_
+#define _Node_h_
+
+#include <qobject.h>
+
+#include "ktreeview.h"
+
+class Archive;
+class BackupProfile;
+class File;
+class RangeList;
+class Tape;
+
+/**
+ * @short The base class for all tree nodes in KDat.
+ */
+class Node : public KTreeViewItem {
+ int _type;
+protected:
+ void insertNode( Node* child );
+public:
+ enum {
+ ArchiveableNodeType,
+ ArchiveNodeType,
+ BackupProfileNodeType,
+ BackupProfileRootNodeType,
+ DirectoryNodeType,
+ FileNodeType,
+ MountedArchiveNodeType,
+ MountedTapeDirectoryNodeType,
+ MountedTapeFileNodeType,
+ NodeType,
+ RangeableNodeType,
+ RootNodeType,
+ SelectableNodeType,
+ TapeNodeType,
+ TapeDirectoryNodeType,
+ TapeDriveNodeType,
+ TapeFileNodeType,
+ TapeIndexRootNodeType
+ };
+
+ /**
+ * Create a new tree node.
+ *
+ * @param type Should be one of the enums.
+ * @param text Text label for the node.
+ * @param pixmap A pixmap to display to the left of the text.
+ */
+ Node( int type, const QString & text, const QPixmap& pixmap );
+
+ /**
+ * There must be a virtual destructor in the base class so that all the
+ * destructors in the inherited classes get called.
+ */
+ virtual ~Node();
+
+ /**
+ * Get the node's type.
+ *
+ * @return The type of this node. This information can be used to safely
+ * downcast a Node pointer.
+ */
+ int getType();
+
+ /**
+ * Determine whether the node is an instance of the given node type.
+ *
+ * @param type The type to compare against.
+ */
+ virtual bool isType( int type );
+
+ /**
+ * This method is called immediately before the node is to be expanded.
+ * This method can be used to fill in the children of this node, or
+ * prevent the node from expanding. The default implementation does
+ * nothing.
+ *
+ * @param expand The method sets this to TRUE to allow the node to be
+ * expanded or FALSE to prevent the node from being expanded.
+ */
+ virtual void expanding( bool expand=TRUE );
+
+ /**
+ * This method is called immediately after the node has been expanded.
+ * The default implementation does nothing.
+ */
+ virtual void expanded();
+
+ /**
+ * This method is called immediately after the node has been collapsed.
+ * The default implementation does nothing.
+ */
+ virtual void collapsed();
+
+ /**
+ * This method is called immediately after the node has been selected.
+ * The default implementation does nothing.
+ */
+ virtual void selected();
+
+ /**
+ * This method is called when the user right-clicks the mouse over the
+ * node.
+ */
+ virtual void popupMenu( const QPoint& );
+};
+
+class ArchiveNode;
+
+/**
+ * @short This node represents the root of a tape index.
+ */
+class TapeNode : public Node {
+ Tape* _tape;
+
+ ArchiveNode* findArchiveNode( Archive* archive );
+public:
+ /**
+ * Create a tape node.
+ *
+ * @param tape A pointer to the tape index that this node represents.
+ */
+ TapeNode( Tape* tape );
+
+ /**
+ * Get the tape index associated with this node.
+ *
+ * @return A pointer to the tape index.
+ */
+ Tape* getTape();
+
+ /**
+ * Make sure that the displayed information matches the tape index. This
+ * method recurses through child nodes.
+ *
+ * @return TRUE if the node's text has changed.
+ */
+ bool validate();
+
+ /**
+ * Determine whether the node is an instance of the given node type.
+ *
+ * @param type The type to compare against.
+ */
+ virtual bool isType( int type );
+
+ /**
+ * Create child nodes for each archive in the tape index.
+ *
+ * @param expand This will always be set to TRUE.
+ */
+ virtual void expanding( bool expand=TRUE );
+
+ /**
+ * This method is called immediately after the node has been selected.
+ */
+ virtual void selected();
+
+ /**
+ * This method is called when the user right-clicks the mouse over the
+ * node.
+ */
+ virtual void popupMenu( const QPoint& p );
+};
+
+/**
+ * @short This node represents a single archive within a tape.
+ */
+class ArchiveNode : public Node {
+ Archive* _archive;
+public:
+ /**
+ * Create an archive node.
+ *
+ * @param archive A pointer to the archive that this node represents.
+ */
+ ArchiveNode( Archive* archive );
+
+ /**
+ * Get the archive associated with this node.
+ *
+ * @return A pointer to the archive.
+ */
+ Archive* getArchive();
+
+ /**
+ * Make sure that the displayed information matches the tape index. This
+ * method recurses through child nodes.
+ *
+ * @return TRUE if the node's text has changed.
+ */
+ bool validate();
+
+ /**
+ * Determine whether the node is an instance of the given node type.
+ *
+ * @param type The type to compare against.
+ */
+ virtual bool isType( int type );
+
+ /**
+ * Create child nodes for each top-level file/directory contained in the
+ * archive.
+ *
+ * @param expand This will always be set to TRUE.
+ */
+ virtual void expanding( bool expand=TRUE );
+
+ /**
+ * This method is called immediately after the node has been selected.
+ */
+ virtual void selected();
+
+ /**
+ * This method is called when the user right-clicks the mouse over the
+ * node.
+ */
+ virtual void popupMenu( const QPoint& p );
+};
+
+/**
+ * @short This node represents a single directory within an archive.
+ */
+class TapeDirectoryNode : public Node {
+ File* _file;
+public:
+ /**
+ * Create a tape directory node.
+ *
+ * @param file A pointer to the file that this node represents.
+ */
+ TapeDirectoryNode( File* file );
+
+ /**
+ * Get the file associated with this node.
+ *
+ * @return A pointer to the file.
+ */
+ File* getFile();
+
+ /**
+ * Determine whether the node is an instance of the given node type.
+ *
+ * @param type The type to compare against.
+ */
+ virtual bool isType( int type );
+
+ /**
+ * Create child nodes for each file contained in this directory.
+ *
+ * @param expand This will always be set to TRUE.
+ */
+ virtual void expanding( bool expand=TRUE );
+
+ /**
+ * Change the node's pixmap to an open folder.
+ */
+ virtual void expanded();
+
+ /**
+ * Change the node's pixmap to a closed folder.
+ */
+ virtual void collapsed();
+
+ /**
+ * This method is called immediately after the node has been selected.
+ */
+ virtual void selected();
+};
+
+/**
+ * @short This node represents a single file within an archive.
+ */
+class TapeFileNode : public Node {
+ File* _file;
+public:
+ /**
+ * Create a tape file node.
+ *
+ * @param file A pointer to the file that this node represents.
+ */
+ TapeFileNode( File* file );
+
+ /**
+ * Get the file associated with this node.
+ *
+ * @return A pointer to the file.
+ */
+ File* getFile();
+
+ /**
+ * Determine whether the node is an instance of the given node type.
+ *
+ * @param type The type to compare against.
+ */
+ virtual bool isType( int type );
+
+ /**
+ * This method is called immediately after the node has been selected.
+ */
+ virtual void selected();
+};
+
+/**
+ * @short This class defines an interface for managing multiple selection of tree nodes.
+ */
+class SelectableNode : public Node {
+protected:
+ mutable QRect _selectRect;
+ enum { SelAll, SelNone, SelSome };
+ int _state;
+
+ void doUpdateState();
+ void doSetSelected( bool select );
+ const QPixmap* getSelectPixmap() const;
+
+ virtual bool mousePressEvent( const QPoint& point );
+ virtual void paint( QPainter* p, int indent,
+ const QColorGroup& cg, bool highlighted ) const;
+ virtual void paintText( QPainter* p, int indent, int cellHeight,
+ const QColorGroup& cg, bool highlighted ) const;
+ virtual int width( int indent, const QFontMetrics& fm ) const;
+ virtual QRect textBoundingRect( int indent ) const;
+public:
+ /**
+ * Create a selectable node.
+ *
+ * @param type Should be one of the enums.
+ * @param text Text label for the node.
+ * @param pixmap A pixmap to display to the left of the text.
+ * @param state The initial selection state of the node.
+ */
+ SelectableNode( int type, const QString & text, const QPixmap& pixmap, int state );
+
+ /**
+ * Determine whether the node is an instance of the given node type.
+ *
+ * @param type The type to compare against.
+ */
+ virtual bool isType( int type );
+
+ /**
+ * Determine whether the node and all of its children are selected.
+ *
+ * @return TRUE if the node is selected, otherwise FALSE.
+ */
+ bool isSelected();
+
+ /**
+ * Determine whether the node has at least one selected descendent.
+ *
+ * @return TRUE if at least one descendent is selected.
+ */
+ bool hasSelectedChildren();
+
+ /**
+ * Select/deselect this node and all of its children.
+ *
+ * @param selected TRUE means the node will be selected, FALSE means the
+ * node will be deselected.
+ */
+ virtual void setSelected( bool selected );
+};
+
+/**
+ * @short This class defines an interface for retrieving a list of selected tape blocks.
+ */
+class RangeableNode : public SelectableNode {
+public:
+ /**
+ * Create a new rangeable node.
+ *
+ * @param type Should be one of the enums.
+ * @param text Text label for the node.
+ * @param pixmap A pixmap to display to the left of the text.
+ * @param state The initial selection state of the node.
+ */
+ RangeableNode( int type, const QString & text, const QPixmap& pixmap, int state );
+
+ /**
+ * Get a list of all the selected ranges for the subtree rooted at this
+ * node.
+ */
+ virtual const QPtrList<Range>& getRanges() = 0;
+
+ /**
+ * Determine whether the node is an instance of the given node type.
+ *
+ * @param type The type to compare against.
+ */
+ virtual bool isType( int type );
+};
+
+/**
+ * @short This node represents a single archive within a mounted tape.
+ */
+class MountedArchiveNode : public RangeableNode {
+ Archive* _archive;
+public:
+ /**
+ * Create an mounted archive node.
+ *
+ * @param archive A pointer to the archive that this node represents.
+ */
+ MountedArchiveNode( Archive* archive );
+
+ /**
+ * Get the archive associated with this node.
+ *
+ * @return A pointer to the archive.
+ */
+ Archive* getArchive();
+
+ /**
+ * Make sure that the displayed information matches the tape index. This
+ * method recurses through child nodes.
+ *
+ * @return TRUE if the node's text has changed.
+ */
+ bool validate();
+
+ /**
+ * Get a list of all the selected ranges for the subtree rooted at this
+ * node.
+ */
+ virtual const QPtrList<Range>& getRanges();
+
+ /**
+ * Select/deselect this node and all of its children.
+ *
+ * @param selected TRUE means the node will be selected, FALSE means the
+ * node will be deselected.
+ */
+ virtual void setSelected( bool selected );
+
+ /**
+ * Determine whether the node is an instance of the given node type.
+ *
+ * @param type The type to compare against.
+ */
+ virtual bool isType( int type );
+
+ /**
+ * Create child nodes for each top-level file/directory contained in the
+ * archive.
+ *
+ * @param expand This will always be set to TRUE.
+ */
+ virtual void expanding( bool expand=TRUE );
+
+ /**
+ * This method is called immediately after the node has been selected.
+ */
+ virtual void selected();
+
+ /**
+ * This method is called when the user right-clicks the mouse over the
+ * node.
+ */
+ virtual void popupMenu( const QPoint& p );
+};
+
+/**
+ * @short This node represents a single directory within a mounted archive.
+ */
+class MountedTapeDirectoryNode : public RangeableNode {
+ File* _file;
+ QString _fullPath;
+public:
+ /**
+ * Create a tape directory node.
+ *
+ * @param file A pointer to the file that this node represents.
+ * @param state The initial selection state of the node.
+ */
+ MountedTapeDirectoryNode( File* file, int state );
+
+ /**
+ * Get the file associated with this node.
+ *
+ * @return A pointer to the file.
+ */
+ File* getFile();
+
+ /**
+ * Return the "fully" qualified path name of this node. It will probably
+ * NOT begin with a '/'.
+ *
+ * @return The full path name of the directory.
+ */
+ QString getFullPath();
+
+ /**
+ * Get a list of all the selected ranges for the subtree rooted at this
+ * node.
+ */
+ virtual const QPtrList<Range>& getRanges();
+
+ /**
+ * Select/deselect this node and all of its children.
+ *
+ * @param selected TRUE means the node will be selected, FALSE means the
+ * node will be deselected.
+ */
+ virtual void setSelected( bool selected );
+
+ /**
+ * Determine whether the node is an instance of the given node type.
+ *
+ * @param type The type to compare against.
+ */
+ virtual bool isType( int type );
+
+ /**
+ * Create child nodes for each file contained in this directory.
+ *
+ * @param expand This will always be set to TRUE.
+ */
+ virtual void expanding( bool expand=TRUE );
+
+ /**
+ * Change the node's pixmap to an open folder.
+ */
+ virtual void expanded();
+
+ /**
+ * Change the node's pixmap to a closed folder.
+ */
+ virtual void collapsed();
+
+ /**
+ * This method is called immediately after the node has been selected.
+ */
+ virtual void selected();
+
+ /**
+ * This method is called when the user right-clicks the mouse over the
+ * node.
+ */
+ virtual void popupMenu( const QPoint& p );
+};
+
+/**
+ * @short This node represents a single file within a mounted archive.
+ */
+class MountedTapeFileNode : public RangeableNode {
+ File* _file;
+ QString _fullPath;
+public:
+ /**
+ * Create a tape file node.
+ *
+ * @param file A pointer to the file that this node represents.
+ * @param state The initial selection state of the node.
+ */
+ MountedTapeFileNode( File* file, int state );
+
+ /**
+ * Get the file associated with this node.
+ *
+ * @return A pointer to the file.
+ */
+ File* getFile();
+
+ /**
+ * Return the "fully" qualified path name of this node. It will probably
+ * NOT begin with a '/'.
+ *
+ * @return The full path name of the file.
+ */
+ QString getFullPath();
+
+ /**
+ * Get a list of all the selected ranges for the subtree rooted at this
+ * node.
+ */
+ virtual const QPtrList<Range>& getRanges();
+
+ /**
+ * Select/deselect this node and all of its children.
+ *
+ * @param selected TRUE means the node will be selected, FALSE means the
+ * node will be deselected.
+ */
+ virtual void setSelected( bool selected );
+
+ /**
+ * Determine whether the node is an instance of the given node type.
+ *
+ * @param type The type to compare against.
+ */
+ virtual bool isType( int type );
+
+ /**
+ * This method is called immediately after the node has been selected.
+ */
+ virtual void selected();
+
+ /**
+ * This method is called when the user right-clicks the mouse over the
+ * node.
+ */
+ virtual void popupMenu( const QPoint& p );
+};
+
+/**
+ * @short This defines an interface for archiveable nodes.
+ */
+class ArchiveableNode : public SelectableNode {
+protected:
+ QString _fullPath;
+public:
+ /**
+ * Create a new archiveable node.
+ *
+ * @param type Should be one of the enums.
+ * @param text Text label for the node.
+ * @param pixmap A pixmap to display to the left of the text.
+ * @param state The initial selection state of the node.
+ */
+ ArchiveableNode( int type, const QString & text, const QPixmap& pixmap, int state );
+
+ /**
+ * Compute the full path name of this node. Nodes representing
+ * directories end with a '/'.
+ *
+ * @return The full path of the file that this node represents.
+ */
+ virtual QString getFullPath() = 0;
+
+ /**
+ * Determine whether the node is an instance of the given node type.
+ *
+ * @param type The type to compare against.
+ */
+ virtual bool isType( int type );
+};
+
+/**
+ * @short This node represents the root directory of the local filesystem.
+ */
+class RootNode : public ArchiveableNode {
+ int _mtime;
+public:
+ /**
+ * Create a root directory node.
+ */
+ RootNode();
+
+ /**
+ * Compute the full path name of this node. Nodes representing
+ * directories end with a '/'.
+ *
+ * @return The full path of the file that this node represents.
+ */
+ virtual QString getFullPath();
+
+ /**
+ * Determine whether the node is an instance of the given node type.
+ *
+ * @param type The type to compare against.
+ */
+ virtual bool isType( int type );
+
+ /**
+ * Create child nodes for each file contained in this directory. If the
+ * directory has been modified then all of the child nodes are recreated.
+ *
+ * @param expand This will always be set to TRUE.
+ */
+ virtual void expanding( bool expand=TRUE );
+
+ /**
+ * Change the node's pixmap to an open folder.
+ */
+ virtual void expanded();
+
+ /**
+ * Change the node's pixmap to a closed folder.
+ */
+ virtual void collapsed();
+
+ /**
+ * This method is called immediately after the node has been selected.
+ */
+ virtual void selected();
+
+ /**
+ * This method is called when the user right-clicks the mouse over the
+ * node.
+ */
+ virtual void popupMenu( const QPoint& p );
+};
+
+/**
+ * @short This node represents a directory on the local filesystem.
+ */
+class DirectoryNode : public ArchiveableNode {
+ int _mtime;
+public:
+ /**
+ * Create a directory node.
+ *
+ * @param text The name of the directory. The full path is determined by
+ * traversing the tree to the root node.
+ * @param state The initial selection state of the node.
+ */
+ DirectoryNode( const QString & text, int state );
+
+ /**
+ * Compute the full path name of this node. Nodes representing
+ * directories end with a '/'.
+ *
+ * @return The full path of the file that this node represents.
+ */
+ virtual QString getFullPath();
+
+ /**
+ * Determine whether the node is an instance of the given node type.
+ *
+ * @param type The type to compare against.
+ */
+ virtual bool isType( int type );
+
+ /**
+ * Create child nodes for each file contained in this directory. If the
+ * directory has been modified then all of the child nodes are recreated.
+ *
+ * @param expand This will always be set to TRUE.
+ */
+ virtual void expanding( bool expand=TRUE );
+
+ /**
+ * Change the node's pixmap to an open folder.
+ */
+ virtual void expanded();
+
+ /**
+ * Change the node's pixmap to a closed folder.
+ */
+ virtual void collapsed();
+
+ /**
+ * This method is called immediately after the node has been selected.
+ */
+ virtual void selected();
+
+ /**
+ * This method is called when the user right-clicks the mouse over the
+ * node.
+ */
+ virtual void popupMenu( const QPoint& p );
+};
+
+/**
+ * @short This node represents a file on the local filesystem.
+ */
+class FileNode : public ArchiveableNode {
+public:
+ /**
+ * Create a file node.
+ *
+ * @param text The name of the file. The full path is determined by
+ * traversing the tree to the root node.
+ * @param state The initial selection state of the node.
+ */
+ FileNode( const QString & text, int state );
+
+ /**
+ * Compute the full path name of this node. Nodes representing
+ * directories end with a '/'.
+ *
+ * @return The full path of the file that this node represents.
+ */
+ virtual QString getFullPath();
+
+ /**
+ * Determine whether the node is an instance of the given node type.
+ *
+ * @param type The type to compare against.
+ */
+ virtual bool isType( int type );
+
+ /**
+ * This method is called immediately after the node has been selected.
+ */
+ virtual void selected();
+
+ /**
+ * This method is called when the user right-clicks the mouse over the
+ * node.
+ */
+ virtual void popupMenu( const QPoint& p );
+};
+
+/**
+ * @short This node represents a tape drive.
+ */
+class TapeDriveNode : public QObject, public Node {
+ Q_OBJECT
+
+ MountedArchiveNode* findArchiveNode( Archive* archive );
+public:
+ /**
+ * Create a tape drive node.
+ */
+ TapeDriveNode();
+
+ /**
+ * Determine whether the node is an instance of the given node type.
+ *
+ * @param type The type to compare against.
+ */
+ virtual bool isType( int type );
+
+ /**
+ * Create child nodes for each archive in the tape index.
+ *
+ * @param expand This will always be set to TRUE.
+ */
+ virtual void expanding( bool expand=TRUE );
+
+ /**
+ * This method is called immediately after the node has been selected.
+ */
+ virtual void selected();
+
+ /**
+ * This method is called when the user right-clicks the mouse over the
+ * node.
+ */
+ virtual void popupMenu( const QPoint& p );
+public slots:
+ /**
+ * This slot is called when the tape is mounted.
+ */
+ void slotTapeMounted();
+
+ /**
+ * This slot is called when the tape is unmounted.
+ */
+ void slotTapeUnmounted();
+
+ /**
+ * Locate the child associated with the modified tape index, and make sure
+ * that the displayed information (including all children) is updated.
+ *
+ * @param tape A pointer to the tape index that was modified.
+ */
+ void slotTapeModified( Tape* tape );
+};
+
+/**
+ * @short This node represents the root of the tape index subtree.
+ */
+class TapeIndexRootNode : public QObject, public Node {
+ Q_OBJECT
+
+ TapeNode* findTapeNode( Tape* tape );
+public:
+ /**
+ * Create a tape index root.
+ */
+ TapeIndexRootNode();
+
+ /**
+ * Determine whether the node is an instance of the given node type.
+ *
+ * @param type The type to compare against.
+ */
+ virtual bool isType( int type );
+
+ /**
+ * Create child nodes for each tape index.
+ *
+ * @param expand This will always be set to TRUE.
+ */
+ virtual void expanding( bool expand=TRUE );
+
+ /**
+ * Change the node's pixmap to an open folder.
+ */
+ virtual void expanded();
+
+ /**
+ * Change the node's pixmap to a closed folder.
+ */
+ virtual void collapsed();
+public slots:
+ /**
+ * Add a new child node for the new tape index.
+ *
+ * @param tape A pointer to the new tape index.
+ */
+ void slotTapeAdded( Tape* tape );
+
+ /**
+ * Remove the child associated with the tape index.
+ *
+ * @param tape A pointer to the removed tape index.
+ */
+ void slotTapeRemoved( Tape* tape );
+
+ /**
+ * Locate the child associated with the modified tape index, and make sure
+ * that the displayed information (including all children) is updated.
+ *
+ * @param tape A pointer to the tape index that was modified.
+ */
+ void slotTapeModified( Tape* tape );
+};
+
+/**
+ * @short This node represents a backup profile.
+ */
+class BackupProfileNode : public Node {
+ BackupProfile* _backupProfile;
+public:
+ /**
+ * Create a backup profile node.
+ *
+ * @param backupProfile A pointer to the backup profile that this node represents.
+ */
+ BackupProfileNode( BackupProfile* backupProfile );
+
+ /**
+ * Get the backup profile associated with this node.
+ *
+ * @return A pointer to the backup profile.
+ */
+ BackupProfile* getBackupProfile();
+
+ /**
+ * Make sure that the displayed information matches the backup profile.
+ *
+ * @return TRUE if the node's text has changed.
+ */
+ bool validate();
+
+ /**
+ * Determine whether the node is an instance of the given node type.
+ *
+ * @param type The type to compare against.
+ */
+ virtual bool isType( int type );
+
+ /**
+ * This method is called immediately after the node has been selected.
+ */
+ virtual void selected();
+
+ /**
+ * This method is called when the user right-clicks the mouse over the
+ * node.
+ */
+ virtual void popupMenu( const QPoint& );
+};
+
+/**
+ * @short This node represents the root of the backup profile subtree.
+ */
+class BackupProfileRootNode : public QObject, public Node {
+ Q_OBJECT
+
+ BackupProfileNode* findBackupProfileNode( BackupProfile* backupProfile );
+public:
+ /**
+ * Create a backup profile root.
+ */
+ BackupProfileRootNode();
+
+ /**
+ * Select the node associated with the given backu profile.
+ *
+ * @param pBackupProfile The backup profile to select.
+ */
+ void setSelected( BackupProfile* pBackupProfile );
+
+ /**
+ * Determine whether the node is an instance of the given node type.
+ *
+ * @param type The type to compare against.
+ */
+ virtual bool isType( int type );
+
+ /**
+ * Create child nodes for each tape index.
+ *
+ * @param expand This will always be set to TRUE.
+ */
+ virtual void expanding( bool expand=TRUE );
+
+ /**
+ * Change the node's pixmap to an open folder.
+ */
+ virtual void expanded();
+
+ /**
+ * Change the node's pixmap to a closed folder.
+ */
+ virtual void collapsed();
+
+ /**
+ * This method is called when the user right-clicks the mouse over the
+ * node.
+ */
+ virtual void popupMenu( const QPoint& );
+public slots:
+ /**
+ * Add a new child node for the new backup profile.
+ *
+ * @param tape A pointer to the new backup profile.
+ */
+ void slotBackupProfileAdded( BackupProfile* backupProfile );
+
+ /**
+ * Remove the child associated with the backup profile.
+ *
+ * @param tape A pointer to the removed backup profile.
+ */
+ void slotBackupProfileRemoved( BackupProfile* backupProfile );
+
+ /**
+ * Locate the child associated with the modified backup profile, and make
+ * sure that the displayed information is updated.
+ *
+ * @param tape A pointer to the backup profile that was modified.
+ */
+ void slotBackupProfileModified( BackupProfile* backupProfile );
+};
+
+#endif