Updated Scintilla to 1.52 (on the trunk this time too)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@20296 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robin Dunn
2003-04-19 20:00:02 +00:00
parent ce8897bbff
commit 9e730a7876
160 changed files with 13340 additions and 4404 deletions

View File

@@ -8,7 +8,10 @@
#include <wx/wx.h>
#include <wx/encconv.h>
#include <wx/listctrl.h>
#include <wx/mstream.h>
#include <wx/image.h>
#include <wx/imaglist.h>
#include "Platform.h"
#include "PlatWX.h"
@@ -189,9 +192,6 @@ void Font::Create(const char *faceName, int characterSet, int size, bool bold, b
false,
stc2wx(faceName),
encoding);
#ifdef __WXMAC__
((wxFont*)id)->SetNoAntiAliasing( true ) ;
#endif
}
@@ -216,42 +216,44 @@ public:
SurfaceImpl();
~SurfaceImpl();
void Init();
void Init(SurfaceID sid);
void InitPixMap(int width, int height, Surface *surface_);
virtual void Init(WindowID wid);
virtual void Init(SurfaceID sid, WindowID wid);
virtual void InitPixMap(int width, int height, Surface *surface_, WindowID wid);
void Release();
bool Initialised();
void PenColour(ColourAllocated fore);
int LogPixelsY();
int DeviceHeightFont(int points);
void MoveTo(int x_, int y_);
void LineTo(int x_, int y_);
void Polygon(Point *pts, int npts, ColourAllocated fore, ColourAllocated back);
void RectangleDraw(PRectangle rc, ColourAllocated fore, ColourAllocated back);
void FillRectangle(PRectangle rc, ColourAllocated back);
void FillRectangle(PRectangle rc, Surface &surfacePattern);
void RoundedRectangle(PRectangle rc, ColourAllocated fore, ColourAllocated back);
void Ellipse(PRectangle rc, ColourAllocated fore, ColourAllocated back);
void Copy(PRectangle rc, Point from, Surface &surfaceSource);
virtual void Release();
virtual bool Initialised();
virtual void PenColour(ColourAllocated fore);
virtual int LogPixelsY();
virtual int DeviceHeightFont(int points);
virtual void MoveTo(int x_, int y_);
virtual void LineTo(int x_, int y_);
virtual void Polygon(Point *pts, int npts, ColourAllocated fore, ColourAllocated back);
virtual void RectangleDraw(PRectangle rc, ColourAllocated fore, ColourAllocated back);
virtual void FillRectangle(PRectangle rc, ColourAllocated back);
virtual void FillRectangle(PRectangle rc, Surface &surfacePattern);
virtual void RoundedRectangle(PRectangle rc, ColourAllocated fore, ColourAllocated back);
virtual void Ellipse(PRectangle rc, ColourAllocated fore, ColourAllocated back);
virtual void Copy(PRectangle rc, Point from, Surface &surfaceSource);
void DrawTextNoClip(PRectangle rc, Font &font_, int ybase, const char *s, int len, ColourAllocated fore, ColourAllocated back);
void DrawTextClipped(PRectangle rc, Font &font_, int ybase, const char *s, int len, ColourAllocated fore, ColourAllocated back);
void MeasureWidths(Font &font_, const char *s, int len, int *positions);
int WidthText(Font &font_, const char *s, int len);
int WidthChar(Font &font_, char ch);
int Ascent(Font &font_);
int Descent(Font &font_);
int InternalLeading(Font &font_);
int ExternalLeading(Font &font_);
int Height(Font &font_);
int AverageCharWidth(Font &font_);
virtual void DrawTextNoClip(PRectangle rc, Font &font_, int ybase, const char *s, int len, ColourAllocated fore, ColourAllocated back);
virtual void DrawTextClipped(PRectangle rc, Font &font_, int ybase, const char *s, int len, ColourAllocated fore, ColourAllocated back);
virtual void DrawTextTransparent(PRectangle rc, Font &font_, int ybase, const char *s, int len, ColourAllocated fore);
virtual void MeasureWidths(Font &font_, const char *s, int len, int *positions);
virtual int WidthText(Font &font_, const char *s, int len);
virtual int WidthChar(Font &font_, char ch);
virtual int Ascent(Font &font_);
virtual int Descent(Font &font_);
virtual int InternalLeading(Font &font_);
virtual int ExternalLeading(Font &font_);
virtual int Height(Font &font_);
virtual int AverageCharWidth(Font &font_);
int SetPalette(Palette *pal, bool inBackGround);
void SetClip(PRectangle rc);
void FlushCachedState();
virtual int SetPalette(Palette *pal, bool inBackGround);
virtual void SetClip(PRectangle rc);
virtual void FlushCachedState();
void SetUnicodeMode(bool unicodeMode_);
virtual void SetUnicodeMode(bool unicodeMode_);
virtual void SetDBCSMode(int codePage);
void BrushColour(ColourAllocated back);
void SetFont(Font &font_);
@@ -268,6 +270,35 @@ SurfaceImpl::~SurfaceImpl() {
Release();
}
void SurfaceImpl::Init(WindowID wid) {
#if 0
Release();
hdc = new wxMemoryDC();
hdcOwned = true;
#else
// On Mac and GTK the DC is not really valid until it has a bitmap
// selected into it. So instead of just creating the DC with no bitmap,
// go ahead and give it one.
InitPixMap(1,1,NULL,wid);
#endif
}
void SurfaceImpl::Init(SurfaceID hdc_, WindowID) {
Release();
hdc = (wxDC*)hdc_;
}
void SurfaceImpl::InitPixMap(int width, int height, Surface *surface_, WindowID) {
Release();
hdc = new wxMemoryDC();
hdcOwned = true;
if (width < 1) width = 1;
if (height < 1) height = 1;
bitmap = new wxBitmap(width, height);
((wxMemoryDC*)hdc)->SelectObject(*bitmap);
}
void SurfaceImpl::Release() {
if (bitmap) {
((wxMemoryDC*)hdc)->SelectObject(wxNullBitmap);
@@ -286,33 +317,6 @@ bool SurfaceImpl::Initialised() {
return hdc != 0;
}
void SurfaceImpl::Init() {
#if 0
Release();
hdc = new wxMemoryDC();
hdcOwned = true;
#else
// On Mac and GTK the DC is not really valid until it has a bitmap
// selected into it. So instead of just creating the DC with no bitmap,
// go ahead and give it one.
InitPixMap(1,1,NULL);
#endif
}
void SurfaceImpl::Init(SurfaceID hdc_) {
Release();
hdc = (wxDC*)hdc_;
}
void SurfaceImpl::InitPixMap(int width, int height, Surface *surface_) {
Release();
hdc = new wxMemoryDC();
hdcOwned = true;
if (width < 1) width = 1;
if (height < 1) height = 1;
bitmap = new wxBitmap(width, height);
((wxMemoryDC*)hdc)->SelectObject(*bitmap);
}
void SurfaceImpl::PenColour(ColourAllocated fore) {
hdc->SetPen(wxPen(wxColourFromCA(fore), 1, wxSOLID));
@@ -401,7 +405,7 @@ void SurfaceImpl::DrawTextNoClip(PRectangle rc, Font &font, int ybase,
SetFont(font);
hdc->SetTextForeground(wxColourFromCA(fore));
hdc->SetTextBackground(wxColourFromCA(back));
FillRectangle(rc, back);
//FillRectangle(rc, back);
// ybase is where the baseline should be, but wxWin uses the upper left
// corner, so I need to calculate the real position for the text...
@@ -414,28 +418,36 @@ void SurfaceImpl::DrawTextClipped(PRectangle rc, Font &font, int ybase,
SetFont(font);
hdc->SetTextForeground(wxColourFromCA(fore));
hdc->SetTextBackground(wxColourFromCA(back));
FillRectangle(rc, back);
//FillRectangle(rc, back);
hdc->SetClippingRegion(wxRectFromPRectangle(rc));
// see comments above
hdc->DrawText(stc2wx(s, len), rc.left, ybase - font.ascent);
hdc->DestroyClippingRegion();
}
int SurfaceImpl::WidthText(Font &font, const char *s, int len) {
SetFont(font);
int w;
int h;
hdc->GetTextExtent(stc2wx(s, len), &w, &h);
return w;
void SurfaceImpl::DrawTextTransparent(PRectangle rc, Font &font, int ybase,
const char *s, int len,
ColourAllocated fore) {
SetFont(font);
hdc->SetTextForeground(wxColourFromCA(fore));
hdc->SetBackgroundMode(wxTRANSPARENT);
// ybase is where the baseline should be, but wxWin uses the upper left
// corner, so I need to calculate the real position for the text...
hdc->DrawText(stc2wx(s, len), rc.left, ybase - font.ascent);
hdc->SetBackgroundMode(wxSOLID);
}
void SurfaceImpl::MeasureWidths(Font &font, const char *s, int len, int *positions) {
wxString str = stc2wx(s, len);
SetFont(font);
#ifndef __WXMAC__
// Calculate the position of each character based on the widths of
// the previous characters
int* tpos = new int[len];
@@ -447,9 +459,26 @@ void SurfaceImpl::MeasureWidths(Font &font, const char *s, int len, int *positio
totalWidth += w;
tpos[i] = totalWidth;
}
#else
// Instead of a running total, remeasure from the begining of the
// text for each character's position. This is because with AA fonts
// on OS X widths can be fractions of pixels wide when more than one
// are drawn together, so the sum of all character widths is not necessarily
// (and probably not) the same as the whole string width.
int* tpos = new int[len];
size_t i;
for (i=0; i<str.Length(); i++) {
int w, h;
hdc->GetTextExtent(str.Left(i+1), &w, &h);
tpos[i] = w;
}
#endif
#if wxUSE_UNICODE
// Map the widths for UCS-2 characters back to the UTF-8 input string
// NOTE: I don't think this is right for when sizeof(wxChar) > 2, ie wxGTK2
// so figure it out and fix it!
i = 0;
size_t ui = 0;
while (i < len) {
@@ -475,6 +504,16 @@ void SurfaceImpl::MeasureWidths(Font &font, const char *s, int len, int *positio
}
int SurfaceImpl::WidthText(Font &font, const char *s, int len) {
SetFont(font);
int w;
int h;
hdc->GetTextExtent(stc2wx(s, len), &w, &h);
return w;
}
int SurfaceImpl::WidthChar(Font &font, char ch) {
SetFont(font);
int w;
@@ -545,6 +584,11 @@ void SurfaceImpl::SetUnicodeMode(bool unicodeMode_) {
#endif
}
void SurfaceImpl::SetDBCSMode(int codePage) {
// dbcsMode = codePage == SC_CP_DBCS;
}
Surface *Surface::Allocate() {
return new SurfaceImpl;
}
@@ -559,8 +603,10 @@ Window::~Window() {
}
void Window::Destroy() {
if (id)
if (id) {
Show(FALSE);
GETWIN(id)->Destroy();
}
id = 0;
}
@@ -569,6 +615,7 @@ bool Window::HasFocus() {
}
PRectangle Window::GetPosition() {
if (! id) return PRectangle();
wxRect rc(GETWIN(id)->GetPosition(), GETWIN(id)->GetSize());
return PRectangleFromwxRect(rc);
}
@@ -583,6 +630,7 @@ void Window::SetPositionRelative(PRectangle rc, Window) {
}
PRectangle Window::GetClientPosition() {
if (! id) return PRectangle();
wxSize sz = GETWIN(id)->GetClientSize();
return PRectangle(0, 0, sz.x, sz.y);
}
@@ -631,6 +679,8 @@ void Window::SetCursor(Cursor curs) {
case cursorReverseArrow:
cursorId = wxCURSOR_RIGHT_ARROW;
break;
case cursorHand:
cursorId = wxCURSOR_HAND;
default:
cursorId = wxCURSOR_ARROW;
break;
@@ -653,199 +703,347 @@ void Window::SetTitle(const char *s) {
// Helper classes for ListBox
#if 1 // defined(__WXMAC__)
class wxSTCListBoxWin : public wxListBox {
// This is a simple subclass of wxLIstView that just resets focus to the
// parent when it gets it.
class wxSTCListBox : public wxListView {
public:
wxSTCListBoxWin(wxWindow* parent, wxWindowID id)
: wxListBox(parent, id, wxDefaultPosition, wxSize(0,0),
0, NULL, wxLB_SINGLE | wxSIMPLE_BORDER) {
SetCursor(wxCursor(wxCURSOR_ARROW));
Hide();
}
wxSTCListBox(wxWindow* parent, wxWindowID id,
const wxPoint& pos, const wxSize& size,
long style)
: wxListView(parent, id, pos, size, style)
{}
void OnFocus(wxFocusEvent& event) {
GetParent()->SetFocus();
event.Skip();
}
wxListBox* GetLB() { return this; }
private:
DECLARE_EVENT_TABLE()
};
BEGIN_EVENT_TABLE(wxSTCListBoxWin, wxListBox)
EVT_SET_FOCUS(wxSTCListBoxWin::OnFocus)
BEGIN_EVENT_TABLE(wxSTCListBox, wxListView)
EVT_SET_FOCUS( wxSTCListBox::OnFocus)
END_EVENT_TABLE()
#else
class wxSTCListBox : public wxListBox {
// A window to place the wxSTCListBox upon
class wxSTCListBoxWin : public wxWindow {
private:
wxListView* lv;
CallBackAction doubleClickAction;
void* doubleClickActionData;
public:
wxSTCListBox(wxWindow* parent, wxWindowID id)
: wxListBox(parent, id, wxDefaultPosition, wxDefaultSize,
0, NULL, wxLB_SINGLE | wxSIMPLE_BORDER | wxWANTS_CHARS)
{}
wxSTCListBoxWin(wxWindow* parent, wxWindowID id) :
wxWindow(parent, id, wxDefaultPosition, wxSize(0,0), wxNO_BORDER )
{
void OnKeyDown(wxKeyEvent& event) {
// Give the key events to the STC. It will then update
// the listbox as needed.
GetGrandParent()->GetEventHandler()->ProcessEvent(event);
SetBackgroundColour(*wxBLACK);
lv = new wxSTCListBox(this, id, wxDefaultPosition, wxDefaultSize,
wxLC_REPORT | wxLC_SINGLE_SEL | wxLC_NO_HEADER | wxNO_BORDER);
lv->SetCursor(wxCursor(wxCURSOR_ARROW));
lv->InsertColumn(0, wxEmptyString);
lv->InsertColumn(1, wxEmptyString);
Hide();
}
private:
DECLARE_EVENT_TABLE()
};
BEGIN_EVENT_TABLE(wxSTCListBox, wxListBox)
EVT_KEY_DOWN(wxSTCListBox::OnKeyDown)
EVT_CHAR(wxSTCListBox::OnKeyDown)
END_EVENT_TABLE()
int IconWidth() {
wxImageList* il = lv->GetImageList(wxIMAGE_LIST_SMALL);
if (il != NULL) {
int w, h;
il->GetSize(0, w, h);
return w;
}
return 0;
}
void SetDoubleClickAction(CallBackAction action, void *data) {
doubleClickAction = action;
doubleClickActionData = data;
}
#undef wxSTC_USE_POPUP
#define wxSTC_USE_POPUP 0 // wxPopupWindow just doesn't work well in this case...
// A window to place the listbox upon. If wxPopupWindow is supported then
// that will be used so the listbox can extend beyond the client area of the
// wxSTC if needed.
#if wxUSE_POPUPWIN && wxSTC_USE_POPUP
#include <wx/popupwin.h>
#define wxSTCListBoxWinBase wxPopupWindow
#define param2 wxBORDER_NONE // popup's 2nd param is flags
#else
#define wxSTCListBoxWinBase wxWindow
#define param2 -1 // wxWindow's 2nd param is ID
#endif
class wxSTCListBoxWin : public wxSTCListBoxWinBase {
public:
wxSTCListBoxWin(wxWindow* parent, wxWindowID id)
: wxSTCListBoxWinBase(parent, param2) {
lb = new wxSTCListBox(this, id);
lb->SetCursor(wxCursor(wxCURSOR_ARROW));
lb->SetFocus();
}
void OnFocus(wxFocusEvent& event) {
GetParent()->SetFocus();
event.Skip();
}
void OnSize(wxSizeEvent& event) {
lb->SetSize(GetSize());
// resize the child, leaving a 1 pixel border
wxSize sz = GetClientSize();
lv->SetSize(1, 1, sz.x-2, sz.y-2);
// reset the column widths
lv->SetColumnWidth(0, IconWidth()+4);
lv->SetColumnWidth(1, sz.x - 2 - lv->GetColumnWidth(0) -
wxSystemSettings::GetMetric(wxSYS_VSCROLL_X));
event.Skip();
}
wxListBox* GetLB() { return lb; }
#if wxUSE_POPUPWIN && wxSTC_USE_POPUP
virtual void DoSetSize(int x, int y,
int width, int height,
int sizeFlags = wxSIZE_AUTO) {
if (x != -1)
GetParent()->ClientToScreen(&x, NULL);
if (y != -1)
GetParent()->ClientToScreen(NULL, &y);
wxSTCListBoxWinBase::DoSetSize(x, y, width, height, sizeFlags);
void OnActivate(wxListEvent& event) {
doubleClickAction(doubleClickActionData);
}
#endif
wxListView* GetLB() { return lv; }
private:
wxSTCListBox* lb;
DECLARE_EVENT_TABLE()
};
BEGIN_EVENT_TABLE(wxSTCListBoxWin, wxSTCListBoxWinBase)
EVT_SIZE(wxSTCListBoxWin::OnSize)
END_EVENT_TABLE()
#endif
inline wxListBox* GETLB(WindowID win) {
return (((wxSTCListBoxWin*)win)->GetLB());
BEGIN_EVENT_TABLE(wxSTCListBoxWin, wxWindow)
EVT_SET_FOCUS ( wxSTCListBoxWin::OnFocus)
EVT_SIZE ( wxSTCListBoxWin::OnSize)
EVT_LIST_ITEM_ACTIVATED(-1, wxSTCListBoxWin::OnActivate)
END_EVENT_TABLE()
inline wxSTCListBoxWin* GETLBW(WindowID win) {
return ((wxSTCListBoxWin*)win);
}
inline wxListView* GETLB(WindowID win) {
return GETLBW(win)->GetLB();
}
//----------------------------------------------------------------------
class ListBoxImpl : public ListBox {
private:
int lineHeight;
bool unicodeMode;
int desiredVisibleRows;
int aveCharWidth;
int maxStrWidth;
wxImageList* imgList;
wxArrayInt* imgTypeMap;
public:
ListBoxImpl();
~ListBoxImpl();
virtual void SetFont(Font &font);
virtual void Create(Window &parent, int ctrlID, int lineHeight_, bool unicodeMode_);
virtual void SetAverageCharWidth(int width);
virtual void SetVisibleRows(int rows);
virtual PRectangle GetDesiredRect();
virtual int CaretFromEdge();
virtual void Clear();
virtual void Append(char *s, int type = -1);
virtual int Length();
virtual void Select(int n);
virtual int GetSelection();
virtual int Find(const char *prefix);
virtual void GetValue(int n, char *value, int len);
virtual void Sort();
virtual void RegisterImage(int type, const char *xpm_data);
virtual void ClearRegisteredImages();
virtual void SetDoubleClickAction(CallBackAction, void *);
};
ListBoxImpl::ListBoxImpl()
: lineHeight(10), unicodeMode(false),
desiredVisibleRows(5), aveCharWidth(8), maxStrWidth(0),
imgList(NULL), imgTypeMap(NULL)
{
}
ListBoxImpl::~ListBoxImpl() {
if (imgList) {
delete imgList;
imgList = NULL;
}
if (imgTypeMap) {
delete imgTypeMap;
imgTypeMap = NULL;
}
}
void ListBoxImpl::SetFont(Font &font) {
GETLB(id)->SetFont(*((wxFont*)font.GetID()));
}
void ListBoxImpl::Create(Window &parent, int ctrlID, int lineHeight_, bool unicodeMode_) {
lineHeight = lineHeight_;
unicodeMode = unicodeMode_;
maxStrWidth = 0;
id = new wxSTCListBoxWin(GETWIN(parent.GetID()), ctrlID);
if (imgList != NULL)
GETLB(id)->SetImageList(imgList, wxIMAGE_LIST_SMALL);
}
void ListBoxImpl::SetAverageCharWidth(int width) {
aveCharWidth = width;
}
void ListBoxImpl::SetVisibleRows(int rows) {
desiredVisibleRows = rows;
}
PRectangle ListBoxImpl::GetDesiredRect() {
// wxListCtrl doesn't have a DoGetBestSize, so instead we kept track of
// the max size in Append and calculate it here...
int maxw = maxStrWidth;
int maxh = 0;
// 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);
if (maxw > 350)
maxw = 350;
// estimate a desired height
int count = GETLB(id)->GetItemCount();
if (count) {
wxRect rect;
GETLB(id)->GetItemRect(0, rect);
maxh = count * rect.GetHeight();
if (maxh > 140) // TODO: Use desiredVisibleRows??
maxh = 140;
// Try to make the size an exact multiple of some number of lines
int lines = maxh / rect.GetHeight();
maxh = (lines + 1) * rect.GetHeight() + 2;
}
else
maxh = 100;
PRectangle rc;
rc.top = 0;
rc.left = 0;
rc.right = maxw;
rc.bottom = maxh;
return rc;
}
int ListBoxImpl::CaretFromEdge() {
return 4 + GETLBW(id)->IconWidth();
}
void ListBoxImpl::Clear() {
GETLB(id)->DeleteAllItems();
}
void ListBoxImpl::Append(char *s, int type) {
wxString text = stc2wx(s);
long count = GETLB(id)->GetItemCount();
long itemID = GETLB(id)->InsertItem(count, wxEmptyString);
GETLB(id)->SetItem(itemID, 1, text);
int itemWidth = 0;
GETLB(id)->GetTextExtent(text, &itemWidth, NULL);
maxStrWidth = wxMax(maxStrWidth, itemWidth);
if (type != -1) {
wxCHECK_RET(imgTypeMap, wxT("Unexpected NULL imgTypeMap"));
long idx = imgTypeMap->Item(type);
GETLB(id)->SetItemImage(itemID, idx, idx);
}
}
int ListBoxImpl::Length() {
return GETLB(id)->GetItemCount();
}
void ListBoxImpl::Select(int n) {
bool select = TRUE;
if (n == -1) {
n = 0;
select = FALSE;
}
GETLB(id)->Focus(n);
GETLB(id)->Select(n, select);
}
int ListBoxImpl::GetSelection() {
return GETLB(id)->GetFirstSelected();
}
int ListBoxImpl::Find(const char *prefix) {
// No longer used
return -1;
}
void ListBoxImpl::GetValue(int n, char *value, int len) {
wxListItem item;
item.SetId(n);
item.SetColumn(1);
item.SetMask(wxLIST_MASK_TEXT);
GETLB(id)->GetItem(item);
strncpy(value, wx2stc(item.GetText()), len);
value[len-1] = '\0';
}
void ListBoxImpl::Sort() {
}
void ListBoxImpl::RegisterImage(int type, const char *xpm_data) {
wxMemoryInputStream stream(xpm_data, strlen(xpm_data)+1);
wxBitmap bmp(wxImage(stream, wxBITMAP_TYPE_XPM));
if (! imgList) {
// assumes all images are the same size
imgList = new wxImageList(bmp.GetWidth(), bmp.GetHeight(), TRUE);
imgTypeMap = new wxArrayInt;
}
int idx = imgList->Add(bmp);
// do we need to extend the mapping array?
wxArrayInt& itm = *imgTypeMap;
if ( itm.GetCount() < type+1)
itm.Add(-1, type - itm.GetCount() + 1);
// Add an item that maps type to the image index
itm[type] = idx;
}
void ListBoxImpl::ClearRegisteredImages() {
if (imgList) {
delete imgList;
imgList = NULL;
}
if (imgTypeMap) {
delete imgTypeMap;
imgTypeMap = NULL;
}
if (id)
GETLB(id)->SetImageList(NULL, wxIMAGE_LIST_SMALL);
}
void ListBoxImpl::SetDoubleClickAction(CallBackAction action, void *data) {
GETLBW(id)->SetDoubleClickAction(action, data);
}
ListBox::ListBox() {
}
ListBox::~ListBox() {
}
void ListBox::Create(Window &parent, int ctrlID) {
id = new wxSTCListBoxWin(GETWIN(parent.GetID()), ctrlID);
}
void ListBox::SetVisibleRows(int rows) {
desiredVisibleRows = rows;
}
PRectangle ListBox::GetDesiredRect() {
wxSize sz = GETLB(id)->GetBestSize();
PRectangle rc;
rc.top = 0;
rc.left = 0;
if (sz.x > 400)
sz.x = 400;
if (sz.y > 140) // TODO: Use desiredVisibleRows??
sz.y = 140;
rc.right = sz.x;
rc.bottom = sz.y;
return rc;
}
void ListBox::SetAverageCharWidth(int width) {
aveCharWidth = width;
}
void ListBox::SetFont(Font &font) {
GETLB(id)->SetFont(*((wxFont*)font.GetID()));
}
void ListBox::Clear() {
GETLB(id)->Clear();
}
void ListBox::Append(char *s) {
GETLB(id)->Append(stc2wx(s));
}
int ListBox::Length() {
return GETLB(id)->GetCount();
}
void ListBox::Select(int n) {
bool select = TRUE;
if (n == -1) {
n = 0;
select = FALSE;
}
GETLB(id)->SetSelection(n, select);
#ifdef __WXGTK__
if (n > 4)
n = n - 4;
else
n = 0;
GETLB(id)->SetFirstItem(n);
#endif
}
int ListBox::GetSelection() {
return GETLB(id)->GetSelection();
}
int ListBox::Find(const char *prefix) {
// No longer used
return -1;
}
void ListBox::GetValue(int n, char *value, int len) {
wxString text = GETLB(id)->GetString(n);
strncpy(value, wx2stc(text), len);
value[len-1] = '\0';
}
void ListBox::Sort() {
ListBox *ListBox::Allocate() {
return new ListBoxImpl();
}
//----------------------------------------------------------------------
@@ -890,13 +1088,16 @@ const char *Platform::DefaultFont() {
}
int Platform::DefaultFontSize() {
return 8;
return wxNORMAL_FONT->GetPointSize();
}
unsigned int Platform::DoubleClickTime() {
return 500; // **** ::GetDoubleClickTime();
}
bool Platform::MouseButtonBounce() {
return FALSE;
}
void Platform::DebugDisplay(const char *s) {
wxLogDebug(stc2wx(s));
}
@@ -998,6 +1199,13 @@ bool Platform::IsDBCSLeadByte(int codePage, char ch) {
return false;
}
int Platform::DBCSCharLength(int codePage, const char *s) {
return 0;
}
int Platform::DBCSCharMaxLength() {
return 0;
}
//----------------------------------------------------------------------