X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fqt4%2FGuiToolbar.cpp;h=6ff3e9636596977e683264dbda48d617ac5b8085;hb=f1cba8ff64b369792fd49f5ddf90e8126ab476ac;hp=fb552539aa8479dafcfd740850f8fb8e26f043b8;hpb=71860fbc869c1ab1380ac28abfc11feef9912414;p=features.git diff --git a/src/frontends/qt4/GuiToolbar.cpp b/src/frontends/qt4/GuiToolbar.cpp index fb552539aa..6ff3e96365 100644 --- a/src/frontends/qt4/GuiToolbar.cpp +++ b/src/frontends/qt4/GuiToolbar.cpp @@ -3,7 +3,7 @@ * This file is part of LyX, the document processor. * Licence details can be found in the file COPYING. * - * \author Lars Gullik Bjønnes + * \author Lars Gullik Bjønnes * \author John Levon * \author Jean-Marc Lasgouttes * \author Angus Leeming @@ -365,8 +365,9 @@ void GuiLayoutBox::setFilter(QString const & s) filterModel_->triggerLayoutChange(); if (!s.isEmpty()) - owner_.message(_("Filtering layouts with \"" + fromqstr(s) + "\". " - "Press ESC to remove filter.")); + owner_.message(bformat(_("Filtering layouts with \"%1$s\". " + "Press ESC to remove filter."), + qstring_to_ucs4(s))); else owner_.message(_("Enter characters to filter the layout list.")); } @@ -506,13 +507,21 @@ void GuiLayoutBox::set(docstring const & layout) if (!text_class_) return; - QString const & name = toqstr((*text_class_)[layout].name()); - if (name == currentText()) + Layout const & lay = (*text_class_)[layout]; + QString const newLayout = toqstr(lay.name()); + + int const curItem = currentIndex(); + QModelIndex const mindex = + filterModel_->mapToSource(filterModel_->index(curItem, 1)); + QString const & currentLayout = model_->itemFromIndex(mindex)->text(); + if (newLayout == currentLayout) { + LYXERR(Debug::GUI, "Already had " << newLayout << " selected."); return; + } - QList r = model_->findItems(name, Qt::MatchExactly, 1); + QList r = model_->findItems(newLayout, Qt::MatchExactly, 1); if (r.empty()) { - LYXERR0("Trying to select non existent layout type " << name); + LYXERR0("Trying to select non existent layout type " << newLayout); return; } @@ -521,10 +530,12 @@ void GuiLayoutBox::set(docstring const & layout) void GuiLayoutBox::addItemSort(docstring const & item, docstring const & category, - bool sorted, bool sortedByCat) + bool sorted, bool sortedByCat, bool unknown) { QString qitem = toqstr(item); - QString titem = toqstr(translateIfPossible(item)); + // FIXME This is wrong for RTL, I'd suppose. + QString titem = toqstr(translateIfPossible(item) + + (unknown ? _(" (unknown)") : from_ascii(""))); QString qcat = toqstr(translateIfPossible(category)); QList row; @@ -592,7 +603,7 @@ void GuiLayoutBox::updateContents(bool reset) // or we've moved from one inset to another DocumentClass const * text_class = &buffer->params().documentClass(); Inset const * inset = - owner_.view()->cursor().innerParagraph().inInset(); + &(owner_.view()->cursor().innerParagraph().inInset()); if (!reset && text_class_ == text_class && inset_ == inset) { set(owner_.view()->cursor().innerParagraph().layout().name()); return; @@ -607,15 +618,19 @@ void GuiLayoutBox::updateContents(bool reset) for (; lit != len; ++lit) { docstring const & name = lit->name(); - bool const useEmpty = inset_->forceEmptyLayout() || inset_->useEmptyLayout(); + bool const useEmpty = inset_->forcePlainLayout() || inset_->usePlainLayout(); // if this inset requires the empty layout, we skip the default // layout if (name == text_class_->defaultLayoutName() && inset_ && useEmpty) continue; // if it doesn't require the empty layout, we skip it - if (name == text_class_->emptyLayoutName() && inset_ && !useEmpty) + if (name == text_class_->plainLayoutName() && inset_ && !useEmpty) continue; - addItemSort(name, lit->category(), lyxrc.sort_layouts, lyxrc.group_layouts); + // obsoleted layouts are skipped as well + if (!lit->obsoleted_by().empty()) + continue; + addItemSort(name, lit->category(), lyxrc.sort_layouts, + lyxrc.group_layouts, lit->isUnknown()); } set(owner_.view()->cursor().innerParagraph().layout().name()); @@ -624,7 +639,8 @@ void GuiLayoutBox::updateContents(bool reset) // needed to recalculate size hint hide(); setMinimumWidth(sizeHint().width()); - setEnabled(!buffer->isReadonly()); + setEnabled(!buffer->isReadonly() && + lyx::getStatus(FuncRequest(LFUN_LAYOUT)).enabled()); show(); } @@ -633,9 +649,7 @@ void GuiLayoutBox::selected(int index) { // get selection QModelIndex mindex = filterModel_->mapToSource(filterModel_->index(index, 1)); - docstring const layoutName = - qstring_to_ucs4(model_->itemFromIndex(mindex)->text()); - + docstring layoutName = qstring_to_ucs4(model_->itemFromIndex(mindex)->text()); owner_.setFocus(); if (!text_class_) { @@ -653,7 +667,7 @@ void GuiLayoutBox::selected(int index) resetFilter(); return; } - LYXERR0("ERROR (layoutSelected): layout not found!"); + LYXERR0("ERROR (layoutSelected): layout " << layoutName << " not found!"); } @@ -666,7 +680,7 @@ void GuiLayoutBox::selected(int index) GuiToolbar::GuiToolbar(ToolbarInfo const & tbinfo, GuiView & owner) - : QToolBar(qt_(tbinfo.gui_name), &owner), visibility_(0), + : QToolBar(toqstr(tbinfo.gui_name), &owner), visibility_(0), allowauto_(false), owner_(owner), layout_(0), command_buffer_(0), tbinfo_(tbinfo), filled_(false) { @@ -904,7 +918,7 @@ void GuiToolbar::update(bool in_math, bool in_table, bool in_review, QString GuiToolbar::sessionKey() const { - return "view-" + QString::number(owner_.id()) + "/" + objectName(); + return "views/" + QString::number(owner_.id()) + "/" + objectName(); } @@ -957,4 +971,4 @@ void GuiToolbar::toggle() } // namespace frontend } // namespace lyx -#include "GuiToolbar_moc.cpp" +#include "moc_GuiToolbar.cpp"