coriolis/hurricane/src/viewer/SelectionPopupModel.cpp

194 lines
5.4 KiB
C++

// -*- 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 : "./SelectionPopupModel.cpp" |
// | *************************************************************** |
// | U p d a t e s |
// | |
// x-----------------------------------------------------------------x
#include <QFont>
#include "hurricane/Path.h"
#include "hurricane/Entity.h"
#include "hurricane/Occurrence.h"
#include "hurricane/viewer/Graphics.h"
#include "hurricane/viewer/Selector.h"
#include "hurricane/viewer/SelectionPopupModel.h"
namespace Hurricane {
// -------------------------------------------------------------------
// Class : "Occurrence_AcceptAll".
class Occurrence_AcceptAll : public Filter<Occurrence> {
public:
virtual Filter<Occurrence>* getClone () const;
virtual bool accept ( Occurrence ) const;
virtual string _getString () const;
};
Filter<Occurrence>* Occurrence_AcceptAll::getClone () const { return new Occurrence_AcceptAll(); }
bool Occurrence_AcceptAll::accept ( Occurrence ) const { return true; }
string Occurrence_AcceptAll::_getString () const { return "<Occurrence_AcceptAll>"; }
// -------------------------------------------------------------------
// Class : "Hurricane::SelectionPopupModel".
SelectionPopupModel::SelectionPopupModel ( QObject* parent )
: QAbstractTableModel(parent)
, _filter (new Occurrence_AcceptAll())
, _occurrences (NULL)
{ }
SelectionPopupModel::~SelectionPopupModel ()
{ clear (); }
void SelectionPopupModel::clearFilter ()
{ _filter = new Occurrence_AcceptAll(); }
void SelectionPopupModel::setFilter ( OccurrenceFilter filter )
{ _filter = filter; }
OccurrenceFilter SelectionPopupModel::getFilter ()
{ return _filter; }
void SelectionPopupModel::loadOccurrences ( Occurrences occurrences, bool showChange )
{
if ( !_occurrences ) _occurrences = new vector<Occurrence> ();
forEach ( Occurrence, ioccurrence, occurrences.getSubSet(getFilter()) ) {
_occurrences->push_back ( *ioccurrence );
}
if ( showChange ) emit layoutChanged ();
}
void SelectionPopupModel::clear ()
{
if ( _occurrences ) {
delete _occurrences;
_occurrences = NULL;
}
emit layoutChanged ();
}
void SelectionPopupModel::updateLayout ()
{ emit layoutChanged (); }
QVariant SelectionPopupModel::data ( const QModelIndex& index, int role ) const
{
static QFont occurrenceFont = Graphics::getFixedFont ( QFont::Normal );
static QFont entityFont = Graphics::getFixedFont ( QFont::Bold, false );
if ( !index.isValid() ) return QVariant ();
if ( role == Qt::SizeHintRole ) {
switch (index.column()) {
default: return -1;
}
}
if ( role == Qt::FontRole ) {
if ( index.row() == 0 ) return QVariant();
switch (index.column()) {
default: return entityFont;
}
}
if ( role == Qt::DisplayRole ) {
int row = index.row ();
string name;
if ( _occurrences ) {
if ( row < (int)_occurrences->size() ) {
if ( index.column() == 0 ) {
name = getString ( (*_occurrences)[row].getPath().getName() ) + "::"
+ getString ( (*_occurrences)[row].getEntity() );
return name.c_str();
}
}
} else {
if ( row < 1 ) {
if ( index.column() == 0 ) {
return QVariant ( tr("Nothing Selectable") );
}
}
}
}
return QVariant();
}
QVariant SelectionPopupModel::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();
if ( section == 0 ) {
return "Path+Entity";
}
return QVariant();
}
int SelectionPopupModel::rowCount ( const QModelIndex& parent ) const
{
if ( !_occurrences ) return 1;
return _occurrences->size();
}
int SelectionPopupModel::columnCount ( const QModelIndex& parent ) const
{
return 1;
}
Occurrence SelectionPopupModel::getOccurrence ( int row )
{
if ( !_occurrences || (row >= (int)_occurrences->size()) )
return Occurrence();
return (*_occurrences)[row];
}
} // End of Hurricane namespace.