X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/081d8d96db3bfe4dc490a6244b17184366846738..bf2c43c76e2819be443ab1d830ab68d9569d66b1:/src/common/colourdata.cpp diff --git a/src/common/colourdata.cpp b/src/common/colourdata.cpp index af37a90b80..3569c50514 100644 --- a/src/common/colourdata.cpp +++ b/src/common/colourdata.cpp @@ -1,7 +1,6 @@ ///////////////////////////////////////////////////////////////////////////// // Name: src/common/colourdata.cpp // Author: Julian Smart -// RCS-ID: $Id$ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -105,4 +104,64 @@ bool wxColourData::FromString(const wxString& str) } return success; } + +#if wxUSE_COLOURDLG + +#include "wx/colordlg.h" + +wxColour wxGetColourFromUser(wxWindow *parent, + const wxColour& colInit, + const wxString& caption, + wxColourData *ptrData) +{ + // contains serialized representation of wxColourData used the last time + // the dialog was shown: we want to reuse it the next time in order to show + // the same custom colours to the user (and we can't just have static + // wxColourData itself because it's a GUI object and so should be destroyed + // before GUI shutdown and doing it during static cleanup is too late) + static wxString s_strColourData; + + wxColourData data; + if ( !ptrData ) + { + ptrData = &data; + if ( !s_strColourData.empty() ) + { + if ( !data.FromString(s_strColourData) ) + { + wxFAIL_MSG( "bug in wxColourData::FromString()?" ); + } + +#ifdef __WXMSW__ + // we don't get back the "choose full" flag value from the native + // dialog and so we can't preserve it between runs, so we decide to + // always use it as it seems better than not using it (user can + // just ignore the extra controls in the dialog but having to click + // a button each time to show them would be very annoying + data.SetChooseFull(true); +#endif // __WXMSW__ + } + } + + if ( colInit.IsOk() ) + { + ptrData->SetColour(colInit); + } + + wxColour colRet; + wxColourDialog dialog(parent, ptrData); + if (!caption.empty()) + dialog.SetTitle(caption); + if ( dialog.ShowModal() == wxID_OK ) + { + *ptrData = dialog.GetColourData(); + colRet = ptrData->GetColour(); + s_strColourData = ptrData->ToString(); + } + //else: leave colRet invalid + + return colRet; +} + +#endif // wxUSE_COLOURDLG #endif // wxUSE_COLOURDLG || wxUSE_COLOURPICKERCTRL