]> git.lyx.org Git - features.git/commitdiff
(Abdelrazak Younes:)
authorJürgen Spitzmüller <spitz@lyx.org>
Sun, 12 Mar 2006 17:29:34 +0000 (17:29 +0000)
committerJürgen Spitzmüller <spitz@lyx.org>
Sun, 12 Mar 2006 17:29:34 +0000 (17:29 +0000)
* 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

src/frontends/qt4/ChangeLog
src/frontends/qt4/QLMenubar.h
src/frontends/qt4/QWorkArea.C
src/frontends/qt4/QWorkArea.h

index 21c120dd3d4509135d8a331390f6d5ed58878d35..7e7ad244f58caeae72baa3716f7d0170f72c2877 100644 (file)
@@ -1,3 +1,19 @@
+2006-03-01  Jürgen Spitzmüller  <j.spitzmueller@gmx.de>
+
+       * QLMenubar.h: compile fix for gcc-4.1.
+
+2006-03-01  Abdelrazak Younes  <younes.a@free.fr>
+
+       * 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  <larsbj@lyx.org>
 
        * ui/pch.h: new file
 
        * add svn:ignore
 
+2006-03-01  Abdelrazak Younes  <younes.a@free.fr>
+
+       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  <hha4491@atomstromfrei.de>
 
        * ui/QPrefLatexModule.ui: make the papersize choices in
index 5c978aff0fa8ffd5f394ff4a4c08e93b5da20646..7c846a8d4e865fe76537d56aa715c62075adfa4b 100644 (file)
@@ -59,7 +59,7 @@ public slots:
 
 private:
        /// Initialize specific MACOS X menubar
-       void QLMenubar::macxMenuBarInit();
+       void macxMenuBarInit();
 
        /// owning view
        QtView * owner_;
index ded221a92b72449c8fdeaaf6f60ebd8a8e1dc38c..74dc2bd84e8d818180f619465306320fbfdb3a88 100644 (file)
@@ -11,6 +11,8 @@
 
 #include <config.h>
 
+#include <boost/current_function.hpp>
+
 #include "QWorkArea.h"
 #include "QLPainter.h"
 #include "QLyXKeySym.h"
 
 #include <boost/bind.hpp>
 
+///////////////////////////////////////////////////////////////
+// Specific stuff
 #ifdef Q_WS_X11
 #include <X11/Xlib.h>
 #endif
 
-#ifdef Q_WS_MACX
+#ifdef Q_OS_MACX
 #include <Carbon/Carbon.h>
-#endif
-
-#ifdef Q_OS_MAC
 #include <support/lstrings.h>
-
 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<QKeyEvent>(new QKeyEvent(*e)));
-
-    boost::shared_ptr<QLyXKeySym> 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<QKeyEvent>(new QKeyEvent(*e)));
+
+    boost::shared_ptr<QLyXKeySym> 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
index e1575e9006ec98bdbd20064ea33e4ae474ceb976..0e650ec7b868f11add534e4b38e07b4a4e952a05 100644 (file)
@@ -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_;