Hello,

Could someone please commit this? I would like applied before I the following one which conatains compilation fixes for MacOSX.

Thanks in advance,
Abdel.

PS: Lars, I sent you a private email about this svn account, I don't know if you received it.

Index: D:/msys/home/yns/src/lyx-svn/trunk/src/frontends/qt4/ChangeLog
===================================================================
--- D:/msys/home/yns/src/lyx-svn/trunk/src/frontends/qt4/ChangeLog      
(revision 13339)
+++ D:/msys/home/yns/src/lyx-svn/trunk/src/frontends/qt4/ChangeLog      
(working copy)
@@ -1,3 +1,15 @@
+2006-03-01  Abdelrazak Younes  <[EMAIL PROTECTED]>
+
+       * 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-10  Georg Baum  <[EMAIL PROTECTED]>
 
        * QWorkArea.C (getClipboard): convert MAC to UNIX line endings on OSX
@@ -7,6 +19,39 @@
 
        * add svn:ignore
 
+2006-03-01  Abdelrazak Younes  <[EMAIL PROTECTED]>
+
+       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  <[EMAIL PROTECTED]>
 
        * ui/QPrefLatexModule.ui: make the papersize choices in
Index: D:/msys/home/yns/src/lyx-svn/trunk/src/frontends/qt4/QWorkArea.C
===================================================================
--- D:/msys/home/yns/src/lyx-svn/trunk/src/frontends/qt4/QWorkArea.C    
(revision 13339)
+++ D:/msys/home/yns/src/lyx-svn/trunk/src/frontends/qt4/QWorkArea.C    
(working copy)
@@ -11,6 +11,8 @@
 
 #include <config.h>
 
+#include <boost/current_function.hpp>
+
 #include "QWorkArea.h"
 #include "QLPainter.h"
 #include "QLyXKeySym.h"
@@ -34,26 +36,30 @@
 #include <QScrollBar>
 
 #include <boost/bind.hpp>
-
-#ifdef Q_WS_X11
+
+///////////////////////////////////////////////////////////////
+// Specific stuff
+#ifdef Q_OS_X11
 #include <X11/Xlib.h>
 #endif
 
-#ifdef Q_WS_MACX
+#ifdef Q_OS_MACX
 #include <Carbon/Carbon.h>
-#endif
+#include <support/lstrings.h>
+using lyx::support::subst;
+#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 {
+namespace {
+
 QWorkArea const * wa_ptr = 0;
 
 /// return the LyX key state from Qt's
@@ -112,18 +118,10 @@
        : timeout(200), restart_timeout(true),
          x_old(-1), y_old(-1), scrollbar_value_old(-1.0)
 {}
+
 
-
-
-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);
@@ -132,69 +130,70 @@
 
        setAcceptDrops(true);
 
-       setMinimumSize(100, 70);
-
-//     setBackgroundRole(lcolorcache.get(LColor::background));
-//     viewport()->setBackgroundRole(QPalette::Window);
+       setMinimumSize(100, 70);
+
        viewport()->setAutoFillBackground(false);
        viewport()->setAttribute(Qt::WA_OpaquePaintEvent);
 
        viewport()->setFocusPolicy(Qt::WheelFocus);
        viewport()->setFocus();
-//     viewport()->grabKeyboard();
-       setFocusPolicy(Qt::WheelFocus);
-       setFocusProxy(viewport());
+       setFocusPolicy(Qt::WheelFocus);
+
        viewport()->setCursor(Qt::IBeamCursor);
-
-       resize(w, h);
-       show();
-
-       scrolled_with_mouse_=false;
-       scrolled_with_keyboard_ = false;
-
+
+       resize(w, h);
+       show();
+       workWidth_ = w;
+       workHeight_ = h;
+
        synthetic_mouse_event_.timeout.timeout.connect(
                boost::bind(&QWorkArea::generateSyntheticMouseEvent,
                            this));
-/*
-       if ( !QObject::connect(&step_timer_, SIGNAL(timeout()),
-               this, SLOT(keyeventTimeout())) )
-                       lyxerr[Debug::GUI] << "ERROR: keyeventTimeout cannot 
connect!" << endl;
-*/
-
-       if ( !QObject::connect(verticalScrollBar(), 
SIGNAL(actionTriggered(int)),
-               this, SLOT(adjustViewWithScrollBar(int))) )
-                       lyxerr[Debug::GUI] << "ERROR: adjustViewWithScrollBar 
cannot connect!" << endl;
        
-#if USE_INPUT_METHODS
-       // to make qt-immodule work
-       setInputMethodEnabled(true);
-#endif
-#ifdef Q_WS_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
-       // click interval for all applications. So we don't!
-       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();
-       
+       // 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);
+*/
+
+       ///////////////////////////////////////////////////////////////////////
+       // Specific stuff goes here...
 
-//     this->QWidget::resize(w,h);
+#if USE_INPUT_METHODS
+       // to make qt-immodule work
+       setInputMethodEnabled(true);
+#endif
+
+#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
+       // click interval for all applications. So we don't!
+       QApplication::setDoubleClickInterval(300);
+#endif
 
-#ifdef Q_WS_MACX
+#ifdef Q_OS_MACX
        wa_ptr = this;
 #endif
 }
