#include "BufferParams.h"
#include "BufferView.h"
#include "Cursor.h"
+#include "DocumentClassPtr.h"
#include "FuncRequest.h"
#include "FuncStatus.h"
-#include "LyXFunc.h"
+#include "LyX.h"
#include "LyXRC.h"
#include "Paragraph.h"
#include "TextClass.h"
#include <QSortFilterProxyModel>
#include <QStandardItemModel>
#include <QTextFrame>
-#include <QToolBar>
using namespace std;
using namespace lyx::support;
///
GuiView & owner_;
///
- DocumentClass const * text_class_;
+ DocumentClassConstPtr text_class_;
///
Inset const * inset_;
layout_->filter();
for (int i = 0; i < f.length(); ++i) {
int p = s.indexOf(f[i], lastp + 1, Qt::CaseInsensitive);
- LASSERT(p != -1, /**/);
+ LASSERT(p != -1, continue);
if (lastp == p - 1 && lastp != -1) {
// remove ")" and append "x)"
r = r.left(r.length() - 4) + s[p] + "</u>";
void LayoutBox::Private::setFilter(QString const & s)
{
+ // exit early if nothing has to be done
+ if (filter_ == s)
+ return;
+
bool enabled = p->view()->updatesEnabled();
p->view()->setUpdatesEnabled(false);
// We do not call our implementation of showPopup because that
// would reset the filter again. This is only needed if the user clicks
// on the QComboBox.
- LASSERT(!inShowPopup_, /**/);
+ LATTEST(!inShowPopup_);
inShowPopup_ = true;
p->QComboBox::showPopup();
inShowPopup_ = false;
}
-LayoutBox::LayoutBox(QToolBar * bar, GuiView & owner)
+LayoutBox::LayoutBox(GuiView & owner)
: d(new Private(this, owner))
{
setSizeAdjustPolicy(QComboBox::AdjustToContents);
QObject::connect(this, SIGNAL(activated(int)),
this, SLOT(selected(int)));
- QObject::connect(bar, SIGNAL(iconSizeChanged(QSize)),
- this, SLOT(setIconSize(QSize)));
- d->owner_.setLayoutDialog(this);
updateContents(true);
}
+LayoutBox::~LayoutBox() {
+ delete d;
+}
+
+
void LayoutBox::Private::countCategories()
{
int n = filterModel_->rowCount();
// call QComboBox::showPopup. But set the inShowPopup_ flag to switch on
// the hack in the item delegate to make space for the headers.
- LASSERT(!d->inShowPopup_, /**/);
+ LATTEST(!d->inShowPopup_);
d->inShowPopup_ = true;
QComboBox::showPopup();
d->inShowPopup_ = false;
void LayoutBox::setIconSize(QSize size)
{
-#ifdef Q_WS_MACX
+#ifdef Q_OS_MAC
bool small = size.height() < 20;
setAttribute(Qt::WA_MacSmallSize, small);
setAttribute(Qt::WA_MacNormalSize, !small);
void LayoutBox::set(docstring const & layout)
{
d->resetFilter();
-
+
if (!d->text_class_)
return;
+ if (!d->text_class_->hasLayout(layout))
+ return;
+
Layout const & lay = (*d->text_class_)[layout];
QString newLayout = toqstr(lay.name());
bool sorted, bool sortedByCat, bool unknown)
{
QString qitem = toqstr(item);
- // FIXME This is wrong for RTL, I'd suppose.
- QString titem = toqstr(translateIfPossible(item) +
- (unknown ? _(" (unknown)") : from_ascii("")));
+ docstring const loc_item = translateIfPossible(item);
+ QString titem = unknown ? toqstr(bformat(_("%1$s (unknown)"), loc_item))
+ : toqstr(loc_item);
QString qcat = toqstr(translateIfPossible(category));
QList<QStandardItem *> row;
void LayoutBox::updateContents(bool reset)
{
d->resetFilter();
-
- Buffer const * buffer = d->owner_.buffer();
- if (!buffer) {
+ BufferView const * bv = d->owner_.currentBufferView();
+ if (!bv) {
d->model_->clear();
setEnabled(false);
- d->text_class_ = 0;
+ d->text_class_.reset();
d->inset_ = 0;
return;
}
-
// we'll only update the layout list if the text class has changed
// or we've moved from one inset to another
- DocumentClass const * text_class = &buffer->params().documentClass();
- Inset const * inset =
- &(d->owner_.view()->cursor().innerText()->inset());
+ DocumentClassConstPtr text_class = bv->buffer().params().documentClassPtr();
+ Inset const * inset = &(bv->cursor().innerText()->inset());
if (!reset && d->text_class_ == text_class && d->inset_ == inset) {
- set(d->owner_.view()->cursor().innerParagraph().layout().name());
+ set(bv->cursor().innerParagraph().layout().name());
return;
}
lyxrc.group_layouts, lit->isUnknown());
}
- set(d->owner_.view()->cursor().innerParagraph().layout().name());
+ set(d->owner_.currentBufferView()->cursor().innerParagraph().layout().name());
d->countCategories();
// needed to recalculate size hint
hide();
setMinimumWidth(sizeHint().width());
- setEnabled(!buffer->isReadonly() &&
+ setEnabled(!bv->buffer().isReadonly() &&
lyx::getStatus(FuncRequest(LFUN_LAYOUT)).enabled());
show();
}
// find corresponding text class
if (d->text_class_->hasLayout(layoutName)) {
FuncRequest const func(LFUN_LAYOUT, layoutName, FuncRequest::TOOLBAR);
- theLyXFunc().setLyXView(&d->owner_);
lyx::dispatch(func);
updateContents(false);
d->resetFilter();