174 lines
5.8 KiB
C++
174 lines
5.8 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 |
|
|
// | Alliance / Hurricane Interface |
|
|
// | |
|
|
// | Author : Jean-Paul CHAPUT |
|
|
// | E-mail : Jean-Paul.Chaput@lip6.fr |
|
|
// | =============================================================== |
|
|
// | C++ Module : "./LibraryManager.cpp" |
|
|
// +-----------------------------------------------------------------+
|
|
|
|
|
|
#include <iostream>
|
|
#include <QFrame>
|
|
#include <QLabel>
|
|
#include <QAction>
|
|
#include <QVBoxLayout>
|
|
#include <QSplitter>
|
|
#include "hurricane/Error.h"
|
|
#include "hurricane/viewer/Graphics.h"
|
|
#include "hurricane/viewer/CellViewer.h"
|
|
#include "crlcore/AllianceFramework.h"
|
|
#include "crlcore/LibraryManager.h"
|
|
#include "crlcore/LibrariesWidget.h"
|
|
#include "crlcore/CellsWidget.h"
|
|
#include "crlcore/CellsModel.h"
|
|
#include "crlcore/ViewsWidget.h"
|
|
#include "crlcore/ViewsModel.h"
|
|
#include "crlcore/CellDatas.h"
|
|
|
|
|
|
namespace CRL {
|
|
|
|
using namespace std;
|
|
using Hurricane::Error;
|
|
using Hurricane::Graphics;
|
|
|
|
|
|
// -------------------------------------------------------------------
|
|
// Class : "FrameworkObserver".
|
|
|
|
//void FrameworkObserver::notify ( unsigned int flags )
|
|
void LibraryManager::notify ( LibraryManager* manager, unsigned int flags )
|
|
{
|
|
//LibraryManager* manager = getOwner();
|
|
if (flags & (AllianceFramework::AddedLibrary
|
|
|AllianceFramework::RemovedLibrary)) {
|
|
manager->getLibrariesWidget()->update();
|
|
}
|
|
}
|
|
|
|
|
|
// -------------------------------------------------------------------
|
|
// Class : "LibraryManager".
|
|
|
|
LibraryManager::LibraryManager ( QWidget* parent )
|
|
: QWidget (parent)
|
|
, _frameworkObserver(this)
|
|
, _librariesWidget (new LibrariesWidget())
|
|
, _cellsWidget (new CellsWidget())
|
|
, _viewsWidget (new ViewsWidget())
|
|
, _cellViewer (NULL)
|
|
, _libPath (NULL)
|
|
{
|
|
setObjectName ( "libraryManager" );
|
|
setAttribute ( Qt::WA_QuitOnClose, false );
|
|
setWindowTitle( tr("Library Manager") );
|
|
|
|
QSplitter* splitter = new QSplitter();
|
|
splitter->addWidget( _librariesWidget );
|
|
splitter->addWidget( _cellsWidget );
|
|
splitter->addWidget( _viewsWidget );
|
|
splitter->setStretchFactor( 0, 1 );
|
|
splitter->setStretchFactor( 1, 2 );
|
|
splitter->setStretchFactor( 2, 0 );
|
|
|
|
QFrame* separator = new QFrame ();
|
|
separator->setFrameShape ( QFrame::HLine );
|
|
separator->setFrameShadow( QFrame::Sunken );
|
|
|
|
QLabel* libTitle = new QLabel ();
|
|
libTitle->setTextFormat( Qt::RichText );
|
|
libTitle->setText( "<b>Library Path:</b>" );
|
|
|
|
_libPath = new QLabel ();
|
|
_libPath->setFont ( Graphics::getFixedFont() );
|
|
_libPath->setTextFormat( Qt::RichText );
|
|
_libPath->setText( "<undefined>" );
|
|
|
|
QVBoxLayout* vLayout = new QVBoxLayout ();
|
|
vLayout->addWidget( splitter, 1, 0 );
|
|
vLayout->addWidget( separator );
|
|
vLayout->addWidget( libTitle, 0, Qt::AlignLeft );
|
|
vLayout->addWidget( _libPath, 0, Qt::AlignLeft );
|
|
setLayout( vLayout );
|
|
|
|
QAction* toggleShow = new QAction ( tr("Library Manager"), this );
|
|
toggleShow->setObjectName( "libraryManager.action.hideShow" );
|
|
toggleShow->setShortcut ( QKeySequence(tr("CTRL+M")) );
|
|
addAction( toggleShow );
|
|
|
|
connect( toggleShow, SIGNAL(triggered()), this, SLOT(toggleShow()) );
|
|
connect( _librariesWidget , SIGNAL(selectedLibrary(const AllianceLibrary*))
|
|
, _cellsWidget , SLOT( setLibrary (const AllianceLibrary*)) );
|
|
connect( _librariesWidget , SIGNAL(selectedLibrary(const AllianceLibrary*))
|
|
, this , SLOT( setLibrary (const AllianceLibrary*)) );
|
|
connect( _cellsWidget , SIGNAL(selectedCell (CellDatas*))
|
|
, _viewsWidget , SLOT( setCellDatas (CellDatas*)) );
|
|
connect( _viewsWidget->getModel(), SIGNAL(selectedCell (Cell*,unsigned int))
|
|
, this , SLOT( openCell (Cell*,unsigned int)) );
|
|
connect( _viewsWidget->getModel(), SIGNAL(loadedCell ())
|
|
, _cellsWidget , SLOT( updateSelected ()) );
|
|
connect( _viewsWidget->getModel(), SIGNAL(updatedLibrary ())
|
|
, _cellsWidget->getModel(), SLOT( updateLibrary ()) );
|
|
|
|
_librariesWidget->initSelection();
|
|
|
|
AllianceFramework::get()->addObserver( &_frameworkObserver );
|
|
|
|
resize( Graphics::toHighDpi(750), Graphics::toHighDpi(550) );
|
|
}
|
|
|
|
|
|
LibraryManager::~LibraryManager ()
|
|
{
|
|
AllianceFramework::get()->removeObserver( &_frameworkObserver );
|
|
}
|
|
|
|
|
|
void LibraryManager::toggleShow ()
|
|
{ setVisible( not isVisible() ); }
|
|
|
|
|
|
void LibraryManager::setLibrary ( const AllianceLibrary* library )
|
|
{
|
|
string s = " <undefined>";
|
|
if (library)
|
|
s = " <" + getString(library->getPath()) + ">";
|
|
_libPath->setText( s.c_str() );
|
|
}
|
|
|
|
|
|
CellViewer* LibraryManager::openCell ( Cell* cell, unsigned int flags )
|
|
{
|
|
if (not _cellViewer) {
|
|
_cellViewer = new CellViewer ();
|
|
cerr << Error( "LibraryManager::openCell(): Not attached to a CellViewer, using default." ) << endl;
|
|
}
|
|
|
|
CellViewer* viewer = _cellViewer;
|
|
|
|
if (cell) {
|
|
if (flags & CellLoader::NewViewer) {
|
|
viewer = _cellViewer->vcreate();
|
|
viewer->show();
|
|
}
|
|
viewer->setCell( cell );
|
|
} else
|
|
cerr << Error( "LibraryManager::openCell(): NULL <cell> parameter." ) << endl;
|
|
|
|
return viewer;
|
|
}
|
|
|
|
|
|
void LibraryManager::updateLibrary ( Cell* )
|
|
{ _cellsWidget->updateLibrary(); }
|
|
|
|
|
|
} // CRL namespace.
|