]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/GuiWorkArea.h
Some cosmetic changes so that GuiWorkArea can be embeddable in a Qt designer dialog.
[lyx.git] / src / frontends / qt4 / GuiWorkArea.h
index a609557220cb7d25011223875f69837a20eee2ca..9694977117bb22db3ed8c9036b1c6460a20e7f03 100644 (file)
@@ -14,7 +14,6 @@
 #define WORKAREA_H
 
 #include "frontends/WorkArea.h"
-#include "frontends/qt4/GuiCompleter.h"
 
 #include "DocIterator.h"
 #include "FuncRequest.h"
@@ -26,6 +25,7 @@
 #include <QMouseEvent>
 #include <QPixmap>
 #include <QResizeEvent>
+#include <QTabBar>
 #include <QTabWidget>
 #include <QTimer>
 
@@ -47,19 +47,10 @@ class Buffer;
 
 namespace frontend {
 
+class GuiCompleter;
 class GuiView;
 class GuiWorkArea;
 
-/// types of cursor in work area
-enum CursorShape {
-       /// normal I-beam
-       BAR_SHAPE,
-       /// L-shape for locked insets of a different language
-       L_SHAPE,
-       /// reverse L-shape for RTL text
-       REVERSED_L_SHAPE
-};
-
 /// for emulating triple click
 class DoubleClick {
 public:
@@ -110,10 +101,19 @@ class GuiWorkArea : public QAbstractScrollArea, public WorkArea
 
 public:
        ///
-       GuiWorkArea(Buffer & buffer, GuiView & lv);
+       GuiWorkArea(QWidget *);
+       ///
+       GuiWorkArea(Buffer & buffer, GuiView & gv);
        ///
        ~GuiWorkArea();
 
+       ///
+       void setBuffer(Buffer &);
+       ///
+       void setGuiView(GuiView &);
+       /// Dummy methods for Designer.
+       void setWidgetResizable(bool) {}
+       void setWidget(QWidget *) {}
        ///
        void setFullScreen(bool full_screen);
        /// is LyXView in fullscreen mode?
@@ -136,9 +136,20 @@ public:
        ///
        void resizeBufferView();
 
+       bool isInDialog() {
+               return dialogMode_;
+       }
+
        ///
-       GuiCompleter & completer() { return completer_; }
-       
+       GuiCompleter & completer() { return *completer_; }
+
+       /// Return true if dialogMode is set
+       bool& dialogMode() { return dialogMode_; }
+
+       /// Return the GuiView this workArea belongs to
+       GuiView const & view() const { return *lyx_view_; }
+       GuiView & view() { return *lyx_view_; }
+
 Q_SIGNALS:
        ///
        void titleChanged(GuiWorkArea *);
@@ -157,9 +168,13 @@ private Q_SLOTS:
        /// close this work area.
        /// Slot for Buffer::closing signal.
        void close();
+       /// Slot to restore proper scrollbar behaviour.
+       void fixVerticalScrollBar();
 
 private:
        friend class GuiCompleter;
+       ///
+       void init();
 
        /// update the passed area.
        void update(int x, int y, int w, int h);
@@ -167,7 +182,8 @@ private:
        void updateScreen();
 
        /// paint the cursor and store the background
-       virtual void showCursor(int x, int y, int h, CursorShape shape);
+       virtual void showCursor(int x, int y, int h,
+               bool l_shape, bool rtl, bool completable);
 
        /// hide the cursor
        virtual void removeCursor();
@@ -243,7 +259,11 @@ private:
        int preedit_lines_;
 
        ///
-       GuiCompleter completer_;
+       GuiCompleter * completer_;
+
+       /// Special mode in which Esc and Enter (with or without Shift)
+       /// are ignored
+       bool dialogMode_;
 }; // GuiWorkArea
 
 
@@ -267,18 +287,63 @@ public:
 Q_SIGNALS:
        ///
        void currentWorkAreaChanged(GuiWorkArea *);
+       ///
+       void lastWorkAreaRemoved();
 
 public Q_SLOTS:
+       /// close current buffer, or the one given by \c clicked_tab_
+       void closeCurrentBuffer();
+       /// close current tab, or the one given by \c clicked_tab_
+       void closeCurrentTab();
        ///
-       void on_currentTabChanged(int index);
+       void updateTabTexts();
+       
+private Q_SLOTS:
        ///
-       void closeCurrentBuffer();
+       void on_currentTabChanged(int index);
        ///
-       void closeCurrentTab();
+       void showContextMenu(const QPoint & pos);
        ///
-       void updateTabText(GuiWorkArea *);
+       void moveTab(int fromIndex, int toIndex);
+
+private:
+       int clicked_tab_;
 }; // TabWorkArea
 
+
+class DragTabBar : public QTabBar
+{
+       Q_OBJECT
+public:
+       ///
+       DragTabBar(QWidget * parent = 0);
+
+#if QT_VERSION < 0x040300
+       ///
+       int tabAt(QPoint const & position) const;
+#endif
+
+protected:
+       ///
+       void mousePressEvent(QMouseEvent * event);
+       ///
+       void mouseMoveEvent(QMouseEvent * event);
+       ///
+       void dragEnterEvent(QDragEnterEvent * event);
+       ///
+       void dropEvent(QDropEvent * event);
+
+private:
+       ///
+       QPoint dragStartPos_;
+       ///
+       int dragCurrentIndex_;
+
+Q_SIGNALS:
+       ///
+       void tabMoveRequested(int fromIndex, int toIndex);
+};
+
 } // namespace frontend
 } // namespace lyx