coriolis/bora/src/SlicingDataModel.cpp

163 lines
4.7 KiB
C++

// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2015-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Authors : Jean-Paul Chaput, Eric LAO |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Module : "./SlicingDataModel.h" |
// +-----------------------------------------------------------------+
#include <iostream>
#include <QFont>
#include "hurricane/DbU.h"
#include "hurricane/viewer/Graphics.h"
#include "hurricane/analog/AnalogCellExtension.h"
#include "bora/SlicingDataModel.h"
namespace Bora {
using namespace std;
using Hurricane::Graphics;
using Hurricane::DbU;
using Analog::AnalogCellExtension;
SlicingDataModel::SlicingDataModel ( QObject* parent )
: QAbstractTableModel(parent)
, _cell(NULL)
{ }
SlicingDataModel::~SlicingDataModel ()
{ }
void SlicingDataModel::setCell( Hurricane::Cell* cell )
{
_cell = cell;
}
QVariant SlicingDataModel::data ( const QModelIndex& index, int role ) const
{
static QFont nameFont = Graphics::getFixedFont ( QFont::Bold );
static QFont valueFont = Graphics::getFixedFont ( QFont::Normal, true );
SlicingNode* slicingtree = AnalogCellExtension::get<SlicingNode>( _cell );
if ( (not slicingtree) or (not index.isValid()) ) return QVariant();
if ( role == Qt::SizeHintRole ) {
switch (index.column()) {
case 0: return 200;
default:
case 1: return -1;
}
}
if ( role == Qt::FontRole ) {
switch (index.column()) {
case 0: return nameFont;
default:
case 1: return valueFont;
}
}
if ( role == Qt::DisplayRole ) {
int row = index.row();
if ( row < (int)rowCount() ) {
NodeSets nodeSets = slicingtree->getNodeSets();
switch ( index.column() ) {
case 0: return QVariant( row );
case 1: return QVariant( DbU::toPhysical(nodeSets[row]->getHeight(), DbU::Micro) );
case 2: return QVariant( DbU::toPhysical(nodeSets[row]->getWidth (), DbU::Micro) );
case 3: return QVariant( nodeSets[row]->getOccupationArea() );
case 4: return QVariant( nodeSets[row]->getCpt() );
case 5: return QVariant( nodeSets[row]->getRatio() );
case 6: return QVariant( DbU::getPhysical( nodeSets[row]->getWidth() ,DbU::Micro)
* DbU::getPhysical( nodeSets[row]->getHeight(),DbU::Micro) );
default:
if (index.column() >= columnCount()) return QVariant();
}
}
}
if ( role == Qt::UserRole ){
return QVariant( index.row() );
}
return QVariant();
}
QVariant SlicingDataModel::headerData ( int section, Qt::Orientation orientation, int role ) const
{
if (orientation == Qt::Vertical) return QVariant();
static QFont headerFont = Graphics::getFixedFont ( QFont::Bold, false, false, +0 );
if ( role == Qt::FontRole ) return headerFont;
if ( role != Qt::DisplayRole ) return QVariant();
switch ( section ) {
case 0: return QVariant ( tr("Order" ) );
case 1: return QVariant ( QString::fromUtf8("Height (µm)") );
case 2: return QVariant ( QString::fromUtf8("Width (µm)") );
case 3: return QVariant ( tr("Occupation Area (%)") );
case 4: return QVariant ( tr("Counter" ) );
case 5: return QVariant ( tr("Ratio (W/H)" ) );
case 6: return QVariant ( QString::fromUtf8("Area (µm²)") );
default:
if (section >= columnCount()) return QVariant();
}
return QVariant ( tr("?") );
}
int SlicingDataModel::rowCount ( const QModelIndex& parent ) const
{
SlicingNode* slicingtree = AnalogCellExtension::get<SlicingNode>( _cell );
if (slicingtree != NULL){
NodeSets nodeSets = slicingtree->getNodeSets();
return nodeSets.size();
} else {
return 0;
}
}
int SlicingDataModel::columnCount ( const QModelIndex& parent ) const
{
return 7;
}
BoxSet* SlicingDataModel::getBoxSet( int index )
{
SlicingNode* slicingtree = AnalogCellExtension::get<SlicingNode>( _cell );
if (slicingtree){
NodeSets nodeSets = slicingtree->getNodeSets();
return nodeSets[index];
}
return NULL;
}
void SlicingDataModel::updateContents()
{
beginResetModel();
endResetModel();
}
} // Bora namespace.