Version: 9.16.0
YACS::HMI::SubjectDataPort Class Reference

#include <guiObservers.hxx>

Inheritance diagram for YACS::HMI::SubjectDataPort:
Collaboration diagram for YACS::HMI::SubjectDataPort:

Public Member Functions

 SubjectDataPort (YACS::ENGINE::DataPort *port, Subject *parent)
 
virtual ~SubjectDataPort ()
 
virtual std::string getName ()
 
virtual bool setName (std::string name)
 
virtual YACS::ENGINE::DataPortgetPort ()
 
virtual void clean (Command *command=0)
 
void localclean (Command *command=0)
 
void addSubjectLink (SubjectLink *subject)
 
void removeSubjectLink (SubjectLink *subject)
 
std::list< SubjectLink * > getListOfSubjectLink ()
 
virtual bool setValue (std::string value)
 
void setExecValue (std::string value)
 
std::string getExecValue ()
 
void registerUndoDestroy ()
 
- Public Member Functions inherited from YACS::HMI::Subject
 Subject (Subject *parent=0)
 
virtual ~Subject ()
 
virtual void attach (GuiObserver *obs)
 
virtual void detach (GuiObserver *obs)
 
virtual void select (bool isSelected)
 
virtual void update (GuiEvent event, int type, Subject *son)
 
virtual std::string getName ()
 
virtual bool setName (std::string name)
 
virtual bool setProperties (std::map< std::string, std::string > properties)
 
virtual std::map< std::string, std::string > getProperties ()
 
virtual std::vector< std::string > knownProperties ()
 
virtual SubjectgetParent ()
 
virtual void setParent (Subject *son)
 
virtual bool destroy (Subject *son)
 From user action in Ihm, destroy an object. More...
 
virtual void loadChildren ()
 
virtual void loadLinks ()
 
virtual void addSubjectReference (Subject *ref)
 
virtual void clean (Command *command=0)
 
void localclean (Command *command=0)
 
void registerUndoDestroy ()
 
void askRegisterUndoDestroy ()
 
bool isDestructible ()
 
virtual TypeOfElem getType ()
 
virtual void setProgress (std::string newProgress)
 
virtual std::string getProgress ()
 
- Public Member Functions inherited from YACS::ENGINE::Observer
virtual void notifyObserver (Node *object, const std::string &event)
 
virtual void notifyObserver2 (Node *object, const std::string &event, void *something)
 
virtual void notifyObserverFromClone (Node *originalInstance, const std::string &event, Node *clonedInstanceGeneratingEvent)
 
virtual ~Observer ()
 

Static Public Member Functions

static bool tryCreateLink (SubjectDataPort *subOutport, SubjectDataPort *subInport, bool control=true)
 
- Static Public Member Functions inherited from YACS::HMI::Subject
static void erase (Subject *sub, Command *command=0, bool post=false)
 

Protected Attributes

YACS::ENGINE::DataPort_dataPort
 
std::list< SubjectLink * > _listSubjectLink
 
std::string _execValue
 
- Protected Attributes inherited from YACS::HMI::Subject
std::set< GuiObserver * > _setObs
 
Subject_parent
 
bool _destructible
 
bool _askRegisterUndo
 
std::string _progress
 

Detailed Description

Definition at line 203 of file guiObservers.hxx.

Constructor & Destructor Documentation

◆ SubjectDataPort()

SubjectDataPort::SubjectDataPort ( YACS::ENGINE::DataPort port,
Subject parent 
)

Definition at line 3510 of file guiObservers.cxx.

3511 : Subject(parent), _dataPort(port)
3512{
3513 _listSubjectLink.clear();
3514 _execValue = "";
3515}
std::list< SubjectLink * > _listSubjectLink
YACS::ENGINE::DataPort * _dataPort
Subject(Subject *parent=0)

References _execValue, and _listSubjectLink.

◆ ~SubjectDataPort()

SubjectDataPort::~SubjectDataPort ( )
virtual

Definition at line 3517 of file guiObservers.cxx.

