Version: 9.15.0
YACS::HMI::SubjectContainerBase Class Referenceabstract

#include <guiObservers.hxx>

Inheritance diagram for YACS::HMI::SubjectContainerBase:
Collaboration diagram for YACS::HMI::SubjectContainerBase:

Public Member Functions

 SubjectContainerBase (YACS::ENGINE::Container *container, Subject *parent)
 
virtual ~SubjectContainerBase ()
 
virtual std::string getName ()
 
virtual std::string getLabelForHuman () const =0
 
virtual bool setName (std::string name)
 
virtual YACS::ENGINE::ContainergetContainer () const
 
virtual std::map< std::string, std::string > getProperties ()
 
virtual bool setProperties (std::map< std::string, std::string > properties)
 
virtual SubjectReferenceattachComponent (SubjectComponent *component)
 
virtual void detachComponent (SubjectComponent *component)
 
virtual void moveComponent (SubjectReference *reference)
 
virtual void removeSubComponentFromSet (SubjectComponent *component)
 
virtual void notifyComponentsChange (GuiEvent event, int type, Subject *son)
 
virtual void clean (Command *command=0)
 
void localclean (Command *command=0)
 
bool isUsed ()
 
TypeOfElem getType ()
 
- 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::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 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 SubjectContainerBaseNew (YACS::ENGINE::Container *container, Subject *parent)
 
- Static Public Member Functions inherited from YACS::HMI::Subject
static void erase (Subject *sub, Command *command=0, bool post=false)
 

Protected Attributes

YACS::ENGINE::Container_container
 
std::set< SubjectComponent * > _subComponentSet
 
std::map< SubjectComponent *, SubjectReference * > _subReferenceMap
 
- 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 416 of file guiObservers.hxx.

Constructor & Destructor Documentation

◆ SubjectContainerBase()

SubjectContainerBase::SubjectContainerBase ( YACS::ENGINE::Container container,
Subject parent 
)

Definition at line 4412 of file guiObservers.cxx.

4412  :Subject(parent), _container(container)
4413 {
4414  _subComponentSet.clear();
4415  _subReferenceMap.clear();
4416 }
std::map< SubjectComponent *, SubjectReference * > _subReferenceMap
std::set< SubjectComponent * > _subComponentSet
YACS::ENGINE::Container * _container
Subject(Subject *parent=0)

References _subComponentSet, and _subReferenceMap.

◆ ~SubjectContainerBase()

SubjectContainerBase::~SubjectContainerBase ( )
virtual

Definition at line 4418 of file guiObservers.cxx.

4419 {
4420  DEBTRACE("SubjectContainerBase::~SubjectContainerBase");
4421  Proc* aProc = GuiContext::getCurrent()->getProc();
4422  if ( aProc )
4423  {
4424  map<ComponentInstance*,SubjectComponent*> mapOfSubjectComponentCpy
4426  map<ComponentInstance*,SubjectComponent*>::iterator it = mapOfSubjectComponentCpy.begin();
4427  for ( ; it!=mapOfSubjectComponentCpy.end(); it++ )
4428  if ( (*it).first && (*it).first->getContainer() == _container )
4429  {
4430  (*it).first->setContainer(0);
4431  GuiContext::getCurrent()->getSubjectProc()->destroy((*it).second);
4432  }
4433 
4435  aProc->removeContainer(_container);
4436  }
4437 }
#define DEBTRACE(msg)
Definition: YacsTrace.hxx:31
Base class for all schema objects.
Definition: Proc.hxx:44
virtual void removeContainer(Container *cont)
Remove a container from the containerMap.
Definition: Proc.cxx:581
YACS::HMI::SubjectProc * getSubjectProc()
Definition: guiContext.hxx:52
YACS::ENGINE::Proc * getProc()
Definition: guiContext.hxx:50
std::map< YACS::ENGINE::Container *, YACS::HMI::SubjectContainerBase * > _mapOfSubjectContainer
Definition: guiContext.hxx:75
std::map< YACS::ENGINE::ComponentInstance *, YACS::HMI::SubjectComponent * > _mapOfSubjectComponent
Definition: guiContext.hxx:74
static GuiContext * getCurrent()
Definition: guiContext.hxx:67
virtual bool destroy(Subject *son)
From user action in Ihm, destroy an object.

