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 //=============================================================================