itom 1.1.0
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 fuer Technische Optik (ITO),
00005     Universitaet 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 #if (defined _DEBUG) && (!defined linux)
00029     #undef _DEBUG
00030     #include "Python.h"
00031     #define _DEBUG
00032 #else
00033     #include "Python.h"
00034 #endif
00035 
00036 #include "../global.h"
00037 #include "../common/sharedStructures.h"
00038 #include "../common/sharedStructuresQt.h"
00039 
00040 #include "../python/pythonWorkspace.h"
00041 
00042 #include <qtreewidget.h>
00043 
00044 #include <qhash.h>
00045 #include <qdebug.h>
00046 #include <qset.h>
00047 
00048 class WorkspaceWidget : public QTreeWidget
00049 {
00050     Q_OBJECT
00051 public:
00052     WorkspaceWidget(bool globalNotLocal, QWidget* parent = NULL);
00053     ~WorkspaceWidget();
00054 
00055     inline int numberOfSelectedItems() const { return selectedItems().count(); }
00056     int numberOfSelectedMainItems() const;
00057     inline ito::PyWorkspaceContainer* getWorkspaceContainer() { return m_workspaceContainer; }
00058 
00059 protected:
00060 
00061 private:
00062 
00065     //struct WorkspaceItem
00066     //{
00067     //    WorkspaceItem() : m_item(NULL), m_exists(true) {}; /*!< constructor */
00068     //    WorkspaceItem(QTreeWidgetItem* item, PyObject* pyValue, QString extendedValue) : m_item(item), m_exists(true), m_pyValue(pyValue), m_extendedValue(extendedValue) {}; /*!< constructor with given values */
00069     //    QTreeWidgetItem* m_item;    /*!< pointer to the corresponding QTreeWidgetItem */
00070     //    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 */
00071     //    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)!!! */
00072     //    QString m_extendedValue;    /*!< String with the full text of this variable (if e.g. a matrix) */
00073     //};
00074 
00075     //void transformPyValue(PyObject* value, QString &valueLong, QString &valueShort);
00076     void updateView(QHash<QString,ito::PyWorkspaceItem*> items, QString baseName, QTreeWidgetItem *parent = NULL);
00077     void recursivelyDeleteHash(QTreeWidgetItem *item);
00078     void recursivelyDeleteHash(const QString &fullBaseName);
00079 
00080     bool m_globalNotLocal;                              
00081     //QHash<QString,WorkspaceItem> m_hashTable;           /*!< hash table which maps a workspace variable name to its corresponding WorkspaceItem */
00082     QSet<QString> m_pyTypeBlacklist;                    
00083     QHash<QString,QTreeWidgetItem*> m_itemHash;
00084     ito::PyWorkspaceContainer *m_workspaceContainer;
00085 
00086     QString m_delimiter;
00087 
00088 signals:
00089 
00090 public slots:
00091     //ito::RetVal loadDictionary(PyObject *dict, ItomSharedSemaphore *semaphore = NULL);                      /*!< slot invoked by PythonEngine if dictionary has changed */
00092 
00093     void workspaceContainerUpdated(ito::PyWorkspaceItem *rootItem, QString fullNameRoot, QStringList recentlyDeletedFullNames);
00094 
00095 private slots:
00096     void itemDoubleClicked(QTreeWidgetItem* item, int column);  
00097     void itemExpanded(QTreeWidgetItem* item);
00098     void itemCollapsed(QTreeWidgetItem* item);
00099 };
00100 
00101 #endif
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends