// -*- C++ -*- # include # include # include # include # include # include "hurricane/Name.h" # include "hurricane/DataBase.h" # include "hurricane/Technology.h" # include "hurricane/BasicLayer.h" # include "hurricane/BasicLayers.h" # include "hurricane/viewer/Graphics.h" # include "hurricane/viewer/PaletteEntry.h" # include "hurricane/viewer/LayerPaletteEntry.h" # include "hurricane/viewer/GroupPaletteEntry.h" # include "hurricane/viewer/ViewerPaletteEntry.h" # include "hurricane/viewer/Palette.h" # include "hurricane/viewer/CellWidget.h" namespace Hurricane { Palette::Palette ( CellWidget* cellWidget ) : QScrollArea() , _cellWidget(cellWidget) , _entries() , _showAll(NULL) , _hideAll(NULL) { setWidgetResizable ( true ); QWidget* adaptator = new QWidget (); QVBoxLayout* layout = new QVBoxLayout (); //layout->setContentsMargins ( 0, 0, 0, 0 ); vector groups = Graphics::getStyle()->getDrawingGroups(); vector styles = groups[0]->getDrawingStyles(); GroupPaletteEntry* gentry = GroupPaletteEntry::create ( this, groups[0]->getName() ); layout->addWidget ( gentry, 0, Qt::AlignLeft ); layout->addSpacing ( -5 ); _entries.push_back ( gentry ); 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; ViewerPaletteEntry* entry = ViewerPaletteEntry::create ( this, styles[si]->getName() ); layout->addWidget ( entry, 0, Qt::AlignLeft ); _entries.push_back ( entry ); } gentry->setChecked ( false ); DataBase* database = DataBase::getDB(); if ( database ) { Technology* technology = database->getTechnology(); if ( technology ) { for ( size_t gi=1 ; gigetName() ); layout->addWidget ( gentry, 0, Qt::AlignLeft ); layout->addSpacing ( -5 ); _entries.push_back ( gentry ); styles = groups[gi]->getDrawingStyles(); for ( size_t si=0 ; sigetBasicLayer ( styles[si]->getName() ); if ( basicLayer ) { LayerPaletteEntry* entry = LayerPaletteEntry::create ( this, basicLayer ); layout->addWidget ( entry, 0, Qt::AlignLeft ); _entries.push_back ( entry ); } } gentry->setChecked ( false ); } bool unmatched = false; for_each_basic_layer ( basicLayer, technology->getBasicLayers() ) { if ( !find(basicLayer->getName()) ) { if ( !unmatched ) { unmatched = true; gentry = GroupPaletteEntry::create ( this, "Unmatcheds" ); layout->addWidget ( gentry, 0, Qt::AlignLeft ); layout->addSpacing ( -5 ); _entries.push_back ( gentry ); } LayerPaletteEntry* entry = LayerPaletteEntry::create ( this, basicLayer ); layout->addWidget ( entry, 0, Qt::AlignLeft ); _entries.push_back ( entry ); cerr << "[WARNING] BasicLayer \"" << basicLayer->getName() << "\" has no associated DisplayStyle." << endl; } end_for; } if ( unmatched ) gentry->setChecked ( false ); } } _showAll = new QPushButton ( this ); _showAll->setIcon ( QIcon(":/images/palette_show_all.png") ); _showAll->setFlat ( true ); _hideAll = new QPushButton ( this ); _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()) ); QHBoxLayout* bottomEntry = new QHBoxLayout (); bottomEntry->setContentsMargins ( 0, 0, 0, 0 ); bottomEntry->addWidget ( _showAll ); bottomEntry->addWidget ( _hideAll ); layout->addLayout ( bottomEntry ); layout->addStretch (); adaptator->setLayout ( layout ); setWidget ( adaptator ); setHorizontalScrollBarPolicy ( Qt::ScrollBarAlwaysOff ); setVerticalScrollBarPolicy ( Qt::ScrollBarAsNeeded ); setFrameStyle ( QFrame::Plain ); } bool Palette::isDrawable ( size_t index ) { if ( index < _entries.size() ) return _entries[index]->isChecked (); return false; } void Palette::showAll () { for ( size_t i=0 ; i<_entries.size() ; i++ ) if ( !_entries[i]->isGroup() ) _entries[i]->setChecked ( true ); _cellWidget->redraw (); } void Palette::hideAll () { for ( size_t i=0 ; i<_entries.size() ; i++ ) if ( !_entries[i]->isGroup() ) _entries[i]->setChecked ( false ); _cellWidget->redraw (); } void Palette::redrawCellWidget () { _cellWidget->redraw (); } PaletteEntry* Palette::find ( const Name& name ) { for ( size_t i=0 ; i<_entries.size() ; i++ ) { if ( _entries[i]->getName() == name ) return _entries[i]; } return NULL; } } // End of Hurricane namespace.