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.
kscope/src/filelist.cpp

198 lines
5.4 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 <tqlineedit.h>
#include <tqfileinfo.h>
#include <tdelocale.h>
#include "filelist.h"
#include "kscope.h"
#include "kscopeconfig.h"
/**
* Class constructor.
* @param pParent The parent widget
* @param szName The widget's name
*/
FileList::FileList(TQWidget* pParent, const char* szName) :
SearchList(1, pParent, szName),
m_sRoot("/")
{
// Set the list's columns
m_pList->addColumn("");
m_pList->addColumn(i18n("File"));
m_pList->addColumn(i18n("Path"));
// Sort only when asked to by the user
if (Config().getAutoSortFiles())
m_pList->setSortColumn(1);
else
m_pList->setSortColumn(m_pList->columns() + 1);
m_pList->setAllColumnsShowFocus(true);
// Set colours and font
applyPrefs();
}
/**
* Class destructor.
*/
FileList::~FileList()
{
}
/**
* Adds a single entry to the file list.
* Implements the addItem() virtual method of the FileListTarget base
* class. When a FileList object is given as a parameter to
* ProjectManager::fillList(), this method is called for each file included
* in the project. A new list item is created, containing the file's name and
* path, and is added to the list.
* @param sFilePath The full path of a source file
*/
void FileList::addItem(const TQString& sFilePath)
{
TQString sFileType, sFileName, sPath;
int nTypePos;
// Extract the file name
sFileName = sFilePath.mid(sFilePath.findRev('/') + 1);
// Get the file's extension (empty string for file names without an
// extension)
nTypePos = sFileName.findRev('.');
if (nTypePos > -1)
sFileType = sFileName.mid(nTypePos + 1);
// If a root path has been set, use a $ sign instead of that part of the
// path
sPath = sFilePath;
if (m_sRoot != "/")
sPath.replace(m_sRoot, "$");
// Create the list item
new TQListViewItem(m_pList, sFileType, sFileName, sPath);
}
/**
* Searches the list for the given file path.
* @param sPath The full path of the file to find
* @return true if the file was found in the list, false otherwise
*/
bool FileList::findFile(const TQString& sPath)
{
TQString sFindPath(sPath);
if (m_sRoot != "/")
sFindPath.replace(m_sRoot, "$");
return (m_pList->findItem(sFindPath, 2) != NULL);
}
/**
* Removes all items from the file list.
*/
void FileList::clear()
{
m_pList->clear();
m_pEdit->setText("");
}
/**
* Opens a file for editing when its entry is clicked in the file list.
* @param pItem The clicked list item
*/
void FileList::processItemSelected(TQListViewItem* pItem)
{
TQString sPath;
// Get the file path (replace the root symbol, if required)
sPath = pItem->text(2);
if (sPath.startsWith("$"))
sPath.replace("$", m_sRoot);
// Submit a request to open the file for editing
emit fileRequested(sPath, 0);
}
/**
* Sets the list's colours and font, according the user's preferences.
*/
void FileList::applyPrefs()
{
// Apply colour settings
m_pList->setPaletteBackgroundColor(Config().getColor(
KScopeConfig::FileListBack));
m_pList->setPaletteForegroundColor(Config().getColor(
KScopeConfig::FileListFore));
m_pList->setFont(Config().getFont(KScopeConfig::FileList));
}
/**
* Associates a root directory with this list.
* For each file in the list, the part of the path corresponding to the root
* is replaced with a $ sign.
* @param sRoot The new root path
*/
void FileList::setRoot(const TQString& sRoot)
{
TQListViewItem* pItem;
TQString sPath;
// Update all items in the list
for (pItem = m_pList->firstChild(); pItem != NULL;
pItem = pItem->nextSibling()) {
sPath = pItem->text(2);
// Restore the full path
sPath.replace("$", m_sRoot);
// Replace the root with a $ sign
if (sRoot != "/")
sPath.replace(sRoot, "$");
pItem->setText(2, sPath);
}
// Store the new root
m_sRoot = sRoot;
}
/**
* Constructs a tool-tip for the given item.
* @param pItem The item for which a tip is required
* @param sTip The constructed tip string (on return)
* @return Always true
*/
bool FileList::getTip(TQListViewItem* pItem, TQString& sTip)
{
sTip = pItem->text(2);
return true;
}
#include "filelist.moc"