Currently job artifacts in CI/CD pipelines on LRZ GitLab never expire. Starting from Wed 26.1.2022 the default expiration time will be 30 days (GitLab default). Currently existing artifacts in already completed jobs will not be affected by the change. The latest artifacts for all jobs in the latest successful pipelines will be kept. More information: https://gitlab.lrz.de/help/user/admin_area/settings/continuous_integration.html#default-artifacts-expiration

datacontainerinspectorwidget.h 6.79 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-2015, 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 Universitaet Muenchen
//      Boltzmannstr. 3, 85748 Garching b. Muenchen, 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
// 
// ================================================================================================

#ifndef DATACONTAINERINSPECTORWIDGET_H__
#define DATACONTAINERINSPECTORWIDGET_H__

#include "sigslot/sigslot.h"
29
#include "cgt/painter.h"
schultezub's avatar
schultezub committed
30
#include "tbb/mutex.h"
31

32
#include "application/applicationapi.h"
33
#include "application/gui/qtdatahandle.h"
34
#include "application/gui/datacontainerinspectorcanvas.h"
35
#include "application/gui/properties/propertycollectionwidget.h"
36
37
38
39
40

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

class QModelIndex;
46
class QItemSelection;
47

48
namespace cgt {
schultezub's avatar
schultezub committed
49
    class Texture;
50
51
    class TextureUnit;
    class Shader;
schultezub's avatar
schultezub committed
52
53
}

schultezub's avatar
schultezub committed
54
namespace campvis {
schultezub's avatar
schultezub committed
55
    class AbstractPipeline;
56
57
    class DataContainer;
    class DataContainerTreeWidget;
58
    class FaceGeometry;
59
    class DataContainerFileLoaderWidget;
60

61
    class CAMPVIS_APPLICATION_API DataContainerInspectorWidget : public QWidget, public sigslot::has_slots {
62
63
64
65
66
67
68
        Q_OBJECT;

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

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

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

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

        /**
         * Size hint for the default window size
         * \return QSize(640, 480)
         */
        QSize sizeHint() const;
97
98
99
100
101
102
103
104
105
106
107
108
        
        /**
         * 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();
109

110
    signals:
111
        void dataContainerChanged(const QString&, QtDataHandle);
112

113
    private slots:
114

115
116
117
118
119
120
121
        /**
         * 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);

122
123
124
125
126
        /**
         * Slot being called when the user clicks on the "Save to File" button.
         */
        void onBtnSaveToFileClicked();

127
128
129
130
131
        /**
         * Slot being called when the user clicks on the "Load File" button.
         */
        void onBtnLoadFileClicked();

132
        /// Slot being called when the color under the mouse has changed
133
        void onColorChanged(const cgt::vec4& color);
134
135
136
        /// Slot being called when the depth under the mouse has changed
        void onDepthChanged(float depth);

137
138
139
140
141
142
    protected:
        /**
         * Setup the GUI stuff
         */
        void setupGUI();

143
    protected:
144
145
        static void saveToFile(DataHandle handle, std::string filename);

146
147
148
149
150
151
152
        /**
         * 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;

153
        /**
154
155
156
157
         * Updates _infoWidget
         */
        void updateInfoWidget();

158
159
        bool _inited;

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

162
        DataContainerTreeWidget* _dctWidget;            ///< The TreeWidget showing the DataHandles in _dataContainer
163
        DataContainerInspectorCanvas* _canvas;          ///< The OpenGL canvas for rendering the DataContainer's contents
164
        PropertyCollectionWidget* _pcWidget;
165

166
        QGridLayout* _mainLayout;                       ///< Layout for this widget
167
        QWidget* _infoWidget;                           ///< Widget showing the information about the selected QtDataHandle
168
        QGridLayout* _infoWidgetLayout;                 ///< Layout for the _infoWidget
169
        
170
        QLabel*  _lblName;
171
        QLabel*  _lblNumChannels;
172
173
174
175
176
        QLabel*  _lblLocalMemoryFootprint;
        QLabel*  _lblVideoMemoryFootprint;
        QLabel*  _lblTimestamp;
        QLabel*  _lblSize;
        QLabel*  _lblBounds;
177
        QWidget* _colorWidget;                          ///< The widget use to show the color value and the color in a single window
178
        QHBoxLayout* _colorWidgetLayout;                ///< Layout for the following widget
179
180
        QLabel*  _lblColorVal;                          ///< Color Label Value in text
        QWidget* _colorValWidget;                       ///< Widget that shows the color value in color
181
        QPalette _colorValWidgetPalette;               ///< Palette which will be used to colorize the color widget
182
        
183
        QPushButton* _btnLoadFile;
184
        QPushButton* _btnSaveToFile;
185
        DataContainerFileLoaderWidget* _propEditorWid;
186
187

        static const std::string loggerCat_;
188
189
190
191
    };
}

#endif // DATACONTAINERINSPECTORWIDGET_H__