From f6eee66fcb6841017b3d61b99ac3626b10ee3b07 Mon Sep 17 00:00:00 2001 From: Jean-Paul Chaput Date: Mon, 1 Sep 2008 14:47:50 +0000 Subject: [PATCH] * ./hurricane/src/hviewer : - New feature : Command support. Move command is now implemenented as a Command and no longer built into the CellWidget. ZoomCommand implemented. - New feature : SelectCommand support along with new HSelection widget to browse the current selection. Selection is automatically kept up to date. - Note : Selection Browser & Netlist Browser pointer in the CellViewer are resets to NULL on widget destruction by closing. We do not want to keep big widget hiden. The are allocateds on demand. - New feature : progessive grid. First display 5x5 then 5x5 + 1x1. --- hurricane/src/hviewer/AreaCommand.cpp | 119 ++++++++++++ hurricane/src/hviewer/CMakeLists.txt | 17 ++ hurricane/src/hviewer/CellViewer.cpp | 59 +++++- hurricane/src/hviewer/CellWidget.cpp | 141 +++++++++----- hurricane/src/hviewer/Command.cpp | 101 ++++++++++ hurricane/src/hviewer/HNetlist.cpp | 1 - hurricane/src/hviewer/HSelection.cpp | 178 ++++++++++++++++++ hurricane/src/hviewer/HSelectionModel.cpp | 166 ++++++++++++++++ hurricane/src/hviewer/MoveCommand.cpp | 135 +++++++++++++ hurricane/src/hviewer/SelectCommand.cpp | 117 ++++++++++++ hurricane/src/hviewer/ZoomCommand.cpp | 111 +++++++++++ .../hviewer/hurricane/viewer/AreaCommand.h | 94 +++++++++ .../src/hviewer/hurricane/viewer/CellViewer.h | 57 +++--- .../src/hviewer/hurricane/viewer/CellWidget.h | 47 +++-- .../src/hviewer/hurricane/viewer/Command.h | 104 ++++++++++ .../src/hviewer/hurricane/viewer/HNetlist.h | 1 + .../src/hviewer/hurricane/viewer/HSelection.h | 105 +++++++++++ .../hurricane/viewer/HSelectionModel.h | 96 ++++++++++ .../hviewer/hurricane/viewer/MoveCommand.h | 84 +++++++++ .../hviewer/hurricane/viewer/SelectCommand.h | 93 +++++++++ .../hviewer/hurricane/viewer/ZoomCommand.h | 80 ++++++++ 21 files changed, 1819 insertions(+), 87 deletions(-) create mode 100644 hurricane/src/hviewer/AreaCommand.cpp create mode 100644 hurricane/src/hviewer/Command.cpp create mode 100644 hurricane/src/hviewer/HSelection.cpp create mode 100644 hurricane/src/hviewer/HSelectionModel.cpp create mode 100644 hurricane/src/hviewer/MoveCommand.cpp create mode 100644 hurricane/src/hviewer/SelectCommand.cpp create mode 100644 hurricane/src/hviewer/ZoomCommand.cpp create mode 100644 hurricane/src/hviewer/hurricane/viewer/AreaCommand.h create mode 100644 hurricane/src/hviewer/hurricane/viewer/Command.h create mode 100644 hurricane/src/hviewer/hurricane/viewer/HSelection.h create mode 100644 hurricane/src/hviewer/hurricane/viewer/HSelectionModel.h create mode 100644 hurricane/src/hviewer/hurricane/viewer/MoveCommand.h create mode 100644 hurricane/src/hviewer/hurricane/viewer/SelectCommand.h create mode 100644 hurricane/src/hviewer/hurricane/viewer/ZoomCommand.h diff --git a/hurricane/src/hviewer/AreaCommand.cpp b/hurricane/src/hviewer/AreaCommand.cpp new file mode 100644 index 00000000..45031058 --- /dev/null +++ b/hurricane/src/hviewer/AreaCommand.cpp @@ -0,0 +1,119 @@ + +// -*- C++ -*- +// +// This file is part of the Coriolis Project. +// Copyright (C) Laboratoire LIP6 - Departement ASIM +// Universite Pierre et Marie Curie +// +// Main contributors : +// Christophe Alexandre +// Sophie Belloeil +// Hugo Clément +// Jean-Paul Chaput +// Damien Dupuis +// Christian Masson +// Marek Sroka +// +// The Coriolis Project is free software; you can redistribute it +// and/or modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// The Coriolis Project is distributed in the hope that it will be +// useful, but WITHOUT ANY WARRANTY; without even the implied warranty +// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with the Coriolis Project; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +// USA +// +// License-Tag +// Authors-Tag +// =================================================================== +// +// $Id$ +// +// x-----------------------------------------------------------------x +// | | +// | H U R R I C A N E | +// | V L S I B a c k e n d D a t a - B a s e | +// | | +// | Author : Jean-Paul CHAPUT | +// | E-mail : Jean-Paul.Chaput@asim.lip6.fr | +// | =============================================================== | +// | C++ Module : "./AreaCommand.cpp" | +// | *************************************************************** | +// | U p d a t e s | +// | | +// x-----------------------------------------------------------------x + + +# include +# include + +# include +# include + + +namespace Hurricane { + + +// ------------------------------------------------------------------- +// Class : "AreaCommand". + + + AreaCommand::AreaCommand () + : Command() + , _startPoint() + , _stopPoint() + { } + + + AreaCommand::~AreaCommand () + { } + + + + bool AreaCommand::mouseMoveEvent ( CellWidget* widget, QMouseEvent* event ) + { + if ( !isActive() ) return false; + + setStopPoint ( event->pos() ); + widget->update (); + + return true; + } + + + void AreaCommand::draw ( CellWidget* widget ) + { + if ( !_active ) return; + + widget->drawScreenRect ( _startPoint, _stopPoint ); + drawCorner ( widget, true ); + drawCorner ( widget, false ); + } + + + void AreaCommand::drawCorner ( CellWidget* widget, bool bottomLeft ) + { + QRect zoomRect = QRect(_startPoint,_stopPoint).normalized(); + QPoint base = (bottomLeft) ? zoomRect.bottomLeft() : zoomRect.topRight(); + + if ( bottomLeft ) base.rx() += 2; + else base.ry() += 2; + + _cornerPoints[0] = base; + _cornerPoints[1] = base; + _cornerPoints[2] = base; + + _cornerPoints[0].ry() += (bottomLeft) ? -10 : 10; + _cornerPoints[2].rx() += (bottomLeft) ? 10 : -10; + + widget->drawScreenPolyline ( _cornerPoints, 3, 4 ); + } + + +} // End of Hurricane namespace. diff --git a/hurricane/src/hviewer/CMakeLists.txt b/hurricane/src/hviewer/CMakeLists.txt index 67332921..816e5fa5 100644 --- a/hurricane/src/hviewer/CMakeLists.txt +++ b/hurricane/src/hviewer/CMakeLists.txt @@ -13,11 +13,14 @@ hurricane/viewer/DynamicLabel.h hurricane/viewer/HMousePosition.h hurricane/viewer/Selector.h + hurricane/viewer/SelectCommand.h hurricane/viewer/CellWidget.h hurricane/viewer/CellWidgets.h hurricane/viewer/CellViewer.h hurricane/viewer/RecordModel.h hurricane/viewer/HInspectorWidget.h + hurricane/viewer/HSelectionModel.h + hurricane/viewer/HSelection.h hurricane/viewer/HNetlistModel.h hurricane/viewer/HNetlist.h hurricane/viewer/HDisplayFilter.h @@ -29,10 +32,17 @@ hurricane/viewer/Graphics.h hurricane/viewer/HGraphics.h hurricane/viewer/Selector.h + hurricane/viewer/Command.h + hurricane/viewer/AreaCommand.h + hurricane/viewer/MoveCommand.h + hurricane/viewer/ZoomCommand.h + hurricane/viewer/SelectCommand.h hurricane/viewer/CellWidget.h hurricane/viewer/CellWidgets.h hurricane/viewer/CellViewer.h hurricane/viewer/HInspectorWidget.h + hurricane/viewer/HSelectionModel.h + hurricane/viewer/HSelection.h hurricane/viewer/NetInformations.h hurricane/viewer/HNetlist.h hurricane/viewer/HDisplayFilter.h @@ -49,10 +59,17 @@ DynamicLabel.cpp HMousePosition.cpp Selector.cpp + Command.cpp + AreaCommand.cpp + MoveCommand.cpp + ZoomCommand.cpp + SelectCommand.cpp CellWidget.cpp CellViewer.cpp RecordModel.cpp HInspectorWidget.cpp + HSelectionModel.cpp + HSelection.cpp NetInformations.cpp HNetlistModel.cpp HNetlist.cpp diff --git a/hurricane/src/hviewer/CellViewer.cpp b/hurricane/src/hviewer/CellViewer.cpp index 916c4e07..be892d85 100644 --- a/hurricane/src/hviewer/CellViewer.cpp +++ b/hurricane/src/hviewer/CellViewer.cpp @@ -65,6 +65,7 @@ #include "hurricane/viewer/CellWidget.h" #include "hurricane/viewer/CellViewer.h" #include "hurricane/viewer/HInspectorWidget.h" +#include "hurricane/viewer/HSelection.h" #include "hurricane/viewer/HNetlist.h" #include "hurricane/viewer/HMousePosition.h" #include "hurricane/viewer/HGraphics.h" @@ -89,6 +90,7 @@ namespace Hurricane { , _displayFilterAction(NULL) , _runInspectorOnDataBase(NULL) , _runInspectorOnCell(NULL) + , _browseSelection(NULL) , _browseNetlist(NULL) , _fileMenu(NULL) , _viewMenu(NULL) @@ -99,7 +101,12 @@ namespace Hurricane { , _graphicsSettings(NULL) , _displayFilter(NULL) , _cellWidget(NULL) + , _moveCommand() + , _zoomCommand() + , _selectCommand() , _cellHistory() + , _selectionBrowser(NULL) + , _netlistBrowser(NULL) { setObjectName("viewer"); @@ -189,13 +196,16 @@ namespace Hurricane { _runInspectorOnCell->setObjectName ( "viewer.tools.inspectCell" ); _runInspectorOnCell->setStatusTip ( tr("Run Inspector on the current Cell") ); + _browseSelection= new QAction ( tr("Browse &Selection"), this ); + _browseSelection->setObjectName ( "viewer.tools.browseSelection" ); + _browseSelection->setStatusTip ( tr("Browse objects currently selecteds") ); + _browseNetlist= new QAction ( tr("Browse &Netlist"), this ); _browseNetlist->setObjectName ( "viewer.tools.browseNetlist" ); _browseNetlist->setStatusTip ( tr("Browse netlist from the current Cell") ); } - void CellViewer::createMenus () { if ( _fileMenu ) return; @@ -227,11 +237,11 @@ namespace Hurricane { _toolsMenu->setObjectName ( "viewer.tools" ); _toolsMenu->addAction ( _runInspectorOnDataBase ); _toolsMenu->addAction ( _runInspectorOnCell ); + _toolsMenu->addAction ( _browseSelection ); _toolsMenu->addAction ( _browseNetlist ); } - void CellViewer::createLayout () { if ( _cellWidget ) return; @@ -243,8 +253,12 @@ namespace Hurricane { //_mapView = _cellWidget->getMapView (); _cellWidget->bindToPalette ( _palette ); + _cellWidget->bindCommand ( &_moveCommand ); + _cellWidget->bindCommand ( &_zoomCommand ); + _cellWidget->bindCommand ( &_selectCommand ); _displayFilter->setCellWidget ( _cellWidget ); + HMousePosition* _mousePosition = new HMousePosition (); statusBar()->addPermanentWidget ( _mousePosition ); @@ -280,6 +294,7 @@ namespace Hurricane { connect ( _displayFilterAction , SIGNAL(triggered()) , this , SLOT(showDisplayFilter()) ); connect ( _runInspectorOnDataBase, SIGNAL(triggered()) , this , SLOT(runInspectorOnDataBase())); connect ( _runInspectorOnCell , SIGNAL(triggered()) , this , SLOT(runInspectorOnCell()) ); + connect ( _browseSelection , SIGNAL(triggered()) , this , SLOT(browseSelection()) ); connect ( _browseNetlist , SIGNAL(triggered()) , this , SLOT(browseNetlist()) ); connect ( _cellWidget , SIGNAL(mousePositionChanged(const Point&)) , _mousePosition , SLOT(setPosition(const Point&)) ); @@ -416,9 +431,25 @@ namespace Hurricane { void CellViewer::browseNetlist () { - HNetlist* netlistBrowser = new HNetlist (); - netlistBrowser->setCellWidget ( _cellWidget ); - netlistBrowser->show (); + if ( !_netlistBrowser ) { + _netlistBrowser = new HNetlist (); + _netlistBrowser->setCellWidget ( _cellWidget ); + connect ( _netlistBrowser, SIGNAL(destroyed()), this, SLOT(netlistBrowserDestroyed()) ); + } + _netlistBrowser->show (); + } + + + void CellViewer::browseSelection () + { + if ( !_selectionBrowser ) { + _selectionBrowser = new HSelection (); + _selectionBrowser->setSelection ( _cellWidget->getSelectorSet() ); + connect ( _selectionBrowser, SIGNAL(destroyed()), this, SLOT(selectionBrowserDestroyed()) ); + connect ( &_selectCommand , SIGNAL(selectionChanged(const set&,Cell*)) + , _selectionBrowser, SLOT (setSelection (const set&,Cell*)) ); + } + _selectionBrowser->show (); } @@ -434,4 +465,22 @@ namespace Hurricane { { if ( _cellWidget ) _cellWidget->unselectAll(); } + void CellViewer::selectionBrowserDestroyed () + { + if ( _selectionBrowser ) { + _selectionBrowser = NULL; + } else + cerr << "[ERROR] Double-destruction of the Selection Browser." << endl; + } + + + void CellViewer::netlistBrowserDestroyed () + { + if ( _netlistBrowser ) { + _netlistBrowser = NULL; + } else + cerr << "[ERROR] Double-destruction of the Netlist Browser." << endl; + } + + } // End of Hurricane namespace. diff --git a/hurricane/src/hviewer/CellWidget.cpp b/hurricane/src/hviewer/CellWidget.cpp index 7730284d..821685f9 100644 --- a/hurricane/src/hviewer/CellWidget.cpp +++ b/hurricane/src/hviewer/CellWidget.cpp @@ -72,6 +72,7 @@ # include "hurricane/viewer/HPaletteEntry.h" # include "hurricane/viewer/HPalette.h" // # include "MapView.h" +# include "hurricane/viewer/Command.h" # include "hurricane/viewer/CellWidget.h" @@ -88,6 +89,7 @@ namespace Hurricane { : _cellWidget(cw) , _spotPoint() , _restore(false) + , _showSpot(true) { } @@ -101,13 +103,16 @@ namespace Hurricane { void CellWidget::Spot::setRestore ( bool state ) - { - _restore = state; - } + { _restore = state; } void CellWidget::Spot::moveTo ( const QPoint& screenPoint ) { + restore (); + if ( !_showSpot ) return; + + _restore = true; + QPainter& screenPainter = _cellWidget->getDrawingPlanes().painter(2); Point mousePoint = _cellWidget->screenToDbuPoint ( screenPoint ); @@ -116,9 +121,6 @@ namespace Hurricane { ); QPoint center = _cellWidget->dbuToScreenPoint(spotPoint); - restore (); - _restore = true; - screenPainter.setPen ( Graphics::getPen("spot") ); screenPainter.drawRect ( center.x()-3, center.y()-3, 6, 6 ); } @@ -343,13 +345,13 @@ namespace Hurricane { , _offsetVA(_stripWidth,_stripWidth) , _drawingPlanes(QSize(6*_stripWidth,6*_stripWidth),this) , _drawingQuery(this) - , _lastMousePosition(0,0) + , _mousePosition(0,0) , _spot(this) , _cell(NULL) - , _mouseGo(false) , _showBoundaries(true) , _showSelection(false) , _selectionHasChanged(false) + , _commands() , _redrawRectCount(0) { //setBackgroundRole ( QPalette::Dark ); @@ -374,6 +376,9 @@ namespace Hurricane { CellWidget::~CellWidget () { cerr << "CellWidget::~CellWidget()" << endl; + + for ( size_t i=0 ; i<_commands.size() ; i++ ) + unbindCommand ( _commands[i] ); } @@ -396,6 +401,28 @@ namespace Hurricane { } + void CellWidget::bindCommand ( Command* command ) + { + for ( size_t i=0 ; i<_commands.size() ; i++ ) + if ( _commands[i] == command ) return; + + _commands.push_back ( command ); + } + + + void CellWidget::unbindCommand ( Command* command ) + { + size_t i = 0; + for ( ; i<_commands.size() ; i++ ) + if ( _commands[i] == command ) break; + + for ( ; i+1<_commands.size() ; i++ ) + _commands[i] = _commands[i+1]; + + _commands.pop_back (); + } + + void CellWidget::pushCursor ( Qt::CursorShape cursor ) { setCursor ( cursor ); @@ -575,10 +602,31 @@ namespace Hurricane { } + void CellWidget::drawScreenPolyline ( const QPoint* points, int count, int width ) + { + QPen pen = Graphics::getPen("grid"); + pen.setWidth ( width ); + + _drawingPlanes.painter(2).setPen ( pen ); + _drawingPlanes.painter(2).drawPolyline ( points, count ); + } + + + void CellWidget::drawScreenRect ( const QPoint& p1, const QPoint& p2 ) + { + _drawingPlanes.painter(2).setPen ( Graphics::getPen("grid") ); + _drawingPlanes.painter(2).drawRect ( QRect(p1,p2) ); + } + + void CellWidget::drawGrid () { _drawingPlanes.painter(2).setPen ( Graphics::getPen("grid") ); + bool lambdaGrid = false; + if ( Graphics::getThreshold("grid")/DbU::lambda(1.0) < _scale/5 ) + lambdaGrid = true; + DbU::Unit gridStep = DbU::getSnapGridStep(); DbU::Unit superGridStep = gridStep*5; DbU::Unit xGrid; @@ -594,11 +642,16 @@ namespace Hurricane { ; xGrid += gridStep ) { center = dbuToScreenPoint(xGrid,yGrid); - if ( (xGrid % superGridStep) || (yGrid % superGridStep) ) - _drawingPlanes.painter(2).drawPoint ( center ); - else { - _drawingPlanes.painter(2).drawLine ( center.x()-3, center.y() , center.x()+3, center.y() ); - _drawingPlanes.painter(2).drawLine ( center.x() , center.y()-3, center.x() , center.y()+3 ); + if ( (xGrid % superGridStep) || (yGrid % superGridStep) ) { + if ( lambdaGrid ) + _drawingPlanes.painter(2).drawPoint ( center ); + } else { + if ( lambdaGrid ) { + _drawingPlanes.painter(2).drawLine ( center.x()-3, center.y() , center.x()+3, center.y() ); + _drawingPlanes.painter(2).drawLine ( center.x() , center.y()-3, center.x() , center.y()+3 ); + } else { + _drawingPlanes.painter(2).drawPoint ( center ); + } } } } @@ -831,8 +884,11 @@ namespace Hurricane { _drawingPlanes.painterBegin ( 2 ); _drawingPlanes.copyToScreen (); + for ( size_t i=0 ; i<_commands.size() ; i++ ) + _commands[i]->draw ( this ); + if ( isDrawable("grid") ) drawGrid (); - if ( isDrawable("spot") ) _spot.moveTo ( _lastMousePosition ); + if ( isDrawable("spot") ) _spot.moveTo ( _mousePosition ); _drawingPlanes.painterEnd ( 2 ); } @@ -875,36 +931,22 @@ namespace Hurricane { void CellWidget::keyPressEvent ( QKeyEvent* event ) { - switch ( event->key() ) { - case Qt::Key_Up: goUp (); break; - case Qt::Key_Down: goDown (); break; - case Qt::Key_Left: goLeft (); break; - case Qt::Key_Right: goRight (); break; - case Qt::Key_Z: setScale ( _scale*2.0 ); break; - case Qt::Key_M: setScale ( _scale/2.0 ); break; - default: QWidget::keyPressEvent ( event ); - } + bool commandActive = false; + for ( size_t i=0 ; i<_commands.size() && !commandActive; i++ ) + commandActive = _commands[i]->keyPressEvent ( this, event ); + + if ( !commandActive ) QWidget::keyPressEvent ( event ); } void CellWidget::mouseMoveEvent ( QMouseEvent* event ) { - if ( _mouseGo ) { - int dx = event->x() - _lastMousePosition.x(); - dx <<= 1; - //cerr << "dX (px): " << dx << " _offsetVA.rx() " << _offsetVA.rx() << endl; - if ( dx > 0 ) goLeft ( dx ); - if ( dx < 0 ) goRight ( -dx ); + bool commandActive = false; + for ( size_t i=0 ; i<_commands.size() && !commandActive; i++ ) + commandActive = _commands[i]->mouseMoveEvent ( this, event ); - int dy = event->y() - _lastMousePosition.y(); - dy <<= 1; - //cerr << "dY (px): " << dy << " _offsetVA.ry() " << _offsetVA.ry() << endl; - if ( dy > 0 ) goUp ( dy ); - if ( dy < 0 ) goDown ( -dy ); - - _lastMousePosition = event->pos(); - } else { - _lastMousePosition = event->pos(); + if ( !commandActive ) { + _mousePosition = event->pos(); emit mousePositionChanged ( screenToDbuPoint(event->pos()) ); update (); @@ -914,20 +956,21 @@ namespace Hurricane { void CellWidget::mousePressEvent ( QMouseEvent* event ) { - if ( ( event->button() == Qt::LeftButton ) && !_mouseGo ) { - _mouseGo = true; - _lastMousePosition = event->pos(); - pushCursor ( Qt::ClosedHandCursor ); - } + bool commandActive = false; + for ( size_t i=0 ; i<_commands.size() && !commandActive; i++ ) + commandActive = _commands[i]->mousePressEvent ( this, event ); + + _spot.setShowSpot ( !commandActive ); } void CellWidget::mouseReleaseEvent ( QMouseEvent* event ) { - if ( ( event->button() == Qt::LeftButton ) && _mouseGo ) { - _mouseGo = false; - popCursor (); - } + bool commandActive = false; + for ( size_t i=0 ; i<_commands.size() && !commandActive; i++ ) + commandActive = _commands[i]->mouseReleaseEvent ( this, event ); + + _spot.setShowSpot ( true ); } @@ -998,7 +1041,7 @@ namespace Hurricane { } - void CellWidget::select ( Occurrence& occurrence ) + void CellWidget::select ( Occurrence occurrence ) { if ( !occurrence.isValid() ) throw Error ( "Can't select occurrence : invalid occurrence" ); @@ -1022,7 +1065,7 @@ namespace Hurricane { } - void CellWidget::unselect ( Occurrence& occurrence ) + void CellWidget::unselect ( Occurrence occurrence ) { if ( !occurrence.isValid() ) throw Error ( "Can't unselect occurrence : invalid occurrence" ); diff --git a/hurricane/src/hviewer/Command.cpp b/hurricane/src/hviewer/Command.cpp new file mode 100644 index 00000000..16fa0ced --- /dev/null +++ b/hurricane/src/hviewer/Command.cpp @@ -0,0 +1,101 @@ + +// -*- C++ -*- +// +// This file is part of the Coriolis Project. +// Copyright (C) Laboratoire LIP6 - Departement ASIM +// Universite Pierre et Marie Curie +// +// Main contributors : +// Christophe Alexandre +// Sophie Belloeil +// Hugo Clément +// Jean-Paul Chaput +// Damien Dupuis +// Christian Masson +// Marek Sroka +// +// The Coriolis Project is free software; you can redistribute it +// and/or modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// The Coriolis Project is distributed in the hope that it will be +// useful, but WITHOUT ANY WARRANTY; without even the implied warranty +// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with the Coriolis Project; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +// USA +// +// License-Tag +// Authors-Tag +// =================================================================== +// +// $Id$ +// +// x-----------------------------------------------------------------x +// | | +// | H U R R I C A N E | +// | V L S I B a c k e n d D a t a - B a s e | +// | | +// | Author : Jean-Paul CHAPUT | +// | E-mail : Jean-Paul.Chaput@asim.lip6.fr | +// | =============================================================== | +// | C++ Module : "./Command.cpp" | +// | *************************************************************** | +// | U p d a t e s | +// | | +// x-----------------------------------------------------------------x + + +# include +# include + +# include +# include + + +namespace Hurricane { + + +// ------------------------------------------------------------------- +// Class : "Command". + + + Command::Command () + : _cellWidgets() + , _active(false) + { } + + + Command::~Command () + { + set::iterator iwidget = _cellWidgets.begin(); + for ( ; iwidget != _cellWidgets.end() ; iwidget++ ) + (*iwidget)->unbindCommand ( this ); + } + + + bool Command::keyPressEvent ( CellWidget*, QKeyEvent* ) + { return false; } + + + bool Command::mouseMoveEvent ( CellWidget*, QMouseEvent* ) + { return false; } + + + bool Command::mousePressEvent ( CellWidget*, QMouseEvent* ) + { return false; } + + + bool Command::mouseReleaseEvent ( CellWidget*, QMouseEvent* ) + { return false; } + + + void Command::draw ( CellWidget* ) + { } + + +} // End of Hurricane namespace. diff --git a/hurricane/src/hviewer/HNetlist.cpp b/hurricane/src/hviewer/HNetlist.cpp index 513e23fe..cef27205 100644 --- a/hurricane/src/hviewer/HNetlist.cpp +++ b/hurricane/src/hviewer/HNetlist.cpp @@ -97,7 +97,6 @@ namespace Hurricane { _netlistView->setSortingEnabled(true); _netlistView->setModel ( _sortModel ); _netlistView->horizontalHeader()->setStretchLastSection ( true ); - _netlistView->resizeColumnToContents ( 0 ); QHeaderView* horizontalHeader = _netlistView->horizontalHeader (); horizontalHeader->setStretchLastSection ( true ); diff --git a/hurricane/src/hviewer/HSelection.cpp b/hurricane/src/hviewer/HSelection.cpp new file mode 100644 index 00000000..a08f73fc --- /dev/null +++ b/hurricane/src/hviewer/HSelection.cpp @@ -0,0 +1,178 @@ + +// -*- C++ -*- +// +// This file is part of the Coriolis Project. +// Copyright (C) Laboratoire LIP6 - Departement ASIM +// Universite Pierre et Marie Curie +// +// Main contributors : +// Christophe Alexandre +// Sophie Belloeil +// Hugo Clément +// Jean-Paul Chaput +// Damien Dupuis +// Christian Masson +// Marek Sroka +// +// The Coriolis Project is free software; you can redistribute it +// and/or modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// The Coriolis Project is distributed in the hope that it will be +// useful, but WITHOUT ANY WARRANTY; without even the implied warranty +// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with the Coriolis Project; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +// USA +// +// License-Tag +// Authors-Tag +// =================================================================== +// +// $Id$ +// +// x-----------------------------------------------------------------x +// | | +// | H U R R I C A N E | +// | | +// | Author : Jean-Paul CHAPUT | +// | E-mail : Jean-Paul.Chaput@asim.lip6.fr | +// | =============================================================== | +// | C++ Module : "./HSelection.cpp" | +// | *************************************************************** | +// | U p d a t e s | +// | | +// x-----------------------------------------------------------------x + + +#include +#include +#include +#include +#include +#include +#include + +#include "hurricane/Commons.h" +#include "hurricane/Cell.h" + +#include "hurricane/viewer/Graphics.h" +#include "hurricane/viewer/HSelectionModel.h" +#include "hurricane/viewer/HSelection.h" +#include "hurricane/viewer/HInspectorWidget.h" + + +namespace Hurricane { + + + + HSelection::HSelection ( QWidget* parent ) + : QWidget(parent) + , _selectionModel(NULL) + , _sortModel(NULL) + , _selectionView(NULL) + , _rowHeight(20) + { + setAttribute ( Qt::WA_DeleteOnClose ); + setAttribute ( Qt::WA_QuitOnClose, false ); + + _rowHeight = QFontMetrics(Graphics::getFixedFont()).height() + 4; + + _selectionModel = new HSelectionModel ( this ); + + _sortModel = new QSortFilterProxyModel ( this ); + _sortModel->setSourceModel ( _selectionModel ); + _sortModel->setDynamicSortFilter ( true ); + _sortModel->setFilterKeyColumn ( 0 ); + + _selectionView = new QTableView(this); + _selectionView->setShowGrid(false); + _selectionView->setAlternatingRowColors(true); + _selectionView->setSelectionBehavior(QAbstractItemView::SelectRows); + _selectionView->setSortingEnabled(true); + _selectionView->setModel ( _sortModel ); + _selectionView->horizontalHeader()->setStretchLastSection ( true ); + + QHeaderView* horizontalHeader = _selectionView->horizontalHeader (); + horizontalHeader->setStretchLastSection ( true ); + horizontalHeader->setMinimumSectionSize ( 200 ); + + QHeaderView* verticalHeader = _selectionView->verticalHeader (); + verticalHeader->setVisible ( false ); + + _filterPatternLineEdit = new QLineEdit(this); + QLabel* filterPatternLabel = new QLabel(tr("&Filter pattern:"), this); + filterPatternLabel->setBuddy(_filterPatternLineEdit); + + QGridLayout* inspectorLayout = new QGridLayout(); + inspectorLayout->addWidget(_selectionView , 1, 0, 1, 2); + inspectorLayout->addWidget(filterPatternLabel , 2, 0); + inspectorLayout->addWidget(_filterPatternLineEdit, 2, 1); + + setLayout ( inspectorLayout ); + + connect ( _filterPatternLineEdit, SIGNAL(textChanged(const QString &)) + , this , SLOT(textFilterChanged()) + ); + + setWindowTitle(tr("Selection")); + resize(500, 300); + } + + + void HSelection::keyPressEvent ( QKeyEvent* event ) + { + if ( event->key() == Qt::Key_I ) { runInspector(_selectionView->currentIndex()); } + else event->ignore(); + } + + + void HSelection::textFilterChanged () + { + _sortModel->setFilterRegExp ( _filterPatternLineEdit->text() ); + } + + + void HSelection::addToSelection ( Selector* selector ) + { + _selectionModel->addToSelection ( selector ); + int rows = _sortModel->rowCount () - 1; + _selectionView->setRowHeight ( rows, _rowHeight ); + } + + + void HSelection::setSelection ( const set& selection, Cell* cell ) + { + _selectionModel->setSelection ( selection ); + + string windowTitle = "Selection"; + if ( cell ) windowTitle += getString(cell); + else windowTitle += ""; + setWindowTitle ( tr(windowTitle.c_str()) ); + + int rows = _sortModel->rowCount (); + for ( rows-- ; rows >= 0 ; rows-- ) + _selectionView->setRowHeight ( rows, _rowHeight ); + _selectionView->selectRow ( 0 ); + _selectionView->resizeColumnToContents ( 0 ); + } + + + void HSelection::runInspector ( const QModelIndex& index ) + { + if ( index.isValid() ) { + Occurrence occurrence = _selectionModel->getOccurrence ( _sortModel->mapToSource(index).row() ); + + HInspectorWidget* inspector = new HInspectorWidget (); + + inspector->setRootRecord ( getRecord(occurrence) ); + inspector->show (); + } + } + + +} // End of Hurricane namespace. diff --git a/hurricane/src/hviewer/HSelectionModel.cpp b/hurricane/src/hviewer/HSelectionModel.cpp new file mode 100644 index 00000000..a524d356 --- /dev/null +++ b/hurricane/src/hviewer/HSelectionModel.cpp @@ -0,0 +1,166 @@ + +// -*- C++ -*- +// +// This file is part of the Coriolis Project. +// Copyright (C) Laboratoire LIP6 - Departement ASIM +// Universite Pierre et Marie Curie +// +// Main contributors : +// Christophe Alexandre +// Sophie Belloeil +// Hugo Clément +// Jean-Paul Chaput +// Damien Dupuis +// Christian Masson +// Marek Sroka +// +// The Coriolis Project is free software; you can redistribute it +// and/or modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// The Coriolis Project is distributed in the hope that it will be +// useful, but WITHOUT ANY WARRANTY; without even the implied warranty +// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with the Coriolis Project; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +// USA +// +// License-Tag +// Authors-Tag +// =================================================================== +// +// $Id$ +// +// x-----------------------------------------------------------------x +// | | +// | H U R R I C A N E | +// | V L S I B a c k e n d D a t a - B a s e | +// | | +// | Author : Jean-Paul CHAPUT | +// | E-mail : Jean-Paul.Chaput@asim.lip6.fr | +// | =============================================================== | +// | C++ Module : "./HSelectionModel.cpp" | +// | *************************************************************** | +// | U p d a t e s | +// | | +// x-----------------------------------------------------------------x + + +#include + +#include "hurricane/Path.h" +#include "hurricane/Entity.h" +#include "hurricane/Occurrence.h" +#include "hurricane/viewer/Graphics.h" +#include "hurricane/viewer/Selector.h" +#include "hurricane/viewer/HSelectionModel.h" + + +namespace Hurricane { + + + HSelectionModel::HSelectionModel ( QObject* parent ) + : QAbstractTableModel(parent) + , _selection() + { } + + + HSelectionModel::~HSelectionModel () + { } + + + void HSelectionModel::setSelection ( const set& selection ) + { + _selection.clear (); + + set::const_iterator iselector = selection.begin(); + for ( ; iselector != selection.end() ; iselector++ ) + _selection.push_back ( (*iselector)->getOccurrence() ); + + emit layoutChanged (); + } + + + void HSelectionModel::addToSelection ( Selector* selector ) + { + _selection.push_back ( selector->getOccurrence() ); + + emit layoutChanged (); + } + + + QVariant HSelectionModel::data ( const QModelIndex& index, int role ) const + { + static QFont occurrenceFont = Graphics::getFixedFont ( QFont::Normal ); + static QFont entityFont = Graphics::getFixedFont ( QFont::Bold, false ); + + if ( !index.isValid() ) return QVariant (); + + if ( role == Qt::SizeHintRole ) { + switch (index.column()) { + case 0: return 200; + default: return -1; + } + } + + if ( role == Qt::FontRole ) { + switch (index.column()) { + case 0: return occurrenceFont; + default: return entityFont; + } + } + + if ( role == Qt::DisplayRole ) { + int row = index.row (); + if ( row < (int)_selection.size() ) { + switch ( index.column() ) { + case 0: return getString(_selection[row].getPath()).c_str(); + case 1: return getString(_selection[row].getEntity()).c_str(); + } + } + } + return QVariant(); + } + + + QVariant HSelectionModel::headerData ( int section + , Qt::Orientation orientation + , int role ) const + { + if ( ( orientation == Qt::Vertical ) || (role != Qt::DisplayRole) ) + return QVariant(); + + switch ( section ) { + case 0: return "Path"; + case 1: return "Entity"; + } + + return QVariant(); + } + + + int HSelectionModel::rowCount ( const QModelIndex& parent ) const + { + return _selection.size(); + } + + + int HSelectionModel::columnCount ( const QModelIndex& parent ) const + { + return 2; + } + + + const Occurrence HSelectionModel::getOccurrence ( int row ) + { + if ( row >= (int)_selection.size() ) return Occurrence(); + + return _selection[row]; + } + + +} // End of Hurricane namespace. diff --git a/hurricane/src/hviewer/MoveCommand.cpp b/hurricane/src/hviewer/MoveCommand.cpp new file mode 100644 index 00000000..8c1f8379 --- /dev/null +++ b/hurricane/src/hviewer/MoveCommand.cpp @@ -0,0 +1,135 @@ + +// -*- C++ -*- +// +// This file is part of the Coriolis Project. +// Copyright (C) Laboratoire LIP6 - Departement ASIM +// Universite Pierre et Marie Curie +// +// Main contributors : +// Christophe Alexandre +// Sophie Belloeil +// Hugo Clément +// Jean-Paul Chaput +// Damien Dupuis +// Christian Masson +// Marek Sroka +// +// The Coriolis Project is free software; you can redistribute it +// and/or modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// The Coriolis Project is distributed in the hope that it will be +// useful, but WITHOUT ANY WARRANTY; without even the implied warranty +// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with the Coriolis Project; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +// USA +// +// License-Tag +// Authors-Tag +// =================================================================== +// +// $Id$ +// +// x-----------------------------------------------------------------x +// | | +// | H U R R I C A N E | +// | V L S I B a c k e n d D a t a - B a s e | +// | | +// | Author : Jean-Paul CHAPUT | +// | E-mail : Jean-Paul.Chaput@asim.lip6.fr | +// | =============================================================== | +// | C++ Module : "./MoveCommand.cpp" | +// | *************************************************************** | +// | U p d a t e s | +// | | +// x-----------------------------------------------------------------x + + +# include +# include + +# include +# include + + +namespace Hurricane { + + +// ------------------------------------------------------------------- +// Class : "MoveCommand". + + + MoveCommand::MoveCommand () + : Command() + , _active(false) + , _lastPosition() + { } + + + MoveCommand::~MoveCommand () + { } + + + bool MoveCommand::keyPressEvent ( CellWidget* widget, QKeyEvent* event ) + { + switch ( event->key() ) { + case Qt::Key_Up: widget->goUp (); return true; + case Qt::Key_Down: widget->goDown (); return true; + case Qt::Key_Left: widget->goLeft (); return true; + case Qt::Key_Right: widget->goRight (); return true; + } + return false; + } + + + bool MoveCommand::mouseMoveEvent ( CellWidget* widget, QMouseEvent* event ) + { + if ( !_active ) return false; + + int dx = event->x() - _lastPosition.x(); + dx <<= 1; + if ( dx > 0 ) widget->goLeft ( dx ); + if ( dx < 0 ) widget->goRight ( -dx ); + + int dy = event->y() - _lastPosition.y(); + dy <<= 1; + if ( dy > 0 ) widget->goUp ( dy ); + if ( dy < 0 ) widget->goDown ( -dy ); + + _lastPosition = event->pos(); + + return true; + } + + + bool MoveCommand::mousePressEvent ( CellWidget* widget, QMouseEvent* event ) + { + if ( _active ) return true; + + if ( ( event->button() == Qt::LeftButton ) && !event->modifiers() ) { + _active = true; + _lastPosition = event->pos(); + widget->pushCursor ( Qt::ClosedHandCursor ); + } + + return _active; + } + + + bool MoveCommand::mouseReleaseEvent ( CellWidget* widget, QMouseEvent* event ) + { + if ( !_active ) return false; + + _active = false; + widget->popCursor (); + + return false; + } + + +} // End of Hurricane namespace. diff --git a/hurricane/src/hviewer/SelectCommand.cpp b/hurricane/src/hviewer/SelectCommand.cpp new file mode 100644 index 00000000..7bf2318b --- /dev/null +++ b/hurricane/src/hviewer/SelectCommand.cpp @@ -0,0 +1,117 @@ + +// -*- C++ -*- +// +// This file is part of the Coriolis Project. +// Copyright (C) Laboratoire LIP6 - Departement ASIM +// Universite Pierre et Marie Curie +// +// Main contributors : +// Christophe Alexandre +// Sophie Belloeil +// Hugo Clément +// Jean-Paul Chaput +// Damien Dupuis +// Christian Masson +// Marek Sroka +// +// The Coriolis Project is free software; you can redistribute it +// and/or modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// The Coriolis Project is distributed in the hope that it will be +// useful, but WITHOUT ANY WARRANTY; without even the implied warranty +// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with the Coriolis Project; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +// USA +// +// License-Tag +// Authors-Tag +// =================================================================== +// +// $Id$ +// +// x-----------------------------------------------------------------x +// | | +// | H U R R I C A N E | +// | V L S I B a c k e n d D a t a - B a s e | +// | | +// | Author : Jean-Paul CHAPUT | +// | E-mail : Jean-Paul.Chaput@asim.lip6.fr | +// | =============================================================== | +// | C++ Module : "./SelectCommand.cpp" | +// | *************************************************************** | +// | U p d a t e s | +// | | +// x-----------------------------------------------------------------x + + +# include +# include + +# include "hurricane/Cell.h" + +# include "hurricane/viewer/CellWidget.h" +# include "hurricane/viewer/SelectCommand.h" + + +namespace Hurricane { + + +// ------------------------------------------------------------------- +// Class : "SelectCommand". + + + SelectCommand::SelectCommand () + : AreaCommand() + { } + + + SelectCommand::~SelectCommand () + { } + + + bool SelectCommand::mousePressEvent ( CellWidget* widget, QMouseEvent* event ) + { + if ( isActive() ) return true; + + if ( (event->button() == Qt::RightButton) && !event->modifiers() ) { + setActive ( true ); + setStartPoint ( event->pos() ); + } + + return isActive(); + } + + + bool SelectCommand::mouseReleaseEvent ( CellWidget* widget, QMouseEvent* event ) + { + if ( !isActive() ) return false; + + setActive ( false ); + + QRect selectArea; + if ( _startPoint == _stopPoint ) + selectArea = QRect ( _startPoint - QPoint(2,2), QSize(4,4) ); + else + selectArea = QRect ( _startPoint, _stopPoint ); + + widget->unselectAll (); + forEach ( Occurrence, ioccurrence + , widget->getCell()->getOccurrencesUnder(widget->screenToDbuBox(selectArea)) ) { + widget->select ( *ioccurrence ); + } + widget->setShowSelection ( true ); + widget->redraw (); + + emit selectionChanged(widget->getSelectorSet(),widget->getCell()); + + return false; + } + + +} // End of Hurricane namespace. diff --git a/hurricane/src/hviewer/ZoomCommand.cpp b/hurricane/src/hviewer/ZoomCommand.cpp new file mode 100644 index 00000000..f20e5bb8 --- /dev/null +++ b/hurricane/src/hviewer/ZoomCommand.cpp @@ -0,0 +1,111 @@ + +// -*- C++ -*- +// +// This file is part of the Coriolis Project. +// Copyright (C) Laboratoire LIP6 - Departement ASIM +// Universite Pierre et Marie Curie +// +// Main contributors : +// Christophe Alexandre +// Sophie Belloeil +// Hugo Clément +// Jean-Paul Chaput +// Damien Dupuis +// Christian Masson +// Marek Sroka +// +// The Coriolis Project is free software; you can redistribute it +// and/or modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// The Coriolis Project is distributed in the hope that it will be +// useful, but WITHOUT ANY WARRANTY; without even the implied warranty +// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with the Coriolis Project; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +// USA +// +// License-Tag +// Authors-Tag +// =================================================================== +// +// $Id$ +// +// x-----------------------------------------------------------------x +// | | +// | H U R R I C A N E | +// | V L S I B a c k e n d D a t a - B a s e | +// | | +// | Author : Jean-Paul CHAPUT | +// | E-mail : Jean-Paul.Chaput@asim.lip6.fr | +// | =============================================================== | +// | C++ Module : "./ZoomCommand.cpp" | +// | *************************************************************** | +// | U p d a t e s | +// | | +// x-----------------------------------------------------------------x + + +# include +# include + +# include +# include + + +namespace Hurricane { + + +// ------------------------------------------------------------------- +// Class : "ZoomCommand". + + + ZoomCommand::ZoomCommand () + : AreaCommand() + { } + + + ZoomCommand::~ZoomCommand () + { } + + + bool ZoomCommand::keyPressEvent ( CellWidget* widget, QKeyEvent* event ) + { + switch ( event->key() ) { + case Qt::Key_Z: widget->setScale ( widget->getScale()*2.0 ); return true; + case Qt::Key_M: widget->setScale ( widget->getScale()/2.0 ); return true; + } + return false; + } + + + bool ZoomCommand::mousePressEvent ( CellWidget* widget, QMouseEvent* event ) + { + if ( isActive() ) return true; + + if ( (event->button() == Qt::LeftButton) && (event->modifiers() & Qt::ControlModifier) ) { + setActive ( true ); + setStartPoint ( event->pos() ); + } + + return isActive(); + } + + + bool ZoomCommand::mouseReleaseEvent ( CellWidget* widget, QMouseEvent* event ) + { + if ( !isActive() ) return false; + + setActive ( false ); + + widget->reframe ( widget->screenToDbuBox(QRect(_startPoint,_stopPoint)) ); + + return false; + } + + +} // End of Hurricane namespace. diff --git a/hurricane/src/hviewer/hurricane/viewer/AreaCommand.h b/hurricane/src/hviewer/hurricane/viewer/AreaCommand.h new file mode 100644 index 00000000..6e1f6792 --- /dev/null +++ b/hurricane/src/hviewer/hurricane/viewer/AreaCommand.h @@ -0,0 +1,94 @@ + +// -*- C++ -*- +// +// This file is part of the Coriolis Project. +// Copyright (C) Laboratoire LIP6 - Departement ASIM +// Universite Pierre et Marie Curie +// +// Main contributors : +// Christophe Alexandre +// Sophie Belloeil +// Hugo Clément +// Jean-Paul Chaput +// Damien Dupuis +// Christian Masson +// Marek Sroka +// +// The Coriolis Project is free software; you can redistribute it +// and/or modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// The Coriolis Project is distributed in the hope that it will be +// useful, but WITHOUT ANY WARRANTY; without even the implied warranty +// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with the Coriolis Project; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +// USA +// +// License-Tag +// Authors-Tag +// =================================================================== +// +// $Id$ +// +// x-----------------------------------------------------------------x +// | | +// | H U R R I C A N E | +// | V L S I B a c k e n d D a t a - B a s e | +// | | +// | Author : Jean-Paul CHAPUT | +// | E-mail : Jean-Paul.Chaput@asim.lip6.fr | +// | =============================================================== | +// | C++ Header : "./AreaCommand.h" | +// | *************************************************************** | +// | U p d a t e s | +// | | +// x-----------------------------------------------------------------x + + +#ifndef __HURRICANE_AREA_COMMAND_H__ +#define __HURRICANE_AREA_COMMAND_H__ + +#include + +#include "hurricane/viewer/Command.h" + + +namespace Hurricane { + + + class AreaCommand : public Command { + public: + AreaCommand (); + virtual ~AreaCommand (); + inline void setStartPoint ( const QPoint& start ); + inline void setStopPoint ( const QPoint& stop ); + virtual void draw ( CellWidget* widget ); + virtual void drawCorner ( CellWidget* widget, bool bottomLeft ); + virtual bool mouseMoveEvent ( CellWidget* widget, QMouseEvent* event ); + protected: + QPoint _startPoint; + QPoint _stopPoint; + QPoint _cornerPoints[3]; + private: + AreaCommand ( const AreaCommand& ); + AreaCommand& operator= ( const AreaCommand& ); + }; + + + inline void AreaCommand::setStartPoint ( const QPoint& start ) + { _startPoint = start; _stopPoint = start; } + + + inline void AreaCommand::setStopPoint ( const QPoint& stop ) + { _stopPoint = stop; } + + +} + + +#endif diff --git a/hurricane/src/hviewer/hurricane/viewer/CellViewer.h b/hurricane/src/hviewer/hurricane/viewer/CellViewer.h index cdd01945..233b6b61 100644 --- a/hurricane/src/hviewer/hurricane/viewer/CellViewer.h +++ b/hurricane/src/hviewer/hurricane/viewer/CellViewer.h @@ -69,6 +69,10 @@ class QMenu; #include "hurricane/Name.h" #include "hurricane/Occurrence.h" +#include "hurricane/viewer/MoveCommand.h" +#include "hurricane/viewer/ZoomCommand.h" +#include "hurricane/viewer/SelectCommand.h" + namespace Hurricane { @@ -80,29 +84,34 @@ namespace Hurricane { //class MapView; class CellWidget; class HMousePosition; + class HNetlist; + class HSelection; class CellViewer : public QMainWindow { Q_OBJECT; public: - CellViewer ( QWidget* parent=NULL ); - inline void setApplicationName ( const QString& name ); - void setCell ( Cell* cell ); - Cell* getCell (); - virtual Cell* getCellFromDb ( const char* name ); - inline CellWidget* getCellWidget (); - void select ( Occurrence& occurence ); - void unselect ( Occurrence& occurence ); - void unselectAll (); + CellViewer ( QWidget* parent=NULL ); + inline void setApplicationName ( const QString& name ); + void setCell ( Cell* cell ); + Cell* getCell (); + virtual Cell* getCellFromDb ( const char* name ); + inline CellWidget* getCellWidget (); + void select ( Occurrence& occurence ); + void unselect ( Occurrence& occurence ); + void unselectAll (); public slots: - void setShowPalette ( bool show ); - void showGraphicsSettings (); - void showDisplayFilter (); - void openHistoryCell (); - void runInspectorOnDataBase (); - void runInspectorOnCell (); - void browseNetlist (); + void setShowPalette ( bool show ); + void showGraphicsSettings (); + void showDisplayFilter (); + void openHistoryCell (); + void runInspectorOnDataBase (); + void runInspectorOnCell (); + void browseSelection (); + void browseNetlist (); + void selectionBrowserDestroyed (); + void netlistBrowserDestroyed (); public: enum { CellHistorySize = 10 }; @@ -122,6 +131,7 @@ namespace Hurricane { QAction* _displayFilterAction; QAction* _runInspectorOnDataBase; QAction* _runInspectorOnCell; + QAction* _browseSelection; QAction* _browseNetlist; QMenu* _fileMenu; QMenu* _viewMenu; @@ -132,14 +142,19 @@ namespace Hurricane { HGraphics* _graphicsSettings; HDisplayFilter* _displayFilter; CellWidget* _cellWidget; + MoveCommand _moveCommand; + ZoomCommand _zoomCommand; + SelectCommand _selectCommand; list _cellHistory; + HSelection* _selectionBrowser; + HNetlist* _netlistBrowser; protected: - void createActions (); - void createMenus (); - void createLayout (); - void refreshHistory (); - void runInspector ( Record* record ); + void createActions (); + void createMenus (); + void createLayout (); + void refreshHistory (); + void runInspector ( Record* record ); }; diff --git a/hurricane/src/hviewer/hurricane/viewer/CellWidget.h b/hurricane/src/hviewer/hurricane/viewer/CellWidget.h index 76405106..1c46d92a 100644 --- a/hurricane/src/hviewer/hurricane/viewer/CellWidget.h +++ b/hurricane/src/hviewer/hurricane/viewer/CellWidget.h @@ -99,6 +99,7 @@ namespace Hurricane { class Selector; class HPaletteEntry; class HPalette; + class Command; //class MapView; @@ -119,21 +120,26 @@ namespace Hurricane { inline HPalette* getPalette (); void bindToPalette ( HPalette* palette ); void detachFromPalette (); + void bindCommand ( Command* command ); + void unbindCommand ( Command* command ); inline bool showBoundaries () const; inline set& getSelectorSet (); inline bool showSelection () const; void select ( const Net* net, bool delayRedraw=false ); - void select ( Occurrence& occurence ); - void unselect ( Occurrence& occurence ); + void select ( Occurrence occurence ); + void unselect ( Occurrence occurence ); void unselectAll ( bool delayRedraw=true ); inline void setStartLevel ( int level ); inline void setStopLevel ( int level ); // Painter control & Hurricane objects drawing primitives. + inline float getScale () const; bool isDrawable ( const Name& entryName ); void drawBox ( const Box& ); void drawLine ( const Point&, const Point& ); void drawGrid (); void drawSpot (); + void drawScreenRect ( const QPoint&, const QPoint& ); + void drawScreenPolyline ( const QPoint*, int, int ); // Geometric conversions. QRect dbuToDisplayRect ( DbU::Unit x1, DbU::Unit y1, DbU::Unit x2, DbU::Unit y2 ) const; QRect dbuToDisplayRect ( const Box& box ) const; @@ -153,6 +159,7 @@ namespace Hurricane { inline DbU::Unit screenToDbuX ( int x ) const; inline DbU::Unit screenToDbuY ( int y ) const; inline Point screenToDbuPoint ( const QPoint& point ) const; + inline Box screenToDbuBox ( const QRect& rect ) const; // Qt QWidget Functions Overloads. void pushCursor ( Qt::CursorShape cursor ); void popCursor (); @@ -191,14 +198,16 @@ namespace Hurricane { private: class Spot { public: - Spot ( CellWidget* cw ); - void setRestore ( bool restore ); - void restore (); - void moveTo ( const QPoint& point ); + Spot ( CellWidget* cw ); + void setRestore ( bool restore ); + inline void setShowSpot ( bool show ); + void restore (); + void moveTo ( const QPoint& point ); private: - CellWidget* _cellWidget; - QPoint _spotPoint; - bool _restore; + CellWidget* _cellWidget; + QPoint _spotPoint; + bool _restore; + bool _showSpot; }; private: @@ -282,18 +291,20 @@ namespace Hurricane { QPoint _offsetVA; DrawingPlanes _drawingPlanes; DrawingQuery _drawingQuery; - QPoint _lastMousePosition; + QPoint _mousePosition; Spot _spot; Cell* _cell; - bool _mouseGo; bool _showBoundaries; bool _showSelection; bool _selectionHasChanged; set _selectors; + vector _commands; size_t _redrawRectCount; }; + inline void CellWidget::Spot::setShowSpot ( bool show ) + { _showSpot = show; } inline void CellWidget::DrawingQuery::setQuery ( const Box& area @@ -467,6 +478,16 @@ namespace Hurricane { { return Point ( screenToDbuX(point.x()), screenToDbuY(point.y()) ); } + inline Box CellWidget::screenToDbuBox ( const QRect& rect ) const + { + return Box ( screenToDbuX(rect.x()) + , screenToDbuY(rect.y()) + , screenToDbuX(rect.x()+rect.width ()) + , screenToDbuY(rect.y()+rect.height()) + ); + } + + inline Cell* CellWidget::getCell () const { return _cell; } @@ -483,6 +504,10 @@ namespace Hurricane { { return _showSelection; } + inline float CellWidget::getScale () const + { return _scale; } + + } // End of Hurricane namespace. diff --git a/hurricane/src/hviewer/hurricane/viewer/Command.h b/hurricane/src/hviewer/hurricane/viewer/Command.h new file mode 100644 index 00000000..604aabe7 --- /dev/null +++ b/hurricane/src/hviewer/hurricane/viewer/Command.h @@ -0,0 +1,104 @@ + +// -*- C++ -*- +// +// This file is part of the Coriolis Project. +// Copyright (C) Laboratoire LIP6 - Departement ASIM +// Universite Pierre et Marie Curie +// +// Main contributors : +// Christophe Alexandre +// Sophie Belloeil +// Hugo Clément +// Jean-Paul Chaput +// Damien Dupuis +// Christian Masson +// Marek Sroka +// +// The Coriolis Project is free software; you can redistribute it +// and/or modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// The Coriolis Project is distributed in the hope that it will be +// useful, but WITHOUT ANY WARRANTY; without even the implied warranty +// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with the Coriolis Project; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +// USA +// +// License-Tag +// Authors-Tag +// =================================================================== +// +// $Id$ +// +// x-----------------------------------------------------------------x +// | | +// | H U R R I C A N E | +// | V L S I B a c k e n d D a t a - B a s e | +// | | +// | Author : Jean-Paul CHAPUT | +// | E-mail : Jean-Paul.Chaput@asim.lip6.fr | +// | =============================================================== | +// | C++ Header : "./Command.h" | +// | *************************************************************** | +// | U p d a t e s | +// | | +// x-----------------------------------------------------------------x + + +#ifndef __HURRICANE_COMMAND_H__ +#define __HURRICANE_COMMAND_H__ + + +#include + +using namespace std; + + +class QKeyEvent; +class QMouseEvent; + + +namespace Hurricane { + + + class CellWidget; + + + class Command { + public: + Command (); + virtual ~Command (); + inline bool isActive (); + inline void setActive ( bool state ); + virtual bool keyPressEvent ( CellWidget*, QKeyEvent* ); + virtual bool mouseMoveEvent ( CellWidget*, QMouseEvent* ); + virtual bool mousePressEvent ( CellWidget*, QMouseEvent* ); + virtual bool mouseReleaseEvent ( CellWidget*, QMouseEvent* ); + virtual void draw ( CellWidget* ); + inline set& getCellWidgets (); + protected: + set _cellWidgets; + bool _active; + private: + Command ( const Command& ); + Command& operator= ( const Command& ); + }; + + +// Inline Functions. + inline set& Command::getCellWidgets () { return _cellWidgets; } + inline bool Command::isActive () { return _active; } + inline void Command::setActive ( bool state ) { _active = state; } + + +} + + + +#endif + diff --git a/hurricane/src/hviewer/hurricane/viewer/HNetlist.h b/hurricane/src/hviewer/hurricane/viewer/HNetlist.h index 110105df..04095d9f 100644 --- a/hurricane/src/hviewer/hurricane/viewer/HNetlist.h +++ b/hurricane/src/hviewer/hurricane/viewer/HNetlist.h @@ -116,6 +116,7 @@ namespace Hurricane { for ( rows-- ; rows >= 0 ; rows-- ) _netlistView->setRowHeight ( rows, _rowHeight ); _netlistView->selectRow ( 0 ); + _netlistView->resizeColumnToContents ( 0 ); } diff --git a/hurricane/src/hviewer/hurricane/viewer/HSelection.h b/hurricane/src/hviewer/hurricane/viewer/HSelection.h new file mode 100644 index 00000000..7d76cf96 --- /dev/null +++ b/hurricane/src/hviewer/hurricane/viewer/HSelection.h @@ -0,0 +1,105 @@ + +// -*- C++ -*- +// +// This file is part of the Coriolis Project. +// Copyright (C) Laboratoire LIP6 - Departement ASIM +// Universite Pierre et Marie Curie +// +// Main contributors : +// Christophe Alexandre +// Sophie Belloeil +// Hugo Clément +// Jean-Paul Chaput +// Damien Dupuis +// Christian Masson +// Marek Sroka +// +// The Coriolis Project is free software; you can redistribute it +// and/or modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// The Coriolis Project is distributed in the hope that it will be +// useful, but WITHOUT ANY WARRANTY; without even the implied warranty +// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with the Coriolis Project; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +// USA +// +// License-Tag +// Authors-Tag +// =================================================================== +// +// $Id$ +// +// x-----------------------------------------------------------------x +// | | +// | H U R R I C A N E | +// | V L S I B a c k e n d D a t a - B a s e | +// | | +// | Author : Jean-Paul CHAPUT | +// | E-mail : Jean-Paul.Chaput@asim.lip6.fr | +// | =============================================================== | +// | C++ Header : "./HSelection.h" | +// | *************************************************************** | +// | U p d a t e s | +// | | +// x-----------------------------------------------------------------x + + +#ifndef __HURRICANE_SELECTION_WIDGET_H__ +#define __HURRICANE_SELECTION_WIDGET_H__ + + +#include +#include +#include + +#include "hurricane/Commons.h" +#include "hurricane/viewer/HSelectionModel.h" + + +class QSortFilterProxyModel; +class QModelIndex; +class QTableView; +class QLineEdit; +class QComboBox; +class QHeaderView; + + +namespace Hurricane { + + + class Selector; + + + class HSelection : public QWidget { + Q_OBJECT; + + public: + HSelection ( QWidget* parent=NULL ); + void runInspector ( const QModelIndex& index ); + public slots: + void setSelection ( const set& selection, Cell* cell=NULL ); + void addToSelection ( Selector* selector ); + private slots: + void textFilterChanged (); + protected: + void keyPressEvent ( QKeyEvent * event ); + + private: + HSelectionModel* _selectionModel; + QSortFilterProxyModel* _sortModel; + QTableView* _selectionView; + QLineEdit* _filterPatternLineEdit; + int _rowHeight; + }; + + +} // End of Hurricane namespace. + + +#endif // __HURRICANE_SELECTION_WIDGET_H__ diff --git a/hurricane/src/hviewer/hurricane/viewer/HSelectionModel.h b/hurricane/src/hviewer/hurricane/viewer/HSelectionModel.h new file mode 100644 index 00000000..5b5d7aeb --- /dev/null +++ b/hurricane/src/hviewer/hurricane/viewer/HSelectionModel.h @@ -0,0 +1,96 @@ + +// -*- C++ -*- +// +// This file is part of the Coriolis Project. +// Copyright (C) Laboratoire LIP6 - Departement ASIM +// Universite Pierre et Marie Curie +// +// Main contributors : +// Christophe Alexandre +// Sophie Belloeil +// Hugo Clément +// Jean-Paul Chaput +// Damien Dupuis +// Christian Masson +// Marek Sroka +// +// The Coriolis Project is free software; you can redistribute it +// and/or modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// The Coriolis Project is distributed in the hope that it will be +// useful, but WITHOUT ANY WARRANTY; without even the implied warranty +// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with the Coriolis Project; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +// USA +// +// License-Tag +// Authors-Tag +// =================================================================== +// +// $Id$ +// +// x-----------------------------------------------------------------x +// | | +// | H U R R I C A N E | +// | V L S I B a c k e n d D a t a - B a s e | +// | | +// | Author : Jean-Paul CHAPUT | +// | E-mail : Jean-Paul.Chaput@asim.lip6.fr | +// | =============================================================== | +// | C++ Header : "./HSelectionModel.h" | +// | *************************************************************** | +// | U p d a t e s | +// | | +// x-----------------------------------------------------------------x + + +#ifndef __HURRICANE_SELECTION_MODEL_H__ +#define __HURRICANE_SELECTION_MODEL_H__ + +#include +#include + +#include +#include +#include + +#include "hurricane/Commons.h" +#include "hurricane/Occurrence.h" +#include "hurricane/viewer/Graphics.h" + + +namespace Hurricane { + + + class Selector; + + + class HSelectionModel : public QAbstractTableModel { + Q_OBJECT; + + public: + HSelectionModel ( QObject* parent=NULL ); + ~HSelectionModel (); + void setSelection ( const set& selection ); + void addToSelection ( Selector* selector ); + int rowCount ( const QModelIndex& parent=QModelIndex() ) const; + int columnCount ( const QModelIndex& parent=QModelIndex() ) const; + QVariant data ( const QModelIndex& index, int role=Qt::DisplayRole ) const; + QVariant headerData ( int section, Qt::Orientation orientation, int role=Qt::DisplayRole ) const; + const Occurrence getOccurrence ( int row ); + + private: + vector _selection; + }; + + +} // End of Hurricane namespace. + + +#endif // __HURRICANE_SELECTION_MODEL_H__ diff --git a/hurricane/src/hviewer/hurricane/viewer/MoveCommand.h b/hurricane/src/hviewer/hurricane/viewer/MoveCommand.h new file mode 100644 index 00000000..386df873 --- /dev/null +++ b/hurricane/src/hviewer/hurricane/viewer/MoveCommand.h @@ -0,0 +1,84 @@ + +// -*- C++ -*- +// +// This file is part of the Coriolis Project. +// Copyright (C) Laboratoire LIP6 - Departement ASIM +// Universite Pierre et Marie Curie +// +// Main contributors : +// Christophe Alexandre +// Sophie Belloeil +// Hugo Clément +// Jean-Paul Chaput +// Damien Dupuis +// Christian Masson +// Marek Sroka +// +// The Coriolis Project is free software; you can redistribute it +// and/or modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// The Coriolis Project is distributed in the hope that it will be +// useful, but WITHOUT ANY WARRANTY; without even the implied warranty +// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with the Coriolis Project; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +// USA +// +// License-Tag +// Authors-Tag +// =================================================================== +// +// $Id$ +// +// x-----------------------------------------------------------------x +// | | +// | H U R R I C A N E | +// | V L S I B a c k e n d D a t a - B a s e | +// | | +// | Author : Jean-Paul CHAPUT | +// | E-mail : Jean-Paul.Chaput@asim.lip6.fr | +// | =============================================================== | +// | C++ Header : "./MoveCommand.h" | +// | *************************************************************** | +// | U p d a t e s | +// | | +// x-----------------------------------------------------------------x + + +#ifndef __HURRICANE_MOVE_COMMAND_H__ +#define __HURRICANE_MOVE_COMMAND_H__ + +#include + +#include "hurricane/viewer/Command.h" + + +namespace Hurricane { + + + class MoveCommand : public Command { + public: + MoveCommand (); + virtual ~MoveCommand (); + virtual bool keyPressEvent ( CellWidget*, QKeyEvent* ); + virtual bool mouseMoveEvent ( CellWidget*, QMouseEvent* ); + virtual bool mousePressEvent ( CellWidget*, QMouseEvent* ); + virtual bool mouseReleaseEvent ( CellWidget*, QMouseEvent* ); + protected: + bool _active; + QPoint _lastPosition; + private: + MoveCommand ( const MoveCommand& ); + MoveCommand& operator= ( const MoveCommand& ); + }; + + +} + + +#endif diff --git a/hurricane/src/hviewer/hurricane/viewer/SelectCommand.h b/hurricane/src/hviewer/hurricane/viewer/SelectCommand.h new file mode 100644 index 00000000..cc0a871e --- /dev/null +++ b/hurricane/src/hviewer/hurricane/viewer/SelectCommand.h @@ -0,0 +1,93 @@ + +// -*- C++ -*- +// +// This file is part of the Coriolis Project. +// Copyright (C) Laboratoire LIP6 - Departement ASIM +// Universite Pierre et Marie Curie +// +// Main contributors : +// Christophe Alexandre +// Sophie Belloeil +// Hugo Clément +// Jean-Paul Chaput +// Damien Dupuis +// Christian Masson +// Marek Sroka +// +// The Coriolis Project is free software; you can redistribute it +// and/or modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// The Coriolis Project is distributed in the hope that it will be +// useful, but WITHOUT ANY WARRANTY; without even the implied warranty +// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with the Coriolis Project; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +// USA +// +// License-Tag +// Authors-Tag +// =================================================================== +// +// $Id$ +// +// x-----------------------------------------------------------------x +// | | +// | H U R R I C A N E | +// | V L S I B a c k e n d D a t a - B a s e | +// | | +// | Author : Jean-Paul CHAPUT | +// | E-mail : Jean-Paul.Chaput@asim.lip6.fr | +// | =============================================================== | +// | C++ Header : "./SelectCommand.h" | +// | *************************************************************** | +// | U p d a t e s | +// | | +// x-----------------------------------------------------------------x + + +#ifndef __HURRICANE_SELECT_COMMAND_H__ +#define __HURRICANE_SELECT_COMMAND_H__ + +#include +#include + +#include + +#include "hurricane/viewer/AreaCommand.h" + + +using namespace std; + + +namespace Hurricane { + + + class Cell; + class Selector; + + + class SelectCommand : public QObject, public AreaCommand { + Q_OBJECT; + + public: + SelectCommand (); + virtual ~SelectCommand (); + virtual bool mousePressEvent ( CellWidget*, QMouseEvent* ); + virtual bool mouseReleaseEvent ( CellWidget*, QMouseEvent* ); + signals: + void selectionChanged ( const set&, Cell* ); + private: + SelectCommand ( const SelectCommand& ); + SelectCommand& operator= ( const SelectCommand& ); + }; + + +} + + +#endif diff --git a/hurricane/src/hviewer/hurricane/viewer/ZoomCommand.h b/hurricane/src/hviewer/hurricane/viewer/ZoomCommand.h new file mode 100644 index 00000000..c90f3351 --- /dev/null +++ b/hurricane/src/hviewer/hurricane/viewer/ZoomCommand.h @@ -0,0 +1,80 @@ + +// -*- C++ -*- +// +// This file is part of the Coriolis Project. +// Copyright (C) Laboratoire LIP6 - Departement ASIM +// Universite Pierre et Marie Curie +// +// Main contributors : +// Christophe Alexandre +// Sophie Belloeil +// Hugo Clément +// Jean-Paul Chaput +// Damien Dupuis +// Christian Masson +// Marek Sroka +// +// The Coriolis Project is free software; you can redistribute it +// and/or modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 of +// the License, or (at your option) any later version. +// +// The Coriolis Project is distributed in the hope that it will be +// useful, but WITHOUT ANY WARRANTY; without even the implied warranty +// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with the Coriolis Project; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +// USA +// +// License-Tag +// Authors-Tag +// =================================================================== +// +// $Id$ +// +// x-----------------------------------------------------------------x +// | | +// | H U R R I C A N E | +// | V L S I B a c k e n d D a t a - B a s e | +// | | +// | Author : Jean-Paul CHAPUT | +// | E-mail : Jean-Paul.Chaput@asim.lip6.fr | +// | =============================================================== | +// | C++ Header : "./ZoomCommand.h" | +// | *************************************************************** | +// | U p d a t e s | +// | | +// x-----------------------------------------------------------------x + + +#ifndef __HURRICANE_ZOOM_COMMAND_H__ +#define __HURRICANE_ZOOM_COMMAND_H__ + +#include + +#include "hurricane/viewer/AreaCommand.h" + + +namespace Hurricane { + + + class ZoomCommand : public AreaCommand { + public: + ZoomCommand (); + virtual ~ZoomCommand (); + virtual bool keyPressEvent ( CellWidget*, QKeyEvent* ); + virtual bool mousePressEvent ( CellWidget*, QMouseEvent* ); + virtual bool mouseReleaseEvent ( CellWidget*, QMouseEvent* ); + private: + ZoomCommand ( const ZoomCommand& ); + ZoomCommand& operator= ( const ZoomCommand& ); + }; + + +} + + +#endif