You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
212 lines
5.7 KiB
212 lines
5.7 KiB
/***************************************************************************
|
|
*
|
|
* 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.
|
|
*
|
|
***************************************************************************/
|
|
|
|
#include <tqfile.h>
|
|
#include <tdelocale.h>
|
|
#include "querypage.h"
|
|
#include "queryview.h"
|
|
#include "queryviewdriver.h"
|
|
|
|
const char* QUERY_TYPES[][2] = {
|
|
{ "References to ", "REF " },
|
|
{ "Definition of ", "DEF " },
|
|
{ "Functions called by ", "<-- " },
|
|
{ "Functions calling ", "-->" },
|
|
{ "Search for ", "TXT " },
|
|
{ "", "" },
|
|
{ "EGrep Search for ", "GRP " },
|
|
{ "Files named ", "FIL " },
|
|
{ "Files #including ", "INC " },
|
|
{ "Query", "Query" }
|
|
};
|
|
|
|
/**
|
|
* Class constructor.
|
|
* @param pParent The parent widget
|
|
* @param szName The widget's name
|
|
*/
|
|
QueryPage::QueryPage(TQWidget* pParent, const char * szName) :
|
|
QueryPageBase(pParent, szName),
|
|
m_nType(CscopeFrontend::None)
|
|
{
|
|
m_pView = new QueryView(this);
|
|
m_pDriver = new QueryViewDriver(m_pView, this);
|
|
|
|
connect(m_pView, SIGNAL(lineRequested(const TQString&, uint)), this,
|
|
SIGNAL(lineRequested(const TQString&, uint)));
|
|
|
|
// Set colours and font
|
|
applyPrefs();
|
|
}
|
|
|
|
/**
|
|
* Class destructor.
|
|
*/
|
|
QueryPage::~QueryPage()
|
|
{
|
|
}
|
|
|
|
/**
|
|
* Runs a query, using the current page to display the results.
|
|
* @param nType The type of the query
|
|
* @param sText The text of the query
|
|
* @param bCase true for case-sensitive queries, false otherwise
|
|
*/
|
|
void QueryPage::query(uint nType, const TQString& sText, bool bCase)
|
|
{
|
|
m_nType = nType;
|
|
m_sText = sText;
|
|
m_bCase = bCase;
|
|
m_sName = getCaption();
|
|
|
|
m_pDriver->query(nType, sText, bCase);
|
|
}
|
|
|
|
/**
|
|
* Re-runs the last query.
|
|
*/
|
|
void QueryPage::refresh()
|
|
{
|
|
m_pView->clear();
|
|
if (!m_sText.isEmpty())
|
|
m_pDriver->query(m_nType, m_sText, m_bCase);
|
|
}
|
|
|
|
/**
|
|
* Resets the query page by deleting all records.
|
|
*/
|
|
void QueryPage::clear()
|
|
{
|
|
m_pView->clear();
|
|
m_nType = CscopeFrontend::None;
|
|
m_sText = TQString();
|
|
m_sName = TQString();
|
|
}
|
|
|
|
/**
|
|
* @return true if a query is currently running in this page, false otherwise
|
|
*/
|
|
bool QueryPage::isRunning()
|
|
{
|
|
return m_pDriver->isRunning();
|
|
}
|
|
|
|
/**
|
|
* Constructs a caption for this page, based on the query's type and text.
|
|
* @param bBrief true to use a shortened version of the caption, false
|
|
* (default) for the full version
|
|
* @return The caption for this page
|
|
*/
|
|
TQString QueryPage::getCaption(bool bBrief) const
|
|
{
|
|
return TQString(QUERY_TYPES[m_nType][bBrief ? 1 : 0] + m_sText);
|
|
}
|
|
|
|
/**
|
|
* Creates a new query result item.
|
|
* @param sFile The file name
|
|
* @param sFunc The function defining the scope of the result
|
|
* @param sLine The line number
|
|
* @param sText The contents of the line
|
|
*/
|
|
void QueryPage::addRecord(const TQString& sFile, const TQString& sFunc,
|
|
const TQString& sLine, const TQString& sText)
|
|
{
|
|
new TQListViewItem(m_pView, sFile, sFunc, sLine, sText);
|
|
}
|
|
|
|
/**
|
|
* Creates a unique file name for saving the contents of the query page.
|
|
* @param sProjPath The full path of the project directory
|
|
* @return The unique file name to use
|
|
*/
|
|
TQString QueryPage::getFileName(const TQString& sProjPath) const
|
|
{
|
|
TQString sFileName, sFileNameBase;
|
|
int i = 0;
|
|
|
|
// Do nothing if not initialised
|
|
if (m_sName.isEmpty())
|
|
return "";
|
|
|
|
// Create a unique file name
|
|
sFileNameBase = m_sName;
|
|
sFileNameBase.replace(' ', '_');
|
|
do {
|
|
sFileName = sFileNameBase + TQString::number(++i);
|
|
} while (TQFile(sProjPath + "/" + sFileName).exists());
|
|
|
|
return sFileName;
|
|
}
|
|
|
|
/**
|
|
* Reads query parameters from a file.
|
|
* This mehtod is used as part of the loading process.
|
|
* @param str A text stream set to the correct place in the file
|
|
* @return true if successful, false otherwise
|
|
*/
|
|
bool QueryPage::readHeader(TQTextStream& str)
|
|
{
|
|
TQString sTemp;
|
|
|
|
// Read the query name
|
|
m_sName = str.readLine();
|
|
if (m_sName == TQString::null || m_sName.isEmpty())
|
|
return false;
|
|
|
|
// Read the query's type
|
|
sTemp = str.readLine();
|
|
if (sTemp == TQString::null || sTemp.isEmpty())
|
|
return false;
|
|
|
|
// Convert the type string to an integer
|
|
m_nType = sTemp.toUInt();
|
|
if (m_nType >= CscopeFrontend::None) {
|
|
m_nType = CscopeFrontend::None;
|
|
return false;
|
|
}
|
|
|
|
// Read the query's text
|
|
m_sText = str.readLine();
|
|
if (m_sText == TQString::null || m_sText.isEmpty())
|
|
return false;
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Writes query parameters to a file.
|
|
* This mehtod is used as part of the storing process.
|
|
* @param str A text stream set to the correct place in the file
|
|
*/
|
|
void QueryPage::writeHeader(TQTextStream& str)
|
|
{
|
|
str << m_sName << "\n" << m_nType << "\n" << m_sText << "\n";
|
|
}
|
|
|
|
#include "querypage.moc"
|