File: bmpbuttn.h

package info (click to toggle)
wxpython4.0 4.2.3%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 221,752 kB
  • sloc: cpp: 962,555; python: 230,573; ansic: 170,731; makefile: 51,756; sh: 9,342; perl: 1,564; javascript: 584; php: 326; xml: 200
file content (147 lines) | stat: -rw-r--r-- 4,860 bytes parent folder | download | duplicates (3)
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
/////////////////////////////////////////////////////////////////////////////
// Name:        wx/bmpbuttn.h
// Purpose:     wxBitmapButton class interface
// Author:      Vadim Zeitlin
// Modified by:
// Created:     25.08.00
// Copyright:   (c) 2000 Vadim Zeitlin
// Licence:     wxWindows licence
/////////////////////////////////////////////////////////////////////////////

#ifndef _WX_BMPBUTTON_H_BASE_
#define _WX_BMPBUTTON_H_BASE_

#include "wx/defs.h"

#if wxUSE_BMPBUTTON

#include "wx/button.h"

// FIXME: right now only wxMSW, wxGTK and wxOSX implement bitmap support in wxButton
//        itself, this shouldn't be used for the other platforms either
//        when all of them do it
#if (defined(__WXMSW__) || defined(__WXGTK20__) || defined(__WXOSX__) || defined(__WXQT__)) && !defined(__WXUNIVERSAL__)
    #define wxHAS_BUTTON_BITMAP
#endif

class WXDLLIMPEXP_FWD_CORE wxBitmapButton;

// ----------------------------------------------------------------------------
// wxBitmapButton: a button which shows bitmaps instead of the usual string.
// It has different bitmaps for different states (focused/disabled/pressed)
// ----------------------------------------------------------------------------

class WXDLLIMPEXP_CORE wxBitmapButtonBase : public wxButton
{
public:
    wxBitmapButtonBase()
    {
#ifndef wxHAS_BUTTON_BITMAP
        m_marginX =
        m_marginY = 0;
#endif // wxHAS_BUTTON_BITMAP
    }

    bool Create(wxWindow *parent,
                wxWindowID winid,
                const wxPoint& pos,
                const wxSize& size,
                long style,
                const wxValidator& validator,
                const wxString& name)
    {
        // We use wxBU_NOTEXT to let the base class Create() know that we are
        // not going to show the label: this is a hack needed for wxGTK where
        // we can show both label and bitmap only with GTK 2.6+ but we always
        // can show just one of them and this style allows us to choose which
        // one we need.
        //
        // And we also use wxBU_EXACTFIT to avoid being resized up to the
        // standard button size as this doesn't make sense for bitmap buttons
        // which are not standard anyhow and should fit their bitmap size.
        return wxButton::Create(parent, winid, wxString(),
                                pos, size,
                                style | wxBU_NOTEXT | wxBU_EXACTFIT,
                                validator, name);
    }

    /*
        Derived classes also need to declare, but not define, as it's done in
        common code in bmpbtncmn.cpp, the following function:

    bool CreateCloseButton(wxWindow* parent,
                           wxWindowID winid,
                           const wxString& name = wxString());

        which is used by NewCloseButton(), and, as Create(), must be
        called on default-constructed wxBitmapButton object.
    */

    // Special creation function for a standard "Close" bitmap. It allows to
    // simply create a close button with the image appropriate for the current
    // platform.
    static wxBitmapButton*
    NewCloseButton(wxWindow* parent,
                   wxWindowID winid,
                   const wxString& name = wxString());

    // set/get the margins around the button
    virtual void SetMargins(int x, int y)
    {
        DoSetBitmapMargins(x, y);
    }

    int GetMarginX() const { return DoGetBitmapMargins().x; }
    int GetMarginY() const { return DoGetBitmapMargins().y; }

protected:
#ifndef wxHAS_BUTTON_BITMAP
    // function called when any of the bitmaps changes
    virtual void OnSetBitmap() { InvalidateBestSize(); Refresh(); }

    virtual wxBitmap DoGetBitmap(State which) const
        { return m_bitmaps[which].GetBitmap(wxDefaultSize); }
    virtual void DoSetBitmap(const wxBitmapBundle& bitmap, State which)
        { m_bitmaps[which] = bitmap; OnSetBitmap(); }

    virtual wxSize DoGetBitmapMargins() const
    {
        return wxSize(m_marginX, m_marginY);
    }

    virtual void DoSetBitmapMargins(int x, int y)
    {
        m_marginX = x;
        m_marginY = y;
    }

    // the bitmap bundles for various states
    wxBitmapBundle m_bitmaps[State_Max];

    // the margins around the bitmap
    int m_marginX,
        m_marginY;
#endif // !wxHAS_BUTTON_BITMAP

    wxDECLARE_NO_COPY_CLASS(wxBitmapButtonBase);
};

#if defined(__WXUNIVERSAL__)
    #include "wx/univ/bmpbuttn.h"
#elif defined(__WXMSW__)
    #include "wx/msw/bmpbuttn.h"
#elif defined(__WXMOTIF__)
    #include "wx/motif/bmpbuttn.h"
#elif defined(__WXGTK20__)
    #include "wx/gtk/bmpbuttn.h"
#elif defined(__WXGTK__)
    #include "wx/gtk1/bmpbuttn.h"
#elif defined(__WXMAC__)
    #include "wx/osx/bmpbuttn.h"
#elif defined(__WXQT__)
    #include "wx/qt/bmpbuttn.h"
#endif

#endif // wxUSE_BMPBUTTON

#endif // _WX_BMPBUTTON_H_BASE_