forked from qt-creator/qt-creator
Sessions: introduce a sessionDateTime
This can show the last modified time of a session and will be used in a next commit to make it more clear when session was saved. Change-Id: I9f73f62652efc9287563f833f25c49f79c39d936 Task-number: QTCREATORBUG-15790 Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
@@ -99,6 +99,7 @@ public:
|
|||||||
bool m_casadeSetActive = false;
|
bool m_casadeSetActive = false;
|
||||||
|
|
||||||
mutable QStringList m_sessions;
|
mutable QStringList m_sessions;
|
||||||
|
mutable QHash<QString, QDateTime> m_sessionDateTimes;
|
||||||
|
|
||||||
mutable QHash<Project *, QStringList> m_projectFileCache;
|
mutable QHash<Project *, QStringList> m_projectFileCache;
|
||||||
|
|
||||||
@@ -466,7 +467,9 @@ bool SessionManager::save()
|
|||||||
data.insert(QLatin1String("valueKeys"), keys);
|
data.insert(QLatin1String("valueKeys"), keys);
|
||||||
|
|
||||||
bool result = d->m_writer->save(data, ICore::mainWindow());
|
bool result = d->m_writer->save(data, ICore::mainWindow());
|
||||||
if (!result) {
|
if (result) {
|
||||||
|
d->m_sessionDateTimes.insert(activeSession(), QDateTime::currentDateTime());
|
||||||
|
} else {
|
||||||
QMessageBox::warning(ICore::dialogParent(), tr("Error while saving session"),
|
QMessageBox::warning(ICore::dialogParent(), tr("Error while saving session"),
|
||||||
tr("Could not save session to file %1").arg(d->m_writer->fileName().toUserOutput()));
|
tr("Could not save session to file %1").arg(d->m_writer->fileName().toUserOutput()));
|
||||||
}
|
}
|
||||||
@@ -750,14 +753,21 @@ QStringList SessionManager::sessions()
|
|||||||
QDir sessionDir(ICore::userResourcePath());
|
QDir sessionDir(ICore::userResourcePath());
|
||||||
QList<QFileInfo> sessionFiles = sessionDir.entryInfoList(QStringList() << QLatin1String("*.qws"), QDir::NoFilter, QDir::Time);
|
QList<QFileInfo> sessionFiles = sessionDir.entryInfoList(QStringList() << QLatin1String("*.qws"), QDir::NoFilter, QDir::Time);
|
||||||
foreach (const QFileInfo &fileInfo, sessionFiles) {
|
foreach (const QFileInfo &fileInfo, sessionFiles) {
|
||||||
if (fileInfo.completeBaseName() != QLatin1String("default"))
|
const QString &name = fileInfo.completeBaseName();
|
||||||
d->m_sessions << fileInfo.completeBaseName();
|
d->m_sessionDateTimes.insert(name, fileInfo.lastModified());
|
||||||
|
if (name != QLatin1String("default"))
|
||||||
|
d->m_sessions << name;
|
||||||
}
|
}
|
||||||
d->m_sessions.prepend(QLatin1String("default"));
|
d->m_sessions.prepend(QLatin1String("default"));
|
||||||
}
|
}
|
||||||
return d->m_sessions;
|
return d->m_sessions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QDateTime SessionManager::sessionDateTime(const QString &session)
|
||||||
|
{
|
||||||
|
return d->m_sessionDateTimes.value(session);
|
||||||
|
}
|
||||||
|
|
||||||
FileName SessionManager::sessionNameToFileName(const QString &session)
|
FileName SessionManager::sessionNameToFileName(const QString &session)
|
||||||
{
|
{
|
||||||
return FileName::fromString(ICore::userResourcePath() + QLatin1Char('/') + session + QLatin1String(".qws"));
|
return FileName::fromString(ICore::userResourcePath() + QLatin1Char('/') + session + QLatin1String(".qws"));
|
||||||
@@ -820,6 +830,7 @@ bool SessionManager::cloneSession(const QString &original, const QString &clone)
|
|||||||
// If the file does not exist, we can still clone
|
// If the file does not exist, we can still clone
|
||||||
if (!fi.exists() || fi.copy(sessionNameToFileName(clone).toString())) {
|
if (!fi.exists() || fi.copy(sessionNameToFileName(clone).toString())) {
|
||||||
d->m_sessions.insert(1, clone);
|
d->m_sessions.insert(1, clone);
|
||||||
|
d->m_sessionDateTimes.insert(clone, QFileInfo(sessionNameToFileName(clone).toString()).lastModified());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@@ -33,6 +33,7 @@
|
|||||||
|
|
||||||
#include <QString>
|
#include <QString>
|
||||||
#include <QStringList>
|
#include <QStringList>
|
||||||
|
#include <QDateTime>
|
||||||
|
|
||||||
namespace Core { class IEditor; }
|
namespace Core { class IEditor; }
|
||||||
|
|
||||||
@@ -61,6 +62,7 @@ public:
|
|||||||
static QString activeSession();
|
static QString activeSession();
|
||||||
static QString lastSession();
|
static QString lastSession();
|
||||||
static QStringList sessions();
|
static QStringList sessions();
|
||||||
|
static QDateTime sessionDateTime(const QString &session);
|
||||||
|
|
||||||
static bool createSession(const QString &session);
|
static bool createSession(const QString &session);
|
||||||
|
|
||||||
|
@@ -39,7 +39,7 @@ namespace ProjectExplorer {
|
|||||||
namespace Internal {
|
namespace Internal {
|
||||||
|
|
||||||
SessionModel::SessionModel(QObject *parent)
|
SessionModel::SessionModel(QObject *parent)
|
||||||
: QAbstractListModel(parent)
|
: QAbstractTableModel(parent)
|
||||||
{
|
{
|
||||||
connect(SessionManager::instance(), &SessionManager::sessionLoaded,
|
connect(SessionManager::instance(), &SessionManager::sessionLoaded,
|
||||||
this, &SessionModel::resetSessions);
|
this, &SessionModel::resetSessions);
|
||||||
@@ -55,6 +55,36 @@ QString SessionModel::sessionAt(int row)
|
|||||||
return SessionManager::sessions().value(row, QString());
|
return SessionManager::sessions().value(row, QString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QVariant SessionModel::headerData(int section, Qt::Orientation orientation, int role) const
|
||||||
|
{
|
||||||
|
QVariant result;
|
||||||
|
if (orientation == Qt::Horizontal) {
|
||||||
|
switch (role) {
|
||||||
|
case Qt::DisplayRole:
|
||||||
|
switch (section) {
|
||||||
|
case 0: result = tr("Session");
|
||||||
|
break;
|
||||||
|
case 1: result = tr("Last Modified");
|
||||||
|
break;
|
||||||
|
} // switch (section)
|
||||||
|
break;
|
||||||
|
} // switch (role) {
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
int SessionModel::columnCount(const QModelIndex &) const
|
||||||
|
{
|
||||||
|
static int sectionCount = 0;
|
||||||
|
if (sectionCount == 0) {
|
||||||
|
// headers sections defining possible columns
|
||||||
|
while (!headerData(sectionCount, Qt::Horizontal, Qt::DisplayRole).isNull())
|
||||||
|
sectionCount++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return sectionCount;
|
||||||
|
}
|
||||||
|
|
||||||
int SessionModel::rowCount(const QModelIndex &) const
|
int SessionModel::rowCount(const QModelIndex &) const
|
||||||
{
|
{
|
||||||
return SessionManager::sessions().count();
|
return SessionManager::sessions().count();
|
||||||
@@ -85,6 +115,8 @@ QVariant SessionModel::data(const QModelIndex &index, int role) const
|
|||||||
switch (index.column()) {
|
switch (index.column()) {
|
||||||
case 0: result = sessionName;
|
case 0: result = sessionName;
|
||||||
break;
|
break;
|
||||||
|
case 1: result = SessionManager::sessionDateTime(sessionName);
|
||||||
|
break;
|
||||||
} // switch (section)
|
} // switch (section)
|
||||||
break;
|
break;
|
||||||
case DefaultSessionRole:
|
case DefaultSessionRole:
|
||||||
@@ -118,7 +150,7 @@ QHash<int, QByteArray> SessionModel::roleNames() const
|
|||||||
{ProjectsPathRole, "projectsPath"},
|
{ProjectsPathRole, "projectsPath"},
|
||||||
{ProjectsDisplayRole, "projectsName"}
|
{ProjectsDisplayRole, "projectsName"}
|
||||||
};
|
};
|
||||||
return QAbstractListModel::roleNames().unite(extraRoles);
|
return QAbstractTableModel::roleNames().unite(extraRoles);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SessionModel::isDefaultVirgin() const
|
bool SessionModel::isDefaultVirgin() const
|
||||||
@@ -186,5 +218,6 @@ void SessionModel::runNewSessionDialog(const QString &suggestedName, std::functi
|
|||||||
switchToSession(newSession);
|
switchToSession(newSession);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace Internal
|
} // namespace Internal
|
||||||
} // namespace ProjectExplorer
|
} // namespace ProjectExplorer
|
||||||
|
@@ -25,14 +25,14 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <QAbstractListModel>
|
#include <QAbstractTableModel>
|
||||||
|
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
|
||||||
namespace ProjectExplorer {
|
namespace ProjectExplorer {
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
|
|
||||||
class SessionModel : public QAbstractListModel
|
class SessionModel : public QAbstractTableModel
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
@@ -45,6 +45,9 @@ public:
|
|||||||
QString sessionAt(int row);
|
QString sessionAt(int row);
|
||||||
|
|
||||||
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
|
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
|
||||||
|
int columnCount(const QModelIndex &parent = QModelIndex()) const override;
|
||||||
|
|
||||||
|
QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
|
||||||
QVariant data(const QModelIndex &index, int role) const override;
|
QVariant data(const QModelIndex &index, int role) const override;
|
||||||
QHash<int, QByteArray> roleNames() const override;
|
QHash<int, QByteArray> roleNames() const override;
|
||||||
|
|
||||||
|
@@ -63,9 +63,10 @@ SessionView::SessionView(QWidget *parent)
|
|||||||
|
|
||||||
setModel(&m_sessionModel);
|
setModel(&m_sessionModel);
|
||||||
|
|
||||||
QItemSelection firstRow(m_sessionModel.index(0,0), m_sessionModel.index(0, 0));
|
QItemSelection firstRow(m_sessionModel.index(0,0), m_sessionModel.index(
|
||||||
selectionModel()->select(firstRow,
|
0, m_sessionModel.columnCount() - 1));
|
||||||
QItemSelectionModel::QItemSelectionModel::SelectCurrent);
|
selectionModel()->select(firstRow, QItemSelectionModel::QItemSelectionModel::
|
||||||
|
SelectCurrent);
|
||||||
|
|
||||||
connect(this, &QTreeView::activated, [this](const QModelIndex &index){
|
connect(this, &QTreeView::activated, [this](const QModelIndex &index){
|
||||||
emit activated(m_sessionModel.sessionAt(index.row()));
|
emit activated(m_sessionModel.sessionAt(index.row()));
|
||||||
|
Reference in New Issue
Block a user