Display externally modified status

This commit is contained in:
Guillaume Munch 2017-02-28 22:58:44 +01:00
parent 7c123507a4
commit 1e57fd12b1
6 changed files with 32 additions and 13 deletions

View File

@ -33,10 +33,8 @@ void WorkAreaManager::remove(WorkArea * wa)
void WorkAreaManager::redrawAll(bool update_metrics) void WorkAreaManager::redrawAll(bool update_metrics)
{ {
iterator it = work_areas_.begin(); for (WorkArea * wa : work_areas_)
iterator const en = work_areas_.end(); wa->redraw(update_metrics);
for (; it != en; ++it)
(*it)->redraw(update_metrics);
} }
@ -50,12 +48,11 @@ void WorkAreaManager::closeAll()
void WorkAreaManager::updateTitles() void WorkAreaManager::updateTitles()
{ {
iterator it = work_areas_.begin(); for (WorkArea * wa : work_areas_)
iterator const en = work_areas_.end(); wa->updateWindowTitle();
for (; it != en; ++it)
(*it)->updateWindowTitle();
} }
} // namespace frontend } // namespace frontend
} // namespace lyx } // namespace lyx

View File

@ -38,7 +38,8 @@ public:
void redrawAll(bool update_metrics); void redrawAll(bool update_metrics);
/// ///
void closeAll(); void closeAll();
/// Update window titles of all users. /// Update window titles of all users and the external modifications
/// warning.
void updateTitles(); void updateTitles();
private: private:

View File

@ -1121,6 +1121,12 @@ void GuiView::updateWindowTitle(GuiWorkArea * wa)
Buffer const & buf = wa->bufferView().buffer(); Buffer const & buf = wa->bufferView().buffer();
// Set the windows title // Set the windows title
docstring title = buf.fileName().displayName(130) + from_ascii("[*]"); docstring title = buf.fileName().displayName(130) + from_ascii("[*]");
if (buf.notifiesExternalModification()) {
title = bformat(_("%1$s (modified externally)"), title);
// If the external modification status has changed, then maybe the status of
// buffer-save has changed too.
updateToolbars();
}
#ifndef Q_WS_MAC #ifndef Q_WS_MAC
title += from_ascii(" - LyX"); title += from_ascii(" - LyX");
#endif #endif

View File

@ -251,7 +251,7 @@ GuiWorkArea::Private::Private(GuiWorkArea * parent)
need_resize_(false), schedule_redraw_(false), preedit_lines_(1), need_resize_(false), schedule_redraw_(false), preedit_lines_(1),
pixel_ratio_(1.0), pixel_ratio_(1.0),
completer_(new GuiCompleter(p, p)), dialog_mode_(false), completer_(new GuiCompleter(p, p)), dialog_mode_(false),
read_only_(false), clean_(true) read_only_(false), clean_(true), externally_modified_(false)
{ {
} }
@ -1390,12 +1390,16 @@ QVariant GuiWorkArea::inputMethodQuery(Qt::InputMethodQuery query) const
void GuiWorkArea::updateWindowTitle() void GuiWorkArea::updateWindowTitle()
{ {
Buffer const & buf = bufferView().buffer(); Buffer const & buf = bufferView().buffer();
if (buf.fileName() != d->file_name_ || buf.isReadonly() != d->read_only_ if (buf.fileName() != d->file_name_
|| buf.lyxvc().vcstatus() != d->vc_status_ || buf.isClean() != d->clean_) { || buf.isReadonly() != d->read_only_
|| buf.lyxvc().vcstatus() != d->vc_status_
|| buf.isClean() != d->clean_
|| buf.notifiesExternalModification() != d->externally_modified_) {
d->file_name_ = buf.fileName(); d->file_name_ = buf.fileName();
d->read_only_ = buf.isReadonly(); d->read_only_ = buf.isReadonly();
d->vc_status_ = buf.lyxvc().vcstatus(); d->vc_status_ = buf.lyxvc().vcstatus();
d->clean_ = buf.isClean(); d->clean_ = buf.isClean();
d->externally_modified_ = buf.notifiesExternalModification();
Q_EMIT titleChanged(this); Q_EMIT titleChanged(this);
} }
} }
@ -2052,9 +2056,14 @@ void TabWorkArea::updateTabTexts()
QString tab_tooltip = it->abs(); QString tab_tooltip = it->abs();
if (buf.isReadonly()) { if (buf.isReadonly()) {
setTabIcon(tab_index, QIcon(getPixmap("images/", "emblem-readonly", "svgz,png"))); setTabIcon(tab_index, QIcon(getPixmap("images/", "emblem-readonly", "svgz,png")));
tab_tooltip = qt_("%1 (read only)").arg(it->abs()); tab_tooltip = qt_("%1 (read only)").arg(tab_tooltip);
} else } else
setTabIcon(tab_index, QIcon()); setTabIcon(tab_index, QIcon());
if (buf.notifiesExternalModification()) {
QString const warn = qt_("%1 (modified externally)");
tab_tooltip = warn.arg(tab_tooltip);
tab_text += QChar(0x26a0);
}
setTabText(tab_index, tab_text); setTabText(tab_index, tab_text);
setTabToolTip(tab_index, tab_tooltip); setTabToolTip(tab_index, tab_tooltip);
} }

View File

@ -196,6 +196,8 @@ struct GuiWorkArea::Private
docstring vc_status_; docstring vc_status_;
/// ///
bool clean_; bool clean_;
///
bool externally_modified_;
}; // GuiWorkArea }; // GuiWorkArea

View File

@ -990,6 +990,8 @@ void MenuDefinition::expandDocuments()
QString label = toqstr(b.fileName().displayName(20)); QString label = toqstr(b.fileName().displayName(20));
if (!b.isClean()) if (!b.isClean())
label += "*"; label += "*";
if (b.notifiesExternalModification())
label += QChar(0x26a0);
if (i < 10) if (i < 10)
label = QString::number(i) + ". " + label + '|' + QString::number(i); label = QString::number(i) + ". " + label + '|' + QString::number(i);
add(MenuItem(MenuItem::Command, label, add(MenuItem(MenuItem::Command, label,
@ -1007,6 +1009,8 @@ void MenuDefinition::expandDocuments()
QString label = toqstr(b->fileName().displayName(20)); QString label = toqstr(b->fileName().displayName(20));
if (!b->isClean()) if (!b->isClean())
label += "*"; label += "*";
if (b->notifiesExternalModification())
label += QChar(0x26a0);
if (i < 10) if (i < 10)
label = QString::number(i) + ". " + label + '|' + QString::number(i); label = QString::number(i) + ". " + label + '|' + QString::number(i);
item.submenu().add(MenuItem(MenuItem::Command, label, item.submenu().add(MenuItem(MenuItem::Command, label,