3518{
3519 DEBTRACE("SubjectDataPort::~SubjectDataPort " << getName());
3520 if (isDestructible())
3521 {
3522 Node* node = _dataPort->getNode();
3523 ElementaryNode * father = dynamic_cast<ElementaryNode*>(node);
3524 if (father)
3525 {
3526 DEBTRACE("father->edRemovePort(_dataPort)");
3527 try
3528 {
3529 father->edRemovePort(_dataPort);
3530 }
3531 catch (YACS::Exception &e)
3532 {
3533 DEBTRACE("------------------------------------------------------------------------------");
3534 DEBTRACE("SubjectDataPort::~SubjectDataPort: father->edRemovePort: YACS exception " << e.what());
3535 DEBTRACE("------------------------------------------------------------------------------");
3536 }
3537 }
3538 }
3539}
#define DEBTRACE(msg)
Definition: YacsTrace.hxx:31
Base class for all calculation nodes.
Base class for all nodes.
Definition: Node.hxx:70
Node * getNode() const
Definition: Port.hxx:46
const char * what(void) const noexcept
Definition: Exception.cxx:50
virtual std::string getName()

References _dataPort, DEBTRACE, YACS::ENGINE::ElementaryNode::edRemovePort(), getName(), YACS::ENGINE::Port::getNode(), YACS::HMI::Subject::isDestructible(), and YACS::Exception::what().

Member Function Documentation

◆ addSubjectLink()

void YACS::HMI::SubjectDataPort::addSubjectLink ( SubjectLink subject)
inline

Definition at line 214 of file guiObservers.hxx.

214{ _listSubjectLink.push_back(subject); };

Referenced by YACS::HMI::SubjectComposedNode::addSubjectLink().

◆ clean()

void SubjectDataPort::clean ( Command command = 0)
virtual

Clean process prior to delete is redefined in derived classes: a local clean treatment relative to the derived class, then a call to the parent class clean method.

Reimplemented from YACS::HMI::Subject.

Reimplemented in YACS::HMI::SubjectInputPort, YACS::HMI::SubjectOutputPort, YACS::HMI::SubjectInputDataStreamPort, and YACS::HMI::SubjectOutputDataStreamPort.

Definition at line 3541 of file guiObservers.cxx.

3542{
3543 if (_askRegisterUndo)
3544 {
3545 _askRegisterUndo = false;
3547 }
3548 localclean(command);
3549 Subject::clean(command);
3550}
void localclean(Command *command=0)
virtual void clean(Command *command=0)

References YACS::HMI::Subject::_askRegisterUndo, YACS::HMI::Subject::clean(), localclean(), and registerUndoDestroy().

Referenced by YACS::HMI::SubjectInputPort::clean(), YACS::HMI::SubjectOutputPort::clean(), YACS::HMI::SubjectInputDataStreamPort::clean(), and YACS::HMI::SubjectOutputDataStreamPort::clean().

◆ getExecValue()

std::string SubjectDataPort::getExecValue ( )

◆ getListOfSubjectLink()

std::list< SubjectLink * > YACS::HMI::SubjectDataPort::getListOfSubjectLink ( )
inline

◆ getName()

◆ getPort()

◆ localclean()

void SubjectDataPort::localclean ( Command command = 0)

Definition at line 3552 of file guiObservers.cxx.

3553{
3554 DEBTRACE("SubjectDataPort::localClean ");
3555 list<SubjectLink*> lsl = getListOfSubjectLink();
3556 for (list<SubjectLink*>::iterator it = lsl.begin(); it != lsl.end(); ++it)
3557 erase(*it);
3558}
std::list< SubjectLink * > getListOfSubjectLink()
static void erase(Subject *sub, Command *command=0, bool post=false)

References DEBTRACE, YACS::HMI::Subject::erase(), and getListOfSubjectLink().

Referenced by clean().

◆ registerUndoDestroy()

void SubjectDataPort::registerUndoDestroy ( )

Definition at line 3658 of file guiObservers.cxx.

3659{
3660 DEBTRACE("SubjectDataPort::registerUndoDestroy");
3661 Proc *proc = GuiContext::getCurrent()->getProc();
3662 SubjectNode *sno = dynamic_cast<SubjectNode*>(getParent());
3663 YASSERT(sno);
3664 Node *node = sno->getNode();
3665 string nodeName = proc->getChildName(node);
3666 string portName = getName();
3667 ElementaryNode* father = dynamic_cast<ElementaryNode*>(node);
3668 YASSERT(father);
3669
3670 DataPort *port = getPort();
3671 TypeCode *dtyp = port->edGetType();
3672 string typeName = dtyp->name();
3674 undoCata->_typeMap[typeName] = dtyp;
3675
3676 Command *command = 0;
3677 Command *comm2 =0;
3678 TypeOfElem elemType = getType();
3679 switch (elemType)
3680 {
3681 case INPUTPORT:
3682 command = new CommandAddInputPortFromCatalog(undoCata, typeName, nodeName, portName);
3683 {
3684 int rang = 1;
3685 int nbUp = 0;
3686 list<InputPort*> plist = father->getSetOfInputPort();
3687 list<InputPort*>::iterator pos = plist.begin();
3688 for (; (*pos) != port; pos++)
3689 rang++;
3690 nbUp = plist.size() -rang;
3691 if (nbUp)
3692 comm2 = new CommandOrderInputPorts(nodeName, portName, nbUp);
3693 }
3694 break;
3695 case OUTPUTPORT:
3696 command = new CommandAddOutputPortFromCatalog(undoCata, typeName, nodeName, portName);
3697 {
3698 int rang = 1;
3699 int nbUp = 0;
3700 list<OutputPort*> plist = father->getSetOfOutputPort();
3701 list<OutputPort*>::iterator pos = plist.begin();
3702 for (; (*pos) != port; pos++)
3703 rang++;
3704 nbUp = plist.size() -rang;
3705 if (nbUp)
3706 comm2 = new CommandOrderOutputPorts(nodeName, portName, nbUp);
3707 }
3708 break;
3710 command = new CommandAddIDSPortFromCatalog(undoCata, typeName, nodeName, portName);
3711 break;
3713 command = new CommandAddODSPortFromCatalog(undoCata, typeName, nodeName, portName);
3714 break;
3715 }
3716 if (command)
3717 GuiContext::getCurrent()->getInvoc()->add(command);
3718 if (comm2)
3719 GuiContext::getCurrent()->getInvoc()->add(comm2);
3720 //save links
3721 list<SubjectLink*> lsl = getListOfSubjectLink();
3722 for (list<SubjectLink*>::iterator it = lsl.begin(); it != lsl.end(); ++it)
3723 {
3724 (*it)->registerUndoDestroy();
3725 }
3726}
#define YASSERT(val)
YASSERT macro is always defined, used like assert, but throw a YACS::Exception instead of abort.
Definition: YacsTrace.hxx:59
class for YACS catalogs.
Definition: Catalog.hxx:42
std::map< std::string, TypeCode * > _typeMap
Definition: Catalog.hxx:49
std::string getChildName(const Node *node) const
TypeCode * edGetType() const
Definition: DataPort.hxx:53
std::list< OutputPort * > getSetOfOutputPort() const
std::list< InputPort * > getSetOfInputPort() const
Base class for all schema objects.
Definition: Proc.hxx:44
Base class for all type objects.
Definition: TypeCode.hxx:68
virtual const char * name() const
Definition: TypeCode.cxx:72
static GuiContext * getCurrent()
Definition: guiContext.hxx:67
YACS::HMI::ProcInvoc * getInvoc()
Definition: guiContext.hxx:51
YACS::ENGINE::Proc * getProc()
Definition: guiContext.hxx:50
void add(Command *command)
Definition: commands.cxx:156
YACS::ENGINE::Catalog * getUndoCata()
Definition: commands.hxx:67
virtual YACS::ENGINE::DataPort * getPort()
virtual YACS::ENGINE::Node * getNode()
virtual Subject * getParent()
virtual TypeOfElem getType()
@ OUTPUTDATASTREAMPORT
@ INPUTDATASTREAMPORT

