File: clCustomScrollBar.h

package info (click to toggle)
codelite 17.0.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 136,204 kB
  • sloc: cpp: 491,547; ansic: 280,393; php: 10,259; sh: 8,930; lisp: 7,664; vhdl: 6,518; python: 6,020; lex: 4,920; yacc: 3,123; perl: 2,385; javascript: 1,715; cs: 1,193; xml: 1,110; makefile: 804; cobol: 741; sql: 709; ruby: 620; f90: 566; ada: 534; asm: 464; fortran: 350; objc: 289; tcl: 258; java: 157; erlang: 61; pascal: 51; ml: 49; awk: 44; haskell: 36
file content (82 lines) | stat: -rw-r--r-- 2,896 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
#ifndef CLCUSTOMSCROLLBAR_H
#define CLCUSTOMSCROLLBAR_H

#include "clColours.h"
#include "codelite_exports.h"

#include <wx/event.h>
#include <wx/panel.h>

/// a wxCommandEvent that takes ownership of the clientData
class WXDLLIMPEXP_SDK clScrollEvent : public wxCommandEvent
{
protected:
    int m_position = wxNOT_FOUND;

public:
    clScrollEvent(wxEventType commandType = wxEVT_NULL, int winid = 0);
    clScrollEvent(const clScrollEvent& event);
    clScrollEvent& operator=(const clScrollEvent& src);
    virtual ~clScrollEvent();
    virtual wxEvent* Clone() const;
    void SetPosition(int position) { this->m_position = position; }
    int GetPosition() const { return m_position; }
};

typedef void (wxEvtHandler::*clScrollEventFunction)(clScrollEvent&);
#define clScrollEventHandler(func) wxEVENT_HANDLER_CAST(clScrollEventFunction, func)

class WXDLLIMPEXP_SDK clCustomScrollBar : public wxPanel
{
    double m_thumbSize = 0.0;
    double m_pageSize = 0.0;
    double m_range = 0.0;
    double m_thumbPosition = 0.0;
    long m_sbStyle = wxSB_VERTICAL;
    wxRect m_thumbRect;
    wxPoint m_mouseCapturePoint;
    wxPoint m_thumbCapturePoint;
    bool m_dragging = false;
    clColours m_colours;
    bool m_notifyScroll = false;

protected:
    void OnIdle(wxIdleEvent& event);
    void OnPaint(wxPaintEvent& e);
    void OnMouseLeftDown(wxMouseEvent& e);
    void OnMouseLeftUp(wxMouseEvent& e);
    void OnMotion(wxMouseEvent& e);
    void OnSize(wxSizeEvent& e);
    void UpdateDrag(const wxPoint& pt);
    int GetPositionFromPoint(const wxPoint& pt) const;

public:
    clCustomScrollBar(wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition,
                      const wxSize& size = wxDefaultSize, long style = wxSB_VERTICAL);
    virtual ~clCustomScrollBar();

    bool ShouldShow() const;
    bool CanScollDown() const { return (GetThumbPosition() + GetThumbSize()) < GetRange(); }

    void SetPosition(int pos, bool notify = true);
    void UpdateScroll(int thumbSize, int range, int pageSize, int position);

    bool IsVertical() const { return m_sbStyle & wxSB_VERTICAL; }
    bool IsHorizontal() const { return m_sbStyle & wxSB_HORIZONTAL; }

    /// Accessors
    void SetPageSize(int pageSize) { this->m_pageSize = pageSize; }
    void SetRange(int range) { this->m_range = range; }
    void SetThumbPosition(int thumbPosition) { this->m_thumbPosition = thumbPosition; }
    void SetThumbSize(int thumbSize) { this->m_thumbSize = thumbSize; }
    int GetPageSize() const { return m_pageSize; }
    int GetRange() const { return m_range; }
    int GetThumbPosition() const { return m_thumbPosition; }
    int GetThumbSize() const { return m_thumbSize; }

    /// Override's parent
    virtual void SetColours(const clColours& colours);
};

wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_SDK, wxEVT_CUSTOM_SCROLL, clScrollEvent);
#endif // CLCUSTOMSCROLLBAR_H