datacontainerinspectorwidget.h 7.32 KB
Newer Older
1
2
// ================================================================================================
// 
schultezub's avatar
schultezub committed
3
// This file is part of the CAMPVis Software Framework.
4
// 
5
// If not explicitly stated otherwise: Copyright (C) 2012-2013, all rights reserved,
schultezub's avatar
schultezub committed
6
//      Christian Schulte zu Berge <christian.szb@in.tum.de>
7
//      Chair for Computer Aided Medical Procedures
8
9
//      Technische Universität München
//      Boltzmannstr. 3, 85748 Garching b. München, Germany
10
// 
schultezub's avatar
schultezub committed
11
// For a full list of authors and contributors, please refer to the file "AUTHORS.txt".
12
// 
13
14
15
16
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file 
// except in compliance with the License. You may obtain a copy of the License at
// 
// http://www.apache.org/licenses/LICENSE-2.0
17
// 
18
19
20
21
// Unless required by applicable law or agreed to in writing, software distributed under the 
// License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 
// either express or implied. See the License for the specific language governing permissions 
// and limitations under the License.
22
23
24
25
26
27
28
29
30
31
// 
// ================================================================================================

#ifndef DATACONTAINERINSPECTORWIDGET_H__
#define DATACONTAINERINSPECTORWIDGET_H__

#include "sigslot/sigslot.h"
#include "tgt/painter.h"
#include "tgt/qt/qtcontextmanager.h"
#include "tgt/qt/qtthreadedcanvas.h"
schultezub's avatar
schultezub committed
32
#include "tbb/mutex.h"
33

34
#include "application/gui/qtdatahandle.h"
35
#include "application/gui/datacontainerinspectorcanvas.h"
36
#include "application/gui/properties/propertycollectionwidget.h"
37
38
39
40
41
42
#include "core/tools/opengljobprocessor.h"

#include <QLabel>
#include <QWidget>
#include <QVBoxLayout>
#include <QHBoxLayout>
43
#include <QGridLayout>
schultezub's avatar
schultezub committed
44
#include <QString>
45
#include <QPushButton>
46
47

class QModelIndex;
48
class QItemSelection;
49

schultezub's avatar
schultezub committed
50
51
namespace tgt {
    class Texture;
52
53
    class TextureUnit;
    class Shader;
schultezub's avatar
schultezub committed
54
55
}

schultezub's avatar
schultezub committed
56
namespace campvis {
schultezub's avatar
schultezub committed
57
    class AbstractPipeline;
58
59
    class DataContainer;
    class DataContainerTreeWidget;
60
    class FaceGeometry;
61
    class DataContainerFileLoaderWidget;
62
63
64
65
66
67
68
69
70

    class DataContainerInspectorWidget : public QWidget, public sigslot::has_slots<> {
        Q_OBJECT;

    public:
        /**
         * Creates a new DataContainerInspectorWidget.
         * \param   parent          Parent Qt widget, may be 0 (default)
         */
71
        explicit DataContainerInspectorWidget(QWidget* parent = 0);
72
73
74
75
76

        /**
         * Destructor.
         */
        ~DataContainerInspectorWidget();
77
        
78
79
80
81
82
83
        /**
         * Set the DataContainer this widget is inspecting.
         * \param   dataContainer   The DataContainer this widget shall inspect, may be 0.
         */
        void setDataContainer(DataContainer* dataContainer);

84
85
86
87
88
        /**
         * Get the DataContainer this widget is inspecting.
         */
        DataContainer* getDataContainer();

89
        /**
90
         * Slot called when _dataContainer has changed and emitted the s_dataAdded signal.
91
         */
92
        void onDataContainerDataAdded(const std::string&, const DataHandle&);
93

94
        void mousePressEvent(QMouseEvent*) {
95
96
            updateInfoWidget();
        }
97

98
99
100
101
102
        /**
         * Size hint for the default window size
         * \return QSize(640, 480)
         */
        QSize sizeHint() const;
103
104
105
106
107
108
109
110
111
112
113
114
        
