Skip to content

Commit

Permalink
Allow updating class contents manually via text view.
Browse files Browse the repository at this point in the history
  • Loading branch information
adeas31 committed Dec 3, 2015
1 parent 97a8ab0 commit 794659c
Show file tree
Hide file tree
Showing 7 changed files with 191 additions and 91 deletions.
8 changes: 6 additions & 2 deletions OMEdit/OMEditGUI/Editors/ModelicaTextEditor.cpp
Expand Up @@ -150,8 +150,12 @@ QStringList ModelicaTextEditor::getClassNames(QString *errorString)
*errorString = tr("Start and End modifiers are different");
return QStringList();
} else {
classNames = pOMCProxy->parseString("within " + pLibraryTreeItem->parent()->getNameStructure() + ";" + mpPlainTextEdit->toPlainText(),
pLibraryTreeItem->getNameStructure());
QString modelicaText = mpPlainTextEdit->toPlainText();
QString stringToParse = modelicaText;
if (!modelicaText.startsWith("within")) {
stringToParse = QString("within %1;%2").arg(pLibraryTreeItem->parent()->getNameStructure()).arg(modelicaText);
}
classNames = pOMCProxy->parseString(stringToParse, pLibraryTreeItem->getNameStructure());
}
// if user is defining multiple top level classes.
if (classNames.size() > 1) {
Expand Down
100 changes: 73 additions & 27 deletions OMEdit/OMEditGUI/Modeling/LibraryTreeWidget.cpp
Expand Up @@ -381,6 +381,7 @@ void LibraryTreeItem::setClassInformation(OMCInterface::getClassInformation_res
setFileName(classInformation.fileName);
}
setReadOnly(classInformation.fileReadOnly);
updateAttributes();
}
}

Expand Down Expand Up @@ -1104,7 +1105,7 @@ void LibraryTreeModel::createLibraryTreeItems(LibraryTreeItem *pLibraryTreeItem)
QString parentName = StringHandler::removeLastWordAfterDot(lib);
LibraryTreeItem *pParentLibraryTreeItem = findLibraryTreeItem(parentName, pLibraryTreeItem);
if (pParentLibraryTreeItem) {
createLibraryTreeItem(name, pParentLibraryTreeItem, true, false, false);
createLibraryTreeItem(name, pParentLibraryTreeItem, pParentLibraryTreeItem->isSaved(), false, false);
}
}
}
Expand Down Expand Up @@ -1359,7 +1360,7 @@ void LibraryTreeModel::updateLibraryTreeItemClassText(LibraryTreeItem *pLibraryT
}
// if we first updated the parent class then the child classes needs to be updated as well.
if (pParentLibraryTreeItem != pLibraryTreeItem) {
pOMCProxy->loadString(pParentLibraryTreeItem->getClassText(this), pParentLibraryTreeItem->getFileName(), Helper::utf8, false);
pOMCProxy->loadString(pParentLibraryTreeItem->getClassText(this), pParentLibraryTreeItem->getFileName(), Helper::utf8, false, false);
updateChildLibraryTreeItemClassText(pParentLibraryTreeItem, contents, pParentLibraryTreeItem->getFileName());
pParentLibraryTreeItem->setClassInformation(pOMCProxy->getClassInformation(pParentLibraryTreeItem->getNameStructure()));
}
Expand Down Expand Up @@ -1688,6 +1689,11 @@ bool LibraryTreeModel::unloadLibraryTreeItem(LibraryTreeItem *pLibraryTreeItem)
QModelIndex proxyIndex = mpLibraryWidget->getLibraryTreeProxyModel()->mapFromSource(modelIndex);
expandState = mpLibraryWidget->getLibraryTreeView()->isExpanded(proxyIndex);
}
int i = 0;
while(i < pLibraryTreeItem->getChildren().size()) {
unloadClassChildren(pLibraryTreeItem->child(i));
i = 0; //Restart iteration
}
// make the class non existing
pLibraryTreeItem->setNonExisting(true);
pLibraryTreeItem->setClassText("");
Expand All @@ -1702,25 +1708,13 @@ bool LibraryTreeModel::unloadLibraryTreeItem(LibraryTreeItem *pLibraryTreeItem)
beginRemoveRows(libraryTreeItemIndex(pLibraryTreeItem), row, row);
pLibraryTreeItem->parent()->removeChild(pLibraryTreeItem);
endRemoveRows();

