[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: KDE/kdevplatform/veritas
From: Manuel Breugelmans <mbr.nxi () gmail ! com>
Date: 2008-11-13 9:59:24
Message-ID: 1226570364.794334.11618.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 883572 by mbreugel:
Do not store a 'selected-project' pointer in the testrunner, instead let the \
runnerwindow-widget handle this in a safe way. This fixes a dangling pointer crash. \
It also increases encapsulation a little.
M +30 -12 internal/runnerwindow.cpp
M +7 -2 internal/runnerwindow.h
M +1 -14 itestrunner.cpp
M +0 -1 itestrunner.h
--- trunk/KDE/kdevplatform/veritas/internal/runnerwindow.cpp #883571:883572
@@ -55,6 +55,7 @@
#include <QBrush>
#include <QColor>
#include <QHeaderView>
+#include <interfaces/iprojectcontroller.h>
using KDevelop::IProject;
Q_DECLARE_METATYPE(KDevelop::IProject*)
@@ -164,32 +165,54 @@
KSelectAction *m = new KSelectAction(i18n("Project"), this);
m->setToolTip(i18n("Select project"));
m->setToolBarMode(KSelectAction::MenuMode);
- m->setEditable(true);
m_ui->runnerToolBar->addSeparator();
m_ui->runnerToolBar->addAction(m);
m_projectPopup = m;
+ connect(m_projectPopup, SIGNAL(triggered(QAction*)),
+ SLOT(setSelectedProject(QAction*)));
}
+void RunnerWindow::setSelectedProject(QAction* action)
+{
+ if (!action) return;
+ KUrl projectRoot = action->data().value<KUrl>();
+ Q_ASSERT(m_project2action.contains(projectRoot));
+ m_currentProject = projectRoot;
+}
+
void RunnerWindow::addProjectToPopup(IProject* proj)
{
- kDebug() << "Adding project to popup " << proj->name();
QAction* p = new QAction(proj->name(), this);
QVariant v;
- v.setValue(proj);
+ v.setValue(proj->folder());
p->setData(v);
m_projectPopup->addAction(p);
- m_project2action[proj] = p;
+ m_project2action[proj->folder()] = p;
}
void RunnerWindow::rmProjectFromPopup(IProject* proj)
{
- if (m_project2action.contains(proj)) {
- QAction* p = m_project2action[proj];
+ KUrl projectRoot = proj->folder();
+ if (m_project2action.contains(projectRoot)) {
+ QAction* p = m_project2action[projectRoot];
m_projectPopup->removeAction(p);
- m_project2action.remove(proj);
+ m_project2action.remove(projectRoot);
}
}
+IProject* RunnerWindow::selectedProject() const
+{
+ if (!m_currentProject.isValid()) return 0;
+ IProject* selected = 0;
+ foreach(IProject* proj, ICore::self()->projectController()->projects()) {
+ if (m_currentProject == proj->folder()) {
+ selected = proj;
+ break;
+ }
+ }
+ return selected;
+}
+
namespace
{
/*! functor that counts the selected leaf tests */
@@ -240,11 +263,6 @@
SLOT(scrollToHighlightedRows()));
}
-KSelectAction* RunnerWindow::projectPopup() const
-{
- return m_projectPopup;
-}
-
// helper for RunnerWindow(...) ctor
void RunnerWindow::connectActions()
{
--- trunk/KDE/kdevplatform/veritas/internal/runnerwindow.h #883571:883572
@@ -26,6 +26,7 @@
#include <QTreeView>
#include <QList>
#include <QTime>
+#include <KUrl>
#include "../veritasexport.h"
namespace KDevelop { class IProject; }
@@ -90,11 +91,11 @@
ResultsProxyModel* resultsProxyModel() const;
const Ui::RunnerWindow* ui() const;
- KSelectAction* projectPopup() const;
QWidget* resultsWidget() const;
void resetProgressBar() const;
+ KDevelop::IProject* selectedProject() const;
Q_SIGNALS:
void runCompleted() const;
@@ -144,6 +145,9 @@
Vice versa if it is currently collapsed. */
void expandOrCollapse(const QModelIndex& i) const;
+ void setSelectedProject(QAction*);
+
+
private: // Operations
// helpers for RunnerWindow(...) ctor
@@ -201,11 +205,12 @@
SelectionManager* m_selection; // is responsable for the fade-in out \
selection thingy OverlayManager* m_verbose;
KSelectAction* m_projectPopup; // a dropdown box to select the 'current' \
project
- QMap<KDevelop::IProject*, QAction*> m_project2action;
+ QMap<KUrl, QAction*> m_project2action;
QTime m_stopWatch; // times test-runs, shown in the gui
TestExecutor* m_executor;
mutable bool m_isRunning;
VerboseToggle* m_verboseToggle;
+ KUrl m_currentProject;
};
} // namespace
--- trunk/KDE/kdevplatform/veritas/itestrunner.cpp #883571:883572
@@ -73,7 +73,6 @@
public:
Private() :
window(0),
- selectedProject(0),
resultsView(0),
resultsArea(0),
previousRoot(0)
@@ -84,7 +83,6 @@
}
RunnerWindow* window;
- IProject* selectedProject;
Sublime::View *resultsView;
Sublime::Area *resultsArea;
ResultsModel *resultsModel;
@@ -167,14 +165,9 @@
connect(ipc, SIGNAL(projectClosed(KDevelop::IProject*)),
d->window, SLOT(rmProjectFromPopup(KDevelop::IProject*)));
- connect(d->window->projectPopup(), SIGNAL(triggered(QAction*)),
- this, SLOT(setSelected(QAction*)));
-
connect(d->window->ui()->actionReload, SIGNAL(triggered(bool)),
this, SLOT(reload()));
- connect(d->window, SIGNAL(openVerbose(Veritas::Test*)),
- this, SLOT(openVerbose(Veritas::Test*)));
reload();
return d->window;
@@ -188,15 +181,9 @@
IProject* ITestRunner::project() const
{
- return d->selectedProject;
+ return d->window->selectedProject();
}
-void ITestRunner::setSelected(QAction* action)
-{
- kDebug() << action->data().value<IProject*>();
- d->selectedProject = action->data().value<IProject*>();
-}
-
namespace {
class Filter : public QObject
{
--- trunk/KDE/kdevplatform/veritas/itestrunner.h #883571:883572
@@ -69,7 +69,6 @@
private Q_SLOTS:
void reload();
- void setSelected(QAction*);
void removeResultsView();
void setupToolView(Veritas::Test*);
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic