Skip to content

Commit d81695e

Browse files
committed
Allow modifying the SSD of the composite models
Load the updated text back when user switches to diagram view.
1 parent 8eb75ba commit d81695e

File tree

11 files changed

+255
-94
lines changed

11 files changed

+255
-94
lines changed

OMEdit/OMEditGUI/Annotations/LineAnnotation.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,8 @@ LineAnnotation::LineAnnotation(LineAnnotation::LineType lineType, Component *pSt
133133
MainWindow::instance()->getLibraryWidget()->getLibraryTreeModel()->showModelWidget(pStartComponent->getLibraryTreeItem(), false);
134134
}
135135
ShapeAnnotation *pShapeAnnotation;
136-
if (pStartComponent->getLibraryTreeItem()->getModelWidget()->getIconGraphicsView()->getShapesList().size() > 0) {
136+
if (pStartComponent->getLibraryTreeItem()->getModelWidget()->getIconGraphicsView()
137+
&& pStartComponent->getLibraryTreeItem()->getModelWidget()->getIconGraphicsView()->getShapesList().size() > 0) {
137138
pShapeAnnotation = pStartComponent->getLibraryTreeItem()->getModelWidget()->getIconGraphicsView()->getShapesList().at(0);
138139
mLineColor = pShapeAnnotation->getLineColor();
139140
} else if (pStartComponent->getShapesList().size() > 0) {

OMEdit/OMEditGUI/Component/Component.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2017,7 +2017,7 @@ void Component::updatePlacementAnnotation()
20172017
QString::number(mTransformation.getRotateAngle()));
20182018
} else if (pLibraryTreeItem->getLibraryType()== LibraryTreeItem::OMS) {
20192019
if (mpLibraryTreeItem && mpLibraryTreeItem->getOMSElement()) {
2020-
ssd_element_geometry_t *pElementGeometry = mpLibraryTreeItem->getOMSElement()->geometry;
2020+
ssd_element_geometry_t elementGeometry = mpLibraryTreeItem->getOMSElementGeometry();
20212021
QPointF extent1 = mTransformation.getExtent1();
20222022
QPointF extent2 = mTransformation.getExtent2();
20232023
if (mTransformation.hasOrigin()) {
@@ -2026,12 +2026,12 @@ void Component::updatePlacementAnnotation()
20262026
extent2.setX(extent2.x() + mTransformation.getOrigin().x());
20272027
extent2.setY(extent2.y() + mTransformation.getOrigin().y());
20282028
}
2029-
pElementGeometry->x1 = extent1.x();
2030-
pElementGeometry->y1 = extent1.y();
2031-
pElementGeometry->x2 = extent2.x();
2032-
pElementGeometry->y2 = extent2.y();
2033-
pElementGeometry->rotation = mTransformation.getRotateAngle();
2034-
OMSProxy::instance()->setElementGeometry(mpLibraryTreeItem->getNameStructure(), pElementGeometry);
2029+
elementGeometry.x1 = extent1.x();
2030+
elementGeometry.y1 = extent1.y();
2031+
elementGeometry.x2 = extent2.x();
2032+
elementGeometry.y2 = extent2.y();
2033+
elementGeometry.rotation = mTransformation.getRotateAngle();
2034+
OMSProxy::instance()->setElementGeometry(mpLibraryTreeItem->getNameStructure(), &elementGeometry);
20352035
} else if (mpLibraryTreeItem && mpLibraryTreeItem->getOMSConnector()) {
20362036
ssd_connector_geometry_t *pConnectorGeometry = mpLibraryTreeItem->getOMSConnector()->geometry;
20372037
pConnectorGeometry->x = Utilities::mapToCoOrdinateSystem(mTransformation.getOrigin().x(), -100, 100, 0, 1);

OMEdit/OMEditGUI/Editors/OMSimulatorEditor.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,8 @@ void OMSimulatorHighlighter::initializeSettings()
243243
<< "\\bssd:ConnectorGeometry\\b"
244244
<< "\\bParameter\\b"
245245
<< "\\bssd:Connections\\b"
246+
<< "\\bssd:Connection\\b"
247+
<< "\\bssd:ConnectionGeometry\\b"
246248
<< "\\bssd:DefaultExperiment\\b";
247249
foreach (const QString &elementPattern, elementPatterns)
248250
{

OMEdit/OMEditGUI/MainWindow.cpp

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1714,12 +1714,12 @@ void MainWindow::undo()
17141714
pModelWidget->getUndoStack()->undo();
17151715
pModelWidget->updateClassAnnotationIfNeeded();
17161716
pModelWidget->updateModelText(false);
1717-
}
1718-
/* We don't use the editor undo/redo for OMSimulator.
1719-
* So simply return from here now.
1720-
*/
1721-
if (pModelWidget->getLibraryTreeItem()->getLibraryType() == LibraryTreeItem::OMS) {
1722-
return;
1717+
/* We don't use the editor undo/redo for OMSimulator.
1718+
* So simply return from here now.
1719+
*/
1720+
if (pModelWidget->getLibraryTreeItem()->getLibraryType() == LibraryTreeItem::OMS) {
1721+
return;
1722+
}
17231723
}
17241724
if (pModelWidget && pModelWidget->getEditor() && (pModelWidget->getEditor()->getPlainTextEdit()->document()->isUndoAvailable())) {
17251725
if (pModelWidget &&
@@ -1759,12 +1759,12 @@ void MainWindow::redo()
17591759
pModelWidget->getUndoStack()->redo();
17601760
pModelWidget->updateClassAnnotationIfNeeded();
17611761
pModelWidget->updateModelText(false);
1762-
}
1763-
/* We don't use the editor undo/redo for OMSimulator.
1764-
* So simply return from here now.
1765-
*/
1766-
if (pModelWidget->getLibraryTreeItem()->getLibraryType() == LibraryTreeItem::OMS) {
1767-
return;
1762+
/* We don't use the editor undo/redo for OMSimulator.
1763+
* So simply return from here now.
1764+
*/
1765+
if (pModelWidget->getLibraryTreeItem()->getLibraryType() == LibraryTreeItem::OMS) {
1766+
return;
1767+
}
17681768
}
17691769
if (pModelWidget && pModelWidget->getEditor() && (pModelWidget->getEditor()->getPlainTextEdit()->document()->isRedoAvailable())) {
17701770
if (pModelWidget &&

OMEdit/OMEditGUI/Modeling/Commands.cpp

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -2078,15 +2078,15 @@ void AddSubModelIconCommand::redo()
20782078
// update element ssd_element_geometry_t
20792079
LibraryTreeItem *pElementLibraryTreeItem = mpGraphicsView->getModelWidget()->getLibraryTreeItem();
20802080
if (pElementLibraryTreeItem && pElementLibraryTreeItem->getOMSElement() && pElementLibraryTreeItem->getOMSElement()->geometry) {
2081-
ssd_element_geometry_t *pElementGeometry = pElementLibraryTreeItem->getOMSElement()->geometry;
2081+
ssd_element_geometry_t elementGeometry = pElementLibraryTreeItem->getOMSElementGeometry();
20822082
QString fileURI = "file:///" + mIcon;
2083-
if (pElementGeometry->iconSource) {
2084-
delete[] pElementGeometry->iconSource;
2083+
if (elementGeometry.iconSource) {
2084+
delete[] elementGeometry.iconSource;
20852085
}
20862086
size_t size = fileURI.toStdString().size() + 1;
2087-
pElementGeometry->iconSource = new char[size];
2088-
memcpy(pElementGeometry->iconSource, fileURI.toStdString().c_str(), size*sizeof(char));
2089-
if (OMSProxy::instance()->setElementGeometry(pElementLibraryTreeItem->getNameStructure(), pElementGeometry)) {
2087+
elementGeometry.iconSource = new char[size];
2088+
memcpy(elementGeometry.iconSource, fileURI.toStdString().c_str(), size*sizeof(char));
2089+
if (OMSProxy::instance()->setElementGeometry(pElementLibraryTreeItem->getNameStructure(), &elementGeometry)) {
20902090
// clear all shapes of the submodel first
20912091
foreach (ShapeAnnotation *pShapeAnnotation, mpGraphicsView->getShapesList()) {
20922092
mpGraphicsView->deleteShapeFromList(pShapeAnnotation);
@@ -2114,12 +2114,12 @@ void AddSubModelIconCommand::undo()
21142114
// update element ssd_element_geometry_t
21152115
LibraryTreeItem *pElementLibraryTreeItem = mpGraphicsView->getModelWidget()->getLibraryTreeItem();
21162116
if (pElementLibraryTreeItem && pElementLibraryTreeItem->getOMSElement() && pElementLibraryTreeItem->getOMSElement()->geometry) {
2117-
ssd_element_geometry_t *pElementGeometry = pElementLibraryTreeItem->getOMSElement()->geometry;
2118-
if (pElementGeometry->iconSource) {
2119-
delete[] pElementGeometry->iconSource;
2117+
ssd_element_geometry_t elementGeometry = pElementLibraryTreeItem->getOMSElementGeometry();
2118+
if (elementGeometry.iconSource) {
2119+
delete[] elementGeometry.iconSource;
21202120
}
2121-
pElementGeometry->iconSource = NULL;
2122-
if (OMSProxy::instance()->setElementGeometry(pElementLibraryTreeItem->getNameStructure(), pElementGeometry)) {
2121+
elementGeometry.iconSource = NULL;
2122+
if (OMSProxy::instance()->setElementGeometry(pElementLibraryTreeItem->getNameStructure(), &elementGeometry)) {
21232123
// clear all shapes of the submodel first
21242124
foreach (ShapeAnnotation *pShapeAnnotation, mpGraphicsView->getShapesList()) {
21252125
mpGraphicsView->deleteShapeFromList(pShapeAnnotation);
@@ -2163,15 +2163,15 @@ void UpdateSubModelIconCommand::redo()
21632163
// update element ssd_element_geometry_t
21642164
LibraryTreeItem *pElementLibraryTreeItem = mpShapeAnnotation->getGraphicsView()->getModelWidget()->getLibraryTreeItem();
21652165
if (pElementLibraryTreeItem && pElementLibraryTreeItem->getOMSElement() && pElementLibraryTreeItem->getOMSElement()->geometry) {
2166-
ssd_element_geometry_t *pElementGeometry = pElementLibraryTreeItem->getOMSElement()->geometry;
2166+
ssd_element_geometry_t elementGeometry = pElementLibraryTreeItem->getOMSElementGeometry();
21672167
QString fileURI = "file:///" + mNewIcon;
2168-
if (pElementGeometry->iconSource) {
2169-
delete[] pElementGeometry->iconSource;
2168+
if (elementGeometry.iconSource) {
2169+
delete[] elementGeometry.iconSource;
21702170
}
21712171
size_t size = fileURI.toStdString().size() + 1;
2172-
pElementGeometry->iconSource = new char[size];
2173-
memcpy(pElementGeometry->iconSource, fileURI.toStdString().c_str(), size*sizeof(char));
2174-
if (OMSProxy::instance()->setElementGeometry(pElementLibraryTreeItem->getNameStructure(), pElementGeometry)) {
2172+
elementGeometry.iconSource = new char[size];
2173+
memcpy(elementGeometry.iconSource, fileURI.toStdString().c_str(), size*sizeof(char));
2174+
if (OMSProxy::instance()->setElementGeometry(pElementLibraryTreeItem->getNameStructure(), &elementGeometry)) {
21752175
mpShapeAnnotation->setFileName(mNewIcon);
21762176
QPixmap pixmap;
21772177
pixmap.load(mNewIcon);
@@ -2192,15 +2192,15 @@ void UpdateSubModelIconCommand::undo()
21922192
// update element ssd_element_geometry_t
21932193
LibraryTreeItem *pElementLibraryTreeItem = mpShapeAnnotation->getGraphicsView()->getModelWidget()->getLibraryTreeItem();
21942194
if (pElementLibraryTreeItem && pElementLibraryTreeItem->getOMSElement() && pElementLibraryTreeItem->getOMSElement()->geometry) {
2195-
ssd_element_geometry_t *pElementGeometry = pElementLibraryTreeItem->getOMSElement()->geometry;
2195+
ssd_element_geometry_t elementGeometry = pElementLibraryTreeItem->getOMSElementGeometry();
21962196
QString fileURI = "file:///" + mOldIcon;
2197-
if (pElementGeometry->iconSource) {
2198-
delete[] pElementGeometry->iconSource;
2197+
if (elementGeometry.iconSource) {
2198+
delete[] elementGeometry.iconSource;
21992199
}
22002200
size_t size = fileURI.toStdString().size() + 1;
2201-
pElementGeometry->iconSource = new char[size];
2202-
memcpy(pElementGeometry->iconSource, fileURI.toStdString().c_str(), size*sizeof(char));
2203-
if (OMSProxy::instance()->setElementGeometry(pElementLibraryTreeItem->getNameStructure(), pElementGeometry)) {
2201+
elementGeometry.iconSource = new char[size];
2202+
memcpy(elementGeometry.iconSource, fileURI.toStdString().c_str(), size*sizeof(char));
2203+
if (OMSProxy::instance()->setElementGeometry(pElementLibraryTreeItem->getNameStructure(), &elementGeometry)) {
22042204
mpShapeAnnotation->setFileName(mOldIcon);
22052205
QPixmap pixmap;
22062206
pixmap.load(mOldIcon);
@@ -2229,12 +2229,12 @@ void DeleteSubModelIconCommand::redo()
22292229
// update element ssd_element_geometry_t
22302230
LibraryTreeItem *pElementLibraryTreeItem = mpGraphicsView->getModelWidget()->getLibraryTreeItem();
22312231
if (pElementLibraryTreeItem && pElementLibraryTreeItem->getOMSElement() && pElementLibraryTreeItem->getOMSElement()->geometry) {
2232-
ssd_element_geometry_t *pElementGeometry = pElementLibraryTreeItem->getOMSElement()->geometry;
2233-
if (pElementGeometry->iconSource) {
2234-
delete[] pElementGeometry->iconSource;
2232+
ssd_element_geometry_t elementGeometry = pElementLibraryTreeItem->getOMSElementGeometry();
2233+
if (elementGeometry.iconSource) {
2234+
delete[] elementGeometry.iconSource;
22352235
}
2236-
pElementGeometry->iconSource = NULL;
2237-
if (OMSProxy::instance()->setElementGeometry(pElementLibraryTreeItem->getNameStructure(), pElementGeometry)) {
2236+
elementGeometry.iconSource = NULL;
2237+
if (OMSProxy::instance()->setElementGeometry(pElementLibraryTreeItem->getNameStructure(), &elementGeometry)) {
22382238
// clear all shapes of the submodel first
22392239
foreach (ShapeAnnotation *pShapeAnnotation, mpGraphicsView->getShapesList()) {
22402240
mpGraphicsView->deleteShapeFromList(pShapeAnnotation);
@@ -2269,15 +2269,15 @@ void DeleteSubModelIconCommand::undo()
22692269
// update element ssd_element_geometry_t
22702270
LibraryTreeItem *pElementLibraryTreeItem = mpGraphicsView->getModelWidget()->getLibraryTreeItem();
22712271
if (pElementLibraryTreeItem && pElementLibraryTreeItem->getOMSElement() && pElementLibraryTreeItem->getOMSElement()->geometry) {
2272-
ssd_element_geometry_t *pElementGeometry = pElementLibraryTreeItem->getOMSElement()->geometry;
2272+
ssd_element_geometry_t elementGeometry = pElementLibraryTreeItem->getOMSElementGeometry();
22732273
QString fileURI = "file:///" + mIcon;
2274-
if (pElementGeometry->iconSource) {
2275-
delete[] pElementGeometry->iconSource;
2274+
if (elementGeometry.iconSource) {
2275+
delete[] elementGeometry.iconSource;
22762276
}
22772277
size_t size = fileURI.toStdString().size() + 1;
2278-
pElementGeometry->iconSource = new char[size];
2279-
memcpy(pElementGeometry->iconSource, fileURI.toStdString().c_str(), size*sizeof(char));
2280-
if (OMSProxy::instance()->setElementGeometry(pElementLibraryTreeItem->getNameStructure(), pElementGeometry)) {
2278+
elementGeometry.iconSource = new char[size];
2279+
memcpy(elementGeometry.iconSource, fileURI.toStdString().c_str(), size*sizeof(char));
2280+
if (OMSProxy::instance()->setElementGeometry(pElementLibraryTreeItem->getNameStructure(), &elementGeometry)) {
22812281
// clear all shapes of the submodel first
22822282
foreach (ShapeAnnotation *pShapeAnnotation, mpGraphicsView->getShapesList()) {
22832283
mpGraphicsView->deleteShapeFromList(pShapeAnnotation);

OMEdit/OMEditGUI/Modeling/LibraryTreeWidget.cpp

Lines changed: 46 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,37 @@ QString LibraryTreeItem::getClassText(LibraryTreeModel *pLibraryTreeModel)
267267
return mClassText;
268268
}
269269

270+
/*!
271+
* \brief LibraryTreeItem::getOMSElementGeometry
272+
* \return
273+
*/
274+
ssd_element_geometry_t LibraryTreeItem::getOMSElementGeometry()
275+
{
276+
ssd_element_geometry_t elementGeometry;
277+
if (getOMSElement() && getOMSElement()->geometry) {
278+
elementGeometry.x1 = getOMSElement()->geometry->x1;
279+
elementGeometry.y1 = getOMSElement()->geometry->y1;
280+
elementGeometry.x2 = getOMSElement()->geometry->x2;
281+
elementGeometry.y2 = getOMSElement()->geometry->y2;
282+
elementGeometry.rotation = getOMSElement()->geometry->rotation;
283+
elementGeometry.iconSource = getOMSElement()->geometry->iconSource;
284+
elementGeometry.iconRotation = getOMSElement()->geometry->iconRotation;
285+
elementGeometry.iconFlip = getOMSElement()->geometry->iconFlip;
286+
elementGeometry.iconFixedAspectRatio = getOMSElement()->geometry->iconFixedAspectRatio;
287+
} else {
288+
elementGeometry.x1 = 0.0; // -10.0;
289+
elementGeometry.y1 = 0.0; // -10.0;
290+
elementGeometry.x2 = 0.0; // 10.0;
291+
elementGeometry.y2 = 0.0; // 10.0;
292+
elementGeometry.rotation = 0.0;
293+
elementGeometry.iconSource = NULL;
294+
elementGeometry.iconRotation = 0.0;
295+
elementGeometry.iconFlip = false;
296+
elementGeometry.iconFixedAspectRatio = false;
297+
}
298+
return elementGeometry;
299+
}
300+
270301
/*!
271302
* \brief LibraryTreeItem::getTooltip
272303
* Returns the LibraryTreeItem tooltip.
@@ -1794,9 +1825,10 @@ bool LibraryTreeModel::unloadLibraryTreeItem(LibraryTreeItem *pLibraryTreeItem,
17941825
* \brief LibraryTreeModel::removeLibraryTreeItem
17951826
* Removes the LibraryTreeItem.
17961827
* \param pLibraryTreeItem
1828+
* \param type
17971829
* \return
17981830
*/
1799-
bool LibraryTreeModel::removeLibraryTreeItem(LibraryTreeItem *pLibraryTreeItem)
1831+
bool LibraryTreeModel::removeLibraryTreeItem(LibraryTreeItem *pLibraryTreeItem, LibraryTreeItem::LibraryType type)
18001832
{
18011833
/* QSortFilterProxy::filterAcceptRows changes the expand/collapse behavior of indexes or I am using it in some stupid way.
18021834
* If index is expanded and we delete it then the next sibling index automatically becomes expanded.
@@ -1811,7 +1843,15 @@ bool LibraryTreeModel::removeLibraryTreeItem(LibraryTreeItem *pLibraryTreeItem)
18111843
QModelIndex proxyIndex = mpLibraryWidget->getLibraryTreeProxyModel()->mapFromSource(modelIndex);
18121844
expandState = mpLibraryWidget->getLibraryTreeView()->isExpanded(proxyIndex);
18131845
}
1814-
unloadClassChildren(pLibraryTreeItem);
1846+
if (type == LibraryTreeItem::OMS) {
1847+
// remove the LibraryTreeItem from Libraries Browser
1848+
int row = pLibraryTreeItem->row();
1849+
beginRemoveRows(libraryTreeItemIndex(pLibraryTreeItem), row, row);
1850+
unloadFileChildren(pLibraryTreeItem);
1851+
endRemoveRows();
1852+
} else {
1853+
unloadClassChildren(pLibraryTreeItem);
1854+
}
18151855
if (pNextLibraryTreeItem) {
18161856
QModelIndex modelIndex = libraryTreeItemIndex(pNextLibraryTreeItem);
18171857
QModelIndex proxyIndex = mpLibraryWidget->getLibraryTreeProxyModel()->mapFromSource(modelIndex);
@@ -2489,7 +2529,7 @@ void LibraryTreeModel::unloadClassHelper(LibraryTreeItem *pLibraryTreeItem, Libr
24892529
void LibraryTreeModel::unloadClassChildren(LibraryTreeItem *pLibraryTreeItem)
24902530
{
24912531
int i = 0;
2492-
while(i < pLibraryTreeItem->childrenSize()) {
2532+
while (i < pLibraryTreeItem->childrenSize()) {
24932533
unloadClassChildren(pLibraryTreeItem->child(i));
24942534
i = 0; //Restart iteration
24952535
}
@@ -2525,7 +2565,7 @@ void LibraryTreeModel::unloadFileHelper(LibraryTreeItem *pLibraryTreeItem, Libra
25252565
void LibraryTreeModel::unloadFileChildren(LibraryTreeItem *pLibraryTreeItem)
25262566
{
25272567
int i = 0;
2528-
while(i < pLibraryTreeItem->childrenSize()) {
2568+
while (i < pLibraryTreeItem->childrenSize()) {
25292569
unloadFileChildren(pLibraryTreeItem->child(i));
25302570
i = 0; //Restart iteration
25312571
}
@@ -2574,7 +2614,7 @@ void LibraryTreeModel::deleteFileHelper(LibraryTreeItem *pLibraryTreeItem, Libra
25742614
void LibraryTreeModel::deleteFileChildren(LibraryTreeItem *pLibraryTreeItem)
25752615
{
25762616
int i = 0;
2577-
while(i < pLibraryTreeItem->childrenSize()) {
2617+
while (i < pLibraryTreeItem->childrenSize()) {
25782618
deleteFileChildren(pLibraryTreeItem->child(i));
25792619
i = 0; //Restart iteration
25802620
}
@@ -4599,7 +4639,7 @@ bool LibraryWidget::saveOMSLibraryTreeItem(LibraryTreeItem *pLibraryTreeItem)
45994639
fileName = pLibraryTreeItem->getFileName();
46004640
}
46014641

4602-
if (OMSProxy::instance()->saveModel(fileName, pLibraryTreeItem->getNameStructure())) {
4642+
if (OMSProxy::instance()->saveModel(pLibraryTreeItem->getNameStructure(), fileName)) {
46034643
/* mark the file as saved and update the labels. */
46044644
pLibraryTreeItem->setIsSaved(true);
46054645
pLibraryTreeItem->setFileName(fileName);

0 commit comments

Comments
 (0)