if (pNextLibraryTreeItem) {
QModelIndex modelIndex = libraryTreeItemIndex(pNextLibraryTreeItem);
QModelIndex proxyIndex = mpLibraryWidget->getLibraryTreeProxyModel()->mapFromSource(modelIndex);
mpLibraryWidget->getLibraryTreeView()->setExpanded(proxyIndex, expandState);
}
/* Update the model switcher toolbar button. */
mpLibraryWidget->getMainWindow()->updateModelSwitcherMenu(0);
// if (!pLibraryTreeItem->isTopLevel()) {
// LibraryTreeItem *pContainingFileParentLibraryTreeItem = getContainingFileParentLibraryTreeItem(pLibraryTreeItem);
// // if we unload in a package saved in one file strucutre then we should update its containing file item text.
// if (pContainingFileParentLibraryTreeItem != pLibraryTreeItem) {
// updateLibraryTreeItemClassText(pContainingFileParentLibraryTreeItem);
// } else {
// // if we unload in a package saved in folder strucutre then we should mark its parent unsaved.
// pLibraryTreeItem->parent()->setIsSaved(false);
// updateLibraryTreeItem(pLibraryTreeItem->parent());
// }
// }
return true;
} else {
QMessageBox::critical(mpLibraryWidget->getMainWindow(), QString(Helper::applicationName).append(" - ").append(Helper::error),
Expand All @@ -1730,6 +1724,38 @@ bool LibraryTreeModel::unloadLibraryTreeItem(LibraryTreeItem *pLibraryTreeItem)
}
}

/*!
* \brief LibraryTreeModel::removeLibraryTreeItem
* Removes the LibraryTreeItem.
* \param pLibraryTreeItem
* \return
*/
bool LibraryTreeModel::removeLibraryTreeItem(LibraryTreeItem *pLibraryTreeItem)
{
/* QSortFilterProxy::filterAcceptRows changes the expand/collapse behavior of indexes or I am using it in some stupid way.
* If index is expanded and we delete it then the next sibling index automatically becomes expanded.
* The following code overcomes this issue. It stores the next index expand state and then apply it after deletion.
*/
int row = pLibraryTreeItem->row();
LibraryTreeItem *pNextLibraryTreeItem = 0;
bool expandState;
if (pLibraryTreeItem->parent()->getChildren().size() > row + 1) {
pNextLibraryTreeItem = pLibraryTreeItem->parent()->child(row + 1);
QModelIndex modelIndex = libraryTreeItemIndex(pNextLibraryTreeItem);
QModelIndex proxyIndex = mpLibraryWidget->getLibraryTreeProxyModel()->mapFromSource(modelIndex);
expandState = mpLibraryWidget->getLibraryTreeView()->isExpanded(proxyIndex);
}
unloadClassChildren(pLibraryTreeItem);
if (pNextLibraryTreeItem) {
QModelIndex modelIndex = libraryTreeItemIndex(pNextLibraryTreeItem);
QModelIndex proxyIndex = mpLibraryWidget->getLibraryTreeProxyModel()->mapFromSource(modelIndex);
mpLibraryWidget->getLibraryTreeView()->setExpanded(proxyIndex, expandState);
}
/* Update the model switcher toolbar button. */
mpLibraryWidget->getMainWindow()->updateModelSwitcherMenu(0);
return true;
}

