#include <QPushButton>
#include <QDockWidget>
#include <QLayout>
+#include <QTimer>
#ifdef _DEBUG
#include <QDebug>
aLoop->registerListener(this, aPartSetId);
Events_ID aFeatureUpdatedId = aLoop->eventByName(EVENT_FEATURE_UPDATED);
aLoop->registerListener(this, aFeatureUpdatedId);
+ aLoop->registerListener(this, Events_Loop::eventByName(EVENT_FEATURE_CREATED));
+ aLoop->registerListener(this, Events_Loop::eventByName(EVENT_FEATURE_DELETED));
+
activateModule();
if (myMainWindow) {
myMainWindow->show();
}
return;
}
+ // Process creation of Part
+ if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_FEATURE_CREATED)) {
+ const Model_FeatureUpdatedMessage* aUpdMsg = dynamic_cast<const Model_FeatureUpdatedMessage*>(theMessage);
+ FeaturePtr aFeature = aUpdMsg->feature();
+ if (aFeature->getKind() == "Part") {
+ //The created part will be created in Object Browser later and we have to activate it
+ // only when it is created everywere
+ QTimer::singleShot(50, this, SLOT(activateLastPart()));
+ }
+ }
+
+ // Process deletion of a part
+ if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_FEATURE_DELETED)) {
+ PluginManagerPtr aMgr = ModelAPI_PluginManager::get();
+ if (aMgr->currentDocument() == aMgr->rootDocument())
+ activatePart(FeaturePtr()); // Activate PartSet
+ }
+
//Update property panel on corresponding message. If there is no current operation (no
//property panel), or received message has different feature to the current - do nothing.
static Events_ID aFeatureUpdatedId = Events_Loop::loop()->eventByName(EVENT_FEATURE_UPDATED);
QString aWchName = QString::fromStdString(theMessage->workbenchId());
QString aNestedFeatures = QString::fromStdString(theMessage->nestedFeatures());
bool isUsePropPanel = theMessage->isUseInput();
+ QString aId = QString::fromStdString(theMessage->id());
if (isSalomeMode()) {
- QString aId = QString::fromStdString(theMessage->id());
QAction* aAction = salomeConnector()->addFeature(aWchName,
aId,
QString::fromStdString(theMessage->text()),
aGroup = aPage->addGroup(aGroupName);
}
//Create feature...
- XGUI_Command* aCommand = aGroup->addFeature(QString::fromStdString(theMessage->id()),
+ XGUI_Command* aCommand = aGroup->addFeature(aId,
QString::fromStdString(theMessage->text()),
QString::fromStdString(theMessage->tooltip()),
QIcon(theMessage->icon().c_str()),
}
}
#else
- void* modLib = dlopen( libName.toLatin1(), RTLD_LAZY );
+ void* modLib = dlopen( libName.toLatin1(), RTLD_LAZY | RTLD_GLOBAL );
if ( !modLib ) {
err = QString( "Can not load library %1. %2" ).arg( libName ).arg( dlerror() );
} else {
//**************************************************************
void XGUI_Workshop::onContextMenuCommand(const QString& theId, bool isChecked)
{
- if (theId == "ACTIVATE_PART_CMD")
- activatePart(true);
+ QFeatureList aFeatures = mySelector->selectedFeatures();
+ if ((theId == "ACTIVATE_PART_CMD") && (aFeatures.size() > 0))
+ activatePart(aFeatures.first());
else if (theId == "DEACTIVATE_PART_CMD")
- activatePart(false);
+ activatePart(FeaturePtr());
+ else if (theId == "DELETE_CMD")
+ deleteFeatures(aFeatures);
+}
+//**************************************************************
+void XGUI_Workshop::activatePart(FeaturePtr theFeature)
+{
+ changeCurrentDocument(theFeature);
+ myObjectBrowser->activatePart(theFeature);
}
//**************************************************************
-void XGUI_Workshop::activatePart(bool toActivate)
+void XGUI_Workshop::activateLastPart()
{
- if (toActivate) {
- QFeatureList aFeatures = mySelector->selectedFeatures();
- if (aFeatures.size() > 0) {
- changeCurrentDocument(aFeatures.first());
- myObjectBrowser->activateCurrentPart(true);
+ PluginManagerPtr aMgr = ModelAPI_PluginManager::get();
+ DocumentPtr aDoc = aMgr->rootDocument();
+ FeaturePtr aLastPart = aDoc->feature(PARTS_GROUP, aDoc->size(PARTS_GROUP) - 1, true);
+ activatePart(aLastPart);
+}
+
+//**************************************************************
+void XGUI_Workshop::deleteFeatures(QFeatureList theList)
+{
+ QMainWindow* aDesktop = isSalomeMode()? salomeConnector()->desktop() : myMainWindow;
+ QMessageBox::StandardButton aRes = QMessageBox::warning(aDesktop, tr("Delete features"),
+ tr("Seleted features will be deleted. Continue?"),
+ QMessageBox::No | QMessageBox::Yes, QMessageBox::No);
+ if (aRes == QMessageBox::Yes) {
+ PluginManagerPtr aMgr = ModelAPI_PluginManager::get();
+ aMgr->rootDocument()->startOperation();
+ foreach (FeaturePtr aFeature, theList) {
+ if (aFeature->getKind() == "Part") {
+ DocumentPtr aDoc = aFeature->data()->docRef("PartDocument")->value();
+ if (aDoc == aMgr->currentDocument()) {
+ aDoc->close();
+ }
+ } //else
+ //aDoc = aFeature->document();
+ aMgr->rootDocument()->removeFeature(aFeature);
}
- } else {
- changeCurrentDocument(FeaturePtr());
- myObjectBrowser->activateCurrentPart(false);
+ aMgr->rootDocument()->finishOperation();
}
}
-