References YACS::ENGINE::Catalog::_typeMap, YACS::HMI::Invocator::add(), DEBTRACE, YACS::ENGINE::DataPort::edGetType(), YACS::ENGINE::ComposedNode::getChildName(), YACS::HMI::GuiContext::getCurrent(), YACS::HMI::GuiContext::getInvoc(), getListOfSubjectLink(), getName(), YACS::HMI::SubjectNode::getNode(), YACS::HMI::Subject::getParent(), getPort(), YACS::HMI::GuiContext::getProc(), YACS::ENGINE::ElementaryNode::getSetOfInputPort(), YACS::ENGINE::ElementaryNode::getSetOfOutputPort(), YACS::HMI::Subject::getType(), YACS::HMI::Invocator::getUndoCata(), YACS::HMI::INPUTDATASTREAMPORT, YACS::HMI::INPUTPORT, YACS::ENGINE::TypeCode::name(), YACS::HMI::OUTPUTDATASTREAMPORT, YACS::HMI::OUTPUTPORT, and YASSERT.

Referenced by clean(), YACS::HMI::SubjectInputPort::clean(), YACS::HMI::SubjectOutputPort::clean(), YACS::HMI::SubjectInputDataStreamPort::registerUndoDestroy(), and YACS::HMI::SubjectOutputDataStreamPort::registerUndoDestroy().

◆ removeSubjectLink()

void YACS::HMI::SubjectDataPort::removeSubjectLink ( SubjectLink subject)
inline

Definition at line 215 of file guiObservers.hxx.

215{ _listSubjectLink.remove(subject); };

Referenced by YACS::HMI::SubjectComposedNode::removeLink().

◆ setExecValue()

void SubjectDataPort::setExecValue ( std::string  value)

Definition at line 3648 of file guiObservers.cxx.

3649{
3650 _execValue = value;
3651}

References _execValue.

Referenced by YACS::HMI::GuiExecutor::event(), and YACS::HMI::GuiExecutor::updateSchema().

◆ setName()

bool SubjectDataPort::setName ( std::string  name)
virtual

Reimplemented from YACS::HMI::Subject.

Definition at line 3565 of file guiObservers.cxx.

3566{
3567 DEBTRACE("SubjectDataPort::setName " << name);
3568 Proc *proc = GuiContext::getCurrent()->getProc();
3569 string position = "";
3570 Node *node = getPort()->getNode();
3571 if (proc != dynamic_cast<Proc*>(node))
3572 position = proc->getChildName(node);
3573 else
3574 position = node->getName();
3575
3576 Command *command = 0;
3577 bool isIn = dynamic_cast<InPort*>(_dataPort);
3578 if (isIn)
3579 command = new CommandRenameInDataPort(position, _dataPort->getName(),name, getType());
3580 else
3581 command = new CommandRenameOutDataPort(position, _dataPort->getName(),name, getType());
3582
3583 if (command->execute())
3584 {
3585 GuiContext::getCurrent()->getInvoc()->add(command);
3586 return true;
3587 }
3588 else delete command;
3589 return false;
3590}
const std::string & getName() const
Definition: Node.hxx:125
virtual bool execute()
the command is executed a first time after its registration for undo redo, then on redo
Definition: commands.cxx:51

References _dataPort, YACS::HMI::Invocator::add(), DEBTRACE, YACS::HMI::Command::execute(), YACS::ENGINE::ComposedNode::getChildName(), YACS::HMI::GuiContext::getCurrent(), YACS::HMI::GuiContext::getInvoc(), YACS::ENGINE::DataPort::getName(), YACS::ENGINE::Node::getName(), YACS::ENGINE::Port::getNode(), getPort(), YACS::HMI::GuiContext::getProc(), and YACS::HMI::Subject::getType().

