Skip to content

Commit

Permalink
Fixed unloading of classes.
Browse files Browse the repository at this point in the history
  • Loading branch information
adeas31 committed Aug 25, 2015
1 parent 812c65e commit 09dc0e6
Show file tree
Hide file tree
Showing 2 changed files with 102 additions and 42 deletions.
136 changes: 98 additions & 38 deletions OMEdit/OMEditGUI/Modeling/LibraryTreeWidget.cpp
Expand Up @@ -666,6 +666,12 @@ QModelIndex LibraryTreeModel::index(int row, int column, const QModelIndex &pare
}
}

/*!
* \brief LibraryTreeModel::parent
* Finds the parent for QModelIndex
* \param index
* \return
*/
QModelIndex LibraryTreeModel::parent(const QModelIndex &index) const
{
if (!index.isValid()) {
Expand All @@ -680,6 +686,13 @@ QModelIndex LibraryTreeModel::parent(const QModelIndex &index) const
return createIndex(pParentLibraryTreeItem->row(), 0, pParentLibraryTreeItem);
}

/*!
* \brief LibraryTreeModel::data
* Returns the LibraryTreeItem data.
* \param index
* \param role
* \return
*/
QVariant LibraryTreeModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid()) {
Expand All @@ -690,6 +703,12 @@ QVariant LibraryTreeModel::data(const QModelIndex &index, int role) const
return pLibraryTreeItem->data(index.column(), role);
}

/*!
* \brief LibraryTreeModel::flags
* Returns the LibraryTreeItem flags.
* \param index
* \return
*/
Qt::ItemFlags LibraryTreeModel::flags(const QModelIndex &index) const
{
if (!index.isValid()) {
Expand All @@ -699,12 +718,19 @@ Qt::ItemFlags LibraryTreeModel::flags(const QModelIndex &index) const
}
}