References _container, YACS::HMI::GuiContext::_mapOfSubjectComponent, YACS::HMI::GuiContext::_mapOfSubjectContainer, DEBTRACE, YACS::HMI::Subject::destroy(), YACS::HMI::GuiContext::getCurrent(), YACS::HMI::GuiContext::getProc(), YACS::HMI::GuiContext::getSubjectProc(), and YACS::ENGINE::Proc::removeContainer().

Member Function Documentation

◆ attachComponent()

SubjectReference * SubjectContainerBase::attachComponent ( SubjectComponent component)
virtual

Definition at line 4472 of file guiObservers.cxx.

4473 {
4474  DEBTRACE("SubjectContainer::attachComponent");
4475  SubjectReference *son = new SubjectReference(component, this);
4476  _subComponentSet.insert(component);
4477  _subReferenceMap[component] = son;
4478  update(ADDCHILDREF, COMPONENT, son);
4479  return son;
4480 }
virtual void update(GuiEvent event, int type, Subject *son)

References _subComponentSet, _subReferenceMap, YACS::HMI::ADDCHILDREF, YACS::HMI::COMPONENT, DEBTRACE, and YACS::HMI::Subject::update().

Referenced by YACS::HMI::CommandAssociateComponentToContainer::localExecute(), YACS::HMI::CommandAssociateComponentToContainer::localReverse(), and YACS::HMI::SubjectComponent::setContainer().

◆ clean()

void SubjectContainerBase::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.

Definition at line 4525 of file guiObservers.cxx.

4526 {
4527  if (_askRegisterUndo)
4528  {
4529  _askRegisterUndo = false;
4531  }
4532  localclean(command);
4533  Subject::clean(command);
4534 }
void localclean(Command *command=0)
virtual void clean(Command *command=0)

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

◆ detachComponent()

void SubjectContainerBase::detachComponent ( SubjectComponent component)
virtual

Definition at line 4482 of file guiObservers.cxx.

4483 {
4484  DEBTRACE("SubjectContainer::detachComponent");
4485  YASSERT(_subReferenceMap.count(component));
4486  SubjectReference *reference = _subReferenceMap[component];
4487  update(REMOVECHILDREF, PYTHONNODE, reference);
4488  _subComponentSet.erase(component);
4489  _subReferenceMap.erase(component);
4490  erase(reference);
4491 }
#define YASSERT(val)
YASSERT macro is always defined, used like assert, but throw a YACS::Exception instead of abort.
Definition: YacsTrace.hxx:59
static void erase(Subject *sub, Command *command=0, bool post=false)

References _subComponentSet, _subReferenceMap, DEBTRACE, YACS::HMI::Subject::erase(), YACS::HMI::PYTHONNODE, YACS::HMI::REMOVECHILDREF, YACS::HMI::Subject::update(), and YASSERT.

Referenced by YACS::HMI::CommandAddComponentInstance::localReverse(), and YACS::HMI::CommandAddComponentFromCatalog::localReverse().

◆ getContainer()

virtual YACS::ENGINE::Container* YACS::HMI::SubjectContainerBase::getContainer ( ) const
inlinevirtual

◆ getLabelForHuman()

virtual std::string YACS::HMI::SubjectContainerBase::getLabelForHuman ( ) const
pure virtual

◆ getName()

◆ getProperties()

std::map< std::string, std::string > SubjectContainerBase::getProperties ( )
virtual

Reimplemented from YACS::HMI::Subject.

Definition at line 4439 of file guiObservers.cxx.

4440 {
4441  return _container->getProperties();
4442 }
virtual std::map< std::string, std::string > getProperties() const =0

References _container, and YACS::ENGINE::Container::getProperties().

◆ getType()

