示例#1
0
void mitk::Tool::Deactivated()
{
  // Re-enabling InteractionEventObservers that have been previously disabled for legacy handling of Tools
  // in new interaction framework
  for (auto it = m_DisplayInteractorConfigs.begin();
       it != m_DisplayInteractorConfigs.end();
       ++it)
  {
    if (it->first)
    {
      DisplayInteractor *displayInteractor =
        static_cast<DisplayInteractor *>(us::GetModuleContext()->GetService<InteractionEventObserver>(it->first));
      if (displayInteractor != nullptr)
      {
        // here the regular configuration is loaded again
        displayInteractor->SetEventConfig(it->second);
      }
    }
  }
  m_DisplayInteractorConfigs.clear();
}
示例#2
0
void mitk::Tool::Activated()
{
  // As a legacy solution the display interaction of the new interaction framework is disabled here to avoid conflicts
  // with tools
  // Note: this only affects InteractionEventObservers (formerly known as Listeners) all DataNode specific interaction
  // will still be enabled
  m_DisplayInteractorConfigs.clear();
  std::vector<us::ServiceReference<InteractionEventObserver>> listEventObserver =
    us::GetModuleContext()->GetServiceReferences<InteractionEventObserver>();
  for (std::vector<us::ServiceReference<InteractionEventObserver>>::iterator it = listEventObserver.begin();
       it != listEventObserver.end();
       ++it)
  {
    DisplayInteractor *displayInteractor =
      dynamic_cast<DisplayInteractor *>(us::GetModuleContext()->GetService<InteractionEventObserver>(*it));
    if (displayInteractor != nullptr)
    {
      // remember the original configuration
      m_DisplayInteractorConfigs.insert(std::make_pair(*it, displayInteractor->GetEventConfig()));
      // here the alternative configuration is loaded
      displayInteractor->SetEventConfig(m_EventConfig.c_str());
    }
  }
}
bool mitk::ToolManager::ActivateTool(int id)
{
  if (id != -1 && !this->GetToolById(id)->CanHandle(this->GetReferenceData(0)->GetData()))
    return false;

  if(this->GetDataStorage())
    {
      this->GetDataStorage()->RemoveNodeEvent.AddListener( mitk::MessageDelegate1<ToolManager, const mitk::DataNode*>
        ( this, &ToolManager::OnNodeRemoved ) );
    }

  //MITK_INFO << "ToolManager::ActivateTool("<<id<<")"<<std::endl;
  //if( GetToolById(id) == NULL ) return false; // NO, invalid IDs are actually used here. Parameter -1 or anything that does not exists will deactivate all tools!

  //If a tool is deactivated set the event notification policy of the global interaction to multiple again
  if (id == -1)
  {
    GlobalInteraction::GetInstance()->SetEventNotificationPolicy(GlobalInteraction::INFORM_MULTIPLE);

        // Re-enabling InteractionEventObservers that have been previously disabled for legacy handling of Tools
        // in new interaction framework
        for (std::map<us::ServiceReferenceU, EventConfig>::iterator it = m_DisplayInteractorConfigs.begin();
             it != m_DisplayInteractorConfigs.end(); ++it)
        {
          if (it->first)
          {
            DisplayInteractor* displayInteractor = static_cast<DisplayInteractor*>(
                                                     us::GetModuleContext()->GetService<InteractionEventObserver>(it->first));
            if (displayInteractor != NULL)
            {
              // here the regular configuration is loaded again
              displayInteractor->SetEventConfig(it->second);
            }
          }
        }
        m_DisplayInteractorConfigs.clear();
  }

  if ( GetToolById( id ) == m_ActiveTool ) return true; // no change needed

  static int nextTool = -1;
  nextTool = id;
  //MITK_INFO << "ToolManager::ActivateTool("<<id<<"): nextTool = "<<nextTool<<std::endl;

  static bool inActivateTool = false;
  if (inActivateTool)
  {
    //MITK_INFO << "ToolManager::ActivateTool("<<id<<"): already inside ActivateTool somehow, returning now "<<std::endl;
    return true;
  }
  inActivateTool = true;

  while ( nextTool != m_ActiveToolID )
  {
    //MITK_INFO <<"ToolManager::ActivateTool: nextTool = " << nextTool << " (active tool = " << m_ActiveToolID<<")"<<std::endl;
    if (m_ActiveTool)
    {
      m_ActiveTool->Deactivated();
      //GlobalInteraction::GetInstance()->RemoveListener( m_ActiveTool );
      m_ActiveToolRegistration.Unregister();
    }

    m_ActiveTool = GetToolById( nextTool );
    m_ActiveToolID = m_ActiveTool ? nextTool : -1; // current ID if tool is valid, otherwise -1

    ActiveToolChanged.Send();

    if (m_ActiveTool)
    {
      if (m_RegisteredClients > 0)
      {
        m_ActiveTool->Activated();
        //GlobalInteraction::GetInstance()->AddListener( m_ActiveTool );
        m_ActiveToolRegistration = us::GetModuleContext()->RegisterService<InteractionEventObserver>( m_ActiveTool, us::ServiceProperties() );
        //If a tool is activated set event notification policy to one
        if (m_ExclusiveStateEventPolicy && dynamic_cast<mitk::SegTool2D*>(m_ActiveTool))
          GlobalInteraction::GetInstance()->SetEventNotificationPolicy(GlobalInteraction::INFORM_ONE);


                // As a legacy solution the display interaction of the new interaction framework is disabled here  to avoid conflicts with tools
                // Note: this only affects InteractionEventObservers (formerly known as Listeners) all DataNode specific interaction will still be enabled
                m_DisplayInteractorConfigs.clear();
                std::vector<us::ServiceReference<InteractionEventObserver> > listEventObserver = us::GetModuleContext()->GetServiceReferences<InteractionEventObserver>();
                for (std::vector<us::ServiceReference<InteractionEventObserver> >::iterator it = listEventObserver.begin(); it != listEventObserver.end(); ++it)
                {
                  DisplayInteractor* displayInteractor = dynamic_cast<DisplayInteractor*>(
                                                                  us::GetModuleContext()->GetService<InteractionEventObserver>(*it));
                  if (displayInteractor != NULL)
                  {
                    // remember the original configuration
                    m_DisplayInteractorConfigs.insert(std::make_pair(*it, displayInteractor->GetEventConfig()));
                    // here the alternative configuration is loaded
                    displayInteractor->SetEventConfig("DisplayConfigMITK.xml");
                  }
                }
      }
    }
  }

  inActivateTool = false;
  return (m_ActiveTool != NULL);
}