From: Jürgen Spitzmüller Date: Sun, 12 Mar 2006 17:29:34 +0000 (+0000) Subject: (Abdelrazak Younes:) X-Git-Tag: 1.6.10~13521 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=4035592aee119d47899f0b6496951c5a11704a7f;p=lyx.git (Abdelrazak Younes:) * QWorkArea.[Ch] cleanup: - Added private members workWidth_ and workHeight_ in order to make sure QWorkArea is always able to draw (link to workArea::WorkAreaResize). - deleted superfluous debugging stuff - deleted superfluous commented out code. - placed all specific stuff (Qt-immodule, X11 and Mac OSX) in a separate place at the end of QWorkArea.C. - initial support for Wheel mouse (still does not work). git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@13348 a592a061-630c-0410-9148-cb99ea01b6c8 --- diff --git a/src/frontends/qt4/ChangeLog b/src/frontends/qt4/ChangeLog index 21c120dd3d..7e7ad244f5 100644 --- a/src/frontends/qt4/ChangeLog +++ b/src/frontends/qt4/ChangeLog @@ -1,3 +1,19 @@ +2006-03-01 Jürgen Spitzmüller + + * QLMenubar.h: compile fix for gcc-4.1. + +2006-03-01 Abdelrazak Younes + + * QWorkArea.[Ch] cleanup: + - Added private members workWidth_ and workHeight_ in order to + make sure QWorkArea is always able to draw (link to + workArea::WorkAreaResize). + - deleted superfluous debugging stuff + - deleted superfluous commented out code. + - placed all specific stuff (Qt-immodule, X11 and Mac OSX) in a + separate place at the end of QWorkArea.C. + - initial support for Wheel mouse (still does not work). + 2006-03-12 Lars Gullik Bjønnes * ui/pch.h: new file @@ -11,6 +27,39 @@ * add svn:ignore +2006-03-01 Abdelrazak Younes + + Initial Port to Qt4. + * UI files: they have all been ported to Qt4 format. + - With Qt4, uic generates a header only class that is not a Q_OBJECT. + => No more need to compile anything in the ui directory. + => No more need to moc the header + - Signal/slot connection to external method is no more supported. I have + transfered all the connections to the corresponding Dialog classes. + - xxxBase and xxxModule renamed to xxxUi + - Remaining issue: there's still an error with BulletsUI.ui + + * Dialogs. + All the dialogs have been ported but there still some Q3xxx objects. + Remaining issues: + - qttableview use replaced with QTableWidget: Dragging the define the + table with the mouse is not implemented. + - QTocDialog ported to QTreeWidget but not yet fully functional. + - BulletModule not fully been ported and not functional. + - Wheel mouse support not functional + - Toolbars are always positioned at the top. + + * Important rewrites: + - QContentPane merged with QWorkArea which derives from QAbstractScrollArea. + - QLPainter now use QPainter + - QLPopupmenu ported to QMenu. + - QtView ported to QMainWindow + - QLToolbar, QToc, QTocDialog, QPrefsDialog, QDocumentDialog... + - As Qt4 UI files do not define external signal/slot, I had to copy and + paste the code generated by former 'uic' in the *.C files into + corresponding Dialog classes. I think I have covered all connections but + this has to be verified. + 2005-12-14 Hartmut Haase * ui/QPrefLatexModule.ui: make the papersize choices in diff --git a/src/frontends/qt4/QLMenubar.h b/src/frontends/qt4/QLMenubar.h index 5c978aff0f..7c846a8d4e 100644 --- a/src/frontends/qt4/QLMenubar.h +++ b/src/frontends/qt4/QLMenubar.h @@ -59,7 +59,7 @@ public slots: private: /// Initialize specific MACOS X menubar - void QLMenubar::macxMenuBarInit(); + void macxMenuBarInit(); /// owning view QtView * owner_; diff --git a/src/frontends/qt4/QWorkArea.C b/src/frontends/qt4/QWorkArea.C index ded221a92b..74dc2bd84e 100644 --- a/src/frontends/qt4/QWorkArea.C +++ b/src/frontends/qt4/QWorkArea.C @@ -11,6 +11,8 @@ #include +#include + #include "QWorkArea.h" #include "QLPainter.h" #include "QLyXKeySym.h" @@ -35,25 +37,29 @@ #include +/////////////////////////////////////////////////////////////// +// Specific stuff #ifdef Q_WS_X11 #include #endif -#ifdef Q_WS_MACX +#ifdef Q_OS_MACX #include -#endif - -#ifdef Q_OS_MAC #include - using lyx::support::subst; #endif + +// You can find other qt-immodule, X11 and MACX specific stuff +// at the end of this file... +/////////////////////////////////////////////////////////////// + using std::endl; using std::string; namespace os = lyx::support::os; namespace { + QWorkArea const * wa_ptr = 0; /// return the LyX key state from Qt's @@ -114,16 +120,8 @@ SyntheticMouseEvent::SyntheticMouseEvent() {} - -Painter & QWorkArea::getPainter() { return painter_; } - -// QLPainter & QWorkArea::getQLPainter() { return painter_; } - -/// get the content pane widget -QWidget * QWorkArea::getContent() const { return viewport(); } - QWorkArea::QWorkArea(LyXView &, int w, int h) - : WorkArea(), QAbstractScrollArea(qApp->mainWidget()), painter_(this) + : QAbstractScrollArea(qApp->mainWidget()), WorkArea(), painter_(this) { setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); @@ -134,42 +132,60 @@ QWorkArea::QWorkArea(LyXView &, int w, int h) setMinimumSize(100, 70); -// setBackgroundRole(lcolorcache.get(LColor::background)); -// viewport()->setBackgroundRole(QPalette::Window); viewport()->setAutoFillBackground(false); viewport()->setAttribute(Qt::WA_OpaquePaintEvent); viewport()->setFocusPolicy(Qt::WheelFocus); viewport()->setFocus(); -// viewport()->grabKeyboard(); setFocusPolicy(Qt::WheelFocus); - setFocusProxy(viewport()); + viewport()->setCursor(Qt::IBeamCursor); resize(w, h); show(); - - scrolled_with_mouse_=false; - scrolled_with_keyboard_ = false; + workWidth_ = w; + workHeight_ = h; synthetic_mouse_event_.timeout.timeout.connect( boost::bind(&QWorkArea::generateSyntheticMouseEvent, this)); + + // Initialize the vertical Scroll Bar + QObject::connect(verticalScrollBar(), SIGNAL(actionTriggered(int)), + this, SLOT(adjustViewWithScrollBar(int))); + + // PageStep only depends on the viewport height. + verticalScrollBar()->setPageStep(workHeight_); + + lyxerr[Debug::GUI] << BOOST_CURRENT_FUNCTION + << "\n Area width\t" << width() + << "\n Area height\t" << height() + << "\n viewport width\t" << viewport()->width() + << "\n viewport height\t" << viewport()->height() + << endl; + /* + // This is the keyboard buffering stuff... + // I don't see any need for this under windows. The keyboard is reactive + // enough... + if ( !QObject::connect(&step_timer_, SIGNAL(timeout()), this, SLOT(keyeventTimeout())) ) lyxerr[Debug::GUI] << "ERROR: keyeventTimeout cannot connect!" << endl; + + // Start the timer, one-shot. + step_timer_.start(50, true); */ - if ( !QObject::connect(verticalScrollBar(), SIGNAL(actionTriggered(int)), - this, SLOT(adjustViewWithScrollBar(int))) ) - lyxerr[Debug::GUI] << "ERROR: adjustViewWithScrollBar cannot connect!" << endl; - + /////////////////////////////////////////////////////////////////////// + // Specific stuff goes here... + #if USE_INPUT_METHODS // to make qt-immodule work setInputMethodEnabled(true); #endif -#ifdef Q_WS_X11 + +#ifdef Q_OS_X11 // doubleClickInterval() is 400 ms on X11 witch is just too long. // On Windows and Mac OS X, the operating system's value is used. // On Microsoft Windows, calling this function sets the double @@ -177,24 +193,7 @@ QWorkArea::QWorkArea(LyXView &, int w, int h) QApplication::setDoubleClickInterval(300); #endif - // Start the timer, one-shot. - step_timer_.start(50, true); - - //viewport()->resize(w, h); - pixmap_.reset(new QPixmap(viewport()->width(), viewport()->height())); - - this->workAreaResize(); - - lyxerr[Debug::GUI] << BOOST_CURRENT_FUNCTION - << "\n Area width\t" << width() - << "\n Area height\t" << height() - << "\n viewport width\t" << viewport()->width() - << "\n viewport height\t" << viewport()->height() - << endl; - -// this->QWidget::resize(w,h); - -#ifdef Q_WS_MACX +#ifdef Q_OS_MACX wa_ptr = this; #endif } @@ -205,32 +204,13 @@ QWorkArea::~QWorkArea() void QWorkArea::setScrollbarParams(int h, int scroll_pos, int scroll_line_step) { - /* - if (scrolled_with_mouse_) - { - scrolled_with_mouse_=false; - return; - } - */ - - //if (scroll_pos_ == scroll_pos) - //{ - // verticalScrollBar()->triggerAction(QAbstractSlider::SliderMove); - int scroll_pos_ = scroll_pos; - //} - int scroll_line_step_ = scroll_line_step; - int scroll_page_step_ = viewport()->height(); - // do what cursor movement does (some grey) h += height() / 4; int scroll_max_ = std::max(0, h - height()); - //scrolled_with_keyboard_=true; - verticalScrollBar()->setRange(0, scroll_max_); - verticalScrollBar()->setSliderPosition(scroll_pos_); - verticalScrollBar()->setLineStep(scroll_line_step_); - verticalScrollBar()->setPageStep(scroll_page_step_); + verticalScrollBar()->setSliderPosition(scroll_pos); + verticalScrollBar()->setLineStep(scroll_line_step); } void QWorkArea::adjustViewWithScrollBar(int action) @@ -245,94 +225,8 @@ void QWorkArea::adjustViewWithScrollBar(int action) << endl; this->scrollDocView(verticalScrollBar()->sliderPosition()); - -// scrolled_with_mouse_ = true; } -#ifdef Q_WS_X11 -bool lyxX11EventFilter(XEvent * xev) -{ - switch (xev->type) { - case SelectionRequest: - lyxerr[Debug::GUI] << "X requested selection." << endl; - if (wa_ptr) - wa_ptr->selectionRequested(); - break; - case SelectionClear: - lyxerr[Debug::GUI] << "Lost selection." << endl; - if (wa_ptr) - wa_ptr->selectionLost(); - break; - } - return false; -} -#endif - -#ifdef Q_WS_MACX -namespace{ -OSErr checkAppleEventForMissingParams(const AppleEvent& theAppleEvent) - { - DescType returnedType; - Size actualSize; - OSErr err = AEGetAttributePtr(&theAppleEvent, keyMissedKeywordAttr, - typeWildCard, &returnedType, nil, 0, - &actualSize); - switch (err) { - case errAEDescNotFound: - return noErr; - case noErr: - return errAEEventNotHandled; - default: - return err; - } - } -} - -pascal OSErr handleOpenDocuments(const AppleEvent* inEvent, - AppleEvent* /*reply*/, long /*refCon*/) -{ - QString s_arg; - AEDescList documentList; - OSErr err = AEGetParamDesc(inEvent, keyDirectObject, typeAEList, - &documentList); - if (err != noErr) - return err; - - err = checkAppleEventForMissingParams(*inEvent); - if (err == noErr) { - long documentCount; - err = AECountItems(&documentList, &documentCount); - for (long documentIndex = 1; - err == noErr && documentIndex <= documentCount; - documentIndex++) { - DescType returnedType; - Size actualSize; - AEKeyword keyword; - FSRef ref; - char qstr_buf[1024]; - err = AESizeOfNthItem(&documentList, documentIndex, - &returnedType, &actualSize); - if (err == noErr) { - err = AEGetNthPtr(&documentList, documentIndex, - typeFSRef, &keyword, - &returnedType, (Ptr)&ref, - sizeof(FSRef), &actualSize); - if (err == noErr) { - FSRefMakePath(&ref, (UInt8*)qstr_buf, - 1024); - s_arg=QString::fromUtf8(qstr_buf); - wa_ptr->dispatch( - FuncRequest(LFUN_FILE_OPEN, - fromqstr(s_arg))); - break; - } - } - } // for ... - } - AEDisposeDesc(&documentList); - return err; -} -#endif // Q_WS_MACX void QWorkArea::haveSelection(bool own) const { @@ -355,7 +249,7 @@ string const QWorkArea::getClipboard() const lyxerr[Debug::ACTION] << "getClipboard: " << (const char*) str << endl; if (str.isNull()) return string(); -#ifdef Q_OS_MAC +#ifdef Q_OS_MACX // The MAC clipboard uses \r for lineendings, and we use \n return subst(fromqstr(str), '\r', '\n'); #else @@ -366,12 +260,12 @@ string const QWorkArea::getClipboard() const void QWorkArea::putClipboard(string const & str) const { -#ifdef Q_OS_MAC +#ifdef Q_OS_MACX // The MAC clipboard uses \r for lineendings, and we use \n QApplication::clipboard()->setText(toqstr(subst(str, '\n', '\r')), QClipboard::Selection); #else - QApplication::clipboard()->setText(toqstr(str), QClipboard::Selection); + QApplication::clipboard()->setText(toqstr(str), QClipboard::Selection); #endif lyxerr[Debug::ACTION] << "putClipboard: " << str << endl; } @@ -402,48 +296,7 @@ void QWorkArea::dropEvent(QDropEvent* event) } } } -/* -void QWorkArea::scrollContentsBy(int dx, int dy) -{ - lyxerr[Debug::GUI] << BOOST_CURRENT_FUNCTION - << " scroll by dx=" << dx - << " dy=" << dy - << " verticalScrollBar val=" << verticalScrollBar()->value() - << " min=" << verticalScrollBar()->minimum() - << " max=" << verticalScrollBar()->maximum() - << " pagestep=" << verticalScrollBar()->pageStep() - << " linestep=" << verticalScrollBar()->lineStep() - << endl; - - if (scrolled_with_keyboard_) - { - scrolled_with_keyboard_=false; - return; - } - this->scrollDocView(verticalScrollBar()->value()); - scrolled_with_mouse_ = true; -} -*/ - -#if USE_INPUT_METHODS -// to make qt-immodule work - -void QWorkArea::inputMethodEvent(QInputMethodEvent * e) -{ - QString const text = e->text(); - if (!text.isEmpty()) { - int key = 0; - // needed to make math superscript work on some systems - // ideally, such special coding should not be necessary - if (text == "^") - key = Qt::Key_AsciiCircum; - QKeyEvent ev(QEvent::KeyPress, key, *text.ascii(), 0, text); - keyPressEvent(&ev); - } - e->accept(); -} -#endif void QWorkArea::mousePressEvent(QMouseEvent * e) { @@ -479,14 +332,14 @@ void QWorkArea::mouseMoveEvent(QMouseEvent * e) q_motion_state(e->state())); // If we're above or below the work area... - if (e->y() <= 20 || e->y() >= viewport()->QWidget::height() - 20) { + if (e->y() <= 20 || e->y() >= viewport()->height() - 20) { // Make sure only a synthetic event can cause a page scroll, // so they come at a steady rate: if (e->y() <= 20) // _Force_ a scroll up: cmd.y = -40; else - cmd.y = viewport()->QWidget::height(); + cmd.y = viewport()->height(); // Store the event, to be handled when the timeout expires. synthetic_mouse_event_.cmd = cmd; @@ -536,26 +389,7 @@ void QWorkArea::mouseMoveEvent(QMouseEvent * e) void QWorkArea::wheelEvent(QWheelEvent * e) { -// verticalScrollBar()->setValue(verticalScrollBar()->value() - e->delta()); -} - - -void QWorkArea::keyPressEvent(QKeyEvent * e) -{ - lyxerr[Debug::KEY] << BOOST_CURRENT_FUNCTION - << " count=" << e->count() - << " text=" << (const char *) e->text() - << " isAutoRepeat=" << e->isAutoRepeat() - << " key=" << e->key() - << endl; - - //viewport()->grabKeyboard(); -// keyeventQueue_.push(boost::shared_ptr(new QKeyEvent(*e))); - - boost::shared_ptr sym(new QLyXKeySym); - sym->set(e); - this->workAreaKeyPress(sym, q_key_state(e->state())); - + verticalScrollBar()->setValue(verticalScrollBar()->value() - e->delta()); } void QWorkArea::generateSyntheticMouseEvent() @@ -576,7 +410,24 @@ void QWorkArea::generateSyntheticMouseEvent() } } +void QWorkArea::keyPressEvent(QKeyEvent * e) +{ + lyxerr[Debug::KEY] << BOOST_CURRENT_FUNCTION + << " count=" << e->count() + << " text=" << (const char *) e->text() + << " isAutoRepeat=" << e->isAutoRepeat() + << " key=" << e->key() + << endl; + +// keyeventQueue_.push(boost::shared_ptr(new QKeyEvent(*e))); + + boost::shared_ptr sym(new QLyXKeySym); + sym->set(e); + this->workAreaKeyPress(sym, q_key_state(e->state())); + +} +// This is not used for now... void QWorkArea::keyeventTimeout() { bool handle_autos = true; @@ -630,16 +481,20 @@ void QWorkArea::mouseDoubleClickEvent(QMouseEvent * e) void QWorkArea::resizeEvent(QResizeEvent * resizeEvent) { - pixmap_.reset(new QPixmap(viewport()->width(), viewport()->height())); + workWidth_ = viewport()->width(); + workHeight_ = viewport()->height(); - scrolled_with_mouse_=false; - scrolled_with_keyboard_=false; + verticalScrollBar()->setPageStep(viewport()->height()); + + pixmap_.reset(new QPixmap(viewport()->width(), viewport()->height())); this->workAreaResize(); lyxerr[Debug::GUI] << BOOST_CURRENT_FUNCTION - << "\n QWidget width\t" << viewport()->width() - << "\n QWidget height\t" << viewport()->height() + << "\n QWidget width\t" << this->QWidget::width() + << "\n QWidget height\t" << this->QWidget::height() + << "\n viewport width\t" << viewport()->width() + << "\n viewport height\t" << viewport()->height() << "\n QResizeEvent rect left\t" << rect().left() << "\n QResizeEvent rect right\t" << rect().right() << endl; @@ -647,19 +502,139 @@ void QWorkArea::resizeEvent(QResizeEvent * resizeEvent) void QWorkArea::paintEvent(QPaintEvent * e) { -/* lyxerr[Debug::GUI] << BOOST_CURRENT_FUNCTION - << "\n QWidget width\t" << viewport()->width() - << "\n QWidget height\t" << viewport()->height() + << "\n QWidget width\t" << this->width() + << "\n QWidget height\t" << this->height() + << "\n viewport width\t" << viewport()->width() + << "\n viewport height\t" << viewport()->height() + << "\n pixmap width\t" << pixmap_->width() + << "\n pixmap height\t" << pixmap_->height() << "\n QPaintEvent x\t" << e->rect().x() - << "\n QPaintEvent y\t" << e->rect().x() + << "\n QPaintEvent y\t" << e->rect().y() << "\n QPaintEvent w\t" << e->rect().width() << "\n QPaintEvent h\t" << e->rect().height() << endl; -*/ + QPainter q(viewport()); q.drawPixmap(e->rect(), *pixmap_.get(), e->rect()); +} + + +/////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////// +// Specific stuff + +//////////////////////////////////////////////////////////////////////// +// qt-immodule specific stuff goes here... + +#if USE_INPUT_METHODS +// to make qt-immodule work + +void QWorkArea::inputMethodEvent(QInputMethodEvent * e) +{ + QString const text = e->text(); + if (!text.isEmpty()) { + int key = 0; + // needed to make math superscript work on some systems + // ideally, such special coding should not be necessary + if (text == "^") + key = Qt::Key_AsciiCircum; + QKeyEvent ev(QEvent::KeyPress, key, *text.ascii(), 0, text); + keyPressEvent(&ev); + } + e->accept(); +} +#endif + -// q.drawPixmap(QPoint(r.x(), r.y()), -// *pixmap_.get(), r); +//////////////////////////////////////////////////////////////////////// +// X11 specific stuff goes here... + +#ifdef Q_WS_X11 +bool lyxX11EventFilter(XEvent * xev) +{ + switch (xev->type) { + case SelectionRequest: + lyxerr[Debug::GUI] << "X requested selection." << endl; + if (wa_ptr) + wa_ptr->selectionRequested(); + break; + case SelectionClear: + lyxerr[Debug::GUI] << "Lost selection." << endl; + if (wa_ptr) + wa_ptr->selectionLost(); + break; + } + return false; +} +#endif + + +//////////////////////////////////////////////////////////////////////// +// Mac OSX specific stuff goes here... + +#ifdef Q_OS_MACX +namespace{ +OSErr checkAppleEventForMissingParams(const AppleEvent& theAppleEvent) + { + DescType returnedType; + Size actualSize; + OSErr err = AEGetAttributePtr(&theAppleEvent, keyMissedKeywordAttr, + typeWildCard, &returnedType, nil, 0, + &actualSize); + switch (err) { + case errAEDescNotFound: + return noErr; + case noErr: + return errAEEventNotHandled; + default: + return err; + } + } +} + +pascal OSErr handleOpenDocuments(const AppleEvent* inEvent, + AppleEvent* /*reply*/, long /*refCon*/) +{ + QString s_arg; + AEDescList documentList; + OSErr err = AEGetParamDesc(inEvent, keyDirectObject, typeAEList, + &documentList); + if (err != noErr) + return err; + + err = checkAppleEventForMissingParams(*inEvent); + if (err == noErr) { + long documentCount; + err = AECountItems(&documentList, &documentCount); + for (long documentIndex = 1; + err == noErr && documentIndex <= documentCount; + documentIndex++) { + DescType returnedType; + Size actualSize; + AEKeyword keyword; + FSRef ref; + char qstr_buf[1024]; + err = AESizeOfNthItem(&documentList, documentIndex, + &returnedType, &actualSize); + if (err == noErr) { + err = AEGetNthPtr(&documentList, documentIndex, + typeFSRef, &keyword, + &returnedType, (Ptr)&ref, + sizeof(FSRef), &actualSize); + if (err == noErr) { + FSRefMakePath(&ref, (UInt8*)qstr_buf, + 1024); + s_arg=QString::fromUtf8(qstr_buf); + wa_ptr->dispatch( + FuncRequest(LFUN_FILE_OPEN, + fromqstr(s_arg))); + break; + } + } + } // for ... + } + AEDisposeDesc(&documentList); + return err; } +#endif // Q_OS_MACX diff --git a/src/frontends/qt4/QWorkArea.h b/src/frontends/qt4/QWorkArea.h index e1575e9006..0e650ec7b8 100644 --- a/src/frontends/qt4/QWorkArea.h +++ b/src/frontends/qt4/QWorkArea.h @@ -94,10 +94,7 @@ public: /** * Qt-specific implementation of the work area * (buffer view GUI) - * - * It consists of a content pane widget, and a scrollbar. - * Hopefully soon we can just use QScrollView ... - */ +*/ class QWorkArea : public QAbstractScrollArea, public WorkArea { Q_OBJECT @@ -108,48 +105,49 @@ public: virtual ~QWorkArea(); /// return the width of the content pane - virtual int workWidth() const { return viewport()->width(); } + virtual int workWidth() const { return workWidth_; } + /// return the height of the content pane - virtual int workHeight() const { return viewport()->height(); } + virtual int workHeight() const { return workHeight_; } /// virtual void setScrollbarParams(int height, int pos, int line_height); /// a selection exists virtual void haveSelection(bool) const; + /// virtual std::string const getClipboard() const; + /// virtual void putClipboard(std::string const &) const; + /// virtual void dragEnterEvent(QDragEnterEvent * event); + /// virtual void dropEvent(QDropEvent* event); /// return the widget's painter - virtual Painter & getPainter(); + virtual Painter & getPainter() { return (Painter &) painter_; } + /// //virtual QPaintDevice & paintDevice() { return content_->pixmap(); } + /// return the backing pixmap QPixmap * pixmap() const { return pixmap_.get(); } /// return the widget's painter -// virtual QLPainter & getQLPainter(); + //virtual QLPainter & getQLPainter() const { return painter_; } /// get the content pane widget - QWidget * getContent() const; - - + QWidget * getContent() const { return viewport(); } protected: - -// void scrollContentsBy(int dx, int dy); /// repaint part of the widget void paintEvent(QPaintEvent * e); - /// widget has been resized void resizeEvent(QResizeEvent * e); - /// mouse button press void mousePressEvent(QMouseEvent * e); /// mouse button release @@ -164,6 +162,7 @@ protected: void keyPressEvent(QKeyEvent * e); #if USE_INPUT_METHODS +protected: /// IM events void QWorkArea::inputMethodEvent(QInputMethodEvent * e) #endif @@ -173,11 +172,13 @@ public slots: void keyeventTimeout(); void adjustViewWithScrollBar(int action); -protected: - - private: + /// + int workWidth_; + /// + int workHeight_; + /// our painter QLPainter painter_;