~brian-sidebotham/wxwidgets-cmake/wxpython-2.9.4

« back to all changes in this revision

Viewing changes to src/common/clrpickercmn.cpp

  • Committer: Brian Sidebotham
  • Date: 2013-08-03 14:30:08 UTC
  • Revision ID: brian.sidebotham@gmail.com-20130803143008-c7806tkych1tp6fc
Initial import into Bazaar

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
///////////////////////////////////////////////////////////////////////////////
 
2
// Name:        src/common/clrpickercmn.cpp
 
3
// Purpose:     wxColourPickerCtrl class implementation
 
4
// Author:      Francesco Montorsi (readapted code written by Vadim Zeitlin)
 
5
// Modified by:
 
6
// Created:     15/04/2006
 
7
// RCS-ID:      $Id: clrpickercmn.cpp 67681 2011-05-03 16:29:04Z DS $
 
8
// Copyright:   (c) Vadim Zeitlin, Francesco Montorsi
 
9
// Licence:     wxWindows licence
 
10
///////////////////////////////////////////////////////////////////////////////
 
11
 
 
12
// ============================================================================
 
13
// declarations
 
14
// ============================================================================
 
15
 
 
16
// ----------------------------------------------------------------------------
 
17
// headers
 
18
// ----------------------------------------------------------------------------
 
19
 
 
20
// For compilers that support precompilation, includes "wx.h".
 
21
#include "wx/wxprec.h"
 
22
 
 
23
#ifdef __BORLANDC__
 
24
    #pragma hdrstop
 
25
#endif
 
26
 
 
27
#if wxUSE_COLOURPICKERCTRL
 
28
 
 
29
#include "wx/clrpicker.h"
 
30
 
 
31
#ifndef WX_PRECOMP
 
32
    #include "wx/textctrl.h"
 
33
#endif
 
34
 
 
35
const char wxColourPickerCtrlNameStr[] = "colourpicker";
 
36
const char wxColourPickerWidgetNameStr[] = "colourpickerwidget";
 
37
 
 
38
// ============================================================================
 
39
// implementation
 
40
// ============================================================================
 
41
 
 
42
wxDEFINE_EVENT(wxEVT_COMMAND_COLOURPICKER_CHANGED, wxColourPickerEvent);
 
43
IMPLEMENT_DYNAMIC_CLASS(wxColourPickerCtrl, wxPickerBase)
 
44
IMPLEMENT_DYNAMIC_CLASS(wxColourPickerEvent, wxEvent)
 
45
 
 
46
// ----------------------------------------------------------------------------
 
47
// wxColourPickerCtrl
 
48
// ----------------------------------------------------------------------------
 
49
 
 
50
#define M_PICKER     ((wxColourPickerWidget*)m_picker)
 
51
 
 
52
bool wxColourPickerCtrl::Create( wxWindow *parent, wxWindowID id,
 
53
                        const wxColour &col,
 
54
                        const wxPoint &pos, const wxSize &size,
 
55
                        long style, const wxValidator& validator,
 
56
                        const wxString &name )
 
57
{
 
58
    if (!wxPickerBase::CreateBase(parent, id, col.GetAsString(), pos, size,
 
59
                                  style, validator, name))
 
60
        return false;
 
61
 
 
62
    // we are not interested to the ID of our picker as we connect
 
63
    // to its "changed" event dynamically...
 
64
    m_picker = new wxColourPickerWidget(this, wxID_ANY, col,
 
65
                                        wxDefaultPosition, wxDefaultSize,
 
66
                                        GetPickerStyle(style));
 
67
 
 
68
    // complete sizer creation
 
69
    wxPickerBase::PostCreation();
 
70
 
 
71
    m_picker->Connect(wxEVT_COMMAND_COLOURPICKER_CHANGED,
 
72
            wxColourPickerEventHandler(wxColourPickerCtrl::OnColourChange),
 
73
            NULL, this);
 
74
 
 
75
    return true;
 
76
}
 
77
 
 
78
void wxColourPickerCtrl::SetColour(const wxColour &col)
 
79
{
 
80
    M_PICKER->SetColour(col);
 
81
    UpdateTextCtrlFromPicker();
 
82
}
 
83
 
 
84
bool wxColourPickerCtrl::SetColour(const wxString &text)
 
85
{
 
86
    wxColour col(text);     // smart wxString->wxColour conversion
 
87
    if ( !col.IsOk() )
 
88
        return false;
 
89
    M_PICKER->SetColour(col);
 
90
    UpdateTextCtrlFromPicker();
 
91
 
 
92
    return true;
 
93
}
 
94
 
 
95
void wxColourPickerCtrl::UpdatePickerFromTextCtrl()
 
96
{
 
97
    wxASSERT(m_text);
 
98
 
 
99
    if (m_bIgnoreNextTextCtrlUpdate)
 
100
    {
 
101
        // ignore this update
 
102
        m_bIgnoreNextTextCtrlUpdate = false;
 
103
        return;
 
104
    }
 
105
 
 
106
    // wxString -> wxColour conversion
 
107
    wxColour col(m_text->GetValue());
 
108
    if ( !col.IsOk() )
 
109
        return;     // invalid user input
 
110
 
 
111
    if (M_PICKER->GetColour() != col)
 
112
    {
 
113
        M_PICKER->SetColour(col);
 
114
 
 
115
        // fire an event
 
116
        wxColourPickerEvent event(this, GetId(), col);
 
117
        GetEventHandler()->ProcessEvent(event);
 
118
    }
 
119
}
 
120
 
 
121
void wxColourPickerCtrl::UpdateTextCtrlFromPicker()
 
122
{
 
123
    if (!m_text)
 
124
        return;     // no textctrl to update
 
125
 
 
126
    // NOTE: this SetValue() will generate an unwanted wxEVT_COMMAND_TEXT_UPDATED
 
127
    //       which will trigger a unneeded UpdateFromTextCtrl(); thus before using
 
128
    //       SetValue() we set the m_bIgnoreNextTextCtrlUpdate flag...
 
129
    m_bIgnoreNextTextCtrlUpdate = true;
 
130
    m_text->SetValue(M_PICKER->GetColour().GetAsString());
 
131
}
 
132
 
 
133
 
 
134
 
 
135
// ----------------------------------------------------------------------------
 
136
// wxColourPickerCtrl - event handlers
 
137
// ----------------------------------------------------------------------------
 
138
 
 
139
void wxColourPickerCtrl::OnColourChange(wxColourPickerEvent &ev)
 
140
{
 
141
    UpdateTextCtrlFromPicker();
 
142
 
 
143
    // the wxColourPickerWidget sent us a colour-change notification.
 
144
    // forward this event to our parent
 
145
    wxColourPickerEvent event(this, GetId(), ev.GetColour());
 
146
    GetEventHandler()->ProcessEvent(event);
 
147
}
 
148
 
 
149
#endif  // wxUSE_COLOURPICKERCTRL