itom 1.0.14
D:/git-itom/sources/itom/Qitom/widgets/workspaceWidget.h
00001 /* ********************************************************************
00002     itom software
00003     URL: http://www.uni-stuttgart.de/ito
00004     Copyright (C) 2013, Institut für Technische Optik (ITO),
00005     Universität Stuttgart, Germany
00006 
00007     This file is part of itom.
00008   
00009     itom is free software; you can redistribute it and/or modify it
00010     under the terms of the GNU Library General Public Licence as published by
00011     the Free Software Foundation; either version 2 of the Licence, or (at
00012     your option) any later version.
00013 
00014     itom is distributed in the hope that it will be useful, but
00015     WITHOUT ANY WARRANTY; without even the implied warranty of
00016     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library
00017     General Public Licence for more details.
00018 
00019     You should have received a copy of the GNU Library General Public License
00020     along with itom. If not, see <http://www.gnu.org/licenses/>.
00021 *********************************************************************** */
00022 
00023 #ifndef WORKSPACEWIDGET_H
00024 #define WORKSPACEWIDGET_H
00025 
00026 //python
00027 // see http://vtk.org/gitweb?p=VTK.git;a=commitdiff;h=7f3f750596a105d48ea84ebfe1b1c4ca03e0bab3
00028 #ifdef _DEBUG
00029     #undef _DEBUG
00030     #if (defined linux) | (defined CMAKE)
00031         #include "Python.h"
00032     #else
00033         #include "Python.h"
00034     #endif
00035     #define _DEBUG
00036 #else
00037     #ifdef linux
00038         #include "Python.h"
00039     #else
00040         #include "Python.h"
00041     #endif
00042 #endif
00043 
00044 #include "../global.h"
00045 #include "../common/sharedStructures.h"
00046 #include "../common/sharedStructuresQt.h"
00047 
00048 #include "../python/pythonWorkspace.h"
00049 
00050 #include <qtreewidget.h>
00051 
00052 #include <qhash.h>
00053 #include <qdebug.h>
00054 #include <qset.h>
00055 
00056 class WorkspaceWidget : public QTreeWidget
00057 {
00058     Q_OBJECT
00059 public:
00060     WorkspaceWidget(bool globalNotLocal, QWidget* parent = NULL);
00061     ~WorkspaceWidget();
00062 
00063     inline int numberOfSelectedItems() const { return selectedItems().count(); }
00064     int numberOfSelectedMainItems() const;
00065     inline ito::PyWorkspaceContainer* getWorkspaceContainer() { return m_workspaceContainer; }
00066 
00067 protected:
00068 
00069 private:
00070 
00073     //struct WorkspaceItem
00074     //{
00075     //    WorkspaceItem() : m_item(NULL), m_exists(true) {}; /*!< constructor */
00076     //    WorkspaceItem(QTreeWidgetItem* item, PyObject* pyValue, QString extendedValue) : m_item(item), m_exists(true), m_pyValue(pyValue), m_extendedValue(extendedValue) {}; /*!< constructor with given values */
00077     //    QTreeWidgetItem* m_item;    /*!< pointer to the corresponding QTreeWidgetItem */
00078     //    bool m_exists;              /*!< true: this item is still existing, false: this value is not longer available in the given python dictionary and should be removed */
00079     //    PyObject* m_pyValue;        /*!< pointer to the corresponding PyObject in the python dictionary. be careful. only use this pointer for comparing, this pointer may be corrupt (if variable does not exist any more)!!! */
00080     //    QString m_extendedValue;    /*!< String with the full text of this variable (if e.g. a matrix) */
00081     //};
00082 
00083     //void transformPyValue(PyObject* value, QString &valueLong, QString &valueShort);
00084     void updateView(QHash<QString,ito::PyWorkspaceItem*> items, QString baseName, QTreeWidgetItem *parent = NULL);
00085     void recursivelyDeleteHash(QTreeWidgetItem *item);
00086     void recursivelyDeleteHash(const QString &fullBaseName);
00087 
00088     bool m_globalNotLocal;                              
00089     //QHash<QString,WorkspaceItem> m_hashTable;           /*!< hash table which maps a workspace variable name to its corresponding WorkspaceItem */
00090     QSet<QString> m_pyTypeBlacklist;                    
00091     QHash<QString,QTreeWidgetItem*> m_itemHash;
00092     ito::PyWorkspaceContainer *m_workspaceContainer;
00093 
00094     QString m_delimiter;
00095 
00096 signals:
00097 
00098 public slots:
00099     //ito::RetVal loadDictionary(PyObject *dict, ItomSharedSemaphore *semaphore = NULL);                      /*!< slot invoked by PythonEngine if dictionary has changed */
00100 
00101     void workspaceContainerUpdated(ito::PyWorkspaceItem *rootItem, QString fullNameRoot, QStringList recentlyDeletedFullNames);
00102 
00103 private slots:
00104     void itemDoubleClicked(QTreeWidgetItem* item, int column);  
00105     void itemExpanded(QTreeWidgetItem* item);
00106     void itemCollapsed(QTreeWidgetItem* item);
00107 };
00108 
00109 #endif
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends