X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4130b487dcbd6f7f8cbc3e724ddf752b3817559c..3a1ec1d5dcd568d25f440f5c70ae853045cffdb1:/src/generic/colrdlgg.cpp diff --git a/src/generic/colrdlgg.cpp b/src/generic/colrdlgg.cpp index 1e137f0743..3b5695ab7d 100644 --- a/src/generic/colrdlgg.cpp +++ b/src/generic/colrdlgg.cpp @@ -1,134 +1,133 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: colrdlgg.cpp +// Name: src/generic/colrdlgg.cpp // Purpose: Choice dialogs // Author: Julian Smart // Modified by: // Created: 04/01/98 // RCS-ID: $Id$ -// Copyright: (c) Julian Smart and Markus Holzem -// Licence: wxWindows license +// Copyright: (c) Julian Smart +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ -#pragma implementation "colrdlgg.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" #ifdef __BORLANDC__ -#pragma hdrstop + #pragma hdrstop #endif +#if wxUSE_COLOURDLG + #ifndef WX_PRECOMP -#include -#include -#include "wx/utils.h" -#include "wx/intl.h" -#include "wx/dialog.h" -#include "wx/listbox.h" -#include "wx/button.h" -#include "wx/stattext.h" -#include "wx/layout.h" -#include "wx/dcclient.h" -#include "wx/slider.h" -#include "wx/sizer.h" + #include "wx/utils.h" + #include "wx/intl.h" + #include "wx/dialog.h" + #include "wx/listbox.h" + #include "wx/button.h" + #include "wx/stattext.h" + #include "wx/layout.h" + #include "wx/dcclient.h" + #include "wx/sizer.h" + #include "wx/slider.h" #endif #if wxUSE_STATLINE #include "wx/statline.h" #endif +#include "wx/colourdata.h" #include "wx/generic/colrdlgg.h" -#if !USE_SHARED_LIBRARY IMPLEMENT_DYNAMIC_CLASS(wxGenericColourDialog, wxDialog) BEGIN_EVENT_TABLE(wxGenericColourDialog, wxDialog) EVT_BUTTON(wxID_ADD_CUSTOM, wxGenericColourDialog::OnAddCustom) +#if wxUSE_SLIDER EVT_SLIDER(wxID_RED_SLIDER, wxGenericColourDialog::OnRedSlider) EVT_SLIDER(wxID_GREEN_SLIDER, wxGenericColourDialog::OnGreenSlider) EVT_SLIDER(wxID_BLUE_SLIDER, wxGenericColourDialog::OnBlueSlider) +#endif EVT_PAINT(wxGenericColourDialog::OnPaint) EVT_MOUSE_EVENTS(wxGenericColourDialog::OnMouseEvent) EVT_CLOSE(wxGenericColourDialog::OnCloseWindow) END_EVENT_TABLE() -#endif /* * Generic wxColourDialog */ -#define NUM_COLS 48 -static wxString wxColourDialogNames[NUM_COLS]={_T("ORANGE"), - _T("GOLDENROD"), - _T("WHEAT"), - _T("SPRING GREEN"), - _T("SKY BLUE"), - _T("SLATE BLUE"), - _T("MEDIUM VIOLET RED"), - _T("PURPLE"), - - _T("RED"), - _T("YELLOW"), - _T("MEDIUM SPRING GREEN"), - _T("PALE GREEN"), - _T("CYAN"), - _T("LIGHT STEEL BLUE"), - _T("ORCHID"), - _T("LIGHT MAGENTA"), - - _T("BROWN"), - _T("YELLOW"), - _T("GREEN"), - _T("CADET BLUE"), - _T("MEDIUM BLUE"), - _T("MAGENTA"), - _T("MAROON"), - _T("ORANGE RED"), - - _T("FIREBRICK"), - _T("CORAL"), - _T("FOREST GREEN"), - _T("AQUAMARINE"), - _T("BLUE"), - _T("NAVY"), - _T("THISTLE"), - _T("MEDIUM VIOLET RED"), - - _T("INDIAN RED"), - _T("GOLD"), - _T("MEDIUM SEA GREEN"), - _T("MEDIUM BLUE"), - _T("MIDNIGHT BLUE"), - _T("GREY"), - _T("PURPLE"), - _T("KHAKI"), - - _T("BLACK"), - _T("MEDIUM FOREST GREEN"), - _T("KHAKI"), - _T("DARK GREY"), - _T("SEA GREEN"), - _T("LIGHT GREY"), - _T("MEDIUM SLATE BLUE"), - _T("WHITE") - }; +// don't change the number of elements (48) in this array, the code below is +// hardcoded to use it +static const wxChar *const wxColourDialogNames[] = +{ + wxT("ORANGE"), + wxT("GOLDENROD"), + wxT("WHEAT"), + wxT("SPRING GREEN"), + wxT("SKY BLUE"), + wxT("SLATE BLUE"), + wxT("MEDIUM VIOLET RED"), + wxT("PURPLE"), + + wxT("RED"), + wxT("YELLOW"), + wxT("MEDIUM SPRING GREEN"), + wxT("PALE GREEN"), + wxT("CYAN"), + wxT("LIGHT STEEL BLUE"), + wxT("ORCHID"), + wxT("LIGHT MAGENTA"), + + wxT("BROWN"), + wxT("YELLOW"), + wxT("GREEN"), + wxT("CADET BLUE"), + wxT("MEDIUM BLUE"), + wxT("MAGENTA"), + wxT("MAROON"), + wxT("ORANGE RED"), + + wxT("FIREBRICK"), + wxT("CORAL"), + wxT("FOREST GREEN"), + wxT("AQUAMARINE"), + wxT("BLUE"), + wxT("NAVY"), + wxT("THISTLE"), + wxT("MEDIUM VIOLET RED"), + + wxT("INDIAN RED"), + wxT("GOLD"), + wxT("MEDIUM SEA GREEN"), + wxT("MEDIUM BLUE"), + wxT("MIDNIGHT BLUE"), + wxT("GREY"), + wxT("PURPLE"), + wxT("KHAKI"), + + wxT("BLACK"), + wxT("MEDIUM FOREST GREEN"), + wxT("KHAKI"), + wxT("DARK GREY"), + wxT("SEA GREEN"), + wxT("LIGHT GREY"), + wxT("MEDIUM SLATE BLUE"), + wxT("WHITE") +}; wxGenericColourDialog::wxGenericColourDialog() { - dialogParent = NULL; - whichKind = 1; - colourSelection = 0; + m_whichKind = 1; + m_colourSelection = -1; } -wxGenericColourDialog::wxGenericColourDialog(wxWindow *parent, wxColourData *data): - wxDialog(parent, -1, "Colour", wxPoint(0, 0), wxSize(900, 900), wxDEFAULT_DIALOG_STYLE|wxDIALOG_MODAL) +wxGenericColourDialog::wxGenericColourDialog(wxWindow *parent, + wxColourData *data) { - whichKind = 1; - colourSelection = 0; - Create(parent, data); + m_whichKind = 1; + m_colourSelection = -1; + Create(parent, data); } wxGenericColourDialog::~wxGenericColourDialog() @@ -137,26 +136,29 @@ wxGenericColourDialog::~wxGenericColourDialog() void wxGenericColourDialog::OnCloseWindow(wxCloseEvent& WXUNUSED(event)) { - EndModal(wxID_CANCEL); + EndModal(wxID_CANCEL); } bool wxGenericColourDialog::Create(wxWindow *parent, wxColourData *data) { - dialogParent = parent; + if ( !wxDialog::Create(GetParentForModalDialog(parent, 0), wxID_ANY, + _("Choose colour"), + wxPoint(0, 0), wxSize(900, 900)) ) + return false; - if (data) - colourData = *data; + if (data) + m_colourData = *data; - InitializeColours(); - CalculateMeasurements(); - CreateWidgets(); + InitializeColours(); + CalculateMeasurements(); + CreateWidgets(); - return TRUE; + return true; } int wxGenericColourDialog::ShowModal() { - return wxDialog::ShowModal(); + return wxDialog::ShowModal(); } @@ -168,109 +170,138 @@ void wxGenericColourDialog::OnMouseEvent(wxMouseEvent& event) int x = (int)event.GetX(); int y = (int)event.GetY(); - if ((x >= standardColoursRect.x && x <= (standardColoursRect.x + standardColoursRect.width)) && - (y >= standardColoursRect.y && y <= (standardColoursRect.y + standardColoursRect.height))) +#ifdef __WXPM__ + // Handle OS/2's reverse coordinate system and account for the dialog title + int nClientHeight; + + GetClientSize(NULL, &nClientHeight); + y = (nClientHeight - y) + 20; +#endif + if ((x >= m_standardColoursRect.x && x <= (m_standardColoursRect.x + m_standardColoursRect.width)) && + (y >= m_standardColoursRect.y && y <= (m_standardColoursRect.y + m_standardColoursRect.height))) { - int selX = (int)(x - standardColoursRect.x)/(smallRectangleSize.x + gridSpacing); - int selY = (int)(y - standardColoursRect.y)/(smallRectangleSize.y + gridSpacing); + int selX = (int)(x - m_standardColoursRect.x)/(m_smallRectangleSize.x + m_gridSpacing); + int selY = (int)(y - m_standardColoursRect.y)/(m_smallRectangleSize.y + m_gridSpacing); int ptr = (int)(selX + selY*8); OnBasicColourClick(ptr); } - else if ((x >= customColoursRect.x && x <= (customColoursRect.x + customColoursRect.width)) && - (y >= customColoursRect.y && y <= (customColoursRect.y + customColoursRect.height))) + else if ((x >= m_customColoursRect.x && x <= (m_customColoursRect.x + m_customColoursRect.width)) && + (y >= m_customColoursRect.y && y <= (m_customColoursRect.y + m_customColoursRect.height))) { - int selX = (int)(x - customColoursRect.x)/(smallRectangleSize.x + gridSpacing); - int selY = (int)(y - customColoursRect.y)/(smallRectangleSize.y + gridSpacing); + int selX = (int)(x - m_customColoursRect.x)/(m_smallRectangleSize.x + m_gridSpacing); + int selY = (int)(y - m_customColoursRect.y)/(m_smallRectangleSize.y + m_gridSpacing); int ptr = (int)(selX + selY*8); OnCustomColourClick(ptr); } + else + event.Skip(); } + else + event.Skip(); } void wxGenericColourDialog::OnPaint(wxPaintEvent& event) { -#ifndef __WXMOTIF__ - wxDialog::OnPaint(event); +#if !defined(__WXMOTIF__) && !defined(__WXPM__) && !defined(__WXCOCOA__) && !defined(__WXOSX__) + wxDialog::OnPaint(event); +#else + wxUnusedVar(event); #endif - wxPaintDC dc(this); + wxPaintDC dc(this); - PaintBasicColours(dc); - PaintCustomColours(dc); - PaintCustomColour(dc); - PaintHighlight(dc, TRUE); + PaintBasicColours(dc); + PaintCustomColours(dc); + PaintCustomColour(dc); + PaintHighlight(dc, true); } void wxGenericColourDialog::CalculateMeasurements() { - smallRectangleSize.x = 18; - smallRectangleSize.y = 14; - customRectangleSize.x = 40; - customRectangleSize.y = 40; - - gridSpacing = 6; - sectionSpacing = 15; - - standardColoursRect.x = 10; - standardColoursRect.y = 15; - standardColoursRect.width = (8*smallRectangleSize.x) + (7*gridSpacing); - standardColoursRect.height = (6*smallRectangleSize.y) + (5*gridSpacing); - - customColoursRect.x = standardColoursRect.x; - customColoursRect.y = standardColoursRect.y + standardColoursRect.height + 20; - customColoursRect.width = (8*smallRectangleSize.x) + (7*gridSpacing); - customColoursRect.height = (2*smallRectangleSize.y) + (1*gridSpacing); - - singleCustomColourRect.x = customColoursRect.width + customColoursRect.x + sectionSpacing; - singleCustomColourRect.y = 80; - singleCustomColourRect.width = customRectangleSize.x; - singleCustomColourRect.height = customRectangleSize.y; - - okButtonX = 10; - customButtonX = singleCustomColourRect.x ; - buttonY = customColoursRect.y + customColoursRect.height + 10; + m_smallRectangleSize.x = 18; + m_smallRectangleSize.y = 14; + m_customRectangleSize.x = 40; + m_customRectangleSize.y = 40; + + m_gridSpacing = 6; + m_sectionSpacing = 15; + + m_standardColoursRect.x = 10; +#ifdef __WXPM__ + m_standardColoursRect.y = 15 + 20; /* OS/2 needs to account for dialog titlebar */ +#else + m_standardColoursRect.y = 15; +#endif + m_standardColoursRect.width = (8*m_smallRectangleSize.x) + (7*m_gridSpacing); + m_standardColoursRect.height = (6*m_smallRectangleSize.y) + (5*m_gridSpacing); + + m_customColoursRect.x = m_standardColoursRect.x; + m_customColoursRect.y = m_standardColoursRect.y + m_standardColoursRect.height + 20; + m_customColoursRect.width = (8*m_smallRectangleSize.x) + (7*m_gridSpacing); + m_customColoursRect.height = (2*m_smallRectangleSize.y) + (1*m_gridSpacing); + + m_singleCustomColourRect.x = m_customColoursRect.width + m_customColoursRect.x + m_sectionSpacing; + m_singleCustomColourRect.y = 80; + m_singleCustomColourRect.width = m_customRectangleSize.x; + m_singleCustomColourRect.height = m_customRectangleSize.y; + + m_okButtonX = 10; + m_customButtonX = m_singleCustomColourRect.x ; + m_buttonY = m_customColoursRect.y + m_customColoursRect.height + 10; } void wxGenericColourDialog::CreateWidgets() { wxBeginBusyCursor(); - int sliderX = singleCustomColourRect.x + singleCustomColourRect.width + sectionSpacing; -#if defined(__WXMOTIF__) - int sliderSpacing = 65; - int sliderHeight = 160; -#else - int sliderSpacing = 45; - int sliderHeight = 160; -#endif + wxBoxSizer *topSizer = new wxBoxSizer( wxVERTICAL ); - redSlider = new wxSlider(this, wxID_RED_SLIDER, 0, 0, 255, - wxPoint(sliderX, 10), wxSize(-1, sliderHeight), wxVERTICAL|wxSL_LABELS); - greenSlider = new wxSlider(this, wxID_GREEN_SLIDER, 0, 0, 255, - wxPoint(sliderX + sliderSpacing, 10), wxSize(-1, sliderHeight), wxVERTICAL|wxSL_LABELS); - blueSlider = new wxSlider(this, wxID_BLUE_SLIDER, 0, 0, 255, - wxPoint(sliderX + 2*sliderSpacing, 10), wxSize(-1, sliderHeight), wxVERTICAL|wxSL_LABELS); + const int sliderHeight = 160; - wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL ); + // first sliders +#if wxUSE_SLIDER + const int sliderX = m_singleCustomColourRect.x + m_singleCustomColourRect.width + m_sectionSpacing; - // 1) space for explicitly layouted controls - topsizer->Add( sliderX + 3*sliderSpacing, sliderHeight+25 ); - -#if wxUSE_STATLINE - // 2) static line - topsizer->Add( new wxStaticLine( this, -1 ), 0, wxEXPAND | wxLEFT|wxRIGHT|wxTOP, 10 ); -#endif + m_redSlider = new wxSlider(this, wxID_RED_SLIDER, m_colourData.m_dataColour.Red(), 0, 255, + wxDefaultPosition, wxSize(wxDefaultCoord, sliderHeight), wxSL_VERTICAL|wxSL_LABELS|wxSL_INVERSE); + m_greenSlider = new wxSlider(this, wxID_GREEN_SLIDER, m_colourData.m_dataColour.Green(), 0, 255, + wxDefaultPosition, wxSize(wxDefaultCoord, sliderHeight), wxSL_VERTICAL|wxSL_LABELS|wxSL_INVERSE); + m_blueSlider = new wxSlider(this, wxID_BLUE_SLIDER, m_colourData.m_dataColour.Blue(), 0, 255, + wxDefaultPosition, wxSize(wxDefaultCoord, sliderHeight), wxSL_VERTICAL|wxSL_LABELS|wxSL_INVERSE); + + wxBoxSizer *sliderSizer = new wxBoxSizer( wxHORIZONTAL ); - // 3) buttons - wxSizer *buttonsizer = CreateButtonSizer( wxOK|wxCANCEL ); - buttonsizer->Add( new wxButton(this, wxID_ADD_CUSTOM, _("Add to custom colours") ), 0, wxLEFT|wxRIGHT, 10 ); - topsizer->Add( buttonsizer, 0, wxCENTRE | wxALL, 10 ); + sliderSizer->Add(sliderX, sliderHeight ); + + wxSizerFlags flagsRight; + flagsRight.Align(wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL).DoubleBorder(); + + sliderSizer->Add(m_redSlider, flagsRight); + sliderSizer->Add(m_greenSlider,flagsRight); + sliderSizer->Add(m_blueSlider,flagsRight); + + topSizer->Add(sliderSizer, wxSizerFlags().Centre().DoubleBorder()); +#else + topSizer->Add(1, sliderHeight, wxSizerFlags(1).Centre().TripleBorder()); +#endif // wxUSE_SLIDER - SetAutoLayout( TRUE ); - SetSizer( topsizer ); - - topsizer->SetSizeHints( this ); - topsizer->Fit( this ); + // then the custom button + topSizer->Add(new wxButton(this, wxID_ADD_CUSTOM, + _("Add to custom colours") ), + wxSizerFlags().DoubleHorzBorder()); + + // then the standard buttons + wxSizer *buttonsizer = CreateSeparatedButtonSizer(wxOK | wxCANCEL); + if ( buttonsizer ) + { + topSizer->Add(buttonsizer, wxSizerFlags().Expand().DoubleBorder()); + } + + SetAutoLayout( true ); + SetSizer( topSizer ); + + topSizer->SetSizeHints( this ); + topSizer->Fit( this ); Centre( wxBOTH ); @@ -279,57 +310,87 @@ void wxGenericColourDialog::CreateWidgets() void wxGenericColourDialog::InitializeColours(void) { - int i; - for (i = 0; i < 48; i++) - { - wxColour *col = wxTheColourDatabase->FindColour(wxColourDialogNames[i]); - if (col) - standardColours[i].Set(col->Red(), col->Green(), col->Blue()); - else - standardColours[i].Set(0, 0, 0); - } + size_t i; - for (i = 0; i < 16; i++) - customColours[i] = -/* -#ifndef __VMS__ - (wxColour&) -#endif -*/ - colourData.GetCustomColour(i); + for (i = 0; i < WXSIZEOF(wxColourDialogNames); i++) + { + wxColour col = wxTheColourDatabase->Find(wxColourDialogNames[i]); + if (col.IsOk()) + m_standardColours[i].Set(col.Red(), col.Green(), col.Blue()); + else + m_standardColours[i].Set(0, 0, 0); + } + + for (i = 0; i < WXSIZEOF(m_customColours); i++) + { + wxColour c = m_colourData.GetCustomColour(i); + if (c.IsOk()) + m_customColours[i] = m_colourData.GetCustomColour(i); + else + m_customColours[i] = wxColour(255, 255, 255); + } - singleCustomColour.Set(0, 0, 0); + wxColour curr = m_colourData.GetColour(); + if ( curr.IsOk() ) + { + bool m_initColourFound = false; + + for (i = 0; i < WXSIZEOF(wxColourDialogNames); i++) + { + if ( m_standardColours[i] == curr && !m_initColourFound ) + { + m_whichKind = 1; + m_colourSelection = i; + m_initColourFound = true; + break; + } + } + if ( !m_initColourFound ) + { + for ( i = 0; i < WXSIZEOF(m_customColours); i++ ) + { + if ( m_customColours[i] == curr ) + { + m_whichKind = 2; + m_colourSelection = i; + break; + } + } + } + m_colourData.m_dataColour.Set( curr.Red(), curr.Green(), curr.Blue() ); + } + else + { + m_whichKind = 1; + m_colourSelection = 0; + m_colourData.m_dataColour.Set( 0, 0, 0 ); + } } void wxGenericColourDialog::PaintBasicColours(wxDC& dc) { - dc.BeginDrawing(); - - int i; - for (i = 0; i < 6; i++) - { - int j; - for (j = 0; j < 8; j++) + int i; + for (i = 0; i < 6; i++) { - int ptr = i*8 + j; + int j; + for (j = 0; j < 8; j++) + { + int ptr = i*8 + j; - int x = (j*(smallRectangleSize.x+gridSpacing) + standardColoursRect.x); - int y = (i*(smallRectangleSize.y+gridSpacing) + standardColoursRect.y); + int x = (j*(m_smallRectangleSize.x+m_gridSpacing) + m_standardColoursRect.x); + int y = (i*(m_smallRectangleSize.y+m_gridSpacing) + m_standardColoursRect.y); - dc.SetPen(*wxBLACK_PEN); - wxBrush brush(standardColours[ptr], wxSOLID); - dc.SetBrush(brush); + dc.SetPen(*wxBLACK_PEN); + wxBrush brush(m_standardColours[ptr]); + dc.SetBrush(brush); - dc.DrawRectangle( x, y, smallRectangleSize.x, smallRectangleSize.y); + dc.DrawRectangle( x, y, m_smallRectangleSize.x, m_smallRectangleSize.y); + } } - } - dc.EndDrawing(); } void wxGenericColourDialog::PaintCustomColours(wxDC& dc) { - dc.BeginDrawing(); - int i; for (i = 0; i < 2; i++) { @@ -338,37 +399,37 @@ void wxGenericColourDialog::PaintCustomColours(wxDC& dc) { int ptr = i*8 + j; - int x = (j*(smallRectangleSize.x+gridSpacing)) + customColoursRect.x; - int y = (i*(smallRectangleSize.y+gridSpacing)) + customColoursRect.y; + int x = (j*(m_smallRectangleSize.x+m_gridSpacing)) + m_customColoursRect.x; + int y = (i*(m_smallRectangleSize.y+m_gridSpacing)) + m_customColoursRect.y; dc.SetPen(*wxBLACK_PEN); - wxBrush brush(customColours[ptr], wxSOLID); + wxBrush brush(m_customColours[ptr]); dc.SetBrush(brush); - dc.DrawRectangle( x, y, smallRectangleSize.x, smallRectangleSize.y); + dc.DrawRectangle( x, y, m_smallRectangleSize.x, m_smallRectangleSize.y); } } - dc.EndDrawing(); } void wxGenericColourDialog::PaintHighlight(wxDC& dc, bool draw) { - dc.BeginDrawing(); + if ( m_colourSelection < 0 ) + return; // Number of pixels bigger than the standard rectangle size // for drawing a highlight int deltaX = 2; int deltaY = 2; - if (whichKind == 1) + if (m_whichKind == 1) { // Standard colours - int y = (int)(colourSelection / 8); - int x = (int)(colourSelection - (y*8)); + int y = (int)(m_colourSelection / 8); + int x = (int)(m_colourSelection - (y*8)); - x = (x*(smallRectangleSize.x + gridSpacing) + standardColoursRect.x) - deltaX; - y = (y*(smallRectangleSize.y + gridSpacing) + standardColoursRect.y) - deltaY; + x = (x*(m_smallRectangleSize.x + m_gridSpacing) + m_standardColoursRect.x) - deltaX; + y = (y*(m_smallRectangleSize.y + m_gridSpacing) + m_standardColoursRect.y) - deltaY; if (draw) dc.SetPen(*wxBLACK_PEN); @@ -376,16 +437,16 @@ void wxGenericColourDialog::PaintHighlight(wxDC& dc, bool draw) dc.SetPen(*wxLIGHT_GREY_PEN); dc.SetBrush(*wxTRANSPARENT_BRUSH); - dc.DrawRectangle( x, y, (smallRectangleSize.x + (2*deltaX)), (smallRectangleSize.y + (2*deltaY))); + dc.DrawRectangle( x, y, (m_smallRectangleSize.x + (2*deltaX)), (m_smallRectangleSize.y + (2*deltaY))); } else { // User-defined colours - int y = (int)(colourSelection / 8); - int x = (int)(colourSelection - (y*8)); + int y = (int)(m_colourSelection / 8); + int x = (int)(m_colourSelection - (y*8)); - x = (x*(smallRectangleSize.x + gridSpacing) + customColoursRect.x) - deltaX; - y = (y*(smallRectangleSize.y + gridSpacing) + customColoursRect.y) - deltaY; + x = (x*(m_smallRectangleSize.x + m_gridSpacing) + m_customColoursRect.x) - deltaX; + y = (y*(m_smallRectangleSize.y + m_gridSpacing) + m_customColoursRect.y) - deltaY; if (draw) dc.SetPen(*wxBLACK_PEN); @@ -393,112 +454,132 @@ void wxGenericColourDialog::PaintHighlight(wxDC& dc, bool draw) dc.SetPen(*wxLIGHT_GREY_PEN); dc.SetBrush(*wxTRANSPARENT_BRUSH); - dc.DrawRectangle( x, y, (smallRectangleSize.x + (2*deltaX)), (smallRectangleSize.y + (2*deltaY))); + dc.DrawRectangle( x, y, (m_smallRectangleSize.x + (2*deltaX)), (m_smallRectangleSize.y + (2*deltaY))); } - - dc.EndDrawing(); } void wxGenericColourDialog::PaintCustomColour(wxDC& dc) { - dc.BeginDrawing(); - - dc.SetPen(*wxBLACK_PEN); + dc.SetPen(*wxBLACK_PEN); - wxBrush *brush = new wxBrush(singleCustomColour, wxSOLID); - dc.SetBrush(*brush); + wxBrush *brush = new wxBrush(m_colourData.m_dataColour); + dc.SetBrush(*brush); - dc.DrawRectangle( singleCustomColourRect.x, singleCustomColourRect.y, - customRectangleSize.x, customRectangleSize.y); + dc.DrawRectangle( m_singleCustomColourRect.x, m_singleCustomColourRect.y, + m_customRectangleSize.x, m_customRectangleSize.y); - dc.SetBrush(wxNullBrush); - delete brush; - - dc.EndDrawing(); + dc.SetBrush(wxNullBrush); + delete brush; } void wxGenericColourDialog::OnBasicColourClick(int which) { - wxClientDC dc(this); + wxClientDC dc(this); + + PaintHighlight(dc, false); + m_whichKind = 1; + m_colourSelection = which; + +#if wxUSE_SLIDER + m_redSlider->SetValue( m_standardColours[m_colourSelection].Red() ); + m_greenSlider->SetValue( m_standardColours[m_colourSelection].Green() ); + m_blueSlider->SetValue( m_standardColours[m_colourSelection].Blue() ); +#endif // wxUSE_SLIDER - PaintHighlight(dc, FALSE); - whichKind = 1; - colourSelection = which; - colourData.SetColour(standardColours[colourSelection]); + m_colourData.m_dataColour.Set(m_standardColours[m_colourSelection].Red(), + m_standardColours[m_colourSelection].Green(), + m_standardColours[m_colourSelection].Blue()); - PaintHighlight(dc, TRUE); + PaintCustomColour(dc); + PaintHighlight(dc, true); } void wxGenericColourDialog::OnCustomColourClick(int which) { - wxClientDC dc(this); - PaintHighlight(dc, FALSE); - whichKind = 2; - colourSelection = which; - colourData.SetColour(customColours[colourSelection]); - - PaintHighlight(dc, TRUE); + wxClientDC dc(this); + PaintHighlight(dc, false); + m_whichKind = 2; + m_colourSelection = which; + +#if wxUSE_SLIDER + m_redSlider->SetValue( m_customColours[m_colourSelection].Red() ); + m_greenSlider->SetValue( m_customColours[m_colourSelection].Green() ); + m_blueSlider->SetValue( m_customColours[m_colourSelection].Blue() ); +#endif // wxUSE_SLIDER + + m_colourData.m_dataColour.Set(m_customColours[m_colourSelection].Red(), + m_customColours[m_colourSelection].Green(), + m_customColours[m_colourSelection].Blue()); + + PaintCustomColour(dc); + PaintHighlight(dc, true); } /* void wxGenericColourDialog::OnOk(void) { - Show(FALSE); + Show(false); } void wxGenericColourDialog::OnCancel(void) { - colourDialogCancelled = TRUE; - Show(FALSE); + colourDialogCancelled = true; + Show(false); } */ void wxGenericColourDialog::OnAddCustom(wxCommandEvent& WXUNUSED(event)) { wxClientDC dc(this); - if (whichKind != 2) + if (m_whichKind != 2) { - PaintHighlight(dc, FALSE); - whichKind = 2; - colourSelection = 0; - PaintHighlight(dc, TRUE); + PaintHighlight(dc, false); + m_whichKind = 2; + m_colourSelection = 0; + PaintHighlight(dc, true); } - customColours[colourSelection].Set(singleCustomColour.Red(), singleCustomColour.Green(), singleCustomColour.Blue()); - colourData.SetColour(customColours[colourSelection]); - colourData.SetCustomColour(colourSelection, customColours[colourSelection]); + m_customColours[m_colourSelection].Set(m_colourData.m_dataColour.Red(), + m_colourData.m_dataColour.Green(), + m_colourData.m_dataColour.Blue()); + + m_colourData.SetCustomColour(m_colourSelection, m_customColours[m_colourSelection]); PaintCustomColours(dc); } +#if wxUSE_SLIDER + void wxGenericColourDialog::OnRedSlider(wxCommandEvent& WXUNUSED(event)) { - if (!redSlider) + if (!m_redSlider) return; wxClientDC dc(this); - singleCustomColour.Set(redSlider->GetValue(), singleCustomColour.Green(), singleCustomColour.Blue()); + m_colourData.m_dataColour.Set((unsigned char)m_redSlider->GetValue(), m_colourData.m_dataColour.Green(), m_colourData.m_dataColour.Blue()); PaintCustomColour(dc); } void wxGenericColourDialog::OnGreenSlider(wxCommandEvent& WXUNUSED(event)) { - if (!greenSlider) + if (!m_greenSlider) return; wxClientDC dc(this); - singleCustomColour.Set(singleCustomColour.Red(), greenSlider->GetValue(), singleCustomColour.Blue()); + m_colourData.m_dataColour.Set(m_colourData.m_dataColour.Red(), (unsigned char)m_greenSlider->GetValue(), m_colourData.m_dataColour.Blue()); PaintCustomColour(dc); } void wxGenericColourDialog::OnBlueSlider(wxCommandEvent& WXUNUSED(event)) { - if (!blueSlider) + if (!m_blueSlider) return; wxClientDC dc(this); - singleCustomColour.Set(singleCustomColour.Red(), singleCustomColour.Green(), blueSlider->GetValue()); + m_colourData.m_dataColour.Set(m_colourData.m_dataColour.Red(), m_colourData.m_dataColour.Green(), (unsigned char)m_blueSlider->GetValue()); PaintCustomColour(dc); } +#endif // wxUSE_SLIDER +#endif // wxUSE_COLOURDLG