summaryrefslogtreecommitdiffstats
path: root/src/querypagebase.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/querypagebase.h')
-rw-r--r--src/querypagebase.h148
1 files changed, 148 insertions, 0 deletions
diff --git a/src/querypagebase.h b/src/querypagebase.h
new file mode 100644
index 0000000..8603874
--- /dev/null
+++ b/src/querypagebase.h
@@ -0,0 +1,148 @@
+/***************************************************************************
+ *
+ * Copyright (C) 2005 Elad Lahav (elad_lahav@users.sourceforge.net)
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ ***************************************************************************/
+
+#ifndef QUERYPAGEBASE_H
+#define QUERYPAGEBASE_H
+
+#include <qhbox.h>
+
+class QueryView;
+
+/**
+ * Defines a page in a QueryWidget's tab widget.
+ * This is a abstract base class for QueryPage and HistoryPage. It defines
+ * the common behaviour for all pages, which includes appearance, display
+ * of tab text, page locking, storage and retrieval of information to
+ * and from files and basic navigation.
+ * Each page embeds a list widget derived from QueryView. The actual type
+ * of widget is defined by the different page classes.
+ * @author Elad Lahav
+ */
+class QueryPageBase : public QHBox
+{
+Q_OBJECT
+public:
+ QueryPageBase(QWidget* pParent = 0, const char* szName = 0);
+ ~QueryPageBase();
+
+ void applyPrefs();
+ bool load(const QString&, const QString&);
+ bool save(const QString&, QString&);
+ void selectNext();
+ void selectPrev();
+
+
+ /**
+ * Determines whether this page can be locked.
+ * Can be used by inheriting classes to define non-lockable pages.
+ * @return Always true
+ */
+ virtual bool canLock() { return true; }
+
+ /**
+ * Locks or unlocks this page.
+ * @param bLocked true to lock the page, false to unlock it.
+ */
+ void setLocked(bool bLocked) { m_bLocked = bLocked; }
+
+ /**
+ * Determines whether this page is locked.
+ * @return true if the page is locked, false otherwise
+ */
+ bool isLocked() { return m_bLocked; }
+
+ /**
+ * Determines whether this page should be saved when the project is closed.
+ * By default, pages are saved if and only if they are locked.
+ * @return true to save the page, false otherwise
+ */
+ virtual bool shouldSave() const { return m_bLocked; };
+
+ /**
+ * Constructs a caption for this page.
+ * The caption appears in the page's tab button and as the page's
+ * tooltip.
+ * @param bBrief true to generate a brief caption, false otherwise
+ * @return The page's title
+ */
+ virtual QString getCaption(bool bBrief = false) const = 0;
+
+signals:
+ /**
+ * Emitted when a record is selected in the view widget.
+ * @param sFile The "File" field of the selected record
+ * @param nLine The "Line" field of the selected record
+ */
+ void lineRequested(const QString& sFile, uint nLine);
+
+protected:
+ /** The embedded list. */
+ QueryView* m_pView;
+
+ /** Indicates whether this page is locked. A locked page is never
+ overriden by new data, and is also saved to a disc file when the
+ session is closed. */
+ bool m_bLocked;
+
+ /**
+ * Creates a new list item and adds it to the embedded view.
+ * This method is used to add records read from a stored file.
+ * @param sFile The "File" field of the record
+ * @param sFunc The "Function" field of the record
+ * @param sLine The "Line" field of the record
+ * @param sText The "Text" field of the record
+ */
+ virtual void addRecord(const QString& sFile, const QString& sFunc,
+ const QString& sLine, const QString& sText) = 0;
+
+ /**
+ * Creates a file path to store this page.
+ * The path is composed of the project's path and a unique file name
+ * in that directory.
+ * @param sProjPath The project's directory
+ * @return The page's file path
+ */
+ virtual QString getFileName(const QString& sProjPath) const = 0;
+
+ /**
+ * Tries to read the file header of a stored page.
+ * The contents of the header differ among inheriting classes.
+ * @param str A text stream initialised to the open page file
+ * @return true if the header was read successfully and contains the
+ * expected information, false otherwise
+ */
+ virtual bool readHeader(QTextStream& str) = 0;
+
+ /**
+ * Writes a header to a page's file.
+ * The contents of the header differ among inheriting classes.
+ * @param str A text stream initialised to the open page file
+ */
+ virtual void writeHeader(QTextStream& str) = 0;
+};
+
+#endif