LibraryTreeItem* LibraryTreeModel::findLibraryTreeItem(const QString &name, LibraryTreeItem *root) const
/*!
* \brief LibraryTreeModel::findLibraryTreeItem
* Finds the LibraryTreeItem based on the name and case sensitivity.
* \param name
* \param root
* \return
*/
LibraryTreeItem* LibraryTreeModel::findLibraryTreeItem(const QString &name, LibraryTreeItem *root, Qt::CaseSensitivity caseSensitivity) const
{
if (!root) {
root = mpRootLibraryTreeItem;
}
if (root->getNameStructure() == name) {
if (root->getNameStructure().compare(name, caseSensitivity) == 0) {
return root;
}
for (int i = root->getChildren().size(); --i >= 0; ) {
Expand All @@ -715,6 +741,13 @@ LibraryTreeItem* LibraryTreeModel::findLibraryTreeItem(const QString &name, Libr
return 0;
}

/*!
* \brief LibraryTreeModel::findLibraryTreeItem
* Finds the LibraryTreeItem based on the Regular Expression.
* \param regExp
* \param root
* \return
*/
LibraryTreeItem* LibraryTreeModel::findLibraryTreeItem(const QRegExp &regExp, LibraryTreeItem *root) const
{
if (!root) {
Expand All @@ -731,29 +764,17 @@ LibraryTreeItem* LibraryTreeModel::findLibraryTreeItem(const QRegExp &regExp, Li
return 0;
}

/*!
* \brief LibraryTreeModel::libraryTreeItemIndex
* Finds the QModelIndex attached to LibraryTreeItem.
* \param pLibraryTreeItem
* \return
*/
QModelIndex LibraryTreeModel::libraryTreeItemIndex(const LibraryTreeItem *pLibraryTreeItem) const
{
return libraryTreeItemIndexHelper(pLibraryTreeItem, mpRootLibraryTreeItem, QModelIndex());
}

QModelIndex LibraryTreeModel::libraryTreeItemIndexHelper(const LibraryTreeItem *pLibraryTreeItem,
const LibraryTreeItem *pParentLibraryTreeItem,
const QModelIndex &parentIndex) const
{
if (pLibraryTreeItem == pParentLibraryTreeItem) {
return parentIndex;
}
for (int i = pParentLibraryTreeItem->getChildren().size(); --i >= 0; ) {
const LibraryTreeItem *childItem = pParentLibraryTreeItem->getChildren().at(i);
QModelIndex childIndex = index(i, 0, parentIndex);
QModelIndex index = libraryTreeItemIndexHelper(pLibraryTreeItem, childItem, childIndex);
if (index.isValid()) {
return index;
}
}
return QModelIndex();
}

/*!
* \brief LibraryTreeModel::addModelicaLibraries
* Loads the user defined Modelica Libraries.
Expand Down Expand Up @@ -1152,6 +1173,14 @@ LibraryTreeItem* LibraryTreeModel::getLibraryTreeItemFromFile(QString fileName,
return getLibraryTreeItemFromFileHelper(mpRootLibraryTreeItem, fileName, lineNumber);
}

/*!
* \brief LibraryTreeModel::showModelWidget
* Shows the ModelWidget
* \param pLibraryTreeItem
* \param text
* \param show
* \param newModel
*/
void LibraryTreeModel::showModelWidget(LibraryTreeItem *pLibraryTreeItem, QString text, bool show, bool newModel)
{
QApplication::setOverrideCursor(Qt::WaitCursor);
Expand All @@ -1178,6 +1207,11 @@ void LibraryTreeModel::showModelWidget(LibraryTreeItem *pLibraryTreeItem, QStrin
QApplication::restoreOverrideCursor();
}

/*!
* \brief LibraryTreeModel::showHideProtectedClasses
* Shows/hides the protected LibraryTreeItems by invalidating the view.
* The LibraryTreeProxyModel shows/hides the LibraryTreeItems in LibraryTreeProxyModel::filterAcceptsRow() based on the settings value.
*/
void LibraryTreeModel::showHideProtectedClasses()
{
/* invalidate the view so that the items show the updated values. */
Expand Down Expand Up @@ -1223,9 +1257,7 @@ bool LibraryTreeModel::unloadClass(LibraryTreeItem *pLibraryTreeItem, bool askQu
If deleteClass is successfull remove the class from Library Browser and delete the corresponding ModelWidget.
*/
if (mpLibraryWidget->getMainWindow()->getOMCProxy()->deleteClass(pLibraryTreeItem->getNameStructure())) {
/* remove the child items first */
unloadClassChildren(pLibraryTreeItem);
unloadClassHelper(pLibraryTreeItem, pLibraryTreeItem->parent());
mpLibraryWidget->getMainWindow()->getOMCProxy()->removeCachedOMCCommand(pLibraryTreeItem->getNameStructure());
/* Update the model switcher toolbar button. */
mpLibraryWidget->getMainWindow()->updateModelSwitcherMenu(0);
Expand All @@ -1238,22 +1270,6 @@ bool LibraryTreeModel::unloadClass(LibraryTreeItem *pLibraryTreeItem, bool askQu
}
}

/*!
* \brief LibraryTreeModel::unloadClassChildren
* Unloads/deletes the LibraryTreeItem childrens.
* \param pParentLibraryTreeItem
*/
void LibraryTreeModel::unloadClassChildren(LibraryTreeItem *pParentLibraryTreeItem)
{
for (int i = 0 ; i < pParentLibraryTreeItem->getChildren().size(); i++) {
LibraryTreeItem *pChildLibraryTreeItem = pParentLibraryTreeItem->child(i);
if (pChildLibraryTreeItem->getChildren().size() > 0) {
unloadClassChildren(pChildLibraryTreeItem);
}
unloadClassHelper(pChildLibraryTreeItem, pParentLibraryTreeItem);
}
}

/*!
* \brief LibraryTreeModel::unloadTLMOrTextFile
* Unloads/deletes the TLM/Text class.
Expand Down Expand Up @@ -1323,6 +1339,31 @@ QString LibraryTreeModel::getUniqueTopLevelItemName(QString name, int number)
return newItemName;
}

/*!
* \brief LibraryTreeModel::libraryTreeItemIndexHelper
* Helper function for LibraryTreeModel::libraryTreeItemIndex()
* \param pLibraryTreeItem
* \param pParentLibraryTreeItem
* \param parentIndex
* \return
*/
QModelIndex LibraryTreeModel::libraryTreeItemIndexHelper(const LibraryTreeItem *pLibraryTreeItem,
const LibraryTreeItem *pParentLibraryTreeItem, const QModelIndex &parentIndex) const
{
if (pLibraryTreeItem == pParentLibraryTreeItem) {
return parentIndex;
}
for (int i = pParentLibraryTreeItem->getChildren().size(); --i >= 0; ) {
const LibraryTreeItem *childItem = pParentLibraryTreeItem->getChildren().at(i);
QModelIndex childIndex = index(i, 0, parentIndex);
QModelIndex index = libraryTreeItemIndexHelper(pLibraryTreeItem, childItem, childIndex);
if (index.isValid()) {
return index;
}
}
return QModelIndex();
}

/*!
* \brief LibraryTreeModel::getLibraryTreeItemFromFileHelper
* Helper function for LibraryTreeModel::getLibraryTreeItemFromFile()
Expand Down Expand Up @@ -1373,6 +1414,25 @@ void LibraryTreeModel::unloadClassHelper(LibraryTreeItem *pLibraryTreeItem, Libr
endRemoveRows();
}

/*!
* \brief LibraryTreeModel::unloadClassChildren
* Unloads/deletes the LibraryTreeItem childrens.
* \param pLibraryTreeItem
*/
void LibraryTreeModel::unloadClassChildren(LibraryTreeItem *pLibraryTreeItem)
{
int i = 0;
while(i < pLibraryTreeItem->getChildren().size()) {
unloadClassChildren(pLibraryTreeItem->child(i));
i = 0; //Restart iteration
}
unloadClassHelper(pLibraryTreeItem, pLibraryTreeItem->parent());
}

/*!
* \brief LibraryTreeModel::supportedDropActions
* \return
*/
Qt::DropActions LibraryTreeModel::supportedDropActions() const
{
return Qt::CopyAction;
Expand Down
8 changes: 4 additions & 4 deletions OMEdit/OMEditGUI/Modeling/LibraryTreeWidget.h
Expand Up @@ -185,11 +185,9 @@ class LibraryTreeModel : public QAbstractItemModel
QModelIndex parent(const QModelIndex & index) const;
QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const;
Qt::ItemFlags flags(const QModelIndex &index) const;
LibraryTreeItem* findLibraryTreeItem(const QString &name, LibraryTreeItem *root = 0) const;
LibraryTreeItem* findLibraryTreeItem(const QString &name, LibraryTreeItem *root = 0, Qt::CaseSensitivity caseSensitivity = Qt::CaseSensitive) const;
LibraryTreeItem* findLibraryTreeItem(const QRegExp &regExp, LibraryTreeItem *root = 0) const;
QModelIndex libraryTreeItemIndex(const LibraryTreeItem *pLibraryTreeItem) const;
QModelIndex libraryTreeItemIndexHelper(const LibraryTreeItem *pLibraryTreeItem, const LibraryTreeItem *pParentLibraryTreeItem,
const QModelIndex &parentIndex) const;
void addModelicaLibraries(QSplashScreen *pSplashScreen);
void createLibraryTreeItems(LibraryTreeItem *pLibraryTreeItem);
LibraryTreeItem* createLibraryTreeItem(QString name, LibraryTreeItem *pParentLibraryTreeItem, bool isSaved = true);
Expand All @@ -206,14 +204,16 @@ class LibraryTreeModel : public QAbstractItemModel
void showModelWidget(LibraryTreeItem *pLibraryTreeItem, QString text = QString(), bool show = true, bool newModel = false);
void showHideProtectedClasses();
bool unloadClass(LibraryTreeItem *pLibraryTreeItem, bool askQuestion = true);
void unloadClassChildren(LibraryTreeItem *pParentLibraryTreeItem);
bool unloadTLMOrTextFile(LibraryTreeItem *pLibraryTreeItem, bool askQuestion = true);
QString getUniqueTopLevelItemName(QString name, int number = 1);
private:
LibraryWidget *mpLibraryWidget;
LibraryTreeItem *mpRootLibraryTreeItem;
QModelIndex libraryTreeItemIndexHelper(const LibraryTreeItem *pLibraryTreeItem, const LibraryTreeItem *pParentLibraryTreeItem,
const QModelIndex &parentIndex) const;
LibraryTreeItem* getLibraryTreeItemFromFileHelper(LibraryTreeItem *pLibraryTreeItem, QString fileName, int lineNumber);
void unloadClassHelper(LibraryTreeItem *pLibraryTreeItem, LibraryTreeItem *pParentLibraryTreeItem);
void unloadClassChildren(LibraryTreeItem *pLibraryTreeItem);
protected:
Qt::DropActions supportedDropActions() const;
};
Expand Down

0 comments on commit 09dc0e6

Please sign in to comment.