forked from qt-creator/qt-creator
ProjectExplorer: Let users delete several sessions at once
Task-number: QTCREATORBUG-17668 Change-Id: I90dea6721ef8e7c1496f3a2c934f74edb62bbc96 Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
@@ -399,7 +399,7 @@ public:
|
|||||||
else if (m_activeActionRects[1].contains(pos))
|
else if (m_activeActionRects[1].contains(pos))
|
||||||
sessionModel->renameSession(ICore::mainWindow(), sessionName);
|
sessionModel->renameSession(ICore::mainWindow(), sessionName);
|
||||||
else if (m_activeActionRects[2].contains(pos))
|
else if (m_activeActionRects[2].contains(pos))
|
||||||
sessionModel->deleteSession(sessionName);
|
sessionModel->deleteSessions(QStringList(sessionName));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -792,11 +792,15 @@ bool SessionManager::renameSession(const QString &original, const QString &newNa
|
|||||||
/*!
|
/*!
|
||||||
\brief Shows a dialog asking the user to confirm deleting the session \p session
|
\brief Shows a dialog asking the user to confirm deleting the session \p session
|
||||||
*/
|
*/
|
||||||
bool SessionManager::confirmSessionDelete(const QString &session)
|
bool SessionManager::confirmSessionDelete(const QStringList &sessions)
|
||||||
{
|
{
|
||||||
|
const QString title = sessions.size() == 1 ? tr("Delete Session") : tr("Delete Sessions");
|
||||||
|
const QString question = sessions.size() == 1
|
||||||
|
? tr("Delete session %1?").arg(sessions.first())
|
||||||
|
: tr("Delete these sessions?\n %1").arg(sessions.join("\n "));
|
||||||
return QMessageBox::question(ICore::mainWindow(),
|
return QMessageBox::question(ICore::mainWindow(),
|
||||||
tr("Delete Session"),
|
title,
|
||||||
tr("Delete session %1?").arg(session),
|
question,
|
||||||
QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes;
|
QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -814,6 +818,12 @@ bool SessionManager::deleteSession(const QString &session)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SessionManager::deleteSessions(const QStringList &sessions)
|
||||||
|
{
|
||||||
|
for (const QString &session : sessions)
|
||||||
|
deleteSession(session);
|
||||||
|
}
|
||||||
|
|
||||||
bool SessionManager::cloneSession(const QString &original, const QString &clone)
|
bool SessionManager::cloneSession(const QString &original, const QString &clone)
|
||||||
{
|
{
|
||||||
if (!d->m_sessions.contains(original))
|
if (!d->m_sessions.contains(original))
|
||||||
|
@@ -63,8 +63,9 @@ public:
|
|||||||
|
|
||||||
static bool createSession(const QString &session);
|
static bool createSession(const QString &session);
|
||||||
|
|
||||||
static bool confirmSessionDelete(const QString &session);
|
static bool confirmSessionDelete(const QStringList &sessions);
|
||||||
static bool deleteSession(const QString &session);
|
static bool deleteSession(const QString &session);
|
||||||
|
static void deleteSessions(const QStringList &sessions);
|
||||||
|
|
||||||
static bool cloneSession(const QString &original, const QString &clone);
|
static bool cloneSession(const QString &original, const QString &clone);
|
||||||
static bool renameSession(const QString &original, const QString &newName);
|
static bool renameSession(const QString &original, const QString &newName);
|
||||||
|
@@ -26,6 +26,8 @@
|
|||||||
#include "sessiondialog.h"
|
#include "sessiondialog.h"
|
||||||
#include "session.h"
|
#include "session.h"
|
||||||
|
|
||||||
|
#include <utils/algorithm.h>
|
||||||
|
|
||||||
#include <QInputDialog>
|
#include <QInputDialog>
|
||||||
#include <QValidator>
|
#include <QValidator>
|
||||||
|
|
||||||
@@ -131,7 +133,7 @@ SessionDialog::SessionDialog(QWidget *parent) : QDialog(parent)
|
|||||||
connect(m_ui.btClone, &QAbstractButton::clicked,
|
connect(m_ui.btClone, &QAbstractButton::clicked,
|
||||||
m_ui.sessionView, &SessionView::cloneCurrentSession);
|
m_ui.sessionView, &SessionView::cloneCurrentSession);
|
||||||
connect(m_ui.btDelete, &QAbstractButton::clicked,
|
connect(m_ui.btDelete, &QAbstractButton::clicked,
|
||||||
m_ui.sessionView, &SessionView::deleteCurrentSession);
|
m_ui.sessionView, &SessionView::deleteSelectedSessions);
|
||||||
connect(m_ui.btSwitch, &QAbstractButton::clicked,
|
connect(m_ui.btSwitch, &QAbstractButton::clicked,
|
||||||
m_ui.sessionView, &SessionView::switchToCurrentSession);
|
m_ui.sessionView, &SessionView::switchToCurrentSession);
|
||||||
connect(m_ui.btRename, &QAbstractButton::clicked,
|
connect(m_ui.btRename, &QAbstractButton::clicked,
|
||||||
@@ -157,21 +159,23 @@ bool SessionDialog::autoLoadSession() const
|
|||||||
return m_ui.autoLoadCheckBox->checkState() == Qt::Checked;
|
return m_ui.autoLoadCheckBox->checkState() == Qt::Checked;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SessionDialog::updateActions(const QString &session)
|
void SessionDialog::updateActions(const QStringList &sessions)
|
||||||
{
|
{
|
||||||
if (session.isEmpty()) {
|
if (sessions.isEmpty()) {
|
||||||
m_ui.btDelete->setEnabled(false);
|
m_ui.btDelete->setEnabled(false);
|
||||||
m_ui.btRename->setEnabled(false);
|
m_ui.btRename->setEnabled(false);
|
||||||
m_ui.btClone->setEnabled(false);
|
m_ui.btClone->setEnabled(false);
|
||||||
m_ui.btSwitch->setEnabled(false);
|
m_ui.btSwitch->setEnabled(false);
|
||||||
} else {
|
return;
|
||||||
bool isDefault = (session == QLatin1String("default"));
|
|
||||||
bool isActive = (session == SessionManager::activeSession());
|
|
||||||
m_ui.btDelete->setEnabled(!isActive && !isDefault);
|
|
||||||
m_ui.btRename->setEnabled(!isDefault);
|
|
||||||
m_ui.btClone->setEnabled(true);
|
|
||||||
m_ui.btSwitch->setEnabled(true);
|
|
||||||
}
|
}
|
||||||
|
const bool defaultIsSelected = sessions.contains("default");
|
||||||
|
const bool activeIsSelected = Utils::anyOf(sessions, [](const QString &session) {
|
||||||
|
return session == SessionManager::activeSession();
|
||||||
|
});
|
||||||
|
m_ui.btDelete->setEnabled(!defaultIsSelected && !activeIsSelected);
|
||||||
|
m_ui.btRename->setEnabled(sessions.size() == 1 && !defaultIsSelected);
|
||||||
|
m_ui.btClone->setEnabled(sessions.size() == 1);
|
||||||
|
m_ui.btSwitch->setEnabled(sessions.size() == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace Internal
|
} // namespace Internal
|
||||||
|
@@ -49,7 +49,7 @@ public:
|
|||||||
bool autoLoadSession() const;
|
bool autoLoadSession() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void updateActions(const QString &session);
|
void updateActions(const QStringList &sessions);
|
||||||
|
|
||||||
Ui::SessionDialog m_ui;
|
Ui::SessionDialog m_ui;
|
||||||
};
|
};
|
||||||
|
@@ -55,7 +55,7 @@ int SessionModel::indexOfSession(const QString &session)
|
|||||||
return SessionManager::sessions().indexOf(session);
|
return SessionManager::sessions().indexOf(session);
|
||||||
}
|
}
|
||||||
|
|
||||||
QString SessionModel::sessionAt(int row)
|
QString SessionModel::sessionAt(int row) const
|
||||||
{
|
{
|
||||||
return SessionManager::sessions().value(row, QString());
|
return SessionManager::sessions().value(row, QString());
|
||||||
}
|
}
|
||||||
@@ -209,12 +209,12 @@ void SessionModel::cloneSession(QWidget *parent, const QString &session)
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void SessionModel::deleteSession(const QString &session)
|
void SessionModel::deleteSessions(const QStringList &sessions)
|
||||||
{
|
{
|
||||||
if (!SessionManager::confirmSessionDelete(session))
|
if (!SessionManager::confirmSessionDelete(sessions))
|
||||||
return;
|
return;
|
||||||
beginResetModel();
|
beginResetModel();
|
||||||
SessionManager::deleteSession(session);
|
SessionManager::deleteSessions(sessions);
|
||||||
endResetModel();
|
endResetModel();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -53,7 +53,7 @@ public:
|
|||||||
explicit SessionModel(QObject *parent = nullptr);
|
explicit SessionModel(QObject *parent = nullptr);
|
||||||
|
|
||||||
int indexOfSession(const QString &session);
|
int indexOfSession(const QString &session);
|
||||||
QString sessionAt(int row);
|
QString sessionAt(int row) const;
|
||||||
|
|
||||||
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
|
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
|
||||||
int columnCount(const QModelIndex &parent = QModelIndex()) const override;
|
int columnCount(const QModelIndex &parent = QModelIndex()) const override;
|
||||||
@@ -72,7 +72,7 @@ public slots:
|
|||||||
void resetSessions();
|
void resetSessions();
|
||||||
void newSession(QWidget *parent);
|
void newSession(QWidget *parent);
|
||||||
void cloneSession(QWidget *parent, const QString &session);
|
void cloneSession(QWidget *parent, const QString &session);
|
||||||
void deleteSession(const QString &session);
|
void deleteSessions(const QStringList &sessions);
|
||||||
void renameSession(QWidget *parent, const QString &session);
|
void renameSession(QWidget *parent, const QString &session);
|
||||||
void switchToSession(const QString &session);
|
void switchToSession(const QString &session);
|
||||||
|
|
||||||
|
@@ -27,9 +27,12 @@
|
|||||||
|
|
||||||
#include "session.h"
|
#include "session.h"
|
||||||
|
|
||||||
#include <QItemSelection>
|
#include <utils/algorithm.h>
|
||||||
#include <QStyledItemDelegate>
|
|
||||||
#include <QHeaderView>
|
#include <QHeaderView>
|
||||||
|
#include <QItemSelection>
|
||||||
|
#include <QStringList>
|
||||||
|
#include <QStyledItemDelegate>
|
||||||
|
|
||||||
namespace ProjectExplorer {
|
namespace ProjectExplorer {
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
@@ -57,7 +60,7 @@ SessionView::SessionView(QWidget *parent)
|
|||||||
{
|
{
|
||||||
setItemDelegate(new RemoveItemFocusDelegate(this));
|
setItemDelegate(new RemoveItemFocusDelegate(this));
|
||||||
setSelectionBehavior(QAbstractItemView::SelectRows);
|
setSelectionBehavior(QAbstractItemView::SelectRows);
|
||||||
setSelectionMode(QAbstractItemView::SingleSelection);
|
setSelectionMode(QAbstractItemView::ExtendedSelection);
|
||||||
setWordWrap(false);
|
setWordWrap(false);
|
||||||
setRootIsDecorated(false);
|
setRootIsDecorated(false);
|
||||||
|
|
||||||
@@ -74,9 +77,8 @@ SessionView::SessionView(QWidget *parent)
|
|||||||
connect(this, &Utils::TreeView::activated, [this](const QModelIndex &index){
|
connect(this, &Utils::TreeView::activated, [this](const QModelIndex &index){
|
||||||
emit activated(m_sessionModel.sessionAt(index.row()));
|
emit activated(m_sessionModel.sessionAt(index.row()));
|
||||||
});
|
});
|
||||||
connect(selectionModel(), &QItemSelectionModel::currentRowChanged, [this]
|
connect(selectionModel(), &QItemSelectionModel::selectionChanged, [this] {
|
||||||
(const QModelIndex &index) {
|
emit selected(selectedSessions());
|
||||||
emit selected(m_sessionModel.sessionAt(index.row()));
|
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(&m_sessionModel, &SessionModel::sessionSwitched,
|
connect(&m_sessionModel, &SessionModel::sessionSwitched,
|
||||||
@@ -92,9 +94,14 @@ void SessionView::createNewSession()
|
|||||||
m_sessionModel.newSession(this);
|
m_sessionModel.newSession(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SessionView::deleteCurrentSession()
|
void SessionView::deleteSelectedSessions()
|
||||||
{
|
{
|
||||||
m_sessionModel.deleteSession(currentSession());
|
deleteSessions(selectedSessions());
|
||||||
|
}
|
||||||
|
|
||||||
|
void SessionView::deleteSessions(const QStringList &sessions)
|
||||||
|
{
|
||||||
|
m_sessionModel.deleteSessions(sessions);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SessionView::cloneCurrentSession()
|
void SessionView::cloneCurrentSession()
|
||||||
@@ -147,9 +154,18 @@ void SessionView::keyPressEvent(QKeyEvent *event)
|
|||||||
TreeView::keyPressEvent(event);
|
TreeView::keyPressEvent(event);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const QString session = currentSession();
|
const QStringList sessions = selectedSessions();
|
||||||
if (!session.isEmpty() && session != "default" && session != SessionManager::activeSession())
|
if (!sessions.contains("default") && !Utils::anyOf(sessions,
|
||||||
deleteCurrentSession();
|
[](const QString &session) { return session == SessionManager::activeSession(); })) {
|
||||||
|
deleteSessions(sessions);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QStringList SessionView::selectedSessions() const
|
||||||
|
{
|
||||||
|
return Utils::transform(selectionModel()->selectedRows(), [this](const QModelIndex &index) {
|
||||||
|
return m_sessionModel.sessionAt(index.row());
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace Internal
|
} // namespace Internal
|
||||||
|
@@ -41,7 +41,7 @@ public:
|
|||||||
explicit SessionView(QWidget *parent = nullptr);
|
explicit SessionView(QWidget *parent = nullptr);
|
||||||
|
|
||||||
void createNewSession();
|
void createNewSession();
|
||||||
void deleteCurrentSession();
|
void deleteSelectedSessions();
|
||||||
void cloneCurrentSession();
|
void cloneCurrentSession();
|
||||||
void renameCurrentSession();
|
void renameCurrentSession();
|
||||||
void switchToCurrentSession();
|
void switchToCurrentSession();
|
||||||
@@ -53,13 +53,16 @@ public:
|
|||||||
|
|
||||||
signals:
|
signals:
|
||||||
void activated(const QString &session);
|
void activated(const QString &session);
|
||||||
void selected(const QString &session);
|
void selected(const QStringList &sessions);
|
||||||
void sessionSwitched();
|
void sessionSwitched();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void showEvent(QShowEvent* event) override;
|
void showEvent(QShowEvent* event) override;
|
||||||
void keyPressEvent(QKeyEvent *event) override;
|
void keyPressEvent(QKeyEvent *event) override;
|
||||||
|
|
||||||
|
void deleteSessions(const QStringList &sessions);
|
||||||
|
QStringList selectedSessions() const;
|
||||||
|
|
||||||
SessionModel m_sessionModel;
|
SessionModel m_sessionModel;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user