itom 2.2.1
K:/git-itom/sources/itom/Qitom/widgets/workspaceWidget.h
00001 /* ********************************************************************
00002     itom software
00003     URL: http://www.uni-stuttgart.de/ito
00004     Copyright (C) 2016, 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 #ifndef Q_MOC_RUN
00027     //python
00028     // see http://vtk.org/gitweb?p=VTK.git;a=commitdiff;h=7f3f750596a105d48ea84ebfe1b1c4ca03e0bab3
00029     #if (defined _DEBUG) && (defined WIN32)
00030         #undef _DEBUG
00031         #include "Python.h"
00032         #define _DEBUG
00033     #else
00034         #include "Python.h"
00035     #endif
00036 #endif
00037 
00038 #include "../global.h"
00039 #include "../common/sharedStructures.h"
00040 #include "../common/sharedStructuresQt.h"
00041 
00042 #include "../python/pythonWorkspace.h"
00043 
00044 #include <qtreewidget.h>
00045 #include <qmimedata.h>
00046 #include <qpixmap.h>
00047 #include <qhash.h>
00048 #include <qset.h>
00049 
00050 namespace ito
00051 {
00052 
00053 class WorkspaceWidget : public QTreeWidget
00054 {
00055     Q_OBJECT
00056 public:
00057     WorkspaceWidget(bool globalNotLocal, QWidget* parent = NULL);
00058     ~WorkspaceWidget();
00059 
00060     int numberOfSelectedItems(bool ableToBeRenamed = false) const;
00061     int numberOfSelectedMainItems() const;
00062     inline ito::PyWorkspaceContainer* getWorkspaceContainer() { return m_workspaceContainer; }
00063 
00064     enum WorkspaceRole
00065     {
00066         RoleFullName = Qt::UserRole + 1, 
00067         RoleCompatibleTypes = Qt::UserRole + 2,
00068         RoleType     = Qt::UserRole + 3
00069     };
00070 
00071     QString getPythonReadableName(const QTreeWidgetItem *item) const;
00072 
00073 protected:
00074     QStringList mimeTypes() const;
00075     QMimeData * mimeData(const QList<QTreeWidgetItem *> items) const;
00076     void startDrag(Qt::DropActions supportedActions);
00077 
00078 private:
00079     void updateView(QHash<QString,ito::PyWorkspaceItem*> items, QString baseName, QTreeWidgetItem *parent = NULL);
00080     void recursivelyDeleteHash(QTreeWidgetItem *item);
00081     void recursivelyDeleteHash(const QString &fullBaseName);
00082 
00083     bool m_globalNotLocal;                              
00084     QHash<QString,QTreeWidgetItem*> m_itemHash;
00085     ito::PyWorkspaceContainer *m_workspaceContainer;
00086 
00087     QPixmap m_dragPixmap;
00088 #if QT_VERSION >= 0x050000
00089     Qt::DropActions supportedDragActions() const;
00090 #endif
00091 
00092 signals:
00093 
00094 public slots:
00095     void workspaceContainerUpdated(PyWorkspaceItem *rootItem, QString fullNameRoot, QStringList recentlyDeletedFullNames);
00096 
00097 private slots:
00098     void itemDoubleClicked(QTreeWidgetItem* item, int column);  
00099     void itemExpanded(QTreeWidgetItem* item);
00100     void itemCollapsed(QTreeWidgetItem* item);
00101 };
00102 
00103 } //end namespace ito
00104 
00105 #endif
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Properties Friends