TypeOfElem YACS::HMI::SubjectContainerBase::getType ( )
inlinevirtual

Reimplemented from YACS::HMI::Subject.

Definition at line 436 of file guiObservers.hxx.

436 { return CONTAINER; }

References YACS::HMI::CONTAINER.

◆ isUsed()

bool YACS::HMI::SubjectContainerBase::isUsed ( )
inline

Definition at line 435 of file guiObservers.hxx.

435 { return !_subComponentSet.empty(); }

Referenced by YACS::HMI::CommandAddContainerBase::localReverse().

◆ localclean()

void SubjectContainerBase::localclean ( Command command = 0)

Definition at line 4536 of file guiObservers.cxx.

4537 {
4538  DEBTRACE("SubjectContainerBase::localClean ");
4539  Proc* aProc = GuiContext::getCurrent()->getProc();
4540  if ( aProc )
4541  {
4542  SubjectComponent* compo;
4543  map<ComponentInstance*,SubjectComponent*>::iterator it = GuiContext::getCurrent()->_mapOfSubjectComponent.begin();
4544  std::list<SubjectComponent*> compos;
4545  for ( ; it!=GuiContext::getCurrent()->_mapOfSubjectComponent.end(); it++ )
4546  if ( (*it).first && (*it).first->getContainer() == _container )
4547  {
4548  compo=(*it).second;
4549  (*it).first->setContainer(0);
4550  compos.push_back((*it).second);
4551  }
4552  while(!compos.empty())
4553  {
4554  compo=compos.front();
4555  compos.pop_front();
4558  }
4559  }
4560 }
virtual TypeOfElem getType()
virtual void update(GuiEvent event, int type, Subject *son)

References _container, YACS::HMI::GuiContext::_mapOfSubjectComponent, DEBTRACE, YACS::HMI::Subject::erase(), YACS::HMI::GuiContext::getCurrent(), YACS::HMI::GuiContext::getProc(), YACS::HMI::GuiContext::getSubjectProc(), YACS::HMI::SubjectComponent::getType(), YACS::HMI::REMOVE, YACS::HMI::SubjectComponent::setContainer(), and YACS::HMI::SubjectNode::update().

Referenced by clean().

◆ moveComponent()

void SubjectContainerBase::moveComponent ( SubjectReference reference)
virtual

Definition at line 4493 of file guiObservers.cxx.

4494 {
4495  DEBTRACE("SubjectContainer::moveComponent");
4496  SubjectContainer* oldcont = dynamic_cast<SubjectContainer*>(reference->getParent());
4497  YASSERT(oldcont);
4498  SubjectComponent* component = dynamic_cast<SubjectComponent*>(reference->getReference());
4499  _subComponentSet.insert(component);
4500  _subReferenceMap[component] = reference;
4501  oldcont->removeSubComponentFromSet(component);
4502  oldcont->update(CUT, COMPONENT, reference);
4503  reference->reparent(this);
4504  update(PASTE, COMPONENT, reference);
4505 }
virtual void removeSubComponentFromSet(SubjectComponent *component)
virtual void reparent(Subject *parent)
virtual Subject * getReference() const
virtual Subject * getParent()

References _subComponentSet, _subReferenceMap, YACS::HMI::COMPONENT, YACS::HMI::CUT, DEBTRACE, YACS::HMI::Subject::getParent(), YACS::HMI::SubjectReference::getReference(), YACS::HMI::PASTE, removeSubComponentFromSet(), YACS::HMI::SubjectReference::reparent(), YACS::HMI::Subject::update(), and YASSERT.

Referenced by YACS::HMI::CommandAssociateComponentToContainer::localExecute(), YACS::HMI::CommandAssociateComponentToContainer::localReverse(), and YACS::HMI::SubjectComponent::setContainer().

◆ New()

SubjectContainerBase * SubjectContainerBase::New ( YACS::ENGINE::Container container,
Subject parent 
)
static

Definition at line 4402 of file guiObservers.cxx.

