Author: younes
Date: Mon Oct 17 00:48:26 2011
New Revision: 39872
URL: http://www.lyx.org/trac/changeset/39872
Log:
GuiWorkArea: Move private stuff to GuiWorkArea_Private.h.
Added:
lyx-devel/trunk/src/frontends/qt4/GuiWorkArea_Private.h
- copied, changed from r39870,
lyx-devel/trunk/src/frontends/qt4/GuiWorkArea.h
Modified:
lyx-devel/trunk/src/frontends/qt4/FindAndReplace.h
lyx-devel/trunk/src/frontends/qt4/GuiCompleter.cpp
lyx-devel/trunk/src/frontends/qt4/GuiWorkArea.cpp
lyx-devel/trunk/src/frontends/qt4/GuiWorkArea.h
lyx-devel/trunk/src/frontends/qt4/Makefile.am
Modified: lyx-devel/trunk/src/frontends/qt4/FindAndReplace.h
==============================================================================
--- lyx-devel/trunk/src/frontends/qt4/FindAndReplace.h Sun Oct 16 21:57:10
2011 (r39871)
+++ lyx-devel/trunk/src/frontends/qt4/FindAndReplace.h Mon Oct 17 00:48:26
2011 (r39872)
@@ -15,6 +15,8 @@
#include "GuiWorkArea.h"
#include "DockView.h"
+// This is needed so that ui_FindAndReplaceUi.h can find qt_()
+#include "qt_helpers.h"
#include "ui_FindAndReplaceUi.h"
#include "BufferView.h"
Modified: lyx-devel/trunk/src/frontends/qt4/GuiCompleter.cpp
==============================================================================
--- lyx-devel/trunk/src/frontends/qt4/GuiCompleter.cpp Sun Oct 16 21:57:10
2011 (r39871)
+++ lyx-devel/trunk/src/frontends/qt4/GuiCompleter.cpp Mon Oct 17 00:48:26
2011 (r39872)
@@ -29,6 +29,7 @@
#include <QApplication>
#include <QHeaderView>
+#include <QKeyEvent>
#include <QPainter>
#include <QPixmapCache>
#include <QScrollBar>
Modified: lyx-devel/trunk/src/frontends/qt4/GuiWorkArea.cpp
==============================================================================
--- lyx-devel/trunk/src/frontends/qt4/GuiWorkArea.cpp Sun Oct 16 21:57:10
2011 (r39871)
+++ lyx-devel/trunk/src/frontends/qt4/GuiWorkArea.cpp Mon Oct 17 00:48:26
2011 (r39872)
@@ -12,6 +12,7 @@
#include <config.h>
#include "GuiWorkArea.h"
+#include "GuiWorkArea_Private.h"
#include "ColorCache.h"
#include "FontLoader.h"
@@ -235,21 +236,24 @@
{}
-GuiWorkArea::GuiWorkArea(QWidget *)
- : buffer_view_(0), lyx_view_(0),
- cursor_visible_(false),
- need_resize_(false), schedule_redraw_(false),
- preedit_lines_(1), completer_(new GuiCompleter(this, this))
+GuiWorkArea::Private::Private(GuiWorkArea * parent)
+: p(parent), buffer_view_(0), read_only_(false), lyx_view_(0),
cursor_visible_(false),
+need_resize_(false), schedule_redraw_(false), preedit_lines_(1),
+completer_(new GuiCompleter(p, p))
+{
+}
+
+
+GuiWorkArea::GuiWorkArea(QWidget * w)
+: d(new Private(this))
{
}
GuiWorkArea::GuiWorkArea(Buffer & buffer, GuiView & gv)
- : buffer_view_(0), read_only_(buffer.isReadonly()), lyx_view_(0),
- cursor_visible_(false),
- need_resize_(false), schedule_redraw_(false),
- preedit_lines_(1), completer_(new GuiCompleter(this, this))
+: d(new Private(this))
{
+ d->read_only_ = buffer.isReadonly();
setGuiView(gv);
setBuffer(buffer);
init();
@@ -259,24 +263,24 @@
void GuiWorkArea::init()
{
// Setup the signals
- connect(&cursor_timeout_, SIGNAL(timeout()),
+ connect(&d->cursor_timeout_, SIGNAL(timeout()),
this, SLOT(toggleCursor()));
int const time = QApplication::cursorFlashTime() / 2;
if (time > 0) {
- cursor_timeout_.setInterval(time);
- cursor_timeout_.start();
+ d->cursor_timeout_.setInterval(time);
+ d->cursor_timeout_.start();
} else {
// let's initialize this just to be safe
- cursor_timeout_.setInterval(500);
+ d->cursor_timeout_.setInterval(500);
}
- screen_ = QPixmap(viewport()->width(), viewport()->height());
+ d->screen_ = QPixmap(viewport()->width(), viewport()->height());
// With Qt4.5 a mouse event will happen before the first paint event
// so make sure that the buffer view has an up to date metrics.
- buffer_view_->resize(viewport()->width(), viewport()->height());
- cursor_ = new frontend::CursorWidget();
- cursor_->hide();
+ d->buffer_view_->resize(viewport()->width(), viewport()->height());
+ d->cursor_ = new frontend::CursorWidget();
+ d->cursor_->hide();
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setAcceptDrops(true);
@@ -292,9 +296,9 @@
setFocusPolicy(Qt::StrongFocus);
- setCursorShape(Qt::IBeamCursor);
+ d->setCursorShape(Qt::IBeamCursor);
- synthetic_mouse_event_.timeout.timeout.connect(
+ d->synthetic_mouse_event_.timeout.timeout.connect(
bind(&GuiWorkArea::generateSyntheticMouseEvent,
this));
@@ -309,18 +313,19 @@
// Must be set when creating custom text editing widgets.
setAttribute(Qt::WA_InputMethodEnabled, true);
- dialog_mode_ = false;
+ d->dialog_mode_ = false;
}
GuiWorkArea::~GuiWorkArea()
{
- buffer_view_->buffer().workAreaManager().remove(this);
- delete buffer_view_;
- delete cursor_;
+ d->buffer_view_->buffer().workAreaManager().remove(this);
+ delete d->buffer_view_;
+ delete d->cursor_;
// Completer has a QObject parent and is thus automatically destroyed.
// See #4758.
// delete completer_;
+ delete d;
}
@@ -330,13 +335,13 @@
}
-void GuiWorkArea::setCursorShape(Qt::CursorShape shape)
+void GuiWorkArea::Private::setCursorShape(Qt::CursorShape shape)
{
- viewport()->setCursor(shape);
+ p->viewport()->setCursor(shape);
}
-void GuiWorkArea::updateCursorShape()
+void GuiWorkArea::Private::updateCursorShape()
{
setCursorShape(buffer_view_->clickableInset()
? Qt::PointingHandCursor : Qt::IBeamCursor);
@@ -345,14 +350,14 @@
void GuiWorkArea::setGuiView(GuiView & gv)
{
- lyx_view_ = &gv;
+ d->lyx_view_ = &gv;
}
void GuiWorkArea::setBuffer(Buffer & buffer)
{
- delete buffer_view_;
- buffer_view_ = new BufferView(buffer);
+ delete d->buffer_view_;
+ d->buffer_view_ = new BufferView(buffer);
buffer.workAreaManager().add(this);
// HACK: Prevents an additional redraw when the scrollbar pops up
@@ -376,13 +381,13 @@
void GuiWorkArea::close()
{
- lyx_view_->removeWorkArea(this);
+ d->lyx_view_->removeWorkArea(this);
}
void GuiWorkArea::setFullScreen(bool full_screen)
{
- buffer_view_->setFullScreen(full_screen);
+ d->buffer_view_->setFullScreen(full_screen);
setFrameStyle(QFrame::NoFrame);
if (full_screen) {
setFrameStyle(QFrame::NoFrame);
@@ -395,20 +400,20 @@
BufferView & GuiWorkArea::bufferView()
{
- return *buffer_view_;
+ return *d->buffer_view_;
}
BufferView const & GuiWorkArea::bufferView() const
{
- return *buffer_view_;
+ return *d->buffer_view_;
}
void GuiWorkArea::stopBlinkingCursor()
{
- cursor_timeout_.stop();
- hideCursor();
+ d->cursor_timeout_.stop();
+ d->hideCursor();
}
@@ -420,19 +425,19 @@
Point p;
int h = 0;
- buffer_view_->cursorPosAndHeight(p, h);
+ d->buffer_view_->cursorPosAndHeight(p, h);
// Don't start blinking if the cursor isn't on screen.
- if (!buffer_view_->cursorInView(p, h))
+ if (!d->buffer_view_->cursorInView(p, h))
return;
- showCursor();
+ d->showCursor();
//we're not supposed to cache this value.
int const time = QApplication::cursorFlashTime() / 2;
if (time <= 0)
return;
- cursor_timeout_.setInterval(time);
- cursor_timeout_.start();
+ d->cursor_timeout_.setInterval(time);
+ d->cursor_timeout_.start();
}
@@ -444,46 +449,46 @@
// No need to do anything if this is the current view. The BufferView
// metrics are already up to date.
- if (update_metrics || lyx_view_ != guiApp->currentView()
- || lyx_view_->currentWorkArea() != this) {
+ if (update_metrics || d->lyx_view_ != guiApp->currentView()
+ || d->lyx_view_->currentWorkArea() != this) {
// FIXME: it would be nice to optimize for the off-screen case.
- buffer_view_->cursor().fixIfBroken();
- buffer_view_->updateMetrics();
- buffer_view_->cursor().fixIfBroken();
+ d->buffer_view_->cursor().fixIfBroken();
+ d->buffer_view_->updateMetrics();
+ d->buffer_view_->cursor().fixIfBroken();
}
// update cursor position, because otherwise it has to wait until
// the blinking interval is over
- if (cursor_visible_) {
- hideCursor();
- showCursor();
+ if (d->cursor_visible_) {
+ d->hideCursor();
+ d->showCursor();
}
LYXERR(Debug::WORKAREA, "WorkArea::redraw screen");
- updateScreen();
+ d->updateScreen();
update(0, 0, viewport()->width(), viewport()->height());
/// \warning: scrollbar updating *must* be done after the BufferView is
drawn
/// because \c BufferView::updateScrollbar() is called in \c
BufferView::draw().
- updateScrollbar();
- lyx_view_->updateStatusBar();
+ d->updateScrollbar();
+ d->lyx_view_->updateStatusBar();
if (lyxerr.debugging(Debug::WORKAREA))
- buffer_view_->coordCache().dump();
+ d->buffer_view_->coordCache().dump();
- setReadOnly(buffer_view_->buffer().isReadonly());
+ d->setReadOnly(d->buffer_view_->buffer().isReadonly());
- updateCursorShape();
+ d->updateCursorShape();
}
void GuiWorkArea::processKeySym(KeySymbol const & key, KeyModifier mod)
{
- if (lyx_view_->isFullScreen() && lyx_view_->menuBar()->isVisible()
+ if (d->lyx_view_->isFullScreen() && d->lyx_view_->menuBar()->isVisible()
&& lyxrc.full_screen_menubar) {
// FIXME HACK: we should not have to do this here. See related
comment
// in GuiView::event() (QEvent::ShortcutOverride)
- lyx_view_->menuBar()->hide();
+ d->lyx_view_->menuBar()->hide();
}
// In order to avoid bad surprise in the middle of an operation,
@@ -494,7 +499,7 @@
}
-void GuiWorkArea::dispatch(FuncRequest const & cmd0, KeyModifier mod)
+void GuiWorkArea::Private::dispatch(FuncRequest const & cmd0, KeyModifier mod)
{
// Handle drag&drop
if (cmd0.action() == LFUN_FILE_OPEN) {
@@ -522,7 +527,7 @@
// In order to avoid bad surprise in the middle of an operation, we
better stop
// the blinking cursor.
if (notJustMovingTheMouse)
- stopBlinkingCursor();
+ p->stopBlinkingCursor();
buffer_view_->mouseEventDispatch(cmd);
@@ -541,23 +546,23 @@
lyx_view_->clearMessage();
// Show the cursor immediately after any operation
- startBlinkingCursor();
+ p->startBlinkingCursor();
}
updateCursorShape();
}
-void GuiWorkArea::resizeBufferView()
+void GuiWorkArea::Private::resizeBufferView()
{
// WARNING: Please don't put any code that will trigger a repaint here!
// We are already inside a paint event.
lyx_view_->setBusy(true);
- Point p;
+ Point point;
int h = 0;
- buffer_view_->cursorPosAndHeight(p, h);
- bool const cursor_in_view = buffer_view_->cursorInView(p, h);
- buffer_view_->resize(viewport()->width(), viewport()->height());
+ buffer_view_->cursorPosAndHeight(point, h);
+ bool const cursor_in_view = buffer_view_->cursorInView(point, h);
+ buffer_view_->resize(p->viewport()->width(), p->viewport()->height());
if (cursor_in_view)
buffer_view_->scrollToCursor();
updateScreen();
@@ -574,7 +579,7 @@
}
-void GuiWorkArea::showCursor()
+void GuiWorkArea::Private::showCursor()
{
if (cursor_visible_)
return;
@@ -611,7 +616,7 @@
}
-void GuiWorkArea::hideCursor()
+void GuiWorkArea::Private::hideCursor()
{
if (!cursor_visible_)
return;
@@ -623,35 +628,35 @@
void GuiWorkArea::toggleCursor()
{
- if (cursor_visible_)
- hideCursor();
+ if (d->cursor_visible_)
+ d->hideCursor();
else
- showCursor();
+ d->showCursor();
}
-void GuiWorkArea::updateScrollbar()
+void GuiWorkArea::Private::updateScrollbar()
{
ScrollbarParameters const & scroll_ =
buffer_view_->scrollbarParameters();
// WARNING: don't touch at the scrollbar value like this:
// verticalScrollBar()->setValue(scroll_.position);
// because this would cause a recursive signal/slot calling with
// GuiWorkArea::scrollTo
- verticalScrollBar()->setRange(scroll_.min, scroll_.max);
- verticalScrollBar()->setPageStep(scroll_.page_step);
- verticalScrollBar()->setSingleStep(scroll_.single_step);
- verticalScrollBar()->setSliderPosition(scroll_.position);
+ p->verticalScrollBar()->setRange(scroll_.min, scroll_.max);
+ p->verticalScrollBar()->setPageStep(scroll_.page_step);
+ p->verticalScrollBar()->setSingleStep(scroll_.single_step);
+ p->verticalScrollBar()->setSliderPosition(scroll_.position);
}
void GuiWorkArea::scrollTo(int value)
{
stopBlinkingCursor();
- buffer_view_->scrollDocView(value, true);
+ d->buffer_view_->scrollDocView(value, true);
if (lyxrc.cursor_follows_scrollbar) {
- buffer_view_->setCursorFromScrollbar();
- lyx_view_->updateLayoutList();
+ d->buffer_view_->setCursorFromScrollbar();
+ d->lyx_view_->updateLayoutList();
}
// Show the cursor immediately after any operation.
startBlinkingCursor();
@@ -667,7 +672,7 @@
if (lyxrc.use_tooltip) {
QPoint pos = helpEvent->pos();
if (pos.x() < viewport()->width()) {
- QString s =
toqstr(buffer_view_->toolTip(pos.x(), pos.y()));
+ QString s =
toqstr(d->buffer_view_->toolTip(pos.x(), pos.y()));
QToolTip::showText(helpEvent->globalPos(), s);
}
else
@@ -705,10 +710,10 @@
docstring name;
if (e->reason() == QContextMenuEvent::Mouse)
// the menu name is set on mouse press
- name = context_menu_name_;
+ name = d->context_menu_name_;
else {
QPoint pos = e->pos();
- Cursor const & cur = buffer_view_->cursor();
+ Cursor const & cur = d->buffer_view_->cursor();
if (e->reason() == QContextMenuEvent::Keyboard &&
cur.inTexted()) {
// Do not access the context menu of math right in
front of before
// the cursor. This does not work when the cursor is in
text.
@@ -721,7 +726,7 @@
++pos.rx();
}
}
- name = buffer_view_->contextMenu(pos.x(), pos.y());
+ name = d->buffer_view_->contextMenu(pos.x(), pos.y());
}
if (name.empty()) {
@@ -731,7 +736,7 @@
// always show mnemonics when the keyboard is used to show the context
menu
// FIXME: This should be fixed in Qt itself
bool const keyboard = (e->reason() == QContextMenuEvent::Keyboard);
- QMenu * menu = guiApp->menus().menu(toqstr(name), *lyx_view_, keyboard);
+ QMenu * menu = guiApp->menus().menu(toqstr(name), *d->lyx_view_,
keyboard);
if (!menu) {
QAbstractScrollArea::contextMenuEvent(e);
return;
@@ -746,8 +751,8 @@
void GuiWorkArea::focusInEvent(QFocusEvent * e)
{
LYXERR(Debug::DEBUG, "GuiWorkArea::focusInEvent(): " << this << endl);
- if (lyx_view_->currentWorkArea() != this)
- lyx_view_->setCurrentWorkArea(this);
+ if (d->lyx_view_->currentWorkArea() != this)
+ d->lyx_view_->setCurrentWorkArea(this);
startBlinkingCursor();
QAbstractScrollArea::focusInEvent(e);
@@ -764,11 +769,11 @@
void GuiWorkArea::mousePressEvent(QMouseEvent * e)
{
- if (dc_event_.active && dc_event_ == *e) {
- dc_event_.active = false;
+ if (d->dc_event_.active && d->dc_event_ == *e) {
+ d->dc_event_.active = false;
FuncRequest cmd(LFUN_MOUSE_TRIPLE, e->x(), e->y(),
q_button_state(e->button()));
- dispatch(cmd);
+ d->dispatch(cmd);
e->accept();
return;
}
@@ -777,7 +782,7 @@
FuncRequest const cmd(LFUN_MOUSE_PRESS, e->x(), e->y(),
q_button_state(e->button()));
- dispatch(cmd, q_key_state(e->modifiers()));
+ d->dispatch(cmd, q_key_state(e->modifiers()));
// Save the context menu on mouse press, because also the mouse
// cursor is set on mouse press. Afterwards, we can either release
@@ -785,7 +790,7 @@
// due to the DEPM. We need to do this after the mouse has been
// set in dispatch(), because the selection state might change.
if (e->button() == Qt::RightButton)
- context_menu_name_ = buffer_view_->contextMenu(e->x(), e->y());
+ d->context_menu_name_ = d->buffer_view_->contextMenu(e->x(),
e->y());
e->accept();
}
@@ -793,12 +798,12 @@
void GuiWorkArea::mouseReleaseEvent(QMouseEvent * e)
{
- if (synthetic_mouse_event_.timeout.running())
- synthetic_mouse_event_.timeout.stop();
+ if (d->synthetic_mouse_event_.timeout.running())
+ d->synthetic_mouse_event_.timeout.stop();
FuncRequest const cmd(LFUN_MOUSE_RELEASE, e->x(), e->y(),
q_button_state(e->button()));
- dispatch(cmd);
+ d->dispatch(cmd);
e->accept();
}
@@ -823,9 +828,9 @@
else
cmd.set_y(e->y() + 21);
// Store the event, to be handled when the timeout expires.
- synthetic_mouse_event_.cmd = cmd;
+ d->synthetic_mouse_event_.cmd = cmd;
- if (synthetic_mouse_event_.timeout.running()) {
+ if (d->synthetic_mouse_event_.timeout.running()) {
// Discard the event. Note that it _may_ be handled
// when the timeout expires if
// synthetic_mouse_event_.cmd has not been overwritten.
@@ -836,22 +841,22 @@
return;
}
- synthetic_mouse_event_.restart_timeout = true;
- synthetic_mouse_event_.timeout.start();
+ d->synthetic_mouse_event_.restart_timeout = true;
+ d->synthetic_mouse_event_.timeout.start();
// Fall through to handle this event...
- } else if (synthetic_mouse_event_.timeout.running()) {
+ } else if (d->synthetic_mouse_event_.timeout.running()) {
// Store the event, to be possibly handled when the timeout
// expires.
// Once the timeout has expired, normal control is returned
// to mouseMoveEvent (restart_timeout = false).
// This results in a much smoother 'feel' when moving the
// mouse back into the work area.
- synthetic_mouse_event_.cmd = cmd;
- synthetic_mouse_event_.restart_timeout = false;
+ d->synthetic_mouse_event_.cmd = cmd;
+ d->synthetic_mouse_event_.restart_timeout = false;
return;
}
- dispatch(cmd);
+ d->dispatch(cmd);
}
@@ -904,14 +909,14 @@
void GuiWorkArea::generateSyntheticMouseEvent()
{
- int const e_y = synthetic_mouse_event_.cmd.y();
- int const wh = buffer_view_->workHeight();
+ int const e_y = d->synthetic_mouse_event_.cmd.y();
+ int const wh = d->buffer_view_->workHeight();
bool const up = e_y < 0;
bool const down = e_y > wh;
// Set things off to generate the _next_ 'pseudo' event.
int step = 50;
- if (synthetic_mouse_event_.restart_timeout) {
+ if (d->synthetic_mouse_event_.restart_timeout) {
// This is some magic formulae to determine the speed
// of scrolling related to the position of the mouse.
int time = 200;
@@ -924,37 +929,37 @@
time = 40;
}
}
- synthetic_mouse_event_.timeout.setTimeout(time);
- synthetic_mouse_event_.timeout.start();
+ d->synthetic_mouse_event_.timeout.setTimeout(time);
+ d->synthetic_mouse_event_.timeout.start();
}
// Can we scroll further ?
int const value = verticalScrollBar()->value();
if (value == verticalScrollBar()->maximum()
|| value == verticalScrollBar()->minimum()) {
- synthetic_mouse_event_.timeout.stop();
+ d->synthetic_mouse_event_.timeout.stop();
return;
}
// Scroll
if (step <= 2 * wh) {
- buffer_view_->scroll(up ? -step : step);
- buffer_view_->updateMetrics();
+ d->buffer_view_->scroll(up ? -step : step);
+ d->buffer_view_->updateMetrics();
} else {
- buffer_view_->scrollDocView(value + up ? -step : step, false);
+ d->buffer_view_->scrollDocView(value + up ? -step : step,
false);
}
// In which paragraph do we have to set the cursor ?
- Cursor & cur = buffer_view_->cursor();
+ Cursor & cur = d->buffer_view_->cursor();
// FIXME: we don't know howto handle math.
Text * text = cur.text();
if (!text)
return;
- TextMetrics const & tm = buffer_view_->textMetrics(text);
+ TextMetrics const & tm = d->buffer_view_->textMetrics(text);
- pair<pit_type, const ParagraphMetrics *> p = up ? tm.first() :
tm.last();
- ParagraphMetrics const & pm = *p.second;
- pit_type const pit = p.first;
+ pair<pit_type, const ParagraphMetrics *> pp = up ? tm.first() :
tm.last();
+ ParagraphMetrics const & pm = *pp.second;
+ pit_type const pit = pp.first;
if (pm.rows().empty())
return;
@@ -973,7 +978,7 @@
// Find the position of the cursor
bool bound;
- int x = synthetic_mouse_event_.cmd.x();
+ int x = d->synthetic_mouse_event_.cmd.x();
pos_type const pos = rit->pos() + tm.getColumnNearX(pit, *rit, x,
bound);
// Set the cursor
@@ -981,7 +986,7 @@
cur.pos() = pos;
cur.boundary(bound);
- buffer_view_->buffer().changed(false);
+ d->buffer_view_->buffer().changed(false);
return;
}
@@ -989,7 +994,7 @@
void GuiWorkArea::keyPressEvent(QKeyEvent * ev)
{
// Do not process here some keys if dialog_mode_ is set
- if (dialog_mode_
+ if (d->dialog_mode_
&& (ev->modifiers() == Qt::NoModifier
|| ev->modifiers() == Qt::ShiftModifier)
&& (ev->key() == Qt::Key_Escape
@@ -1001,11 +1006,11 @@
}
// intercept some keys if completion popup is visible
- if (completer_->popupVisible()) {
+ if (d->completer_->popupVisible()) {
switch (ev->key()) {
case Qt::Key_Enter:
case Qt::Key_Return:
- completer_->activate();
+ d->completer_->activate();
ev->accept();
return;
}
@@ -1059,19 +1064,19 @@
void GuiWorkArea::doubleClickTimeout()
{
- dc_event_.active = false;
+ d->dc_event_.active = false;
}
void GuiWorkArea::mouseDoubleClickEvent(QMouseEvent * ev)
{
- dc_event_ = DoubleClick(ev);
+ d->dc_event_ = DoubleClick(ev);
QTimer::singleShot(QApplication::doubleClickInterval(), this,
SLOT(doubleClickTimeout()));
FuncRequest cmd(LFUN_MOUSE_DOUBLE,
ev->x(), ev->y(),
q_button_state(ev->button()));
- dispatch(cmd);
+ d->dispatch(cmd);
ev->accept();
}
@@ -1079,14 +1084,14 @@
void GuiWorkArea::resizeEvent(QResizeEvent * ev)
{
QAbstractScrollArea::resizeEvent(ev);
- need_resize_ = true;
+ d->need_resize_ = true;
ev->accept();
}
-void GuiWorkArea::update(int x, int y, int w, int h)
+void GuiWorkArea::Private::update(int x, int y, int w, int h)
{
- viewport()->update(x, y, w, h);
+ p->viewport()->update(x, y, w, h);
}
@@ -1096,30 +1101,30 @@
// LYXERR(Debug::PAINTING, "paintEvent begin: x: " << rc.x()
// << " y: " << rc.y() << " w: " << rc.width() << " h: " <<
rc.height());
- if (need_resize_) {
- screen_ = QPixmap(viewport()->width(), viewport()->height());
- resizeBufferView();
- if (cursor_visible_) {
- hideCursor();
- showCursor();
+ if (d->need_resize_) {
+ d->screen_ = QPixmap(viewport()->width(), viewport()->height());
+ d->resizeBufferView();
+ if (d->cursor_visible_) {
+ d->hideCursor();
+ d->showCursor();
}
}
QPainter pain(viewport());
- pain.drawPixmap(rc, screen_, rc);
- cursor_->draw(pain);
+ pain.drawPixmap(rc, d->screen_, rc);
+ d->cursor_->draw(pain);
ev->accept();
}
-void GuiWorkArea::updateScreen()
+void GuiWorkArea::Private::updateScreen()
{
GuiPainter pain(&screen_);
buffer_view_->draw(pain);
}
-void GuiWorkArea::showCursor(int x, int y, int h,
+void GuiWorkArea::Private::showCursor(int x, int y, int h,
bool l_shape, bool rtl, bool completable)
{
if (schedule_redraw_) {
@@ -1127,28 +1132,28 @@
// the size of the new graphics, it's better the update
everything.
// We can't use redraw() here because this would trigger a
infinite
// recursive loop with showCursor().
- buffer_view_->resize(viewport()->width(), viewport()->height());
+ buffer_view_->resize(p->viewport()->width(),
p->viewport()->height());
updateScreen();
updateScrollbar();
- viewport()->update(QRect(0, 0, viewport()->width(),
viewport()->height()));
+ p->viewport()->update(QRect(0, 0, p->viewport()->width(),
p->viewport()->height()));
schedule_redraw_ = false;
// Show the cursor immediately after the update.
hideCursor();
- toggleCursor();
+ p->toggleCursor();
return;
}
cursor_->update(x, y, h, l_shape, rtl, completable);
cursor_->show();
- viewport()->update(cursor_->rect());
+ p->viewport()->update(cursor_->rect());
}
-void GuiWorkArea::removeCursor()
+void GuiWorkArea::Private::removeCursor()
{
cursor_->hide();
//if (!qApp->focusWidget())
- viewport()->update(cursor_->rect());
+ p->viewport()->update(cursor_->rect());
}
@@ -1186,22 +1191,22 @@
return;
}
- GuiPainter pain(&screen_);
- buffer_view_->updateMetrics();
- buffer_view_->draw(pain);
- FontInfo font = buffer_view_->cursor().getFont().fontInfo();
+ GuiPainter pain(&d->screen_);
+ d->buffer_view_->updateMetrics();
+ d->buffer_view_->draw(pain);
+ FontInfo font = d->buffer_view_->cursor().getFont().fontInfo();
FontMetrics const & fm = theFontMetrics(font);
int height = fm.maxHeight();
- int cur_x = cursor_->rect().left();
- int cur_y = cursor_->rect().bottom();
+ int cur_x = d->cursor_->rect().left();
+ int cur_y = d->cursor_->rect().bottom();
// redraw area of preedit string.
update(0, cur_y - height, viewport()->width(),
- (height + 1) * preedit_lines_);
+ (height + 1) * d->preedit_lines_);
if (preedit_string.empty()) {
last_width = false;
- preedit_lines_ = 1;
+ d->preedit_lines_ = 1;
e->accept();
return;
}
@@ -1249,10 +1254,10 @@
rLength = 0;
}
- int const right_margin = buffer_view_->rightMargin();
+ int const right_margin = d->buffer_view_->rightMargin();
Painter::preedit_style ps;
// Most often there would be only one line:
- preedit_lines_ = 1;
+ d->preedit_lines_ = 1;
for (size_t pos = 0; pos != preedit_length; ++pos) {
char_type const typed_char = preedit_string[pos];
// reset preedit string style
@@ -1262,7 +1267,7 @@
if (cur_x + fm.width(typed_char) > viewport()->width() -
right_margin) {
cur_x = right_margin;
cur_y += height + 1;
- ++preedit_lines_;
+ ++d->preedit_lines_;
}
// preedit strings are displayed with dashed underline
// and partial strings are displayed white on black indicating
@@ -1283,8 +1288,8 @@
}
// update the preedit string screen area.
- update(0, cur_y - preedit_lines_*height, viewport()->width(),
- (height + 1) * preedit_lines_);
+ update(0, cur_y - d->preedit_lines_*height, viewport()->width(),
+ (height + 1) * d->preedit_lines_);
// Don't forget to accept the event!
e->accept();
@@ -1298,11 +1303,11 @@
// this is the CJK-specific composition window position and
// the context menu position when the menu key is pressed.
case Qt::ImMicroFocus:
- cur_r = cursor_->rect();
- if (preedit_lines_ != 1)
+ cur_r = d->cursor_->rect();
+ if (d->preedit_lines_ != 1)
cur_r.moveLeft(10);
cur_r.moveBottom(cur_r.bottom()
- + cur_r.height() * (preedit_lines_ - 1));
+ + cur_r.height() * (d->preedit_lines_ - 1));
// return lower right of cursor in LyX.
return cur_r;
default:
@@ -1316,7 +1321,7 @@
docstring maximize_title;
docstring minimize_title;
- Buffer const & buf = buffer_view_->buffer();
+ Buffer const & buf = d->buffer_view_->buffer();
FileName const file_name = buf.fileName();
if (!file_name.empty()) {
maximize_title = file_name.displayName(130);
@@ -1344,23 +1349,57 @@
}
-void GuiWorkArea::setReadOnly(bool read_only)
+void GuiWorkArea::Private::setReadOnly(bool read_only)
{
if (read_only_ == read_only)
return;
read_only_ = read_only;
- updateWindowTitle();
- if (this == lyx_view_->currentWorkArea())
+ p->updateWindowTitle();
+ if (p == lyx_view_->currentWorkArea())
lyx_view_->updateDialogs();
}
-bool GuiWorkArea::isFullScreen()
+bool GuiWorkArea::isFullScreen() const
{
- return lyx_view_ && lyx_view_->isFullScreen();
+ return d->lyx_view_ && d->lyx_view_->isFullScreen();
}
+void GuiWorkArea::scheduleRedraw()
+{
+ d->schedule_redraw_ = true;
+}
+
+
+bool GuiWorkArea::inDialogMode() const
+{
+ return d->dialog_mode_;
+}
+
+
+void GuiWorkArea::setDialogMode(bool mode)
+{
+ d->dialog_mode_ = mode;
+}
+
+
+GuiCompleter & GuiWorkArea::completer()
+{
+ return *d->completer_;
+}
+
+GuiView const & GuiWorkArea::view() const
+{
+ return *d->lyx_view_;
+}
+
+
+GuiView & GuiWorkArea::view()
+{
+ return *d->lyx_view_;
+}
+
////////////////////////////////////////////////////////////////////
//
// EmbeddedWorkArea
Modified: lyx-devel/trunk/src/frontends/qt4/GuiWorkArea.h
==============================================================================
--- lyx-devel/trunk/src/frontends/qt4/GuiWorkArea.h Sun Oct 16 21:57:10
2011 (r39871)
+++ lyx-devel/trunk/src/frontends/qt4/GuiWorkArea.h Mon Oct 17 00:48:26
2011 (r39872)
@@ -15,27 +15,15 @@
#include "frontends/WorkArea.h"
-#include "DocIterator.h"
-#include "FuncRequest.h"
-#include "qt_helpers.h"
#include "support/docstring.h"
-#include "support/Timeout.h"
#include <QAbstractScrollArea>
-#include <QMouseEvent>
-#include <QPixmap>
#include <QTabBar>
#include <QTabWidget>
-#include <QTimer>
-class QContextMenuEvent;
class QDragEnterEvent;
class QDropEvent;
-class QKeyEvent;
-class QPaintEvent;
-class QResizeEvent;
class QToolButton;
-class QWheelEvent;
class QWidget;
#ifdef CursorShape
@@ -50,48 +38,6 @@
class GuiCompleter;
class GuiView;
-class GuiWorkArea;
-
-/// for emulating triple click
-class DoubleClick {
-public:
- ///
- DoubleClick() : state(Qt::NoButton), active(false) {}
- ///
- DoubleClick(QMouseEvent * e) : state(e->button()), active(true) {}
- ///
- bool operator==(QMouseEvent const & e) { return state == e.button(); }
- ///
-public:
- ///
- Qt::MouseButton state;
- ///
- bool active;
-};
-
-/** Qt only emits mouse events when the mouse is being moved, but
- * we want to generate 'pseudo' mouse events when the mouse button is
- * pressed and the mouse cursor is below the bottom, or above the top
- * of the work area. In this way, we'll be able to continue scrolling
- * (and selecting) the text.
- *
- * This class stores all the parameters needed to make this happen.
- */
-class SyntheticMouseEvent
-{
-public:
- SyntheticMouseEvent();
-
- FuncRequest cmd;
- Timeout timeout;
- bool restart_timeout;
-};
-
-
-/**
- * Implementation of the work area (buffer view GUI)
-*/
-class CursorWidget;
class GuiWorkArea : public QAbstractScrollArea, public WorkArea
{
@@ -114,9 +60,9 @@
///
void setFullScreen(bool full_screen);
/// is GuiView in fullscreen mode?
- bool isFullScreen();
+ bool isFullScreen() const;
///
- void scheduleRedraw() { schedule_redraw_ = true; }
+ void scheduleRedraw();
///
BufferView & bufferView();
///
@@ -130,24 +76,18 @@
/// Process Key pressed event.
/// This needs to be public because it is accessed externally by
GuiView.
void processKeySym(KeySymbol const & key, KeyModifier mod);
- ///
- void resizeBufferView();
- bool inDialogMode() const { return dialog_mode_; }
- void setDialogMode(bool mode) { dialog_mode_ = mode; }
+ bool inDialogMode() const;
+ void setDialogMode(bool mode);
///
- GuiCompleter & completer() { return *completer_; }
+ GuiCompleter & 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_; }
+ GuiView const & view() const;
+ GuiView & view();
Q_SIGNALS:
///
@@ -171,23 +111,6 @@
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,
- bool l_shape, bool rtl, bool completable);
-
- /// hide the cursor
- virtual void removeCursor();
-
- /// This function should be called to update the buffer readonly status.
- void setReadOnly(bool);
-
/// Update window titles of all users.
void updateWindowTitle();
///
@@ -221,53 +144,10 @@
/// The slot connected to SyntheticMouseEvent::timeout.
void generateSyntheticMouseEvent();
- ///
- void dispatch(FuncRequest const & cmd0, KeyModifier = NoModifier);
- /// hide the visible cursor, if it is visible
- void hideCursor();
- /// show the cursor if it is not visible
- void showCursor();
- ///
- void updateScrollbar();
-
- ///
- BufferView * buffer_view_;
- /// Read only Buffer status cache.
- bool read_only_;
- ///
- GuiView * lyx_view_;
- /// is the cursor currently displayed
- bool cursor_visible_;
-
- ///
- QTimer cursor_timeout_;
- ///
- SyntheticMouseEvent synthetic_mouse_event_;
- ///
- DoubleClick dc_event_;
- ///
- CursorWidget * cursor_;
- ///
- QPixmap screen_;
- ///
- bool need_resize_;
- ///
- 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_;
+ friend class GuiCompleter;
+ struct Private;
+ Private * const d;
}; // GuiWorkArea
Copied and modified: lyx-devel/trunk/src/frontends/qt4/GuiWorkArea_Private.h
(from r39870, lyx-devel/trunk/src/frontends/qt4/GuiWorkArea.h)
==============================================================================
--- lyx-devel/trunk/src/frontends/qt4/GuiWorkArea.h Sun Oct 16 10:22:20
2011 (r39870, copy source)
+++ lyx-devel/trunk/src/frontends/qt4/GuiWorkArea_Private.h Mon Oct 17
00:48:26 2011 (r39872)
@@ -1,31 +1,26 @@
// -*- C++ -*-
/**
- * \file GuiWorkArea.h
+ * \file GuiWorkArea_Private.h
* This file is part of LyX, the document processor.
* Licence details can be found in the file COPYING.
*
- * \author John Levon
* \author Abdelrazak Younes
*
* Full author contact details are available in file CREDITS.
*/
-#ifndef WORKAREA_H
-#define WORKAREA_H
+#ifndef WORKAREA_PRIVATE_H
+#define WORKAREA_PRIVATE_H
-#include "frontends/WorkArea.h"
-
-#include "DocIterator.h"
#include "FuncRequest.h"
#include "qt_helpers.h"
+
#include "support/docstring.h"
#include "support/Timeout.h"
#include <QAbstractScrollArea>
#include <QMouseEvent>
#include <QPixmap>
-#include <QTabBar>
-#include <QTabWidget>
#include <QTimer>
class QContextMenuEvent;
@@ -93,90 +88,16 @@
*/
class CursorWidget;
-class GuiWorkArea : public QAbstractScrollArea, public WorkArea
+struct GuiWorkArea::Private
{
- Q_OBJECT
-
-public:
- ///
- 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; }
- ///
- BufferView & bufferView();
- ///
- BufferView const & bufferView() const;
- ///
- void redraw(bool update_metrics);
- ///
- void stopBlinkingCursor();
- ///
- void startBlinkingCursor();
- /// Process Key pressed event.
- /// This needs to be public because it is accessed externally by
GuiView.
- void processKeySym(KeySymbol const & key, KeyModifier mod);
- ///
- 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 *);
-
-private Q_SLOTS:
- /// Scroll the BufferView.
- /**
- * This is a slot for the valueChanged() signal of the vertical
scrollbar.
- * \p value value of the scrollbar.
- */
- void scrollTo(int value);
- /// timer to limit triple clicks
- void doubleClickTimeout();
- /// toggle the cursor's visibility
- void toggleCursor();
- /// close this work area.
- /// Slot for Buffer::closing signal.
- void close();
- /// Slot to restore proper scrollbar behaviour.
- void fixVerticalScrollBar();
-
-private:
- friend class GuiCompleter;
+ Private(GuiWorkArea *);
/// update the passed area.
void update(int x, int y, int w, int h);
///
void updateScreen();
+ ///
+ void resizeBufferView();
/// paint the cursor and store the background
virtual void showCursor(int x, int y, int h,
@@ -187,40 +108,6 @@
/// This function should be called to update the buffer readonly status.
void setReadOnly(bool);
-
- /// Update window titles of all users.
- void updateWindowTitle();
- ///
- bool event(QEvent *);
- ///
- void contextMenuEvent(QContextMenuEvent *);
- ///
- void focusInEvent(QFocusEvent *);
- ///
- void focusOutEvent(QFocusEvent *);
- /// repaint part of the widget
- void paintEvent(QPaintEvent * ev);
- /// widget has been resized
- void resizeEvent(QResizeEvent * ev);
- /// mouse button press
- void mousePressEvent(QMouseEvent * ev);
- /// mouse button release
- void mouseReleaseEvent(QMouseEvent * ev);
- /// mouse double click of button
- void mouseDoubleClickEvent(QMouseEvent * ev);
- /// mouse motion
- void mouseMoveEvent(QMouseEvent * ev);
- /// wheel event
- void wheelEvent(QWheelEvent * ev);
- /// key press
- void keyPressEvent(QKeyEvent * ev);
- /// IM events
- void inputMethodEvent(QInputMethodEvent * ev);
- /// IM query
- QVariant inputMethodQuery(Qt::InputMethodQuery query) const;
-
- /// The slot connected to SyntheticMouseEvent::timeout.
- void generateSyntheticMouseEvent();
///
void dispatch(FuncRequest const & cmd0, KeyModifier = NoModifier);
/// hide the visible cursor, if it is visible
@@ -229,6 +116,12 @@
void showCursor();
///
void updateScrollbar();
+ /// Change the cursor when the mouse hovers over a clickable inset
+ void updateCursorShape();
+ ///
+ void setCursorShape(Qt::CursorShape shape);
+ ///
+ GuiWorkArea * p;
///
BufferView * buffer_view_;
@@ -270,120 +163,6 @@
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
-{
- Q_OBJECT
-public:
- TabWorkArea(QWidget * parent = 0);
-
- ///
- void setFullScreen(bool full_screen);
- void showBar(bool show);
- void closeAll();
- bool setCurrentWorkArea(GuiWorkArea *);
- GuiWorkArea * addWorkArea(Buffer & buffer, GuiView & view);
- 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 showContextMenu(const QPoint & pos);
- ///
- void moveTab(int fromIndex, int toIndex);
- ///
- void mouseDoubleClickEvent(QMouseEvent * event);
-
-private:
- ///
- int clicked_tab_;
- ///
- 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
Modified: lyx-devel/trunk/src/frontends/qt4/Makefile.am
==============================================================================
--- lyx-devel/trunk/src/frontends/qt4/Makefile.am Sun Oct 16 21:57:10
2011 (r39871)
+++ lyx-devel/trunk/src/frontends/qt4/Makefile.am Mon Oct 17 00:48:26
2011 (r39872)
@@ -167,6 +167,7 @@
GuiImage.h \
GuiKeySymbol.h \
GuiPainter.h \
+ GuiWorkArea_Private.cpp \
LaTeXHighlighter.h \
qt_i18n.h \
qt_helpers.h \