/*!
* \brief LibraryTreeModel::moveClassUpDown
* Moves the class one level up/down.
Expand Down Expand Up @@ -1909,17 +1935,19 @@ LibraryTreeItem* LibraryTreeModel::getLibraryTreeItemFromFileHelper(LibraryTreeI
QString LibraryTreeModel::readLibraryTreeItemClassTextFromText(LibraryTreeItem *pLibraryTreeItem, QString contents)
{
QString text;
int startTrailingSpaces = 0;
int trailingSpaces = 0;
QTextStream textStream(&contents);
int lineNumber = 1;
while (!textStream.atEnd()) {
while (!textStream.atEnd() && lineNumber <= pLibraryTreeItem->mClassInformation.lineNumberEnd) {
QString currentLine = textStream.readLine();
if (pLibraryTreeItem->inRange(lineNumber)) {
// if reading the first line then determine the trailing spaces size.
if (pLibraryTreeItem->mClassInformation.lineNumberStart == lineNumber) {
trailingSpaces = StringHandler::getTrailingSpacesSize(currentLine);
startTrailingSpaces = StringHandler::getTrailingSpacesSize(currentLine);
trailingSpaces = startTrailingSpaces;
} else {
trailingSpaces = qMin(trailingSpaces, StringHandler::getTrailingSpacesSize(currentLine));
trailingSpaces = qMin(startTrailingSpaces, StringHandler::getTrailingSpacesSize(currentLine));
}
text += currentLine.mid(trailingSpaces) + "\n";
}
Expand Down Expand Up @@ -2995,6 +3023,7 @@ bool LibraryWidget::saveModelicaLibraryTreeItem(LibraryTreeItem *pLibraryTreeIte
{
bool result = false;
// if some file within folder structure package is changed and has valid file path then we should only save it.
pLibraryTreeItem = mpLibraryTreeModel->getContainingFileParentLibraryTreeItem(pLibraryTreeItem);
if (pLibraryTreeItem->isFilePathValid() && mpLibraryTreeModel->getContainingFileParentLibraryTreeItem(pLibraryTreeItem) == pLibraryTreeItem) {
result = saveModelicaLibraryTreeItemHelper(pLibraryTreeItem);
} else {
Expand Down Expand Up @@ -3027,7 +3056,14 @@ bool LibraryWidget::saveModelicaLibraryTreeItemHelper(LibraryTreeItem *pLibraryT
} else {
result = saveModelicaLibraryTreeItemFolder(pLibraryTreeItem);
for (int i = 0; i < pLibraryTreeItem->getChildren().size(); i++) {
saveModelicaLibraryTreeItemHelper(pLibraryTreeItem->child(i));
// if any child is saved in package.mo then only mark it saved and update its information becasue it should be already saved.
LibraryTreeItem *pChildLibraryTreeItem = pLibraryTreeItem->child(i);
if (pLibraryTreeItem->getFileName().compare(pChildLibraryTreeItem->getFileName()) == 0) {
saveChildLibraryTreeItemsOneFileHelper(pChildLibraryTreeItem);
saveChildLibraryTreeItemsOneFile(pChildLibraryTreeItem);
} else {
saveModelicaLibraryTreeItemHelper(pChildLibraryTreeItem);
}
}
}
return result;
Expand Down Expand Up @@ -3097,19 +3133,29 @@ void LibraryWidget::saveChildLibraryTreeItemsOneFile(LibraryTreeItem *pLibraryTr
{
for (int i = 0; i < pLibraryTreeItem->getChildren().size(); i++) {
LibraryTreeItem *pChildLibraryTreeItem = pLibraryTreeItem->child(i);
pChildLibraryTreeItem->setIsSaved(true);
pChildLibraryTreeItem->setFileName(pLibraryTreeItem->getFileName());
pChildLibraryTreeItem->mClassInformation.fileName = pLibraryTreeItem->getFileName();
mpMainWindow->getOMCProxy()->setSourceFile(pChildLibraryTreeItem->getNameStructure(), pLibraryTreeItem->getFileName());
if (pChildLibraryTreeItem->getModelWidget() && pChildLibraryTreeItem->getModelWidget()->isLoadedWidgetComponents()) {
pChildLibraryTreeItem->getModelWidget()->setWindowTitle(pChildLibraryTreeItem->getNameStructure());
pChildLibraryTreeItem->getModelWidget()->setModelFilePathLabel(pLibraryTreeItem->getFileName());
}
mpLibraryTreeModel->updateLibraryTreeItem(pChildLibraryTreeItem);
saveChildLibraryTreeItemsOneFileHelper(pChildLibraryTreeItem);
saveChildLibraryTreeItemsOneFile(pChildLibraryTreeItem);
}
}

/*!
* \brief LibraryWidget::saveChildLibraryTreeItemsOneFileHelper
* Helper function for LibraryWidget::saveChildLibraryTreeItemsOneFile()
* \param pLibraryTreeItem
*/
void LibraryWidget::saveChildLibraryTreeItemsOneFileHelper(LibraryTreeItem *pLibraryTreeItem)
{
pLibraryTreeItem->setIsSaved(true);
pLibraryTreeItem->setFileName(pLibraryTreeItem->parent()->getFileName());
pLibraryTreeItem->mClassInformation.fileName = pLibraryTreeItem->parent()->getFileName();
mpMainWindow->getOMCProxy()->setSourceFile(pLibraryTreeItem->getNameStructure(), pLibraryTreeItem->parent()->getFileName());
if (pLibraryTreeItem->getModelWidget() && pLibraryTreeItem->getModelWidget()->isLoadedWidgetComponents()) {
pLibraryTreeItem->getModelWidget()->setWindowTitle(pLibraryTreeItem->getNameStructure());
pLibraryTreeItem->getModelWidget()->setModelFilePathLabel(pLibraryTreeItem->parent()->getFileName());
}
mpLibraryTreeModel->updateLibraryTreeItem(pLibraryTreeItem);
}

