From 3af5832abe7c802a384cd58d34f7cc4433595ced Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sl=C3=A1vek=20Banko?= Date: Mon, 7 Oct 2013 23:28:24 +0200 Subject: Initial import of kscope 1.6.2 --- src/filelist.cpp | 197 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 197 insertions(+) create mode 100644 src/filelist.cpp (limited to 'src/filelist.cpp') diff --git a/src/filelist.cpp b/src/filelist.cpp new file mode 100644 index 0000000..59492ce --- /dev/null +++ b/src/filelist.cpp @@ -0,0 +1,197 @@ +/*************************************************************************** + * + * 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 +#include +#include +#include "filelist.h" +#include "kscope.h" +#include "kscopeconfig.h" + +/** + * Class constructor. + * @param pParent The parent widget + * @param szName The widget's name + */ +FileList::FileList(QWidget* 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 QString& sFilePath) +{ + QString 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 QListViewItem(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 QString& sPath) +{ + QString 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(QListViewItem* pItem) +{ + QString 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 QString& sRoot) +{ + QListViewItem* pItem; + QString 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(QListViewItem* pItem, QString& sTip) +{ + sTip = pItem->text(2); + return true; +} + +#include "filelist.moc" -- cgit v1.2.1