#include <Config_PropManager.h>
#include <Config_SelectionFilterMessage.h>
+#include <SUIT_ResourceMgr.h>
+
#include <QApplication>
#include <QFileDialog>
#include <QMessageBox>
#include <QMenu>
#include <QToolButton>
#include <QAction>
+#include <QDesktopWidget>
#ifdef _DEBUG
#include <QDebug>
{
myMainWindow = mySalomeConnector ? 0 : new AppElements_MainWindow();
+ if (myMainWindow) {
+ SUIT_ResourceMgr* aResMgr = ModuleBase_Preferences::resourceMgr();
+ bool aCloc = aResMgr->booleanValue("language", "locale", true);
+ if (aCloc)
+ QLocale::setDefault( QLocale::c() );
+ else
+ QLocale::setDefault( QLocale::system() );
+ }
+
myDisplayer = new XGUI_Displayer(this);
mySelector = new XGUI_SelectionMgr(this);
//connect(mySelector, SIGNAL(selectionChanged()), this, SLOT(updateModuleCommands()));
- myOperationMgr = new XGUI_OperationMgr(this);
+ myOperationMgr = new XGUI_OperationMgr(this, 0);
myActionsMgr = new XGUI_ActionsMgr(this);
- myErrorDlg = new XGUI_ErrorDialog(myMainWindow);
+ myErrorDlg = new XGUI_ErrorDialog(QApplication::desktop());
myContextMenuMgr = new XGUI_ContextMenuMgr(this);
connect(myContextMenuMgr, SIGNAL(actionTriggered(const QString&, bool)), this,
SLOT(onContextMenuCommand(const QString&, bool)));
myActionsMgr, SLOT(updateOnViewSelection()));
myModuleConnector = new XGUI_ModuleConnector(this);
+ myOperationMgr->setWorkshop(moduleConnector());
connect(myOperationMgr, SIGNAL(operationStarted(ModuleBase_Operation*)),
SLOT(onOperationStarted(ModuleBase_Operation*)));
SLOT(onOperationCommitted(ModuleBase_Operation*)));
connect(myOperationMgr, SIGNAL(operationAborted(ModuleBase_Operation*)),
SLOT(onOperationAborted(ModuleBase_Operation*)));
- connect(myMainWindow, SIGNAL(exitKeySequence()), SLOT(onExit()));
+ if (myMainWindow)
+ connect(myMainWindow, SIGNAL(exitKeySequence()), SLOT(onExit()));
connect(this, SIGNAL(errorOccurred(const QString&)), myErrorDlg, SLOT(addError(const QString&)));
+
+ //Config_PropManager::registerProp("Visualization", "object_default_color", "Object color",
+ // Config_Prop::Color, "225,225,225");
+
+ Config_PropManager::registerProp("Visualization", "result_body_color", "Body color",
+ Config_Prop::Color, ModelAPI_ResultBody::DEFAULT_COLOR());
+ Config_PropManager::registerProp("Visualization", "result_group_color", "Group color",
+ Config_Prop::Color, ModelAPI_ResultGroup::DEFAULT_COLOR());
+ Config_PropManager::registerProp("Visualization", "result_construction_color", "Construction color",
+ Config_Prop::Color, ModelAPI_ResultConstruction::DEFAULT_COLOR());
+ Config_PropManager::registerProp("Visualization", "result_part_color", "Part color",
+ Config_Prop::Color, ModelAPI_ResultPart::DEFAULT_COLOR());
}
//******************************************************
// Calling of loadCustomProps before activating module is required
// by Config_PropManger to restore user-defined path to plugins
ModuleBase_Preferences::loadCustomProps();
- activateModule();
+ createModule();
if (myMainWindow) {
myMainWindow->show();
updateCommandStatus();
emit applicationStarted();
}
+void XGUI_Workshop::activateModule()
+{
+ myModule->activateSelectionFilters();
+
+ connect(myDisplayer, SIGNAL(objectDisplayed(ObjectPtr, AISObjectPtr)),
+ myModule, SLOT(onObjectDisplayed(ObjectPtr, AISObjectPtr)));
+ connect(myDisplayer, SIGNAL(beforeObjectErase(ObjectPtr, AISObjectPtr)),
+ myModule, SLOT(onBeforeObjectErase(ObjectPtr, AISObjectPtr)));
+
+ myActionsMgr->update();
+
+}
+
+void XGUI_Workshop::deactivateModule()
+{
+ myModule->deactivateSelectionFilters();
+
+ disconnect(myDisplayer, SIGNAL(objectDisplayed(ObjectPtr, AISObjectPtr)),
+ myModule, SLOT(onObjectDisplayed(ObjectPtr, AISObjectPtr)));
+ disconnect(myDisplayer, SIGNAL(beforeObjectErase(ObjectPtr, AISObjectPtr)),
+ myModule, SLOT(onBeforeObjectErase(ObjectPtr, AISObjectPtr)));
+}
+
//******************************************************
void XGUI_Workshop::initMenu()
{
AppElements_Command* aCommand;
- aCommand = aGroup->addFeature("SAVE_CMD", tr("Save..."), tr("Save the document"),
+ aCommand = aGroup->addFeature("SAVE_CMD", tr("Save"), tr("Save the document"),
QIcon(":pictures/save.png"), QKeySequence::Save);
aCommand->connectTo(this, SLOT(onSave()));
//aCommand->disable();
} else if (theMessage->eventID() == Events_Loop::eventByName(EVENT_UPDATE_VIEWER_UNBLOCKED)) {
// the viewer's update context is unblocked, the viewer's update works
myDisplayer->enableUpdateViewer(true);
+ myDisplayer->updateViewer();
} else {
//Show error dialog if error message received.
std::shared_ptr<Events_Error> anAppError = std::dynamic_pointer_cast<Events_Error>(theMessage);
// of redisplay is called. This modification is made in order to have the line is updated
// by creation of a horizontal constraint on the line by preselection
myDisplayer->redisplay(aObj, false);
- //if (myOperationMgr->hasOperation()) {
- // ModuleBase_Operation* aOperation = myOperationMgr->currentOperation();
- // if (!aOperation->isEditOperation() &&
- // aOperation->hasObject(aObj) && myDisplayer->isActive(aObj))
- if (!myModule->canActivateSelection(aObj)) {
- if (myDisplayer->isActive(aObj))
- myDisplayer->deactivate(aObj);
- }
+ // Deactivate object of current operation from selection
+ deactivateActiveObject(aObj, false);
} else { // display object if the current operation has it
if (displayObject(aObj)) {
- //ModuleBase_Operation* aOperation = myOperationMgr->currentOperation();
- //if (aOperation && aOperation->hasObject(aObj)) {
- if (!myModule->canActivateSelection(aObj)) {
- #ifdef DEBUG_FEATURE_REDISPLAY
- QString anObjInfo = ModuleBase_Tools::objectInfo((aObj));
- qDebug(QString(" display object = %1").arg(anObjInfo).toStdString().c_str());
- #endif
- // Deactivate object of current operation from selection
- if (myDisplayer->isActive(aObj))
- myDisplayer->deactivate(aObj);
- }
+ // Deactivate object of current operation from selection
+ deactivateActiveObject(aObj, false);
}
}
}
myDisplayer->updateViewer();
}
+//******************************************************
+void XGUI_Workshop::deactivateActiveObject(const ObjectPtr& theObject, const bool theUpdateViewer)
+{
+ if (!myModule->canActivateSelection(theObject)) {
+ if (myDisplayer->isActive(theObject))
+ myDisplayer->deactivate(theObject, theUpdateViewer);
+ }
+}
+
//******************************************************
void XGUI_Workshop::onFeatureCreatedMsg(const std::shared_ptr<ModelAPI_ObjectUpdatedMessage>& theMsg)
{
}
updateCommandStatus();
- myModule->operationStarted(theOperation);
+ myModule->onOperationStarted(theOperation);
+
+ // the objects of the current operation should be deactivated
+ QObjectPtrList anObjects;
+ FeaturePtr aFeature = theOperation->feature();
+ anObjects.append(aFeature);
+ std::list<ResultPtr> aResults = aFeature->results();
+ std::list<ResultPtr>::const_iterator aIt;
+ for (aIt = aResults.begin(); aIt != aResults.end(); ++aIt) {
+ anObjects.append(*aIt);
+ }
+ QObjectPtrList::const_iterator anIt = anObjects.begin(), aLast = anObjects.end();
+ for (; anIt != aLast; anIt++)
+ deactivateActiveObject(*anIt, false);
+ if (anObjects.size() > 0)
+ myDisplayer->updateViewer();
}
//******************************************************
}
updateCommandStatus();
- myModule->operationResumed(theOperation);
+ myModule->onOperationResumed(theOperation);
}
hidePropertyPanel();
myPropertyPanel->cleanContent();
- // Activate objects created by current operation
- // in order to clean selection modes
- // the deactivation should be pefromed in the same place, where the mode is activated,
- // e.g. activation in the current widget activation, deactivation - in the widget's deactivation
- //QIntList aModes;
- //myDisplayer->activateObjects(aModes);
- myModule->operationStopped(theOperation);
-
- // if the operation is nested, do not deactivate objects
- //if (myOperationMgr->operationsCount() == 0) {
- // Activate selection mode for all objects
+ myModule->onOperationStopped(theOperation);
+
+ // the deactivated objects of the current operation should be activated back.
+ // They were deactivated on operation start or an object redisplay
+ QObjectPtrList anObjects;
+ FeaturePtr aFeature = theOperation->feature();
+ if (myDisplayer->isVisible(aFeature) && !myDisplayer->isActive(aFeature))
+ anObjects.append(aFeature);
+ std::list<ResultPtr> aResults = aFeature->results();
+ std::list<ResultPtr>::const_iterator aIt;
+ for (aIt = aResults.begin(); aIt != aResults.end(); ++aIt) {
+ ResultPtr anObject = *aIt;
+ if (myDisplayer->isVisible(anObject) && !myDisplayer->isActive(anObject)) {
+ anObjects.append(anObject);
+ }
+ }
QIntList aModes;
- // TODO: check on OCC_6.9.0
- // the module current active modes should not be deactivated in order to save the objects selected
- // the deactivate object in the mode of selection leads to the object is deselected in the viewer.
- // But, in OCC_6.8.0 this deselection does not happened automatically. It is necessary to call
- // ClearOutdatedSelection, but this method has an error in the realization, which should be fixed in
- // the OCC_6.9.0 release. Moreother, it is possible that ClearOutdatedSelection will be called inside
- // Deactivate method of AIS_InteractiveContext. In this case, we need not call it.
module()->activeSelectionModes(aModes);
- myDisplayer->activateObjects(aModes);
- //}
+ myDisplayer->activateObjects(aModes, anObjects);
}
void XGUI_Workshop::onOperationCommitted(ModuleBase_Operation* theOperation)
{
- myModule->operationCommitted(theOperation);
+ myModule->onOperationCommitted(theOperation);
}
void XGUI_Workshop::onOperationAborted(ModuleBase_Operation* theOperation)
{
- myModule->operationAborted(theOperation);
+ myModule->onOperationAborted(theOperation);
}
void XGUI_Workshop::setNestedFeatures(ModuleBase_Operation* theOperation)
}
//show file dialog, check if readable and open
- myCurrentDir = QFileDialog::getExistingDirectory(mainWindow());
+ myCurrentDir = QFileDialog::getExistingDirectory(mainWindow(), tr("Select folder"));
if (myCurrentDir.isEmpty())
return;
QFileInfo aFileInfo(myCurrentDir);
if(!isActiveOperationAborted())
return false;
QFileDialog dialog(mainWindow());
- dialog.setWindowTitle(tr("Select directory to save files..."));
+ dialog.setWindowTitle(tr("Select folder to save files..."));
dialog.setFileMode(QFileDialog::Directory);
dialog.setFilter(tr("Folders (*)"));
dialog.setOptions(QFileDialog::HideNameFilterDetails | QFileDialog::ShowDirsOnly);
if (!dialog.exec()) {
return false;
}
+
QString aTempDir = dialog.selectedFiles().first();
QDir aDir(aTempDir);
if (aDir.exists() && !aDir.entryInfoList(QDir::NoDotAndDotDot | QDir::AllEntries).isEmpty()) {
}
//******************************************************
-bool XGUI_Workshop::activateModule()
+bool XGUI_Workshop::createModule()
{
Config_ModuleReader aModuleReader;
QString moduleName = QString::fromStdString(aModuleReader.getModuleName());
if (!myModule)
return false;
- connect(myDisplayer, SIGNAL(objectDisplayed(ObjectPtr, AISObjectPtr)),
- myModule, SLOT(onObjectDisplayed(ObjectPtr, AISObjectPtr)));
- connect(myDisplayer, SIGNAL(beforeObjectErase(ObjectPtr, AISObjectPtr)),
- myModule, SLOT(onBeforeObjectErase(ObjectPtr, AISObjectPtr)));
+ //connect(myDisplayer, SIGNAL(objectDisplayed(ObjectPtr, AISObjectPtr)),
+ // myModule, SLOT(onObjectDisplayed(ObjectPtr, AISObjectPtr)));
+ //connect(myDisplayer, SIGNAL(beforeObjectErase(ObjectPtr, AISObjectPtr)),
+ // myModule, SLOT(onBeforeObjectErase(ObjectPtr, AISObjectPtr)));
myModule->createFeatures();
- myActionsMgr->update();
+ //myActionsMgr->update();
return true;
}
}
SessionPtr aMgr = ModelAPI_Session::get();
if (aMgr->hasModuleDocument()) {
- QAction *aUndoCmd, *aRedoCmd;
foreach(QAction* aCmd, aCommands) {
QString aId = aCmd->data().toString();
if (aId == "UNDO_CMD")
- aUndoCmd = aCmd;
+ aCmd->setEnabled(myModule->canUndo());
else if (aId == "REDO_CMD")
- aRedoCmd = aCmd;
+ aCmd->setEnabled(myModule->canRedo());
else
// Enable all commands
aCmd->setEnabled(true);
}
-
- aUndoCmd->setEnabled(myModule->canUndo());
- aRedoCmd->setEnabled(myModule->canRedo());
updateHistory();
} else {
foreach(QAction* aCmd, aCommands) {
}
//******************************************************
-void XGUI_Workshop::onFeatureTriggered()
-{
- QAction* aCmd = dynamic_cast<QAction*>(sender());
- if (aCmd) {
- QString aId = salomeConnector()->commandId(aCmd);
- if (!aId.isNull())
- myModule->launchOperation(aId);
- }
-}
+//void XGUI_Workshop::onFeatureTriggered()
+//{
+// QAction* aCmd = dynamic_cast<QAction*>(sender());
+// if (aCmd) {
+// QString aId = salomeConnector()->commandId(aCmd);
+// if (!aId.isNull())
+// myModule->launchOperation(aId);
+// }
+//}
//******************************************************
void XGUI_Workshop::salomeViewerSelectionChanged()
void XGUI_Workshop::showObjects(const QObjectPtrList& theList, bool isVisible)
{
foreach (ObjectPtr aObj, theList) {
+ /*
ResultPartPtr aPartRes = std::dynamic_pointer_cast<ModelAPI_ResultPart>(aObj);
if (aPartRes) {
DocumentPtr aDoc = aPartRes->partDoc();
SET_DISPLAY_GROUP(ModelAPI_ResultConstruction::group(), isVisible)
SET_DISPLAY_GROUP(ModelAPI_ResultGroup::group(), isVisible)
} else {
+ */
aObj->setDisplayed(isVisible);
- }
+ //}
}
Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_OBJECT_TO_REDISPLAY));
}
// Show only objects from the list
foreach (ObjectPtr aObj, theList) {
+ /*
ResultPartPtr aPartRes = std::dynamic_pointer_cast<ModelAPI_ResultPart>(aObj);
if (aPartRes) {
DocumentPtr aDoc = aPartRes->partDoc();
SET_DISPLAY_GROUP(ModelAPI_ResultConstruction::group(), true)
SET_DISPLAY_GROUP(ModelAPI_ResultGroup::group(), true)
} else {
+ */
aObj->setDisplayed(true);
- }
+ //}
}
Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_OBJECT_TO_REDISPLAY));