+ updateByPlugins(anActiveFeature);
+}
+
+void XGUI_ActionsMgr::updateCheckState()
+{
+ QString eachCommand = QString();
+ foreach(eachCommand, myActions.keys()) {
+ setActionChecked(eachCommand, false);
+ }
+ QStringList ltActiveCommands = myOperationMgr->operationList();
+ foreach(eachCommand, ltActiveCommands) {
+ setActionChecked(eachCommand, true);
+ }
+}
+
+void XGUI_ActionsMgr::updateOnViewSelection()
+{
+ XGUI_Selection* aSelection = myWorkshop->selector()->selection();
+ if (aSelection->getSelected().size() == 0 || !myOperationMgr->hasOperation())
+ return;
+ ModuleBase_Operation* anOperation = myOperationMgr->currentOperation();
+ FeaturePtr anActiveFeature = anOperation->feature();
+ if(!anActiveFeature.get())
+ return;
+ QString aFeatureId = QString::fromStdString(anActiveFeature->getKind());
+
+ SessionPtr aMgr = ModelAPI_Session::get();
+ ModelAPI_ValidatorsFactory* aFactory = aMgr->validators();
+ foreach(QString aId, nestedCommands(aFeatureId)) {
+ std::list<ModelAPI_Validator*> aValidators;
+ std::list<std::list<std::string> > anArguments;
+ if (!anArguments.empty()) {
+ std::list<std::string> firstArg = anArguments.front();
+ }
+ aFactory->validators(aId.toStdString(), aValidators, anArguments);
+ std::list<ModelAPI_Validator*>::iterator aValidator = aValidators.begin();
+ std::list<std::list<std::string> >::iterator aValidatorArgs = anArguments.begin();
+ for (; aValidator != aValidators.end(); aValidator++, aValidatorArgs++) {
+ if (!(*aValidator))
+ continue;
+ const ModuleBase_SelectionValidator* aSelValidator =
+ dynamic_cast<const ModuleBase_SelectionValidator*>(*aValidator);
+ if (!aSelValidator)
+ continue;
+ setActionEnabled(aId, aSelValidator->isValid(aSelection, *aValidatorArgs));
+
+ }
+ }
+}
+
+QKeySequence XGUI_ActionsMgr::registerShortcut(const QString& theKeySequence)
+{
+ if (theKeySequence.isEmpty()) {
+ return QKeySequence();
+ }
+ QKeySequence aResult(theKeySequence);
+ if (myShortcuts.contains(aResult)) {
+ QString aMessage = tr("Shortcut %1 is already defined. Ignore.").arg(theKeySequence);
+ Events_Error::send(aMessage.toStdString());
+ return QKeySequence();
+ }
+ myShortcuts.append(aResult);
+ return aResult;
+}
+
+void XGUI_ActionsMgr::processEvent(const std::shared_ptr<Events_Message>& theMessage)
+{
+ const Events_ID kResponseEvent =
+ Events_Loop::loop()->eventByName(EVENT_FEATURE_STATE_RESPONSE);
+ if (theMessage->eventID() == kResponseEvent) {
+ std::shared_ptr<ModelAPI_FeatureStateMessage> aStateMessage =
+ std::dynamic_pointer_cast<ModelAPI_FeatureStateMessage>(theMessage);
+ if (!aStateMessage.get())
+ return;
+ std::list<std::string> aFeaturesList = aStateMessage->features();
+ std::list<std::string>::iterator it = aFeaturesList.begin();
+ for( ; it != aFeaturesList.end(); ++it) {
+ QString anActionId = QString::fromStdString(*it);
+ bool theDefaultState = false;
+ if (myActions.contains(anActionId)) {
+ theDefaultState = myActions[anActionId]->isEnabled();
+ }
+ setActionEnabled(anActionId, aStateMessage->state(*it, theDefaultState));
+ }
+ } else if (theMessage.get()) {
+ #ifdef _DEBUG
+ std::cout << "XGUI_ActionsMgr::processEvent: unhandled message caught: " << std::endl
+ << theMessage->eventID().eventText() << std::endl;
+ #endif
+ }