From fee6e4c59374a344caa77120012e4c4e4a4745e6 Mon Sep 17 00:00:00 2001 From: Jean-Paul Chaput Date: Wed, 14 Oct 2009 08:20:08 +0000 Subject: [PATCH] * ./hurricane/src/hurricane : - New: In DbU, create a "onCustomGrid(point,step,round)" method to place a point on an arbitrary grid. That different from the real or symbolic ones. - Bug: In DbU, all the snap function where bugged when passed negatives coordinates. - New: In DbU, new conversion function, DbU::getPhysical() to translate into physical (metric) system. - New: In CellWidget, separate the "Snap Grid" (real or symbolic) from the cursor position. The cursor position will now be displayed in half-lambda (symbolic mode) or founder grid unit (real mode). That can be changed trough the CellWidget::setCursorStep(DbU::Unit) method. - New: In CellViewer/ControllerWidget, the CTRL+I keys toggle the visibility of the Controller instead of systematically showing it. --- hurricane/src/hurricane/DbU.cpp | 33 ++++++- hurricane/src/hurricane/hurricane/DbU.h | 21 +++-- hurricane/src/hviewer/CellViewer.cpp | 86 +++++++++++-------- hurricane/src/hviewer/CellWidget.cpp | 1 + hurricane/src/hviewer/ControllerWidget.cpp | 13 ++- .../src/hviewer/hurricane/viewer/CellViewer.h | 7 +- .../src/hviewer/hurricane/viewer/CellWidget.h | 44 +++++++++- .../hurricane/viewer/ControllerWidget.h | 1 + 8 files changed, 152 insertions(+), 54 deletions(-) diff --git a/hurricane/src/hurricane/DbU.cpp b/hurricane/src/hurricane/DbU.cpp index abe09b33..be603981 100644 --- a/hurricane/src/hurricane/DbU.cpp +++ b/hurricane/src/hurricane/DbU.cpp @@ -38,8 +38,9 @@ // x-----------------------------------------------------------------x -#include #include +#include +#include #include "hurricane/DbU.h" #include "hurricane/Error.h" @@ -58,8 +59,8 @@ namespace Hurricane { unsigned int DbU::_stringMode = DbU::Symbolic; DbU::Unit DbU::_symbolicSnapGridStep = DbU::lambda(1.0); DbU::Unit DbU::_realSnapGridStep = DbU::grid (10.0); - const DbU::Unit DbU::Min = LONG_MIN; - const DbU::Unit DbU::Max = LONG_MAX; + const DbU::Unit DbU::Min = std::numeric_limits::min(); + const DbU::Unit DbU::Max = std::numeric_limits::max(); // ------------------------------------------------------------------- @@ -192,10 +193,14 @@ namespace Hurricane { DbU::Unit modulo = u % _symbolicSnapGridStep; if ( !modulo ) return u; + if ( modulo < 0 ) inferior -= _symbolicSnapGridStep; if ( mode == Inferior ) { return inferior; } else if ( mode == Superior ) { return inferior + _symbolicSnapGridStep; } + if ( modulo < 0 ) + return inferior + ( (modulo > - (_symbolicSnapGridStep/2)) ? _symbolicSnapGridStep : 0 ); + return inferior + ( (modulo > (_symbolicSnapGridStep/2)) ? _symbolicSnapGridStep : 0 ); } @@ -210,14 +215,36 @@ namespace Hurricane { DbU::Unit modulo = u % _realSnapGridStep; if ( !modulo ) return u; + if ( modulo < 0 ) inferior -= _realSnapGridStep; if ( mode == Inferior ) { return inferior; } else if ( mode == Superior ) { return inferior + _realSnapGridStep; } + if ( modulo < 0 ) + return inferior + ( (modulo > - (_realSnapGridStep/2)) ? _realSnapGridStep : 0 ); + return inferior + ( (modulo > (_realSnapGridStep/2)) ? _realSnapGridStep : 0 ); } + DbU::Unit DbU::getOnCustomGrid ( DbU::Unit u, DbU::Unit step, SnapMode mode ) + { + DbU::Unit inferior = ( u / step ) * step; + DbU::Unit modulo = abs ( u % step ); + + if ( !modulo ) return u; + if ( modulo < 0 ) inferior -= step; + + if ( mode == Inferior ) { return inferior; } + else if ( mode == Superior ) { return inferior + step; } + + if ( modulo < 0 ) + return inferior + ( (modulo > - (step/2)) ? step : 0 ); + + return inferior + ( (modulo > (step/2)) ? step : 0 ); + } + + string DbU::getValueString ( DbU::Unit u, int mode ) { char buffer[1024]; diff --git a/hurricane/src/hurricane/hurricane/DbU.h b/hurricane/src/hurricane/hurricane/DbU.h index 32641259..c285193a 100644 --- a/hurricane/src/hurricane/hurricane/DbU.h +++ b/hurricane/src/hurricane/hurricane/DbU.h @@ -97,10 +97,12 @@ namespace Hurricane { static DbU::Unit getSymbolicSnapGridStep (); static DbU::Unit getOnSymbolicSnapGrid ( DbU::Unit u, SnapMode mode=Nearest ); static inline void setSymbolicSnapGridStep ( DbU::Unit step ); + static DbU::Unit getOnCustomGrid ( DbU::Unit u, DbU::Unit step, SnapMode mode=Nearest ); // Conversions. static inline long getDb ( Unit u ); static inline double getGrid ( Unit u ); static inline double getLambda ( Unit u ); + static inline double getPhysical ( Unit u, UnitPower p ); static string getValueString ( Unit u, int mode=SmartTruncate ); static Record* getValueRecord ( const Unit* u ); static Slot* getValueSlot ( const string& name, const Unit* u ); @@ -124,15 +126,16 @@ namespace Hurricane { // Inline Functions. - inline DbU::Unit DbU::db ( long value ) { return value; } - inline DbU::Unit DbU::grid ( double value ) { return (long)rint( value/_resolution ); } - inline DbU::Unit DbU::lambda ( double value ) { return grid(value*_gridsPerLambda); } - inline long DbU::getDb ( DbU::Unit u ) { return u; } - inline double DbU::getGrid ( DbU::Unit u ) { return _resolution*(double)u; } - inline double DbU::getLambda ( DbU::Unit u ) { return getGrid(u)/_gridsPerLambda; } - inline void DbU::setStringMode ( unsigned int mode ) { _stringMode = mode; } - inline void DbU::setRealSnapGridStep ( DbU::Unit step ) { _realSnapGridStep = step; } - inline void DbU::setSymbolicSnapGridStep ( DbU::Unit step ) { _symbolicSnapGridStep = step; } + inline DbU::Unit DbU::db ( long value ) { return value; } + inline DbU::Unit DbU::grid ( double value ) { return (long)rint( value/_resolution ); } + inline DbU::Unit DbU::lambda ( double value ) { return grid(value*_gridsPerLambda); } + inline long DbU::getDb ( DbU::Unit u ) { return u; } + inline double DbU::getGrid ( DbU::Unit u ) { return _physicalsPerGrid*_resolution*(double)u; } + inline double DbU::getLambda ( DbU::Unit u ) { return getGrid(u)/_gridsPerLambda; } + inline double DbU::getPhysical ( DbU::Unit u, UnitPower p ) { return (_physicalsPerGrid*_resolution*(double)u)/getUnitPower(p); } + inline void DbU::setStringMode ( unsigned int mode ) { _stringMode = mode; } + inline void DbU::setRealSnapGridStep ( DbU::Unit step ) { _realSnapGridStep = step; } + inline void DbU::setSymbolicSnapGridStep ( DbU::Unit step ) { _symbolicSnapGridStep = step; } } // End of Hurricane namespace. diff --git a/hurricane/src/hviewer/CellViewer.cpp b/hurricane/src/hviewer/CellViewer.cpp index dc9d4dbb..2d0734ab 100644 --- a/hurricane/src/hviewer/CellViewer.cpp +++ b/hurricane/src/hviewer/CellViewer.cpp @@ -49,38 +49,40 @@ namespace Hurricane { - CellViewer::CellViewer ( QWidget* parent ) : QMainWindow(parent) - , _applicationName(tr("Viewer")) - , _openAction(NULL) - , _nextAction(NULL) - , _printAction(NULL) - , _imageAction(NULL) - , _saveAction(NULL) - , _closeAction(NULL) - , _exitAction(NULL) - , _refreshAction(NULL) + CellViewer::CellViewer ( QWidget* parent ) : QMainWindow (parent) + , _applicationName (tr("Viewer")) + , _toolInterruptAction(NULL) + , _openAction (NULL) + , _nextAction (NULL) + , _printAction (NULL) + , _imageAction (NULL) + , _saveAction (NULL) + , _closeAction (NULL) + , _exitAction (NULL) + , _refreshAction (NULL) , _fitToContentsAction(NULL) , _showSelectionAction(NULL) - , _rubberChangeAction(NULL) - , _clearRulersAction(NULL) - , _controllerAction(NULL) - , _fileMenu(NULL) - , _viewMenu(NULL) - , _toolsMenu(NULL) - , _debugMenu(NULL) - //, _mapView(NULL) - , _palette(NULL) - , _mousePosition(NULL) - , _controller(NULL) - , _cellWidget(NULL) - , _moveCommand() - , _zoomCommand() - , _rulerCommand() - , _selectCommand() - , _hierarchyCommand() - , _cellHistory() - , _firstShow(false) - , _updateState(ExternalEmit) + , _rubberChangeAction (NULL) + , _clearRulersAction (NULL) + , _controllerAction (NULL) + , _fileMenu (NULL) + , _viewMenu (NULL) + , _toolsMenu (NULL) + , _debugMenu (NULL) + //, _mapView (NULL) + , _palette (NULL) + , _mousePosition (NULL) + , _controller (NULL) + , _cellWidget (NULL) + , _moveCommand () + , _zoomCommand () + , _rulerCommand () + , _selectCommand () + , _hierarchyCommand () + , _cellHistory () + , _firstShow (false) + , _toolInterrupt (false) + , _updateState (ExternalEmit) { setObjectName("viewer"); @@ -101,6 +103,14 @@ namespace Hurricane { { if ( _openAction ) return; + _toolInterruptAction = new QAction ( tr("Interrupt"), this ); + _toolInterruptAction->setObjectName ( "viewer.interrupt" ); + _toolInterruptAction->setShortcut ( QKeySequence(tr("CTRL+C")) ); + //_toolInterruptAction->setIcon ( QIcon(":/images/stock_open.png") ); + _toolInterruptAction->setStatusTip ( tr("Interrupt the running tool") ); + connect ( _toolInterruptAction, SIGNAL(triggered()), this, SLOT(raiseToolInterrupt()) ); + addAction ( _toolInterruptAction ); + _openAction = new QAction ( tr("&Open Cell"), this ); _openAction->setObjectName ( "viewer.menuBar.file.openCell" ); _openAction->setShortcut ( QKeySequence(tr("CTRL+O")) ); @@ -273,7 +283,7 @@ namespace Hurricane { connect ( _showSelectionAction , SIGNAL(toggled(bool)) , this , SLOT(setShowSelection(bool)) ); connect ( _rubberChangeAction , SIGNAL(triggered()) , _cellWidget, SLOT(rubberChange()) ); connect ( _clearRulersAction , SIGNAL(triggered()) , _cellWidget, SLOT(clearRulers()) ); - connect ( _controllerAction , SIGNAL(triggered()) , this , SLOT(showController()) ); + connect ( _controllerAction , SIGNAL(triggered()) , _controller, SLOT(toggleShow()) ); connect ( _cellWidget , SIGNAL(mousePositionChanged(const Point&)) , _mousePosition , SLOT (setPosition(const Point&)) ); @@ -379,12 +389,6 @@ namespace Hurricane { } - void CellViewer::showController () - { - _controller->show (); - } - - void CellViewer::changeSelectionMode () { if ( _updateState != InternalEmit ) { @@ -403,6 +407,14 @@ namespace Hurricane { } + void CellViewer::raiseToolInterrupt () + { _toolInterrupt = true; } + + + void CellViewer::clearToolInterrupt () + { _toolInterrupt = false; } + + void CellViewer::openHistoryCell () { QAction* historyAction = qobject_cast ( sender() ); diff --git a/hurricane/src/hviewer/CellWidget.cpp b/hurricane/src/hviewer/CellWidget.cpp index 6a0951f9..b24823a6 100644 --- a/hurricane/src/hviewer/CellWidget.cpp +++ b/hurricane/src/hviewer/CellWidget.cpp @@ -177,6 +177,7 @@ namespace Hurricane { Point spotPoint = Point ( _cellWidget->_onSnapGrid(mousePoint.getX()) , _cellWidget->_onSnapGrid(mousePoint.getY()) ); + return _cellWidget->dbuToScreenPoint(spotPoint); } diff --git a/hurricane/src/hviewer/ControllerWidget.cpp b/hurricane/src/hviewer/ControllerWidget.cpp index 701b4eb9..f09124d7 100644 --- a/hurricane/src/hviewer/ControllerWidget.cpp +++ b/hurricane/src/hviewer/ControllerWidget.cpp @@ -23,6 +23,7 @@ // x-----------------------------------------------------------------x +#include #include #include #include @@ -464,7 +465,13 @@ namespace Hurricane { addTab ( _tabSelection , "Selection" ); addTab ( _tabInspector , "Inspector" ); - connect ( this, SIGNAL(currentChanged(int)), this, SLOT(updateTab(int)) ); + QAction* toggleShow = new QAction ( tr("Controller"), this ); + toggleShow->setObjectName ( "controller.action.hideShow" ); + toggleShow->setShortcut ( QKeySequence(tr("CTRL+I")) ); + addAction ( toggleShow ); + + connect ( toggleShow, SIGNAL(triggered()) , this, SLOT(toggleShow()) ); + connect ( this , SIGNAL(currentChanged(int)), this, SLOT(updateTab(int)) ); connect ( _tabSelection->getSelection(), SIGNAL(inspect(Occurrence&)) , _tabInspector , SLOT (setSelectionOccurrence(Occurrence&)) ); @@ -472,6 +479,10 @@ namespace Hurricane { } + void ControllerWidget::toggleShow () + { setVisible ( !isVisible() ); } + + void ControllerWidget::setCellWidget ( CellWidget* cellWidget ) { _cellWidget = cellWidget; diff --git a/hurricane/src/hviewer/hurricane/viewer/CellViewer.h b/hurricane/src/hviewer/hurricane/viewer/CellViewer.h index b5459a8f..c33500e2 100644 --- a/hurricane/src/hviewer/hurricane/viewer/CellViewer.h +++ b/hurricane/src/hviewer/hurricane/viewer/CellViewer.h @@ -68,6 +68,7 @@ namespace Hurricane { public: CellViewer ( QWidget* parent=NULL ); virtual ~CellViewer (); + inline bool isToolInterrupted () const; QMenu* createDebugMenu (); inline void setEnableRedrawInterrupt ( bool ); inline void setApplicationName ( const QString& ); @@ -83,10 +84,11 @@ namespace Hurricane { void changeSelectionMode (); void setShowSelection ( bool ); void setState ( shared_ptr& ); - void showController (); void openHistoryCell (); void printDisplay (); void imageDisplay (); + void raiseToolInterrupt (); + void clearToolInterrupt (); signals: void showSelectionToggled ( bool ); void stateChanged ( shared_ptr& ); @@ -96,6 +98,7 @@ namespace Hurricane { enum { CellHistorySize = 10 }; protected: QString _applicationName; + QAction* _toolInterruptAction; QAction* _openAction; QAction* _nextAction; QAction* _cellHistoryAction[CellHistorySize]; @@ -127,6 +130,7 @@ namespace Hurricane { list< shared_ptr > _cellHistory; bool _firstShow; + bool _toolInterrupt; UpdateState _updateState; protected: @@ -142,6 +146,7 @@ namespace Hurricane { inline void CellViewer::setEnableRedrawInterrupt ( bool state ) { _cellWidget->setEnableRedrawInterrupt(state); } + inline bool CellViewer::isToolInterrupted () const { return _toolInterrupt; } inline CellWidget* CellViewer::getCellWidget () { return _cellWidget; } inline ControllerWidget* CellViewer::getControllerWidget () { return _controller; } inline void CellViewer::setApplicationName ( const QString& name ) { _applicationName = name; } diff --git a/hurricane/src/hviewer/hurricane/viewer/CellWidget.h b/hurricane/src/hviewer/hurricane/viewer/CellWidget.h index 7387ac9e..664eced1 100644 --- a/hurricane/src/hviewer/hurricane/viewer/CellWidget.h +++ b/hurricane/src/hviewer/hurricane/viewer/CellWidget.h @@ -137,6 +137,7 @@ namespace Hurricane { void detachFromPalette (); void bindCommand ( Command* ); void unbindCommand ( Command* ); + inline void setCursorStep ( DbU::Unit ); inline bool realMode () const; inline bool symbolicMode () const; inline bool showBoundaries () const; @@ -204,10 +205,13 @@ namespace Hurricane { Box computeVisibleArea ( float scale ) const; Box computeVisibleArea ( float scale, const Point& topLeft ) const; Box computeVisibleArea ( const Box&, float& scale ) const; + inline DbU::Unit cursorStep () const; inline bool _underDetailedGridThreshold() const; inline DbU::Unit _snapGridStep () const; inline DbU::Unit _onSnapGrid ( DbU::Unit ) const; inline Point _onSnapGrid ( const Point& ) const; + inline DbU::Unit _onCursorGrid ( DbU::Unit ) const; + inline Point _onCursorGrid ( const Point& ) const; // Qt QWidget Functions Overloads. void pushCursor ( Qt::CursorShape cursor ); void popCursor (); @@ -525,6 +529,7 @@ namespace Hurricane { inline State ( Cell* cell=NULL ); inline void setCell ( Cell* ); inline void setCellWidget ( CellWidget* ); + inline void setCursorStep ( DbU::Unit ); inline void setRealMode (); inline void setSymbolicMode (); inline void setShowBoundaries ( bool ); @@ -544,6 +549,7 @@ namespace Hurricane { const Name& getName () const; inline SelectorCriterions& getSelection (); inline RulerSet& getRulers (); + inline DbU::Unit cursorStep () const; inline bool realMode () const; inline bool symbolicMode () const; inline bool showBoundaries () const; @@ -572,6 +578,7 @@ namespace Hurricane { CellWidget* _cellWidget; SelectorCriterions _selection; RulerSet _rulers; + DbU::Unit _cursorStep; bool _symbolicMode; bool _showBoundaries; bool _showSelection; @@ -858,6 +865,7 @@ namespace Hurricane { , _cellWidget (NULL) , _selection () , _rulers () + , _cursorStep (DbU::lambda(0.5)) , _symbolicMode (true) , _showBoundaries (true) , _showSelection (false) @@ -889,12 +897,22 @@ namespace Hurricane { } + inline void CellWidget::State::setCursorStep ( DbU::Unit step ) + { _cursorStep = step; } + + inline void CellWidget::State::setRealMode () - { _symbolicMode = false; } + { + _symbolicMode = false; + _cursorStep = DbU::grid ( 1.0 ); + } inline void CellWidget::State::setSymbolicMode () - { _symbolicMode = true; } + { + _symbolicMode = true; + _cursorStep = DbU::lambda ( 0.5 ); + } inline void CellWidget::State::setShowBoundaries ( bool state ) @@ -944,6 +962,10 @@ namespace Hurricane { { return _cell; } + inline DbU::Unit CellWidget::State::cursorStep () const + { return _cursorStep; } + + inline CellWidget::SelectorCriterions& CellWidget::State::getSelection () { return _selection; } @@ -1006,6 +1028,10 @@ namespace Hurricane { { return state->getName() == _cellName; } + inline void CellWidget::setCursorStep ( DbU::Unit step ) + { _state->setCursorStep(step); } + + inline shared_ptr& CellWidget::getState () { _state->setTopLeft ( getTopLeft() ); @@ -1178,6 +1204,10 @@ namespace Hurricane { { return _palette; } + inline DbU::Unit CellWidget::cursorStep () const + { return _state->cursorStep(); } + + inline bool CellWidget::realMode () const { return !_state->symbolicMode(); } @@ -1217,7 +1247,7 @@ namespace Hurricane { inline void CellWidget::updateMousePosition () { Point mousePoint = screenToDbuPoint ( _mousePosition ); - emit mousePositionChanged ( _onSnapGrid(mousePoint) ); + emit mousePositionChanged ( _onCursorGrid(mousePoint) ); } @@ -1276,6 +1306,14 @@ namespace Hurricane { { return Point(_onSnapGrid(p.getX()),_onSnapGrid(p.getY())); } + inline DbU::Unit CellWidget::_onCursorGrid ( DbU::Unit u ) const + { return DbU::getOnCustomGrid(u,cursorStep()); } + + + inline Point CellWidget::_onCursorGrid ( const Point& p ) const + { return Point(_onCursorGrid(p.getX()),_onCursorGrid(p.getY())); } + + } // End of Hurricane namespace. diff --git a/hurricane/src/hviewer/hurricane/viewer/ControllerWidget.h b/hurricane/src/hviewer/hurricane/viewer/ControllerWidget.h index 21bb38ab..33d92a74 100644 --- a/hurricane/src/hviewer/hurricane/viewer/ControllerWidget.h +++ b/hurricane/src/hviewer/hurricane/viewer/ControllerWidget.h @@ -249,6 +249,7 @@ namespace Hurricane { void cellPostModificate (); void cellChanged ( Cell* ); void updateTab ( int index ); + void toggleShow (); protected: CellWidget* _cellWidget;