summaryrefslogtreecommitdiffstats
path: root/src/cscopefrontend.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/cscopefrontend.h')
-rw-r--r--src/cscopefrontend.h186
1 files changed, 186 insertions, 0 deletions
diff --git a/src/cscopefrontend.h b/src/cscopefrontend.h
new file mode 100644
index 0000000..2b2c569
--- /dev/null
+++ b/src/cscopefrontend.h
@@ -0,0 +1,186 @@
+/***************************************************************************
+ *
+ * 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 CSCOPEFRONTEND_H
+#define CSCOPEFRONTEND_H
+
+#include <qstringlist.h>
+#include <qprogressbar.h>
+#include <qlabel.h>
+#include "frontend.h"
+
+#define CSCOPE_RECORD_SIZE 4
+
+/**
+ * Controls a Cscope process for the current project.
+ * This class creates a Cscope process, using the project's files for
+ * configuration. Once the process is running, KScope uses the query() method
+ * to initiate Cscope queries on the project's files. The queries' output is
+ * parsed into a set of records, each consisting of the following fields:
+ * - File name
+ * - Function name
+ * - Line number
+ * - The line's text
+ * These records are used to display the output in different windows, such as
+ * QueryWidget and CallTreeDlg.
+ * @author Elad Lahav
+ */
+
+class CscopeFrontend : public Frontend
+{
+ Q_OBJECT
+
+public:
+ CscopeFrontend(bool bAutoDelete = false);
+ ~CscopeFrontend();
+
+ /**
+ * The available Cscope query types.
+ */
+ enum QueryType { Reference = 0, Definition = 1, Called = 2, Calling = 3,
+ Text = 4, Pattern = 6, FileName = 7, Including = 8, None = 9 };
+
+ /**
+ * Options for running Cscope, used to construct the command line.
+ * Some of these options are global, while some are project specific.
+ */
+ enum Options { VerboseOut = 0x01, SlowPathDef = 0x02,
+ Kernel = 0x04, InvIndex = 0x08, NoCompression = 0x10 };
+
+ void query(uint, const QString&, bool bCase = true, uint nMaxRecords = 0);
+ void rebuild();
+
+ static void init(const QString&, uint);
+
+ /**
+ * @param nArgs The command-line arguments supported by the version of
+ * Cscope currently in use
+ */
+ static void setSupArgs(uint nArgs) { s_nSupArgs = nArgs; }
+
+public slots:
+ void slotCancel();
+
+signals:
+ /**
+ * Emitted when Cscope starts building the inverted index.
+ */
+ void buildInvIndex();
+
+protected:
+ virtual ParseResult parseStdout(QString&, ParserDelim);
+ virtual void parseStderr(const QString&);
+ virtual void finalize();
+
+private:
+ /**
+ * The possible states of the parser state machine.
+ */
+ enum ParserState { Unknown = 0, BuildStart, BuildSymbol, Building,
+ SearchSymbol, Searching, SearchEnd, File, Func, Line, LineText };
+
+ /** The current state of the parser state machine. */
+ ParserState m_state;
+
+ /** Accumulates text sent by Cscope to the standard error stream. */
+ QString m_sErrMsg;
+
+ /** If true, the rebuild process will be restarted when the process
+ exits. */
+ bool m_bRebuildOnExit;
+
+ /** The maximal number of records requested for the current query.
+ The process aborts if this number if reached. */
+ int m_nMaxRecords;
+
+ /** The full path of the directory holding the project files. */
+ static QString s_sProjPath;
+
+ /** Project-specific options for the command-line arguments. */
+ static uint s_nProjArgs;
+
+ /** The command line arguments supported by this version of Cscope. */
+ static uint s_nSupArgs;
+
+ bool run(const QStringList&);
+};
+
+/**
+ * Provides progress information on a Cscope query.
+ * Classes used to display query results can use this class to show a
+ * progress bar while a query is running, and a "Please Wait..." label while
+ * output is being processed.
+ * @author Elad Lahav
+ */
+class CscopeProgress : public QObject
+{
+ Q_OBJECT
+
+public:
+ CscopeProgress(QWidget*);
+ ~CscopeProgress();
+
+ void setProgress(int, int);
+ void finished();
+
+private:
+ /** The parent widget for the progress bar and label. */
+ QWidget* m_pMainWidget;
+
+ /** A bar used to display query progress information. */
+ QProgressBar* m_pProgressBar;
+
+ /** A label used to display a "Please wait..." message. */
+ QLabel* m_pLabel;
+
+private slots:
+ void slotShowProgressBar();
+ void slotShowLabel();
+};
+
+class CscopeVerifier : public QObject
+{
+ Q_OBJECT
+
+public:
+ CscopeVerifier() : m_bResult(false), m_nArgs(0) {}
+
+ void verify();
+
+signals:
+ void done(bool, uint);
+
+private:
+ bool m_bResult;
+ uint m_nArgs;
+
+private slots:
+ void slotConfigResult(uint, const QString&);
+ void slotFinished();
+};
+
+#endif