X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fqt4%2FGuiWorkArea.h;h=173d3e298749823787cae5a800b3642ed735c482;hb=39d569661a3f4411d4501f9a8db9c7360ef5d568;hp=af067d69209326744ed55fcaa892449a24ce5069;hpb=3941b00ec7d6d52c5e169e09408f0b5a7c97e5c1;p=lyx.git diff --git a/src/frontends/qt4/GuiWorkArea.h b/src/frontends/qt4/GuiWorkArea.h index af067d6920..173d3e2987 100644 --- a/src/frontends/qt4/GuiWorkArea.h +++ b/src/frontends/qt4/GuiWorkArea.h @@ -15,13 +15,16 @@ #include "frontends/WorkArea.h" +#include "DocIterator.h" #include "FuncRequest.h" +#include "qt_helpers.h" +#include "support/docstring.h" #include "support/Timeout.h" #include #include #include -#include +#include #include #include @@ -29,8 +32,10 @@ class QContextMenuEvent; class QDragEnterEvent; class QDropEvent; class QKeyEvent; -class QWheelEvent; class QPaintEvent; +class QResizeEvent; +class QToolButton; +class QWheelEvent; class QWidget; #ifdef CursorShape @@ -43,17 +48,9 @@ class Buffer; namespace frontend { +class GuiCompleter; class GuiView; - -/// 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 -}; +class GuiWorkArea; /// for emulating triple click class DoubleClick { @@ -88,9 +85,6 @@ public: FuncRequest cmd; Timeout timeout; bool restart_timeout; - int x_old; - int y_old; - double scrollbar_value_old; }; @@ -105,10 +99,22 @@ class GuiWorkArea : public QAbstractScrollArea, public WorkArea public: /// - GuiWorkArea(Buffer & buffer, GuiView & lv); + GuiWorkArea(QWidget *); + /// + GuiWorkArea(Buffer & buffer, GuiView & gv); /// ~GuiWorkArea(); + /// + void init(); + /// + void setBuffer(Buffer &); + /// + void setGuiView(GuiView &); + /// + void setFullScreen(bool full_screen); + /// is GuiView in fullscreen mode? + bool isFullScreen(); /// void scheduleRedraw() { schedule_redraw_ = true; } /// @@ -116,7 +122,7 @@ public: /// BufferView const & bufferView() const; /// - void redraw(); + void redraw(bool update_metrics); /// void stopBlinkingCursor(); /// @@ -127,6 +133,22 @@ public: /// void resizeBufferView(); + bool inDialogMode() const { return dialog_mode_; } + void setDialogMode(bool mode) { dialog_mode_ = mode; } + + /// + GuiCompleter & completer() { return *completer_; } + + Qt::CursorShape cursorShape() const; + void setCursorShape(Qt::CursorShape shape); + + /// Change the cursor when the mouse hovers over a clickable inset + void updateCursorShape(); + + /// Return the GuiView this workArea belongs to + GuiView const & view() const { return *lyx_view_; } + GuiView & view() { return *lyx_view_; } + Q_SIGNALS: /// void titleChanged(GuiWorkArea *); @@ -145,20 +167,25 @@ 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; + /// update the passed area. void update(int x, int y, int w, int h); /// 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(); - /// This function is called when the buffer readonly status change. + /// This function should be called to update the buffer readonly status. void setReadOnly(bool); /// Update window titles of all users. @@ -205,6 +232,8 @@ private: /// BufferView * buffer_view_; + /// Read only Buffer status cache. + bool read_only_; /// GuiView * lyx_view_; /// is the cursor currently displayed @@ -227,9 +256,49 @@ private: bool schedule_redraw_; /// int preedit_lines_; + + /// + GuiCompleter * completer_; + + /// Special mode in which Esc and Enter (with or without Shift) + /// are ignored + bool dialog_mode_; + /// store the name of the context menu when the mouse is + /// pressed. This is used to get the correct context menu + /// when the menu is actually shown (after releasing on Windows) + /// and after the DEPM has done its job. + docstring context_menu_name_; }; // GuiWorkArea +class EmbeddedWorkArea : public GuiWorkArea +{ + Q_OBJECT +public: + /// + EmbeddedWorkArea(QWidget *); + ~EmbeddedWorkArea(); + + /// Dummy methods for Designer. + void setWidgetResizable(bool) {} + void setWidget(QWidget *) {} + + QSize sizeHint () const; + /// + void disable(); + +protected: + /// + void closeEvent(QCloseEvent * ev); + /// + void hideEvent(QHideEvent *ev); + +private: + /// Embedded Buffer. + Buffer * buffer_; +}; // EmbeddedWorkArea + + /// A tabbed set of GuiWorkAreas. class TabWorkArea : public QTabWidget { @@ -237,6 +306,8 @@ class TabWorkArea : public QTabWidget public: TabWorkArea(QWidget * parent = 0); + /// + void setFullScreen(bool full_screen); void showBar(bool show); void closeAll(); bool setCurrentWorkArea(GuiWorkArea *); @@ -244,20 +315,75 @@ public: bool removeWorkArea(GuiWorkArea *); GuiWorkArea * currentWorkArea(); GuiWorkArea * workArea(Buffer & buffer); + GuiWorkArea * workArea(int index); Q_SIGNALS: /// void currentWorkAreaChanged(GuiWorkArea *); + /// + void lastWorkAreaRemoved(); public Q_SLOTS: + /// close current buffer, or the one given by \c clicked_tab_ + void closeCurrentBuffer(); + /// hide current tab, or the one given by \c clicked_tab_ + void hideCurrentTab(); + /// close the tab given by \c index + void closeTab(int index); + /// + void updateTabTexts(); + +private Q_SLOTS: /// void on_currentTabChanged(int index); /// - void closeCurrentTab(); + void showContextMenu(const QPoint & pos); + /// + void moveTab(int fromIndex, int toIndex); + /// + void mouseDoubleClickEvent(QMouseEvent * event); + +private: + /// + int clicked_tab_; /// - void updateTabText(GuiWorkArea *); + QToolButton * closeBufferButton; }; // 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