@@ -1990,13 +1990,41 @@ ColorPickerPopup::ColorPickerPopup(wxWindow* parent)
19901990 m_clrData->SetChooseAlpha (false );
19911991
19921992
1993+ // Hex colour input field
1994+ auto hex_sizer = new wxBoxSizer (wxHORIZONTAL);
1995+ auto hex_label = new wxStaticText (m_def_color_box, wxID_ANY, wxT (" #" ), wxDefaultPosition, wxDefaultSize, 0 );
1996+ hex_label->SetFont (::Label::Body_12);
1997+ m_hex_input = new TextInput (m_def_color_box, wxEmptyString, wxEmptyString, wxEmptyString,
1998+ wxDefaultPosition, wxSize (FromDIP (80 ), FromDIP (24 )), wxTE_PROCESS_ENTER);
1999+ m_hex_input->GetTextCtrl ()->SetMaxLength (6 );
2000+ m_hex_input->SetFont (::Label::Body_12);
2001+ m_hex_input->SetToolTip (_L (" Enter a hex colour code (e.g. FF8800)" ));
2002+ hex_sizer->Add (hex_label, 0 , wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP (4 ));
2003+ hex_sizer->Add (m_hex_input, 0 , wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP (2 ));
2004+
2005+ m_hex_input->GetTextCtrl ()->Bind (wxEVT_TEXT_ENTER, [this ](wxCommandEvent&) {
2006+ wxString hex = m_hex_input->GetTextCtrl ()->GetValue ().Trim ().Upper ();
2007+ if (hex.Length () == 6 ) {
2008+ unsigned long rgb = 0 ;
2009+ if (hex.ToULong (&rgb, 16 )) {
2010+ wxColour col ((rgb >> 16 ) & 0xff , (rgb >> 8 ) & 0xff , rgb & 0xff );
2011+ set_def_colour (col);
2012+ wxCommandEvent evt (EVT_SELECTED_COLOR );
2013+ unsigned long g_col = ((col.Red () & 0xff ) << 24 ) | ((col.Green () & 0xff ) << 16 ) | ((col.Blue () & 0xff ) << 8 ) | 0xff ;
2014+ evt.SetInt (g_col);
2015+ wxPostEvent (GetParent (), evt);
2016+ }
2017+ }
2018+ });
2019+
19932020 m_sizer_box->Add (0 , 0 , 0 , wxTOP, FromDIP (10 ));
19942021 m_sizer_box->Add (m_sizer_ams, 1 , wxEXPAND|wxLEFT|wxRIGHT, FromDIP (10 ));
19952022 m_sizer_box->Add (m_ams_fg_sizer, 0 , wxEXPAND|wxLEFT|wxRIGHT, FromDIP (10 ));
19962023 m_sizer_box->Add (m_sizer_other, 1 , wxEXPAND|wxLEFT|wxRIGHT, FromDIP (10 ));
19972024 m_sizer_box->Add (fg_sizer, 0 , wxEXPAND|wxLEFT|wxRIGHT, FromDIP (10 ));
19982025 m_sizer_box->Add (m_sizer_custom, 0 , wxEXPAND|wxLEFT|wxRIGHT, FromDIP (10 ));
19992026 m_sizer_box->Add (m_custom_cp, 0 , wxEXPAND|wxLEFT|wxRIGHT, FromDIP (16 ));
2027+ m_sizer_box->Add (hex_sizer, 0 , wxEXPAND|wxLEFT|wxRIGHT, FromDIP (10 ));
20002028 m_sizer_box->Add (0 , 0 , 0 , wxTOP, FromDIP (10 ));
20012029
20022030
@@ -2113,10 +2141,17 @@ void ColorPickerPopup::set_def_colour(wxColour col)
21132141
21142142 if (m_def_col.Alpha () == 0 ) {
21152143 m_ts_stbitmap_custom->Show ();
2144+ if (m_hex_input)
2145+ m_hex_input->GetTextCtrl ()->ChangeValue (wxEmptyString);
21162146 }
21172147 else {
21182148 m_ts_stbitmap_custom->Hide ();
21192149 m_custom_cp->SetBackgroundColor (m_def_col);
2150+ if (m_hex_input) {
2151+ wxString hex = wxString::Format (" %02X%02X%02X" ,
2152+ m_def_col.Red (), m_def_col.Green (), m_def_col.Blue ());
2153+ m_hex_input->GetTextCtrl ()->ChangeValue (hex);
2154+ }
21202155 }
21212156
21222157 Dismiss ();
0 commit comments