X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fqt4%2FGuiCompleter.cpp;h=4b592dcad72961e8f3ed0c4de1aa19f45298442b;hb=dba608e1d7ce6220bc20470899927a461ee2394c;hp=c2df9160a3a6ea2b0ad6bb484686c9ea658b0e98;hpb=9b4a26a252b2da164fcd6aa84feed0a738b16c10;p=lyx.git diff --git a/src/frontends/qt4/GuiCompleter.cpp b/src/frontends/qt4/GuiCompleter.cpp index c2df9160a3..4b592dcad7 100644 --- a/src/frontends/qt4/GuiCompleter.cpp +++ b/src/frontends/qt4/GuiCompleter.cpp @@ -43,50 +43,31 @@ using namespace lyx::support; namespace lyx { namespace frontend { -class RtlItemDelegate : public QItemDelegate +class CompleterItemDelegate : public QItemDelegate { public: - explicit RtlItemDelegate(QObject * parent) - : QItemDelegate(parent), enabled_(false) + explicit CompleterItemDelegate(QObject * parent) + : QItemDelegate(parent) + {} + + ~CompleterItemDelegate() {} - void setEnabled(bool enabled = true) - { - enabled_ = enabled; - } - protected: void drawDisplay(QPainter * painter, QStyleOptionViewItem const & option, QRect const & rect, QString const & text) const { - if (!enabled_) { - QItemDelegate::drawDisplay(painter, option, rect, text); - return; - } - - // FIXME: do this more elegantly - docstring stltext = qstring_to_ucs4(text); - reverse(stltext.begin(), stltext.end()); - QItemDelegate::drawDisplay(painter, option, rect, toqstr(stltext)); + QItemDelegate::drawDisplay(painter, option, rect, text); } - -private: - bool enabled_; -}; - -class PixmapItemDelegate : public QItemDelegate -{ -public: - explicit PixmapItemDelegate(QObject * parent) - : QItemDelegate(parent) - {} - -protected: void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { + if (index.column() == 0) { + QItemDelegate::paint(painter, option, index); + return; + } QStyleOptionViewItem opt = setOptions(index, option); QVariant value = index.data(Qt::DisplayRole); QPixmap pixmap = qvariant_cast(value); @@ -105,7 +86,6 @@ protected: } }; - class GuiCompletionModel : public QAbstractListModel { public: @@ -116,6 +96,12 @@ public: /// ~GuiCompletionModel() { delete list_; } /// + void setList(CompletionList const * l) { + delete list_; + list_ = l; + reset(); + } + /// bool sorted() const { if (list_) @@ -183,7 +169,8 @@ GuiCompleter::GuiCompleter(GuiWorkArea * gui, QObject * parent) modelActive_(false) { // Setup the completion popup - setModel(new GuiCompletionModel(this, 0)); + model_ = new GuiCompletionModel(this, 0); + setModel(model_); setCompletionMode(QCompleter::PopupCompletion); setWidget(gui_); @@ -198,9 +185,8 @@ GuiCompleter::GuiCompleter(GuiWorkArea * gui, QObject * parent) listView->setUniformRowHeights(true); setPopup(listView); - rtlItemDelegate_ = new RtlItemDelegate(this); - popup()->setItemDelegateForColumn(0, rtlItemDelegate_); - popup()->setItemDelegateForColumn(1, new PixmapItemDelegate(this)); + itemDelegate_ = new CompleterItemDelegate(this); + popup()->setItemDelegate(itemDelegate_); // create timeout timers popup_timer_.setSingleShot(true); @@ -386,7 +372,7 @@ void GuiCompleter::updateInline(Cursor & cur, QString const & completion) // compute postfix docstring prefix = cur.inset().completionPrefix(cur); - docstring postfix = from_utf8(fromqstr(completion.mid(prefix.length()))); + docstring postfix = qstring_to_ucs4(completion.mid(prefix.length())); // shorten it if necessary if (lyxrc.completion_inline_dots != -1 @@ -472,23 +458,20 @@ void GuiCompleter::updateModel(Cursor & cur, bool popupUpdate, bool inlineUpdate if (old.length() == 0) old = last_selection_; + // set whether rtl bool rtl = false; if (cur.inTexted()) { Paragraph const & par = cur.paragraph(); Font const font = - par.getFontSettings(cur.bv().buffer().params(), cur.pos()); + par.getFontSettings(cur.bv().buffer().params(), cur.pos()); rtl = font.isVisibleRightToLeft(); } popup()->setLayoutDirection(rtl ? Qt::RightToLeft : Qt::LeftToRight); - // turn the direction of the strings in the popup. - // Qt does not do that itself. - rtlItemDelegate_->setEnabled(rtl); - // set new model CompletionList const * list = cur.inset().createCompletionList(cur); - setModel(new GuiCompletionModel(this, list)); + model_->setList(list); modelActive_ = true; if (list->sorted()) setModelSorting(QCompleter::CaseSensitivelySortedModel); @@ -556,7 +539,7 @@ void GuiCompleter::asyncHidePopup() { popup()->hide(); if (!inlineVisible()) - setModel(new GuiCompletionModel(this, 0)); + model_->setList(0); } @@ -591,7 +574,7 @@ void GuiCompleter::hideInline(Cursor & cur) void GuiCompleter::asyncHideInline() { if (!popupVisible()) - setModel(new GuiCompletionModel(this, 0)); + model_->setList(0); } @@ -687,7 +670,7 @@ void GuiCompleter::tab() // If completion is active, at least complete by one character docstring prefix = cur.inset().completionPrefix(cur); - docstring completion = from_utf8(fromqstr(currentCompletion())); + docstring completion = qstring_to_ucs4(currentCompletion()); if (completion.size() <= prefix.size()) { // finalize completion cur.inset().insertCompletion(cur, docstring(), true); @@ -867,7 +850,7 @@ docstring GuiCompleter::longestUniqueCompletion() const } } - return from_utf8(fromqstr(s)); + return qstring_to_ucs4(s); } @@ -877,7 +860,7 @@ void GuiCompleter::popupActivated(const QString & completion) cur.updateFlags(Update::None); docstring prefix = cur.inset().completionPrefix(cur); - docstring postfix = from_utf8(fromqstr(completion.mid(prefix.length()))); + docstring postfix = qstring_to_ucs4(completion.mid(prefix.length())); cur.inset().insertCompletion(cur, postfix, true); hidePopup(cur); hideInline(cur);