Version: 9.15.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 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)
 
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::SubjectOutputDataStreamPort, YACS::HMI::SubjectInputDataStreamPort, YACS::HMI::SubjectOutputPort, and YACS::HMI::SubjectInputPort.

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 ( )

Definition at line 3653 of file guiObservers.cxx.

3654 {
3655  return _execValue;
3656 }

References _execValue.

Referenced by YACS::HMI::EditionLoop::update(), YACS::HMI::SchemaInPortItem::update(), and YACS::HMI::SchemaOutPortItem::update().

◆ 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();
3673  Catalog *undoCata = GuiContext::getCurrent()->getInvoc()->getUndoCata();
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;
3709  case INPUTDATASTREAMPORT:
3710  command = new CommandAddIDSPortFromCatalog(undoCata, typeName, nodeName, portName);
3711  break;
3712  case OUTPUTDATASTREAMPORT:
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
YACS::ENGINE::Proc * getProc()
Definition: guiContext.hxx:50
YACS::HMI::ProcInvoc * getInvoc()
Definition: guiContext.hxx:51
static GuiContext * getCurrent()
Definition: guiContext.hxx:67
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: