Allow setting and clearing indicators in the STC sample

Show another Scintilla feature and allow experimenting with it.
This commit is contained in:
Vadim Zeitlin 2022-08-15 17:38:51 +01:00
parent 8c9b09dfa9
commit 6886fb3aa7
4 changed files with 85 additions and 0 deletions

View file

@ -57,6 +57,32 @@ enum {
myID_ANNOTATION_STYLE_HIDDEN,
myID_ANNOTATION_STYLE_STANDARD,
myID_ANNOTATION_STYLE_BOXED,
myID_INDICATOR_FILL,
myID_INDICATOR_CLEAR,
myID_INDICATOR_STYLE_FIRST,
myID_INDICATOR_STYLE_PLAIN = myID_INDICATOR_STYLE_FIRST,
myID_INDICATOR_STYLE_SQUIGGLE,
myID_INDICATOR_STYLE_TT,
myID_INDICATOR_STYLE_DIAGONAL,
myID_INDICATOR_STYLE_STRIKE,
myID_INDICATOR_STYLE_HIDDEN,
myID_INDICATOR_STYLE_BOX,
myID_INDICATOR_STYLE_ROUNDBOX,
myID_INDICATOR_STYLE_STRAIGHTBOX,
myID_INDICATOR_STYLE_DASH,
myID_INDICATOR_STYLE_DOTS,
myID_INDICATOR_STYLE_SQUIGGLELOW,
myID_INDICATOR_STYLE_DOTBOX,
myID_INDICATOR_STYLE_SQUIGGLEPIXMAP,
myID_INDICATOR_STYLE_COMPOSITIONTHICK,
myID_INDICATOR_STYLE_COMPOSITIONTHIN,
myID_INDICATOR_STYLE_FULLBOX,
myID_INDICATOR_STYLE_TEXTFORE,
myID_INDICATOR_STYLE_POINT,
myID_INDICATOR_STYLE_POINTCHARACTER,
myID_INDICATOR_STYLE_LAST = myID_INDICATOR_STYLE_POINTCHARACTER,
myID_CHANGECASE,
myID_CHANGELOWER,
myID_CHANGEUPPER,

View file

@ -115,6 +115,12 @@ wxBEGIN_EVENT_TABLE (Edit, wxStyledTextCtrl)
EVT_MENU (myID_ANNOTATION_STYLE_HIDDEN, Edit::OnAnnotationStyle)
EVT_MENU (myID_ANNOTATION_STYLE_STANDARD, Edit::OnAnnotationStyle)
EVT_MENU (myID_ANNOTATION_STYLE_BOXED, Edit::OnAnnotationStyle)
// indicators
EVT_MENU (myID_INDICATOR_FILL, Edit::OnIndicatorFill)
EVT_MENU (myID_INDICATOR_CLEAR, Edit::OnIndicatorClear)
EVT_MENU_RANGE (myID_INDICATOR_STYLE_FIRST,
myID_INDICATOR_STYLE_LAST,
Edit::OnIndicatorStyle)
// extra
EVT_MENU (myID_CHANGELOWER, Edit::OnChangeCase)
EVT_MENU (myID_CHANGEUPPER, Edit::OnChangeCase)
@ -430,6 +436,26 @@ void Edit::OnAnnotationStyle(wxCommandEvent& event)
AnnotationSetVisible(style);
}
void Edit::OnIndicatorFill(wxCommandEvent& WXUNUSED(event))
{
long from, to;
GetSelection(&from, &to);
IndicatorFillRange(from, to - from);
}
void Edit::OnIndicatorClear(wxCommandEvent& WXUNUSED(event))
{
long from, to;
GetSelection(&from, &to);
IndicatorClearRange(from, to - from);
}
void Edit::OnIndicatorStyle(wxCommandEvent& event)
{
IndicatorSetStyle(GetIndicatorCurrent(),
event.GetId() - myID_INDICATOR_STYLE_FIRST);
}
void Edit::OnChangeCase (wxCommandEvent &event) {
switch (event.GetId()) {
case myID_CHANGELOWER: {

View file

@ -95,6 +95,10 @@ public:
void OnAnnotationRemove(wxCommandEvent& event);
void OnAnnotationClear(wxCommandEvent& event);
void OnAnnotationStyle(wxCommandEvent& event);
// indicators
void OnIndicatorFill(wxCommandEvent& event);
void OnIndicatorClear(wxCommandEvent& event);
void OnIndicatorStyle(wxCommandEvent& event);
//! extra
void OnChangeCase (wxCommandEvent &event);
void OnConvertEOL (wxCommandEvent &event);

View file

@ -547,6 +547,34 @@ void AppFrame::CreateMenu ()
menuAnnotationsStyle->AppendRadioItem(myID_ANNOTATION_STYLE_BOXED, _("&Boxed"));
menuAnnotations->AppendSubMenu(menuAnnotationsStyle, "&Style");
// Indicators menu
wxMenu* menuIndicators = new wxMenu;
menuIndicators->Append(myID_INDICATOR_FILL, _("&Add indicator for selection"));
menuIndicators->Append(myID_INDICATOR_CLEAR, _("&Clear indicator for selection"));
wxMenu* menuIndicatorStyle = new wxMenu;
menuIndicatorStyle->AppendRadioItem(myID_INDICATOR_STYLE_PLAIN, "Plain");
menuIndicatorStyle->AppendRadioItem(myID_INDICATOR_STYLE_SQUIGGLE, "Squiggle");
menuIndicatorStyle->AppendRadioItem(myID_INDICATOR_STYLE_TT, "TT");
menuIndicatorStyle->AppendRadioItem(myID_INDICATOR_STYLE_DIAGONAL, "Diagonal");
menuIndicatorStyle->AppendRadioItem(myID_INDICATOR_STYLE_STRIKE, "Strike");
menuIndicatorStyle->AppendRadioItem(myID_INDICATOR_STYLE_HIDDEN, "Hidden");
menuIndicatorStyle->AppendRadioItem(myID_INDICATOR_STYLE_BOX, "Box");
menuIndicatorStyle->AppendRadioItem(myID_INDICATOR_STYLE_ROUNDBOX, "Round box");
menuIndicatorStyle->AppendRadioItem(myID_INDICATOR_STYLE_STRAIGHTBOX, "Straight box");
menuIndicatorStyle->AppendRadioItem(myID_INDICATOR_STYLE_DASH, "Dash");
menuIndicatorStyle->AppendRadioItem(myID_INDICATOR_STYLE_DOTS, "Dots");
menuIndicatorStyle->AppendRadioItem(myID_INDICATOR_STYLE_SQUIGGLELOW, "Squiggle low");
menuIndicatorStyle->AppendRadioItem(myID_INDICATOR_STYLE_DOTBOX, "Dot box");
menuIndicatorStyle->AppendRadioItem(myID_INDICATOR_STYLE_SQUIGGLEPIXMAP, "Squiggle pixmap");
menuIndicatorStyle->AppendRadioItem(myID_INDICATOR_STYLE_COMPOSITIONTHICK, "Composition thick");
menuIndicatorStyle->AppendRadioItem(myID_INDICATOR_STYLE_COMPOSITIONTHIN, "Composition thin");
menuIndicatorStyle->AppendRadioItem(myID_INDICATOR_STYLE_FULLBOX, "Full box");
menuIndicatorStyle->AppendRadioItem(myID_INDICATOR_STYLE_TEXTFORE, "Text fore");
menuIndicatorStyle->AppendRadioItem(myID_INDICATOR_STYLE_POINT, "Point");
menuIndicatorStyle->AppendRadioItem(myID_INDICATOR_STYLE_POINTCHARACTER, "Point character");
menuIndicators->AppendSubMenu(menuIndicatorStyle, "&Style");
// change case submenu
wxMenu *menuChangeCase = new wxMenu;
menuChangeCase->Append (myID_CHANGEUPPER, _("&Upper case"));
@ -591,6 +619,7 @@ void AppFrame::CreateMenu ()
m_menuBar->Append (menuEdit, _("&Edit"));
m_menuBar->Append (menuView, _("&View"));
m_menuBar->Append (menuAnnotations, _("&Annotations"));
m_menuBar->Append (menuIndicators, _("&Indicators"));
m_menuBar->Append (menuExtra, _("E&xtra"));
m_menuBar->Append (menuWindow, _("&Window"));
m_menuBar->Append (menuHelp, _("&Help"));