Apply patch (plus some additional changes) upgrading Scintilla to version 2.03. Closes #11765, #11748, #11346

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@63792 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robin Dunn
2010-03-30 03:50:06 +00:00
parent a7d354c6d7
commit 9e96e16fe0
125 changed files with 17134 additions and 6735 deletions

View File

@@ -45,7 +45,6 @@
#include "wx/stc/private.h"
Point Point::FromLong(long lpoint) {
return Point(lpoint & 0xFFFF, lpoint >> 16);
}
@@ -142,7 +141,7 @@ void Palette::Allocate(Window &) {
//----------------------------------------------------------------------
Font::Font() {
id = 0;
fid = 0;
ascent = 0;
}
@@ -151,7 +150,7 @@ Font::~Font() {
void Font::Create(const char *faceName, int characterSet,
int size, bool bold, bool italic,
bool WXUNUSED(extraFontFlag)) {
int WXUNUSED(extraFontFlag)) {
Release();
// The minus one is done because since Scintilla uses SC_SHARSET_DEFAULT
@@ -171,14 +170,14 @@ void Font::Create(const char *faceName, int characterSet,
false,
stc2wx(faceName),
encoding);
id = font;
fid = font;
}
void Font::Release() {
if (id)
delete (wxFont*)id;
id = 0;
if (fid)
delete (wxFont*)fid;
fid = 0;
}
//----------------------------------------------------------------------
@@ -648,26 +647,26 @@ Window::~Window() {
}
void Window::Destroy() {
if (id) {
if (wid) {
Show(false);
GETWIN(id)->Destroy();
GETWIN(wid)->Destroy();
}
id = 0;
wid = 0;
}
bool Window::HasFocus() {
return wxWindow::FindFocus() == GETWIN(id);
return wxWindow::FindFocus() == GETWIN(wid);
}
PRectangle Window::GetPosition() {
if (! id) return PRectangle();
wxRect rc(GETWIN(id)->GetPosition(), GETWIN(id)->GetSize());
if (! wid) return PRectangle();
wxRect rc(GETWIN(wid)->GetPosition(), GETWIN(wid)->GetSize());
return PRectangleFromwxRect(rc);
}
void Window::SetPosition(PRectangle rc) {
wxRect r = wxRectFromPRectangle(rc);
GETWIN(id)->SetSize(r);
GETWIN(wid)->SetSize(r);
}
void Window::SetPositionRelative(PRectangle rc, Window) {
@@ -675,26 +674,26 @@ void Window::SetPositionRelative(PRectangle rc, Window) {
}
PRectangle Window::GetClientPosition() {
if (! id) return PRectangle();
wxSize sz = GETWIN(id)->GetClientSize();
if (! wid) return PRectangle();
wxSize sz = GETWIN(wid)->GetClientSize();
return PRectangle(0, 0, sz.x, sz.y);
}
void Window::Show(bool show) {
GETWIN(id)->Show(show);
GETWIN(wid)->Show(show);
}
void Window::InvalidateAll() {
GETWIN(id)->Refresh(false);
GETWIN(wid)->Refresh(false);
}
void Window::InvalidateRectangle(PRectangle rc) {
wxRect r = wxRectFromPRectangle(rc);
GETWIN(id)->Refresh(false, &r);
GETWIN(wid)->Refresh(false, &r);
}
void Window::SetFont(Font &font) {
GETWIN(id)->SetFont(*((wxFont*)font.GetID()));
GETWIN(wid)->SetFont(*((wxFont*)font.GetID()));
}
void Window::SetCursor(Cursor curs) {
@@ -733,21 +732,21 @@ void Window::SetCursor(Cursor curs) {
wxCursor wc = wxCursor(cursorId);
if(curs != cursorLast)
{
GETWIN(id)->SetCursor(wc);
GETWIN(wid)->SetCursor(wc);
cursorLast = curs;
}
}
void Window::SetTitle(const char *s) {
GETWIN(id)->SetLabel(stc2wx(s));
GETWIN(wid)->SetLabel(stc2wx(s));
}
// Returns rectangle of monitor pt is on
PRectangle Window::GetMonitorRect(Point pt) {
wxRect rect;
if (! id) return PRectangle();
if (! wid) return PRectangle();
#if wxUSE_DISPLAY
// Get the display the point is found on
int n = wxDisplay::GetFromPoint(wxPoint(pt.x, pt.y));
@@ -823,15 +822,6 @@ END_EVENT_TABLE()
#if wxUSE_POPUPWIN //-----------------------------------
#include "wx/popupwin.h"
//
// TODO: Refactor these two classes to have a common base (or a mix-in) to get
// rid of the code duplication. (Either that or convince somebody to
// implement wxPopupWindow for the Mac!!)
//
// In the meantime, be careful to duplicate any changes as needed...
//
// A popup window to place the wxSTCListBox upon
class wxSTCListBoxWin : public wxPopupWindow
{
@@ -841,11 +831,9 @@ private:
void* doubleClickActionData;
public:
wxSTCListBoxWin(wxWindow* parent, wxWindowID id, Point WXUNUSED(location)) :
wxPopupWindow(parent, wxBORDER_NONE)
wxPopupWindow(parent, wxBORDER_SIMPLE)
{
SetBackgroundColour(*wxBLACK); // for our simple border
lv = new wxSTCListBox(parent, id, wxPoint(-50,-50), wxDefaultSize,
wxLC_REPORT | wxLC_SINGLE_SEL | wxLC_NO_HEADER | wxBORDER_NONE);
lv->SetCursor(wxCursor(wxCURSOR_ARROW));
@@ -919,11 +907,9 @@ public:
}
void OnSize(wxSizeEvent& event) {
// resize the child
wxSize sz = GetSize();
sz.x -= 2;
sz.y -= 2;
lv->SetSize(1, 1, sz.x, sz.y);
// resize the child to fill the popup
wxSize sz = GetClientSize();
lv->SetSize(0, 0, sz.x, sz.y);
// reset the column widths
lv->SetColumnWidth(0, IconWidth()+4);
lv->SetColumnWidth(1, sz.x - 2 - lv->GetColumnWidth(0) -
@@ -1170,7 +1156,7 @@ ListBoxImpl::~ListBoxImpl() {
void ListBoxImpl::SetFont(Font &font) {
GETLB(id)->SetFont(*((wxFont*)font.GetID()));
GETLB(wid)->SetFont(*((wxFont*)font.GetID()));
}
@@ -1179,9 +1165,9 @@ void ListBoxImpl::Create(Window &parent, int ctrlID, Point location_, int lineHe
lineHeight = lineHeight_;
unicodeMode = unicodeMode_;
maxStrWidth = 0;
id = new wxSTCListBoxWin(GETWIN(parent.GetID()), ctrlID, location);
wid = new wxSTCListBoxWin(GETWIN(parent.GetID()), ctrlID, location);
if (imgList != NULL)
GETLB(id)->SetImageList(imgList, wxIMAGE_LIST_SMALL);
GETLB(wid)->SetImageList(imgList, wxIMAGE_LIST_SMALL);
}
@@ -1208,15 +1194,15 @@ PRectangle ListBoxImpl::GetDesiredRect() {
// give it a default if there are no lines, and/or add a bit more
if (maxw == 0) maxw = 100;
maxw += aveCharWidth * 3 +
GETLBW(id)->IconWidth() + wxSystemSettings::GetMetric(wxSYS_VSCROLL_X);
GETLBW(wid)->IconWidth() + wxSystemSettings::GetMetric(wxSYS_VSCROLL_X);
if (maxw > 350)
maxw = 350;
// estimate a desired height
int count = GETLB(id)->GetItemCount();
int count = GETLB(wid)->GetItemCount();
if (count) {
wxRect rect;
GETLB(id)->GetItemRect(0, rect);
GETLB(wid)->GetItemRect(0, rect);
maxh = count * rect.GetHeight();
if (maxh > 140) // TODO: Use desiredVisibleRows??
maxh = 140;
@@ -1238,12 +1224,12 @@ PRectangle ListBoxImpl::GetDesiredRect() {
int ListBoxImpl::CaretFromEdge() {
return 4 + GETLBW(id)->IconWidth();
return 4 + GETLBW(wid)->IconWidth();
}
void ListBoxImpl::Clear() {
GETLB(id)->DeleteAllItems();
GETLB(wid)->DeleteAllItems();
}
@@ -1252,20 +1238,20 @@ void ListBoxImpl::Append(char *s, int type) {
}
void ListBoxImpl::Append(const wxString& text, int type) {
long count = GETLB(id)->GetItemCount();
long itemID = GETLB(id)->InsertItem(count, wxEmptyString);
long count = GETLB(wid)->GetItemCount();
long itemID = GETLB(wid)->InsertItem(count, wxEmptyString);
long idx = -1;
GETLB(id)->SetItem(itemID, 1, text);
GETLB(wid)->SetItem(itemID, 1, text);
maxStrWidth = wxMax(maxStrWidth, text.length());
if (type != -1) {
wxCHECK_RET(imgTypeMap, wxT("Unexpected NULL imgTypeMap"));
idx = imgTypeMap->Item(type);
}
GETLB(id)->SetItemImage(itemID, idx, idx);
GETLB(wid)->SetItemImage(itemID, idx, idx);
}
void ListBoxImpl::SetList(const char* list, char separator, char typesep) {
GETLB(id)->Freeze();
GETLB(wid)->Freeze();
Clear();
wxStringTokenizer tkzr(stc2wx(list), (wxChar)separator);
while ( tkzr.HasMoreTokens() ) {
@@ -1278,12 +1264,12 @@ void ListBoxImpl::SetList(const char* list, char separator, char typesep) {
}
Append(token, (int)type);
}
GETLB(id)->Thaw();
GETLB(wid)->Thaw();
}
int ListBoxImpl::Length() {
return GETLB(id)->GetItemCount();
return GETLB(wid)->GetItemCount();
}
@@ -1293,13 +1279,13 @@ void ListBoxImpl::Select(int n) {
n = 0;
select = false;
}
GETLB(id)->EnsureVisible(n);
GETLB(id)->Select(n, select);
GETLB(wid)->EnsureVisible(n);
GETLB(wid)->Select(n, select);
}
int ListBoxImpl::GetSelection() {
return GETLB(id)->GetFirstSelected();
return GETLB(wid)->GetFirstSelected();
}
@@ -1314,7 +1300,7 @@ void ListBoxImpl::GetValue(int n, char *value, int len) {
item.SetId(n);
item.SetColumn(1);
item.SetMask(wxLIST_MASK_TEXT);
GETLB(id)->GetItem(item);
GETLB(wid)->GetItem(item);
strncpy(value, wx2stc(item.GetText()), len);
value[len-1] = '\0';
}
@@ -1351,13 +1337,13 @@ void ListBoxImpl::ClearRegisteredImages() {
delete imgTypeMap;
imgTypeMap = NULL;
}
if (id)
GETLB(id)->SetImageList(NULL, wxIMAGE_LIST_SMALL);
if (wid)
GETLB(wid)->SetImageList(NULL, wxIMAGE_LIST_SMALL);
}
void ListBoxImpl::SetDoubleClickAction(CallBackAction action, void *data) {
GETLBW(id)->SetDoubleClickAction(action, data);
GETLBW(wid)->SetDoubleClickAction(action, data);
}
@@ -1373,22 +1359,22 @@ ListBox *ListBox::Allocate() {
//----------------------------------------------------------------------
Menu::Menu() : id(0) {
Menu::Menu() : mid(0) {
}
void Menu::CreatePopUp() {
Destroy();
id = new wxMenu();
mid = new wxMenu();
}
void Menu::Destroy() {
if (id)
delete (wxMenu*)id;
id = 0;
if (mid)
delete (wxMenu*)mid;
mid = 0;
}
void Menu::Show(Point pt, Window &w) {
GETWIN(w.GetID())->PopupMenu((wxMenu*)id, pt.x - 4, pt.y);
GETWIN(w.GetID())->PopupMenu((wxMenu*)mid, pt.x - 4, pt.y);
Destroy();
}