File: clHeaderBar.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 (130 lines) | stat: -rw-r--r-- 3,485 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
#ifndef CLHEADERBAR_H
#define CLHEADERBAR_H

#include "clHeaderItem.h"
#include "codelite_exports.h"

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

class clControlWithItems;
class WXDLLIMPEXP_SDK clHeaderBar : public wxPanel
{
    clHeaderItem::Vect_t m_columns;
    const clColours& m_colours;
    int m_flags = 0;
    bool m_isDragging = false;
    int m_draggedCol = wxNOT_FOUND;
    wxCursor m_previousCursor;
    wxFont m_headerFont = wxNullFont;

protected:
    void DoUpdateSize();
    wxSize GetTextSize(const wxString& label) const;
    int HitBorder(int x) const;
    void OnPaint(wxPaintEvent& event);
    void OnSize(wxSizeEvent& event);
    void DoCancelDrag();

public:
    clHeaderBar(clControlWithItems* parent, const clColours& colours);
    virtual ~clHeaderBar();

    void SetHeaderFont(const wxFont& headerFont) { this->m_headerFont = headerFont; }
    const wxFont& GetHeaderFont() const { return m_headerFont; }
    bool Show(bool show = true);
    /**
     * @brief set drawing native header
     */
    void SetNative(bool b)
    {
        if(b) {
            m_flags |= kHeaderNative;
        } else {
            m_flags &= ~kHeaderNative;
        }
        Refresh();
    }

    /**
     * @brief update the column width, but only if the new width is greater than the current one, unless 'force' is set
     * to 'true'
     * @param col
     * @param width
     * @param force set the new width, no matter what...
     */
    void UpdateColWidthIfNeeded(size_t col, int width, bool force = false);
    clHeaderItem& Item(int index) { return m_columns[index]; }
    const clHeaderItem& Item(int index) const { return m_columns[index]; }
    clHeaderItem& operator[](int index) { return Item(index); }
    const clHeaderItem& operator[](int index) const { return Item(index); }

    size_t size() const { return m_columns.size(); }
    size_t GetCount() const { return size(); }

    void SetColumnsWidth(const std::vector<size_t>& v_width);

    /**
     * @brief Return the header bar height, taking into consideration all columns
     */
    size_t GetHeight() const;

    /**
     * @brief do we have any columns?
     */
    bool empty() const { return m_columns.empty(); }
    /**
     * @brief do we have any columns?
     */
    bool IsEmpty() const { return empty(); }

    /**
     * @brief add new column to the header bar
     */
    void push_back(const clHeaderItem& item);
    /**
     * @brief add new column to the header bar
     */
    clHeaderItem& Add(const clHeaderItem& item)
    {
        push_back(item);
        return Last();
    }
    /**
     * @brief add new column to the header bar
     */
    clHeaderItem& Add(const wxString& label, const wxBitmap& bitmap = wxNullBitmap)
    {
        push_back(clHeaderItem(m_parent, label, bitmap));
        return Last();
    }

    void Clear();
    const clHeaderItem& Last() const;
    clHeaderItem& Last();
    /**
     * @brief draw the header bar using dc and colours
     */
    void Render(wxDC& dc, const clColours& colours);
    size_t GetWidth() const;

    /**
     * @brief are we dragging a column?
     */
    bool IsDragging() { return m_isDragging; };

    /**
     * @brief process a left-down event
     */
    void OnMouseLeftDown(wxMouseEvent& event);
    /**
     * @brief process motion events
     */
    void OnMotion(wxMouseEvent& event);
    /**
     * @brief process a left-up event
     */
    void OnMouseLeftUp(wxMouseEvent& event);
};

#endif // CLHEADERBAR_H