4#include <condition_variable>
8# pragma warning(push, 1)
9# pragma warning(disable : 4127)
13#include <QGraphicsView>
21#include "../../global.hpp"
23#include "../../driver/driver.hpp"
27#include "decl_opengl_image_renderer.hpp"
65 :
public QGraphicsView
67 ,
public Private::IImageView
77 explicit ImageView(QWidget *parent =
nullptr);
141 Refresh(image, refreshMode_, autoRefresh);
222 eventRefreshEnabled_ = enabled;
232 return eventRefreshEnabled_;
263 return waitForRepaintEnabled_;
313 refreshMode_ = refreshMode;
335 uploadMode_ = uploadMode;
378 return zoomHandler_.ZoomDescriptor();
392 zoomHandler_.SetZoomDescriptor(zoomDescriptor);
480 void showEvent(QShowEvent *event)
override;
509 class RefreshEventFilter :
public QObject
512 explicit RefreshEventFilter(
ImageView *imageView)
518 bool eventFilter(QObject *obj, QEvent *event)
override;
521 void WaitForRepaint();
523 void ScheduleRepaint();
525 static QEvent::Type RefreshEventType() noexcept;
527 void PrivateRefresh();
529 void UnregisterEventImageDataUpdated() noexcept;
531 Size2D<
double> ViewSize() const noexcept
override
533 return QtToCvb(viewport()->rect().size());
536 Size2D<double> ImageSize() const noexcept
override
538 return QtToCvb(sceneRect().size());
541 void ApplyZoom(
double factor)
override
544 auto interactive = isInteractive();
545 setInteractive(
false);
550 setTransform(transform);
552 setInteractive(interactive);
556 Private::ZoomHandler zoomHandler_;
558 bool eventRefreshEnabled_ =
true;
563 EventCookie eventCookieDataUpdated_;
565 std::atomic<bool> waitForRepaintEnabled_;
568 mutable std::mutex imageMutex_;
570 std::condition_variable waitCondition_;
571 std::mutex waitMutex_;
573 std::mutex refreshMutex_;
575 std::function<void()> waitForRepaint_ = [&]() { viewport()->repaint(); };
577 std::function<void()> scheduleRepaint_ = [&]() { viewport()->update(); };
579 Internal::CarrierContainer mouseMovedCarrierContainer_;
Cookie used to unregister event handlers.
Definition global.hpp:591
Multi-purpose 2D vector class.
Definition point_2d.hpp:20
Scene to provide a convenient display for an image.
Definition decl_image_scene.hpp:49
View to display an image.
Definition decl_image_view.hpp:69
ImageView(QWidget *parent=nullptr)
Create an image view.
Definition detail_image_view.hpp:20
bool TryZoomIn() noexcept
Tries to zoom in.
Definition detail_image_view.hpp:166
Cvb::EventCookie RegisterEventMouseMoved(std::function< void(Cvb::Point2D< int >, const std::vector< double > &)> handler)
Register a callback to get pixel values under the moving mouse.
Definition detail_image_view.hpp:222
void Refresh(const class Image &image)
Refresh the view using the specified image.
Definition decl_image_view.hpp:189
void ResetCustomScheduleRepaint() noexcept
Reset to the default value.
Definition detail_image_view.hpp:148
void showEvent(QShowEvent *event) override
Handle show events.
Definition detail_image_view.hpp:273
void CustomWaitForRepaint(std::function< void()> customWaitForRepaint) noexcept
Set a custom callback associated with a refresh mode.
Definition detail_image_view.hpp:130
void SetEventRefreshEnabled(bool enabled) noexcept
Enables and disables automatic refreshing caused by events.
Definition decl_image_view.hpp:220
void SetWaitForRepaintEnabled(bool enabled)
Enable and disables waiting for repaints.
Definition detail_image_view.hpp:112
void mouseMoveEvent(QMouseEvent *event) override
Handle mouse move events.
Definition detail_image_view.hpp:298
void Refresh(const ImagePtr &image, AutoRefresh autoRefresh=AutoRefresh::Off)
Share the image and refresh the view.
Definition decl_image_view.hpp:139
void closeEvent(QCloseEvent *event) override
Handles close events.
Definition detail_image_view.hpp:233
void SetZoom(ZoomDescriptor zoomDescriptor) noexcept
Set the current zoom descriptor.
Definition decl_image_view.hpp:386
Cvb::UI::RenderEngine RenderEngine() const noexcept
Get the current render engine.
Definition decl_image_view.hpp:406
bool IsEventRefreshEnabled() const noexcept
Check if automatic refreshing by events is set.
Definition decl_image_view.hpp:230
Cvb::UI::RefreshMode RefreshMode() const noexcept
Get the current refresh mode.
Definition decl_image_view.hpp:301
void resizeEvent(QResizeEvent *event) override
Handle resize events.
Definition detail_image_view.hpp:257
void ResetCustomWaitForRepaint() noexcept
Reset to the default value.
Definition detail_image_view.hpp:136
bool IsWaitForRepaintEnabled() const noexcept
Checks if waiting for repaint is set.
Definition decl_image_view.hpp:261
void SetUploadMode(Cvb::UI::UploadMode uploadMode)
Set the current upload mode.
Definition decl_image_view.hpp:331
void UnregisterEventMouseMoved(Cvb::EventCookie eventCookie) noexcept
Unregister a callback to get pixel values under the moving mouse.
Definition detail_image_view.hpp:228
ZoomDescriptor Zoom() const noexcept
Get the current zoom descriptor.
Definition decl_image_view.hpp:376
void wheelEvent(QWheelEvent *event) override
Handle mouse wheel events to zoom.
Definition detail_image_view.hpp:286
void Refresh()
Refresh the view.
Definition decl_image_view.hpp:113
void SetRenderEngine(Cvb::UI::RenderEngine renderEngine)
Set the current render engine.
Definition detail_image_view.hpp:216
class ImageScene * ImageScene() const noexcept
Get the image scene.
Definition detail_image_view.hpp:161
void scrollContentsBy(int dx, int dy) override
Handles scrolling the view.
Definition detail_image_view.hpp:242
bool TryZoomOut() noexcept
Tries to zoom out.
Definition detail_image_view.hpp:191
void SetRefreshMode(Cvb::UI::RefreshMode refreshMode) noexcept
Set the current refresh mode.
Definition decl_image_view.hpp:311
Cvb::UI::UploadMode UploadMode() const noexcept
Get the current upload mode.
Definition decl_image_view.hpp:321
ImagePtr Image() const noexcept
Get the currently shared image.
Definition decl_image_view.hpp:343
void ReleaseRefreshShare() noexcept
Releases the shared image.
Definition detail_image_view.hpp:154
void CustomScheduleRepaint(std::function< void()> scheduleRepaint) noexcept
Set a custom callback associated with a refresh mode.
Definition detail_image_view.hpp:142
Namespace for user interface components.
Definition decl_image_scene.hpp:39
Cvb::String QtToCvb(const QString text) noexcept
Convenience converter for strings.
Definition ui.hpp:242
RefreshMode
Defines the refresh behavior.
Definition ui.hpp:80
@ UploadAndWaitForRepaint
Definition ui.hpp:100
AutoRefresh
Allows to automatically refresh, if image content changes.
Definition detail_ui.hpp:114
@ Off
Definition detail_ui.hpp:125
UploadMode
Defines the upload behavior.
Definition detail_ui.hpp:37
@ Image
Definition detail_ui.hpp:45
RenderEngine
Defines the render engine used for drawing.
Definition ui.hpp:108
Root namespace for the Image Manager interface.
Definition c_bayer_to_rgb.h:17
std::shared_ptr< Image > ImagePtr
Convenience shared pointer for Image.
Definition global.hpp:86
Describes an zoom setting for the display.
Definition detail_ui.hpp:148