diff --git a/hurricane/src/hviewer/ControllerWidget.cpp b/hurricane/src/hviewer/ControllerWidget.cpp new file mode 100644 index 00000000..609c2150 --- /dev/null +++ b/hurricane/src/hviewer/ControllerWidget.cpp @@ -0,0 +1,434 @@ + +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC/LIP6 2008-2008, All Rights Reserved +// +// =================================================================== +// +// $Id$ +// +// x-----------------------------------------------------------------x +// | | +// | C O R I O L I S | +// | V L S I B a c k e n d D a t a - B a s e | +// | | +// | Author : Jean-Paul CHAPUT | +// | E-mail : Jean-Paul.Chaput@asim.lip6.fr | +// | =============================================================== | +// | C++ Module : "./ControllerWidget.cpp" | +// | *************************************************************** | +// | U p d a t e s | +// | | +// x-----------------------------------------------------------------x + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +namespace Hurricane { + + +// ------------------------------------------------------------------- +// Class : "Hurricane::ControllerTab". + + + ControllerTab::ControllerTab ( QWidget* parent ) + : QWidget(parent) + , _cellWidget(NULL) + { } + + + void ControllerTab::setCellWidget ( CellWidget* cellWidget ) + { + _cellWidget = cellWidget; + } + + + void ControllerTab::setCell ( Cell* ) + { } + + + void ControllerTab::updateTab () + { } + + + void ControllerTab::cellPreModificate () + { } + + + void ControllerTab::cellPostModificate () + { } + + +// ------------------------------------------------------------------- +// Class : "Hurricane::TabNetlist". + + + TabNetlist::TabNetlist ( QWidget* parent ) + : ControllerTab (parent) + , _netlistBrowser(new NetlistWidget()) + , _synchronize (new QCheckBox()) + { + _netlistBrowser->setObjectName ( "controller.tabNetlist.netlistBrowser" ); + + QVBoxLayout* wLayout = new QVBoxLayout (); + wLayout->setContentsMargins ( 10, 0, 10, 0 ); + wLayout->setSpacing ( 0 ); + + _synchronize->setText ( tr("Synchronize Netlist") ); + _synchronize->setChecked ( false ); + _synchronize->setFont ( Graphics::getFixedFont(QFont::Bold,false,false) ); + connect ( _synchronize, SIGNAL(toggled(bool)), this, SLOT(setSynchronize(bool)) ); + + QHBoxLayout* commands = new QHBoxLayout (); + commands->setContentsMargins ( 0, 0, 0, 0 ); + commands->addStretch (); + commands->addWidget ( _synchronize ); + commands->addStretch (); + wLayout->addLayout ( commands ); + + QFrame* separator = new QFrame (); + separator->setFrameShape ( QFrame::HLine ); + separator->setFrameShadow ( QFrame::Sunken ); + wLayout->addWidget ( separator ); + wLayout->addWidget ( _netlistBrowser ); + + setLayout ( wLayout ); + } + + + void TabNetlist::setSynchronize ( bool state ) + { + if ( state && getCellWidget() ) { + _netlistBrowser->setCell ( getCellWidget()->getCell() ); + } else { + _netlistBrowser->setCell ( NULL ); + } + } + + + void TabNetlist::setCell ( Cell* cell ) + { + setSynchronize ( _synchronize->isChecked() ); + } + + + void TabNetlist::setCellWidget ( CellWidget* cellWidget ) + { + if ( getCellWidget() != cellWidget ) { + setCellWidget ( cellWidget ); + if ( getCellWidget() ) { + connect ( getCellWidget(), SIGNAL(cellChanged(Cell*)) , this , SLOT(setCell(Cell*)) ); + connect ( _netlistBrowser, SIGNAL(netSelected(const Net*)), getCellWidget(), SLOT(select(const Net*)) ); + } + setSynchronize ( _synchronize->isChecked() ); + } + } + + + void TabNetlist::cellPreModificate () + { + _netlistBrowser->setCell ( NULL ); + } + + + void TabNetlist::cellPostModificate () + { + setSynchronize ( _synchronize->isChecked() ); + } + + +// ------------------------------------------------------------------- +// Class : "Hurricane::TabSelection". + + + TabSelection::TabSelection ( QWidget* parent ) + : QWidget (parent) + , _cellWidget(NULL) + , _selection (new SelectionWidget()) + { + _selection->setObjectName ( "controller.tabSelection.selection" ); + + QVBoxLayout* wLayout = new QVBoxLayout (); + wLayout->setContentsMargins ( 10, 10, 10, 0 ); + wLayout->addWidget ( _selection ); + setLayout ( wLayout ); + } + + + void TabSelection::setCell ( Cell* cell ) + { + _selection->setSelection ( set() ); + } + + + void TabSelection::setCellWidget ( CellWidget* cellWidget ) + { + if ( _cellWidget != cellWidget ) { + _cellWidget = cellWidget; + if ( _cellWidget ) { + connect ( _cellWidget , SIGNAL(cellChanged(Cell*)) + , this , SLOT(setCell(Cell*)) ); + connect ( _cellWidget , SIGNAL(selectionChanged(const set&,Cell*)) + , _selection , SLOT (setSelection (const set&,Cell*)) ); + connect ( _selection , SIGNAL(occurrenceToggled(Occurrence,bool)) + , _cellWidget , SLOT (toggleSelect (Occurrence,bool)) ); + connect ( _cellWidget , SIGNAL(occurrenceToggled(Occurrence)) + , _selection , SLOT (toggleSelection (Occurrence)) ); + connect ( _selection , SIGNAL(cumulativeToggled (bool)) + , _cellWidget , SLOT (setCumulativeSelection(bool)) ); + connect ( _selection , SIGNAL(showSelectionToggled(bool)) + , _cellWidget , SLOT (setShowSelection (bool)) ); + connect ( _cellWidget , SIGNAL(showSelectionToggled(bool)) + , _selection , SLOT (setShowSelection (bool)) ); + connect ( _selection , SIGNAL(selectionCleared()) + , _cellWidget , SLOT (unselectAll ()) ); + } + } + } + + + void TabSelection::updateTab () + { +// if ( _cellWidget && _cellWidget->getCell() ) +// _selection->setSelection ( _cellWidget->getSelectorSet(), _cellWidget->getCell() ); +// else +// _selection->setSelection ( set() ); + } + + + void TabSelection::cellPreModificate () + { + _selection->setSelection ( set() ); + } + + + void TabSelection::cellPostModificate () + { + //updateTab (); + if ( _cellWidget && _cellWidget->getCell() ) + _selection->setSelection ( _cellWidget->getSelectorSet(), _cellWidget->getCell() ); + else + _selection->setSelection ( set() ); + } + + +// ------------------------------------------------------------------- +// Class : "Hurricane::TabInspector". + + + TabInspector::TabInspector ( QWidget* parent ) + : QWidget (parent) + , _cellWidget (NULL) + , _inspectorWidget (new InspectorWidget()) + , _bookmarks (new QComboBox()) + , _selectionRecord (NULL) + , _updateFromSelection(false) + { + _inspectorWidget->setObjectName ( "controller.tabInspector.inspectorWidget" ); + + connect ( _bookmarks, SIGNAL(currentIndexChanged(int)), this, SLOT(bookmarkChanged(int)) ); + + QVBoxLayout* wLayout = new QVBoxLayout (); + wLayout->setContentsMargins ( 10, 10, 10, 0 ); + //wLayout->setSpacing ( 0 ); + + _bookmarks->addItem ( tr("" ) ); + _bookmarks->addItem ( tr("" ) ); + _bookmarks->addItem ( tr("") ); + _bookmarks->addItem ( tr("") ); + + QHBoxLayout* commands = new QHBoxLayout (); + commands->setContentsMargins ( 0, 0, 0, 0 ); + commands->addStretch (); + commands->addWidget ( _bookmarks ); + commands->addStretch (); + wLayout->addLayout ( commands ); + + QFrame* separator = new QFrame (); + separator->setFrameShape ( QFrame::HLine ); + separator->setFrameShadow ( QFrame::Sunken ); + wLayout->addWidget ( separator ); + wLayout->addWidget ( _inspectorWidget ); + + setLayout ( wLayout ); + } + + + void TabInspector::setCell ( Cell* cell ) + { + _bookmarks->setItemText ( 2, getString(cell).c_str() ); + if ( _bookmarks->currentIndex() == 2 ) + emit bookmarkChanged ( 2 ); + } + + + void TabInspector::setCellWidget ( CellWidget* cellWidget ) + { + if ( _cellWidget != cellWidget ) { + _cellWidget = cellWidget; + if ( _cellWidget ) { + connect ( _cellWidget, SIGNAL(cellChanged(Cell*)), this, SLOT(setCell(Cell*)) ); + } + } + } + + + void TabInspector::bookmarkChanged ( int index ) + { + switch ( index ) { + case 0: _inspectorWidget->setRootRecord ( NULL ); break; + case 1: _inspectorWidget->setRootRecord ( getRecord(DataBase::getDB()) ); break; + case 2: + if ( _cellWidget && _cellWidget->getCell() ) + _inspectorWidget->setRootRecord ( getRecord(_cellWidget->getCell()) ); + break; + case 3: + if ( _cellWidget && _cellWidget->getCell() ) + _inspectorWidget->setRootRecord ( _selectionRecord ); + break; + } + } + + + void TabInspector::updateTab () + { + if ( _updateFromSelection && (_bookmarks->currentIndex() == 3) ) + _inspectorWidget->setRootRecord ( _selectionRecord ); + _updateFromSelection = false; + } + + + void TabInspector::setSelectionRecord ( Record* record ) + { + _updateFromSelection = true; + _selectionRecord = record; + } + + + void TabInspector::cellPreModificate () + { + _selectionRecord = NULL; + if ( _bookmarks->currentIndex() > 1 ) + _inspectorWidget->setRootRecord ( NULL ); + } + + + void TabInspector::cellPostModificate () + { + if ( ( _bookmarks->currentIndex() == 2 ) && _cellWidget && _cellWidget->getCell() ) + _inspectorWidget->setRootRecord ( getRecord(_cellWidget->getCell()) ); + } + + +// ------------------------------------------------------------------- +// Class : "Hurricane::ControllerWidget". + + + ControllerWidget::ControllerWidget ( QWidget* parent ) + : QTabWidget (parent) + , _cellWidget (NULL) + , _graphics (new GraphicsWidget()) + , _palette (new PaletteWidget()) + , _displayFilter(new DisplayFilterWidget()) + , _tabNetlist (new TabNetlist()) + , _tabSelection (new TabSelection()) + , _tabInspector (new TabInspector()) + { + setObjectName ( "controller" ); + setAttribute ( Qt::WA_QuitOnClose, false ); + setWindowTitle ( tr("Controller") ); + + //connect ( _netlistBrowser, SIGNAL(destroyed()), this, SLOT(netlistBrowserDestroyed()) ); + + _graphics ->setObjectName ( "controller.graphics" ); + _palette ->setObjectName ( "controller.palette" ); + _displayFilter->setObjectName ( "controller.displayFilter" ); + _tabNetlist ->setObjectName ( "controller.tabNetlist" ); + _tabSelection ->setObjectName ( "controller.tabSelection" ); + _tabInspector ->setObjectName ( "controller.tabInspector" ); + + addTab ( _graphics , "Look" ); + addTab ( _displayFilter , "Filter" ); + addTab ( _palette , "Layers&&Gos" ); + addTab ( _tabNetlist , "Netlist" ); + addTab ( _tabSelection , "Selection" ); + addTab ( _tabInspector , "Inspector" ); + + connect ( this, SIGNAL(currentChanged(int)), this, SLOT(updateTab(int)) ); + //connect ( _tabNetlist->getNetlistBrowser(), SIGNAL(netSelected(const Net*)) + // , _tabSelection , SLOT(setUpdateFromNetlist(const Net*)) ); + connect ( _tabSelection->getSelection() , SIGNAL(inspect(Record*)) + , _tabInspector , SLOT(setSelectionRecord(Record*)) ); + + resize ( 540, 540 ); + } + + + void ControllerWidget::setCellWidget ( CellWidget* widget ) + { + if ( _cellWidget ) + _cellWidget->detachFromPalette (); + + _cellWidget = widget; + if ( _cellWidget ) { + _displayFilter->setCellWidget ( _cellWidget ); + _tabNetlist ->setCellWidget ( _cellWidget ); + _tabSelection ->setCellWidget ( _cellWidget ); + _tabInspector ->setCellWidget ( _cellWidget ); + _cellWidget ->bindToPalette ( _palette ); + + connect ( _graphics , SIGNAL(styleChanged()) , _cellWidget, SLOT(redraw()) ); + connect ( _cellWidget, SIGNAL(cellChanged(Cell*)) , this , SLOT(cellChanged(Cell*)) ); + connect ( _cellWidget, SIGNAL(cellPreModificated()) , this , SLOT(cellPreModificate()) ); + connect ( _cellWidget, SIGNAL(cellPostModificated()), this , SLOT(cellPostModificate()) ); + } + } + + + void ControllerWidget::cellChanged ( Cell* cell ) + { } + + + void ControllerWidget::updateTab ( int index ) + { + switch ( index ) { + case 4: _tabSelection->updateTab (); break; + case 5: _tabInspector->updateTab (); break; + } + } + + + void ControllerWidget::cellPreModificate () + { + _tabInspector ->cellPreModificate (); + _tabSelection ->cellPreModificate (); + _tabNetlist ->cellPreModificate (); + } + + + void ControllerWidget::cellPostModificate () + { + _tabNetlist ->cellPostModificate (); + _tabSelection ->cellPostModificate (); + _tabInspector ->cellPostModificate (); + } + + +} // End of Hurricane namespace. diff --git a/hurricane/src/hviewer/PaletteExtensionGoItem.cpp b/hurricane/src/hviewer/PaletteExtensionGoItem.cpp new file mode 100644 index 00000000..fd4331c3 --- /dev/null +++ b/hurricane/src/hviewer/PaletteExtensionGoItem.cpp @@ -0,0 +1,85 @@ + +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC/LIP6 2008-2008, All Rights Reserved +// +// =================================================================== +// +// $Id$ +// +// x-----------------------------------------------------------------x +// | | +// | H U R R I C A N E | +// | V L S I B a c k e n d D a t a - B a s e | +// | | +// | Author : Jean-Paul CHAPUT | +// | E-mail : Jean-Paul.Chaput@asim.lip6.fr | +// | =============================================================== | +// | C++ Module : "./PaletteExtensionGoItem.cpp" | +// | *************************************************************** | +// | U p d a t e s | +// | | +// x-----------------------------------------------------------------x + + +#include +#include + +#include "hurricane/viewer/Graphics.h" +#include "hurricane/viewer/PaletteExtensionGoItem.h" + + +namespace Hurricane { + + + PaletteExtensionGoItem::PaletteExtensionGoItem ( const Name& name ) + : PaletteItem() + , _name(name) + { } + + + PaletteExtensionGoItem* PaletteExtensionGoItem::create ( const Name& name ) + { + PaletteExtensionGoItem* item = new PaletteExtensionGoItem ( name ); + item->_postCreate (); + return item; + } + + + void PaletteExtensionGoItem::_postCreate () + { + QHBoxLayout* layout = new QHBoxLayout (); + layout->setContentsMargins ( 0, 0, 0, 0 ); + + _checkBox = new QCheckBox ( this ); + _checkBox->setChecked ( false ); + _checkBox->setText ( getString(getName()).c_str() ); + _checkBox->setFont ( Graphics::getFixedFont() ); + layout->addWidget ( _checkBox ); + + setLayout ( layout ); + + connect ( _checkBox, SIGNAL(clicked()), this, SIGNAL(toggled()) ); + } + + + const Name& PaletteExtensionGoItem::getName () const + { + return _name; + } + + + bool PaletteExtensionGoItem::isChecked () const + { + return _checkBox->isChecked (); + } + + + void PaletteExtensionGoItem::setChecked ( bool state ) + { + _checkBox->setChecked ( state ); + } + + +} // End of Hurricane namespace. diff --git a/hurricane/src/hviewer/PaletteItem.cpp b/hurricane/src/hviewer/PaletteItem.cpp new file mode 100644 index 00000000..2d4d3996 --- /dev/null +++ b/hurricane/src/hviewer/PaletteItem.cpp @@ -0,0 +1,81 @@ + +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC/LIP6 2008-2008, All Rights Reserved +// +// =================================================================== +// +// $Id$ +// +// x-----------------------------------------------------------------x +// | | +// | H U R R I C A N E | +// | V L S I B a c k e n d D a t a - B a s e | +// | | +// | Author : Jean-Paul CHAPUT | +// | E-mail : Jean-Paul.Chaput@asim.lip6.fr | +// | =============================================================== | +// | C++ Module : "./PaletteItem.cpp" | +// | *************************************************************** | +// | U p d a t e s | +// | | +// x-----------------------------------------------------------------x + + +# include + +# include "hurricane/viewer/Graphics.h" +# include "hurricane/viewer/PaletteItem.h" + + +namespace Hurricane { + + +// ------------------------------------------------------------------- +// Class : "Hurricane::DrawingStyleSample". + + + DrawingStyleSample::DrawingStyleSample ( PaletteItem* entry ) + : QWidget() + , _sample(QSize(20,20)) + , _entry(entry) + { + setAttribute ( Qt::WA_StaticContents ); + setSizePolicy ( QSizePolicy::Fixed, QSizePolicy::Fixed ); + setFixedSize ( 20, 20 ); + + redraw (); + } + + + void DrawingStyleSample::redraw () + { + QPainter painter ( &_sample ); + + painter.setPen ( Qt::NoPen ); + painter.setBackground ( Graphics::getBrush("background") ); + painter.eraseRect ( 0, 0, 20, 20 ); + painter.setPen ( Graphics::getPen (_entry->getName()) ); + painter.setBrush ( Graphics::getBrush(_entry->getName()) ); + painter.drawRect ( 2, 2, 16, 16 ); + } + + + void DrawingStyleSample::paintEvent ( QPaintEvent* ) + { + QPainter painter ( this ); + painter.drawPixmap ( 0, 0, _sample ); + } + + +// ------------------------------------------------------------------- +// Class : "Hurricane::PaletteItem". + + + PaletteItem::PaletteItem () + : QWidget() + { } + + +} // End of Hurricane namespace. diff --git a/hurricane/src/hviewer/PaletteLayerItem.cpp b/hurricane/src/hviewer/PaletteLayerItem.cpp new file mode 100644 index 00000000..16e6a82f --- /dev/null +++ b/hurricane/src/hviewer/PaletteLayerItem.cpp @@ -0,0 +1,84 @@ + +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC/LIP6 2008-2008, All Rights Reserved +// +// =================================================================== +// +// $Id$ +// +// x-----------------------------------------------------------------x +// | | +// | H U R R I C A N E | +// | V L S I B a c k e n d D a t a - B a s e | +// | | +// | Author : Jean-Paul CHAPUT | +// | E-mail : Jean-Paul.Chaput@asim.lip6.fr | +// | =============================================================== | +// | C++ Module : "./PaletteLayerItem.cpp" | +// | *************************************************************** | +// | U p d a t e s | +// | | +// x-----------------------------------------------------------------x + + +# include +# include + +# include "hurricane/BasicLayer.h" + +# include "hurricane/viewer/Graphics.h" +# include "hurricane/viewer/PaletteLayerItem.h" + + +namespace Hurricane { + + + PaletteLayerItem::PaletteLayerItem ( BasicLayer* basicLayer, bool checked ) + : PaletteItem() + , _basicLayer(basicLayer) + { + QHBoxLayout* layout = new QHBoxLayout (); + layout->setContentsMargins ( 0, 0, 0, 0 ); + + layout->addWidget ( new DrawingStyleSample(this) ); + + _checkBox = new QCheckBox ( this ); + _checkBox->setChecked ( checked ); + _checkBox->setText ( getString(getName()).c_str() ); + _checkBox->setFont ( Graphics::getFixedFont() ); + layout->addWidget ( _checkBox ); + + setLayout ( layout ); + + connect ( _checkBox, SIGNAL(clicked()), this, SIGNAL(toggled()) ); + } + + + PaletteLayerItem* PaletteLayerItem::create ( BasicLayer* basicLayer, bool checked ) + { + PaletteLayerItem* item = new PaletteLayerItem ( basicLayer, checked ); + return item; + } + + + const Name& PaletteLayerItem::getName () const + { + return _basicLayer->getName(); + } + + + bool PaletteLayerItem::isChecked () const + { + return _checkBox->isChecked (); + } + + + void PaletteLayerItem::setChecked ( bool state ) + { + _checkBox->setChecked ( state ); + } + + +} // End of Hurricane namespace. diff --git a/hurricane/src/hviewer/PaletteNamedItem.cpp b/hurricane/src/hviewer/PaletteNamedItem.cpp new file mode 100644 index 00000000..232255ec --- /dev/null +++ b/hurricane/src/hviewer/PaletteNamedItem.cpp @@ -0,0 +1,80 @@ + +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC/LIP6 2008-2008, All Rights Reserved +// +// =================================================================== +// +// $Id$ +// +// x-----------------------------------------------------------------x +// | | +// | H U R R I C A N E | +// | V L S I B a c k e n d D a t a - B a s e | +// | | +// | Author : Jean-Paul CHAPUT | +// | E-mail : Jean-Paul.Chaput@asim.lip6.fr | +// | =============================================================== | +// | C++ Module : "./PaletteNamedItem.cpp" | +// | *************************************************************** | +// | U p d a t e s | +// | | +// x-----------------------------------------------------------------x + + +#include +#include + +#include "hurricane/viewer/Graphics.h" +#include "hurricane/viewer/PaletteNamedItem.h" + + +namespace Hurricane { + + + PaletteNamedItem::PaletteNamedItem ( const Name& name, bool checked ) + : PaletteItem() + , _name(name) + { + QHBoxLayout* layout = new QHBoxLayout (); + layout->setContentsMargins ( 0, 0, 0, 0 ); + + _checkBox = new QCheckBox ( this ); + _checkBox->setChecked ( checked ); + _checkBox->setText ( getString(getName()).c_str() ); + _checkBox->setFont ( Graphics::getFixedFont() ); + layout->addWidget ( _checkBox ); + + setLayout ( layout ); + + connect ( _checkBox, SIGNAL(clicked()), this, SIGNAL(toggled()) ); + } + + + PaletteNamedItem* PaletteNamedItem::create ( const Name& name, bool checked ) + { + PaletteNamedItem* item = new PaletteNamedItem ( name, checked ); + return item; + } + + + const Name& PaletteNamedItem::getName () const + { + return _name; + } + + + bool PaletteNamedItem::isChecked () const + { + return _checkBox->isChecked (); + } + + + void PaletteNamedItem::setChecked ( bool state ) + { + _checkBox->setChecked ( state ); + } + + +} // End of Hurricane namespace. diff --git a/hurricane/src/hviewer/PaletteWidget.cpp b/hurricane/src/hviewer/PaletteWidget.cpp new file mode 100644 index 00000000..84359e56 --- /dev/null +++ b/hurricane/src/hviewer/PaletteWidget.cpp @@ -0,0 +1,360 @@ + +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC/LIP6 2008-2008, All Rights Reserved +// +// =================================================================== +// +// $Id$ +// +// x-----------------------------------------------------------------x +// | | +// | H U R R I C A N E | +// | V L S I B a c k e n d D a t a - B a s e | +// | | +// | Author : Jean-Paul CHAPUT | +// | E-mail : Jean-Paul.Chaput@asim.lip6.fr | +// | =============================================================== | +// | C++ Module : "./PaletteWidget.cpp" | +// | *************************************************************** | +// | U p d a t e s | +// | | +// x-----------------------------------------------------------------x + + +#include +#include +#include +#include +#include +#include + +#include "hurricane/DataBase.h" +#include "hurricane/Technology.h" +#include "hurricane/BasicLayer.h" +#include "hurricane/BasicLayers.h" +#include "hurricane/ExtensionSlice.h" +#include "hurricane/Cell.h" + +#include "hurricane/viewer/Graphics.h" +#include "hurricane/viewer/PaletteItem.h" +#include "hurricane/viewer/PaletteLayerItem.h" +#include "hurricane/viewer/PaletteNamedItem.h" +#include "hurricane/viewer/PaletteWidget.h" + + +namespace { + + + using namespace std; + using namespace Hurricane; + + + class GridBuffer { + public: + GridBuffer ( QGridLayout*, int rowMax, int startRow=0, int startColumn=0 ); + inline int getRow () const; + inline int getColumn () const; + inline int getCurrentRow () const; + void addSection ( QWidget*, Qt::Alignment align=0 ); + void addWidget ( QWidget*, Qt::Alignment align=0 ); + void newColumn (); + void flushWidgets (); + inline bool columnOverload () const; + protected: + QGridLayout* _grid; + int _rowMax; + int _row; + int _column; + vector _widgets; + vector _aligns; + }; + + + GridBuffer::GridBuffer ( QGridLayout* grid, int maxRow, int startRow, int startColumn ) + : _grid(grid) + , _rowMax(maxRow) + , _row(startRow) + , _column(startColumn) + , _widgets() + , _aligns() + { } + + + inline int GridBuffer::getRow () const { return _row; } + inline int GridBuffer::getColumn () const { return _column; } + inline int GridBuffer::getCurrentRow () const { return _widgets.size() + _row; } + inline bool GridBuffer::columnOverload () const { return getCurrentRow() > _rowMax; } + + + void GridBuffer::flushWidgets () + { + if ( columnOverload() ) { + _column++; + _row = 0; + } + + for ( size_t i=0 ; i < _widgets.size() ; ++i ) + _grid->addWidget ( _widgets[i], _row++, _column, _aligns[i] ); + _widgets.clear (); + _aligns.clear (); + } + + + void GridBuffer::newColumn () + { + if ( columnOverload() ) return; + + flushWidgets (); + _column++; + _row = 0; + } + + + void GridBuffer::addWidget ( QWidget* widget, Qt::Alignment align ) + { + _widgets.push_back ( widget ); + _aligns .push_back ( align ); + } + + + void GridBuffer::addSection ( QWidget* widget, Qt::Alignment align ) + { + flushWidgets (); + _widgets.push_back ( widget ); + _aligns .push_back ( align ); + } + + +} // End of anonymous namespace. + + +namespace Hurricane { + + + QWidget* PaletteWidget::_createGroupItem ( const Name& name ) + { + QLabel* groupLabel = new QLabel (); + groupLabel->setText ( getString(name).c_str() ); + groupLabel->setFont ( Graphics::getFixedFont(QFont::Bold,false,false) ); + return groupLabel; + } + + + PaletteNamedItem* PaletteWidget::_createNamedItem ( const Name& name, bool checked ) + { + PaletteNamedItem* item = PaletteNamedItem::create ( name, checked ); + connect ( item, SIGNAL(toggled()), this, SIGNAL(paletteChanged()) ); + return item; + } + + + PaletteLayerItem* PaletteWidget::_createLayerItem ( BasicLayer* layer, bool checked ) + { + PaletteLayerItem* item = PaletteLayerItem::create ( layer, checked ); + connect ( item, SIGNAL(toggled()), this, SIGNAL(paletteChanged()) ); + return item; + } + + + PaletteWidget::PaletteWidget ( QWidget* parent ) : QScrollArea(parent) + , _layerItems() + , _extensionGoItems() + , _showAll(new QPushButton(this)) + , _hideAll(new QPushButton(this)) + , _grid(new QGridLayout()) + , _extensionRow(0) + , _extensionColumn(0) + , _extensionGroup(NULL) + { + setWidgetResizable ( true ); + QVBoxLayout* vLayout = new QVBoxLayout (); + QHBoxLayout* hLayout = new QHBoxLayout (); + + _showAll->setIcon ( QIcon(":/images/palette_show_all.png") ); + _showAll->setFlat ( true ); + + _hideAll->setIcon ( QIcon(":/images/palette_hide_all.png") ); + _hideAll->setFlat ( true ); + + connect ( _showAll, SIGNAL(clicked()), this, SLOT(showAll()) ); + connect ( _hideAll, SIGNAL(clicked()), this, SLOT(hideAll()) ); + + hLayout->addStretch (); + hLayout->addWidget ( _showAll ); + hLayout->addStretch (); + hLayout->addWidget ( _hideAll ); + hLayout->addStretch (); + + QFrame* separator = new QFrame (); + separator->setFrameShape ( QFrame::HLine ); + separator->setFrameShadow ( QFrame::Sunken ); + + vLayout->setSpacing ( 0 ); + vLayout->addLayout ( hLayout ); + vLayout->addWidget ( separator ); + vLayout->addSpacing ( 5 ); + vLayout->addLayout ( _grid ); + + GridBuffer gridBuffer ( _grid, 22 ); + _grid->setHorizontalSpacing ( 10 ); + _grid->setVerticalSpacing ( 0 ); + //_grid->setSizeConstraint ( QLayout::SetFixedSize ); + + size_t gi = 0; + const vector& groups = Graphics::getStyle()->getDrawingGroups(); + const vector& styles = groups[gi]->getDrawingStyles(); + + gridBuffer.addSection ( _createGroupItem(groups[gi]->getName()), Qt::AlignHCenter ); + for ( size_t si=0 ; sigetName() == DisplayStyle::Foreground ) continue; + if ( styles[si]->getName() == DisplayStyle::Background ) continue; + if ( styles[si]->getName() == DisplayStyle::Foreground ) continue; + if ( styles[si]->getName() == DisplayStyle::SelectionDraw ) continue; + if ( styles[si]->getName() == DisplayStyle::SelectionFill ) continue; + if ( styles[si]->getName() == DisplayStyle::Foreground ) continue; + + PaletteNamedItem* item = _createNamedItem ( styles[si]->getName() ); + gridBuffer.addWidget ( item ); + _layerItems [ item->getName() ] = item; + } + gridBuffer.newColumn (); + + DataBase* database = DataBase::getDB(); + if ( database ) { + Technology* technology = database->getTechnology(); + if ( technology ) { + for ( gi=1 ; gigetName()), Qt::AlignHCenter ); + + const vector& styles = groups[gi]->getDrawingStyles(); + for ( size_t si=0 ; sigetBasicLayer ( styles[si]->getName() ); + + if ( basicLayer ) { + PaletteLayerItem* item = _createLayerItem ( basicLayer ); + gridBuffer.addWidget ( item ); + _layerItems [ item->getName() ] = item; + } + } + } + size_t si = 0; + forEach ( BasicLayer*, basicLayer, technology->getBasicLayers() ) { + if ( !find((*basicLayer)->getName()) ) { + if ( !si ) + gridBuffer.addSection ( _createGroupItem("Unmatcheds"), Qt::AlignHCenter ); + + PaletteLayerItem* item = _createLayerItem ( *basicLayer ); + gridBuffer.addWidget ( item ); + _layerItems [ item->getName() ] = item; + + cerr << "[WARNING] BasicLayer \"" << (*basicLayer)->getName() + << "\" has no associated DisplayStyle." << endl; + + si++; + } + } + if ( si ) gi++; + } + } + + gridBuffer.newColumn (); + _extensionRow = gridBuffer.getRow(); + _extensionColumn = gridBuffer.getColumn(); + _extensionGroup = _createGroupItem ( "Extensions" ); + gridBuffer.addSection ( _extensionGroup, Qt::AlignHCenter ); + gridBuffer.flushWidgets (); + + vLayout->addStretch (); + + QWidget* adaptator = new QWidget (); + adaptator->setLayout ( vLayout ); + setWidget ( adaptator ); + setHorizontalScrollBarPolicy ( Qt::ScrollBarAsNeeded ); + setVerticalScrollBarPolicy ( Qt::ScrollBarAsNeeded ); + setFrameStyle ( QFrame::Plain ); + } + + + void PaletteWidget::updateExtensions ( Cell* cell ) + { + _grid->removeWidget ( _extensionGroup ); + _extensionGroup->deleteLater (); + _extensionGroup = NULL; + + PaletteItems::iterator iextension = _extensionGoItems.begin(); + for ( ; iextension != _extensionGoItems.end() ; ++iextension ) { + _grid->removeWidget ( iextension->second ); + iextension->second->deleteLater (); + } + _extensionGoItems.clear (); + + if ( !cell ) return; + + GridBuffer gridBuffer ( _grid, 22, _extensionRow, _extensionColumn ); + _extensionGroup = _createGroupItem ( "Extensions" ); + gridBuffer.addSection ( _extensionGroup, Qt::AlignHCenter ); + + forEach ( ExtensionSlice*, extension, cell->getExtensionSlices() ) { + PaletteNamedItem* item = _createNamedItem ( (*extension)->getName(), false ); + gridBuffer.addWidget ( item ); + _extensionGoItems [ item->getName() ] = item; + } + gridBuffer.flushWidgets (); + } + + + bool PaletteWidget::isDrawable ( const Name& name ) const + { + PaletteItem* item = find ( name ); + if ( item ) + return item->isChecked (); + + return false; + } + + + void PaletteWidget::showAll () + { + PaletteItems::iterator iitem = _layerItems.begin(); + for ( ; iitem != _layerItems.end() ; iitem++ ) + iitem->second->setChecked ( true ); + + iitem = _extensionGoItems.begin(); + for ( ; iitem != _extensionGoItems.end() ; iitem++ ) + iitem->second->setChecked ( true ); + + emit paletteChanged(); + } + + + void PaletteWidget::hideAll () + { + PaletteItems::iterator iitem = _layerItems.begin(); + for ( ; iitem != _layerItems.end() ; iitem++ ) + iitem->second->setChecked ( false ); + + iitem = _extensionGoItems.begin(); + for ( ; iitem != _extensionGoItems.end() ; iitem++ ) + iitem->second->setChecked ( false ); + + emit paletteChanged(); + } + + + PaletteItem* PaletteWidget::find ( const Name& name ) const + { + PaletteItems::const_iterator iitem = _layerItems.find(name); + if ( iitem != _layerItems.end() ) + return iitem->second; + + iitem = _extensionGoItems.find(name); + if ( iitem != _extensionGoItems.end() ) + return iitem->second; + + return NULL; + } + + +} // End of Hurricane namespace. diff --git a/hurricane/src/hviewer/SelectorCommand.cpp b/hurricane/src/hviewer/SelectorCommand.cpp new file mode 100644 index 00000000..ae3d799d --- /dev/null +++ b/hurricane/src/hviewer/SelectorCommand.cpp @@ -0,0 +1,125 @@ + +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC/LIP6 2008-2008, All Rights Reserved +// +// =================================================================== +// +// $Id$ +// +// x-----------------------------------------------------------------x +// | | +// | C O R I O L I S | +// | 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 : "./SelectorCommand.cpp" | +// | *************************************************************** | +// | U p d a t e s | +// | | +// x-----------------------------------------------------------------x + + +#include "hurricane/viewer/CellWidget.h" +#include "hurricane/viewer/SelectorCommand.h" + + +namespace Hurricane { + + +// ------------------------------------------------------------------- +// Class : "Hurricane::SelectorCommand". + + + SelectorCommand::~SelectorCommand () + { } + + +// ------------------------------------------------------------------- +// Class : "Hurricane::NetSelectorCommand". + + + NetSelectorCommand::NetSelectorCommand ( const Net* net ) + : _net(net) + { } + + + NetSelectorCommand::~NetSelectorCommand () + { } + + + const Net* NetSelectorCommand::getNet () const + { return _net; } + + + void NetSelectorCommand::doSelection ( CellWidget* cw, bool delayRedraw ) + { + cw->_select ( _net, delayRedraw ); + } + + + string NetSelectorCommand::_getTypeName () const + { return "NetSelectorCommand"; } + + + string NetSelectorCommand::_getString () const + { + string s = "<" + _getTypeName() + " " + getString(_net) + ">"; + return s; + } + + + Record* NetSelectorCommand::_getRecord () const + { + Record* record = new Record ( _getString() ); + record->add ( getSlot("_net",_net) ); + return record; + } + + +// ------------------------------------------------------------------- +// Class : "Hurricane::AreaSelectorCommand". + + + AreaSelectorCommand::AreaSelectorCommand ( const Box& area ) + : _area(area) + { } + + + AreaSelectorCommand::~AreaSelectorCommand () + { } + + + const Box& AreaSelectorCommand::getArea () const + { return _area; } + + + void AreaSelectorCommand::doSelection ( CellWidget* cw, bool delayRedraw ) + { + cw->_selectOccurrencesUnder ( _area ); + } + + + string AreaSelectorCommand::_getTypeName () const + { return "AreaSelectorCommand"; } + + + string AreaSelectorCommand::_getString () const + { + string s = "<" + _getTypeName() + " " + getString(_area) + ">"; + return s; + } + + + Record* AreaSelectorCommand::_getRecord () const + { + Record* record = new Record ( _getString() ); + record->add ( getSlot("_area",&_area) ); + return record; + } + + +} // End of Hurricane namespace. diff --git a/hurricane/src/hviewer/hurricane/viewer/ControllerWidget.h b/hurricane/src/hviewer/hurricane/viewer/ControllerWidget.h new file mode 100644 index 00000000..ebb4a841 --- /dev/null +++ b/hurricane/src/hviewer/hurricane/viewer/ControllerWidget.h @@ -0,0 +1,213 @@ + +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC/LIP6 2008-2008, All Rights Reserved +// +// =================================================================== +// +// $Id$ +// +// x-----------------------------------------------------------------x +// | | +// | C O R I O L I S | +// | 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 : "./ControllerWidget.h" | +// | *************************************************************** | +// | U p d a t e s | +// | | +// x-----------------------------------------------------------------x + + +#ifndef __HURRICANE_CONTROLLER_WIDGET__ +#define __HURRICANE_CONTROLLER_WIDGET__ + + +#include +class QCheckBox; +class QComboBox; + + +namespace Hurricane { + + + class Record; + class Net; + class Cell; + class CellWidget; + class PaletteWidget; + class GraphicsWidget; + class DisplayFilterWidget; + class NetlistWidget; + class SelectionWidget; + class InspectorWidget; + + +// ------------------------------------------------------------------- +// Class : "Hurricane::ControllerTab". + + + class ControllerTab : public QWidget { + Q_OBJECT; + + public: + ControllerTab ( QWidget* parent=NULL ); + inline CellWidget* getCellWidget (); + public slots: + virtual void setCellWidget ( CellWidget* ); + virtual void setCell ( Cell* ); + virtual void updateTab (); + virtual void cellPreModificate (); + virtual void cellPostModificate (); + + protected: + CellWidget* _cellWidget; + }; + + + inline CellWidget* ControllerTab::getCellWidget () { return _cellWidget; } + + +// ------------------------------------------------------------------- +// Class : "Hurricane::TabNetlist". + + + class TabNetlist : public ControllerTab { + Q_OBJECT; + + public: + TabNetlist ( QWidget* parent=NULL ); + inline NetlistWidget* getNetlistBrowser (); + inline QCheckBox* getSyncButton (); + virtual void cellPreModificate (); + virtual void cellPostModificate (); + public slots: + virtual void setCell ( Cell* ); + virtual void setCellWidget ( CellWidget* ); + virtual void setSynchronize ( bool ); + + protected: + NetlistWidget* _netlistBrowser; + QCheckBox* _synchronize; + }; + + + inline NetlistWidget* TabNetlist::getNetlistBrowser () { return _netlistBrowser; } + inline QCheckBox* TabNetlist::getSyncButton () { return _synchronize; } + + +// ------------------------------------------------------------------- +// Class : "Hurricane::TabSelection". + + + class TabSelection : public QWidget { + Q_OBJECT; + + public: + TabSelection ( QWidget* parent=NULL ); + inline CellWidget* getCellWidget (); + inline SelectionWidget* getSelection (); + void updateTab (); + void cellPreModificate (); + void cellPostModificate (); + public slots: + void setCell ( Cell* ); + void setCellWidget ( CellWidget* ); + + protected: + CellWidget* _cellWidget; + SelectionWidget* _selection; + bool _selectionChanged; + }; + + + inline CellWidget* TabSelection::getCellWidget () { return _cellWidget; } + inline SelectionWidget* TabSelection::getSelection () { return _selection; } + + +// ------------------------------------------------------------------- +// Class : "Hurricane::TabInspector". + + + class TabInspector : public QWidget { + Q_OBJECT; + + public: + TabInspector ( QWidget* parent=NULL ); + inline CellWidget* getCellWidget (); + inline InspectorWidget* getInspectorWidget (); + inline QComboBox* getBookmarks (); + void updateTab (); + void cellPreModificate (); + void cellPostModificate (); + public slots: + void setCell ( Cell* ); + void setCellWidget ( CellWidget* ); + void setSelectionRecord ( Record* ); + void bookmarkChanged ( int index ); + + protected: + CellWidget* _cellWidget; + InspectorWidget* _inspectorWidget; + QComboBox* _bookmarks; + Record* _selectionRecord; + bool _updateFromSelection; + }; + + + inline CellWidget* TabInspector::getCellWidget () { return _cellWidget; } + inline InspectorWidget* TabInspector::getInspectorWidget () { return _inspectorWidget; } + inline QComboBox* TabInspector::getBookmarks () { return _bookmarks; } + + +// ------------------------------------------------------------------- +// Class : "Hurricane::ControllerWidget". + + + class ControllerWidget : public QTabWidget { + Q_OBJECT; + + public: + ControllerWidget ( QWidget* parent=NULL ); + inline CellWidget* getCellWidget (); + inline GraphicsWidget* getGraphics (); + inline PaletteWidget* getPalette (); + inline DisplayFilterWidget* getDisplayFilter (); + inline NetlistWidget* getNetlistBrowser (); + inline SelectionWidget* getSelection (); + inline InspectorWidget* getInspectorWidget (); + void setCellWidget ( CellWidget* ); + public slots: + void cellPreModificate (); + void cellPostModificate (); + void cellChanged ( Cell* ); + void updateTab ( int index ); + + protected: + CellWidget* _cellWidget; + GraphicsWidget* _graphics; + PaletteWidget* _palette; + DisplayFilterWidget* _displayFilter; + TabNetlist* _tabNetlist; + TabSelection* _tabSelection; + TabInspector* _tabInspector; + }; + + + inline CellWidget* ControllerWidget::getCellWidget () { return _cellWidget; } + inline GraphicsWidget* ControllerWidget::getGraphics () { return _graphics; } + inline PaletteWidget* ControllerWidget::getPalette () { return _palette; } + inline DisplayFilterWidget* ControllerWidget::getDisplayFilter () { return _displayFilter; } + inline NetlistWidget* ControllerWidget::getNetlistBrowser () { return _tabNetlist->getNetlistBrowser(); } + inline SelectionWidget* ControllerWidget::getSelection () { return _tabSelection->getSelection(); } + inline InspectorWidget* ControllerWidget::getInspectorWidget () { return _tabInspector->getInspectorWidget(); } + + +} // End of Hurricane namespace. + + +#endif // __HURRICANE_CONTROLLER_WIDGET__ diff --git a/hurricane/src/hviewer/hurricane/viewer/PaletteExtensionGoItem.h b/hurricane/src/hviewer/hurricane/viewer/PaletteExtensionGoItem.h new file mode 100644 index 00000000..204907b3 --- /dev/null +++ b/hurricane/src/hviewer/hurricane/viewer/PaletteExtensionGoItem.h @@ -0,0 +1,64 @@ + +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC/LIP6 2008-2008, All Rights Reserved +// +// =================================================================== +// +// $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 : "./PaletteExtensionGoItem.h" | +// | *************************************************************** | +// | U p d a t e s | +// | | +// x-----------------------------------------------------------------x + + +#ifndef __HURRICANE_PALETTE_EXTENSION_GO_ITEM__ +#define __HURRICANE_PALETTE_EXTENSION_GO_ITEM__ + + +class QCheckBox; + +#include "hurricane/Name.h" +#include "hurricane/viewer/PaletteItem.h" + + +namespace Hurricane { + + + class PaletteExtensionGoItem : public PaletteItem { + Q_OBJECT; + + // Constructor. + public: + static PaletteExtensionGoItem* create ( const Name& ); + virtual const Name& getName () const; + virtual bool isChecked () const; + virtual void setChecked ( bool ); + + protected: + QCheckBox* _checkBox; + Name _name; + + protected: + PaletteExtensionGoItem ( const Name& ); + PaletteExtensionGoItem ( const PaletteExtensionGoItem& ); + PaletteExtensionGoItem& operator= ( const PaletteExtensionGoItem& ); + virtual void _postCreate (); + }; + + +} // End of Hurricane namespace. + + +#endif // __LAYER_PALETTE_ENTRY__ diff --git a/hurricane/src/hviewer/hurricane/viewer/PaletteItem.h b/hurricane/src/hviewer/hurricane/viewer/PaletteItem.h new file mode 100644 index 00000000..3cea93a7 --- /dev/null +++ b/hurricane/src/hviewer/hurricane/viewer/PaletteItem.h @@ -0,0 +1,88 @@ + +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC/LIP6 2008-2008, All Rights Reserved +// +// =================================================================== +// +// $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 : "./PaletteItem.h" | +// | *************************************************************** | +// | U p d a t e s | +// | | +// x-----------------------------------------------------------------x + + +#ifndef __HURRICANE_PALETTE_ITEM__ +#define __HURRICANE_PALETTE_ITEM__ + +#include +#include +#include + +class QPaintEvent; +class QCheckBox; + +#include "hurricane/Commons.h" + + +namespace Hurricane { + + + class Name; + class PaletteItem; + + +// ------------------------------------------------------------------- +// Class : "Hurricane::DrawingStyleSample". + + + class DrawingStyleSample : public QWidget { + Q_OBJECT; + + public: + DrawingStyleSample ( PaletteItem* ); + protected: + QPixmap _sample; + PaletteItem* _entry; + protected: + void redraw (); + void paintEvent ( QPaintEvent* ); + }; + + +// ------------------------------------------------------------------- +// Class : "Hurricane::PaletteItem". + + + class PaletteItem : public QWidget { + Q_OBJECT; + + public: + virtual const Name& getName () const = 0; + virtual bool isChecked () const = 0; + virtual void setChecked ( bool state ) = 0; + signals: + virtual void toggled (); + + protected: + PaletteItem (); + PaletteItem ( const PaletteItem& ); + PaletteItem& operator= ( const PaletteItem& ); + }; + + +} // End of Hurricane namespace. + + +# endif // __HURRICANE_PALETTE_ITEM__ diff --git a/hurricane/src/hviewer/hurricane/viewer/PaletteLayerItem.h b/hurricane/src/hviewer/hurricane/viewer/PaletteLayerItem.h new file mode 100644 index 00000000..7ae5c5bd --- /dev/null +++ b/hurricane/src/hviewer/hurricane/viewer/PaletteLayerItem.h @@ -0,0 +1,64 @@ + +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC/LIP6 2008-2008, All Rights Reserved +// +// =================================================================== +// +// $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 : "./PaletteLayerItem.h" | +// | *************************************************************** | +// | U p d a t e s | +// | | +// x-----------------------------------------------------------------x + + +#ifndef __HURRICANE_PALETTE_LAYER_ITEM__ +#define __HURRICANE_PALETTE_LAYER_ITEM__ + + +class QCheckBox; + +#include "hurricane/viewer/PaletteItem.h" + + +namespace Hurricane { + + + class BasicLayer; + + + class PaletteLayerItem : public PaletteItem { + Q_OBJECT; + + public: + static PaletteLayerItem* create ( BasicLayer*, bool checked=true ); + virtual const Name& getName () const; + virtual bool isChecked () const; + virtual void setChecked ( bool state ); + + protected: + BasicLayer* _basicLayer; + QCheckBox* _checkBox; + + protected: + PaletteLayerItem ( BasicLayer*, bool checked ); + PaletteLayerItem ( const PaletteLayerItem& ); + PaletteLayerItem& operator= ( const PaletteLayerItem& ); + }; + + +} // End of Hurricane namespace. + + +#endif // __HURRICANE_PALETTE_LAYER_ITEM__ diff --git a/hurricane/src/hviewer/hurricane/viewer/PaletteNamedItem.h b/hurricane/src/hviewer/hurricane/viewer/PaletteNamedItem.h new file mode 100644 index 00000000..b09fffb4 --- /dev/null +++ b/hurricane/src/hviewer/hurricane/viewer/PaletteNamedItem.h @@ -0,0 +1,63 @@ + +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC/LIP6 2008-2008, All Rights Reserved +// +// =================================================================== +// +// $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 : "./PaletteNamedItem.h" | +// | *************************************************************** | +// | U p d a t e s | +// | | +// x-----------------------------------------------------------------x + + +#ifndef __HURRICANE_PALETTE_NAMED_ITEM__ +#define __HURRICANE_PALETTE_NAMED_ITEM__ + + +class QCheckBox; + +#include "hurricane/Name.h" +#include "hurricane/viewer/PaletteItem.h" + + +namespace Hurricane { + + + class PaletteNamedItem : public PaletteItem { + Q_OBJECT; + + // Constructor. + public: + static PaletteNamedItem* create ( const Name&, bool checked=true ); + virtual const Name& getName () const; + virtual bool isChecked () const; + virtual void setChecked ( bool ); + + protected: + QCheckBox* _checkBox; + Name _name; + + protected: + PaletteNamedItem ( const Name&, bool checked ); + PaletteNamedItem ( const PaletteNamedItem& ); + PaletteNamedItem& operator= ( const PaletteNamedItem& ); + }; + + +} // End of Hurricane namespace. + + +#endif // __HURRICANE_PALETTE_NAMED_ITEM__ diff --git a/hurricane/src/hviewer/hurricane/viewer/PaletteWidget.h b/hurricane/src/hviewer/hurricane/viewer/PaletteWidget.h new file mode 100644 index 00000000..a3dc426a --- /dev/null +++ b/hurricane/src/hviewer/hurricane/viewer/PaletteWidget.h @@ -0,0 +1,93 @@ + +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC/LIP6 2008-2008, All Rights Reserved +// +// =================================================================== +// +// $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 : "./PaletteWidget.h" | +// | *************************************************************** | +// | U p d a t e s | +// | | +// x-----------------------------------------------------------------x + + +#ifndef __HURRICANE_PALETTE_WIDGET__ +#define __HURRICANE_PALETTE_WIDGET__ + +#include +#include + +#include "hurricane/Commons.h" +#include "hurricane/Name.h" + + + class QCheckBox; + class QPushButton; + class QGridLayout; + + +namespace Hurricane { + + + using std::map; + + class BasicLayer; + class Cell; + class CellWidget; + class PaletteItem; + class PaletteNamedItem; + class PaletteLayerItem; + + + class PaletteWidget : public QScrollArea { + Q_OBJECT; + + public: + typedef map PaletteItems; + public: + PaletteWidget ( QWidget* parent=NULL ); + PaletteItem* find ( const Name& name ) const; + bool isDrawable ( const Name& name ) const; + signals: + void paletteChanged (); + public slots: + void updateExtensions ( Cell* cell ); + void showAll (); + void hideAll (); + + protected: + PaletteItems _layerItems; + PaletteItems _extensionGoItems; + QPushButton* _showAll; + QPushButton* _hideAll; + QGridLayout* _grid; + int _extensionRow; + int _extensionColumn; + QWidget* _extensionGroup; + + protected: + PaletteWidget ( const PaletteWidget& ); + PaletteWidget& operator= ( const PaletteWidget& ); + protected: + QWidget* _createGroupItem ( const Name& ); + PaletteNamedItem* _createNamedItem ( const Name&, bool checked=true ); + PaletteLayerItem* _createLayerItem ( BasicLayer*, bool checked=true ); + }; + + +} // End of Hurricane namespace. + + +#endif // __HURRICANE_PALETTE_WIDGET__ diff --git a/hurricane/src/hviewer/hurricane/viewer/SelectorCommand.h b/hurricane/src/hviewer/hurricane/viewer/SelectorCommand.h new file mode 100644 index 00000000..326a72a7 --- /dev/null +++ b/hurricane/src/hviewer/hurricane/viewer/SelectorCommand.h @@ -0,0 +1,85 @@ + +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC/LIP6 2008-2008, All Rights Reserved +// +// =================================================================== +// +// $Id$ +// +// x-----------------------------------------------------------------x +// | | +// | C O R I O L I S | +// | 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 : "./SelectorCommand.h" | +// | *************************************************************** | +// | U p d a t e s | +// | | +// x-----------------------------------------------------------------x + + +#ifndef __HURRICANE_SELECTOR_COMMAND__ +#define __HURRICANE_SELECTOR_COMMAND__ + + +#include +#include "hurricane/Commons.h" + + +namespace Hurricane { + + + using std::string; + class CellWidget; + + + class SelectorCommand { + public: + virtual ~SelectorCommand (); + virtual void doSelection ( CellWidget*, bool delayRedraw ) = 0; + virtual Record* _getRecord () const = 0; + virtual string _getString () const = 0; + virtual string _getTypeName () const = 0; + }; + + + class NetSelectorCommand : public SelectorCommand { + public: + NetSelectorCommand ( const Net* ); + virtual ~NetSelectorCommand (); + const Net* getNet () const; + virtual void doSelection ( CellWidget*, bool delayRedraw ); + virtual Record* _getRecord () const; + virtual string _getString () const; + virtual string _getTypeName () const; + protected: + const Net* _net; + }; + + + class AreaSelectorCommand : public SelectorCommand { + public: + AreaSelectorCommand ( const Box& ); + virtual ~AreaSelectorCommand (); + const Box& getArea () const; + virtual void doSelection ( CellWidget*, bool delayRedraw ); + virtual Record* _getRecord () const; + virtual string _getString () const; + virtual string _getTypeName () const; + protected: + const Box _area; + }; + + +} + + +INSPECTOR_P_SUPPORT(Hurricane::SelectorCommand); + + +#endif // __HURRICANE_SELECTOR_COMMAND__