* ./hurricane/src/hurricane :
- New feature : geometrical Query with callback fonctions "a la" OpenAccess. * ./hurricane/src/hviewer : - Uses Query to draw display. - Bug : when drawing segments as lines (width inferior to 1 pixel) uses an alternate Pen which is one pixel wide and SolidLine styled, avoiding strange orange lines... Mechanism implemented in sub-class DrawingPlanes. - Make selection always visible regardless the zoom level. - CellWidget names it's most importants childs QWidget (mostly menus) for later retrieval in customized sub-classes.
This commit is contained in:
parent
0e6f383a8c
commit
dfdb2ec2d5
|
@ -51,6 +51,7 @@
|
||||||
hurricane/Properties.h hurricane/Property.h
|
hurricane/Properties.h hurricane/Property.h
|
||||||
hurricane/QuadTree.h
|
hurricane/QuadTree.h
|
||||||
hurricane/Quark.h hurricane/Quarks.h
|
hurricane/Quark.h hurricane/Quarks.h
|
||||||
|
hurricane/Query.h
|
||||||
hurricane/Record.h
|
hurricane/Record.h
|
||||||
hurricane/Reference.h hurricane/References.h
|
hurricane/Reference.h hurricane/References.h
|
||||||
hurricane/Region.h
|
hurricane/Region.h
|
||||||
|
@ -137,6 +138,7 @@
|
||||||
Slice.cpp
|
Slice.cpp
|
||||||
UpdateSession.cpp
|
UpdateSession.cpp
|
||||||
Region.cpp
|
Region.cpp
|
||||||
|
Query.cpp
|
||||||
DisplaySlot.cpp
|
DisplaySlot.cpp
|
||||||
Marker.cpp
|
Marker.cpp
|
||||||
Timer.cpp
|
Timer.cpp
|
||||||
|
|
|
@ -0,0 +1,165 @@
|
||||||
|
|
||||||
|
// -*- C++ -*-
|
||||||
|
//
|
||||||
|
// This file is part of the Coriolis Project.
|
||||||
|
// Copyright (C) Laboratoire LIP6 - Departement ASIM
|
||||||
|
// Universite Pierre et Marie Curie
|
||||||
|
//
|
||||||
|
// Main contributors :
|
||||||
|
// Christophe Alexandre <Christophe.Alexandre@lip6.fr>
|
||||||
|
// Sophie Belloeil <Sophie.Belloeil@lip6.fr>
|
||||||
|
// Hugo Clément <Hugo.Clement@lip6.fr>
|
||||||
|
// Jean-Paul Chaput <Jean-Paul.Chaput@lip6.fr>
|
||||||
|
// Damien Dupuis <Damien.Dupuis@lip6.fr>
|
||||||
|
// Christian Masson <Christian.Masson@lip6.fr>
|
||||||
|
// Marek Sroka <Marek.Sroka@lip6.fr>
|
||||||
|
//
|
||||||
|
// 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 : "./Query.cpp" |
|
||||||
|
// | *************************************************************** |
|
||||||
|
// | U p d a t e s |
|
||||||
|
// | |
|
||||||
|
// x-----------------------------------------------------------------x
|
||||||
|
|
||||||
|
|
||||||
|
#include <climits>
|
||||||
|
|
||||||
|
#include "hurricane/BasicLayer.h"
|
||||||
|
#include "hurricane/Slice.h"
|
||||||
|
#include "hurricane/Cell.h"
|
||||||
|
#include "hurricane/Instance.h"
|
||||||
|
#include "hurricane/Query.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace Hurricane {
|
||||||
|
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------
|
||||||
|
// Slave Class : "QueryState".
|
||||||
|
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------
|
||||||
|
// Class : "QueryStack".
|
||||||
|
|
||||||
|
|
||||||
|
QueryStack::QueryStack ()
|
||||||
|
: vector<QueryState*>()
|
||||||
|
//, _tab(" ")
|
||||||
|
, _topCell(NULL)
|
||||||
|
, _topArea()
|
||||||
|
, _topTransformation()
|
||||||
|
, _startLevel(0)
|
||||||
|
, _stopLevel(UINT_MAX)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
|
||||||
|
QueryStack::~QueryStack ()
|
||||||
|
{
|
||||||
|
for ( size_t i=0 ; i<size() ; i++ ) delete operator[](i);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------
|
||||||
|
// Class : "Query".
|
||||||
|
|
||||||
|
|
||||||
|
Query::Query ()
|
||||||
|
: _stack()
|
||||||
|
, _basicLayer(NULL)
|
||||||
|
, _filter(DoAll)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
|
||||||
|
Query::~Query ()
|
||||||
|
{ }
|
||||||
|
|
||||||
|
|
||||||
|
void Query::setQuery ( Cell* cell
|
||||||
|
, const Box& area
|
||||||
|
, const Transformation& transformation
|
||||||
|
, const BasicLayer* basicLayer
|
||||||
|
, unsigned int filter
|
||||||
|
)
|
||||||
|
{
|
||||||
|
_basicLayer = basicLayer;
|
||||||
|
_filter = filter;
|
||||||
|
|
||||||
|
_stack.setTopCell ( cell );
|
||||||
|
_stack.setTopArea ( area );
|
||||||
|
_stack.setTopTransformation ( transformation );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Query::doQuery ()
|
||||||
|
{
|
||||||
|
if ( _stack.getTopArea().isEmpty() || !_stack.getTopCell() ) return;
|
||||||
|
|
||||||
|
//cerr << "Query::doQuery() - " << _stack.getTopCell() << " " << _stack.getTopArea() << " " << _basicLayer << endl;
|
||||||
|
|
||||||
|
_stack.init ();
|
||||||
|
|
||||||
|
while ( !_stack.empty() ) {
|
||||||
|
// Process the Components of the current instance.
|
||||||
|
if ( hasGoCallback() && _basicLayer && (_filter & DoComponents) ) {
|
||||||
|
//if ( getInstance() )
|
||||||
|
// cerr << getTab() << getInstance() << " " << getTransformation() << endl;
|
||||||
|
//else
|
||||||
|
// cerr << " TopCell: " << getMasterCell() << " " << getTransformation() << endl;
|
||||||
|
|
||||||
|
forEach ( Slice*, islice, getMasterCell()->getSlices() ) {
|
||||||
|
if ( !(*islice)->getLayer()->contains(getBasicLayer()) ) continue;
|
||||||
|
if ( !(*islice)->getBoundingBox().intersect(getArea()) ) continue;
|
||||||
|
|
||||||
|
forEach ( Go*, igo, (*islice)->getGosUnder(_stack.getArea()) )
|
||||||
|
goCallback ( *igo );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( (_filter & DoMasterCells) && hasMasterCellCallback() )
|
||||||
|
masterCellCallback ();
|
||||||
|
|
||||||
|
_stack.progress ();
|
||||||
|
} // End of while.
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool Query::hasGoCallback () const
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool Query::hasMasterCellCallback () const
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
} // End of Hurricane namespace.
|
|
@ -95,8 +95,6 @@ namespace Hurricane {
|
||||||
virtual string _getString () const;
|
virtual string _getString () const;
|
||||||
virtual Record* _getRecord () const;
|
virtual Record* _getRecord () const;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Internal: Attributes
|
// Internal: Attributes
|
||||||
Material _material;
|
Material _material;
|
||||||
|
|
|
@ -813,6 +813,61 @@ template<class Type> class SubSetCollection : public Collection<Type> {
|
||||||
_locator->progress();
|
_locator->progress();
|
||||||
|
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------
|
||||||
|
// Template Class : "ForEachIterator"
|
||||||
|
|
||||||
|
|
||||||
|
template<typename Element>
|
||||||
|
class ForEachIterator {
|
||||||
|
public:
|
||||||
|
inline ForEachIterator ( GenericCollection<Element> coll );
|
||||||
|
inline bool isValid ();
|
||||||
|
inline Element operator* ();
|
||||||
|
inline ForEachIterator& operator++ (int);
|
||||||
|
public:
|
||||||
|
GenericCollection<Element>& collection;
|
||||||
|
GenericLocator<Element> locator;
|
||||||
|
Element element;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
template<typename Element>
|
||||||
|
inline ForEachIterator<Element>::ForEachIterator ( GenericCollection<Element> coll )
|
||||||
|
: collection(coll)
|
||||||
|
, locator(collection.getLocator())
|
||||||
|
, element()
|
||||||
|
{
|
||||||
|
if ( locator.isValid() ) element = locator.getElement();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template< typename Element >
|
||||||
|
inline bool ForEachIterator<Element>::isValid ()
|
||||||
|
{
|
||||||
|
if ( locator.isValid() ) element = locator.getElement();
|
||||||
|
return locator.isValid();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template< typename Element >
|
||||||
|
inline Element ForEachIterator<Element>::operator* ()
|
||||||
|
{
|
||||||
|
return element;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template< typename Element >
|
||||||
|
inline ForEachIterator<Element>& ForEachIterator<Element>::operator++ (int)
|
||||||
|
{
|
||||||
|
locator.progress ();
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#define forEach(type,iterator,collection) \
|
||||||
|
for ( ForEachIterator<type> iterator(collection); iterator.isValid() ; iterator++ )
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
} // End of Hurricane namespace.
|
} // End of Hurricane namespace.
|
||||||
|
|
||||||
|
@ -842,6 +897,9 @@ template<typename Type> inline Hurricane::Record* getRecord ( const Hurricane::C
|
||||||
#include "hurricane/ListCollection.h"
|
#include "hurricane/ListCollection.h"
|
||||||
#include "hurricane/VectorCollection.h"
|
#include "hurricane/VectorCollection.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif // HURRICANE_COLLECTION
|
#endif // HURRICANE_COLLECTION
|
||||||
|
|
||||||
// ****************************************************************************************************
|
// ****************************************************************************************************
|
||||||
|
|
|
@ -51,6 +51,9 @@ typedef GenericFilter<Net*> NetFilter;
|
||||||
Net* net = _locator.getElement();\
|
Net* net = _locator.getElement();\
|
||||||
_locator.progress();
|
_locator.progress();
|
||||||
|
|
||||||
|
#define forEachNet(iterator,collection) forEach(Net*,iterator,collection)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
} // End of Hurricane namespace.
|
} // End of Hurricane namespace.
|
||||||
|
|
|
@ -0,0 +1,378 @@
|
||||||
|
|
||||||
|
// -*- C++ -*-
|
||||||
|
//
|
||||||
|
// This file is part of the Coriolis Project.
|
||||||
|
// Copyright (C) Laboratoire LIP6 - Departement ASIM
|
||||||
|
// Universite Pierre et Marie Curie
|
||||||
|
//
|
||||||
|
// Main contributors :
|
||||||
|
// Christophe Alexandre <Christophe.Alexandre@lip6.fr>
|
||||||
|
// Sophie Belloeil <Sophie.Belloeil@lip6.fr>
|
||||||
|
// Hugo Clément <Hugo.Clement@lip6.fr>
|
||||||
|
// Jean-Paul Chaput <Jean-Paul.Chaput@lip6.fr>
|
||||||
|
// Damien Dupuis <Damien.Dupuis@lip6.fr>
|
||||||
|
// Christian Masson <Christian.Masson@lip6.fr>
|
||||||
|
// Marek Sroka <Marek.Sroka@lip6.fr>
|
||||||
|
//
|
||||||
|
// 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 : "./Query.h" |
|
||||||
|
// | *************************************************************** |
|
||||||
|
// | U p d a t e s |
|
||||||
|
// | |
|
||||||
|
// x-----------------------------------------------------------------x
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef __QUERY_H__
|
||||||
|
#define __QUERY_H__
|
||||||
|
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#include "hurricane/Commons.h"
|
||||||
|
#include "hurricane/Box.h"
|
||||||
|
#include "hurricane/Transformation.h"
|
||||||
|
#include "hurricane/Cell.h"
|
||||||
|
#include "hurricane/Instance.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace Hurricane {
|
||||||
|
|
||||||
|
|
||||||
|
class BasicLayer;
|
||||||
|
class Go;
|
||||||
|
class QueryStack;
|
||||||
|
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------
|
||||||
|
// Slave Class : "QueryState".
|
||||||
|
|
||||||
|
|
||||||
|
class QueryState {
|
||||||
|
private:
|
||||||
|
inline QueryState ( Locator<Instance*>* locator );
|
||||||
|
inline QueryState ( Locator<Instance*>* locator
|
||||||
|
, const Box& area
|
||||||
|
, const Transformation& transformation
|
||||||
|
);
|
||||||
|
QueryState ( const QueryState& );
|
||||||
|
QueryState& operator= ( const QueryState& );
|
||||||
|
inline ~QueryState ();
|
||||||
|
private:
|
||||||
|
Locator<Instance*>* _locator;
|
||||||
|
Box _area;
|
||||||
|
Transformation _transformation;
|
||||||
|
|
||||||
|
friend class QueryStack;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// QueryState Inline Functions.
|
||||||
|
|
||||||
|
|
||||||
|
inline QueryState::QueryState ( Locator<Instance*>* locator )
|
||||||
|
: _locator(locator)
|
||||||
|
, _area()
|
||||||
|
, _transformation()
|
||||||
|
{ }
|
||||||
|
|
||||||
|
|
||||||
|
inline QueryState::QueryState ( Locator<Instance*>* locator
|
||||||
|
, const Box& area
|
||||||
|
, const Transformation& transformation
|
||||||
|
)
|
||||||
|
: _locator(locator)
|
||||||
|
, _area(area)
|
||||||
|
, _transformation(transformation)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
|
||||||
|
inline QueryState::~QueryState ()
|
||||||
|
{
|
||||||
|
if ( _locator ) delete _locator;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------
|
||||||
|
// Class : "QueryStack".
|
||||||
|
|
||||||
|
|
||||||
|
class QueryStack : public vector<QueryState*> {
|
||||||
|
public:
|
||||||
|
// Constructor & destructor.
|
||||||
|
QueryStack ();
|
||||||
|
~QueryStack ();
|
||||||
|
// Accessors.
|
||||||
|
inline Cell* getTopCell ();
|
||||||
|
inline const Box& getTopArea () const;
|
||||||
|
inline const Transformation& getTopTransformation () const;
|
||||||
|
inline unsigned int getStartLevel () const;
|
||||||
|
inline unsigned int getStopLevel () const;
|
||||||
|
inline Cell* getMasterCell ();
|
||||||
|
inline Instance* getInstance ();
|
||||||
|
inline const Box& getArea () const;
|
||||||
|
inline const Transformation& getTransformation () const;
|
||||||
|
//inline const Tabulation& getTab () const;
|
||||||
|
// Modifiers.
|
||||||
|
inline void setTopCell ( Cell* cell );
|
||||||
|
inline void setTopArea ( const Box& area );
|
||||||
|
inline void setTopTransformation ( const Transformation& transformation );
|
||||||
|
inline void setStartLevel ( unsigned int level );
|
||||||
|
inline void setStopLevel ( unsigned int level );
|
||||||
|
inline void init ();
|
||||||
|
inline void updateTransformation ();
|
||||||
|
inline bool levelDown ();
|
||||||
|
inline void levelUp ();
|
||||||
|
inline void levelProgress ();
|
||||||
|
inline bool levelCompleted ();
|
||||||
|
inline void progress ( bool init=false );
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// Internal: Attributes.
|
||||||
|
// Tabulation _tab;
|
||||||
|
Cell* _topCell;
|
||||||
|
Box _topArea;
|
||||||
|
Transformation _topTransformation;
|
||||||
|
unsigned int _startLevel;
|
||||||
|
unsigned int _stopLevel;
|
||||||
|
|
||||||
|
private:
|
||||||
|
// Internal: Constructors.
|
||||||
|
QueryStack ( const QueryStack& );
|
||||||
|
QueryStack& operator= ( const QueryStack& );
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// QueryStack Inline Functions.
|
||||||
|
|
||||||
|
|
||||||
|
inline Cell* QueryStack::getTopCell () { return _topCell; }
|
||||||
|
inline const Box& QueryStack::getTopArea () const { return _topArea; }
|
||||||
|
inline const Transformation& QueryStack::getTopTransformation () const { return _topTransformation; }
|
||||||
|
inline unsigned int QueryStack::getStartLevel () const { return _startLevel; }
|
||||||
|
inline unsigned int QueryStack::getStopLevel () const { return _stopLevel; }
|
||||||
|
inline const Box& QueryStack::getArea () const { return back()->_area; }
|
||||||
|
inline const Transformation& QueryStack::getTransformation () const { return back()->_transformation; }
|
||||||
|
//inline const Tabulation& QueryStack::getTab () const { return _tab; }
|
||||||
|
|
||||||
|
|
||||||
|
inline Instance* QueryStack::getInstance ()
|
||||||
|
{
|
||||||
|
if ( levelCompleted() ) return NULL;
|
||||||
|
return back()->_locator->getElement();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline Cell* QueryStack::getMasterCell ()
|
||||||
|
{
|
||||||
|
if ( size() == 1 ) return _topCell;
|
||||||
|
if ( !getInstance() ) return NULL;
|
||||||
|
return getInstance()->getMasterCell();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline void QueryStack::setTopCell ( Cell* cell ) { _topCell = cell; }
|
||||||
|
inline void QueryStack::setTopArea ( const Box& area ) { _topArea = area; }
|
||||||
|
inline void QueryStack::setTopTransformation ( const Transformation& transformation ) { _topTransformation = transformation; }
|
||||||
|
inline void QueryStack::setStartLevel ( unsigned int level ) { _startLevel = level; }
|
||||||
|
inline void QueryStack::setStopLevel ( unsigned int level ) { _stopLevel = level; }
|
||||||
|
|
||||||
|
|
||||||
|
inline void QueryStack::init ()
|
||||||
|
{
|
||||||
|
while ( !empty() ) levelUp();
|
||||||
|
|
||||||
|
push_back ( new QueryState(NULL,_topArea,_topTransformation) );
|
||||||
|
//_tab++;
|
||||||
|
|
||||||
|
progress ( true );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline void QueryStack::updateTransformation ()
|
||||||
|
{
|
||||||
|
QueryState* child = *(rbegin() );
|
||||||
|
QueryState* parent = *(rbegin()+1);
|
||||||
|
Instance* instance = child->_locator->getElement();
|
||||||
|
|
||||||
|
child->_area = parent->_area;
|
||||||
|
child->_transformation = instance->getTransformation ();
|
||||||
|
|
||||||
|
instance->getTransformation().getInvert().applyOn ( child->_area );
|
||||||
|
parent->_transformation.applyOn ( child->_transformation );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline bool QueryStack::levelDown ()
|
||||||
|
{
|
||||||
|
if ( size() > _stopLevel ) return false;
|
||||||
|
|
||||||
|
Locator<Instance*>* locator = getMasterCell()->getInstancesUnder(getArea()).getLocator();
|
||||||
|
|
||||||
|
if ( locator->isValid() ) {
|
||||||
|
push_back ( new QueryState ( locator ) );
|
||||||
|
|
||||||
|
updateTransformation ();
|
||||||
|
//_tab++;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline void QueryStack::levelUp ()
|
||||||
|
{
|
||||||
|
delete back ();
|
||||||
|
pop_back ();
|
||||||
|
//_tab--;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline bool QueryStack::levelCompleted ()
|
||||||
|
{
|
||||||
|
if ( !back()->_locator || !back()->_locator->isValid () ) return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline void QueryStack::levelProgress ()
|
||||||
|
{
|
||||||
|
if ( levelCompleted() ) return;
|
||||||
|
|
||||||
|
back()->_locator->progress ();
|
||||||
|
if ( !back()->_locator->isValid() ) return;
|
||||||
|
|
||||||
|
updateTransformation ();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline void QueryStack::progress ( bool init )
|
||||||
|
{
|
||||||
|
if ( !init ) levelProgress ();
|
||||||
|
else {
|
||||||
|
if ( !levelDown() && ( size() > _startLevel ) )
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
while ( !empty() ) {
|
||||||
|
if ( levelCompleted() ) {
|
||||||
|
levelUp ();
|
||||||
|
} else {
|
||||||
|
if ( levelDown() ) continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( size() > _startLevel ) return;
|
||||||
|
if ( empty() ) break;
|
||||||
|
levelProgress ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------
|
||||||
|
// Class : "Query".
|
||||||
|
|
||||||
|
|
||||||
|
class Query {
|
||||||
|
public:
|
||||||
|
// Types.
|
||||||
|
enum QueryFilter { DoMasterCells = 1
|
||||||
|
, DoComponents = 2
|
||||||
|
, DoAll = DoMasterCells || DoComponents
|
||||||
|
};
|
||||||
|
public:
|
||||||
|
// Constructors & Destructors.
|
||||||
|
Query ();
|
||||||
|
virtual ~Query ();
|
||||||
|
// Accessors.
|
||||||
|
inline unsigned int getStartLevel () const;
|
||||||
|
inline unsigned int getStopLevel () const;
|
||||||
|
inline size_t getDepth () const;
|
||||||
|
inline const Transformation& getTransformation () const;
|
||||||
|
inline const Box& getArea () const;
|
||||||
|
inline const BasicLayer* getBasicLayer () const;
|
||||||
|
inline Cell* getMasterCell ();
|
||||||
|
inline Instance* getInstance ();
|
||||||
|
//inline const Tabulation& getTab () const;
|
||||||
|
virtual bool hasGoCallback () const;
|
||||||
|
virtual bool hasMasterCellCallback () const;
|
||||||
|
virtual void goCallback ( Go* go ) = 0;
|
||||||
|
virtual void masterCellCallback () = 0;
|
||||||
|
// Modifiers.
|
||||||
|
void setQuery ( Cell* cell
|
||||||
|
, const Box& area
|
||||||
|
, const Transformation& transformation
|
||||||
|
, const BasicLayer* basicLayer
|
||||||
|
, unsigned int filter
|
||||||
|
);
|
||||||
|
inline void setCell ( Cell* cell );
|
||||||
|
inline void setArea ( const Box& area );
|
||||||
|
inline void setTransformation ( const Transformation& transformation );
|
||||||
|
inline void setBasicLayer ( const BasicLayer* basicLayer );
|
||||||
|
inline void setFilter ( unsigned int mode );
|
||||||
|
inline void setStartLevel ( unsigned int level );
|
||||||
|
inline void setStopLevel ( unsigned int level );
|
||||||
|
void doQuery ();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// Internal: Attributes.
|
||||||
|
QueryStack _stack;
|
||||||
|
const BasicLayer* _basicLayer;
|
||||||
|
unsigned int _filter;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Query Inline Functions.
|
||||||
|
|
||||||
|
inline void Query::setCell ( Cell* cell ) { _stack.setTopCell(cell); }
|
||||||
|
inline void Query::setArea ( const Box& area ) { _stack.setTopArea(area); }
|
||||||
|
inline void Query::setTransformation ( const Transformation& transformation ) { _stack.setTopTransformation(transformation); }
|
||||||
|
inline void Query::setBasicLayer ( const BasicLayer* basicLayer ) { _basicLayer = basicLayer; }
|
||||||
|
inline void Query::setFilter ( unsigned int filter ) { _filter = filter; }
|
||||||
|
inline void Query::setStartLevel ( unsigned int level ) { _stack.setStartLevel(level); }
|
||||||
|
inline void Query::setStopLevel ( unsigned int level ) { _stack.setStopLevel(level); }
|
||||||
|
|
||||||
|
inline unsigned int Query::getStartLevel () const { return _stack.getStartLevel(); }
|
||||||
|
inline unsigned int Query::getStopLevel () const { return _stack.getStopLevel(); }
|
||||||
|
inline size_t Query::getDepth () const { return _stack.size(); }
|
||||||
|
inline const Box& Query::getArea () const { return _stack.getArea(); }
|
||||||
|
inline const Transformation& Query::getTransformation () const { return _stack.getTransformation(); }
|
||||||
|
inline const BasicLayer* Query::getBasicLayer () const { return _basicLayer; }
|
||||||
|
inline Cell* Query::getMasterCell () { return _stack.getMasterCell(); }
|
||||||
|
inline Instance* Query::getInstance () { return _stack.getInstance(); }
|
||||||
|
//inline const Tabulation& Query::getTab () const { return _stack.getTab(); }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} // End of Hurricane namespace.
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __QUERY_H__
|
|
@ -72,9 +72,8 @@ namespace Hurricane {
|
||||||
|
|
||||||
|
|
||||||
CellViewer::CellViewer ( QWidget* parent ) : QMainWindow(parent)
|
CellViewer::CellViewer ( QWidget* parent ) : QMainWindow(parent)
|
||||||
|
, _applicationName(tr("Viewer"))
|
||||||
, _openAction(NULL)
|
, _openAction(NULL)
|
||||||
, _nextCellAction(NULL)
|
|
||||||
, _previousCellAction(NULL)
|
|
||||||
, _nextAction(NULL)
|
, _nextAction(NULL)
|
||||||
, _saveAction(NULL)
|
, _saveAction(NULL)
|
||||||
, _exitAction(NULL)
|
, _exitAction(NULL)
|
||||||
|
@ -91,7 +90,10 @@ namespace Hurricane {
|
||||||
, _palette(NULL)
|
, _palette(NULL)
|
||||||
, _mousePosition(NULL)
|
, _mousePosition(NULL)
|
||||||
, _cellWidget(NULL)
|
, _cellWidget(NULL)
|
||||||
|
, _cellHistory()
|
||||||
{
|
{
|
||||||
|
setObjectName("viewer");
|
||||||
|
|
||||||
createMenus ();
|
createMenus ();
|
||||||
createLayout ();
|
createLayout ();
|
||||||
}
|
}
|
||||||
|
@ -104,47 +106,62 @@ namespace Hurricane {
|
||||||
if ( _openAction ) return;
|
if ( _openAction ) return;
|
||||||
|
|
||||||
_openAction = new QAction ( tr("&Open Cell"), this );
|
_openAction = new QAction ( tr("&Open Cell"), this );
|
||||||
|
_openAction->setObjectName ( "viewer.file.openCell" );
|
||||||
_openAction->setIcon ( QIcon(":/images/stock_open.png") );
|
_openAction->setIcon ( QIcon(":/images/stock_open.png") );
|
||||||
_openAction->setStatusTip ( tr("Open (load) a new Cell") );
|
_openAction->setStatusTip ( tr("Open (load) a new Cell") );
|
||||||
|
cerr << "_openAction: " << _openAction << endl;
|
||||||
_nextCellAction = new QAction ( tr("Next Cell"), this );
|
|
||||||
_nextCellAction->setStatusTip ( tr("Go to the next Cell in history") );
|
|
||||||
|
|
||||||
_previousCellAction = new QAction ( tr("Previous Cell"), this );
|
|
||||||
_previousCellAction->setStatusTip ( tr("Go to the previous Cell in history") );
|
|
||||||
|
|
||||||
_nextAction = new QAction ( tr("&Next Breakpoint"), this );
|
_nextAction = new QAction ( tr("&Next Breakpoint"), this );
|
||||||
|
_nextAction->setObjectName ( "viewer.file.nextBreakpoint" );
|
||||||
_nextAction->setStatusTip ( tr("Proceed to the next breakpoint") );
|
_nextAction->setStatusTip ( tr("Proceed to the next breakpoint") );
|
||||||
|
|
||||||
|
for ( size_t i=0 ; i<CellHistorySize ; i++ ) {
|
||||||
|
_cellHistoryAction[i] = new QAction ( this );
|
||||||
|
_cellHistoryAction[i]->setObjectName ( QString("viewer.file.cellHistory[%1]").arg(i) );
|
||||||
|
_cellHistoryAction[i]->setVisible ( false );
|
||||||
|
_cellHistoryAction[i]->setData ( i );
|
||||||
|
_cellHistoryAction[i]->setFont ( Graphics::getFixedFont(QFont::Bold,false,false) );
|
||||||
|
connect ( _cellHistoryAction[i], SIGNAL(triggered()), this, SLOT(openHistoryCell()));
|
||||||
|
}
|
||||||
|
|
||||||
_saveAction = new QAction ( tr("&Save Cell"), this );
|
_saveAction = new QAction ( tr("&Save Cell"), this );
|
||||||
|
_saveAction->setObjectName ( "viewer.file.saveCell" );
|
||||||
_saveAction->setIcon ( QIcon(":/images/stock_save.png") );
|
_saveAction->setIcon ( QIcon(":/images/stock_save.png") );
|
||||||
_saveAction->setStatusTip ( tr("Save the current Cell") );
|
_saveAction->setStatusTip ( tr("Save the current Cell") );
|
||||||
|
_saveAction->setVisible ( false );
|
||||||
|
|
||||||
_exitAction = new QAction ( tr("&Exit"), this );
|
_exitAction = new QAction ( tr("&Exit"), this );
|
||||||
|
_exitAction->setObjectName ( "viewer.file.exit" );
|
||||||
_exitAction->setStatusTip ( tr("Close Coriolis CellViewer") );
|
_exitAction->setStatusTip ( tr("Close Coriolis CellViewer") );
|
||||||
_exitAction->setShortcut ( QKeySequence(tr("CTRL+Q")) );
|
_exitAction->setShortcut ( QKeySequence(tr("CTRL+Q")) );
|
||||||
connect ( _exitAction, SIGNAL(triggered()), this, SLOT(close()) );
|
connect ( _exitAction, SIGNAL(triggered()), this, SLOT(close()) );
|
||||||
|
|
||||||
_refreshAction = new QAction ( tr("&Refresh"), this );
|
_refreshAction = new QAction ( tr("&Refresh"), this );
|
||||||
|
_refreshAction->setObjectName ( "viewer.view.refresh" );
|
||||||
_refreshAction->setStatusTip ( tr("Force full redrawing of the display") );
|
_refreshAction->setStatusTip ( tr("Force full redrawing of the display") );
|
||||||
_refreshAction->setShortcut ( QKeySequence(tr("CTRL+L")) );
|
_refreshAction->setShortcut ( QKeySequence(tr("CTRL+L")) );
|
||||||
|
|
||||||
_fitToContentsAction = new QAction ( tr("&Fit to Contents"), this );
|
_fitToContentsAction = new QAction ( tr("&Fit to Contents"), this );
|
||||||
|
_fitToContentsAction->setObjectName ( "viewer.view.fit" );
|
||||||
_fitToContentsAction->setStatusTip ( tr("Adjust zoom to fit the whole cell's contents") );
|
_fitToContentsAction->setStatusTip ( tr("Adjust zoom to fit the whole cell's contents") );
|
||||||
_fitToContentsAction->setShortcut ( Qt::Key_F );
|
_fitToContentsAction->setShortcut ( Qt::Key_F );
|
||||||
|
|
||||||
_showSelectionAction = new QAction ( tr("&Show Selection"), this );
|
_showSelectionAction = new QAction ( tr("&Show Selection"), this );
|
||||||
|
_showSelectionAction->setObjectName ( "viewer.view.showSelection" );
|
||||||
_showSelectionAction->setStatusTip ( tr("Highlight the selected items (darken others)") );
|
_showSelectionAction->setStatusTip ( tr("Highlight the selected items (darken others)") );
|
||||||
_showSelectionAction->setShortcut ( Qt::Key_S );
|
_showSelectionAction->setShortcut ( Qt::Key_S );
|
||||||
_showSelectionAction->setCheckable ( true );
|
_showSelectionAction->setCheckable ( true );
|
||||||
|
|
||||||
_runInspectorOnDataBase= new QAction ( tr("Inspect &DataBase"), this );
|
_runInspectorOnDataBase= new QAction ( tr("Inspect &DataBase"), this );
|
||||||
|
_runInspectorOnDataBase->setObjectName ( "viewer.tool.inspectDb" );
|
||||||
_runInspectorOnDataBase->setStatusTip ( tr("Run Inspector on Hurricane DataBase") );
|
_runInspectorOnDataBase->setStatusTip ( tr("Run Inspector on Hurricane DataBase") );
|
||||||
|
|
||||||
_runInspectorOnCell= new QAction ( tr("Inspect &Cell"), this );
|
_runInspectorOnCell= new QAction ( tr("Inspect &Cell"), this );
|
||||||
|
_runInspectorOnCell->setObjectName ( "viewer.tool.inspectCell" );
|
||||||
_runInspectorOnCell->setStatusTip ( tr("Run Inspector on the current Cell") );
|
_runInspectorOnCell->setStatusTip ( tr("Run Inspector on the current Cell") );
|
||||||
|
|
||||||
_browseNetlist= new QAction ( tr("Browse &Netlist"), this );
|
_browseNetlist= new QAction ( tr("Browse &Netlist"), this );
|
||||||
|
_browseNetlist->setObjectName ( "viewer.tool.browseNetlist" );
|
||||||
_browseNetlist->setStatusTip ( tr("Browse netlist from the current Cell") );
|
_browseNetlist->setStatusTip ( tr("Browse netlist from the current Cell") );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -156,19 +173,25 @@ namespace Hurricane {
|
||||||
if ( !_openAction ) createActions ();
|
if ( !_openAction ) createActions ();
|
||||||
|
|
||||||
_fileMenu = menuBar()->addMenu ( tr("File") );
|
_fileMenu = menuBar()->addMenu ( tr("File") );
|
||||||
|
_fileMenu->setObjectName ( "viewer.file" );
|
||||||
_fileMenu->addAction ( _openAction );
|
_fileMenu->addAction ( _openAction );
|
||||||
_fileMenu->addAction ( _nextCellAction );
|
|
||||||
_fileMenu->addAction ( _previousCellAction );
|
|
||||||
_fileMenu->addAction ( _nextAction );
|
_fileMenu->addAction ( _nextAction );
|
||||||
|
_fileMenu->addSeparator ();
|
||||||
|
for ( size_t i=0 ; i<CellHistorySize ; i++ ) {
|
||||||
|
_fileMenu->addAction ( _cellHistoryAction[i] );
|
||||||
|
}
|
||||||
|
_fileMenu->addSeparator ();
|
||||||
_fileMenu->addAction ( _saveAction );
|
_fileMenu->addAction ( _saveAction );
|
||||||
_fileMenu->addAction ( _exitAction );
|
_fileMenu->addAction ( _exitAction );
|
||||||
|
|
||||||
_viewMenu = menuBar()->addMenu ( tr("View") );
|
_viewMenu = menuBar()->addMenu ( tr("View") );
|
||||||
|
_viewMenu->setObjectName ( "viewer.view" );
|
||||||
_viewMenu->addAction ( _refreshAction );
|
_viewMenu->addAction ( _refreshAction );
|
||||||
_viewMenu->addAction ( _fitToContentsAction );
|
_viewMenu->addAction ( _fitToContentsAction );
|
||||||
_viewMenu->addAction ( _showSelectionAction );
|
_viewMenu->addAction ( _showSelectionAction );
|
||||||
|
|
||||||
_toolsMenu = menuBar()->addMenu ( tr("Tool") );
|
_toolsMenu = menuBar()->addMenu ( tr("Tool") );
|
||||||
|
_toolsMenu->setObjectName ( "viewer.tool" );
|
||||||
_toolsMenu->addAction ( _runInspectorOnDataBase );
|
_toolsMenu->addAction ( _runInspectorOnDataBase );
|
||||||
_toolsMenu->addAction ( _runInspectorOnCell );
|
_toolsMenu->addAction ( _runInspectorOnCell );
|
||||||
_toolsMenu->addAction ( _browseNetlist );
|
_toolsMenu->addAction ( _browseNetlist );
|
||||||
|
@ -225,9 +248,52 @@ namespace Hurricane {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CellViewer::refreshHistory ()
|
||||||
|
{
|
||||||
|
Cell* activeCell = getCell();
|
||||||
|
_cellHistory.remove ( activeCell );
|
||||||
|
|
||||||
|
if ( _cellHistory.size() > CellHistorySize-1 )
|
||||||
|
_cellHistory.pop_front ();
|
||||||
|
_cellHistory.push_back ( activeCell );
|
||||||
|
|
||||||
|
list<Cell*>::iterator iname = _cellHistory.begin();
|
||||||
|
for ( size_t i=0 ; i<CellHistorySize ; i++ ) {
|
||||||
|
if ( iname != _cellHistory.end() ) {
|
||||||
|
QString entry = tr("&%1: %2").arg(i+1).arg( getString((*iname)->getName()).c_str() );
|
||||||
|
_cellHistoryAction[i]->setText ( entry );
|
||||||
|
_cellHistoryAction[i]->setVisible ( true );
|
||||||
|
iname++;
|
||||||
|
} else {
|
||||||
|
_cellHistoryAction[i]->setVisible ( false );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void CellViewer::setCell ( Cell* cell )
|
void CellViewer::setCell ( Cell* cell )
|
||||||
{
|
{
|
||||||
_cellWidget->setCell ( cell );
|
_cellWidget->setCell ( cell );
|
||||||
|
|
||||||
|
QString title
|
||||||
|
= QString("%1:<%2>").arg(_applicationName).arg(getString(cell->getName()).c_str());
|
||||||
|
setWindowTitle ( title );
|
||||||
|
|
||||||
|
refreshHistory ();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Cell* CellViewer::getCell ()
|
||||||
|
{ return getCellWidget()->getCell(); }
|
||||||
|
|
||||||
|
|
||||||
|
Cell* CellViewer::getCellFromDb ( const char* name )
|
||||||
|
{
|
||||||
|
cerr << "[ERROR] virtual function CellViewer::getCellFromDb() has not been overloaded.\n"
|
||||||
|
<< " (this will prevent \"Open Cell\" to work)"
|
||||||
|
<< endl;
|
||||||
|
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -246,6 +312,21 @@ namespace Hurricane {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CellViewer::openHistoryCell ()
|
||||||
|
{
|
||||||
|
QAction* historyAction = qobject_cast<QAction*> ( sender() );
|
||||||
|
if ( historyAction ) {
|
||||||
|
list<Cell*>::iterator icell = _cellHistory.begin();
|
||||||
|
size_t index = historyAction->data().toUInt();
|
||||||
|
|
||||||
|
for ( ; index>0 ; index--, icell++ );
|
||||||
|
|
||||||
|
cerr << "History: " << *icell << endl;
|
||||||
|
setCell ( *icell );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void CellViewer::runInspectorOnDataBase ()
|
void CellViewer::runInspectorOnDataBase ()
|
||||||
{
|
{
|
||||||
runInspector ( getRecord(DataBase::getDB()) );
|
runInspector ( getRecord(DataBase::getDB()) );
|
||||||
|
|
|
@ -50,11 +50,6 @@
|
||||||
// x-----------------------------------------------------------------x
|
// x-----------------------------------------------------------------x
|
||||||
|
|
||||||
|
|
||||||
#include <QAction>
|
|
||||||
#include <QMenu>
|
|
||||||
#include <QMenuBar>
|
|
||||||
|
|
||||||
|
|
||||||
# include <QMouseEvent>
|
# include <QMouseEvent>
|
||||||
# include <QKeyEvent>
|
# include <QKeyEvent>
|
||||||
# include <QAction>
|
# include <QAction>
|
||||||
|
@ -135,7 +130,10 @@ namespace Hurricane {
|
||||||
|
|
||||||
CellWidget::DrawingPlanes::DrawingPlanes ( const QSize& size, CellWidget* cw )
|
CellWidget::DrawingPlanes::DrawingPlanes ( const QSize& size, CellWidget* cw )
|
||||||
: _cellWidget(cw)
|
: _cellWidget(cw)
|
||||||
|
, _normalPen()
|
||||||
|
, _linePen()
|
||||||
, _workingPlane(0)
|
, _workingPlane(0)
|
||||||
|
, _lineMode(false)
|
||||||
{
|
{
|
||||||
for ( size_t i=0 ; i<2 ; i++ )
|
for ( size_t i=0 ; i<2 ; i++ )
|
||||||
_planes[i] = new QPixmap ( size );
|
_planes[i] = new QPixmap ( size );
|
||||||
|
@ -151,6 +149,40 @@ namespace Hurricane {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CellWidget::DrawingPlanes::setPen ( const QPen& pen )
|
||||||
|
{
|
||||||
|
_normalPen = pen;
|
||||||
|
_linePen = pen;
|
||||||
|
_linePen.setStyle ( Qt::SolidLine );
|
||||||
|
_linePen.setWidth ( 1 );
|
||||||
|
|
||||||
|
if ( _lineMode ) {
|
||||||
|
_painters[0].setPen ( _linePen );
|
||||||
|
_painters[1].setPen ( _linePen );
|
||||||
|
} else {
|
||||||
|
_painters[0].setPen ( _normalPen );
|
||||||
|
_painters[1].setPen ( _normalPen );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CellWidget::DrawingPlanes::setBrush ( const QBrush& brush )
|
||||||
|
{
|
||||||
|
_painters[0].setBrush ( brush );
|
||||||
|
_painters[1].setBrush ( brush );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CellWidget::DrawingPlanes::setLineMode ( bool mode )
|
||||||
|
{
|
||||||
|
if ( _lineMode != mode ) {
|
||||||
|
_lineMode = mode;
|
||||||
|
if ( _lineMode ) painter().setPen ( _linePen );
|
||||||
|
else painter().setPen ( _normalPen );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void CellWidget::DrawingPlanes::resize ( const QSize& size )
|
void CellWidget::DrawingPlanes::resize ( const QSize& size )
|
||||||
{
|
{
|
||||||
for ( size_t i=0 ; i<2 ; i++ ) {
|
for ( size_t i=0 ; i<2 ; i++ ) {
|
||||||
|
@ -230,6 +262,71 @@ namespace Hurricane {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------
|
||||||
|
// Class : "Hurricane::CellWidget::DrawingQuery".
|
||||||
|
|
||||||
|
|
||||||
|
CellWidget::DrawingQuery::DrawingQuery ( CellWidget* widget )
|
||||||
|
: Query()
|
||||||
|
,_cellWidget(widget)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
|
||||||
|
bool CellWidget::DrawingQuery::hasMasterCellCallback () const
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CellWidget::DrawingQuery::masterCellCallback ()
|
||||||
|
{
|
||||||
|
_cellWidget->drawBox ( getTransformation().getBox(getMasterCell()->getAbutmentBox()) );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool CellWidget::DrawingQuery::hasGoCallback () const
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CellWidget::DrawingQuery::goCallback ( Go* go )
|
||||||
|
{
|
||||||
|
drawGo ( go, getBasicLayer(), getArea(), getTransformation() );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CellWidget::DrawingQuery::drawGo ( const Go* go
|
||||||
|
, const BasicLayer* basicLayer
|
||||||
|
, const Box& area
|
||||||
|
, const Transformation& transformation
|
||||||
|
)
|
||||||
|
{
|
||||||
|
const Segment* segment = dynamic_cast<const Segment*>(go);
|
||||||
|
if ( segment ) {
|
||||||
|
if ( 1 < _cellWidget->dbuToDisplayLength(segment->getWidth()) ) {
|
||||||
|
_cellWidget->drawBox ( transformation.getBox(segment->getBoundingBox(basicLayer)) );
|
||||||
|
} else {
|
||||||
|
_cellWidget->drawLine ( transformation.getPoint(segment->getSourcePosition())
|
||||||
|
, transformation.getPoint(segment->getTargetPosition()) );
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const Contact* contact = dynamic_cast<const Contact*>(go);
|
||||||
|
if ( contact ) {
|
||||||
|
_cellWidget->drawBox ( transformation.getBox(contact->getBoundingBox(basicLayer)) );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const Pad* pad = dynamic_cast<const Pad*>(go);
|
||||||
|
if ( pad ) {
|
||||||
|
_cellWidget->drawBox ( transformation.getBox(pad->getBoundingBox(basicLayer)) );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
// Class : "Hurricane::CellWidget".
|
// Class : "Hurricane::CellWidget".
|
||||||
|
|
||||||
|
@ -245,6 +342,7 @@ namespace Hurricane {
|
||||||
, _scale(1.0)
|
, _scale(1.0)
|
||||||
, _offsetVA(_stripWidth,_stripWidth)
|
, _offsetVA(_stripWidth,_stripWidth)
|
||||||
, _drawingPlanes(QSize(6*_stripWidth,6*_stripWidth),this)
|
, _drawingPlanes(QSize(6*_stripWidth,6*_stripWidth),this)
|
||||||
|
, _drawingQuery(this)
|
||||||
, _lastMousePosition(0,0)
|
, _lastMousePosition(0,0)
|
||||||
, _spot(this)
|
, _spot(this)
|
||||||
, _cell(NULL)
|
, _cell(NULL)
|
||||||
|
@ -325,6 +423,7 @@ namespace Hurricane {
|
||||||
{
|
{
|
||||||
if ( state != _showSelection ) {
|
if ( state != _showSelection ) {
|
||||||
_showSelection = state;
|
_showSelection = state;
|
||||||
|
_selectionHasChanged = false;
|
||||||
redraw ();
|
redraw ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -332,13 +431,16 @@ namespace Hurricane {
|
||||||
|
|
||||||
void CellWidget::redraw ( QRect redrawArea )
|
void CellWidget::redraw ( QRect redrawArea )
|
||||||
{
|
{
|
||||||
//cerr << "CellWidget::redraw()" << endl;
|
cerr << "CellWidget::redraw() - " << _selectionHasChanged << endl;
|
||||||
|
|
||||||
|
//_drawingQuery.setStartLevel ( 1 );
|
||||||
|
//_drawingQuery.setStopLevel ( 2 );
|
||||||
|
|
||||||
_redrawRectCount = 0;
|
_redrawRectCount = 0;
|
||||||
|
|
||||||
pushCursor ( Qt::BusyCursor );
|
pushCursor ( Qt::BusyCursor );
|
||||||
|
|
||||||
if ( !_selectionHasChanged ) {
|
if ( ! ( _selectionHasChanged && _showSelection ) ) {
|
||||||
_spot.setRestore ( false );
|
_spot.setRestore ( false );
|
||||||
_drawingPlanes.select ( 0 );
|
_drawingPlanes.select ( 0 );
|
||||||
_drawingPlanes.painterBegin ();
|
_drawingPlanes.painterBegin ();
|
||||||
|
@ -351,21 +453,31 @@ namespace Hurricane {
|
||||||
int darkening = (_showSelection) ? 200 : 100;
|
int darkening = (_showSelection) ? 200 : 100;
|
||||||
|
|
||||||
if ( _cell ) {
|
if ( _cell ) {
|
||||||
|
|
||||||
Box redrawBox = displayToDbuBox ( redrawArea );
|
Box redrawBox = displayToDbuBox ( redrawArea );
|
||||||
|
|
||||||
for_each_basic_layer ( basicLayer, _technology->getBasicLayers() ) {
|
_drawingQuery.setArea ( redrawBox );
|
||||||
_drawingPlanes.painter().setPen ( Graphics::getPen (basicLayer->getName(),darkening) );
|
_drawingQuery.setTransformation ( Transformation() );
|
||||||
_drawingPlanes.painter().setBrush ( Graphics::getBrush(basicLayer->getName(),darkening) );
|
|
||||||
|
|
||||||
if ( isDrawable(basicLayer->getName()) )
|
forEach ( BasicLayer*, iLayer, _technology->getBasicLayers() ) {
|
||||||
drawCell ( _cell, basicLayer, redrawBox, Transformation() );
|
_drawingPlanes.setPen ( Graphics::getPen ((*iLayer)->getName(),darkening));
|
||||||
end_for;
|
_drawingPlanes.setBrush ( Graphics::getBrush((*iLayer)->getName(),darkening) );
|
||||||
|
|
||||||
|
if ( isDrawable((*iLayer)->getName()) ) {
|
||||||
|
//drawCell ( _cell, (*iLayer), redrawBox, Transformation() );
|
||||||
|
_drawingQuery.setBasicLayer ( *iLayer );
|
||||||
|
_drawingQuery.setFilter ( Query::DoComponents );
|
||||||
|
_drawingQuery.doQuery ();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if ( isDrawable("boundaries") ) {
|
if ( isDrawable("boundaries") ) {
|
||||||
_drawingPlanes.painter().setPen ( Graphics::getPen ("boundaries") );
|
_drawingPlanes.setPen ( Graphics::getPen ("boundaries") );
|
||||||
_drawingPlanes.painter().setBrush ( Graphics::getBrush("boundaries") );
|
_drawingPlanes.setBrush ( Graphics::getBrush("boundaries") );
|
||||||
|
|
||||||
drawBoundaries ( _cell, redrawBox, Transformation() );
|
//drawBoundaries ( _cell, redrawBox, Transformation() );
|
||||||
|
_drawingQuery.setBasicLayer ( NULL );
|
||||||
|
_drawingQuery.setFilter ( Query::DoMasterCells );
|
||||||
|
_drawingQuery.doQuery ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -386,8 +498,6 @@ namespace Hurricane {
|
||||||
|
|
||||||
void CellWidget::redrawSelection ( QRect redrawArea )
|
void CellWidget::redrawSelection ( QRect redrawArea )
|
||||||
{
|
{
|
||||||
cerr << "CellWidget::redrawSelection()" << endl;
|
|
||||||
|
|
||||||
_drawingPlanes.copyToSelect ( redrawArea.x()
|
_drawingPlanes.copyToSelect ( redrawArea.x()
|
||||||
, redrawArea.y()
|
, redrawArea.y()
|
||||||
, redrawArea.width()
|
, redrawArea.width()
|
||||||
|
@ -404,10 +514,10 @@ namespace Hurricane {
|
||||||
Box redrawBox = displayToDbuBox ( redrawArea );
|
Box redrawBox = displayToDbuBox ( redrawArea );
|
||||||
|
|
||||||
for_each_basic_layer ( basicLayer, _technology->getBasicLayers() ) {
|
for_each_basic_layer ( basicLayer, _technology->getBasicLayers() ) {
|
||||||
if ( !isDrawable(basicLayer->getName()) ) continue;
|
//if ( !isDrawable(basicLayer->getName()) ) continue;
|
||||||
|
|
||||||
_drawingPlanes.painter().setPen ( Graphics::getPen (basicLayer->getName()) );
|
_drawingPlanes.setPen ( Graphics::getPen (basicLayer->getName()) );
|
||||||
_drawingPlanes.painter().setBrush ( Graphics::getBrush(basicLayer->getName()) );
|
_drawingPlanes.setBrush ( Graphics::getBrush(basicLayer->getName()) );
|
||||||
|
|
||||||
set<Selector*>::iterator iselector = _selectors.begin ();
|
set<Selector*>::iterator iselector = _selectors.begin ();
|
||||||
for ( ; iselector != _selectors.end() ; iselector++ ) {
|
for ( ; iselector != _selectors.end() ; iselector++ ) {
|
||||||
|
@ -416,11 +526,21 @@ namespace Hurricane {
|
||||||
|
|
||||||
Instance* instance = dynamic_cast<Instance*>(occurrence.getEntity());
|
Instance* instance = dynamic_cast<Instance*>(occurrence.getEntity());
|
||||||
if ( instance ) {
|
if ( instance ) {
|
||||||
drawInstance ( instance, basicLayer, redrawBox, transformation );
|
// Temporary.
|
||||||
|
//drawInstance ( instance, basicLayer, redrawBox, transformation );
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
drawGo ( dynamic_cast<Go*>(occurrence.getEntity()), basicLayer, redrawBox, transformation );
|
Component* component = dynamic_cast<Component*>(occurrence.getEntity());
|
||||||
|
if ( !component ) continue;
|
||||||
|
if ( !component->getLayer() ) continue;
|
||||||
|
if ( !component->getLayer()->contains(basicLayer) ) continue;
|
||||||
|
|
||||||
|
_drawingQuery.drawGo ( dynamic_cast<Go*>(occurrence.getEntity())
|
||||||
|
, basicLayer
|
||||||
|
, redrawBox
|
||||||
|
, transformation
|
||||||
|
);
|
||||||
}
|
}
|
||||||
end_for;
|
end_for;
|
||||||
}
|
}
|
||||||
|
@ -431,34 +551,6 @@ namespace Hurricane {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void CellWidget::drawBoundaries ( const Cell* cell
|
|
||||||
, const Box& redrawArea
|
|
||||||
, const Transformation& transformation
|
|
||||||
)
|
|
||||||
{
|
|
||||||
drawBox ( transformation.getBox(cell->getAbutmentBox()) );
|
|
||||||
for_each_instance ( instance, cell->getInstances() ) {
|
|
||||||
drawBoundaries ( instance, redrawArea, transformation );
|
|
||||||
end_for;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void CellWidget::drawBoundaries ( const Instance* instance
|
|
||||||
, const Box& redrawArea
|
|
||||||
, const Transformation& transformation
|
|
||||||
)
|
|
||||||
{
|
|
||||||
Box masterArea = redrawArea;
|
|
||||||
Transformation masterTransformation = instance->getTransformation();
|
|
||||||
|
|
||||||
instance->getTransformation().getInvert().applyOn ( masterArea );
|
|
||||||
transformation.applyOn ( masterTransformation );
|
|
||||||
|
|
||||||
drawBoundaries ( instance->getMasterCell(), masterArea, masterTransformation );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool CellWidget::isDrawable ( const Name& entryName )
|
bool CellWidget::isDrawable ( const Name& entryName )
|
||||||
{
|
{
|
||||||
HPaletteEntry* entry = (_palette) ? _palette->find(entryName) : NULL;
|
HPaletteEntry* entry = (_palette) ? _palette->find(entryName) : NULL;
|
||||||
|
@ -468,126 +560,17 @@ namespace Hurricane {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void CellWidget::drawCell ( const Cell* cell
|
|
||||||
, const BasicLayer* basicLayer
|
|
||||||
, const Box& redrawArea
|
|
||||||
, const Transformation& transformation
|
|
||||||
)
|
|
||||||
{
|
|
||||||
for_each_instance ( instance, cell->getInstancesUnder(redrawArea) ) {
|
|
||||||
drawInstance ( instance, basicLayer, redrawArea, transformation );
|
|
||||||
end_for;
|
|
||||||
}
|
|
||||||
|
|
||||||
for_each_slice ( slice, cell->getSlices() ) {
|
|
||||||
drawSlice ( slice, basicLayer, redrawArea, transformation );
|
|
||||||
end_for;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void CellWidget::drawInstance ( const Instance* instance
|
|
||||||
, const BasicLayer* basicLayer
|
|
||||||
, const Box& redrawArea
|
|
||||||
, const Transformation& transformation
|
|
||||||
)
|
|
||||||
{
|
|
||||||
Box masterArea = redrawArea;
|
|
||||||
Transformation masterTransformation = instance->getTransformation();
|
|
||||||
|
|
||||||
instance->getTransformation().getInvert().applyOn ( masterArea );
|
|
||||||
transformation.applyOn ( masterTransformation );
|
|
||||||
|
|
||||||
drawCell ( instance->getMasterCell(), basicLayer, masterArea, masterTransformation );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void CellWidget::drawSlice ( const Slice* slice
|
|
||||||
, const BasicLayer* basicLayer
|
|
||||||
, const Box& redrawArea
|
|
||||||
, const Transformation& transformation
|
|
||||||
)
|
|
||||||
{
|
|
||||||
if ( slice->getLayer()->contains(basicLayer) ) {
|
|
||||||
if ( slice->getBoundingBox().intersect(redrawArea) ) {
|
|
||||||
for_each_go ( go, slice->getGosUnder(redrawArea) ) {
|
|
||||||
drawGo ( go, basicLayer, redrawArea, transformation );
|
|
||||||
end_for;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void CellWidget::drawGo ( const Go* go
|
|
||||||
, const BasicLayer* basicLayer
|
|
||||||
, const Box& redrawArea
|
|
||||||
, const Transformation& transformation
|
|
||||||
)
|
|
||||||
{
|
|
||||||
const Segment* segment = dynamic_cast<const Segment*>(go);
|
|
||||||
if (segment) {
|
|
||||||
drawSegment ( segment, basicLayer, redrawArea, transformation );
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const Contact* contact = dynamic_cast<const Contact*>(go);
|
|
||||||
if (contact) {
|
|
||||||
drawContact ( contact, basicLayer, redrawArea, transformation );
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const Pad* pad = dynamic_cast<const Pad*>(go);
|
|
||||||
if (pad) {
|
|
||||||
drawPad ( pad, basicLayer, redrawArea, transformation );
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void CellWidget::drawSegment ( const Segment* segment
|
|
||||||
, const BasicLayer* basicLayer
|
|
||||||
, const Box& redrawArea
|
|
||||||
, const Transformation& transformation
|
|
||||||
)
|
|
||||||
{
|
|
||||||
if ( 1 < dbuToDisplayLength(segment->getWidth()) ) {
|
|
||||||
drawBox ( transformation.getBox(segment->getBoundingBox(basicLayer)) );
|
|
||||||
} else {
|
|
||||||
drawLine ( transformation.getPoint(segment->getSourcePosition()),
|
|
||||||
transformation.getPoint(segment->getTargetPosition()) );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void CellWidget::drawContact ( const Contact* contact
|
|
||||||
, const BasicLayer* basicLayer
|
|
||||||
, const Box& redrawArea
|
|
||||||
, const Transformation& transformation
|
|
||||||
)
|
|
||||||
{
|
|
||||||
drawBox ( transformation.getBox(contact->getBoundingBox(basicLayer)) );
|
|
||||||
}
|
|
||||||
|
|
||||||
void CellWidget::drawPad ( const Pad* pad
|
|
||||||
, const BasicLayer* basicLayer
|
|
||||||
, const Box& redrawArea
|
|
||||||
, const Transformation& transformation
|
|
||||||
)
|
|
||||||
{
|
|
||||||
drawBox ( transformation.getBox(pad->getBoundingBox(basicLayer)) );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void CellWidget::drawBox ( const Box& box )
|
void CellWidget::drawBox ( const Box& box )
|
||||||
{
|
{
|
||||||
_redrawRectCount++;
|
_redrawRectCount++;
|
||||||
|
_drawingPlanes.setLineMode ( false );
|
||||||
_drawingPlanes.painter().drawRect ( dbuToDisplayRect(box) );
|
_drawingPlanes.painter().drawRect ( dbuToDisplayRect(box) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void CellWidget::drawLine ( const Point& p1, const Point& p2 )
|
void CellWidget::drawLine ( const Point& p1, const Point& p2 )
|
||||||
{
|
{
|
||||||
|
_drawingPlanes.setLineMode ( true );
|
||||||
_drawingPlanes.painter().drawLine ( dbuToDisplayPoint(p1), dbuToDisplayPoint(p2) );
|
_drawingPlanes.painter().drawLine ( dbuToDisplayPoint(p1), dbuToDisplayPoint(p2) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -998,6 +981,8 @@ namespace Hurricane {
|
||||||
void CellWidget::setCell ( Cell* cell )
|
void CellWidget::setCell ( Cell* cell )
|
||||||
{
|
{
|
||||||
_cell = cell;
|
_cell = cell;
|
||||||
|
_drawingQuery.setCell ( cell );
|
||||||
|
|
||||||
fitToContents ();
|
fitToContents ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -50,11 +50,6 @@
|
||||||
// x-----------------------------------------------------------------x
|
// x-----------------------------------------------------------------x
|
||||||
|
|
||||||
|
|
||||||
#include <QAction>
|
|
||||||
#include <QMenu>
|
|
||||||
#include <QMenuBar>
|
|
||||||
|
|
||||||
|
|
||||||
# include <cassert>
|
# include <cassert>
|
||||||
|
|
||||||
# include "hurricane/viewer/DisplayStyle.h"
|
# include "hurricane/viewer/DisplayStyle.h"
|
||||||
|
@ -99,8 +94,10 @@ namespace Hurricane {
|
||||||
, _threshold(threshold)
|
, _threshold(threshold)
|
||||||
, _refcount(1)
|
, _refcount(1)
|
||||||
{
|
{
|
||||||
if ( borderWidth )
|
if ( borderWidth ) {
|
||||||
|
_pen.setStyle ( Qt::SolidLine );
|
||||||
_pen.setWidth ( borderWidth );
|
_pen.setWidth ( borderWidth );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
_pen.setStyle ( Qt::NoPen );
|
_pen.setStyle ( Qt::NoPen );
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,11 +50,6 @@
|
||||||
// x-----------------------------------------------------------------x
|
// x-----------------------------------------------------------------x
|
||||||
|
|
||||||
|
|
||||||
#include <QAction>
|
|
||||||
#include <QMenu>
|
|
||||||
#include <QMenuBar>
|
|
||||||
|
|
||||||
|
|
||||||
# include <QFontMetrics>
|
# include <QFontMetrics>
|
||||||
# include <QFont>
|
# include <QFont>
|
||||||
# include <QLabel>
|
# include <QLabel>
|
||||||
|
|
|
@ -50,11 +50,6 @@
|
||||||
// x-----------------------------------------------------------------x
|
// x-----------------------------------------------------------------x
|
||||||
|
|
||||||
|
|
||||||
#include <QAction>
|
|
||||||
#include <QMenu>
|
|
||||||
#include <QMenuBar>
|
|
||||||
|
|
||||||
|
|
||||||
# include <assert.h>
|
# include <assert.h>
|
||||||
|
|
||||||
# include <Qt>
|
# include <Qt>
|
||||||
|
|
|
@ -50,11 +50,6 @@
|
||||||
// x-----------------------------------------------------------------x
|
// x-----------------------------------------------------------------x
|
||||||
|
|
||||||
|
|
||||||
#include <QAction>
|
|
||||||
#include <QMenu>
|
|
||||||
#include <QMenuBar>
|
|
||||||
|
|
||||||
|
|
||||||
# include <QPushButton>
|
# include <QPushButton>
|
||||||
# include <QHBoxLayout>
|
# include <QHBoxLayout>
|
||||||
|
|
||||||
|
|
|
@ -50,10 +50,6 @@
|
||||||
// x-----------------------------------------------------------------x
|
// x-----------------------------------------------------------------x
|
||||||
|
|
||||||
|
|
||||||
#include <QAction>
|
|
||||||
#include <QMenu>
|
|
||||||
#include <QMenuBar>
|
|
||||||
|
|
||||||
#include <QFontMetrics>
|
#include <QFontMetrics>
|
||||||
#include <QComboBox>
|
#include <QComboBox>
|
||||||
#include <QLabel>
|
#include <QLabel>
|
||||||
|
@ -192,6 +188,7 @@ namespace Hurricane {
|
||||||
, _history()
|
, _history()
|
||||||
{
|
{
|
||||||
setAttribute ( Qt::WA_DeleteOnClose );
|
setAttribute ( Qt::WA_DeleteOnClose );
|
||||||
|
setAttribute ( Qt::WA_QuitOnClose, false );
|
||||||
|
|
||||||
_rowHeight = QFontMetrics(Graphics::getFixedFont()).height() + 4;
|
_rowHeight = QFontMetrics(Graphics::getFixedFont()).height() + 4;
|
||||||
|
|
||||||
|
|
|
@ -50,11 +50,6 @@
|
||||||
// x-----------------------------------------------------------------x
|
// x-----------------------------------------------------------------x
|
||||||
|
|
||||||
|
|
||||||
#include <QAction>
|
|
||||||
#include <QMenu>
|
|
||||||
#include <QMenuBar>
|
|
||||||
|
|
||||||
|
|
||||||
# include <QHBoxLayout>
|
# include <QHBoxLayout>
|
||||||
|
|
||||||
# include "hurricane/viewer/DynamicLabel.h"
|
# include "hurricane/viewer/DynamicLabel.h"
|
||||||
|
|
|
@ -38,7 +38,6 @@
|
||||||
// x-----------------------------------------------------------------x
|
// x-----------------------------------------------------------------x
|
||||||
// | |
|
// | |
|
||||||
// | H U R R I C A N E |
|
// | 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 |
|
// | Author : Jean-Paul CHAPUT |
|
||||||
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
|
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
|
||||||
|
@ -50,10 +49,6 @@
|
||||||
// x-----------------------------------------------------------------x
|
// x-----------------------------------------------------------------x
|
||||||
|
|
||||||
|
|
||||||
#include <QAction>
|
|
||||||
#include <QMenu>
|
|
||||||
#include <QMenuBar>
|
|
||||||
|
|
||||||
#include <QFontMetrics>
|
#include <QFontMetrics>
|
||||||
#include <QLabel>
|
#include <QLabel>
|
||||||
#include <QLineEdit>
|
#include <QLineEdit>
|
||||||
|
@ -68,6 +63,7 @@
|
||||||
#include "hurricane/viewer/Graphics.h"
|
#include "hurricane/viewer/Graphics.h"
|
||||||
#include "hurricane/viewer/HNetlistModel.h"
|
#include "hurricane/viewer/HNetlistModel.h"
|
||||||
#include "hurricane/viewer/HNetlist.h"
|
#include "hurricane/viewer/HNetlist.h"
|
||||||
|
#include "hurricane/viewer/HInspectorWidget.h"
|
||||||
|
|
||||||
|
|
||||||
namespace Hurricane {
|
namespace Hurricane {
|
||||||
|
@ -83,6 +79,7 @@ namespace Hurricane {
|
||||||
, _cellWidget(NULL)
|
, _cellWidget(NULL)
|
||||||
{
|
{
|
||||||
setAttribute ( Qt::WA_DeleteOnClose );
|
setAttribute ( Qt::WA_DeleteOnClose );
|
||||||
|
setAttribute ( Qt::WA_QuitOnClose, false );
|
||||||
|
|
||||||
_rowHeight = QFontMetrics(Graphics::getFixedFont()).height() + 4;
|
_rowHeight = QFontMetrics(Graphics::getFixedFont()).height() + 4;
|
||||||
|
|
||||||
|
@ -146,11 +143,8 @@ namespace Hurricane {
|
||||||
|
|
||||||
void HNetlist::keyPressEvent ( QKeyEvent* event )
|
void HNetlist::keyPressEvent ( QKeyEvent* event )
|
||||||
{
|
{
|
||||||
cerr << "keyPressEvent" << endl;
|
if ( event->key() == Qt::Key_I ) { runInspector(_netlistView->currentIndex()); }
|
||||||
|
else {
|
||||||
if ( event->key() == Qt::Key_Left ) {
|
|
||||||
cerr << "Key Left Pressed." << endl;
|
|
||||||
} else {
|
|
||||||
event->ignore();
|
event->ignore();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -162,4 +156,17 @@ namespace Hurricane {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void HNetlist::runInspector ( const QModelIndex& index )
|
||||||
|
{
|
||||||
|
if ( index.isValid() ) {
|
||||||
|
const Net* net = _netlistModel->getNet ( _sortModel->mapToSource(index).row() );
|
||||||
|
|
||||||
|
HInspectorWidget* inspector = new HInspectorWidget ();
|
||||||
|
|
||||||
|
inspector->setRootRecord ( getRecord(net) );
|
||||||
|
inspector->show ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
} // End of Hurricane namespace.
|
} // End of Hurricane namespace.
|
||||||
|
|
|
@ -50,9 +50,6 @@
|
||||||
// x-----------------------------------------------------------------x
|
// x-----------------------------------------------------------------x
|
||||||
|
|
||||||
|
|
||||||
#include <QAction>
|
|
||||||
#include <QMenu>
|
|
||||||
#include <QMenuBar>
|
|
||||||
#include <QFont>
|
#include <QFont>
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
|
|
||||||
|
|
|
@ -50,11 +50,6 @@
|
||||||
// x-----------------------------------------------------------------x
|
// x-----------------------------------------------------------------x
|
||||||
|
|
||||||
|
|
||||||
#include <QAction>
|
|
||||||
#include <QMenu>
|
|
||||||
#include <QMenuBar>
|
|
||||||
|
|
||||||
|
|
||||||
# include <vector>
|
# include <vector>
|
||||||
|
|
||||||
# include <QHBoxLayout>
|
# include <QHBoxLayout>
|
||||||
|
|
|
@ -50,11 +50,6 @@
|
||||||
// x-----------------------------------------------------------------x
|
// x-----------------------------------------------------------------x
|
||||||
|
|
||||||
|
|
||||||
#include <QAction>
|
|
||||||
#include <QMenu>
|
|
||||||
#include <QMenuBar>
|
|
||||||
|
|
||||||
|
|
||||||
# include <QPainter>
|
# include <QPainter>
|
||||||
|
|
||||||
# include "hurricane/viewer/Graphics.h"
|
# include "hurricane/viewer/Graphics.h"
|
||||||
|
|
|
@ -50,11 +50,6 @@
|
||||||
// x-----------------------------------------------------------------x
|
// x-----------------------------------------------------------------x
|
||||||
|
|
||||||
|
|
||||||
#include <QAction>
|
|
||||||
#include <QMenu>
|
|
||||||
#include <QMenuBar>
|
|
||||||
|
|
||||||
|
|
||||||
# include <QCheckBox>
|
# include <QCheckBox>
|
||||||
# include <QHBoxLayout>
|
# include <QHBoxLayout>
|
||||||
|
|
||||||
|
|
|
@ -50,9 +50,6 @@
|
||||||
// x-----------------------------------------------------------------x
|
// x-----------------------------------------------------------------x
|
||||||
|
|
||||||
|
|
||||||
#include <QAction>
|
|
||||||
#include <QMenu>
|
|
||||||
#include <QMenuBar>
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
|
||||||
#include "hurricane/Name.h"
|
#include "hurricane/Name.h"
|
||||||
|
|
|
@ -50,9 +50,6 @@
|
||||||
// x-----------------------------------------------------------------x
|
// x-----------------------------------------------------------------x
|
||||||
|
|
||||||
|
|
||||||
#include <QAction>
|
|
||||||
#include <QMenu>
|
|
||||||
#include <QMenuBar>
|
|
||||||
#include <QFont>
|
#include <QFont>
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
|
|
||||||
|
|
|
@ -50,11 +50,6 @@
|
||||||
// x-----------------------------------------------------------------x
|
// x-----------------------------------------------------------------x
|
||||||
|
|
||||||
|
|
||||||
#include <QAction>
|
|
||||||
#include <QMenu>
|
|
||||||
#include <QMenuBar>
|
|
||||||
|
|
||||||
|
|
||||||
# include <QBitmap>
|
# include <QBitmap>
|
||||||
|
|
||||||
# include "hurricane/BasicLayer.h"
|
# include "hurricane/BasicLayer.h"
|
||||||
|
|
|
@ -50,11 +50,6 @@
|
||||||
// x-----------------------------------------------------------------x
|
// x-----------------------------------------------------------------x
|
||||||
|
|
||||||
|
|
||||||
#include <QAction>
|
|
||||||
#include <QMenu>
|
|
||||||
#include <QMenuBar>
|
|
||||||
|
|
||||||
|
|
||||||
# include <QCheckBox>
|
# include <QCheckBox>
|
||||||
# include <QHBoxLayout>
|
# include <QHBoxLayout>
|
||||||
|
|
||||||
|
|
|
@ -50,15 +50,12 @@
|
||||||
// x-----------------------------------------------------------------x
|
// x-----------------------------------------------------------------x
|
||||||
|
|
||||||
|
|
||||||
#include <QAction>
|
|
||||||
#include <QMenu>
|
|
||||||
#include <QMenuBar>
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef __CELL_VIEWER_H__
|
#ifndef __CELL_VIEWER_H__
|
||||||
#define __CELL_VIEWER_H__
|
#define __CELL_VIEWER_H__
|
||||||
|
|
||||||
|
|
||||||
|
#include <list>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
#include <QMainWindow>
|
#include <QMainWindow>
|
||||||
|
@ -69,6 +66,7 @@ class QAction;
|
||||||
class QMenu;
|
class QMenu;
|
||||||
|
|
||||||
#include "hurricane/Commons.h"
|
#include "hurricane/Commons.h"
|
||||||
|
#include "hurricane/Name.h"
|
||||||
#include "hurricane/Occurrence.h"
|
#include "hurricane/Occurrence.h"
|
||||||
|
|
||||||
|
|
||||||
|
@ -89,21 +87,27 @@ namespace Hurricane {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CellViewer ( QWidget* parent=NULL );
|
CellViewer ( QWidget* parent=NULL );
|
||||||
|
inline void setApplicationName ( const QString& name );
|
||||||
void setCell ( Cell* cell );
|
void setCell ( Cell* cell );
|
||||||
|
Cell* getCell ();
|
||||||
|
virtual Cell* getCellFromDb ( const char* name );
|
||||||
inline CellWidget* getCellWidget ();
|
inline CellWidget* getCellWidget ();
|
||||||
void select ( Occurrence& occurence );
|
void select ( Occurrence& occurence );
|
||||||
void unselect ( Occurrence& occurence );
|
void unselect ( Occurrence& occurence );
|
||||||
void unselectAll ();
|
void unselectAll ();
|
||||||
public slots:
|
public slots:
|
||||||
|
void openHistoryCell ();
|
||||||
void runInspectorOnDataBase ();
|
void runInspectorOnDataBase ();
|
||||||
void runInspectorOnCell ();
|
void runInspectorOnCell ();
|
||||||
void browseNetlist ();
|
void browseNetlist ();
|
||||||
|
|
||||||
|
public:
|
||||||
|
enum { CellHistorySize = 10 };
|
||||||
protected:
|
protected:
|
||||||
|
QString _applicationName;
|
||||||
QAction* _openAction;
|
QAction* _openAction;
|
||||||
QAction* _nextCellAction;
|
|
||||||
QAction* _previousCellAction;
|
|
||||||
QAction* _nextAction;
|
QAction* _nextAction;
|
||||||
|
QAction* _cellHistoryAction[CellHistorySize];
|
||||||
QAction* _saveAction;
|
QAction* _saveAction;
|
||||||
QAction* _exitAction;
|
QAction* _exitAction;
|
||||||
QAction* _refreshAction;
|
QAction* _refreshAction;
|
||||||
|
@ -119,18 +123,20 @@ namespace Hurricane {
|
||||||
HPalette* _palette;
|
HPalette* _palette;
|
||||||
HMousePosition* _mousePosition;
|
HMousePosition* _mousePosition;
|
||||||
CellWidget* _cellWidget;
|
CellWidget* _cellWidget;
|
||||||
|
list<Cell*> _cellHistory;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void createActions ();
|
void createActions ();
|
||||||
void createMenus ();
|
void createMenus ();
|
||||||
void createLayout ();
|
void createLayout ();
|
||||||
|
void refreshHistory ();
|
||||||
void runInspector ( Record* record );
|
void runInspector ( Record* record );
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// Inline Functions.
|
// Inline Functions.
|
||||||
inline CellWidget* CellViewer::getCellWidget ()
|
inline CellWidget* CellViewer::getCellWidget () { return _cellWidget; }
|
||||||
{ return _cellWidget; }
|
inline void CellViewer::setApplicationName ( const QString& name ) { _applicationName = name; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -50,11 +50,6 @@
|
||||||
// x-----------------------------------------------------------------x
|
// x-----------------------------------------------------------------x
|
||||||
|
|
||||||
|
|
||||||
#include <QAction>
|
|
||||||
#include <QMenu>
|
|
||||||
#include <QMenuBar>
|
|
||||||
|
|
||||||
|
|
||||||
# ifndef __CELL_WIDGET_H__
|
# ifndef __CELL_WIDGET_H__
|
||||||
# define __CELL_WIDGET_H__
|
# define __CELL_WIDGET_H__
|
||||||
|
|
||||||
|
@ -79,6 +74,7 @@ class QAction;
|
||||||
# include "hurricane/Point.h"
|
# include "hurricane/Point.h"
|
||||||
# include "hurricane/Box.h"
|
# include "hurricane/Box.h"
|
||||||
# include "hurricane/Transformation.h"
|
# include "hurricane/Transformation.h"
|
||||||
|
# include "hurricane/Query.h"
|
||||||
|
|
||||||
# include "hurricane/viewer/DisplayStyle.h"
|
# include "hurricane/viewer/DisplayStyle.h"
|
||||||
# include "hurricane/viewer/CellWidgets.h"
|
# include "hurricane/viewer/CellWidgets.h"
|
||||||
|
@ -131,16 +127,7 @@ namespace Hurricane {
|
||||||
void unselect ( Occurrence& occurence );
|
void unselect ( Occurrence& occurence );
|
||||||
void unselectAll ( bool delayRedraw=true );
|
void unselectAll ( bool delayRedraw=true );
|
||||||
// Painter control & Hurricane objects drawing primitives.
|
// Painter control & Hurricane objects drawing primitives.
|
||||||
void drawBoundaries ( const Cell* , const Box&, const Transformation& );
|
|
||||||
void drawBoundaries ( const Instance*, const Box&, const Transformation& );
|
|
||||||
bool isDrawable ( const Name& entryName );
|
bool isDrawable ( const Name& entryName );
|
||||||
void drawCell ( const Cell* , const BasicLayer*, const Box&, const Transformation& );
|
|
||||||
void drawInstance ( const Instance*, const BasicLayer*, const Box&, const Transformation& );
|
|
||||||
void drawSlice ( const Slice* , const BasicLayer*, const Box&, const Transformation& );
|
|
||||||
void drawGo ( const Go* , const BasicLayer*, const Box&, const Transformation& );
|
|
||||||
void drawSegment ( const Segment* , const BasicLayer*, const Box&, const Transformation& );
|
|
||||||
void drawContact ( const Contact* , const BasicLayer*, const Box&, const Transformation& );
|
|
||||||
void drawPad ( const Pad* , const BasicLayer*, const Box&, const Transformation& );
|
|
||||||
void drawBox ( const Box& );
|
void drawBox ( const Box& );
|
||||||
void drawLine ( const Point&, const Point& );
|
void drawLine ( const Point&, const Point& );
|
||||||
void drawGrid ();
|
void drawGrid ();
|
||||||
|
@ -217,6 +204,7 @@ namespace Hurricane {
|
||||||
public:
|
public:
|
||||||
DrawingPlanes ( const QSize& size, CellWidget* cw );
|
DrawingPlanes ( const QSize& size, CellWidget* cw );
|
||||||
~DrawingPlanes ();
|
~DrawingPlanes ();
|
||||||
|
inline bool getLineMode () const;
|
||||||
inline int width () const;
|
inline int width () const;
|
||||||
inline int height () const;
|
inline int height () const;
|
||||||
inline QSize size () const;
|
inline QSize size () const;
|
||||||
|
@ -231,6 +219,9 @@ namespace Hurricane {
|
||||||
inline void painterEnd ();
|
inline void painterEnd ();
|
||||||
inline void painterEnd ( size_t i );
|
inline void painterEnd ( size_t i );
|
||||||
inline void paintersEnd ();
|
inline void paintersEnd ();
|
||||||
|
void setLineMode ( bool mode );
|
||||||
|
void setPen ( const QPen& pen );
|
||||||
|
void setBrush ( const QBrush& brush );
|
||||||
void resize ( const QSize& size );
|
void resize ( const QSize& size );
|
||||||
void shiftLeft ( int dx );
|
void shiftLeft ( int dx );
|
||||||
void shiftRight ( int dx );
|
void shiftRight ( int dx );
|
||||||
|
@ -244,12 +235,38 @@ namespace Hurricane {
|
||||||
CellWidget* _cellWidget;
|
CellWidget* _cellWidget;
|
||||||
QPixmap* _planes[2];
|
QPixmap* _planes[2];
|
||||||
QPainter _painters[3];
|
QPainter _painters[3];
|
||||||
|
QPen _normalPen;
|
||||||
|
QPen _linePen;
|
||||||
size_t _workingPlane;
|
size_t _workingPlane;
|
||||||
|
bool _lineMode;
|
||||||
private:
|
private:
|
||||||
DrawingPlanes ( const DrawingPlanes& );
|
DrawingPlanes ( const DrawingPlanes& );
|
||||||
DrawingPlanes& operator= ( const DrawingPlanes& );
|
DrawingPlanes& operator= ( const DrawingPlanes& );
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private:
|
||||||
|
class DrawingQuery : public Query {
|
||||||
|
public:
|
||||||
|
DrawingQuery ( CellWidget* widget );
|
||||||
|
inline void setQuery ( const Box& area
|
||||||
|
, const Transformation& transformation
|
||||||
|
, const BasicLayer* basicLayer
|
||||||
|
, unsigned int filter
|
||||||
|
);
|
||||||
|
virtual bool hasMasterCellCallback () const;
|
||||||
|
virtual bool hasGoCallback () const;
|
||||||
|
virtual void masterCellCallback ();
|
||||||
|
virtual void goCallback ( Go* go );
|
||||||
|
void drawGo ( const Go* go
|
||||||
|
, const BasicLayer* basicLayer
|
||||||
|
, const Box& area
|
||||||
|
, const Transformation& transformation
|
||||||
|
);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
CellWidget* _cellWidget;
|
||||||
|
};
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// Internal: Attributes.
|
// Internal: Attributes.
|
||||||
static const int _stripWidth;
|
static const int _stripWidth;
|
||||||
|
@ -262,6 +279,7 @@ namespace Hurricane {
|
||||||
float _scale;
|
float _scale;
|
||||||
QPoint _offsetVA;
|
QPoint _offsetVA;
|
||||||
DrawingPlanes _drawingPlanes;
|
DrawingPlanes _drawingPlanes;
|
||||||
|
DrawingQuery _drawingQuery;
|
||||||
QPoint _lastMousePosition;
|
QPoint _lastMousePosition;
|
||||||
Spot _spot;
|
Spot _spot;
|
||||||
Cell* _cell;
|
Cell* _cell;
|
||||||
|
@ -276,6 +294,18 @@ namespace Hurricane {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
inline void CellWidget::DrawingQuery::setQuery ( const Box& area
|
||||||
|
, const Transformation& transformation
|
||||||
|
, const BasicLayer* basicLayer
|
||||||
|
, unsigned int filter
|
||||||
|
)
|
||||||
|
{ Query::setQuery ( _cellWidget->getCell(), area, transformation, basicLayer, filter ); }
|
||||||
|
|
||||||
|
|
||||||
|
inline bool CellWidget::DrawingPlanes::getLineMode () const
|
||||||
|
{ return _lineMode; }
|
||||||
|
|
||||||
|
|
||||||
inline int CellWidget::DrawingPlanes::width () const
|
inline int CellWidget::DrawingPlanes::width () const
|
||||||
{ return _planes[0]->width(); }
|
{ return _planes[0]->width(); }
|
||||||
|
|
||||||
|
|
|
@ -50,11 +50,6 @@
|
||||||
// x-----------------------------------------------------------------x
|
// x-----------------------------------------------------------------x
|
||||||
|
|
||||||
|
|
||||||
#include <QAction>
|
|
||||||
#include <QMenu>
|
|
||||||
#include <QMenuBar>
|
|
||||||
|
|
||||||
|
|
||||||
# ifndef __DISPLAYSTYLE_H__
|
# ifndef __DISPLAYSTYLE_H__
|
||||||
# define __DISPLAYSTYLE_H__
|
# define __DISPLAYSTYLE_H__
|
||||||
|
|
||||||
|
|
|
@ -50,11 +50,6 @@
|
||||||
// x-----------------------------------------------------------------x
|
// x-----------------------------------------------------------------x
|
||||||
|
|
||||||
|
|
||||||
#include <QAction>
|
|
||||||
#include <QMenu>
|
|
||||||
#include <QMenuBar>
|
|
||||||
|
|
||||||
|
|
||||||
# ifndef __DYNAMIC_LABEL_H__
|
# ifndef __DYNAMIC_LABEL_H__
|
||||||
# define __DYNAMIC_LABEL_H__
|
# define __DYNAMIC_LABEL_H__
|
||||||
|
|
||||||
|
|
|
@ -50,11 +50,6 @@
|
||||||
// x-----------------------------------------------------------------x
|
// x-----------------------------------------------------------------x
|
||||||
|
|
||||||
|
|
||||||
#include <QAction>
|
|
||||||
#include <QMenu>
|
|
||||||
#include <QMenuBar>
|
|
||||||
|
|
||||||
|
|
||||||
# ifndef __GRAPHICS_H__
|
# ifndef __GRAPHICS_H__
|
||||||
# define __GRAPHICS_H__
|
# define __GRAPHICS_H__
|
||||||
|
|
||||||
|
|
|
@ -50,11 +50,6 @@
|
||||||
// x-----------------------------------------------------------------x
|
// x-----------------------------------------------------------------x
|
||||||
|
|
||||||
|
|
||||||
#include <QAction>
|
|
||||||
#include <QMenu>
|
|
||||||
#include <QMenuBar>
|
|
||||||
|
|
||||||
|
|
||||||
# ifndef __GROUP_HPALETTE_ENTRY_H__
|
# ifndef __GROUP_HPALETTE_ENTRY_H__
|
||||||
# define __GROUP_HPALETTE_ENTRY_H__
|
# define __GROUP_HPALETTE_ENTRY_H__
|
||||||
|
|
||||||
|
|
|
@ -50,9 +50,6 @@
|
||||||
// x-----------------------------------------------------------------x
|
// x-----------------------------------------------------------------x
|
||||||
|
|
||||||
|
|
||||||
#include <QAction>
|
|
||||||
#include <QMenu>
|
|
||||||
#include <QMenuBar>
|
|
||||||
#ifndef __HINSPECTOR_WIDGET_H__
|
#ifndef __HINSPECTOR_WIDGET_H__
|
||||||
#define __HINSPECTOR_WIDGET_H__
|
#define __HINSPECTOR_WIDGET_H__
|
||||||
|
|
||||||
|
|
|
@ -50,11 +50,6 @@
|
||||||
// x-----------------------------------------------------------------x
|
// x-----------------------------------------------------------------x
|
||||||
|
|
||||||
|
|
||||||
#include <QAction>
|
|
||||||
#include <QMenu>
|
|
||||||
#include <QMenuBar>
|
|
||||||
|
|
||||||
|
|
||||||
# ifndef __HMOUSE_POSITION_H__
|
# ifndef __HMOUSE_POSITION_H__
|
||||||
# define __HMOUSE_POSITION_H__
|
# define __HMOUSE_POSITION_H__
|
||||||
|
|
||||||
|
|
|
@ -50,9 +50,6 @@
|
||||||
// x-----------------------------------------------------------------x
|
// x-----------------------------------------------------------------x
|
||||||
|
|
||||||
|
|
||||||
#include <QAction>
|
|
||||||
#include <QMenu>
|
|
||||||
#include <QMenuBar>
|
|
||||||
#ifndef __HNETLIST_WIDGET_H__
|
#ifndef __HNETLIST_WIDGET_H__
|
||||||
#define __HNETLIST_WIDGET_H__
|
#define __HNETLIST_WIDGET_H__
|
||||||
|
|
||||||
|
@ -90,6 +87,7 @@ namespace Hurricane {
|
||||||
void setCell ( Cell* cell );
|
void setCell ( Cell* cell );
|
||||||
template<typename InformationType>
|
template<typename InformationType>
|
||||||
void setCellWidget ( CellWidget* cw );
|
void setCellWidget ( CellWidget* cw );
|
||||||
|
void runInspector ( const QModelIndex& index );
|
||||||
private slots:
|
private slots:
|
||||||
void textFilterChanged ();
|
void textFilterChanged ();
|
||||||
void selectNet ( const QModelIndex& index );
|
void selectNet ( const QModelIndex& index );
|
||||||
|
|
|
@ -50,9 +50,6 @@
|
||||||
// x-----------------------------------------------------------------x
|
// x-----------------------------------------------------------------x
|
||||||
|
|
||||||
|
|
||||||
#include <QAction>
|
|
||||||
#include <QMenu>
|
|
||||||
#include <QMenuBar>
|
|
||||||
#ifndef __NETLIST_MODEL_H__
|
#ifndef __NETLIST_MODEL_H__
|
||||||
#define __NETLIST_MODEL_H__
|
#define __NETLIST_MODEL_H__
|
||||||
|
|
||||||
|
|
|
@ -50,11 +50,6 @@
|
||||||
// x-----------------------------------------------------------------x
|
// x-----------------------------------------------------------------x
|
||||||
|
|
||||||
|
|
||||||
#include <QAction>
|
|
||||||
#include <QMenu>
|
|
||||||
#include <QMenuBar>
|
|
||||||
|
|
||||||
|
|
||||||
# ifndef __HPALETTE__
|
# ifndef __HPALETTE__
|
||||||
# define __HPALETTE__
|
# define __HPALETTE__
|
||||||
|
|
||||||
|
|
|
@ -50,11 +50,6 @@
|
||||||
// x-----------------------------------------------------------------x
|
// x-----------------------------------------------------------------x
|
||||||
|
|
||||||
|
|
||||||
#include <QAction>
|
|
||||||
#include <QMenu>
|
|
||||||
#include <QMenuBar>
|
|
||||||
|
|
||||||
|
|
||||||
# ifndef __PALETTE_ENTRY_H__
|
# ifndef __PALETTE_ENTRY_H__
|
||||||
# define __PALETTE_ENTRY_H__
|
# define __PALETTE_ENTRY_H__
|
||||||
|
|
||||||
|
|
|
@ -50,11 +50,6 @@
|
||||||
// x-----------------------------------------------------------------x
|
// x-----------------------------------------------------------------x
|
||||||
|
|
||||||
|
|
||||||
#include <QAction>
|
|
||||||
#include <QMenu>
|
|
||||||
#include <QMenuBar>
|
|
||||||
|
|
||||||
|
|
||||||
# ifndef __LAYER_PALETTE_ENTRY_H__
|
# ifndef __LAYER_PALETTE_ENTRY_H__
|
||||||
# define __LAYER_PALETTE_ENTRY_H__
|
# define __LAYER_PALETTE_ENTRY_H__
|
||||||
|
|
||||||
|
|
|
@ -50,9 +50,6 @@
|
||||||
// x-----------------------------------------------------------------x
|
// x-----------------------------------------------------------------x
|
||||||
|
|
||||||
|
|
||||||
#include <QAction>
|
|
||||||
#include <QMenu>
|
|
||||||
#include <QMenuBar>
|
|
||||||
#ifndef __NET_INFORMATIONS_H__
|
#ifndef __NET_INFORMATIONS_H__
|
||||||
#define __NET_INFORMATIONS_H__
|
#define __NET_INFORMATIONS_H__
|
||||||
|
|
||||||
|
|
|
@ -50,9 +50,6 @@
|
||||||
// x-----------------------------------------------------------------x
|
// x-----------------------------------------------------------------x
|
||||||
|
|
||||||
|
|
||||||
#include <QAction>
|
|
||||||
#include <QMenu>
|
|
||||||
#include <QMenuBar>
|
|
||||||
#ifndef __RECORD_MODEL_H__
|
#ifndef __RECORD_MODEL_H__
|
||||||
#define __RECORD_MODEL_H__
|
#define __RECORD_MODEL_H__
|
||||||
|
|
||||||
|
|
|
@ -50,11 +50,6 @@
|
||||||
// x-----------------------------------------------------------------x
|
// x-----------------------------------------------------------------x
|
||||||
|
|
||||||
|
|
||||||
#include <QAction>
|
|
||||||
#include <QMenu>
|
|
||||||
#include <QMenuBar>
|
|
||||||
|
|
||||||
|
|
||||||
# ifndef __SCREENUTILITIES_H__
|
# ifndef __SCREENUTILITIES_H__
|
||||||
# define __SCREENUTILITIES_H__
|
# define __SCREENUTILITIES_H__
|
||||||
|
|
||||||
|
|
|
@ -50,11 +50,6 @@
|
||||||
// x-----------------------------------------------------------------x
|
// x-----------------------------------------------------------------x
|
||||||
|
|
||||||
|
|
||||||
#include <QAction>
|
|
||||||
#include <QMenu>
|
|
||||||
#include <QMenuBar>
|
|
||||||
|
|
||||||
|
|
||||||
# ifndef __VIEWER_PALETTE_ENTRY_H__
|
# ifndef __VIEWER_PALETTE_ENTRY_H__
|
||||||
# define __VIEWER_PALETTE_ENTRY_H__
|
# define __VIEWER_PALETTE_ENTRY_H__
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue