QtApplication.cc

00001 /*===========================================================================*\
00002  *                                                                           *
00003  *                              OpenFlipper                                  *
00004  *      Copyright (C) 2001-2009 by Computer Graphics Group, RWTH Aachen      *
00005  *                           www.openflipper.org                             *
00006  *                                                                           *
00007  *---------------------------------------------------------------------------*
00008  *  This file is part of OpenFlipper.                                        *
00009  *                                                                           *
00010  *  OpenFlipper is free software: you can redistribute it and/or modify      *
00011  *  it under the terms of the GNU Lesser General Public License as           *
00012  *  published by the Free Software Foundation, either version 3 of           *
00013  *  the License, or (at your option) any later version with the              *
00014  *  following exceptions:                                                    *
00015  *                                                                           *
00016  *  If other files instantiate templates or use macros                       *
00017  *  or inline functions from this file, or you compile this file and         *
00018  *  link it with other files to produce an executable, this file does        *
00019  *  not by itself cause the resulting executable to be covered by the        *
00020  *  GNU Lesser General Public License. This exception does not however       *
00021  *  invalidate any other reasons why the executable file might be            *
00022  *  covered by the GNU Lesser General Public License.                        *
00023  *                                                                           *
00024  *  OpenFlipper is distributed in the hope that it will be useful,           *
00025  *  but WITHOUT ANY WARRANTY; without even the implied warranty of           *
00026  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            *
00027  *  GNU Lesser General Public License for more details.                      *
00028  *                                                                           *
00029  *  You should have received a copy of the GNU LesserGeneral Public          *
00030  *  License along with OpenFlipper. If not,                                  *
00031  *  see <http://www.gnu.org/licenses/>.                                      *
00032  *                                                                           *
00033 \*===========================================================================*/
00034 
00035 /*===========================================================================*\
00036  *                                                                           *
00037  *   $Revision: 6743 $                                                       *
00038  *   $Author: moebius $                                                      *
00039  *   $Date: 2009-08-05 11:03:10 +0200 (Mi, 05. Aug 2009) $                   *
00040  *                                                                           *
00041 \*===========================================================================*/
00042 
00043 
00044 
00045 //=============================================================================
00046 //
00047 //  CLASS QtApplication - IMPLEMENTATION
00048 //
00049 //=============================================================================
00050 
00051 
00052 //== INCLUDES =================================================================
00053 
00054 
00055 // ACG
00056 #include "QtApplication.hh"
00057 //#include <ACG/QtWidgets/QtMacroDialog.hh>
00058 
00059 
00060 // Qt
00061 #include <QCursor>
00062 #include <QWidget>
00063 #include <QWheelEvent>
00064 #include <QCloseEvent>
00065 #include <QMoveEvent>
00066 #include <QKeyEvent>
00067 #include <QEvent>
00068 #include <QTimerEvent>
00069 #include <QContextMenuEvent>
00070 #include <QMouseEvent>
00071 
00072 // stdc++
00073 #include <iostream>
00074 #include <fstream>
00075 
00076 
00077 //== NAMESPACES ===============================================================
00078 
00079 
00080 namespace ACG {
00081 namespace QtWidgets {
00082 
00083   
00084 //== IMPLEMENTATION ========================================================== 
00085 
00086 
00087 // input / output for QPoint
00088 // static std::istream& operator>>(std::istream& _is, QPoint& _p) 
00089 // { 
00090 //   int x, y; 
00091 //   _is >> x >> y; 
00092 //   _p.setX(x); 
00093 //   _p.setY(y); 
00094 //   return _is; 
00095 // }
00096 
00097 // static std::ostream& operator<<(std::ostream& _os, const QPoint& _p) 
00098 // {
00099 //   _os << _p.x() << ' ' << _p.y(); 
00100 //   return _os; 
00101 // }
00102 
00103 
00104 //-----------------------------------------------------------------------------
00105 
00106 
00107 // input / output for QSize
00108 // static std::istream& operator>>(std::istream& _is, QSize& _s) 
00109 // { 
00110 //   int w, h; 
00111 //   _is >> w >> h; 
00112 //   _s.setWidth(w); 
00113 //   _s.setHeight(h); 
00114 //   return _is; 
00115 // }
00116 
00117 // static std::ostream& operator<<(std::ostream& _os, const QSize& _s) 
00118 // {
00119 //   _os << _s.width() << ' ' << _s.height(); 
00120 //   return _os; 
00121 // }
00122 
00123 
00124 //-----------------------------------------------------------------------------
00125 
00126 
00127 // static std::string read_name(std::istream& _is)
00128 // {
00129 //   char cb[255];
00130 //   _is.getline(cb, 255);
00131 //   return std::string(cb);
00132 // }
00133 
00134 
00135 //-----------------------------------------------------------------------------
00136 
00137 
00138 // copy qt event
00139 template <class SomeEvent>
00140 static QEvent* clone_event(QEvent* _event) 
00141 { return (QEvent*) new SomeEvent(*(SomeEvent*) _event); }
00142 
00143 
00144 //-----------------------------------------------------------------------------
00145 
00146 
00147 QtApplication::QtApplication(int _argc, char** _argv) 
00148   : QApplication(_argc, _argv),
00149     record_(false),
00150     playback_(false),
00151     play_loop_(false)
00152 {
00153   // create new macro Dialog
00154 //   dialog_ = new QtMacroDialog(0, "MacroDialog");
00155 
00156 
00157 //   // connect functions to macro dialog
00158 //   connect(dialog_,  SIGNAL(play()),
00159 //        this,     SLOT(play()));
00160 //   connect(dialog_,  SIGNAL(stop()),
00161 //        this,     SLOT(stop()));    
00162 //   connect(dialog_,  SIGNAL(record()),
00163 //        this,     SLOT(record()));
00164 //   connect(dialog_,  SIGNAL(loop(bool)),
00165 //        this,     SLOT(loop(bool)));
00166 //   connect(dialog_,  SIGNAL(saveFile(const char*)), 
00167 //        this,     SLOT(saveFile(const char*)));
00168 //   connect(dialog_,  SIGNAL(loadFile(const char*)), 
00169 //        this,     SLOT(loadFile(const char*)));
00170 
00171 }
00172 
00173 
00174 //-----------------------------------------------------------------------------
00175 
00176 
00177 void QtApplication::cleanUpEventBuffer()
00178 {
00179   // delete memory of events
00180   for(unsigned int i=0; i<events_.size(); i++) 
00181     if (events_[i].event) 
00182       delete events_[i].event;
00183 
00184   events_.clear();
00185 }
00186 
00187 
00188 //-----------------------------------------------------------------------------
00189 
00190 
00191 void QtApplication::loop(bool _b)
00192 {
00193   play_loop_ = _b;
00194 }
00195 
00196 
00197 //-----------------------------------------------------------------------------
00198 
00199 
00200 void QtApplication::play()
00201 {
00202   // check for main widget
00203   mainWidget_ = activeWindow();
00204   //  mainWidget_ = mainWidget();
00205   if (!mainWidget_)
00206   {
00207     std::cerr << "No Main Widget defined!\n";
00208     return;
00209   }
00210 
00211 
00212   // stop recording first
00213   record_   = false;
00214   playback_ = true;
00215   eventnr_  = 0;
00216 
00217   restoreTopLevelSizes();
00218 
00219   mainWidgetDiff_ = mainWidget_->mapToGlobal(QPoint(0,0)) - oldMainWidgetPos_;
00220 
00221   time_.start();
00222   timer_id_ = startTimer(10);
00223 }
00224 
00225 
00226 //-----------------------------------------------------------------------------
00227 
00228 
00229 void QtApplication::stop()
00230 {
00231   record_ = false;
00232   playback_ = false;
00233   killTimer( timer_id_ );
00234 }
00235 
00236 
00237 //-----------------------------------------------------------------------------
00238 
00239 
00240 void QtApplication::record()
00241 {
00242   // check main widget
00243   mainWidget_ = activeWindow();
00244   //  mainWidget_ = mainWidget();
00245   if (!mainWidget_)
00246   {
00247     std::cerr << "No Main Widget defined!\n";
00248     return;
00249   }
00250 
00251   // stop playback first
00252   playback_ = false;
00253   killTimer( timer_id_ );
00254 
00255   record_ = true;
00256 
00257   cleanUpEventBuffer();
00258         
00259   storeTopLevelSizes();
00260 
00261   // save mainWidgetPos
00262   oldMainWidgetPos_ = mainWidget_->mapToGlobal(QPoint(0,0));
00263 
00264   // start recording Time
00265   time_.start();
00266 }
00267 
00268 
00269 //-----------------------------------------------------------------------------
00270 
00271 
00272 bool QtApplication::notify (QObject* _receiver, QEvent* _event)
00273 {
00274 //   // record events
00275 //   if (record_ && !playback_)
00276 //     recordEvent(_receiver, _event);
00277 
00278 
00279 //   //check for recording or playback Keypresses
00280 //   if (_event->type() == QEvent::KeyPress)
00281 //   {
00282 //     switch(((QKeyEvent*) _event)->key())
00283 //     {
00284 //       case Qt::Key_F5:
00285 //      dialog_->show();
00286 //      break;
00287 
00288 //       case Qt::Key_F6:
00289 //      play();
00290 //      break;
00291 
00292 //       case Qt::Key_F7:
00293 //      stop();
00294 //      break;
00295 
00296 //       case Qt::Key_F8:
00297 //      record();
00298 //      break;
00299 //     }
00300 //   }
00301 
00302 
00303   // handle Event like Qt do
00304   return QApplication::notify(_receiver, _event);
00305 }
00306 
00307 
00308 //-----------------------------------------------------------------------------
00309 
00310 
00311 void QtApplication::recordEvent(QObject* /* _receiver */ , QEvent* /* _event */ )
00312 {
00313 //   // save only events for widgets
00314 //   if (_receiver->inherits("QWidget"))
00315 //   {
00316 //     QWidget*receiver = (QWidget*)_receiver;
00317 
00318 
00319 //     // skip events for macro dialog
00320 // //     if (receiver->activeWindow()->windowTitle() == "MacroDialog")
00321 // //       return;
00322 // //     if (receiver->topLevelWidget()->name() == "MacroDialog")
00323 // //       return;
00324 
00325 
00326 //     // generate event footprint
00327 //     FootPrint fp;
00328 //     fp.event      = 0;
00329 //     fp.time       = time_.elapsed();
00330 //     fp.cursorPos  = mainWidget_->mapFromGlobal(QCursor::pos());
00331 //     //    fp.name       = receiver->name();
00332 //     //    fp.classname  = receiver->className();
00333 //     fp.position   = receiver->pos();
00334 //     fp.size       = receiver->size();
00335 // //     fp.parent     = (receiver->parent() ? 
00336 // //                receiver->parent()->name() : "noParent");
00337 
00338 
00339 
00340 //     switch(_event->type())
00341 //     {
00342 
00343 //       // mouse event ----------------------------------------------------------
00344 //       case QEvent::MouseButtonPress:
00345 //       case QEvent::MouseButtonRelease:
00346 //       case QEvent::MouseMove:
00347 //       case QEvent::MouseButtonDblClick:
00348 //       {
00349 //      fp.event = clone_event<QMouseEvent>(_event);
00350 //      break;
00351 //       }
00352 
00353 
00354 //       // wheel event ----------------------------------------------------------
00355 //       case QEvent::Wheel:
00356 //       {
00357 //      fp.event = clone_event<QWheelEvent>(_event);
00358 //      break;
00359 //       }
00360 
00361 
00362 //       // key event ------------------------------------------------------------
00363 //       case QEvent::KeyPress:
00364 //       case QEvent::KeyRelease:
00365 //       case QEvent::Shortcut:
00366 //       case QEvent::ShortcutOverride:
00367 //       {
00368 //      QKeyEvent* e = (QKeyEvent*) _event;
00369 
00370 //      // skip F5, F6, F7, F8
00371 //      if (e->key() != Qt::Key_F5 &&  e->key() != Qt::Key_F6 &&
00372 //          e->key() != Qt::Key_F7 &&  e->key() != Qt::Key_F8)
00373 //        fp.event = clone_event<QKeyEvent>(_event);
00374 //      break;
00375 //       }
00376 
00377 
00378 //       // context menu event ---------------------------------------------------
00379 //       case QEvent::ContextMenu:
00380 //       {
00381 //      fp.event = clone_event<QContextMenuEvent>(_event);
00382 //      break;
00383 //       }
00384 
00385 
00386 //       // move event -----------------------------------------------------------
00387 //       case QEvent::Move:
00388 //       {
00389 //      if (_event->spontaneous())
00390 //        fp.event = clone_event<QMoveEvent>(_event);
00391 //      break;
00392 //       }
00393 
00394 
00395 //       // close event ----------------------------------------------------------
00396 //       case QEvent::Close:
00397 //       {
00398 //      // can be non-spontaneous !
00399 //      fp.event = clone_event<QCloseEvent>(_event);
00400 //      break;
00401 //       }
00402 
00403 
00404 //       default: // avoid warning
00405 //      break;
00406 //     }
00407 
00408 
00409 //     // if event has been handled, store it
00410 //     if (fp.event)  events_.push_back(fp);
00411 //   }
00412 }
00413 
00414 
00415 //-----------------------------------------------------------------------------
00416 
00417 
00418 void QtApplication::playbackEvent(FootPrint & /* _fp */ )
00419 {
00420 //   // determine widget for saved event at runtime
00421 //   QWidget* eventWidget = findWidget(_fp);
00422 //   if (!eventWidget) return;
00423 
00424 
00425 //   // position and size
00426 //   if (eventWidget->isTopLevel())
00427 //   {
00428 //     // restore widget size
00429 //     if (eventWidget->size() != _fp.size)
00430 //       eventWidget->resize(_fp.size);
00431 
00432 //     // correct position wrt to main widget
00433 //     if (eventWidget != mainWidget_)
00434 //     {
00435 //       QPoint newWidgetPos = _fp.position + mainWidgetDiff_;
00436 
00437 //       if (newWidgetPos != eventWidget->pos())
00438 //      eventWidget->move(newWidgetPos);
00439 //     }
00440 //   }
00441 
00442 
00443 //   // global cursor position
00444 //   QPoint globalPos = mainWidget_->mapToGlobal(_fp.cursorPos);
00445 //   QCursor::setPos(globalPos);
00446 
00447 
00448 //   // correct global mouse position in events
00449 //   switch(_fp.event->type())
00450 //   {
00451 
00452 //     // mouse event ----------------------------------------------------------
00453 //     case QEvent::MouseButtonPress:
00454 //     case QEvent::MouseButtonRelease:
00455 //     case QEvent::MouseMove:
00456 //     case QEvent::MouseButtonDblClick:
00457 //     {
00458 //       QMouseEvent* e = (QMouseEvent*) _fp.event;
00459 //       QMouseEvent me = QMouseEvent(e->type(),
00460 //                                 e->pos(),
00461 //                                 globalPos,
00462 //                                 e->button(),
00463 //                                 e->state());
00464     
00465 //       notify((QObject*) eventWidget, &me);
00466 //       break;
00467 //     }
00468 
00469 
00470 //     // wheel event ------------------------------------------------------------
00471 //     case QEvent::Wheel:
00472 //     {
00473 //       QWheelEvent* e = (QWheelEvent*) _fp.event;
00474 //       QWheelEvent we = QWheelEvent(e->pos(),
00475 //                                 globalPos,
00476 //                                 e->delta(),
00477 //                                 e->state(),
00478 //                                 e->orientation());
00479 
00480 //       notify((QObject*) eventWidget, &we);
00481 //       break;
00482 //     }
00483 
00484 
00485 //     // context menu event -----------------------------------------------------
00486 //     case QEvent::ContextMenu:
00487 //     {
00488 //       QContextMenuEvent* e = (QContextMenuEvent*) _fp.event;
00489 //       QContextMenuEvent ce = QContextMenuEvent(e->reason(),
00490 //                                             e->pos(),
00491 //                                             globalPos,
00492 //                                             e->state());
00493 
00494 //       notify((QObject*) eventWidget, &ce);
00495 //       break;
00496 //     }
00497 
00498 
00499 //     // move event -----------------------------------------------------------
00500 //     case QEvent::Move:
00501 //     {
00502 //       // pos has been adjusted above, but its still needed here...
00503 //       break;
00504 //     }
00505 
00506 
00507 //     // all other events... ----------------------------------------------------
00508 //     default:
00509 //     {
00510 //       // send event unmodified to the widget
00511 //       notify((QObject*) eventWidget, _fp.event);
00512 //       break;
00513 //     }
00514 //   }
00515 }
00516 
00517 
00518 //-----------------------------------------------------------------------------
00519 
00520 
00521 QWidget* QtApplication::findWidget(FootPrint & /* _fp */ )
00522 {
00523 //   QWidget                *w;
00524 //   std::vector<QWidget*>  candidates;
00525 //   QWidgetList            list = allWidgets();
00526 
00527 //   for (int i = 0; i < list.size(); ++i)
00528 //   {
00529 //     w = list.at(i);
00530 
00531 //     if (_fp.name == w->name() && _fp.classname == w->className())
00532 //       if (_fp.parent == (w->parent() ? w->parent()->name() : "noParent"))
00533 //      candidates.push_back(w);
00534 //   }
00535 
00536 
00537 
00538 //   if (candidates.size() == 1)
00539 //     return candidates[0];
00540 
00541 //   else
00542 //   {
00543 //     std::cerr << "Error: found " << candidates.size() 
00544 //            << " widgets with name " << "\"" << _fp.name << "\"\n";
00545 //     return 0;
00546 //   }
00547 
00548   return 0;
00549 }
00550 
00551 
00552 //-----------------------------------------------------------------------------
00553 
00554 
00555 void QtApplication::timerEvent(QTimerEvent* /* _e */ )
00556 {
00557   // all events processed ?
00558   if (eventnr_ < events_.size())
00559   {
00560     // get current event
00561     FootPrint fp = events_[eventnr_];
00562 
00563     // right time to send ?
00564     if (fp.time < time_.elapsed())
00565     {
00566       // increase counter
00567       ++eventnr_;
00568      
00569       // send event to widget
00570       playbackEvent(fp);
00571     }
00572   }
00573 
00574   // restart or stop playing
00575   else 
00576   {
00577     if (play_loop_)  // restart
00578     {
00579       eventnr_ = 0;  
00580       time_.start();
00581     }
00582     else   killTimer( timer_id_ );  // stop
00583   }
00584 }
00585 
00586 
00587 //-----------------------------------------------------------------------------
00588 
00589 
00590 void QtApplication::storeTopLevelSizes()
00591 {
00592 //   // clear buffer
00593 //   toplevels_.clear();
00594 
00595 
00596 //   QWidgetList    list = topLevelWidgets();
00597 //   QWidget        *w;
00598 //   FootPrint      fp;
00599 
00600 
00601 //   for (int i = 0; i < list.size(); ++i)
00602 //   {
00603 //     w = list.at(i);
00604 
00605 //     fp.name      = w->name();
00606 //     fp.classname = w->className();
00607 //     fp.parent    = w->parent() ? w->parent()->name() : "noParent";
00608 //     fp.size      = w->size();
00609 
00610 //     toplevels_.push_back(fp);
00611 //   }
00612 }
00613 
00614 
00615 //-----------------------------------------------------------------------------
00616 
00617 
00618 void QtApplication::restoreTopLevelSizes()
00619 {
00620 //   QWidget*  w;
00621 
00622 //   for(FootPrintIter it=toplevels_.begin(); it!=toplevels_.end(); ++it)
00623 //   {
00624 //     // find widget to restore size
00625 //     if ((w = findWidget(*it)))
00626 //     {
00627 //       // size differs -> restore it
00628 //       if (w->size() != it->size)
00629 //              w->resize(it->size);
00630 //     }
00631 //   }
00632 }
00633 
00634 
00635 //-----------------------------------------------------------------------------
00636 
00637 
00638 void QtApplication::saveFile(const char* /* _filename */ )
00639 {
00640 //   std::ofstream ofs(_filename, std::ios::out);
00641 //   if (!ofs) return;
00642 
00643 
00644 //   // write File Signature
00645 //   ofs << "QTMacro " << events_.size() << std::endl;
00646 //   ofs << oldMainWidgetPos_ << std::endl;
00647 
00648 
00649 //   // save toplevel sizes to file
00650 //   saveTopLevelSizes(ofs);
00651 
00652 
00653 //   // save all events
00654 //   for(FootPrintIter it=events_.begin(); it!=events_.end(); ++it)
00655 //   {
00656 //     ofs << "###" << std::endl;
00657     
00658 //     ofs << it->time                << std::endl;
00659 //     ofs << it->name                << std::endl;
00660 //     ofs << it->classname           << std::endl;
00661 //     ofs << it->parent              << std::endl;
00662 //     ofs << it->cursorPos           << std::endl;
00663 //     ofs << it->position            << std::endl;
00664 //     ofs << it->size                << std::endl;
00665 //     ofs << (int)it->event->type()  << std::endl;
00666 
00667     
00668 //     switch(it->event->type())
00669 //     {
00670 //       // mouse events ---------------------------------------------------------
00671 //       case QEvent::MouseButtonPress:
00672 //       case QEvent::MouseButtonRelease:
00673 //       case QEvent::MouseMove:
00674 //       case QEvent::MouseButtonDblClick:
00675 //       {
00676 //      QMouseEvent* e = (QMouseEvent*) it->event;
00677 //      ofs << e->pos()          << std::endl;
00678 //      ofs << e->globalPos()    << std::endl;
00679 //      ofs << (int)e->button()  << std::endl;
00680 //      ofs << (int)e->state()   << std::endl;
00681 //      break;
00682 //       }
00683 
00684 
00685 //       // wheel events ---------------------------------------------------------
00686 //       case QEvent::Wheel:
00687 //       {
00688 //      QWheelEvent* e = (QWheelEvent*) it->event;
00689 //      ofs << e->pos()               << std::endl;
00690 //      ofs << e->globalPos()         << std::endl;
00691 //      ofs << e->delta()             << std::endl;
00692 //      ofs << (int)e->state()        << std::endl;
00693 //      ofs << (int)e->orientation()  << std::endl;
00694 //      break;
00695 //       }
00696 
00697 
00698 //       // key events -----------------------------------------------------------
00699 //       case QEvent::KeyPress:
00700 //       case QEvent::KeyRelease:
00701 //       case QEvent::Shortcut:
00702 //       case QEvent::ShortcutOverride:
00703 //       {
00704 //      QKeyEvent* e = (QKeyEvent*) it->event;
00705 //      ofs << (int)e->key()           << std::endl;
00706 //      ofs << (int)e->ascii()         << std::endl;
00707 //      ofs << (int)e->state()         << std::endl;
00708 //      ofs << (int)e->isAutoRepeat()  << std::endl;
00709 //      ofs << (int)e->count()         << std::endl;
00710 //      break;
00711 //       }
00712 
00713 
00714 //       // context menu events --------------------------------------------------
00715 //       case QEvent::ContextMenu:
00716 //       {
00717 //      QContextMenuEvent* e = (QContextMenuEvent*) it->event;
00718 //      ofs << (int)e->reason() << std::endl;
00719 //      ofs << e->pos()         << std::endl;
00720 //      ofs << e->globalPos()   << std::endl;
00721 //      ofs << (int)e->state()  << std::endl;
00722 //      break;
00723 //       }
00724 
00725 
00726 //       // move events ----------------------------------------------------------
00727 //       case QEvent::Move:
00728 //       {
00729 //              QMoveEvent* e = (QMoveEvent*) it->event;
00730 //      ofs << e->pos()    << std::endl;
00731 //      ofs << e->oldPos() << std::endl;
00732 //      break;
00733 //       }
00734 
00735 
00736 //       // close events ---------------------------------------------------------
00737 //       case QEvent::Close:
00738 //       {
00739 //      // nothing has to be stored
00740 //      break;
00741 //       }
00742 
00743 
00744 //       default: // avoid warning
00745 //      break;
00746 //     }
00747 //   }
00748 
00749 //   ofs.close();
00750 }
00751 
00752 
00753 //-----------------------------------------------------------------------------
00754 
00755 
00756 void QtApplication::loadFile(const char* /* _filename */ )
00757 {
00758 //   std::ifstream ifs(_filename, std::ios::in);
00759 //   if (!ifs) return;
00760 
00761 
00762 //   // helper
00763 //   std::string  s;
00764 //   int          size = 0;
00765 //   FootPrint    fp;
00766 
00767 
00768 
00769 //   // check header
00770 //   ifs >> s;
00771 //   if (s != "QTMacro")
00772 //   {
00773 //     std::cerr << "wrong file format!!!" << std::endl;
00774 //     return;
00775 //   }
00776 //   ifs >> size >> oldMainWidgetPos_;
00777 
00778 
00779 //   // alloc
00780 //   cleanUpEventBuffer();
00781 //   events_.clear();
00782 
00783 
00784 //   // load toplevel sizes
00785 //   loadTopLevelSizes(ifs);
00786 
00787 
00788 //   // load all events
00789 //   for(int i=0; i<size; ++i)
00790 //   {
00791 //     fp.event = 0;
00792 
00793 
00794 //     // check for errors
00795 //     ifs >> s;
00796 //     if (s!="###")
00797 //     {
00798 //       std::cerr << "Event parsing error: " << s << std::endl;
00799 //       return;
00800 //     }
00801 
00802 
00803 //     // general event data
00804 //     ifs >> fp.time;
00805 //     ifs.ignore(1, '\n');
00806 //     fp.name      = read_name(ifs);
00807 //     fp.classname = read_name(ifs);
00808 //     fp.parent    = read_name(ifs);
00809 //     ifs >> fp.cursorPos >> fp.position >> fp.size;
00810 //     ifs.ignore(1, '\n');
00811 
00812 
00813 //     // determine event type
00814 //     int type;
00815 //     ifs >> type;
00816     
00817 
00818 //     // type specific data
00819 //     switch(type)
00820 //     {
00821 
00822 //       // mouse events ---------------------------------------------------------
00823 //       case QEvent::MouseButtonPress:
00824 //       case QEvent::MouseButtonRelease:
00825 //       case QEvent::MouseMove:
00826 //       case QEvent::MouseButtonDblClick:
00827 //       {
00828 //      QPoint pos, globalPos;
00829 //      int button, state;
00830         
00831 //      ifs >> pos >> globalPos >> button >> state;
00832 
00833 //      fp.event = new QMouseEvent((QEvent::Type)type,
00834 //                                 pos,
00835 //                                 globalPos,
00836 //                                 button,
00837 //                                 state);
00838 //      break;
00839 //       }
00840 
00841 
00842 //       // mouse wheel events ---------------------------------------------------
00843 //       case QEvent::Wheel:
00844 //       {
00845 //      int delta, state, orientation;
00846 //      QPoint pos, globalPos;
00847 
00848 //      // read values from file
00849 //      ifs >> pos >> globalPos >> delta >> state >> orientation;
00850 
00851 //      fp.event = new QWheelEvent(pos,
00852 //                                 globalPos,
00853 //                                 delta,
00854 //                                 state,
00855 //                                 (Qt::Orientation) orientation);
00856 //      break;
00857 //       }
00858 
00859 
00860 //       // key events -----------------------------------------------------------
00861 //       case QEvent::KeyPress:
00862 //       case QEvent::KeyRelease:
00863 //       case QEvent::Shortcut:
00864 //       case QEvent::ShortcutOverride:
00865 //       {
00866 //      int key, ascii, state, count, isAutoRepeat;
00867 //      char text[2];
00868 
00869 //      ifs >> key >> ascii >> state >> isAutoRepeat >> count;
00870 
00871 //      text[0] = (char)ascii; 
00872 //      text[1] = '\0';
00873 
00874 //      fp.event = new QKeyEvent((QEvent::Type)type,
00875 //                               key,
00876 //                               ascii,
00877 //                               state,
00878 //                               QString(text),
00879 //                               isAutoRepeat,
00880 //                               count);
00881 //      break;
00882 //       }
00883 
00884 
00885 
00886 //       // context menu events --------------------------------------------------
00887 //       case QEvent::ContextMenu:
00888 //       {
00889 //      int reason, state;
00890 //      QPoint pos, globalPos;
00891 
00892 //      ifs >> reason >> pos >> globalPos >> state;
00893 
00894 //      fp.event = new QContextMenuEvent((QContextMenuEvent::Reason)reason,
00895 //                                       pos,
00896 //                                       globalPos,
00897 //                                       state);
00898 //      break;
00899 //       }
00900 
00901 
00902 //       // move events ----------------------------------------------------------
00903 //       case QEvent::Move:
00904 //       {
00905 //      QPoint pos, oldPos;
00906 
00907 //      ifs >> pos >> oldPos;
00908 
00909 //      fp.event = new QMoveEvent(pos, oldPos);
00910 //      break;
00911 //       }
00912 
00913 
00914 //       // close events ---------------------------------------------------------
00915 //       case QEvent::Close:
00916 //       {
00917 //      fp.event = new QCloseEvent();
00918 //      break;
00919 //       }
00920 
00921 
00922 
00923 //       default:
00924 //       {
00925 //      std::cerr << "Error: unknown event type: " << type << std::endl;
00926 //      break;
00927 //       }
00928 //     }
00929     
00930 
00931 //     // store event
00932 //     if (fp.event) events_.push_back(fp);
00933 //   }
00934 
00935 
00936 //   ifs.close();
00937 }
00938 
00939 
00940 //-----------------------------------------------------------------------------
00941 
00942 
00943 void QtApplication::saveTopLevelSizes(std::ostream & /* _os */ )
00944 {
00945 //   _os << "TLS " << toplevels_.size() << std::endl;
00946   
00947 //   for(FootPrintIter it=toplevels_.begin(); it!=toplevels_.end(); ++it)
00948 //   {
00949 //     _os << it->name       << std::endl;
00950 //     _os << it->classname  << std::endl;
00951 //     _os << it->parent     << std::endl;
00952 //     _os << it->size       << std::endl;
00953 //   }
00954 
00955 //   _os << "ENDTLS" << std::endl;
00956 
00957 }
00958 
00959 
00960 //-----------------------------------------------------------------------------
00961 
00962 
00963 void QtApplication::loadTopLevelSizes(std::istream & /* _is */ )
00964 {
00965 //   std::string  s;
00966 //   int          size;
00967 //   FootPrint    fp;
00968 
00969 
00970 //   // check header
00971 //   _is >> s;
00972 //   if (s != "TLS")
00973 //   {
00974 //     std::cerr << "error in toplevel block (start)\n";
00975 //     return;
00976 //   }
00977 //   _is >> size;
00978 //   _is.ignore(1, '\n');
00979 
00980   
00981 //   // read top level sizes
00982 //   toplevels_.clear();
00983 
00984 //   for(int i=0; i<size; i++)
00985 //   {
00986 //     // read names
00987 //     fp.name      = read_name(_is);
00988 //     fp.classname = read_name(_is);
00989 //     fp.parent    = read_name(_is);
00990 
00991 //     // read size
00992 //     _is >> fp.size;
00993 //     _is.ignore(1, '\n');
00994 
00995 //     // store footprint
00996 //     toplevels_.push_back(fp);
00997 //   }
00998 
00999 
01000 //   _is >> s;
01001 //   if (s != "ENDTLS")
01002 //   {
01003 //     std::cerr << "Error in toplevel block (end)\n";
01004 //     return;
01005 //   }
01006 //   _is.ignore(1, '\n');
01007 }
01008 
01009 
01010 //=============================================================================
01011 } // namespace QtWidgets
01012 } // namespace ACG
01013 //=============================================================================

acg pic Project OpenFlipper, ©  Computer Graphics Group, RWTH Aachen. Documentation generated using doxygen .