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.
195 lines
5.0 KiB
195 lines
5.0 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 "querypagebase.h"
|
|
#include "queryview.h"
|
|
#include "kscopeconfig.h"
|
|
|
|
#define FILE_VERSION "VERSION=2"
|
|
|
|
/**
|
|
* Class constructor.
|
|
* @param pParent The parent widget
|
|
* @param szName The widget's name
|
|
*/
|
|
QueryPageBase::QueryPageBase(TQWidget* pParent, const char* szName) :
|
|
TQHBox(pParent, szName),
|
|
m_bLocked(false)
|
|
{
|
|
}
|
|
|
|
/**
|
|
* Class destructor.
|
|
*/
|
|
QueryPageBase::~QueryPageBase()
|
|
{
|
|
}
|
|
|
|
/**
|
|
* Sets the list's colours and font, according the user's preferences.
|
|
*/
|
|
void QueryPageBase::applyPrefs()
|
|
{
|
|
// Apply colour settings
|
|
m_pView->setPaletteBackgroundColor(Config().getColor(
|
|
KScopeConfig::QueryWindowBack));
|
|
m_pView->setPaletteForegroundColor(Config().getColor(
|
|
KScopeConfig::QueryWindowFore));
|
|
m_pView->setFont(Config().getFont(KScopeConfig::QueryWindow));
|
|
}
|
|
|
|
/**
|
|
* Restores a locked query from the given query file.
|
|
* NOTE: The query file is deleted when loading is complete.
|
|
* @param sProjPath The full path of the project directory
|
|
* @param sFileName The name of the query file to load
|
|
* @return true if successful, false otherwise
|
|
*/
|
|
bool QueryPageBase::load(const TQString& sProjPath, const TQString& sFileName)
|
|
{
|
|
TQString sTemp, sFile, sFunc, sLine, sText;
|
|
int nState;
|
|
|
|
// Try to open the query file for reading
|
|
TQFile file(sProjPath + "/" + sFileName);
|
|
if (!file.open(IO_ReadOnly))
|
|
return false;
|
|
|
|
{
|
|
// Use a new scope for the TQTextStream object, to ensure its
|
|
// destruction before the file is deleted
|
|
TQTextStream str(&file);
|
|
|
|
// Make sure the file's version is correct
|
|
sTemp = str.readLine();
|
|
if (sTemp != FILE_VERSION) {
|
|
file.remove();
|
|
return false;
|
|
}
|
|
|
|
// Try to read the file header
|
|
if (!readHeader(str))
|
|
return false;
|
|
|
|
// Read query records
|
|
sTemp = str.readLine();
|
|
nState = 0;
|
|
while (sTemp != TQString::null) {
|
|
switch (nState) {
|
|
// File path
|
|
case 0:
|
|
sFile = sTemp;
|
|
break;
|
|
|
|
// Function name
|
|
case 1:
|
|
sFunc = sTemp;
|
|
break;
|
|
|
|
// Line number
|
|
case 2:
|
|
sLine = sTemp;
|
|
break;
|
|
|
|
// Text string
|
|
case 3:
|
|
sText = sTemp;
|
|
addRecord(sFile, sFunc, sLine, sText);
|
|
break;
|
|
}
|
|
|
|
nState = (nState + 1) % 4;
|
|
sTemp = str.readLine();
|
|
}
|
|
}
|
|
|
|
// Delete the query file
|
|
file.remove();
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Writes the contents of the page to a file.
|
|
* This method is called for pages that shoukld be stored before the owner
|
|
* project is closed (@see shouldSave()).
|
|
* @param sProjPath The full path of the project directory
|
|
* @param sFileName Holds the file name to which the page was saved, upon
|
|
* return
|
|
* @return true if successful, false otherwise
|
|
*/
|
|
bool QueryPageBase::save(const TQString& sProjPath, TQString& sFileName)
|
|
{
|
|
TQListViewItemIterator itr(m_pView);
|
|
|
|
// Get the file name to use
|
|
sFileName = getFileName(sProjPath);
|
|
if (sFileName.isEmpty())
|
|
return false;
|
|
|
|
// Open the query file for writing
|
|
TQFile file(sProjPath + "/" + sFileName);
|
|
if (!file.open(IO_WriteOnly))
|
|
return false;
|
|
|
|
TQTextStream str(&file);
|
|
|
|
// Write the version string
|
|
str << FILE_VERSION << "\n";
|
|
|
|
writeHeader(str);
|
|
|
|
// Write all records
|
|
for(; itr.current(); ++itr) {
|
|
str << itr.current()->text(0) << "\n"
|
|
<< itr.current()->text(1) << "\n"
|
|
<< itr.current()->text(2) << "\n"
|
|
<< itr.current()->text(3) << "\n";
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Selects the next record in the view.
|
|
*/
|
|
void QueryPageBase::selectNext()
|
|
{
|
|
m_pView->selectNext();
|
|
}
|
|
|
|
/**
|
|
* Selects the previous record in the view.
|
|
*/
|
|
void QueryPageBase::selectPrev()
|
|
{
|
|
m_pView->selectPrev();
|
|
}
|
|
|
|
#include "querypagebase.moc"
|