summaryrefslogtreecommitdiffstats
path: root/src/Authoring/Studio/Controls/Scroller.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/Authoring/Studio/Controls/Scroller.h')
-rw-r--r--src/Authoring/Studio/Controls/Scroller.h171
1 files changed, 171 insertions, 0 deletions
diff --git a/src/Authoring/Studio/Controls/Scroller.h b/src/Authoring/Studio/Controls/Scroller.h
new file mode 100644
index 00000000..9cb39962
--- /dev/null
+++ b/src/Authoring/Studio/Controls/Scroller.h
@@ -0,0 +1,171 @@
+/****************************************************************************
+**
+** Copyright (C) 2002 NVIDIA Corporation.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt 3D Studio.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//==============================================================================
+// Prefix
+//==============================================================================
+#ifndef INCLUDED_SCROLLER_H
+#define INCLUDED_SCROLLER_H 1
+
+#pragma once
+
+//==============================================================================
+// Includes
+//==============================================================================
+#include "Control.h"
+#include "ScrollerBar.h"
+#include "FlowLayout.h"
+#include "GenericFunctor.h"
+#include "Multicaster.h"
+#include "ITickTock.h"
+
+//==============================================================================
+// Forwards
+//==============================================================================
+class CButtonControl;
+
+GENERIC_FUNCTOR_2(CScrollListener, OnScroll, CScroller *, CPt);
+
+class IScroller
+{
+protected:
+ virtual ~IScroller() {}
+public:
+ virtual void SetVisiblePosition(CPt inVisiblePosition) = 0;
+ virtual CPt GetVisiblePosition() = 0;
+};
+
+//=============================================================================
+/**
+ * Class for creating a scroller.
+ */
+class CScroller : public CControl, public IScroller
+{
+public:
+ enum EScrollMode {
+ NEVER,
+ AS_NEEDED,
+ ALWAYS,
+ };
+
+ CScroller(bool inCreateImmediately = true);
+ virtual ~CScroller();
+
+ void Initialize();
+
+ void OnDraw(CRenderer *inRenderer, CRct &inDirtyRect,
+ bool inIgnoreValidation /* = false */) override;
+ virtual void DrawBackground(CRenderer *) {}
+ void Draw(CRenderer *inRenderer) override;
+
+ void SetSize(CPt inSize) override;
+ void SetLayout(CPt inSize, CPt inPosition) override;
+ CPt GetMinimumSize() override;
+ CPt GetMaximumSize() override;
+
+ void AddChild(CControl *inControl, CControl *inInsertBefore = nullptr) override;
+
+ CPt GetVisibleSize();
+ CPt GetContaineeSize();
+
+ CPt GetVisiblePosition() override;
+ void SetVisiblePosition(CPt inVisiblePosition) override;
+ CPt GetMaxVisiblePosition();
+
+ CScrollerBar *GetHorizontalBar();
+ CScrollerBar *GetVerticalBar();
+
+ void SetVerticalScrollMode(EScrollMode inScrollMode);
+ EScrollMode GetVerticalScrollMode();
+
+ void SetHorizontalScrollMode(EScrollMode inScrollMode);
+ EScrollMode GetHorizontalScrollMode();
+
+ virtual void RecalcLayout();
+ void OnChildSizeChanged(CControl *inChild) override;
+
+ void AddScrollListener(CScrollListener *inScrollListener);
+ void RemoveScrollListener(CScrollListener *inScrollListener);
+
+ void SetAdditionalClippingRect(CRct inClippingRect);
+
+ bool OnMouseDown(CPt inPoint, Qt::KeyboardModifiers inFlags) override;
+ void OnMouseMove(CPt inPoint, Qt::KeyboardModifiers inFlags) override;
+ void OnMouseUp(CPt inPoint, Qt::KeyboardModifiers inFlags) override;
+ bool OnMouseWheel(CPt inPoint, long inScrollAmount, Qt::KeyboardModifiers inFlags) override;
+ void EnsureVisible(CRct inRect) override;
+
+ virtual void OnTimer();
+ void OnLoseFocus() override;
+ void AdjustDelayTimeAccordingToOnTimerTime(unsigned long inTime);
+
+protected:
+ void OnSizeChanged(CPt inSize) override;
+ virtual bool IsVerticalVisible();
+ virtual bool IsHorizontalVisible();
+ virtual bool IsVerticalScrolling();
+ virtual bool IsHorizontalScrolling();
+
+ virtual CScrollerBar *CreateVerticalBar();
+ virtual CScrollerBar *CreateHorizontalBar();
+
+ virtual void SetVisibleSize(CPt inSize);
+
+ virtual CControl *GetControl();
+
+ CScrollerBar *m_VerticalBar;
+ CScrollerBar *m_HorizontalBar;
+
+ CPt m_VisibleSize;
+ CPt m_VisiblePosition;
+ CPt m_MaxVisiblePosition;
+
+ CPt m_ScrolledAmount;
+ CPt m_ChildOffset;
+
+ CRct m_AddtlClippingRect;
+ CPt m_ScrollingDir;
+ CPt m_MousePos;
+ Qt::KeyboardModifiers m_MouseFlags;
+
+ EScrollMode m_VerticalScrollMode;
+ EScrollMode m_HorizontalScrollMode;
+
+ bool m_ResizingChildren;
+
+ CMulticaster<CScrollListener *> m_ScrollListeners;
+
+ bool m_IsMouseDown;
+ CPt m_PrevMousePoint;
+
+ long m_OffsetAmmount;
+ unsigned long m_DelayTime;
+ std::shared_ptr<UICDM::ISignalConnection> m_CurrentTickTock;
+};
+#endif // INCLUDED_SCROLLER_H