@@ -205,32 +204,13 @@
 
 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,98 +225,12 @@
                << 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
 {
-       wa_ptr = this;
+       wa_ptr = this;
 
        if (!QApplication::clipboard()->supportsSelection())
                return;
@@ -355,24 +249,24 @@
        lyxerr[Debug::ACTION] << "getClipboard: " << (const char*) str << endl;
        if (str.isNull())
                return string();
-#ifdef Q_OS_MAC
-       // The MAC clipboard uses \r for lineendings, and we use \n
-       return subst(fromqstr(str), '\r', '\n');
-#else
+#ifdef Q_OS_MACX
+       // The MAC clipboard uses \r for lineendings, and we use \n
+       return subst(fromqstr(str), '\r', '\n');
+#else
        return fromqstr(str);
-#endif
+#endif
 }
 
 
 void QWorkArea::putClipboard(string const & str) const
 {
-#ifdef Q_OS_MAC
-       // 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);
-#endif
+#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);
+#endif
        lyxerr[Debug::ACTION] << "putClipboard: " << str << endl;
 }
 
@@ -402,49 +296,8 @@
                }
        }
 }
-/*
-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)
 {
        if (dc_event_.active && dc_event_ == *e) {
@@ -479,14 +332,14 @@
                              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,9 +389,26 @@
 
 void QWorkArea::wheelEvent(QWheelEvent * e)
 {
-//     verticalScrollBar()->setValue(verticalScrollBar()->value() - 
e->delta());
+       verticalScrollBar()->setValue(verticalScrollBar()->value() - 
e->delta());
 }
 
+void QWorkArea::generateSyntheticMouseEvent()
+{
+       // Set things off to generate the _next_ 'pseudo' event.
+       if (synthetic_mouse_event_.restart_timeout)
+               synthetic_mouse_event_.timeout.start();
+
+       // Has anything changed on-screen since the last timeout signal
+       // was received?
+       double const scrollbar_value = verticalScrollBar()->value();
+       if (scrollbar_value != synthetic_mouse_event_.scrollbar_value_old) {
+               // Yes it has. Store the params used to check this.
+               synthetic_mouse_event_.scrollbar_value_old = scrollbar_value;
+
+               // ... and dispatch the event to the LyX core.
+               this->dispatch(synthetic_mouse_event_.cmd);
+       }
+}
 
 void QWorkArea::keyPressEvent(QKeyEvent * e)
 {
@@ -548,8 +418,7 @@
                << " 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);
@@ -558,25 +427,7 @@
  
 }
 
-void QWorkArea::generateSyntheticMouseEvent()
-{
-       // Set things off to generate the _next_ 'pseudo' event.
-       if (synthetic_mouse_event_.restart_timeout)
-               synthetic_mouse_event_.timeout.start();
-
-       // Has anything changed on-screen since the last timeout signal
-       // was received?
-       double const scrollbar_value = verticalScrollBar()->value();
-       if (scrollbar_value != synthetic_mouse_event_.scrollbar_value_old) {
-               // Yes it has. Store the params used to check this.
-               synthetic_mouse_event_.scrollbar_value_old = scrollbar_value;
-
-               // ... and dispatch the event to the LyX core.
-               this->dispatch(synthetic_mouse_event_.cmd);
-       }
-}
-
-
+// This is not used for now...
 void QWorkArea::keyeventTimeout()
 {
        bool handle_autos = true;
@@ -629,37 +480,161 @@
 
 
 void QWorkArea::resizeEvent(QResizeEvent * resizeEvent)
-{
+{
+       workWidth_ = viewport()->width();
+       workHeight_ = viewport()->height();
+
+       verticalScrollBar()->setPageStep(viewport()->height());
+
        pixmap_.reset(new QPixmap(viewport()->width(), viewport()->height()));
 
-       scrolled_with_mouse_=false;
-       scrolled_with_keyboard_=false;
-
        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;
 }
 
 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());
-
-//     q.drawPixmap(QPoint(r.x(), r.y()),
-//             *pixmap_.get(), r);
 }
+
+
+///////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////
+// 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
+
+
+////////////////////////////////////////////////////////////////////////
+// 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: D:/msys/home/yns/src/lyx-svn/trunk/src/frontends/qt4/QWorkArea.h
===================================================================
--- D:/msys/home/yns/src/lyx-svn/trunk/src/frontends/qt4/QWorkArea.h    
(revision 13339)
+++ D:/msys/home/yns/src/lyx-svn/trunk/src/frontends/qt4/QWorkArea.h    
(working copy)
@@ -94,10 +94,7 @@
 /**
  * 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 @@
 
        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 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);
+       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(); }
+       ///
+       //virtual QPaintDevice & paintDevice() { return content_->pixmap(); }
+
        /// return the backing pixmap
-       QPixmap * pixmap() const { return pixmap_.get(); }
+       QPixmap * pixmap() const { return pixmap_.get(); }
 
-       /// return the widget's painter
-//     virtual QLPainter & getQLPainter();
+       /// return the widget's painter
+       //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 @@
        void keyPressEvent(QKeyEvent * e);
 
 #if USE_INPUT_METHODS
+protected:
        /// IM events
        void QWorkArea::inputMethodEvent(QInputMethodEvent * e) 
 #endif
@@ -173,11 +172,13 @@
        void keyeventTimeout();
        void adjustViewWithScrollBar(int action);
 
-protected:
-
-
-private:
-
+private:
+
+       /// 
+       int workWidth_;
+       ///
+       int workHeight_;
+
        /// our painter
        QLPainter painter_;
 

Reply via email to