X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/41a499cd92710e3c954fa6e23ce3438cf26f5fcf..7dea20f60aa688bdebb58b1157ed6903508aeff4:/src/stc/stc.cpp diff --git a/src/stc/stc.cpp b/src/stc/stc.cpp index cb33d568a9..6230d02ca5 100644 --- a/src/stc/stc.cpp +++ b/src/stc/stc.cpp @@ -15,15 +15,29 @@ // Licence: wxWindows license ///////////////////////////////////////////////////////////////////////////// -#include +// For compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + +#ifdef __BORLANDC__ + #pragma hdrstop +#endif -#include -#include -#include -#include -#include +#if wxUSE_STC #include "wx/stc/stc.h" +#include "wx/stc/private.h" + +#ifndef WX_PRECOMP + #include "wx/wx.h" +#endif // WX_PRECOMP + +#include + +#include "wx/tokenzr.h" +#include "wx/mstream.h" +#include "wx/image.h" +#include "wx/file.h" + #include "ScintillaWX.h" //---------------------------------------------------------------------- @@ -96,6 +110,9 @@ DEFINE_EVENT_TYPE( wxEVT_STC_ZOOM ) DEFINE_EVENT_TYPE( wxEVT_STC_HOTSPOT_CLICK ) DEFINE_EVENT_TYPE( wxEVT_STC_HOTSPOT_DCLICK ) DEFINE_EVENT_TYPE( wxEVT_STC_CALLTIP_CLICK ) +DEFINE_EVENT_TYPE( wxEVT_STC_AUTOCOMP_SELECTION ) +DEFINE_EVENT_TYPE( wxEVT_STC_INDICATOR_CLICK ) +DEFINE_EVENT_TYPE( wxEVT_STC_INDICATOR_RELEASE ) @@ -157,9 +174,7 @@ bool wxStyledTextCtrl::Create(wxWindow *parent, long style, const wxString& name) { -#ifdef __WXMAC__ style |= wxVSCROLL | wxHSCROLL; -#endif if (!wxControl::Create(parent, id, pos, size, style | wxWANTS_CHARS | wxCLIP_CHILDREN, wxDefaultValidator, name)) @@ -178,7 +193,7 @@ bool wxStyledTextCtrl::Create(wxWindow *parent, SetCodePage(wxSTC_CP_UTF8); #endif - SetBestFittingSize(size); + SetInitialSize(size); // Reduces flicker on GTK+/X11 SetBackgroundStyle(wxBG_STYLE_CUSTOM); @@ -517,6 +532,8 @@ void wxStyledTextCtrl::MarkerDefineBitmap(int markerNumber, const wxBitmap& bmp) // convert bmp to a xpm in a string wxMemoryOutputStream strm; wxImage img = bmp.ConvertToImage(); + if (img.HasAlpha()) + img.ConvertAlphaToMask(); img.SaveFile(strm, wxBITMAP_TYPE_XPM); size_t len = strm.GetSize(); char* buff = new char[len+1]; @@ -527,6 +544,16 @@ void wxStyledTextCtrl::MarkerDefineBitmap(int markerNumber, const wxBitmap& bmp) } +// Add a set of markers to a line. +void wxStyledTextCtrl::MarkerAddSet(int line, int set) { + SendMsg(2466, line, set); +} + +// Set the alpha used for a marker that is drawn in the text area, not the margin. +void wxStyledTextCtrl::MarkerSetAlpha(int markerNumber, int alpha) { + SendMsg(2476, markerNumber, alpha); +} + // Set a margin to be either numeric or symbolic. void wxStyledTextCtrl::SetMarginType(int margin, int marginType) { SendMsg(2240, margin, marginType); @@ -617,16 +644,86 @@ void wxStyledTextCtrl::StyleSetUnderline(int style, bool underline) { SendMsg(2059, style, underline); } +// Get the foreground colour of a style. +wxColour wxStyledTextCtrl::StyleGetForeground(int style) { + long c = SendMsg(2481, style, 0); + return wxColourFromLong(c); +} + +// Get the background colour of a style. +wxColour wxStyledTextCtrl::StyleGetBackground(int style) { + long c = SendMsg(2482, style, 0); + return wxColourFromLong(c); +} + +// Get is a style bold or not. +bool wxStyledTextCtrl::StyleGetBold(int style) { + return SendMsg(2483, style, 0) != 0; +} + +// Get is a style italic or not. +bool wxStyledTextCtrl::StyleGetItalic(int style) { + return SendMsg(2484, style, 0) != 0; +} + +// Get the size of characters of a style. +int wxStyledTextCtrl::StyleGetSize(int style) { + return SendMsg(2485, style, 0); +} + +// Get the font facename of a style +wxString wxStyledTextCtrl::StyleGetFaceName(int style) { + long msg = 2486; + long len = SendMsg(msg, style, 0); + wxMemoryBuffer mbuf(len+1); + char* buf = (char*)mbuf.GetWriteBuf(len+1); + SendMsg(msg, style, (long)buf); + mbuf.UngetWriteBuf(len); + mbuf.AppendByte(0); + return stc2wx(buf); +} + +// Get is a style to have its end of line filled or not. +bool wxStyledTextCtrl::StyleGetEOLFilled(int style) { + return SendMsg(2487, style, 0) != 0; +} + +// Get is a style underlined or not. +bool wxStyledTextCtrl::StyleGetUnderline(int style) { + return SendMsg(2488, style, 0) != 0; +} + +// Get is a style mixed case, or to force upper or lower case. +int wxStyledTextCtrl::StyleGetCase(int style) { + return SendMsg(2489, style, 0); +} + +// Get the character set of the font in a style. +int wxStyledTextCtrl::StyleGetCharacterSet(int style) { + return SendMsg(2490, style, 0); +} + +// Get is a style visible or not. +bool wxStyledTextCtrl::StyleGetVisible(int style) { + return SendMsg(2491, style, 0) != 0; +} + +// Get is a style changeable or not (read only). +// Experimental feature, currently buggy. +bool wxStyledTextCtrl::StyleGetChangeable(int style) { + return SendMsg(2492, style, 0) != 0; +} + +// Get is a style a hotspot or not. +bool wxStyledTextCtrl::StyleGetHotSpot(int style) { + return SendMsg(2493, style, 0) != 0; +} + // Set a style to be mixed case, or to force upper or lower case. void wxStyledTextCtrl::StyleSetCase(int style, int caseForce) { SendMsg(2060, style, caseForce); } -// Set the character set of the font in a style. -void wxStyledTextCtrl::StyleSetCharacterSet(int style, int characterSet) { - SendMsg(2066, style, characterSet); -} - // Set a style to be a hotspot or not. void wxStyledTextCtrl::StyleSetHotSpot(int style, bool hotspot) { SendMsg(2409, style, hotspot); @@ -642,6 +739,26 @@ void wxStyledTextCtrl::SetSelBackground(bool useSetting, const wxColour& back) { SendMsg(2068, useSetting, wxColourAsLong(back)); } +// Get the alpha of the selection. +int wxStyledTextCtrl::GetSelAlpha() { + return SendMsg(2477, 0, 0); +} + +// Set the alpha of the selection. +void wxStyledTextCtrl::SetSelAlpha(int alpha) { + SendMsg(2478, alpha, 0); +} + +// Is the selection end of line filled? +bool wxStyledTextCtrl::GetSelEOLFilled() { + return SendMsg(2479, 0, 0) != 0; +} + +// Set the selection to have its end of line filled or not. +void wxStyledTextCtrl::SetSelEOLFilled(bool filled) { + SendMsg(2480, filled, 0); +} + // Set the foreground colour of the caret. void wxStyledTextCtrl::SetCaretForeground(const wxColour& fore) { SendMsg(2069, wxColourAsLong(fore), 0); @@ -720,6 +837,16 @@ wxColour wxStyledTextCtrl::IndicatorGetForeground(int indic) { return wxColourFromLong(c); } +// Set an indicator to draw under text or over(default). +void wxStyledTextCtrl::IndicatorSetUnder(int indic, bool under) { + SendMsg(2510, indic, under); +} + +// Retrieve whether indicator drawn under or over text. +bool wxStyledTextCtrl::IndicatorGetUnder(int indic) { + return SendMsg(2511, indic, 0) != 0; +} + // Set the foreground colour of all whitespace and whether to use this setting. void wxStyledTextCtrl::SetWhitespaceForeground(bool useSetting, const wxColour& fore) { SendMsg(2084, useSetting, wxColourAsLong(fore)); @@ -768,13 +895,13 @@ void wxStyledTextCtrl::SetCaretLineVisible(bool show) { } // Get the colour of the background of the line containing the caret. -wxColour wxStyledTextCtrl::GetCaretLineBack() { +wxColour wxStyledTextCtrl::GetCaretLineBackground() { long c = SendMsg(2097, 0, 0); return wxColourFromLong(c); } // Set the colour of the background of the line containing the caret. -void wxStyledTextCtrl::SetCaretLineBack(const wxColour& back) { +void wxStyledTextCtrl::SetCaretLineBackground(const wxColour& back) { SendMsg(2098, wxColourAsLong(back), 0); } @@ -901,6 +1028,8 @@ void wxStyledTextCtrl::RegisterImage(int type, const wxBitmap& bmp) { // convert bmp to a xpm in a string wxMemoryOutputStream strm; wxImage img = bmp.ConvertToImage(); + if (img.HasAlpha()) + img.ConvertAlphaToMask(); img.SaveFile(strm, wxBITMAP_TYPE_XPM); size_t len = strm.GetSize(); char* buff = new char[len+1]; @@ -927,6 +1056,28 @@ void wxStyledTextCtrl::AutoCompSetTypeSeparator(int separatorCharacter) { SendMsg(2286, separatorCharacter, 0); } +// Set the maximum width, in characters, of auto-completion and user lists. +// Set to 0 to autosize to fit longest item, which is the default. +void wxStyledTextCtrl::AutoCompSetMaxWidth(int characterCount) { + SendMsg(2208, characterCount, 0); +} + +// Get the maximum width, in characters, of auto-completion and user lists. +int wxStyledTextCtrl::AutoCompGetMaxWidth() { + return SendMsg(2209, 0, 0); +} + +// Set the maximum height, in rows, of auto-completion and user lists. +// The default is 5 rows. +void wxStyledTextCtrl::AutoCompSetMaxHeight(int rowCount) { + SendMsg(2210, rowCount, 0); +} + +// Set the maximum height, in rows, of auto-completion and user lists. +int wxStyledTextCtrl::AutoCompGetMaxHeight() { + return SendMsg(2211, 0, 0); +} + // Set the number of spaces used for one level of indentation. void wxStyledTextCtrl::SetIndent(int indentSize) { SendMsg(2122, indentSize, 0); @@ -979,13 +1130,13 @@ bool wxStyledTextCtrl::GetUseHorizontalScrollBar() { } // Show or hide indentation guides. -void wxStyledTextCtrl::SetIndentationGuides(bool show) { - SendMsg(2132, show, 0); +void wxStyledTextCtrl::SetIndentationGuides(int indentView) { + SendMsg(2132, indentView, 0); } // Are the indentation guides visible? -bool wxStyledTextCtrl::GetIndentationGuides() { - return SendMsg(2133, 0, 0) != 0; +int wxStyledTextCtrl::GetIndentationGuides() { + return SendMsg(2133, 0, 0); } // Set the highlighted indentation guide column. @@ -1418,6 +1569,11 @@ void wxStyledTextCtrl::CallTipSetForegroundHighlight(const wxColour& fore) { SendMsg(2207, wxColourAsLong(fore), 0); } +// Enable use of STYLE_CALLTIP and set call tip tab size in pixels. +void wxStyledTextCtrl::CallTipUseStyle(int tabSize) { + SendMsg(2212, tabSize, 0); +} + // Find the display line of a document line taking hidden lines into account. int wxStyledTextCtrl::VisibleFromDocLine(int line) { return SendMsg(2220, line, 0); @@ -1428,6 +1584,11 @@ int wxStyledTextCtrl::DocLineFromVisible(int lineDisplay) { return SendMsg(2221, lineDisplay, 0); } +// The number of display lines needed to wrap a document line +int wxStyledTextCtrl::WrapCount(int line) { + return SendMsg(2235, line, 0); +} + // Set the fold level of a line. // This encodes an integer level along with flags indicating whether the // line is a header and whether it is effectively white space. @@ -1596,6 +1757,16 @@ int wxStyledTextCtrl::GetScrollWidth() { return SendMsg(2275, 0, 0); } +// Sets whether the maximum width line displayed is used to set scroll width. +void wxStyledTextCtrl::SetScrollWidthTracking(bool tracking) { + SendMsg(2516, tracking, 0); +} + +// Retrieve whether the scroll width tracks wide lines. +bool wxStyledTextCtrl::GetScrollWidthTracking() { + return SendMsg(2517, 0, 0) != 0; +} + // Measure the pixel width of some text in a particular style. // NUL terminated text argument. // Does not handle tab or control characters. @@ -1612,8 +1783,8 @@ void wxStyledTextCtrl::SetEndAtLastLine(bool endAtLastLine) { // Retrieve whether the maximum scroll position has the last // line at the bottom of the view. -int wxStyledTextCtrl::GetEndAtLastLine() { - return SendMsg(2278, 0, 0); +bool wxStyledTextCtrl::GetEndAtLastLine() { + return SendMsg(2278, 0, 0) != 0; } // Retrieve the height of a particular line of text in pixels. @@ -1859,6 +2030,11 @@ void wxStyledTextCtrl::DelWordRight() { SendMsg(2336, 0, 0); } +// Delete the word to the right of the caret, but not the trailing non-word characters. +void wxStyledTextCtrl::DelWordRightEnd() { + SendMsg(2518, 0, 0); +} + // Cut the line containing the caret. void wxStyledTextCtrl::LineCut() { SendMsg(2337, 0, 0); @@ -2233,21 +2409,43 @@ void wxStyledTextCtrl::SetHotspotActiveForeground(bool useSetting, const wxColou SendMsg(2410, useSetting, wxColourAsLong(fore)); } +// Get the fore colour for active hotspots. +wxColour wxStyledTextCtrl::GetHotspotActiveForeground() { + long c = SendMsg(2494, 0, 0); + return wxColourFromLong(c); +} + // Set a back colour for active hotspots. void wxStyledTextCtrl::SetHotspotActiveBackground(bool useSetting, const wxColour& back) { SendMsg(2411, useSetting, wxColourAsLong(back)); } +// Get the back colour for active hotspots. +wxColour wxStyledTextCtrl::GetHotspotActiveBackground() { + long c = SendMsg(2495, 0, 0); + return wxColourFromLong(c); +} + // Enable / Disable underlining active hotspots. void wxStyledTextCtrl::SetHotspotActiveUnderline(bool underline) { SendMsg(2412, underline, 0); } +// Get whether underlining for active hotspots. +bool wxStyledTextCtrl::GetHotspotActiveUnderline() { + return SendMsg(2496, 0, 0) != 0; +} + // Limit hotspots to single line so hotspots on two lines don't merge. void wxStyledTextCtrl::SetHotspotSingleLine(bool singleLine) { SendMsg(2421, singleLine, 0); } +// Get the HotspotSingleLine property +bool wxStyledTextCtrl::GetHotspotSingleLine() { + return SendMsg(2497, 0, 0) != 0; +} + // Move caret between paragraphs (delimited by empty lines). void wxStyledTextCtrl::ParaDown() { SendMsg(2413, 0, 0); @@ -2413,12 +2611,122 @@ void wxStyledTextCtrl::Allocate(int bytes) { SendMsg(2446, bytes, 0); } -// Find the position of a column on a line taking into account tabs and +// Find the position of a column on a line taking into account tabs and // multi-byte characters. If beyond end of line, return line end position. int wxStyledTextCtrl::FindColumn(int line, int column) { return SendMsg(2456, line, column); } +// Can the caret preferred x position only be changed by explicit movement commands? +bool wxStyledTextCtrl::GetCaretSticky() { + return SendMsg(2457, 0, 0) != 0; +} + +// Stop the caret preferred x position changing when the user types. +void wxStyledTextCtrl::SetCaretSticky(bool useCaretStickyBehaviour) { + SendMsg(2458, useCaretStickyBehaviour, 0); +} + +// Switch between sticky and non-sticky: meant to be bound to a key. +void wxStyledTextCtrl::ToggleCaretSticky() { + SendMsg(2459, 0, 0); +} + +// Enable/Disable convert-on-paste for line endings +void wxStyledTextCtrl::SetPasteConvertEndings(bool convert) { + SendMsg(2467, convert, 0); +} + +// Get convert-on-paste setting +bool wxStyledTextCtrl::GetPasteConvertEndings() { + return SendMsg(2468, 0, 0) != 0; +} + +// Duplicate the selection. If selection empty duplicate the line containing the caret. +void wxStyledTextCtrl::SelectionDuplicate() { + SendMsg(2469, 0, 0); +} + +// Set background alpha of the caret line. +void wxStyledTextCtrl::SetCaretLineBackAlpha(int alpha) { + SendMsg(2470, alpha, 0); +} + +// Get the background alpha of the caret line. +int wxStyledTextCtrl::GetCaretLineBackAlpha() { + return SendMsg(2471, 0, 0); +} + +// Set the style of the caret to be drawn. +void wxStyledTextCtrl::SetCaretStyle(int caretStyle) { + SendMsg(2512, caretStyle, 0); +} + +// Returns the current style of the caret. +int wxStyledTextCtrl::GetCaretStyle() { + return SendMsg(2513, 0, 0); +} + +// Set the indicator used for IndicatorFillRange and IndicatorClearRange +void wxStyledTextCtrl::SetIndicatorCurrent(int indicator) { + SendMsg(2500, indicator, 0); +} + +// Get the current indicator +int wxStyledTextCtrl::GetIndicatorCurrent() { + return SendMsg(2501, 0, 0); +} + +// Set the value used for IndicatorFillRange +void wxStyledTextCtrl::SetIndicatorValue(int value) { + SendMsg(2502, value, 0); +} + +// Get the current indicator vaue +int wxStyledTextCtrl::GetIndicatorValue() { + return SendMsg(2503, 0, 0); +} + +// Turn a indicator on over a range. +void wxStyledTextCtrl::IndicatorFillRange(int position, int fillLength) { + SendMsg(2504, position, fillLength); +} + +// Turn a indicator off over a range. +void wxStyledTextCtrl::IndicatorClearRange(int position, int clearLength) { + SendMsg(2505, position, clearLength); +} + +// Are any indicators present at position? +int wxStyledTextCtrl::IndicatorAllOnFor(int position) { + return SendMsg(2506, position, 0); +} + +// What value does a particular indicator have at at a position? +int wxStyledTextCtrl::IndicatorValueAt(int indicator, int position) { + return SendMsg(2507, indicator, position); +} + +// Where does a particular indicator start? +int wxStyledTextCtrl::IndicatorStart(int indicator, int position) { + return SendMsg(2508, indicator, position); +} + +// Where does a particular indicator end? +int wxStyledTextCtrl::IndicatorEnd(int indicator, int position) { + return SendMsg(2509, indicator, position); +} + +// Set number of entries in position cache +void wxStyledTextCtrl::SetPositionCacheSize(int size) { + SendMsg(2514, size, 0); +} + +// How many entries are allocated to the position cache? +int wxStyledTextCtrl::GetPositionCacheSize() { + return SendMsg(2515, 0, 0); +} + // Start notifying the container of all key presses and commands. void wxStyledTextCtrl::StartRecord() { SendMsg(3001, 0, 0); @@ -2459,6 +2767,44 @@ void wxStyledTextCtrl::SetLexerLanguage(const wxString& language) { SendMsg(4006, 0, (long)(const char*)wx2stc(language)); } +// Retrieve a 'property' value previously set with SetProperty. +wxString wxStyledTextCtrl::GetProperty(const wxString& key) { + int len = SendMsg(SCI_GETPROPERTY, (long)(const char*)wx2stc(key), 0); + if (!len) return wxEmptyString; + + wxMemoryBuffer mbuf(len+1); + char* buf = (char*)mbuf.GetWriteBuf(len+1); + SendMsg(4008, (long)(const char*)wx2stc(key), (long)buf); + mbuf.UngetWriteBuf(len); + mbuf.AppendByte(0); + return stc2wx(buf); +} + +// Retrieve a 'property' value previously set with SetProperty, +// with '$()' variable replacement on returned buffer. +wxString wxStyledTextCtrl::GetPropertyExpanded(const wxString& key) { + int len = SendMsg(SCI_GETPROPERTYEXPANDED, (long)(const char*)wx2stc(key), 0); + if (!len) return wxEmptyString; + + wxMemoryBuffer mbuf(len+1); + char* buf = (char*)mbuf.GetWriteBuf(len+1); + SendMsg(4009, (long)(const char*)wx2stc(key), (long)buf); + mbuf.UngetWriteBuf(len); + mbuf.AppendByte(0); + return stc2wx(buf); +} + +// Retrieve a 'property' value previously set with SetProperty, +// interpreted as an int AFTER any '$()' variable replacement. +int wxStyledTextCtrl::GetPropertyInt(const wxString& key) { + return SendMsg(4010, (long)(const char*)wx2stc(key), 0); +} + +// Retrieve the number of bits the current lexer needs for styling. +int wxStyledTextCtrl::GetStyleBitsNeeded() { + return SendMsg(4011, 0, 0); +} + // END of generated section //---------------------------------------------------------------------- @@ -2521,6 +2867,25 @@ void wxStyledTextCtrl::StyleSetSpec(int styleNum, const wxString& spec) { } +// Get the font of a style +wxFont wxStyledTextCtrl::StyleGetFont(int style) { + wxFont font; + font.SetPointSize(StyleGetSize(style)); + font.SetFaceName(StyleGetFaceName(style)); + if( StyleGetBold(style) ) + font.SetWeight(wxFONTWEIGHT_BOLD); + else + font.SetWeight(wxFONTWEIGHT_NORMAL); + + if( StyleGetItalic(style) ) + font.SetStyle(wxFONTSTYLE_ITALIC); + else + font.SetStyle(wxFONTSTYLE_NORMAL); + + return font; +} + + // Set style size, face, bold, italic, and underline attributes from // a wxFont's attributes. void wxStyledTextCtrl::StyleSetFont(int styleNum, wxFont& font) { @@ -2529,28 +2894,135 @@ void wxStyledTextCtrl::StyleSetFont(int styleNum, wxFont& font) { int x, y; GetTextExtent(wxT("X"), &x, &y, NULL, NULL, &font); #endif - int size = font.GetPointSize(); - wxString faceName = font.GetFaceName(); - bool bold = font.GetWeight() == wxBOLD; - bool italic = font.GetStyle() != wxNORMAL; - bool under = font.GetUnderlined(); + int size = font.GetPointSize(); + wxString faceName = font.GetFaceName(); + bool bold = font.GetWeight() == wxBOLD; + bool italic = font.GetStyle() != wxNORMAL; + bool under = font.GetUnderlined(); + wxFontEncoding encoding = font.GetEncoding(); - // TODO: add encoding/charset mapping - StyleSetFontAttr(styleNum, size, faceName, bold, italic, under); + StyleSetFontAttr(styleNum, size, faceName, bold, italic, under, encoding); } // Set all font style attributes at once. void wxStyledTextCtrl::StyleSetFontAttr(int styleNum, int size, const wxString& faceName, bool bold, bool italic, - bool underline) { + bool underline, + wxFontEncoding encoding) { StyleSetSize(styleNum, size); StyleSetFaceName(styleNum, faceName); StyleSetBold(styleNum, bold); StyleSetItalic(styleNum, italic); StyleSetUnderline(styleNum, underline); + StyleSetFontEncoding(styleNum, encoding); +} + + +// Set the character set of the font in a style. Converts the Scintilla +// character set values to a wxFontEncoding. +void wxStyledTextCtrl::StyleSetCharacterSet(int style, int characterSet) +{ + wxFontEncoding encoding; + + // Translate the Scintilla characterSet to a wxFontEncoding + switch (characterSet) { + default: + case wxSTC_CHARSET_ANSI: + case wxSTC_CHARSET_DEFAULT: + encoding = wxFONTENCODING_DEFAULT; + break; + + case wxSTC_CHARSET_BALTIC: + encoding = wxFONTENCODING_ISO8859_13; + break; + + case wxSTC_CHARSET_CHINESEBIG5: + encoding = wxFONTENCODING_CP950; + break; + + case wxSTC_CHARSET_EASTEUROPE: + encoding = wxFONTENCODING_ISO8859_2; + break; + + case wxSTC_CHARSET_GB2312: + encoding = wxFONTENCODING_CP936; + break; + + case wxSTC_CHARSET_GREEK: + encoding = wxFONTENCODING_ISO8859_7; + break; + + case wxSTC_CHARSET_HANGUL: + encoding = wxFONTENCODING_CP949; + break; + + case wxSTC_CHARSET_MAC: + encoding = wxFONTENCODING_DEFAULT; + break; + + case wxSTC_CHARSET_OEM: + encoding = wxFONTENCODING_DEFAULT; + break; + + case wxSTC_CHARSET_RUSSIAN: + encoding = wxFONTENCODING_KOI8; + break; + + case wxSTC_CHARSET_SHIFTJIS: + encoding = wxFONTENCODING_CP932; + break; + + case wxSTC_CHARSET_SYMBOL: + encoding = wxFONTENCODING_DEFAULT; + break; + + case wxSTC_CHARSET_TURKISH: + encoding = wxFONTENCODING_ISO8859_9; + break; + + case wxSTC_CHARSET_JOHAB: + encoding = wxFONTENCODING_DEFAULT; + break; + + case wxSTC_CHARSET_HEBREW: + encoding = wxFONTENCODING_ISO8859_8; + break; + + case wxSTC_CHARSET_ARABIC: + encoding = wxFONTENCODING_ISO8859_6; + break; + + case wxSTC_CHARSET_VIETNAMESE: + encoding = wxFONTENCODING_DEFAULT; + break; + + case wxSTC_CHARSET_THAI: + encoding = wxFONTENCODING_ISO8859_11; + break; + + case wxSTC_CHARSET_CYRILLIC: + encoding = wxFONTENCODING_ISO8859_5; + break; + + case wxSTC_CHARSET_8859_15: + encoding = wxFONTENCODING_ISO8859_15;; + break; + } + + // We just have Scintilla track the wxFontEncoding for us. It gets used + // in Font::Create in PlatWX.cpp. We add one to the value so that the + // effective wxFONENCODING_DEFAULT == SC_SHARSET_DEFAULT and so when + // Scintilla internally uses SC_CHARSET_DEFAULT we will translate it back + // to wxFONENCODING_DEFAULT in Font::Create. + SendMsg(SCI_STYLESETCHARACTERSET, style, encoding+1); +} - // TODO: add encoding/charset mapping + +// Set the font encoding to be used by a style. +void wxStyledTextCtrl::StyleSetFontEncoding(int style, wxFontEncoding encoding) +{ + SendMsg(SCI_STYLESETCHARACTERSET, style, encoding+1); } @@ -2728,7 +3200,7 @@ wxCharBuffer wxStyledTextCtrl::GetSelectedTextRaw() if (!len) { wxCharBuffer empty; return empty; - } + } wxCharBuffer buf(len); SendMsg(SCI_GETSELTEXT, 0, (long)buf.data()); @@ -2746,7 +3218,7 @@ wxCharBuffer wxStyledTextCtrl::GetTextRangeRaw(int startPos, int endPos) if (!len) { wxCharBuffer empty; return empty; - } + } wxCharBuffer buf(len); TextRange tr; @@ -2881,6 +3353,13 @@ void wxStyledTextCtrl::OnChar(wxKeyEvent& evt) { #endif bool skip = ((ctrl || alt) && ! (ctrl && alt)); +#if wxUSE_UNICODE + // apparently if we don't do this, Unicode keys pressed after non-char + // ASCII ones (e.g. Enter, Tab) are not taken into account (patch 1615989) + if (m_lastKeyDownConsumed && evt.GetUnicodeKey() > 255) + m_lastKeyDownConsumed = false; +#endif + if (!m_lastKeyDownConsumed && !skip) { #if wxUSE_UNICODE int key = evt.GetUnicodeKey(); @@ -2906,7 +3385,7 @@ void wxStyledTextCtrl::OnChar(wxKeyEvent& evt) { } #endif } - + evt.Skip(); } @@ -2979,12 +3458,7 @@ static void SetEventText(wxStyledTextEvent& evt, const char* text, size_t length) { if(!text) return; - // The unicode conversion MUST have a null byte to terminate the - // string so move it into a buffer first and give it one. - wxMemoryBuffer buf(length+1); - buf.AppendData((void*)text, length); - buf.AppendByte(0); - evt.SetText(stc2wx(buf)); + evt.SetText(stc2wx(text, length)); } @@ -3062,10 +3536,18 @@ void wxStyledTextCtrl::NotifyParent(SCNotification* _scn) { evt.SetEventType(wxEVT_STC_PAINTED); break; + case SCN_AUTOCSELECTION: + evt.SetEventType(wxEVT_STC_AUTOCOMP_SELECTION); + evt.SetListType(scn.listType); + SetEventText(evt, scn.text, strlen(scn.text)); + evt.SetPosition(scn.lParam); + break; + case SCN_USERLISTSELECTION: evt.SetEventType(wxEVT_STC_USERLISTSELECTION); evt.SetListType(scn.listType); SetEventText(evt, scn.text, strlen(scn.text)); + evt.SetPosition(scn.lParam); break; case SCN_URIDROPPED: @@ -3101,6 +3583,14 @@ void wxStyledTextCtrl::NotifyParent(SCNotification* _scn) { evt.SetEventType(wxEVT_STC_CALLTIP_CLICK); break; + case SCN_INDICATORCLICK: + evt.SetEventType(wxEVT_STC_INDICATOR_CLICK); + break; + + case SCN_INDICATORRELEASE: + evt.SetEventType(wxEVT_STC_INDICATOR_RELEASE); + break; + default: return; } @@ -3177,11 +3667,4 @@ wxStyledTextEvent::wxStyledTextEvent(const wxStyledTextEvent& event): //---------------------------------------------------------------------- //---------------------------------------------------------------------- - - - - - - - - +#endif // wxUSE_STC