/*!
* \brief LibraryWidget::saveModelicaLibraryTreeItemFolder
* Saves a Modelica LibraryTreeItem in folder structure.
Expand Down
2 changes: 2 additions & 0 deletions OMEdit/OMEditGUI/Modeling/LibraryTreeWidget.h
Expand Up @@ -240,6 +240,7 @@ class LibraryTreeModel : public QAbstractItemModel
bool unloadClass(LibraryTreeItem *pLibraryTreeItem, bool askQuestion = true);
bool unloadTLMOrTextFile(LibraryTreeItem *pLibraryTreeItem, bool askQuestion = true);
bool unloadLibraryTreeItem(LibraryTreeItem *pLibraryTreeItem);
bool removeLibraryTreeItem(LibraryTreeItem *pLibraryTreeItem);
void moveClassUpDown(LibraryTreeItem *pLibraryTreeItem, bool up);
void moveClassTopBottom(LibraryTreeItem *pLibraryTreeItem, bool top);
QString getUniqueTopLevelItemName(QString name, int number = 1);
Expand Down Expand Up @@ -358,6 +359,7 @@ class LibraryWidget : public QWidget
bool saveModelicaLibraryTreeItemHelper(LibraryTreeItem *pLibraryTreeItem);
bool saveModelicaLibraryTreeItemOneFile(LibraryTreeItem *pLibraryTreeItem);
void saveChildLibraryTreeItemsOneFile(LibraryTreeItem *pLibraryTreeItem);
void saveChildLibraryTreeItemsOneFileHelper(LibraryTreeItem *pLibraryTreeItem);
bool saveModelicaLibraryTreeItemFolder(LibraryTreeItem *pLibraryTreeItem);
bool saveTextLibraryTreeItem(LibraryTreeItem *pLibraryTreeItem);
bool saveTLMLibraryTreeItem(LibraryTreeItem *pLibraryTreeItem);
Expand Down

0 comments on commit 794659c

Please sign in to comment.