From 0cf6acbf261c5d47f97d280700b1203f3d8d8047 Mon Sep 17 00:00:00 2001 From: David Webster Date: Fri, 16 Nov 2001 18:42:18 +0000 Subject: [PATCH] Implementing some more controls and an MDI child frame fix for wxFrame. Also include the textbuf class in the make. New module definition file. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@12453 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/os2/choice.cpp | 433 +++++++++++++++++++------------- src/os2/combobox.cpp | 586 +++++++++++++++++++++++++++---------------- src/os2/control.cpp | 37 +++ src/os2/frame.cpp | 25 +- src/os2/makefile.va | 3 + src/os2/wx23.def | 111 +++++--- 6 files changed, 774 insertions(+), 421 deletions(-) diff --git a/src/os2/choice.cpp b/src/os2/choice.cpp index 84758c1bb8..0597080b72 100644 --- a/src/os2/choice.cpp +++ b/src/os2/choice.cpp @@ -22,74 +22,105 @@ IMPLEMENT_DYNAMIC_CLASS(wxChoice, wxControl) -bool wxChoice::Create(wxWindow *parent, - wxWindowID id, - const wxPoint& pos, - const wxSize& size, - int n, const wxString choices[], - long style, +bool wxChoice::Create( + wxWindow* pParent +, wxWindowID vId +, const wxPoint& rPos +, const wxSize& rSize +, int n +, const wxString asChoices[] +, long lStyle #if wxUSE_VALIDATORS - const wxValidator& validator, +, const wxValidator& rValidator #endif - const wxString& name) +, const wxString& rsName +) { - if ( !CreateControl(parent, id, pos, size, style, validator, name) ) + long lSstyle; + + if (!OS2CreateControl( pParent + ,vId + ,rPos + ,rSize + ,lStyle +#if wxUSE_VALIDATORS + ,rValidator +#endif + ,rsName + )) return FALSE; -// TODO: -/* - long msStyle = WS_CHILD | CBS_DROPDOWNLIST | WS_TABSTOP | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL; - if ( style & wxCB_SORT ) - msStyle |= CBS_SORT; - - // the experience shows that wxChoice vs. wxComboBox distinction confuses - // quite a few people - try to help them - wxASSERT_MSG( !(style & wxCB_DROPDOWN) && - !(style & wxCB_READONLY) && - !(style & wxCB_SIMPLE), + lSstyle = CBS_DROPDOWNLIST | + WS_TABSTOP | + WS_VISIBLE; + + if (lStyle & wxCLIP_SIBLINGS ) + lSstyle |= WS_CLIPSIBLINGS; + + wxASSERT_MSG( !(lStyle & wxCB_DROPDOWN) && + !(lStyle & wxCB_READONLY) && + !(lStyle & wxCB_SIMPLE), wxT("this style flag is ignored by wxChoice, you " "probably want to use a wxComboBox") ); - if ( !OS2CreateControl(wxT("COMBOBOX"), msStyle) ) + if (!OS2CreateControl( wxT("COMBOBOX") + ,lSstyle + )) return FALSE; - for ( int i = 0; i < n; i++ ) + // + // A choice/combobox normally has a white background (or other, depending + // on global settings) rather than inheriting the parent's background colour. + // + SetBackgroundColour(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_WINDOW)); + for (int i = 0; i < n; i++) { - Append(choices[i]); + Append(asChoices[i]); } -*/ - SetSize(pos.x, pos.y, size.x, size.y); + SetSize( rPos.x + ,rPos.y + ,rSize.x + ,rSize.y + ); return TRUE; -} +} // end of wxChoice::Create // ---------------------------------------------------------------------------- // adding/deleting items to/from the list // ---------------------------------------------------------------------------- -int wxChoice::DoAppend(const wxString& item) +int wxChoice::DoAppend( + const wxString& rsItem +) { - // TODO: - /* - int n = (int)SendMessage(GetHwnd(), CB_ADDSTRING, 0, (LONG)item.c_str()); - if ( n == CB_ERR ) - { - wxLogLastError("SendMessage(CB_ADDSTRING)"); - } - */ - return 0; //n -} - -void wxChoice::Delete(int n) + int nIndex; + SHORT nIndexType = 0; + + if (m_windowStyle & wxLB_SORT) + nIndexType = LIT_SORTASCENDING; + else + nIndexType = LIT_END; + nIndex = (int)::WinSendMsg( GetHwnd() + ,LM_INSERTITEM + ,(MPARAM)nIndexType + ,(MPARAM)rsItem.c_str() + ); + return nIndex; +} // end of wxChoice::DoAppend + +void wxChoice::Delete( + int n +) { wxCHECK_RET( n < GetCount(), wxT("invalid item index in wxChoice::Delete") ); - -// TODO: SendMessage(GetHwnd(), CB_DELETESTRING, n, 0); -} + ::WinSendMsg(GetHwnd(), LM_DELETEITEM, (MPARAM)n, (MPARAM)0); +} // end of wxChoice::Delete void wxChoice::Clear() { - // TODO: SendMessage(GetHwnd(), CB_RESETCONTENT, 0, 0); -} + Free(); + ::WinSendMsg(GetHwnd(), LM_DELETEALL, (MPARAM)0, (MPARAM)0); +} // end of wxChoice::Clear // ---------------------------------------------------------------------------- // selection @@ -97,14 +128,19 @@ void wxChoice::Clear() int wxChoice::GetSelection() const { - // TODO: return (int)SendMessage(GetHwnd(), CB_GETCURSEL, 0, 0); - return 0; -} + return((int)LONGFROMMR(::WinSendMsg(GetHwnd(), LM_QUERYSELECTION, (MPARAM)LIT_FIRST, (MPARAM)0))); +} // end of wxChoice::GetSelection -void wxChoice::SetSelection(int n) +void wxChoice::SetSelection( + int n +) { - // TODO: SendMessage(GetHwnd(), CB_SETCURSEL, n, 0); -} + ::WinSendMsg( GetHwnd() + ,LM_SELECTITEM + ,(MPARAM)n + ,(MPARAM)TRUE + ); +} // end of wxChoice::SetSelection // ---------------------------------------------------------------------------- // string list functions @@ -112,23 +148,38 @@ void wxChoice::SetSelection(int n) int wxChoice::GetCount() const { - // TODO: return (int)SendMessage(GetHwnd(), CB_GETCOUNT, 0, 0); - return 0; -} + return((int)LONGFROMMR(::WinSendMsg(GetHwnd(), LM_QUERYITEMCOUNT, (MPARAM)0, (MPARAM)0))); +} // end of wxChoice::GetCount -int wxChoice::FindString(const wxString& s) const +int wxChoice::FindString( + const wxString& rsStr +) const { - // TODO: - /* - int pos = (int)SendMessage(GetHwnd(), CB_FINDSTRINGEXACT, - (WPARAM)-1, (LPARAM)s.c_str()); + int nPos; + int nTextLength; + PSZ zStr; + int nItemCount; - return pos == LB_ERR ? wxNOT_FOUND : pos; - */ - return 0; -} + nItemCount = (int)LONGFROMMR(::WinSendMsg(GetHwnd(), LM_QUERYITEMCOUNT, (MPARAM)0, (MPARAM)0)); + for (nPos = 0; nPos < nItemCount; nPos++) + { + nTextLength = (int)LONGFROMMR(::WinSendMsg(GetHwnd(), LM_QUERYITEMTEXTLENGTH, (MPARAM)nPos, (MPARAM)0)); + zStr = new char[nTextLength + 1]; + ::WinSendMsg(GetHwnd(), LM_QUERYITEMTEXT, MPFROM2SHORT((SHORT)nPos, (SHORT)nTextLength), (MPARAM)zStr); + if (rsStr == (char*)zStr) + { + delete [] zStr; + break; + } + delete [] zStr; + } + return nPos; +} // end of wxChoice::FindString -void wxChoice::SetString(int n, const wxString& s) +void wxChoice::SetString( + int n +, const wxString& rsStr +) { wxFAIL_MSG(wxT("not implemented")); @@ -136,153 +187,199 @@ void wxChoice::SetString(int n, const wxString& s) Delete(n); Insert(n + 1, s); #endif -} +} // end of wxChoice::SetString -wxString wxChoice::GetString(int n) const +wxString wxChoice::GetString( + int n +) const { - size_t len = 0; // TODO: (size_t)::SendMessage(GetHwnd(), CB_GETLBTEXTLEN, n, 0); - wxString str = ""; - // TODO: - /* - if (len) { - if ( ::SendMessage(GetHwnd(), CB_GETLBTEXT, n, - (LPARAM)str.GetWriteBuf(len)) == CB_ERR ) { - wxLogLastError("SendMessage(CB_GETLBTEXT)"); - } - str.UngetWriteBuf(); + size_t nLen = 0; + wxString sStr = ""; + char* zBuf; + + nLen = (size_t)LONGFROMMR(::WinSendMsg(GetHwnd(), LM_QUERYITEMTEXTLENGTH, (MPARAM)n, (MPARAM)0)); + if (nLen) + { + zBuf = new char[nLen + 1]; + ::WinSendMsg( GetHwnd() + ,LM_QUERYITEMTEXT + ,MPFROM2SHORT((SHORT)n, (SHORT)nLen) + ,(MPARAM)zBuf + ); + sStr = zBuf; + delete [] zBuf; } - */ - return str; -} + return sStr; +} // end of wxChoice::GetString // ---------------------------------------------------------------------------- // client data // ---------------------------------------------------------------------------- -void wxChoice::DoSetItemClientData( int n, void* clientData ) +void wxChoice::DoSetItemClientData( + int n +, void* pClientData +) { - // TODO: - /* - if ( SendMessage(GetHwnd(), CB_SETITEMDATA, n, (LPARAM)clientData) == CB_ERR ) - { - wxLogLastError(wxT("CB_SETITEMDATA")); - } - */ -} + ::WinSendMsg(GetHwnd(), LM_SETITEMHANDLE, (MPARAM)n, MPFROMP(pClientData)); +} // end of wxChoice::DoSetItemClientData void* wxChoice::DoGetItemClientData( int n ) const { - // TODO: - /* - LPARAM rc = SendMessage(GetHwnd(), CB_GETITEMDATA, n, 0); - if ( rc == CB_ERR ) - { - wxLogLastError(wxT("CB_GETITEMDATA")); - - // unfortunately, there is no way to return an error code to the user - rc = (LPARAM) NULL; - } + MRESULT rc = 0L; - return (void *)rc; - */ - return NULL; -} + rc = ::WinSendMsg(GetHwnd(), LM_QUERYITEMHANDLE, (MPARAM)n, (MPARAM)0); + return((void*)rc); +} // end of wxChoice::DoSetItemClientData -void wxChoice::DoSetItemClientObject( int n, wxClientData* clientData ) +void wxChoice::DoSetItemClientObject( + int n +, wxClientData* pClientData +) { - DoSetItemClientData(n, clientData); -} - -wxClientData* wxChoice::DoGetItemClientObject( int n ) const + DoSetItemClientData( n + ,pClientData + ); +} // end of wxChoice::DoSetItemClientObject + +wxClientData* wxChoice::DoGetItemClientObject( + int n +) const { return (wxClientData *)DoGetItemClientData(n); -} +} // end of wxChoice::DoGetItemClientObject // ---------------------------------------------------------------------------- // wxOS2 specific helpers // ---------------------------------------------------------------------------- -void wxChoice::DoSetSize(int x, int y, - int width, int height, - int sizeFlags) +void wxChoice::DoSetSize( + int nX +, int nY +, int nWidth +, int nHeight +, int nSizeFlags +) { + // // Ignore height parameter because height doesn't mean 'initially // displayed' height, it refers to the drop-down menu as well. The // wxWindows interpretation is different; also, getting the size returns // the _displayed_ size (NOT the drop down menu size) so // setting-getting-setting size would not work. - wxControl::DoSetSize(x, y, width, -1, sizeFlags); -} + // + wxControl::DoSetSize( nX + ,nY + ,nWidth + ,-1 + ,nSizeFlags + ); +} // end of wxChoice::DoSetSize wxSize wxChoice::DoGetBestSize() const { - // find the widest string - int wLine; - int wChoice = 0; - int nItems = GetCount(); - for ( int i = 0; i < nItems; i++ ) + // + // Find the widest string + // + int nLineWidth; + int nChoiceWidth = 0; + int nItems = GetCount(); + int nCx; + int nCy; + + for (int i = 0; i < nItems; i++) { - wxString str(GetString(i)); - GetTextExtent(str, &wLine, NULL); - if ( wLine > wChoice ) - wChoice = wLine; + wxString sStr(GetString(i)); + + GetTextExtent( sStr + ,&nLineWidth + ,NULL + ); + if (nLineWidth > nChoiceWidth) + nChoiceWidth = nLineWidth; } - // give it some reasonable default value if there are no strings in the + // + // Give it some reasonable default value if there are no strings in the // list - if ( wChoice == 0 ) - wChoice = 100; - - // the combobox should be larger than the widest string - int cx, cy; - wxGetCharSize(GetHWND(), &cx, &cy, (wxFont*)&GetFont()); - - wChoice += 5*cx; - + // + if (nChoiceWidth == 0L) + nChoiceWidth = 100L; + + // + // The combobox should be larger than the widest string + // + wxGetCharSize( GetHWND() + ,&nCx + ,&nCy + ,(wxFont*)&GetFont() + ); + nChoiceWidth += 5 * nCx; + + // // Choice drop-down list depends on number of items (limited to 10) - size_t nStrings = nItems == 0 ? 10 : wxMin(10, nItems) + 1; - int hChoice = EDIT_HEIGHT_FROM_CHAR_HEIGHT(cy)*nStrings; - - return wxSize(wChoice, hChoice); -} - -MRESULT wxChoice::OS2WindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam) + // + size_t nStrings = nItems == 0 ? 10 : wxMin(10, nItems) + 1; + int nChoiceHeight = EDIT_HEIGHT_FROM_CHAR_HEIGHT(nCy) * nStrings; + + return wxSize( nChoiceWidth + ,nChoiceHeight + ); +} // end of wxChoice::DoGetBestSize + +MRESULT wxChoice::OS2WindowProc( + WXUINT uMsg +, WXWPARAM wParam +, WXLPARAM lParam +) { - // TODO: - /* - if ( nMsg == WM_LBUTTONUP ) - { - int x = (int)LOWORD(lParam); - int y = (int)HIWORD(lParam); - - // Ok, this is truly weird, but if a panel with a wxChoice loses the - // focus, then you get a *fake* WM_LBUTTONUP message with x = 65535 and - // y = 65535. Filter out this nonsense. - // - // VZ: I'd like to know how to reproduce this please... - if ( x == 65535 && y == 65535 ) - return 0; - } - */ - return wxWindow::OS2WindowProc(nMsg, wParam, lParam); -} - -bool wxChoice::OS2Command(WXUINT param, WXWORD WXUNUSED(id)) + return wxWindow::OS2WindowProc( uMsg + ,wParam + ,lParam + ); +} // end of wxChoice::OS2WindowProc + +bool wxChoice::OS2Command( + WXUINT uParam +, WXWORD WXUNUSED(wId) +) { - // TODO: - /* - if ( param != CBN_SELCHANGE) + if (uParam != LN_SELECT) { + // // "selection changed" is the only event we're after + // return FALSE; } - */ - wxCommandEvent event(wxEVT_COMMAND_CHOICE_SELECTED, m_windowId); - event.SetInt(GetSelection()); - event.SetEventObject(this); -// TODO: event.SetString(GetStringSelection()); - ProcessCommand(event); + int n = GetSelection(); + if (n > -1) + { + wxCommandEvent vEvent( wxEVT_COMMAND_CHOICE_SELECTED + ,m_windowId + ); + + vEvent.SetInt(n); + vEvent.SetEventObject(this); + vEvent.SetString((char*)GetStringSelection().c_str()); + if (HasClientObjectData()) + vEvent.SetClientObject(GetClientObject(n)); + else if (HasClientUntypedData()) + vEvent.SetClientData(GetClientData(n)); + ProcessCommand(vEvent); + } return TRUE; -} +} // end of wxChoice::OS2Command +void wxChoice::Free() +{ + if (HasClientObjectData()) + { + size_t nCount = GetCount(); + + for (size_t n = 0; n < nCount; n++) + { + delete GetClientObject(n); + } + } +} // end of wxhoice::Free diff --git a/src/os2/combobox.cpp b/src/os2/combobox.cpp index 0a3802cb51..e062a2f24a 100644 --- a/src/os2/combobox.cpp +++ b/src/os2/combobox.cpp @@ -24,279 +24,435 @@ #include "wx/clipbrd.h" #include "wx/os2/private.h" +#define OWNER_DRAWN_LISTBOX_EXTRA_SPACE (1) + +MRESULT EXPENTRY wxComboEditWndProc( HWND hWnd + ,UINT uMessage + ,MPARAM wParam + ,MPARAM lParam + ); +// +// The pointer to standard wnd proc +// +static WXFARPROC gfnWndprocEdit = (WXFARPROC)NULL; + IMPLEMENT_DYNAMIC_CLASS(wxComboBox, wxControl) -bool wxComboBox::OS2Command(WXUINT param, WXWORD WXUNUSED(id)) +bool wxComboBox::OS2Command( + WXUINT uParam +, WXWORD WXUNUSED(wId) +) { - // TODO: - /* - if (param == CBN_SELCHANGE) - { - wxCommandEvent event(wxEVT_COMMAND_COMBOBOX_SELECTED, m_windowId); - event.SetInt(GetSelection()); - event.SetEventObject(this); - event.SetString(GetStringSelection()); - ProcessCommand(event); - - return TRUE; - } - else if (param == CBN_EDITCHANGE) - { - wxCommandEvent event(wxEVT_COMMAND_TEXT_UPDATED, m_windowId); - event.SetString(GetValue()); - event.SetEventObject(this); - ProcessCommand(event); + long lSel = -1L; + wxString sValue; - return TRUE; - } - else - return FALSE; -*/ - return FALSE; -} - -bool wxComboBox::Create(wxWindow *parent, wxWindowID id, - const wxString& value, - const wxPoint& pos, - const wxSize& size, - int n, const wxString choices[], - long style, + switch (uParam) + { + case LN_SELECT: + if (GetSelection() > -1) + { + wxCommandEvent vEvent( wxEVT_COMMAND_COMBOBOX_SELECTED + ,GetId() + ); + + vEvent.SetInt(GetSelection()); + vEvent.SetEventObject(this); + vEvent.SetString((char*)GetStringSelection().c_str()); + ProcessCommand(vEvent); + } + break; + + case EN_CHANGE: + { + wxCommandEvent vEvent( wxEVT_COMMAND_TEXT_UPDATED + ,GetId() + ); + + if (lSel == -1L) + sValue = GetValue(); + else + SetValue(sValue); + vEvent.SetString((char*)GetValue().c_str()); + vEvent.SetEventObject(this); + ProcessCommand(vEvent); + } + break; + } + // + // There is no return value for the CBN_ notifications, so always return + // FALSE from here to pass the message to DefWindowProc() + // + return FALSE; +} // end of wxComboBox::OS2Command + +bool wxComboBox::Create( + wxWindow* pParent +, wxWindowID vId +, const wxString& rsValue +, const wxPoint& rPos +, const wxSize& rSize +, int n +, const wxString asChoices[] +, long lStyle #if wxUSE_VALIDATORS - const wxValidator& validator, +, const wxValidator& rValidator #endif - const wxString& name) +, const wxString& rsName +) { - SetName(name); + + if (!OS2CreateControl( pParent + ,vId + ,rPos + ,rSize + ,lStyle #if wxUSE_VALIDATORS - SetValidator(validator); + ,rValidator #endif - if (parent) parent->AddChild(this); - SetBackgroundColour(parent->GetBackgroundColour()) ; - SetForegroundColour(parent->GetForegroundColour()) ; - - m_windowStyle = style; - - if ( id == -1 ) - m_windowId = (int)NewControlId(); - else - m_windowId = id; - - int x = pos.x; - int y = pos.y; - int width = size.x; - int height = size.y; -// TODO: -/* - long msStyle = WS_CHILD | WS_TABSTOP | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL | - CBS_NOINTEGRALHEIGHT; - - if (m_windowStyle & wxCB_READONLY) - msStyle |= CBS_DROPDOWNLIST; - else if (m_windowStyle & wxCB_SIMPLE) - msStyle |= CBS_SIMPLE; // A list (shown always) and edit control - else - msStyle |= CBS_DROPDOWN; - - if (m_windowStyle & wxCB_SORT) - msStyle |= CBS_SORT; - - bool want3D; - WXDWORD exStyle = Determine3DEffects(WS_EX_CLIENTEDGE, &want3D) ; - - // Even with extended styles, need to combine with WS_BORDER - // for them to look right. - if ( want3D || wxStyleHasBorder(m_windowStyle) ) - msStyle |= WS_BORDER; - - m_hWnd = (WXHWND)::CreateWindowEx(exStyle, wxT("COMBOBOX"), NULL, - msStyle, - 0, 0, 0, 0, (HWND) parent->GetHWND(), (HMENU)m_windowId, - wxGetInstance(), NULL); - - wxCHECK_MSG( m_hWnd, FALSE, wxT("Failed to create combobox") ); - - // Subclass again for purposes of dialog editing mode - SubclassWin(m_hWnd); - - SetFont(parent->GetFont()); - int i; - for (i = 0; i < n; i++) - { - Append(choices[i]); - } - - SetSelection(i); - - SetSize(x, y, width, height); - if ( !value.IsEmpty() ) - { - SetValue(value); - } -*/ - return TRUE; -} - -void wxComboBox::SetValue(const wxString& value) + ,rsName + )) + return FALSE; + + // + // Get the right style + // + long lSstyle = 0L; + + lSstyle = WS_TABSTOP | + WS_VISIBLE; + + if (lStyle & wxCLIP_SIBLINGS ) + lSstyle |= WS_CLIPSIBLINGS; + if (lStyle & wxCB_READONLY) + lSstyle |= CBS_DROPDOWNLIST; + else if (lStyle & wxCB_SIMPLE) + lSstyle |= CBS_SIMPLE; // A list (shown always) and edit control + else + lSstyle |= CBS_DROPDOWN; + + + if (!OS2CreateControl( "COMBOBOX" + ,lSstyle + )) + return FALSE; + + // + // A choice/combobox normally has a white background (or other, depending + // on global settings) rather than inheriting the parent's background colour. + // + SetBackgroundColour(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_WINDOW)); + + SetFont(pParent->GetFont()); + + int i; + + for (i = 0; i < n; i++) + { + Append(asChoices[i]); + } + + SetSize( rPos.x + ,rPos.y + ,rSize.x + ,rSize.y + ); + if (!rsValue.IsEmpty()) + { + SetValue(rsValue); + } + gfnWndprocEdit = (WXFARPROC)::WinSubclassWindow( (HWND)GetHwnd() + ,(PFNWP)wxComboEditWndProc + ); + return TRUE; +} // end of wxComboBox::Create + +void wxComboBox::SetValue( + const wxString& rsValue +) { - // If newlines are denoted by just 10, must stick 13 in front. - int singletons = 0; - int len = value.Length(); - int i; - for (i = 0; i < len; i ++) - { - if ((i > 0) && (value[i] == 10) && (value[i-1] != 13)) - singletons ++; - } - if (singletons > 0) - { - wxChar *tmp = new wxChar[len + singletons + 1]; - int j = 0; - for (i = 0; i < len; i ++) + // + // If newlines are denoted by just 10, must stick 13 in front. + // + int nSingletons = 0; + int nLen = rsValue.Length(); + int i; + + for (i = 0; i < nLen; i ++) { - if ((i > 0) && (value[i] == 10) && (value[i-1] != 13)) - { - tmp[j] = 13; - j ++; - } - tmp[j] = value[i]; - j ++; + if ((i > 0) && (rsValue[i] == 10) && (rsValue[i - 1] != 13)) + nSingletons ++; } - tmp[j] = 0; -// SetWindowText(GetHwnd(), tmp); - delete[] tmp; - } -// else -// SetWindowText(GetHwnd(), value); -} + if (nSingletons > 0) + { + wxChar* zTmp = new wxChar[nLen + nSingletons + 1]; + int j = 0; + + for (i = 0; i < nLen; i ++) + { + if ((i > 0) && (rsValue[i] == 10) && (rsValue[i - 1] != 13)) + { + zTmp[j] = 13; + j++; + } + zTmp[j] = rsValue[i]; + j++; + } + zTmp[j] = 0; + ::WinSetWindowText(GetHwnd(), zTmp); + delete[] zTmp; + } + else + ::WinSetWindowText(GetHwnd(), rsValue.c_str()); +} // end of wxComboBox::SetValue +// // Clipboard operations +// void wxComboBox::Copy() { - HWND hWnd = GetHwnd(); -// SendMessage(hWnd, WM_COPY, 0, 0L); -} + HWND hWnd = GetHwnd(); + + ::WinSendMsg(hWnd, EM_COPY, (MPARAM)0, (MPARAM)0); +} // end of wxComboBox::Copy void wxComboBox::Cut() { - HWND hWnd = GetHwnd(); -// SendMessage(hWnd, WM_CUT, 0, 0L); -} + HWND hWnd = GetHwnd(); + + ::WinSendMsg(hWnd, EM_CUT, (MPARAM)0, (MPARAM)0); +} // end of wxComboBox::Cut void wxComboBox::Paste() { - HWND hWnd = GetHwnd(); -// SendMessage(hWnd, WM_PASTE, 0, 0L); -} + HWND hWnd = GetHwnd(); -void wxComboBox::SetEditable(bool editable) + ::WinSendMsg(hWnd, EM_PASTE, (MPARAM)0, (MPARAM)0); +} // end of wxComboBox::Paste + +void wxComboBox::SetEditable( + bool bEditable +) { - // Can't implement in MSW? -// HWND hWnd = GetHwnd(); -// SendMessage(hWnd, EM_SETREADONLY, (WPARAM)!editable, (LPARAM)0L); -} + HWND hWnd = GetHwnd(); + + ::WinSendMsg(hWnd, EM_SETREADONLY, (MPARAM)!bEditable, (MPARAM)0L); +} // end of wxComboBox::SetEditable -void wxComboBox::SetInsertionPoint(long pos) +void wxComboBox::SetInsertionPoint( + long lPos +) { -/* - HWND hWnd = GetHwnd(); - SendMessage(hWnd, EM_SETSEL, pos, pos); - SendMessage(hWnd, EM_SCROLLCARET, (WPARAM)0, (LPARAM)0); - char *nothing = ""; - SendMessage(hWnd, EM_REPLACESEL, 0, (LPARAM)nothing); -*/ -} + HWND hWnd = GetHwnd(); + + ::WinSendMsg(hWnd, EM_SETFIRSTCHAR, MPFROMLONG(lPos), (MPARAM)0); +} // end of wxComboBox::SetInsertionPoint void wxComboBox::SetInsertionPointEnd() { -/* - long pos = GetLastPosition(); - SetInsertionPoint(pos); -*/ -} + long lPos = GetLastPosition(); + + SetInsertionPoint(lPos); +} // end of wxComboBox::SetInsertionPointEnd long wxComboBox::GetInsertionPoint() const { -/* - DWORD Pos=(DWORD)SendMessage(GetHwnd(), EM_GETSEL, 0, 0L); - return Pos&0xFFFF; -*/ - return 0; -} + long lPos = LONGFROMMR(::WinSendMsg( GetHwnd() + ,LM_QUERYSELECTION + ,(MPARAM)0 + ,(MPARAM)0 + )); + if (lPos == LIT_NONE) + return wxNOT_FOUND; + return lPos; +} // end of wxComboBox::GetInsertionPoint long wxComboBox::GetLastPosition() const { -/* - HWND hWnd = GetHwnd(); - - // Will always return a number > 0 (according to docs) - int noLines = (int)SendMessage(hWnd, EM_GETLINECOUNT, (WPARAM)0, (LPARAM)0L); - - // This gets the char index for the _beginning_ of the last line - int charIndex = (int)SendMessage(hWnd, EM_LINEINDEX, (WPARAM)(noLines-1), (LPARAM)0L); + HWND hEditWnd = GetHwnd(); + long lLineLength = 0L; + WNDPARAMS vParams; - // Get number of characters in the last line. We'll add this to the character + // + // Get number of characters in the last (only) line. We'll add this to the character // index for the last line, 1st position. - int lineLength = (int)SendMessage(hWnd, EM_LINELENGTH, (WPARAM)charIndex, (LPARAM)0L); + // - return (long)(charIndex + lineLength); -*/ - return 0; -} -void wxComboBox::Replace(long from, long to, const wxString& value) + vParams.fsStatus = WPM_CCHTEXT; + if (::WinSendMsg( GetHwnd() + ,WM_QUERYWINDOWPARAMS + ,&vParams + ,0 + )) + { + lLineLength = (long)vParams.cchText; + } + else + lLineLength = 0L; + return lLineLength; +} // end of wxComboBox::GetLastPosition + +void wxComboBox::Replace( + long lFrom +, long lTo +, const wxString& rsValue +) { #if wxUSE_CLIPBOARD - HWND hWnd = GetHwnd(); - long fromChar = from; - long toChar = to; + HWND hWnd = GetHwnd(); + long lFromChar = lFrom; + long lToChar = lTo; + // // Set selection and remove it -// SendMessage(hWnd, CB_SETEDITSEL, fromChar, toChar); -// SendMessage(hWnd, WM_CUT, (WPARAM)0, (LPARAM)0); + // + ::WinSendMsg(hWnd, EM_SETSEL, MPFROM2SHORT((USHORT)lFrom, (USHORT)lTo), 0); + ::WinSendMsg(hWnd, EM_CUT, (MPARAM)0, (MPARAM)0); + // // Now replace with 'value', by pasting. - wxSetClipboardData(wxDF_TEXT, (wxObject *)(const wxChar *)value, 0, 0); - + // + wxSetClipboardData( wxDF_TEXT + ,(wxObject *)rsValue.c_str() + ,0 + ,0 + ); + + // // Paste into edit control -// SendMessage(hWnd, WM_PASTE, (WPARAM)0, (LPARAM)0L); + // + ::WinSendMsg(hWnd, EM_PASTE, (MPARAM)0, (MPARAM)0L); #endif -} +} // end of wxComboBox::Replace -void wxComboBox::Remove(long from, long to) +void wxComboBox::Remove( + long lFrom +, long lTo +) { - HWND hWnd = GetHwnd(); - long fromChar = from; - long toChar = to; +#if wxUSE_CLIPBOARD + HWND hWnd = GetHwnd(); + long lFromChar = lFrom; + long lToChar = lTo; - // Cut all selected text -// SendMessage(hWnd, CB_SETEDITSEL, fromChar, toChar); -// SendMessage(hWnd, WM_CUT, (WPARAM)0, (LPARAM)0); -} + ::WinSendMsg(hWnd, EM_SETSEL, MPFROM2SHORT((USHORT)lFrom, (USHORT)lTo), 0); + ::WinSendMsg(hWnd, EM_CUT, (MPARAM)0, (MPARAM)0); +#endif +} // end of wxComboBox::Remove -void wxComboBox::SetSelection(long from, long to) +void wxComboBox::SetSelection( + long lFrom +, long lTo +) { - HWND hWnd = GetHwnd(); - long fromChar = from; - long toChar = to; - // if from and to are both -1, it means + HWND hWnd = GetHwnd(); + long lFromChar = lFrom; + long lToChar = lTo; + + // + // If from and to are both -1, it means // (in wxWindows) that all text should be selected. // This translates into Windows convention - if ((from == -1) && (to == -1)) + // + if ((lFrom == -1L) && (lTo == -1L)) { - fromChar = 0; - toChar = -1; + lFromChar = 0; + lToChar = -1; } -// SendMessage(hWnd, CB_SETEDITSEL, (WPARAM)fromChar, (LPARAM)toChar); -// SendMessage(hWnd, EM_SCROLLCARET, (WPARAM)0, (LPARAM)0); -} - -void wxComboBox::DoSetSize(int x, int y, - int width, int height, - int sizeFlags) + ::WinSendMsg( hWnd + ,EM_SETSEL + ,MPFROM2SHORT((USHORT)lFromChar, (USHORT)lToChar) + ,(MPARAM)0 + ); +} // end of wxComboBox::SetSelection + +void wxComboBox::DoSetSize( + int nX +, int nY +, int nWidth +, int nHeight +, int nSizeFlags +) +{ + wxControl::DoSetSize( nX + ,nY + ,nWidth + ,nHeight + ,nSizeFlags + ); +} // end of wxComboBox::DoSetSize + +bool wxComboBox::ProcessEditMsg( + WXUINT uMsg +, WXWPARAM wParam +, WXLPARAM lParam) { - wxControl::DoSetSize(x, y, width, height, sizeFlags); -} + SHORT vFlag; + switch (uMsg) + { + case WM_CHAR: + vFlag = SHORT1FROMMP(wParam); + switch(vFlag) + { + case KC_CHAR: + return (HandleChar( SHORT1FROMMP(wParam) + ,lParam + ,TRUE /* isASCII */ + )); + + case KC_PREVDOWN: + return (HandleKeyDown( SHORT1FROMMP(wParam) + ,lParam + )); + + case KC_KEYUP: + return (HandleKeyUp( SHORT1FROMMP(wParam) + ,lParam + )); + } + break; + } + return FALSE; +} // end of WinGuiBase_CComboBox::ProcessEditMsg + +MRESULT EXPENTRY wxComboEditWndProc( + HWND hWnd +, UINT uMessage +, MPARAM wParam +, MPARAM lParam +) +{ + HWND hWndCombo; + wxWindow* pWin = NULL; + + hWndCombo = ::WinQueryWindow(hWnd, QW_PARENT); + pWin = (wxWindow*)wxFindWinFromHandle((WXHWND)hWndCombo); + switch (uMessage) + { + // + // Forward some messages to the combobox + // + case WM_CHAR: + { + wxComboBox* pCombo = wxDynamicCast( pWin + ,wxComboBox + ); + + if (pCombo->ProcessEditMsg( uMessage + ,wParam + ,lParam + )) + return ((MRESULT)0); + } + break; + + // + // TODO: Deal with tooltips here + // + } + return (gfnWndprocEdit(hWnd, (ULONG)uMessage, (MPARAM)wParam, (MPARAM)lParam)); +} // end of wxComboEditWndProc #endif // wxUSE_COMBOBOX diff --git a/src/os2/control.cpp b/src/os2/control.cpp index f50e813f90..592ea3f48e 100644 --- a/src/os2/control.cpp +++ b/src/os2/control.cpp @@ -74,6 +74,38 @@ wxControl::~wxControl() m_isBeingDeleted = TRUE; } +bool wxControl::OS2CreateControl( + wxWindow* pParent +, wxWindowID vId +, const wxPoint& rPos +, const wxSize& rSize +, long lStyle +#if wxUSE_VALIDATORS +, const wxValidator& rValidator +#endif +, const wxString& rsName +) +{ + // + // Even if it's possible to create controls without parents in some port, + // it should surely be discouraged because it doesn't work at all under + // Windows + // + if (!CreateBase( pParent + ,vId + ,rPos + ,rSize + ,lStyle +#if wxUSE_VALIDATORS + ,rValidator +#endif + ,rsName + )) + return FALSE; + pParent->AddChild(this); + return TRUE; +} // end of wxControl::OS2CreateControl + bool wxControl::OS2CreateControl( const wxChar* zClassname , WXDWORD dwStyle @@ -99,6 +131,11 @@ bool wxControl::OS2CreateControl( return FALSE; } + + PSZ zClass; + + if ((strcmp(zClassname, "COMBOBOX")) == 0) + zClass = WC_COMBOBOX; dwStyle |= WS_VISIBLE; m_hWnd = (WXHWND)::WinCreateWindow( (HWND)GetHwndOf(GetParent()) // Parent window handle ,(PSZ)zClassname // Window class diff --git a/src/os2/frame.cpp b/src/os2/frame.cpp index fb3241fea2..bc13037ef5 100644 --- a/src/os2/frame.cpp +++ b/src/os2/frame.cpp @@ -108,6 +108,7 @@ void wxFrame::Init() m_nFsStatusBarHeight = 0; m_nFsToolBarHeight = 0; m_bFsIsMaximized = FALSE; + m_bWasMinimized = FALSE; m_bFsIsShowing = FALSE; m_bIsShown = FALSE; m_pWinLastFocused = (wxWindow *)NULL; @@ -1328,10 +1329,30 @@ void wxFrame::IconizeChildFrames( pNode = pNode->GetNext() ) { wxWindow* pWin = pNode->GetData(); + wxFrame* pFrame = wxDynamicCast(pWin, wxFrame); - if (pWin->IsKindOf(CLASSINFO(wxFrame)) ) + if ( pFrame +#if wxUSE_MDI_ARCHITECTURE + && !wxDynamicCast(pFrame, wxMDIChildFrame) +#endif // wxUSE_MDI_ARCHITECTURE + ) { - ((wxFrame *)pWin)->Iconize(bIconize); + // + // We don't want to restore the child frames which had been + // iconized even before we were iconized, so save the child frame + // status when iconizing the parent frame and check it when + // restoring it. + // + if (bIconize) + { + pFrame->m_bWasMinimized = pFrame->IsIconized(); + } + + // + // This test works for both iconizing and restoring + // + if (!pFrame->m_bWasMinimized) + pFrame->Iconize(bIconize); } } } // end of wxFrame::IconizeChildFrames diff --git a/src/os2/makefile.va b/src/os2/makefile.va index 63af28dcc4..43126e0ee9 100644 --- a/src/os2/makefile.va +++ b/src/os2/makefile.va @@ -297,6 +297,7 @@ COMMONOBJS = \ ..\common\$D\string.obj \ ..\common\$D\sysopt.obj \ ..\common\$D\tbarbase.obj \ + ..\common\$D\textbuf.obj \ ..\common\$D\textcmn.obj \ ..\common\$D\textfile.obj \ ..\common\$D\timercmn.obj \ @@ -425,6 +426,7 @@ COMLIBOBJS3 = \ string.obj \ sysopt.obj \ tbarbase.obj \ + textbuf.obj \ textcmn.obj \ textfile.obj \ timercmn.obj \ @@ -788,6 +790,7 @@ $(COMLIBOBJS3): copy ..\common\$D\string.obj copy ..\common\$D\sysopt.obj copy ..\common\$D\tbarbase.obj + copy ..\common\$D\textbuf.obj copy ..\common\$D\textcmn.obj copy ..\common\$D\textfile.obj copy ..\common\$D\timercmn.obj diff --git a/src/os2/wx23.def b/src/os2/wx23.def index 710141b11a..9125f57e93 100644 --- a/src/os2/wx23.def +++ b/src/os2/wx23.def @@ -4,7 +4,7 @@ DATA MULTIPLE NONSHARED READWRITE LOADONCALL CODE LOADONCALL EXPORTS -;From library: F:\DEV\WX2\WXWINDOWS\LIB\WX.lib +;From library: H:\Dev\Wx2\WxWindows\lib\wx.lib ;From object file: dummy.cpp ;PUBDEFs (Symbols available from object file): wxDummyChar @@ -1758,7 +1758,7 @@ EXPORTS wxEVT_NC_LEFT_DCLICK wxEVT_INIT_DIALOG wxEVT_COMMAND_SET_FOCUS - ;From object file: F:\DEV\WX2\WXWINDOWS\src\common\extended.c + ;From object file: H:\DEV\WX2\WXWINDOWS\src\common\extended.c ;PUBDEFs (Symbols available from object file): ConvertToIeeeExtended ConvertFromIeeeExtended @@ -1872,6 +1872,8 @@ EXPORTS FindEntry__17wxFileConfigGroupCFPCc ;wxFileConfigEntry::SetValue(const wxString&,unsigned long) SetValue__17wxFileConfigEntryFRC8wxStringUl + ;wxFileConfig::wxFileConfig(wxInputStream&) + __ct__12wxFileConfigFR13wxInputStream ;wxFileConfig::RenameGroup(const wxString&,const wxString&) RenameGroup__12wxFileConfigFRC8wxStringT1 ;wxFileConfig::Init() @@ -1882,12 +1884,10 @@ EXPORTS LineListAppend__12wxFileConfigFRC8wxString ;wxFileConfig::DeleteGroup(const wxString&) DeleteGroup__12wxFileConfigFRC8wxString - ;wxFileConfig::Parse(wxTextFile&,unsigned long) - Parse__12wxFileConfigFR10wxTextFileUl - ;wxFileConfig::LineListInsert(const wxString&,wxFileConfigLineList*) - LineListInsert__12wxFileConfigFRC8wxStringP20wxFileConfigLineList ;wxFileConfig::Flush(unsigned long) Flush__12wxFileConfigFUl + ;wxFileConfig::LineListInsert(const wxString&,wxFileConfigLineList*) + LineListInsert__12wxFileConfigFRC8wxStringP20wxFileConfigLineList ;wxFileConfig::Read(const wxString&,wxString*,const wxString&) const Read__12wxFileConfigCFRC8wxStringP8wxStringT1 ;wxFileConfig::RenameEntry(const wxString&,const wxString&) @@ -1925,6 +1925,8 @@ EXPORTS Read__12wxFileConfigCFRC8wxStringP8wxString ;wxFileConfigGroup::DeleteEntry(const char*) DeleteEntry__17wxFileConfigGroupFPCc + ;wxFileConfig::Parse(wxTextBuffer&,unsigned long) + Parse__12wxFileConfigFR12wxTextBufferUl ;wxFileConfig::wxFileConfig(const wxString&,const wxString&,const wxString&,const wxString&,long) __ct__12wxFileConfigFRC8wxStringN31l ;wxFileConfigEntry::SetLine(wxFileConfigLineList*) @@ -4582,8 +4584,8 @@ EXPORTS __ct__16wxStaticBoxSizerFP11wxStaticBoxi ;wxGridSizer::wxGridSizer(int,int,int) __ct__11wxGridSizerFiN21 - ;wxSizer::DoSetItemMinSize(wxWindow*,int,int) - DoSetItemMinSize__7wxSizerFP8wxWindowiT2 + ;wxSizer::DeleteWindows() + DeleteWindows__7wxSizerFv ;wxStaticBoxSizer::sm_classwxStaticBoxSizer sm_classwxStaticBoxSizer__16wxStaticBoxSizer ;wxGridSizer::sm_classwxGridSizer @@ -4596,6 +4598,8 @@ EXPORTS RecalcSizes__15wxFlexGridSizerFv ;wxGridSizer::RecalcSizes() RecalcSizes__11wxGridSizerFv + ;wxSizer::DoSetItemMinSize(wxWindow*,int,int) + DoSetItemMinSize__7wxSizerFP8wxWindowiT2 ;wxStaticBoxSizer::CalcMin() CalcMin__16wxStaticBoxSizerFv ;wxFlexGridSizer::CalcMin() @@ -4646,8 +4650,10 @@ EXPORTS Remove__7wxSizerFP8wxWindow ;wxSizer::FitSize(wxWindow*) FitSize__7wxSizerFP8wxWindow - __vft15wxNotebookSizer8wxObject + ;wxSizer::Clear(unsigned long) + Clear__7wxSizerFUl __vft7wxSizer8wxObject + __vft15wxNotebookSizer8wxObject ;wxSizer::Remove(int) Remove__7wxSizerFi ;wxSizer::GetMinSize() @@ -4688,6 +4694,8 @@ EXPORTS Remove__7wxSizerFP7wxSizer ;wxSizer::DoSetItemMinSize(wxSizer*,int,int) DoSetItemMinSize__7wxSizerFP7wxSizeriT2 + ;wxSizerItem::DeleteWindows() + DeleteWindows__11wxSizerItemFv ;wxSizerItem::wxSizerItem(wxWindow*,int,int,int,wxObject*) __ct__11wxSizerItemFP8wxWindowiN22P8wxObject __vft16wxStaticBoxSizer8wxObject @@ -5339,6 +5347,35 @@ EXPORTS __dt__13wxToolBarBaseFv ;wxToolBarBase::SetToolLongHelp(int,const wxString&) SetToolLongHelp__13wxToolBarBaseFiRC8wxString + ;From object file: ..\common\textbuf.cpp + ;PUBDEFs (Symbols available from object file): + ;wxTextBuffer::GuessType() const + GuessType__12wxTextBufferCFv + ;wxTextBuffer::Close() + Close__12wxTextBufferFv + ;wxTextBuffer::Exists() const + Exists__12wxTextBufferCFv + __vft12wxTextBuffer + ;wxTextBuffer::Write(wxTextFileType,wxMBConv&) + Write__12wxTextBufferF14wxTextFileTypeR8wxMBConv + ;wxTextBuffer::Open(const wxString&,wxMBConv&) + Open__12wxTextBufferFRC8wxStringR8wxMBConv + ;wxTextBuffer::Create() + Create__12wxTextBufferFv + ;wxTextBuffer::Translate(const wxString&,wxTextFileType) + Translate__12wxTextBufferFRC8wxString14wxTextFileType + ;wxTextBuffer::~wxTextBuffer() + __dt__12wxTextBufferFv + ;wxTextBuffer::wxTextBuffer(const wxString&) + __ct__12wxTextBufferFRC8wxString + ;wxTextBuffer::typeDefault + typeDefault__12wxTextBuffer + ;wxTextBuffer::GetEOL(wxTextFileType) + GetEOL__12wxTextBufferF14wxTextFileType + ;wxTextBuffer::Open(wxMBConv&) + Open__12wxTextBufferFR8wxMBConv + ;wxTextBuffer::Create(const wxString&) + Create__12wxTextBufferFRC8wxString ;From object file: ..\common\textcmn.cpp ;PUBDEFs (Symbols available from object file): ;wxTextCtrlBase::operator<<(double) @@ -5367,6 +5404,8 @@ EXPORTS sm_classwxTextUrlEvent__14wxTextUrlEvent ;wxTextCtrlBase::~wxTextCtrlBase() __dt__14wxTextCtrlBaseFv + ;wxTextCtrlBase::GetStringSelection() const + GetStringSelection__14wxTextCtrlBaseCFv ;wxTextCtrlBase::GetDefaultStyle() const GetDefaultStyle__14wxTextCtrlBaseCFv ;wxTextCtrlBase::CanPaste() const @@ -5386,34 +5425,19 @@ EXPORTS SetStyle__14wxTextCtrlBaseFlT1RC10wxTextAttr ;From object file: ..\common\textfile.cpp ;PUBDEFs (Symbols available from object file): - ;wxTextFile::Read(wxMBConv&) - Read__10wxTextFileFR8wxMBConv - ;wxTextFile::GuessType() const - GuessType__10wxTextFileCFv - ;wxTextFile::~wxTextFile() - __dt__10wxTextFileFv - ;wxTextFile::typeDefault - typeDefault__10wxTextFile - ;wxTextFile::Exists() const - Exists__10wxTextFileCFv - ;wxTextFile::Create() - Create__10wxTextFileFv - ;wxTextFile::GetEOL(wxTextFileType) - GetEOL__10wxTextFileF14wxTextFileType - ;wxTextFile::Translate(const wxString&,wxTextFileType) - Translate__10wxTextFileFRC8wxString14wxTextFileType - ;wxTextFile::Open(const wxString&,wxMBConv&) - Open__10wxTextFileFRC8wxStringR8wxMBConv - ;wxTextFile::Write(wxTextFileType,wxMBConv&) - Write__10wxTextFileF14wxTextFileTypeR8wxMBConv - ;wxTextFile::Open(wxMBConv&) - Open__10wxTextFileFR8wxMBConv - ;wxTextFile::Close() - Close__10wxTextFileFv + ;wxTextFile::OnRead(wxMBConv&) + OnRead__10wxTextFileFR8wxMBConv + __vft10wxTextFile12wxTextBuffer + ;wxTextFile::OnOpen(const wxString&,wxTextBuffer::wxTextBufferOpenMode) + OnOpen__10wxTextFileFRC8wxStringQ2_12wxTextBuffer20wxTextBufferOpenMode + ;wxTextFile::OnExists() const + OnExists__10wxTextFileCFv + ;wxTextFile::OnClose() + OnClose__10wxTextFileFv + ;wxTextFile::OnWrite(wxTextFileType,wxMBConv&) + OnWrite__10wxTextFileF14wxTextFileTypeR8wxMBConv ;wxTextFile::wxTextFile(const wxString&) __ct__10wxTextFileFRC8wxString - ;wxTextFile::Create(const wxString&) - Create__10wxTextFileFRC8wxString ;From object file: ..\common\timercmn.cpp ;PUBDEFs (Symbols available from object file): ;wxTimerEvent::sm_classwxTimerEvent @@ -5585,7 +5609,7 @@ EXPORTS Read32__17wxTextInputStreamFv ;wxTextInputStream::SkipIfEndOfLine(char) SkipIfEndOfLine__17wxTextInputStreamFc - ;From object file: F:\DEV\WX2\WXWINDOWS\src\common\unzip.c + ;From object file: H:\DEV\WX2\WXWINDOWS\src\common\unzip.c ;PUBDEFs (Symbols available from object file): unzReadCurrentFile unzGetCurrentFileInfo @@ -8591,6 +8615,8 @@ EXPORTS GetItemCount__10wxListCtrlCFv ;wxListMainWindow::GetImageSize(int,int&,int&) const GetImageSize__16wxListMainWindowCFiRiT2 + ;wxListCtrl::Freeze() + Freeze__10wxListCtrlFv ;wxListHeaderWindow::DoDrawRect(wxDC*,int,int,int,int) DoDrawRect__18wxListHeaderWindowFP4wxDCiN32 wxEVT_COMMAND_LIST_COL_BEGIN_DRAG @@ -8770,6 +8796,10 @@ EXPORTS __vft16wxListMainWindow14wxScrollHelper ;wxListMainWindow::UpdateCurrent() UpdateCurrent__16wxListMainWindowFv + ;wxListMainWindow::Thaw() + Thaw__16wxListMainWindowFv + ;wxListCtrl::Thaw() + Thaw__10wxListCtrlFv ;wxListCtrl::SetItem(long,int,const wxString&,int) SetItem__10wxListCtrlFliRC8wxStringT2 ;wxListMainWindow::InitScrolling() @@ -8794,6 +8824,8 @@ EXPORTS GetBackgroundColour__10wxListCtrlCFv ;wxListLineData::GetAttr() const GetAttr__14wxListLineDataCFv + ;wxListMainWindow::Freeze() + Freeze__16wxListMainWindowFv ;wxListCtrl::CreateHeaderWindow() CreateHeaderWindow__10wxListCtrlFv ;wxListLineData::SetText(int,const wxString) @@ -11262,6 +11294,8 @@ EXPORTS sm_classwxChoice__8wxChoice ;wxChoice::DoGetItemClientObject(int) const DoGetItemClientObject__8wxChoiceCFi + ;wxChoice::Free() + Free__8wxChoiceFv ;wxChoice::GetCount() const GetCount__8wxChoiceCFv ;wxChoice::SetString(int,const wxString&) @@ -11359,6 +11393,8 @@ EXPORTS SetEditable__10wxComboBoxFUl ;wxComboBox::SetInsertionPointEnd() SetInsertionPointEnd__10wxComboBoxFv + ;wxComboBox::ProcessEditMsg(unsigned int,void*,void*) + ProcessEditMsg__10wxComboBoxFUiPvT2 ;wxComboBox::SetValue(const wxString&) SetValue__10wxComboBoxFRC8wxString ;wxComboBox::SetInsertionPoint(long) @@ -11371,6 +11407,7 @@ EXPORTS wxConstructorForwxComboBox__Fv ;wxComboBox::Create(wxWindow*,int,const wxString&,const wxPoint&,const wxSize&,int,const wxString*,long,const wxValidator&,const wxString&) Create__10wxComboBoxFP8wxWindowiRC8wxStringRC7wxPointRC6wxSizeT2PC8wxStringlRC11wxValidatorT3 + wxComboEditWndProc ;wxComboBox::OS2Command(unsigned int,unsigned short) OS2Command__10wxComboBoxFUiUs ;From object file: ..\os2\control.cpp @@ -11404,6 +11441,8 @@ EXPORTS __vft9wxControl8wxObject ;wxControl::~wxControl() __dt__9wxControlFv + ;wxControl::OS2CreateControl(wxWindow*,int,const wxPoint&,const wxSize&,long,const wxValidator&,const wxString&) + OS2CreateControl__9wxControlFP8wxWindowiRC7wxPointRC6wxSizelRC11wxValidatorRC8wxString ;From object file: ..\os2\cursor.cpp ;PUBDEFs (Symbols available from object file): ;wxCursorRefData::~wxCursorRefData() -- 2.47.2