diff options
Diffstat (limited to 'src/openprojectdlg.cpp')
-rw-r--r-- | src/openprojectdlg.cpp | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/src/openprojectdlg.cpp b/src/openprojectdlg.cpp new file mode 100644 index 0000000..722fde6 --- /dev/null +++ b/src/openprojectdlg.cpp @@ -0,0 +1,131 @@ +/*************************************************************************** + * + * Copyright (C) 2005 Elad Lahav ([email protected]) + * + * 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 <qpushbutton.h> +#include <qlineedit.h> +#include <qlistbox.h> +#include <kurlrequester.h> +#include "openprojectdlg.h" +#include "kscopeconfig.h" + +/** + * Class constructor. + * @param pParent The parent widget + * @param szName The widget's name + */ +OpenProjectDlg::OpenProjectDlg(QWidget* pParent, const char* szName) : + OpenProjectLayout(pParent, szName) +{ + loadRecent(); + m_pProjPathRequester->setFilter("cscope.proj"); +} + +/** + * Class destructor. + */ +OpenProjectDlg::~OpenProjectDlg() +{ +} + +/** + * @return The selected project path + */ +QString OpenProjectDlg::getPath() const +{ + return m_pProjPathRequester->url(); +} + +/** + * Sets the requester to reflect the selected project's directory, instead of + * the cscope.proj file. + * @param sProjPath The full path of the selected cscope.proj file + */ +void OpenProjectDlg::slotProjectSelected(const QString& sProjPath) +{ + QFileInfo fi(sProjPath); + m_pProjPathRequester->setURL(fi.dirPath(true)); +} + +/** + * Removes a project from the recent projects list. + * This slot is connected to the clicked() signal of the "Remove" button. + */ +void OpenProjectDlg::slotRemoveRecent() +{ + QListBoxItem* pItem; + + // Remove the selected item, if any + pItem = m_pRecentList->selectedItem(); + if (pItem != NULL) { + Config().removeRecentProject(pItem->text()); + m_pRecentList->removeItem(m_pRecentList->currentItem()); + } +} + +/** + * Selects a project for opening when an item is highlighted in the recent + * projects list. + * This slot is connected to the highlighted() signal of the recent projects + * list box. + * @param pItem The selected project item + */ +void OpenProjectDlg::slotSelectRecent(QListBoxItem* pItem) +{ + if (pItem != NULL) + m_pProjPathRequester->setURL(pItem->text()); +} + +/** + * Selects a project for opening and closes the dialogue when an item in the + * recent projects list is double-clicked. + * This slot is connected to the doubleClicked() signal of the recent + * projects list box. + * @param pItem The selected project item + */ +void OpenProjectDlg::slotOpenRecent(QListBoxItem* pItem) +{ + if (pItem != NULL) { + m_pProjPathRequester->setURL(pItem->text()); + accept(); + } +} + +/** + * Fills the recent projects list box with the project paths read from the + * configuration file. + */ +void OpenProjectDlg::loadRecent() +{ + const QStringList& slProjects = Config().getRecentProjects(); + QStringList::const_iterator itr; + + // Create a list item for each project in the list + for (itr = slProjects.begin(); itr != slProjects.end(); ++itr) + m_pRecentList->insertItem(*itr); +} + +#include "openprojectdlg.moc" |