forked from qt-creator/qt-creator
EditorManager: Show file's relative path in window title
Task-number: QTCREATORBUG-17234 Change-Id: I35e04014f9ca5b72e1c5290977b477514872bc7f Reviewed-by: David Schulz <david.schulz@qt.io> Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
@@ -1748,30 +1748,41 @@ void EditorManagerPrivate::updateWindowTitleForDocument(IDocument *document, QWi
|
||||
QString windowTitle;
|
||||
const QString dashSep(" - ");
|
||||
|
||||
const QString documentName = document ? document->displayName() : QString();
|
||||
if (!documentName.isEmpty())
|
||||
windowTitle.append(documentName);
|
||||
|
||||
QString filePath = document ? document->filePath().toFileInfo().absoluteFilePath()
|
||||
: QString();
|
||||
|
||||
const QString windowTitleAddition = d->m_titleAdditionHandler
|
||||
? d->m_titleAdditionHandler(filePath)
|
||||
: QString();
|
||||
|
||||
QString windowTitleVcsTopic;
|
||||
if (d->m_titleVcsTopicHandler)
|
||||
windowTitleVcsTopic = d->m_titleVcsTopicHandler(filePath);
|
||||
if (!windowTitleVcsTopic.isEmpty())
|
||||
windowTitleVcsTopic = QStringLiteral(" [") + windowTitleVcsTopic + QStringLiteral("]");
|
||||
|
||||
const QString documentName = document ? document->displayName() : QString();
|
||||
|
||||
if (!documentName.isEmpty())
|
||||
windowTitle.append(documentName + windowTitleVcsTopic + dashSep);
|
||||
if (!windowTitleAddition.isEmpty()) {
|
||||
if (!windowTitle.isEmpty())
|
||||
windowTitle.append(" ");
|
||||
windowTitle.append(windowTitleAddition);
|
||||
if (documentName.isEmpty()) // vcs topic not already added
|
||||
windowTitle.append(windowTitleVcsTopic);
|
||||
windowTitle.append(dashSep);
|
||||
}
|
||||
|
||||
const QString windowTitleVcsTopic = d->m_titleVcsTopicHandler
|
||||
? d->m_titleVcsTopicHandler(filePath)
|
||||
: QString();
|
||||
if (!windowTitleVcsTopic.isEmpty()) {
|
||||
if (!windowTitle.isEmpty())
|
||||
windowTitle.append(" ");
|
||||
windowTitle.append(QStringLiteral("[") + windowTitleVcsTopic + QStringLiteral("]"));
|
||||
}
|
||||
|
||||
const QString sessionTitle = d->m_sessionTitleHandler
|
||||
? d->m_sessionTitleHandler(filePath)
|
||||
: QString();
|
||||
if (!sessionTitle.isEmpty()) {
|
||||
if (!windowTitle.isEmpty())
|
||||
windowTitle.append(dashSep);
|
||||
windowTitle.append(sessionTitle);
|
||||
}
|
||||
|
||||
if (!windowTitle.isEmpty())
|
||||
windowTitle.append(dashSep);
|
||||
windowTitle.append(tr("Qt Creator"));
|
||||
window->window()->setWindowTitle(windowTitle);
|
||||
window->window()->setWindowFilePath(filePath);
|
||||
@@ -3064,6 +3075,11 @@ void EditorManager::setWindowTitleAdditionHandler(WindowTitleHandler handler)
|
||||
d->m_titleAdditionHandler = handler;
|
||||
}
|
||||
|
||||
void EditorManager::setSessionTitleHandler(WindowTitleHandler handler)
|
||||
{
|
||||
d->m_sessionTitleHandler = handler;
|
||||
}
|
||||
|
||||
void EditorManager::updateWindowTitles()
|
||||
{
|
||||
foreach (EditorArea *area, d->m_editorAreas)
|
||||
|
@@ -167,6 +167,7 @@ public:
|
||||
static qint64 maxTextFileSize();
|
||||
|
||||
static void setWindowTitleAdditionHandler(WindowTitleHandler handler);
|
||||
static void setSessionTitleHandler(WindowTitleHandler handler);
|
||||
static void setWindowTitleVcsTopicHandler(WindowTitleHandler handler);
|
||||
|
||||
static void addSaveAndCloseEditorActions(QMenu *contextMenu, DocumentModel::Entry *entry,
|
||||
|
@@ -256,6 +256,7 @@ private:
|
||||
IDocument::ReloadSetting m_reloadSetting = IDocument::AlwaysAsk;
|
||||
|
||||
EditorManager::WindowTitleHandler m_titleAdditionHandler;
|
||||
EditorManager::WindowTitleHandler m_sessionTitleHandler;
|
||||
EditorManager::WindowTitleHandler m_titleVcsTopicHandler;
|
||||
|
||||
bool m_autoSaveEnabled = true;
|
||||
|
@@ -91,6 +91,7 @@ public:
|
||||
|
||||
public:
|
||||
static QString windowTitleAddition(const QString &filePath);
|
||||
static QString sessionTitle(const QString &filePath);
|
||||
|
||||
std::unique_ptr<SessionNode> m_sessionNode;
|
||||
QString m_sessionName = QLatin1String("default");
|
||||
@@ -110,6 +111,9 @@ public:
|
||||
QMap<QString, QVariant> m_values;
|
||||
QFutureInterface<void> m_future;
|
||||
PersistentSettingsWriter *m_writer = nullptr;
|
||||
|
||||
private:
|
||||
static QString locationInProject(const QString &filePath);
|
||||
};
|
||||
|
||||
static SessionManager *m_instance = nullptr;
|
||||
@@ -139,6 +143,7 @@ SessionManager::SessionManager(QObject *parent) : QObject(parent)
|
||||
[this] { markSessionFileDirty(); });
|
||||
|
||||
EditorManager::setWindowTitleAdditionHandler(&SessionManagerPrivate::windowTitleAddition);
|
||||
EditorManager::setSessionTitleHandler(&SessionManagerPrivate::sessionTitle);
|
||||
}
|
||||
|
||||
SessionManager::~SessionManager()
|
||||
@@ -517,7 +522,7 @@ void SessionManagerPrivate::dependencies(const QString &proName, QStringList &re
|
||||
result.append(proName);
|
||||
}
|
||||
|
||||
QString SessionManagerPrivate::windowTitleAddition(const QString &filePath)
|
||||
QString SessionManagerPrivate::sessionTitle(const QString &filePath)
|
||||
{
|
||||
if (SessionManager::isDefaultSession(d->m_sessionName)) {
|
||||
if (filePath.isEmpty()) {
|
||||
@@ -525,12 +530,6 @@ QString SessionManagerPrivate::windowTitleAddition(const QString &filePath)
|
||||
const QList<Project *> projects = SessionManager::projects();
|
||||
if (projects.size() == 1)
|
||||
return projects.first()->displayName();
|
||||
return QString();
|
||||
} else if (Project *project = SessionManager::projectForFile(
|
||||
Utils::FileName::fromString(filePath))) {
|
||||
return project->displayName();
|
||||
} else {
|
||||
return QString();
|
||||
}
|
||||
} else {
|
||||
QString sessionName = d->m_sessionName;
|
||||
@@ -538,6 +537,33 @@ QString SessionManagerPrivate::windowTitleAddition(const QString &filePath)
|
||||
sessionName = SessionManager::tr("Untitled");
|
||||
return sessionName;
|
||||
}
|
||||
return QString();
|
||||
}
|
||||
|
||||
QString SessionManagerPrivate::locationInProject(const QString &filePath) {
|
||||
Project *project = SessionManager::projectForFile(Utils::FileName::fromString(filePath));
|
||||
if (!project)
|
||||
return QString();
|
||||
|
||||
Utils::FileName file = Utils::FileName::fromString(filePath);
|
||||
Utils::FileName parentDir = file.parentDir();
|
||||
if (parentDir == project->projectDirectory())
|
||||
return "@ " + project->displayName();
|
||||
|
||||
if (file.isChildOf(project->projectDirectory())) {
|
||||
Utils::FileName dirInProject = parentDir.relativeChildPath(project->projectDirectory());
|
||||
return "(" + dirInProject.toUserOutput() + " @ " + project->displayName() + ")";
|
||||
}
|
||||
|
||||
// For a file that is "outside" the project it belongs to, we display its
|
||||
// dir's full path because it is easier to read than a series of "../../.".
|
||||
// Example: /home/hugo/GenericProject/App.files lists /home/hugo/lib/Bar.cpp
|
||||
return "(" + parentDir.toUserOutput() + " @ " + project->displayName() + ")";
|
||||
}
|
||||
|
||||
QString SessionManagerPrivate::windowTitleAddition(const QString &filePath)
|
||||
{
|
||||
return locationInProject(filePath);
|
||||
}
|
||||
|
||||
QStringList SessionManagerPrivate::dependenciesOrder() const
|
||||
|
Reference in New Issue
Block a user