File: statbmp.cpp

package info (click to toggle)
wxpython3.0 3.0.2.0%2Bdfsg-4
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 482,760 kB
  • ctags: 518,293
  • sloc: cpp: 2,127,226; python: 294,045; makefile: 51,942; ansic: 19,033; sh: 3,013; xml: 1,629; perl: 17
file content (142 lines) | stat: -rw-r--r-- 4,391 bytes parent folder | download | duplicates (10)
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
/////////////////////////////////////////////////////////////////////////////
// Program:     wxWidgets Widgets Sample
// Name:        statbmp.cpp
// Purpose:     Part of the widgets sample showing wxStaticBitmap
// Author:      Marcin Wojdyr
// Created:     2008-06-19
// Copyright:   (c) 2008 Marcin Wojdyr
// Licence:     wxWindows licence
/////////////////////////////////////////////////////////////////////////////

// ============================================================================
// declarations
// ============================================================================

// ----------------------------------------------------------------------------
// headers
// ----------------------------------------------------------------------------

// for compilers that support precompilation, includes "wx/wx.h".
#include "wx/wxprec.h"

#ifdef __BORLANDC__
    #pragma hdrstop
#endif

// for all others, include the necessary headers
#ifndef WX_PRECOMP
    #include "wx/log.h"

    #include "wx/button.h"
    #include "wx/image.h"
    #include "wx/radiobox.h"
    #include "wx/statbmp.h"
    #include "wx/statbox.h"
    #include "wx/textctrl.h"
#endif

#include "wx/filename.h"

#include "wx/generic/statbmpg.h"
#include "wx/sizer.h"
#include "wx/filepicker.h"

#include "widgets.h"
#include "icons/statbmp.xpm"


class StatBmpWidgetsPage : public WidgetsPage
{
public:
    StatBmpWidgetsPage(WidgetsBookCtrl *book, wxImageList *imaglist)
        : WidgetsPage(book, imaglist, statbmp_xpm) {}

    virtual void CreateContent();
    virtual wxControl *GetWidget() const { return m_statbmp; }
    virtual void RecreateWidget();

private:
    void OnFileChange(wxFileDirPickerEvent &WXUNUSED(ev)) { RecreateWidget(); }
    void OnRadioChange(wxCommandEvent &WXUNUSED(ev)) { RecreateWidget(); }

    void OnMouseEvent(wxMouseEvent& WXUNUSED(event))
    {
        wxLogMessage(wxT("wxStaticBitmap clicked."));
    }

    wxStaticBitmapBase *m_statbmp;
    wxFilePickerCtrl *m_filepicker;
    wxRadioBox *m_radio;
    wxStaticBoxSizer *m_sbsizer;

    DECLARE_WIDGETS_PAGE(StatBmpWidgetsPage)
};

IMPLEMENT_WIDGETS_PAGE(StatBmpWidgetsPage, wxT("StaticBitmap"),
                       ALL_CTRLS);

void StatBmpWidgetsPage::CreateContent()
{

    static const wxString choices[] = { "native", "generic" };
    m_radio = new wxRadioBox(this, wxID_ANY, "implementation",
                             wxDefaultPosition, wxDefaultSize,
                             WXSIZEOF(choices), choices);

    wxString testImage;
#if wxUSE_LIBPNG
    wxFileName fn("../image/toucan.png");
    if ( fn.FileExists() )
        testImage = fn.GetFullPath();
#endif // wxUSE_LIBPNG
    m_filepicker = new wxFilePickerCtrl(this, wxID_ANY, testImage);

    m_sbsizer = new wxStaticBoxSizer(wxVERTICAL, this, "wxStaticBitmap inside");

    wxSizer *leftsizer = new wxBoxSizer(wxVERTICAL);
    leftsizer->Add(m_radio, wxSizerFlags().Expand().Border());
    leftsizer->Add(m_filepicker, wxSizerFlags().Expand().Border());
    wxSizer *sizer = new wxBoxSizer(wxHORIZONTAL);
    sizer->Add(leftsizer, wxSizerFlags().Border());
    sizer->Add(m_sbsizer, wxSizerFlags().Center());
    SetSizer(sizer);

    wxInitAllImageHandlers();

    Connect(wxEVT_FILEPICKER_CHANGED,
            wxFileDirPickerEventHandler(StatBmpWidgetsPage::OnFileChange));
    Connect(wxEVT_RADIOBOX,
            wxCommandEventHandler(StatBmpWidgetsPage::OnRadioChange));

    m_statbmp = NULL;
    RecreateWidget();
}

void StatBmpWidgetsPage::RecreateWidget()
{
    wxDELETE(m_statbmp);

    wxString filepath = m_filepicker->GetPath();
    if ( filepath.empty() )
        return;

    wxImage image(filepath);
    if (! image.IsOk() )
    {
        wxLogMessage("Reading image from file '%s' failed.", filepath.c_str());
        return;
    }
    if (m_radio->GetSelection() == 0)
        m_statbmp = new wxStaticBitmap(this, wxID_ANY, wxBitmap(image));
    else
        m_statbmp = new wxGenericStaticBitmap(this, wxID_ANY, wxBitmap(image));
    m_sbsizer->Add(m_statbmp, wxSizerFlags(1).Expand());
    GetSizer()->Layout();
    m_statbmp->Connect(wxEVT_LEFT_DOWN,
                       wxMouseEventHandler(StatBmpWidgetsPage::OnMouseEvent),
                       NULL, this);
    // When switching from generic to native control on wxMSW under Wine,
    // the explicit Refresh() is necessary
    m_statbmp->Refresh();
}