        /**
         * Initializes the OpenGL stuff (e.g. shaders).
         * Must be called with a valid and locked OpenGL context.
         */
        virtual void init();

        /**
         * Deinitializes the OpenGL stuff (e.g. shaders).
         * Must be called with a valid and locked OpenGL context.
         */
        void deinit();
115

116
        /**
117
         * Updates color of the info widget
118
         */
119
        void updateColor();
120

121
        /**
122
123
124
125
         * Updates depth of the info widget
         */
        void updateDepth();

126
    signals:
127
        void dataContainerChanged(const QString&, QtDataHandle);
128

129
    private slots:
130

131
132
133
134
135
136
137
        /**
         * Slot to be called when the selection in the DataContainerTreeWidget has changed.
         * \param selected      selected items
         * \param deselected    deselected items
         */
        void onDCTWidgetSelectionModelSelectionChanged(const QItemSelection& selected, const QItemSelection& deselected);

138
139
140
141
142
        /**
         * Slot being called when the user clicks on the "Save to File" button.
         */
        void onBtnSaveToFileClicked();

143
144
145
146
147
148
        
        /**
         * Slot being called when the user clicks on the "Load File" button.
         */
        void onBtnLoadFileClicked();

149
150
151
152
153
154
    protected:
        /**
         * Setup the GUI stuff
         */
        void setupGUI();

155
156
157
        /**
         * Saves the Image in \a handle to the file \a filename.
         * \note    This method must be called with a valid OpenGL context!
158
         * \param handle    DataHandle containing the image to save. Must contain ImageData or RenderData!
159
160
         * \param filename  Filename for the file to save.
         */
161
        
162

163
    protected:
164
165
        static void saveToFile(DataHandle handle, std::string filename);

166
167
168
169
170
171
172
        /**
         * Returns a string with \a numBytes humanized (i.e. "numBytes/1024^n [KMG]Byte")
         * \param   numBytes    Number of bytes to be converted.
         * \return  "numBytes/1024^n [KMG]Bytes
         */
        QString humanizeBytes(size_t numBytes) const;

173
        /**
174
175
176
177
         * Updates _infoWidget
         */
        void updateInfoWidget();

178
179
        bool _inited;

schultezub's avatar
schultezub committed
180
        DataContainer* _dataContainer;                  ///< The DataContainer this widget is inspecting
181

182
        DataContainerTreeWidget* _dctWidget;            ///< The TreeWidget showing the DataHandles in _dataContainer
183
        DataContainerInspectorCanvas* _canvas;          ///< The OpenGL canvas for rendering the DataContainer's contents
184
        PropertyCollectionWidget* _pcWidget;
185

186
        QGridLayout* _mainLayout;                       ///< Layout for this widget
187
        QWidget* _infoWidget;                           ///< Widget showing the information about the selected QtDataHandle
188
        QGridLayout* _infoWidgetLayout;                 ///< Layout for the _infoWidget
189
        
190
191
192
193
194
195
        QLabel*  _lblName;
        QLabel*  _lblLocalMemoryFootprint;
        QLabel*  _lblVideoMemoryFootprint;
        QLabel*  _lblTimestamp;
        QLabel*  _lblSize;
        QLabel*  _lblBounds;
196
        QWidget* _colorWidget;                          ///< The widget use to show the color value and the color in a single window
197
        QHBoxLayout* _colorWidgetLayout;                ///< Layout for the following widget
198
199
200
        QLabel*  _lblColorVal;                          ///< Color Label Value in text
        QWidget* _colorValWidget;                       ///< Widget that shows the color value in color
        QPalette* _ColorValWidgetPalette;               ///< Palette which will be used to colorize the color widget
201
        
202
203
204
        // Added by Hossain Mahmud  <mahmud@in.tum.de>
        // Date: January 02, 2014
        QPushButton* _btnLoadFile;
205
        QPushButton* _btnSaveToFile;
206
        DataContainerFileLoaderWidget* _propEditorWid;
207
208

        static const std::string loggerCat_;
209
210
211
212
    };
}

#endif // DATACONTAINERINSPECTORWIDGET_H__