]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/GuiCompleter.h
Use <cstdint> instead of <boost/cstdint.hpp>
[lyx.git] / src / frontends / qt4 / GuiCompleter.h
index 89028c75e431fc2cd3f9180a39afe8a8e028f9fa..ea22cadd1e67aea3765fd8a223650d19b2e7ece7 100644 (file)
 #ifndef GUICOMPLETER_H
 #define GUICOMPLETER_H
 
-#include "frontends/WorkArea.h"
-
 #include "DocIterator.h"
-#include "FuncRequest.h"
-#include "qt_helpers.h"
 #include "support/docstring.h"
 
-#include <QAbstractItemModel>
 #include <QCompleter>
-#include <QStringListModel>
 #include <QTimer>
 
 namespace lyx {
@@ -31,7 +25,8 @@ class Buffer;
 namespace frontend {
 
 class GuiWorkArea;
-class RtlItemDelegate;
+class CompleterItemDelegate;
+class GuiCompletionModel;
 
 class GuiCompleter : private QCompleter
 {
@@ -51,15 +46,17 @@ public:
        bool popupPossible(Cursor const & cur) const;
        ///
        bool inlinePossible(Cursor const & cur) const;
+       ///
+       bool completionAvailable() const;
        /// Activate the current completion, i.e. finalize it.
        void activate();
        /// Do a completion as far as it is unique, but at least one character.
        void tab();
-       
+
        /// Update the visibility of the popup and the inline completion.
        /// This method might set the update flags of the cursor to request
        /// a redraw.
-       void updateVisibility(Cursor & cur, bool start, bool keep, bool cursorInView = true);
+       void updateVisibility(Cursor & cur, bool start, bool keep);
        /// Update the visibility of the popup and the inline completion.
        /// This method handles the redraw if needed.
        void updateVisibility(bool start, bool keep);
@@ -67,7 +64,9 @@ public:
        QString currentCompletion() const;
        ///
        docstring longestUniqueCompletion() const;
-       
+       ///
+       bool uniqueCompletionAvailable() const;
+
 public Q_SLOTS:
        /// Show the popup.
        void showPopup();
@@ -84,26 +83,32 @@ private Q_SLOTS:
        void popupActivated(const QString & completion);
        ///
        void popupHighlighted(const QString & completion);
-       
+       ///
+       void updateAvailability();
+       /// the asynchronous part of updatePopup(cur)
+       void asyncUpdatePopup();
+       /// the asynchronous part of hidePopup(cur)
+       void asyncHidePopup();
+       /// the asynchronous part of hideInline(cur)
+       void asyncHideInline();
+
 private:
        ///
        void setCurrentCompletion(QString const & s);
        ///
-       void showPopup(Cursor & cur);
-       ///
-       void showInline(Cursor & cur);
+       void showPopup(Cursor const & cur);
        ///
-       void hidePopup(Cursor & cur);
+       void showInline(Cursor const & cur);
        ///
-       void hideInline(Cursor & cur);
+       void hideInline(Cursor const & cur);
        ///
-       void updatePopup(Cursor & cur);
+       void updatePopup(Cursor const & cur);
        ///
-       void updateInline(Cursor & cur, QString const & completion);
+       void updateInline(Cursor const & cur, QString const & completion);
        ///
-       void updatePrefix(Cursor & cur);
+       void updatePrefix(Cursor const & cur);
        ///
-       void updateModel(Cursor & cur, bool popupUpdate, bool inlineUpdate);
+       void updateModel(Cursor const & cur, bool popupUpdate, bool inlineUpdate);
        ///
        bool eventFilter(QObject * watched, QEvent * event);
 
@@ -124,7 +129,14 @@ private:
        /// in addition to know whether the completion is to be kept visible.
        bool inlineVisible_;
        ///
-       RtlItemDelegate * rtlItemDelegate_;
+       bool popupVisible_;
+       /// the model reset is asynchronous in hidePopup/Inline. So let's mark
+       /// a coming reset here by setting it to false.
+       bool modelActive_;
+       ///
+       CompleterItemDelegate * itemDelegate_;
+       ///
+       GuiCompletionModel * model_;
 }; // GuiCompleter
 
 } // namespace frontend