#include "ui_WorkAreaUi.h"
#include "frontends/WorkArea.h"
+#include "frontends/KeySymbol.h"
#include <QAbstractScrollArea>
#include <QTabBar>
class QToolButton;
class QWidget;
-#ifdef CursorShape
-#undef CursorShape
-#endif
-
namespace lyx {
class Buffer;
/// is GuiView in fullscreen mode?
bool isFullScreen() const;
///
- void scheduleRedraw();
- ///
BufferView & bufferView();
///
BufferView const & bufferView() const;
///
- void redraw(bool update_metrics);
+ void scheduleRedraw(bool update_metrics);
/// return true if the key is part of a shortcut
bool queryKeySym(KeySymbol const & key, KeyModifier mod) const;
- /// Process Key pressed event.
- /// This needs to be public because it is accessed externally by GuiView.
- void processKeySym(KeySymbol const & key, KeyModifier mod);
bool inDialogMode() const;
void setDialogMode(bool mode);
///
GuiCompleter & completer();
- Qt::CursorShape cursorShape() const;
-
/// Return the GuiView this workArea belongs to
GuiView const & view() const;
GuiView & view();
double pixelRatio() const;
public Q_SLOTS:
+ /// Process Key pressed event.
+ /// This needs to be public because it is accessed externally by GuiView.
+ void processKeySym(KeySymbol const & key, KeyModifier mod);
///
- void stopBlinkingCursor();
+ void stopBlinkingCaret();
///
- void startBlinkingCursor();
+ void startBlinkingCaret();
Q_SIGNALS:
///
void busy(bool);
///
void bufferViewChanged();
+ /// send key event to CompressorProxy
+ void compressKeySym(KeySymbol sym, KeyModifier mod, bool isAutoRepeat);
private Q_SLOTS:
/// Scroll the BufferView.
void scrollTo(int value);
/// timer to limit triple clicks
void doubleClickTimeout();
- /// toggle the cursor's visibility
- void toggleCursor();
+ /// toggle the caret's visibility
+ void toggleCaret();
/// close this work area.
/// Slot for Buffer::closing signal.
void close();
}; // GuiWorkArea
+/// CompressorProxy adapted from Kuba Ober https://stackoverflow.com/a/21006207
+class CompressorProxy : public QObject
+{
+ Q_OBJECT
+ bool emitCheck(bool isAutoRepeat);
+ bool flag_;
+ // input: event to compress
+ Q_SLOT void slot(KeySymbol sym, KeyModifier mod, bool isAutoRepeat);
+ // output: compressed event
+ Q_SIGNAL void signal(KeySymbol sym, KeyModifier mod);
+public:
+ // No default constructor, since the proxy must be a child of the
+ // target object.
+ explicit CompressorProxy(GuiWorkArea * wa);
+};
+
+
class EmbeddedWorkArea : public GuiWorkArea
{
Q_OBJECT
}; // EmbeddedWorkArea
+class GuiWorkAreaContainer;
+
/// A tabbed set of GuiWorkAreas.
class TabWorkArea : public QTabWidget
{
public:
TabWorkArea(QWidget * parent = 0);
+ /// hide QTabWidget methods
+ GuiWorkAreaContainer * currentWidget() const;
+ GuiWorkAreaContainer * widget(int index) const;
+
///
void setFullScreen(bool full_screen);
void showBar(bool show);
bool setCurrentWorkArea(GuiWorkArea *);
GuiWorkArea * addWorkArea(Buffer & buffer, GuiView & view);
bool removeWorkArea(GuiWorkArea *);
- GuiWorkArea * currentWorkArea();
- GuiWorkArea * workArea(Buffer & buffer);
- GuiWorkArea const * workArea(int index) const;
- GuiWorkArea * workArea(int index);
+ GuiWorkArea * currentWorkArea() const;
+ GuiWorkArea * workArea(Buffer & buffer) const;
+ GuiWorkArea * workArea(int index) const;
void paintEvent(QPaintEvent *);
Q_SIGNALS:
void moveTab(int fromIndex, int toIndex);
///
void updateTabTexts();
-
+
private Q_SLOTS:
///
void on_currentTabChanged(int index);
int indexOfWorkArea(GuiWorkArea * w) const;
private:
+ using QTabWidget::addTab;
+ using QTabWidget::insertTab;
+
/// true if position is a tab (rather than the blank space in tab bar)
bool posIsTab(QPoint position);
class GuiWorkAreaContainer : public QWidget, public Ui::WorkAreaUi
{
Q_OBJECT
+ // non-null
GuiWorkArea * const wa_;
void dispatch(FuncRequest f) const;
void mouseDoubleClickEvent(QMouseEvent * event); //override
public:
- ///
+ /// wa != 0
GuiWorkAreaContainer(GuiWorkArea * wa, QWidget * parent = 0);
+ /// non-null
GuiWorkArea * workArea() const { return wa_; }
};