]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/GuiCompleter.cpp
Fix the tab ordering of GuiDocument components.
[lyx.git] / src / frontends / qt4 / GuiCompleter.cpp
index 0c51b6da4135a6e4400e4226964311f36f0f6422..da2d688c59688e90892a7ef407a5928f6cb83542 100644 (file)
@@ -17,7 +17,6 @@
 #include "CompletionList.h"
 #include "Cursor.h"
 #include "Dimension.h"
-#include "FuncRequest.h"
 #include "GuiWorkArea.h"
 #include "GuiView.h"
 #include "LyX.h"
@@ -111,8 +110,7 @@ public:
        {
                if (list_ == 0)
                        return 0;
-               else
-                       return list_->size();
+               return list_->size();
        }
 
        ///
@@ -130,24 +128,23 @@ public:
                if (index.column() == 0)
                        return toqstr(list_->data(index.row()));
 
-               if (index.column() == 1) {
-                       // get icon from cache
-                       QPixmap scaled;
-                       QString const name = ":" + toqstr(list_->icon(index.row()));
-                       if (!QPixmapCache::find("completion" + name, scaled)) {
-                               // load icon from disk
-                               QPixmap p = QPixmap(name);
-                               if (!p.isNull()) {
-                                       // scale it to 16x16 or smaller
-                                       scaled = p.scaled(min(16, p.width()), min(16, p.height()), 
-                                               Qt::KeepAspectRatio, Qt::SmoothTransformation);
-                               }
-
-                               QPixmapCache::insert("completion" + name, scaled);
+               if (index.column() != 1)
+                       return QVariant();
+       
+               // get icon from cache
+               QPixmap scaled;
+               QString const name = ":" + toqstr(list_->icon(index.row()));
+               if (!QPixmapCache::find("completion" + name, scaled)) {
+                       // load icon from disk
+                       QPixmap p = QPixmap(name);
+                       if (!p.isNull()) {
+                               // scale it to 16x16 or smaller
+                               scaled = p.scaled(min(16, p.width()), min(16, p.height()), 
+                                       Qt::KeepAspectRatio, Qt::SmoothTransformation);
                        }
-                       return scaled;
+                       QPixmapCache::insert("completion" + name, scaled);
                }
-               return QVariant();
+               return scaled;
        }
 
 private:
@@ -165,15 +162,15 @@ GuiCompleter::GuiCompleter(GuiWorkArea * gui, QObject * parent)
        model_ = new GuiCompletionModel(this, 0);
        setModel(model_);
        setCompletionMode(QCompleter::PopupCompletion);
-       setCaseSensitivity(Qt::CaseInsensitive);
+       setCaseSensitivity(Qt::CaseSensitive);
        setWidget(gui_);
        
        // create the popup
        QTreeView *listView = new QTreeView;
-        listView->setEditTriggers(QAbstractItemView::NoEditTriggers);
-        listView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
-        listView->setSelectionBehavior(QAbstractItemView::SelectRows);
-        listView->setSelectionMode(QAbstractItemView::SingleSelection);
+       listView->setEditTriggers(QAbstractItemView::NoEditTriggers);
+       listView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+       listView->setSelectionBehavior(QAbstractItemView::SelectRows);
+       listView->setSelectionMode(QAbstractItemView::SingleSelection);
        listView->header()->hide();
        listView->setIndentation(0);
        listView->setUniformRowHeights(true);
@@ -314,10 +311,10 @@ void GuiCompleter::updateVisibility(Cursor & cur, bool start, bool keep, bool cu
        if (!inlineVisible() && possibleInlineState && start
                && cur.inset().automaticInlineCompletion())
                inline_timer_.start(int(lyxrc.completion_inline_delay * 1000));
-       else {
+       else if (cur.inMathed() && !lyxrc.completion_inline_math) {
                // no inline completion, hence a metrics update is needed
-               if (!(cur.disp_.update() & Update::Force))
-                       cur.updateFlags(cur.disp_.update() | Update::SinglePar);
+               if (!(cur.result().screenUpdate() & Update::Force))
+                       cur.screenUpdateFlags(cur.result().screenUpdate() | Update::SinglePar);
        }
 
        // update prefix if any completion is possible
@@ -334,12 +331,12 @@ void GuiCompleter::updateVisibility(Cursor & cur, bool start, bool keep, bool cu
 void GuiCompleter::updateVisibility(bool start, bool keep)
 {
        Cursor cur = gui_->bufferView().cursor();
-       cur.updateFlags(Update::None);
+       cur.screenUpdateFlags(Update::None);
        
        updateVisibility(cur, start, keep);
        
-       if (cur.disp_.update())
-               gui_->bufferView().processUpdateFlags(cur.disp_.update());
+       if (cur.result().screenUpdate())
+               gui_->bufferView().processUpdateFlags(cur.result().screenUpdate());
 }
 
 
@@ -598,52 +595,52 @@ void GuiCompleter::asyncHideInline()
 void GuiCompleter::showPopup()
 {
        Cursor cur = gui_->bufferView().cursor();
-       cur.updateFlags(Update::None);
+       cur.screenUpdateFlags(Update::None);
        
        showPopup(cur);
 
        // redraw if needed
-       if (cur.disp_.update())
-               gui_->bufferView().processUpdateFlags(cur.disp_.update());
+       if (cur.result().screenUpdate())
+               gui_->bufferView().processUpdateFlags(cur.result().screenUpdate());
 }
 
 
 void GuiCompleter::showInline()
 {
        Cursor cur = gui_->bufferView().cursor();
-       cur.updateFlags(Update::None);
+       cur.screenUpdateFlags(Update::None);
        
        showInline(cur);
 
        // redraw if needed
-       if (cur.disp_.update())
-               gui_->bufferView().processUpdateFlags(cur.disp_.update());
+       if (cur.result().screenUpdate())
+               gui_->bufferView().processUpdateFlags(cur.result().screenUpdate());
 }
 
 
 void GuiCompleter::hidePopup()
 {
        Cursor cur = gui_->bufferView().cursor();
-       cur.updateFlags(Update::None);
+       cur.screenUpdateFlags(Update::None);
        
        hidePopup(cur);
        
        // redraw if needed
-       if (cur.disp_.update())
-               gui_->bufferView().processUpdateFlags(cur.disp_.update());
+       if (cur.result().screenUpdate())
+               gui_->bufferView().processUpdateFlags(cur.result().screenUpdate());
 }
 
 
 void GuiCompleter::hideInline()
 {
        Cursor cur = gui_->bufferView().cursor();
-       cur.updateFlags(Update::None);
+       cur.screenUpdateFlags(Update::None);
        
        hideInline(cur);
        
        // redraw if needed
-       if (cur.disp_.update())
-               gui_->bufferView().processUpdateFlags(cur.disp_.update());
+       if (cur.result().screenUpdate())
+               gui_->bufferView().processUpdateFlags(cur.result().screenUpdate());
 }
 
 
@@ -660,7 +657,7 @@ void GuiCompleter::tab()
 {
        BufferView * bv = &gui_->bufferView();
        Cursor cur = bv->cursor();
-       cur.updateFlags(Update::None);
+       cur.screenUpdateFlags(Update::None);
        
        // check that inline completion is active
        if (!inlineVisible() && !uniqueCompletionAvailable()) {
@@ -686,6 +683,7 @@ void GuiCompleter::tab()
        }
        
        // Make undo possible
+       cur.beginUndoGroup();
        cur.recordUndo();
 
        // If completion is active, at least complete by one character
@@ -699,11 +697,14 @@ void GuiCompleter::tab()
                hidePopup(cur);
                hideInline(cur);
                updateVisibility(false, false);
+               cur.endUndoGroup();
                return;
        }
        docstring nextchar = completion.substr(prefix.size(), 1);
-       if (!cur.inset().insertCompletion(cur, nextchar, false))
+       if (!cur.inset().insertCompletion(cur, nextchar, false)) {
+               cur.endUndoGroup();
                return;
+       }
        updatePrefix(cur);
 
        // try to complete as far as it is unique
@@ -721,8 +722,9 @@ void GuiCompleter::tab()
                popup_timer_.start(0);
 
        // redraw if needed
-       if (cur.disp_.update())
-               gui_->bufferView().processUpdateFlags(cur.disp_.update());
+       if (cur.result().screenUpdate())
+               gui_->bufferView().processUpdateFlags(cur.result().screenUpdate());
+       cur.endUndoGroup();
 }
 
 
@@ -877,8 +879,9 @@ docstring GuiCompleter::longestUniqueCompletion() const
 void GuiCompleter::popupActivated(const QString & completion)
 {
        Cursor cur = gui_->bufferView().cursor();
-       cur.updateFlags(Update::None);
-       
+       cur.screenUpdateFlags(Update::None);
+
+       cur.beginUndoGroup();
        cur.recordUndo();
 
        docstring prefix = cur.inset().completionPrefix(cur);
@@ -887,8 +890,9 @@ void GuiCompleter::popupActivated(const QString & completion)
        hidePopup(cur);
        hideInline(cur);
        
-       if (cur.disp_.update())
-               gui_->bufferView().processUpdateFlags(cur.disp_.update());
+       if (cur.result().screenUpdate())
+               gui_->bufferView().processUpdateFlags(cur.result().screenUpdate());
+       cur.endUndoGroup();
 }
 
 
@@ -898,13 +902,13 @@ void GuiCompleter::popupHighlighted(const QString & completion)
                return;
 
        Cursor cur = gui_->bufferView().cursor();
-       cur.updateFlags(Update::None);
+       cur.screenUpdateFlags(Update::None);
        
        if (inlineVisible())
                updateInline(cur, completion);
        
-       if (cur.disp_.update())
-               gui_->bufferView().processUpdateFlags(cur.disp_.update());
+       if (cur.result().screenUpdate())
+               gui_->bufferView().processUpdateFlags(cur.result().screenUpdate());
 }
 
 } // namespace frontend