// Copyright (C) 2013-2014 CEA/DEN, EDF R&D, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // // internal includes #include "XAOPlugin_ExportDlg.h" #include "XAOPlugin_IOperations_i.hh" // GUI includes #include #include #include #include #include #include #include #include // GEOM includes #include "GeometryGUI.h" #include "GEOMBase.h" #include "GEOMImpl_Types.hxx" // OCCT Includes #include #include #include #include #include // QT includes #include #include #include #include #include #include #include #include #include #include //================================================================================= // Constructor //================================================================================= XAOPlugin_ExportDlg::XAOPlugin_ExportDlg(GeometryGUI* geometryGUI, QWidget* parent) : GEOMBase_Skeleton(geometryGUI, parent, false) { m_mainObj = GEOM::GEOM_Object::_nil(); SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); QPixmap imageOp(resMgr->loadPixmap("GEOM", tr("XAOPLUGIN_EXPORT_ICON"))); QPixmap iconSelect(resMgr->loadPixmap("GEOM", tr("ICON_SELECT"))); setWindowTitle(tr("XAOPLUGIN_EXPORT_TITLE")); /***************************************************************/ mainFrame()->GroupConstructors->setTitle(tr("XAOPLUGIN_EXPORT_TITLE")); mainFrame()->RadioButton1->setIcon(imageOp); mainFrame()->RadioButton2->setAttribute(Qt::WA_DeleteOnClose); mainFrame()->RadioButton2->close(); mainFrame()->RadioButton3->setAttribute(Qt::WA_DeleteOnClose); mainFrame()->RadioButton3->close(); // hide name mainFrame()->GroupBoxName->hide(); //**************************** // Selection Group box QGroupBox* gbxExport = new QGroupBox(parent); QGridLayout* gridLayoutExport = new QGridLayout(gbxExport); #ifndef Q_OS_MAC gridLayoutExport->setSpacing(6); gridLayoutExport->setContentsMargins(9, 9, 9, 9); #endif gridLayoutExport->setObjectName(QString::fromUtf8("gridLayoutExport")); // Line 0 QLabel* lblShape = new QLabel(tr("XAOPLUGIN_EXPORT_INGSHAPE"), gbxExport); btnShapeSelect = new QPushButton(gbxExport); btnShapeSelect->setIcon(iconSelect); ledShape = new QLineEdit(gbxExport); ledShape->setMinimumSize(QSize(100, 0)); int line = 0, col = 0; gridLayoutExport->addWidget(lblShape, line, col++, 1, 1); gridLayoutExport->addWidget(btnShapeSelect, line, col++, 1, 1); gridLayoutExport->addWidget(ledShape, line, col++, 1, 1); // Line 1 QLabel* lblFileName = new QLabel(tr("XAOPLUGIN_EXPORT_FILENAME"), gbxExport); btnFileSelect = new QPushButton(gbxExport); ledFileName = new QLineEdit(gbxExport); btnFileSelect->setText("..."); line++; col = 0; gridLayoutExport->addWidget(lblFileName, line, col++, 1, 1); gridLayoutExport->addWidget(btnFileSelect, line, col++, 1, 1); gridLayoutExport->addWidget(ledFileName, line, col++, 1, 1); // Line 2 QLabel* lblAuthor = new QLabel(tr("XAOPLUGIN_EXPORT_AUTHOR"), gbxExport); ledAuthor = new QLineEdit(gbxExport); line++; col = 0; gridLayoutExport->addWidget(lblAuthor, line, col++, 2, 1); col++; // span gridLayoutExport->addWidget(ledAuthor, line, col++, 1, 1); //**************************** // Filter Group box QGroupBox* gbxFilter = new QGroupBox(parent); QGridLayout* gridLayoutFilter = new QGridLayout(gbxFilter); #ifndef Q_OS_MAC gridLayoutFilter->setSpacing(6); gridLayoutFilter->setContentsMargins(9, 9, 9, 9); #endif gridLayoutFilter->setObjectName(QString::fromUtf8("gbxFilter")); // Line 0 QLabel* lblGroups = new QLabel(tr("XAOPLUGIN_EXPORT_LGROUPS"), gbxFilter); QLabel* lblFields = new QLabel(tr("XAOPLUGIN_EXPORT_LFIELDS"), gbxFilter); line = 0, col = 0; gridLayoutFilter->addWidget(lblGroups, line, col++, 1, 1); gridLayoutFilter->addWidget(lblFields, line, col++, 1, 1); // Line 1 lstGroups = new QListWidget(gbxFilter); lstGroups->setSelectionMode(QAbstractItemView::NoSelection); lstFields = new QListWidget(gbxFilter); lstFields->setSelectionMode(QAbstractItemView::NoSelection); line++; col = 0; gridLayoutFilter->addWidget(lstGroups, line, col++, 1, 1); gridLayoutFilter->addWidget(lstFields, line, col++, 1, 1); //**************************** QVBoxLayout* layout = new QVBoxLayout(centralWidget()); layout->setMargin(0); layout->setSpacing(6); layout->addWidget(gbxExport); layout->addWidget(gbxFilter); // set help setHelpFileName("xao_format_page.html"); Init(); } //================================================================================= // Destructor //================================================================================= XAOPlugin_ExportDlg::~XAOPlugin_ExportDlg() { // no need to delete child widgets, Qt does it all for us } //================================================================================= // function : Init() // purpose : //================================================================================= void XAOPlugin_ExportDlg::Init() { // Get setting of step value from file configuration m_groups.clear(); m_fields.clear(); // Signal/slot connections connect(buttonOk(), SIGNAL(clicked()), this, SLOT(ClickOnOk())); connect(buttonApply(), SIGNAL(clicked()), this, SLOT(ClickOnApply())); connect(btnShapeSelect, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument())); connect(((SalomeApp_Application*) (SUIT_Session::session()->activeApplication()))->selectionMgr(), SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); connect(btnFileSelect, SIGNAL(clicked()), this, SLOT(btnFileSelectClicked())); initName(tr("XAOPLUGIN_EXPORTXAO")); SelectionIntoArgument(); } //================================================================================= // function : processObject() // purpose : Fill dialog fields in accordance with myObj //================================================================================= void XAOPlugin_ExportDlg::processObject() { lstGroups->clear(); lstFields->clear(); m_groups.clear(); m_fields.clear(); if (m_mainObj->_is_nil()) { ledShape->setText(""); } else { ledShape->setText(GEOMBase::GetName(m_mainObj)); GEOM::GEOM_IShapesOperations_var shapeOp = getGeomEngine()->GetIShapesOperations(getStudyId()); // add groups names GEOM::ListOfGO_var groups = shapeOp->GetExistingSubObjects(m_mainObj, true); for (int i = 0, n = groups->length(); i < n; i++) { QListWidgetItem* item = new QListWidgetItem(); item->setData(Qt::UserRole, QVariant(i)); item->setText(GEOMBase::GetName(groups[i])); item->setFlags(item->flags() | Qt::ItemIsUserCheckable); item->setCheckState(Qt::Checked); lstGroups->addItem(item); m_groups.append(GEOM::GeomObjPtr(groups[i].in())); } lstGroups->sortItems(Qt::AscendingOrder); // add fields GEOM::GEOM_IFieldOperations_var fieldOp = getGeomEngine()->GetIFieldOperations(getStudyId()); GEOM::ListOfFields_var fields = fieldOp->GetFields(m_mainObj); for (int i = 0, n = fields->length(); i < n; i++) { QListWidgetItem* item = new QListWidgetItem(); item->setData(Qt::UserRole, QVariant(i)); item->setText(fields[i]->GetName()); item->setFlags(item->flags() | Qt::ItemIsUserCheckable); item->setCheckState(Qt::Checked); lstFields->addItem(item); m_fields.append(GEOM::GeomFieldPtr(fields[i].in())); } lstFields->sortItems(Qt::AscendingOrder); } } //================================================================================= // function : ClickOnOk() // purpose : //================================================================================= void XAOPlugin_ExportDlg::ClickOnOk() { setIsApplyAndClose(true); if (ClickOnApply()) ClickOnCancel(); setIsApplyAndClose(false); } //================================================================================= // function : ClickOnApply() // purpose : //================================================================================= bool XAOPlugin_ExportDlg::ClickOnApply() { if (!isApplyAndClose()) { setIsDisableBrowsing(true); setIsDisplayResult(false); } QString msg; if (!isValid(msg)) { showError(msg); return false; } SUIT_OverrideCursor wc; SUIT_Session::session()->activeApplication()->putInfo(""); try { if (openCommand()) if (!execute()) { abortCommand(); showError(); return false; } } catch (const SALOME::SALOME_Exception& e) { SalomeApp_Tools::QtCatchCorbaException(e); abortCommand(); return false; } commitCommand(); if (!isApplyAndClose()) { setIsDisableBrowsing(false); setIsDisplayResult(true); } processObject(); return true; } //================================================================================= // function : SelectionIntoArgument() // purpose : Called when selection as changed or other case //================================================================================= void XAOPlugin_ExportDlg::SelectionIntoArgument() { m_mainObj = GEOM::GEOM_Object::_nil(); LightApp_SelectionMgr* selMgr = myGeomGUI->getApp()->selectionMgr(); SALOME_ListIO selList; selMgr->selectedObjects(selList); if (selList.Extent() == 1) { m_mainObj = GEOMBase::ConvertIOinGEOMObject(selList.First()); } processObject(); } //================================================================================= // function : SetEditCurrentArgument() // purpose : //================================================================================= void XAOPlugin_ExportDlg::SetEditCurrentArgument() { ledShape->setFocus(); myEditCurrentArgument = ledShape; SelectionIntoArgument(); } //================================================================================= // function : btnFileSelectClicked() // purpose : //================================================================================= void XAOPlugin_ExportDlg::btnFileSelectClicked() { QString file = SUIT_FileDlg::getFileName(this, ledFileName->text(), tr("XAOPLUGIN_FILES"), tr("XAOPLUGIN_EXPORT_SELECT"), false); if ( !file.isEmpty() ) ledFileName->setText( file ); } //================================================================================= // function : ActivateThisDialog() // purpose : //================================================================================= void XAOPlugin_ExportDlg::ActivateThisDialog() { GEOMBase_Skeleton::ActivateThisDialog(); } //================================================================================= // function : enterEvent [REDEFINED] // purpose : //================================================================================= void XAOPlugin_ExportDlg::enterEvent(QEvent*) { if (!mainFrame()->GroupConstructors->isEnabled()) ActivateThisDialog(); } //================================================================================= // function : createOperation // purpose : //================================================================================= GEOM::GEOM_IOperations_ptr XAOPlugin_ExportDlg::createOperation() { return getGeomEngine()->GetPluginOperations( getStudyId(), "XAOPluginEngine" ); } //================================================================================= // function : isValid // purpose : //================================================================================= bool XAOPlugin_ExportDlg::isValid(QString& msg) { // check shape if (ledShape->text().isEmpty()) return false; // check file name if (ledFileName->text().isEmpty()) return false; return true; } //================================================================================= // function : execute // purpose : //================================================================================= bool XAOPlugin_ExportDlg::execute() { bool res = false; QString author = ledAuthor->text(); QString fileName = ledFileName->text(); // get selected groups QList selGroups; for (int j = 0; j < lstGroups->count(); ++j) { if (lstGroups->item(j)->checkState() == Qt::Checked) selGroups.append(lstGroups->item(j)); } GEOM::ListOfGO_var groups = new GEOM::ListOfGO(); groups->length(selGroups.count()); int i = 0; for (QList::iterator it = selGroups.begin(); it != selGroups.end(); ++it) { QListWidgetItem* item = (*it); int index = item->data(Qt::UserRole).toInt(); groups[i++] = m_groups[index].copy(); } // get selected fields QList selFields; for (int j = 0; j < lstFields->count(); ++j) { if (lstFields->item(j)->checkState() == Qt::Checked) selFields.append(lstFields->item(j)); } GEOM::ListOfFields_var fields = new GEOM::ListOfFields(); fields->length(selFields.count()); i = 0; for (QList::iterator it = selFields.begin(); it != selFields.end(); ++it) { QListWidgetItem* item = (*it); int index = item->data(Qt::UserRole).toInt(); fields[i++] = m_fields[index].copy(); } // call engine function GEOM::IXAOOperations_var aXAOOp = GEOM::IXAOOperations::_narrow( getOperation() ); res = aXAOOp->ExportXAO(m_mainObj, groups, fields, author.toStdString().c_str(), fileName.toStdString().c_str()); return res; }