X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0e320a79f187558effb04d92020b470372bbe456..7b9da2077d0975db6c965a85c91d5aca671ab5e3:/src/os2/stattext.cpp?ds=sidebyside diff --git a/src/os2/stattext.cpp b/src/os2/stattext.cpp index 3b19c7184d..91b15ada8f 100644 --- a/src/os2/stattext.cpp +++ b/src/os2/stattext.cpp @@ -1,21 +1,25 @@ ///////////////////////////////////////////////////////////////////////////// // Name: stattext.cpp // Purpose: wxStaticText -// Author: AUTHOR +// Author: David Webster // Modified by: -// Created: 04/01/98 +// Created: 10/17/99 // RCS-ID: $Id$ -// Copyright: (c) AUTHOR -// Licence: wxWindows licence +// Copyright: (c) David Webster +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ -#pragma implementation "stattext.h" -#endif +// For compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" +#ifndef WX_PRECOMP +#include "wx/event.h" #include "wx/app.h" -#include "wx/stattext.h" +#include "wx/brush.h" +#endif +#include "wx/stattext.h" +#include "wx/os2/private.h" #include #if !USE_SHARED_LIBRARY @@ -29,32 +33,105 @@ bool wxStaticText::Create(wxWindow *parent, wxWindowID id, long style, const wxString& name) { - SetName(name); - if (parent) parent->AddChild(this); + SetName(name); + if (parent) parent->AddChild(this); + + SetBackgroundColour(parent->GetBackgroundColour()) ; + SetForegroundColour(parent->GetForegroundColour()) ; - SetBackgroundColour(parent->GetBackgroundColour()) ; - SetForegroundColour(parent->GetForegroundColour()) ; + if ( id == -1 ) + m_windowId = (int)NewControlId(); + else + m_windowId = id; - 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; - m_windowStyle = style; + m_windowStyle = style; - SetFont(parent->GetFont()); + // TODO + SubclassWin(m_hWnd); - // TODO - return FALSE; + SetFont(parent->GetFont()); + SetSize(x, y, width, height); + + return FALSE; } -void wxStaticText::SetSize(int x, int y, int width, int height, int sizeFlags) +wxSize wxStaticText::DoGetBestSize() { - // TODO + wxString text(wxGetWindowText(GetHWND())); + + int widthTextMax = 0, widthLine, + heightTextTotal = 0, heightLine; + + wxString curLine; + for ( const wxChar *pc = text; ; pc++ ) { + if ( *pc == wxT('\n') || *pc == wxT('\0') ) { + GetTextExtent(curLine, &widthLine, &heightLine); + if ( widthLine > widthTextMax ) + widthTextMax = widthLine; + heightTextTotal += heightLine; + + if ( *pc == wxT('\n') ) { + curLine.Empty(); + } + else { + // the end of string + break; + } + } + else { + curLine += *pc; + } + } + + return wxSize(widthTextMax, heightTextTotal); } void wxStaticText::SetLabel(const wxString& label) { // TODO + + // adjust the size of the window to fit to the label (this behaviour is + // backward compatible and generally makes sense but we might want to still + // provide the user a way to disable it) (VZ) + DoSetSize(-1, -1, -1, -1, wxSIZE_AUTO_WIDTH | wxSIZE_AUTO_HEIGHT); +} + +WXHBRUSH wxStaticText::OnCtlColor(WXHDC pDC, WXHWND pWnd, WXUINT nCtlColor, + WXUINT message, WXWPARAM wParam, WXLPARAM lParam) +{ + // TODO: +/* + if (GetParent()->GetTransparentBackground()) + SetBkMode((HDC) pDC, TRANSPARENT); + else + SetBkMode((HDC) pDC, OPAQUE); + + ::SetBkColor((HDC) pDC, RGB(GetBackgroundColour().Red(), GetBackgroundColour().Green(), GetBackgroundColour().Blue())); + ::SetTextColor((HDC) pDC, RGB(GetForegroundColour().Red(), GetForegroundColour().Green(), GetForegroundColour().Blue())); + + wxBrush *backgroundBrush = wxTheBrushList->FindOrCreateBrush(GetBackgroundColour(), wxSOLID); + // Note that this will be cleaned up in wxApp::OnIdle, if backgroundBrush + // has a zero usage count. +// backgroundBrush->RealizeResource(); + return (WXHBRUSH) backgroundBrush->GetResourceHandle(); +*/ + return (WXHBRUSH)0; +} + +MRESULT wxStaticText::OS2WindowProc(HWND hwnd, WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam) +{ + // Ensure that static items get messages. Some controls don't like this + // message to be intercepted (e.g. RichEdit), hence the tests. +// TODO: +/* + if (nMsg == WM_NCHITTEST) + return (long)HTCLIENT; +*/ + return wxWindow::OS2WindowProc(hwnd, nMsg, wParam, lParam); }