X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/570aaadf1ff3f8c3f8ecfea44dbeae64532c82c4..189da67c55cb8ce76725d77e58b76c1fc666d9a6:/src/cocoa/textctrl.mm diff --git a/src/cocoa/textctrl.mm b/src/cocoa/textctrl.mm index e062ea4f42..ba2bc6060d 100644 --- a/src/cocoa/textctrl.mm +++ b/src/cocoa/textctrl.mm @@ -1,24 +1,35 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: cocoa/textctrl.mm +// Name: src/cocoa/textctrl.mm // Purpose: wxTextCtrl // Author: David Elliott // Modified by: // Created: 2003/03/16 -// RCS-ID: $Id: +// RCS-ID: $Id$ // Copyright: (c) 2003 David Elliott -// Licence: wxWindows license +// Licence: wxWidgets licence ///////////////////////////////////////////////////////////////////////////// -#include "wx/app.h" +#include "wx/wxprec.h" + #include "wx/textctrl.h" +#ifndef WX_PRECOMP + #include "wx/app.h" + #include "wx/log.h" +#endif //WX_PRECOMP + #include "wx/cocoa/string.h" +#include "wx/cocoa/autorelease.h" + #import #import +#import -IMPLEMENT_DYNAMIC_CLASS(wxTextCtrl, wxControl) -BEGIN_EVENT_TABLE(wxTextCtrl, wxControl) +#include + +IMPLEMENT_DYNAMIC_CLASS(wxTextCtrl, wxTextCtrlBase) +BEGIN_EVENT_TABLE(wxTextCtrl, wxTextCtrlBase) END_EVENT_TABLE() WX_IMPLEMENT_COCOA_OWNER(wxTextCtrl,NSTextField,NSControl,NSView) @@ -30,21 +41,30 @@ bool wxTextCtrl::Create(wxWindow *parent, wxWindowID winid, const wxValidator& validator, const wxString& name) { + wxAutoNSAutoreleasePool pool; if(!CreateControl(parent,winid,pos,size,style,validator,name)) return false; m_cocoaNSView = NULL; - SetNSTextField([[NSTextField alloc] initWithFrame:NSMakeRect(0,0,30,30)]); + SetNSTextField([[NSTextField alloc] initWithFrame:MakeDefaultNSRect(size)]); [m_cocoaNSView release]; - [GetNSTextField() setStringValue:[NSString stringWithCString:value.c_str()]]; + [GetNSTextField() setStringValue:wxNSStringWithWxString(value)]; + [GetNSControl() sizeToFit]; + NSRect currentFrame = [m_cocoaNSView frame]; + if(currentFrame.size.width < 70) + { + currentFrame.size.width = 70; + [m_cocoaNSView setFrame:currentFrame]; + } if(m_parent) m_parent->CocoaAddChild(this); + SetInitialFrameRect(pos,size); return true; } wxTextCtrl::~wxTextCtrl() { - DisassociateNSTextField(m_cocoaNSView); + DisassociateNSTextField(GetNSTextField()); } void wxTextCtrl::Cocoa_didChangeText(void) @@ -59,6 +79,10 @@ void wxTextCtrl::SetEditable(bool) { } +void wxTextCtrl::MarkDirty() +{ +} + void wxTextCtrl::DiscardEdits() { } @@ -113,6 +137,7 @@ void wxTextCtrl::Replace(long, long, wxString const&) void wxTextCtrl::SetValue(wxString const& value) { + wxAutoNSAutoreleasePool pool; [GetNSTextField() setStringValue: wxNSStringWithWxString(value)]; } @@ -154,7 +179,7 @@ int wxTextCtrl::GetLineLength(long) const return 0; } -long wxTextCtrl::GetLastPosition() const +wxTextPos wxTextCtrl::GetLastPosition() const { return 0; } @@ -181,6 +206,19 @@ bool wxTextCtrl::CanUndo() const wxString wxTextCtrl::GetValue() const { - return wxString([[GetNSTextField() stringValue] lossyCString]); + wxAutoNSAutoreleasePool pool; + return wxStringWithNSString([GetNSTextField() stringValue]); } +wxSize wxTextCtrl::DoGetBestSize() const +{ + wxAutoNSAutoreleasePool pool; + wxASSERT(GetNSControl()); + NSCell *cell = [GetNSControl() cell]; + wxASSERT(cell); + NSSize cellSize = [cell cellSize]; + wxSize size(100,(int)ceil(cellSize.height)); + + wxLogTrace(wxTRACE_COCOA_Window_Size,wxT("wxTextCtrl=%p::DoGetBestSize()==(%d,%d)"),this,size.x,size.y); + return size; +}