Referenced by YACS::HMI::SubjectNode::addSubjectIDSPort(), YACS::HMI::SubjectNode::addSubjectInputPort(), YACS::HMI::SubjectNode::addSubjectODSPort(), YACS::HMI::SubjectNode::addSubjectOutputPort(), YACS::HMI::EditionElementaryNode::onCommitData(), and YACS::HMI::TreeView::onCommitData().

◆ setValue()

bool SubjectDataPort::setValue ( std::string  value)
virtual

◆ tryCreateLink()

bool SubjectDataPort::tryCreateLink ( SubjectDataPort subOutport,
SubjectDataPort subInport,
bool  control = true 
)
static

Definition at line 3597 of file guiObservers.cxx.

3598{
3599 DEBTRACE("SubjectDataPort::tryCreateLink");
3600
3601 InPort *inp = dynamic_cast<InPort*>(subInport->getPort());
3602 OutPort *outp = dynamic_cast<OutPort*>(subOutport->getPort());
3603 if (outp && outp->isAlreadyLinkedWith(inp))
3604 {
3605 DEBTRACE("isAlreadyLinkedWith");
3606 GuiContext::getCurrent()->_lastErrorMessage = "Ports are already linked";
3607 return false;
3608 }
3609
3610 Proc *proc = GuiContext::getCurrent()->getProc();
3611
3612 string outNodePos = "";
3613 SubjectNode *sno = dynamic_cast<SubjectNode*>(subOutport->getParent());
3614 YASSERT(sno);
3615 Node *outNode = sno->getNode();
3616 outNodePos = proc->getChildName(outNode);
3617 string outportName = subOutport->getName();
3618
3619 string inNodePos = "";
3620 SubjectNode *sni = dynamic_cast<SubjectNode*>(subInport->getParent());
3621 YASSERT(sni);
3622 Node *inNode = sni->getNode();
3623 inNodePos = proc->getChildName(inNode);
3624 string inportName = subInport->getName();
3625
3626 CommandAddLink *command = new CommandAddLink(outNodePos, outportName, subOutport->getType(),
3627 inNodePos, inportName, subInport->getType(), control);
3628 if (command->execute())
3629 {
3630 GuiContext::getCurrent()->getInvoc()->add(command);
3631 return true;
3632 }
3633 else
3634 {
3635 delete command;
3636 return false;
3637 }
3638}
virtual bool isAlreadyLinkedWith(InPort *withp) const =0
std::string _lastErrorMessage
Definition: guiContext.hxx:79

References YACS::HMI::GuiContext::_lastErrorMessage, YACS::HMI::Invocator::add(), DEBTRACE, YACS::HMI::Command::execute(), YACS::ENGINE::ComposedNode::getChildName(), YACS::HMI::GuiContext::getCurrent(), YACS::HMI::GuiContext::getInvoc(), getName(), YACS::HMI::SubjectNode::getNode(), YACS::HMI::Subject::getParent(), getPort(), YACS::HMI::GuiContext::getProc(), YACS::HMI::Subject::getType(), YACS::ENGINE::OutPort::isAlreadyLinkedWith(), and YASSERT.

Referenced by YACS::HMI::SceneInPortItem::dropEvent(), and YACS::HMI::SchemaInPortItem::dropMimeData().

Member Data Documentation

◆ _dataPort

YACS::ENGINE::DataPort* YACS::HMI::SubjectDataPort::_dataPort
protected

Definition at line 222 of file guiObservers.hxx.

Referenced by getName(), getPort(), setName(), and ~SubjectDataPort().

◆ _execValue

std::string YACS::HMI::SubjectDataPort::_execValue
protected

Definition at line 224 of file guiObservers.hxx.

Referenced by getExecValue(), setExecValue(), and SubjectDataPort().

◆ _listSubjectLink

std::list<SubjectLink*> YACS::HMI::SubjectDataPort::_listSubjectLink
protected

Definition at line 223 of file guiObservers.hxx.

Referenced by SubjectDataPort().


The documentation for this class was generated from the following files: