audacia/src/widgets/wxTextCtrlWrapper.h

76 lines
1.7 KiB
C++

/**********************************************************************
Audacity: A Digital Audio Editor
wxTextCtrlWrapper.h
(Extracted from TimerRecordDialog.h)
**********************************************************************/
#ifndef __AUDACITY_WXTEXTCTRLWRAPPER__
#define __AUDACITY_WXTEXTCTRLWRAPPER__
#include <wx/textctrl.h>
// MY: Class that inherits from the wxTextCtrl class.
// We override AcceptsFocusFromKeyboard in order to add
// the text controls to the Tab Order since wxTextCtrls
// with the wxTE_READONLY style are normally skipped.
class wxTextCtrlWrapper final : public wxTextCtrl
{
public:
wxTextCtrlWrapper(wxWindow * parent, wxWindowID id,
const wxString &value = {},
const wxPoint &pos = wxDefaultPosition,
const wxSize &size = wxDefaultSize,
long style = 0,
const wxValidator &validator = wxDefaultValidator,
const wxString &name = wxTextCtrlNameStr)
: wxTextCtrl(parent, id, value, pos, size, style, validator, name)
{
mReadOnly = false;
Bind(wxEVT_KEY_DOWN, [&](wxKeyEvent &event)
{
auto keyCode = event.GetKeyCode();
if (mReadOnly)
{
if (keyCode >= WXK_SPACE || keyCode == WXK_DELETE || keyCode == WXK_BACK)
{
event.Skip(false);
return;
}
}
event.Skip();
});
};
~wxTextCtrlWrapper()
{
};
virtual bool AcceptsFocusFromKeyboard() const override
{
return true;
}
bool IsReadOnly()
{
return mReadOnly;
}
void SetReadOnly(bool readonly = true)
{
mReadOnly = readonly;
}
private:
bool mReadOnly;
};
#endif // __AUDACITY_WXTEXTCTRLWRAPPER__