X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/be698f50301674b969cacecc683ffac5ba6e2e16..ecd20d4a916884895dcd8873a9f1156e34f4ac89:/src/stc/stc.cpp.in diff --git a/src/stc/stc.cpp.in b/src/stc/stc.cpp.in index 11f590c9a4..702062aa61 100644 --- a/src/stc/stc.cpp.in +++ b/src/stc/stc.cpp.in @@ -46,19 +46,28 @@ static long wxColourAsLong(const wxColour& co) { static wxColour wxColourFromLong(long c) { wxColour clr; - clr.Set(c & 0xff, (c >> 8) & 0xff, (c >> 16) & 0xff); + clr.Set((unsigned char)(c & 0xff), + (unsigned char)((c >> 8) & 0xff), + (unsigned char)((c >> 16) & 0xff)); return clr; } static wxColour wxColourFromSpec(const wxString& spec) { - // spec should be "#RRGGBB" - long red, green, blue; - red = green = blue = 0; - spec.Mid(1,2).ToLong(&red, 16); - spec.Mid(3,2).ToLong(&green, 16); - spec.Mid(5,2).ToLong(&blue, 16); - return wxColour(red, green, blue); + // spec should be a colour name or "#RRGGBB" + if (spec.GetChar(0) == wxT('#')) { + + long red, green, blue; + red = green = blue = 0; + spec.Mid(1,2).ToLong(&red, 16); + spec.Mid(3,2).ToLong(&green, 16); + spec.Mid(5,2).ToLong(&blue, 16); + return wxColour((unsigned char)red, + (unsigned char)green, + (unsigned char)blue); + } + else + return wxColour(spec); } //---------------------------------------------------------------------- @@ -115,7 +124,7 @@ BEGIN_EVENT_TABLE(wxStyledTextCtrl, wxControl) EVT_SYS_COLOUR_CHANGED (wxStyledTextCtrl::OnSysColourChanged) EVT_ERASE_BACKGROUND (wxStyledTextCtrl::OnEraseBackground) EVT_MENU_RANGE (10, 16, wxStyledTextCtrl::OnMenu) - EVT_LISTBOX_DCLICK (-1, wxStyledTextCtrl::OnListBox) + EVT_LISTBOX_DCLICK (wxID_ANY, wxStyledTextCtrl::OnListBox) END_EVENT_TABLE() @@ -161,13 +170,15 @@ void wxStyledTextCtrl::Create(wxWindow *parent, #endif m_swx = new ScintillaWX(this); m_stopWatch.Start(); - m_lastKeyDownConsumed = FALSE; + m_lastKeyDownConsumed = false; m_vScrollBar = NULL; m_hScrollBar = NULL; #if wxUSE_UNICODE // Put Scintilla into unicode (UTF-8) mode SetCodePage(wxSTC_CP_UTF8); #endif + + SetBestFittingSize(size); } @@ -183,7 +194,26 @@ long wxStyledTextCtrl::SendMsg(int msg, long wp, long lp) { return m_swx->WndProc(msg, wp, lp); } +//---------------------------------------------------------------------- +// Set the vertical scrollbar to use instead of the ont that's built-in. +void wxStyledTextCtrl::SetVScrollBar(wxScrollBar* bar) { + m_vScrollBar = bar; + if (bar != NULL) { + // ensure that the built-in scrollbar is not visible + SetScrollbar(wxVERTICAL, 0, 0, 0); + } +} + + +// Set the horizontal scrollbar to use instead of the ont that's built-in. +void wxStyledTextCtrl::SetHScrollBar(wxScrollBar* bar) { + m_hScrollBar = bar; + if (bar != NULL) { + // ensure that the built-in scrollbar is not visible + SetScrollbar(wxHORIZONTAL, 0, 0, 0); + } +} //---------------------------------------------------------------------- // BEGIN generated section. The following code is automatically generated @@ -208,8 +238,8 @@ int wxStyledTextCtrl::GetCurrentLine() { // // bold turns on bold // italic turns on italics -// fore:#RRGGBB sets the foreground colour -// back:#RRGGBB sets the background colour +// fore:[name or #RRGGBB] sets the foreground colour +// back:[name or #RRGGBB] sets the background colour // face:[facename] sets the font face name to use // size:[num] sets the font size in points // eol turns on eol filling @@ -333,7 +363,7 @@ bool wxStyledTextCtrl::SaveFile(const wxString& filename) wxFile file(filename, wxFile::write); if (!file.IsOpened()) - return FALSE; + return false; bool success = file.Write(GetText(), *wxConvCurrent); @@ -351,13 +381,15 @@ bool wxStyledTextCtrl::LoadFile(const wxString& filename) if (file.IsOpened()) { wxString contents; - off_t len = file.Length(); + // get the file size (assume it is not huge file...) + ssize_t len = (ssize_t)file.Length(); + if (len > 0) { #if wxUSE_UNICODE wxMemoryBuffer buffer(len+1); success = (file.Read(buffer.GetData(), len) == len); - if (success) { + if (success) { ((char*)buffer.GetData())[len] = 0; contents = wxString(buffer, *wxConvCurrent, len); } @@ -368,7 +400,12 @@ bool wxStyledTextCtrl::LoadFile(const wxString& filename) #endif } else - success = true; // empty file is ok + { + if (len == 0) + success = true; // empty file is ok + else + success = false; // len == wxInvalidOffset + } if (success) { @@ -383,12 +420,12 @@ bool wxStyledTextCtrl::LoadFile(const wxString& filename) #if wxUSE_DRAG_AND_DROP -wxDragResult wxStyledTextCtrl::DoDragOver(wxCoord x, wxCoord y, wxDragResult def) { - return m_swx->DoDragOver(x, y, def); -} +wxDragResult wxStyledTextCtrl::DoDragOver(wxCoord x, wxCoord y, wxDragResult def) { + return m_swx->DoDragOver(x, y, def); +} -bool wxStyledTextCtrl::DoDropText(long x, long y, const wxString& data) { +bool wxStyledTextCtrl::DoDropText(long x, long y, const wxString& data) { return m_swx->DoDropText(x, y, data); } #endif @@ -494,7 +531,14 @@ void wxStyledTextCtrl::OnChar(wxKeyEvent& evt) { // to let the char through in that case, otherwise if only ctrl or only // alt let's skip it. bool ctrl = evt.ControlDown(); +#ifdef __WXMAC__ + // On the Mac the Alt key is just a modifier key (like Shift) so we need + // to allow the char events to be processed when Alt is pressed. + // TODO: Should we check MetaDown instead in this case? + bool alt = false; +#else bool alt = evt.AltDown(); +#endif bool skip = ((ctrl || alt) && ! (ctrl && alt)); int key = evt.GetKeyCode(); @@ -566,6 +610,14 @@ void wxStyledTextCtrl::OnIdle(wxIdleEvent& evt) { } +wxSize wxStyledTextCtrl::DoGetBestSize() const +{ + // What would be the best size for a wxSTC? + // Just give a reasonable minimum until something else can be figured out. + return wxSize(200,100); +} + + //---------------------------------------------------------------------- // Turn notifications from Scintilla into events @@ -734,7 +786,7 @@ wxStyledTextEvent::wxStyledTextEvent(wxEventType commandType, int id) m_listType = 0; m_x = 0; m_y = 0; - m_dragAllowMove = FALSE; + m_dragAllowMove = false; #if wxUSE_DRAG_AND_DROP m_dragResult = wxDragNone; #endif