File: slice_selector.hpp

package info (click to toggle)
sight 25.2.0-2
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 42,184 kB
  • sloc: cpp: 289,476; xml: 17,257; ansic: 9,878; python: 1,379; sh: 144; makefile: 33
file content (168 lines) | stat: -rw-r--r-- 5,218 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
/************************************************************************
 *
 * Copyright (C) 2009-2025 IRCAD France
 * Copyright (C) 2012-2021 IHU Strasbourg
 *
 * This file is part of Sight.
 *
 * Sight is free software: you can redistribute it and/or modify it under
 * the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * Sight is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with Sight. If not, see <https://www.gnu.org/licenses/>.
 *
 ***********************************************************************/

#pragma once

#include <sight/ui/qt/config.hpp>

#include <core/com/signal.hpp>
#include <core/com/signal.hxx>
#include <core/com/signals.hpp>

#include <data/helper/fiducials_series.hpp>

#include <ui/qt/container/widget.hpp>

#include <boost/function.hpp>

#include <QColor>
#include <QComboBox>
#include <QObject>
#include <QPointer>
#include <QProxyStyle>
#include <QWidget>

#include <functional>
#include <string>
#include <variant>

namespace sight::ui::qt
{

class slice_text_editor;
/**
 * @brief A Qt panel used to control a VTK 2D Negatoscope view.
 *
 */
class SIGHT_UI_QT_CLASS_API_QT slice_selector : public QWidget
{
Q_OBJECT

public:

    SIGHT_UI_QT_API_QT slice_selector(
        bool _display_axis_selector,
        bool _display_step_buttons,
        std::uint8_t _index_digits = 1,
        QWidget* _parent           = nullptr
    ) noexcept;

    SIGHT_UI_QT_API_QT slice_selector(
        bool _display_axis_selector_pos,
        bool _display_step_buttons_pos,
        double _pos_digits   = 0.0,
        QWidget* _parent_pos = nullptr
    ) noexcept;
    /// @brief Destructor.
    SIGHT_UI_QT_API_QT ~slice_selector() noexcept override;

    SIGHT_UI_QT_API_QT void set_index_digits(std::uint8_t _index_digits);

    SIGHT_UI_QT_API_QT void set_slice_range(int _min, int _max);

    SIGHT_UI_QT_API_QT void set_slice_value(int _index);

    SIGHT_UI_QT_API_QT void set_type_selection(int _type);

    SIGHT_UI_QT_API_QT void set_type_selection_pos(int _type_pos);

    SIGHT_UI_QT_API_QT void set_enable(bool _enable);
    SIGHT_UI_QT_API_QT void set_position_digits(double value);

    SIGHT_UI_QT_API_QT void clear_slider_index();

    SIGHT_UI_QT_API_QT void clear_slider_position();

    SIGHT_UI_QT_API_QT void set_position_value(int index);

    SIGHT_UI_QT_API_QT void set_position_text(double position_index);

    SIGHT_UI_QT_API_QT void set_position_range(double min, double max);

    SIGHT_UI_QT_API_QT void set_image_info(double origin, double spacing);

    SIGHT_UI_QT_API_QT void on_slice_index_position_change(int _value);

    SIGHT_UI_QT_API_QT void set_orientation(std::string& orientation);

    SIGHT_UI_QT_API_QT void add_slider_position(std::int64_t _position, const QColor& _color);

    SIGHT_UI_QT_API_QT void add_position_slider(std::double_t _position, const QColor& _color);

    SIGHT_UI_QT_API_QT void set_enabled(bool _enable);

    SIGHT_UI_QT_API_QT void set_prefix(const std::string& _orientation_prefix);

    using ChangeLabelCallback = std::function<void()>;
    SIGHT_UI_QT_API_QT void set_change_label_callback(ChangeLabelCallback _fct_label);

    using ChangeIndexCallback = std::function<void (int)>;
    SIGHT_UI_QT_API_QT void set_change_index_callback(ChangeIndexCallback _fct_index);

    using ChangeTypeCallback = std::function<void (int)>;
    SIGHT_UI_QT_API_QT void set_change_type_callback(ChangeTypeCallback _fct_type);

    SIGHT_UI_QT_API_QT void update_label();

protected Q_SLOTS:

    /**
     * @brief Event handler for a slice type change.
     * @param _index index of the selected type item.
     */
    SIGHT_UI_QT_API_QT void on_slice_type_change(int _index);

    /**
     * @brief Event handler for a slice index change.
     * @param _value current value of the slice index slider.
     */
    SIGHT_UI_QT_API_QT void on_slice_index_change(int _value) noexcept;

    /**
     * @brief Event handler for a slice position change.
     * @param _value_f current value of the slice position slider.
     */
    SIGHT_UI_QT_API_QT void on_slice_position_change(int _value) noexcept;

private:

    QPointer<QComboBox> m_slice_type;

    /// @brief The slice index slider widget.
    QPointer<QStyle> m_slice_index_style;
    QPointer<QLineEdit> m_slice_index_text;
    QPointer<QSlider> m_slice_index;
    QPointer<QSlider> m_slider;
    /// @brief The slice position slider widget.
    QPointer<QSlider> m_slice_position_slider;
    QPointer<QLineEdit> m_slice_position_text;
    QPointer<QStyle> m_slice_position_style;
    double m_origin {0.00};
    double m_spacing {0.00};

    std::string m_orientation_prefix;
    ChangeIndexCallback m_fct_change_index_callback;
    ChangeTypeCallback m_fct_change_type_callback;
    ChangeLabelCallback m_fct_change_label_callback;
};

} // namespace sight::ui::qt