4403 {
4404  if(!container)
4405  return 0;
4406  if(!dynamic_cast<YACS::ENGINE::HomogeneousPoolContainer *>(container))
4407  return new SubjectContainer(container,parent);
4408  else
4409  return new SubjectHPContainer(dynamic_cast<YACS::ENGINE::HomogeneousPoolContainer *>(container),parent);
4410 }

Referenced by YACS::HMI::SubjectProc::addSubjectContainer().

◆ notifyComponentsChange()

void SubjectContainerBase::notifyComponentsChange ( GuiEvent  event,
int  type,
Subject son 
)
virtual

Definition at line 4514 of file guiObservers.cxx.

4515 {
4516  DEBTRACE("SubjectContainer::notifyComponentsChange");
4517  set<SubjectComponent*>::iterator it = _subComponentSet.begin();
4518  for(; it != _subComponentSet.end(); ++it)
4519  {
4520  (*it)->update(event, type, son);
4521  (*it)->notifyServicesChange(event, type, son);
4522  }
4523 }

References _subComponentSet, and DEBTRACE.

Referenced by YACS::HMI::CommandRenameContainer::localExecute(), YACS::HMI::CommandSetContainerProperties::localExecute(), and YACS::HMI::CommandRenameContainer::localReverse().

◆ removeSubComponentFromSet()

void SubjectContainerBase::removeSubComponentFromSet ( SubjectComponent component)
virtual

Definition at line 4507 of file guiObservers.cxx.

4508 {
4509  DEBTRACE("SubjectContainer::removeSubComponentFromSet");
4510  _subComponentSet.erase(component);
4511  _subReferenceMap.erase(component);
4512 }

References _subComponentSet, _subReferenceMap, and DEBTRACE.

Referenced by YACS::HMI::SubjectComponent::localclean(), and moveComponent().

◆ setName()

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

Reimplemented from YACS::HMI::Subject.

Definition at line 4457 of file guiObservers.cxx.

4458 {
4459  DEBTRACE("SubjectContainer::setName " << name);
4460  if (name == getName())
4461  return true;
4462  CommandRenameContainer* command = new CommandRenameContainer(getName(), name);
4463  if (command->execute())
4464  {
4465  GuiContext::getCurrent()->getInvoc()->add(command);
4466  return true;
4467  }
4468  else delete command;
4469  return false;
4470 }
virtual bool execute()
the command is executed a first time after its registration for undo redo, then on redo
Definition: commands.cxx:51
YACS::HMI::ProcInvoc * getInvoc()
Definition: guiContext.hxx:51
void add(Command *command)
Definition: commands.cxx:156
virtual std::string getName()

References YACS::HMI::Invocator::add(), DEBTRACE, YACS::HMI::Command::execute(), YACS::HMI::GuiContext::getCurrent(), YACS::HMI::GuiContext::getInvoc(), and getName().

Referenced by FormContainerBase::onApply(), and FormHPContainer::onApply().

◆ setProperties()

bool SubjectContainerBase::setProperties ( std::map< std::string, std::string >  properties)
virtual

Reimplemented from YACS::HMI::Subject.

Definition at line 4444 of file guiObservers.cxx.

4445 {
4447  if (command->execute())
4448  {
4449  GuiContext::getCurrent()->getInvoc()->add(command);
4450  return true;
4451  }
4452  else
4453  delete command;
4454  return false;
4455 }

References YACS::HMI::Invocator::add(), YACS::HMI::Command::execute(), YACS::HMI::GuiContext::getCurrent(), YACS::HMI::GuiContext::getInvoc(), and getName().

Referenced by FormContainerBase::onApply(), and FormHPContainer::onApply().

Member Data Documentation

◆ _container

YACS::ENGINE::Container* YACS::HMI::SubjectContainerBase::_container
protected

◆ _subComponentSet

std::set<SubjectComponent*> YACS::HMI::SubjectContainerBase::_subComponentSet
protected

◆ _subReferenceMap

std::map<SubjectComponent*,SubjectReference*> YACS::HMI::SubjectContainerBase::_subReferenceMap
protected

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