#ifndef WX_PRECOMP
#include "wx/textctrl.h"
+ #include "wx/scrolwin.h"
#include "wx/settings.h"
#include "wx/brush.h"
#include "wx/utils.h"
# include <fstream>
#endif
-#if defined(__EMX__) && !defined(MLE_INDEX)
+#if !defined(MLE_INDEX)
#define MLE_INDEX 0
#define MLE_RGB 1
#endif
return FALSE;
wxPoint vPos = rPos; // The OS/2 position
+ SWP vSwp;
if (pParent )
{
pParent->AddChild(this);
- hParent = GetWinHwnd(pParent);
- //
- // OS2 uses normal coordinates, no bassackwards Windows ones
- //
- if (pParent->IsKindOf(CLASSINFO(wxGenericScrolledWindow)) ||
- pParent->IsKindOf(CLASSINFO(wxScrolledWindow))
- )
- {
- wxWindow* pGrandParent = NULL;
-
- pGrandParent = pParent->GetParent();
- if (pGrandParent)
- nTempy = pGrandParent->GetSize().y - (vPos.y + rSize.y);
- else
- nTempy = pParent->GetSize().y - (vPos.y + rSize.y);
- }
- else
- nTempy = pParent->GetSize().y - (vPos.y + rSize.y);
- vPos.y = nTempy;
- }
- else
- {
- RECTL vRect;
-
- ::WinQueryWindowRect(HWND_DESKTOP, &vRect);
- hParent = HWND_DESKTOP;
- vPos.y = vRect.yTop - (vPos.y + rSize.y);
}
m_windowStyle = lStyle;
+ m_bIsMLE = FALSE;
long lSstyle = WS_VISIBLE | WS_TABSTOP;
//
if ( m_windowStyle & wxTE_MULTILINE )
{
+ lSstyle |= MLS_BORDER | MLS_WORDWRAP;
m_bIsMLE = TRUE;
- m_windowStyle |= wxTE_PROCESS_ENTER;
if ((m_windowStyle & wxTE_NO_VSCROLL) == 0)
lSstyle |= MLS_VSCROLL;
}
else
{
- lSstyle |= ES_LEFT;
+ lSstyle |= ES_LEFT | ES_AUTOSCROLL | ES_MARGIN;
if (m_windowStyle & wxHSCROLL)
lSstyle |= ES_AUTOSCROLL;
if (m_windowStyle & wxTE_PASSWORD) // hidden input
lSstyle |= ES_UNREADABLE;
}
- if ( pParent->IsKindOf(CLASSINFO(wxGenericScrolledWindow)) ||
- pParent->IsKindOf(CLASSINFO(wxScrolledWindow))
- )
- lSstyle |= WS_CLIPSIBLINGS;
+
if (m_bIsMLE)
{
m_hWnd = (WXHWND)::WinCreateWindow( (HWND)GetHwndOf(pParent) // Parent window handle
//
// Set font, position, size and initial value
//
- wxFont& vFontParent = pParent->GetFont();
-
- if (vFontParent.Ok())
- {
- SetFont(vFontParent);
- }
- else
- {
- SetFont(wxSystemSettings::GetSystemFont(wxSYS_SYSTEM_FONT));
- }
+ wxFont* pTextFont = new wxFont( 8
+ ,wxMODERN
+ ,wxNORMAL
+ ,wxNORMAL
+ );
+ SetFont(*pTextFont);
if (!rsValue.IsEmpty())
{
SetValue(rsValue);
}
SetupColours();
- SetSize( vPos.x
- ,vPos.y
+ //
+ // If X and/or Y are not zero the difference is the compensation value
+ // for margins for OS/2 controls.
+ //
+ ::WinQueryWindowPos(m_hWnd, &vSwp);
+ SetXComp(vSwp.x);
+ SetYComp(vSwp.y);
+ SetSize( vPos.x - GetXComp()
+ ,vPos.y - GetYComp()
,rSize.x
,rSize.y
);
+ delete pTextFont;
return TRUE;
} // end of wxTextCtrl::Create
}
} // end of wxTextCtrl::AdoptAttributesFromHWND
+WXDWORD wxTextCtrl::OS2GetStyle(
+ long lStyle
+, WXDWORD* pdwExstyle
+) const
+{
+ //
+ // Default border for the text controls is the sunken one
+ //
+ if ((lStyle & wxBORDER_MASK) == wxBORDER_DEFAULT )
+ {
+ lStyle |= wxBORDER_SUNKEN;
+ }
+
+ long dwStyle = wxControl::OS2GetStyle( lStyle
+ ,pdwExstyle
+ );
+
+ dwStyle = WS_VISIBLE | WS_TABSTOP;
+
+ //
+ // Single and multiline edit fields are two different controls in PM
+ //
+ if ( m_windowStyle & wxTE_MULTILINE )
+ {
+ dwStyle |= MLS_BORDER | MLS_WORDWRAP;
+ if ((m_windowStyle & wxTE_NO_VSCROLL) == 0)
+ dwStyle |= MLS_VSCROLL;
+ if (m_windowStyle & wxHSCROLL)
+ dwStyle |= MLS_HSCROLL;
+ if (m_windowStyle & wxTE_READONLY)
+ dwStyle |= MLS_READONLY;
+ }
+ else
+ {
+ dwStyle |= ES_LEFT | ES_AUTOSCROLL | ES_MARGIN;
+ if (m_windowStyle & wxHSCROLL)
+ dwStyle |= ES_AUTOSCROLL;
+ if (m_windowStyle & wxTE_READONLY)
+ dwStyle |= ES_READONLY;
+ if (m_windowStyle & wxTE_PASSWORD) // hidden input
+ dwStyle |= ES_UNREADABLE;
+ }
+ return dwStyle;
+} // end of wxTextCtrl::OS2GetStyle
+
+void wxTextCtrl::SetWindowStyleFlag(
+ long lStyle
+)
+{
+ wxControl::SetWindowStyleFlag(lStyle);
+} // end of wxTextCtrl::SetWindowStyleFlag
+
void wxTextCtrl::SetupColours()
{
wxColour vBkgndColour;
- vBkgndColour = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_WINDOW);
+ vBkgndColour = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW);
SetBackgroundColour(vBkgndColour);
SetForegroundColour(GetParent()->GetForegroundColour());
+ if (m_bIsMLE)
+ {
+ ::WinSendMsg( GetHwnd()
+ ,MLM_SETTEXTCOLOR
+ ,(MPARAM)GetParent()->GetForegroundColour().GetPixel()
+ ,(MPARAM)MLE_RGB
+ );
+ }
} // end of wxTextCtrl::SetupColours
// ----------------------------------------------------------------------------
if (*zStr == '\r')
*zStr = '\n';
}
- sStr = zStr;
return sStr;
} // end of wxTextCtrl::GetValue
const wxString& rsValue
)
{
- ::WinSetWindowText(GetHwnd(), rsValue.c_str());
+ if (m_bIsMLE)
+ ::WinSendMsg(GetHwnd(), MLM_INSERT, MPARAM((PCHAR)rsValue.c_str()), MPARAM(0));
+ else
+ ::WinSetWindowText(GetHwnd(), rsValue.c_str());
AdjustSpaceLimit();
} // end of wxTextCtrl::WriteText
::WinSetWindowText(GetHwnd(), "");
} // end of wxTextCtrl::Clear
+bool wxTextCtrl::EmulateKeyPress(
+ const wxKeyEvent& rEvent
+)
+{
+ SetFocus();
+ return(wxTextCtrlBase::EmulateKeyPress(rEvent));
+} // end of wxTextCtrl::EmulateKeyPress
+
// ----------------------------------------------------------------------------
// Clipboard operations
// ----------------------------------------------------------------------------
else
::GpiSetBackMix(hPS, BM_OVERPAINT);
if (!IsEnabled() && (GetWindowStyle() & wxTE_MULTILINE) == 0)
- vColBack = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE);
+ vColBack = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE);
::GpiSetBackColor(hPS, vColBack.GetPixel());
::GpiSetColor(hPS, vColFore.GetPixel());
return (WXHBRUSH)pBackgroundBrush->GetResourceHandle();
} // end of wxTextCtrl::OnCtlColor
+bool wxTextCtrl::OS2ShouldPreProcessMessage(
+ WXMSG* pMsg
+)
+{
+ return wxControl::OS2ShouldPreProcessMessage(pMsg);
+} // end of wxTextCtrl::OS2ShouldPreProcessMessage
+
void wxTextCtrl::OnChar(
wxKeyEvent& rEvent
)
wxGetCharSize(GetHWND(), &nCx, &nCy, (wxFont*)&GetFont());
int wText = DEFAULT_ITEM_WIDTH;
- int hText = EDIT_HEIGHT_FROM_CHAR_HEIGHT(nCy);
+ int hText = (EDIT_HEIGHT_FROM_CHAR_HEIGHT(nCy) * .8);
if (m_windowStyle & wxTE_MULTILINE)
{
- hText *= wxMin(GetNumberOfLines(), 5);
+ hText *= wxMax(GetNumberOfLines(), 5);
}
//else: for single line control everything is ok
return wxSize(wText, hText);