#pragma implementation "textctrl.h"
#endif
-#ifdef __UNIX__
+#include "wx/defs.h"
+
+#if wxUSE_TEXTCTRL
+
+#ifdef __DARWIN__
#include <sys/types.h>
#include <sys/stat.h>
#else
#if defined(__BORLANDC__) && !defined(__WIN32__)
#include <alloc.h>
-#elif !defined(__MWERKS__) && !defined(__GNUWIN32) && !defined(__WXMAC_X__)
+#elif !defined(__MWERKS__) && !defined(__GNUWIN32) && !defined(__DARWIN__)
#include <malloc.h>
#endif
MacPreControlCreate( parent , id , "" , pos , mySize ,style, validator , name , &bounds , title ) ;
- m_macControl = UMANewControl( parent->GetMacRootWindow() , &bounds , "\p" , false , 0 , 0 , 1,
+ if ( m_windowStyle & wxTE_MULTILINE )
+ {
+ wxASSERT_MSG( !(m_windowStyle & wxTE_PROCESS_ENTER),
+ wxT("wxTE_PROCESS_ENTER style is ignored for multiline text controls (they always process it)") );
+
+ m_windowStyle |= wxTE_PROCESS_ENTER;
+ }
+
+
+ m_macControl = UMANewControl( parent->GetMacRootWindow() , &bounds , "\p" , true , 0 , 0 , 1,
( style & wxTE_PASSWORD ) ? kControlEditTextPasswordProc : kControlEditTextProc , (long) this ) ;
MacPostControlCreate() ;
int wxTextCtrl::GetNumberOfLines() const
{
- // TODO
- return 0;
+ Size actualsize;
+ UMAGetControlData( m_macControl, 0, ( m_windowStyle & wxTE_PASSWORD ) ? kControlEditTextPasswordTag : kControlEditTextTextTag , 32767 , wxBuffer , &actualsize) ;
+
+ int count = 1;
+ for (int i = 0; i < actualsize; i++)
+ {
+ if (wxBuffer[i] == '\r') count++;
+ }
+
+ return count;
}
long wxTextCtrl::XYToPosition(long x, long y) const
int wxTextCtrl::GetLineLength(long lineNo) const
{
- return GetValue().Length();
+ Size actualsize;
+ UMAGetControlData( m_macControl, 0, ( m_windowStyle & wxTE_PASSWORD ) ? kControlEditTextPasswordTag : kControlEditTextTextTag , 32767 , wxBuffer , &actualsize) ;
+
+ // Find line first
+ int count = 0;
+ for (int i = 0; i < actualsize; i++)
+ {
+ if (count == lineNo)
+ {
+ // Count chars in line then
+ count = 0;
+ for (int j = i; j < actualsize; j++)
+ {
+ count++;
+ if (wxBuffer[j] == '\r') return count;
+ }
+
+ return count;
+ }
+ if (wxBuffer[i] == '\r') count++;
+ }
+
+ return 0;
}
wxString wxTextCtrl::GetLineText(long lineNo) const
{
- return GetValue();
+ Size actualsize;
+ UMAGetControlData( m_macControl, 0, ( m_windowStyle & wxTE_PASSWORD ) ? kControlEditTextPasswordTag : kControlEditTextTextTag , 32767 , wxBuffer , &actualsize) ;
+
+ // Find line first
+ int count = 0;
+ for (int i = 0; i < actualsize; i++)
+ {
+ if (count == lineNo)
+ {
+ // Add chars in line then
+ wxString tmp("");
+
+ for (int j = i; j < actualsize; j++)
+ {
+ if (wxBuffer[j] == '\r')
+ return tmp;
+
+ tmp += wxBuffer[j];
+ }
+
+ return tmp;
+ }
+ if (wxBuffer[i] == '\r') count++;
+ }
+
+ return wxString("");
}
/*
}
if ( panel && panel->GetDefaultItem() )
{
- wxButton *def = panel->GetDefaultItem() ;
- wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, def->GetId() );
- event.SetEventObject(def);
- def->Command(event);
- event.Skip() ;
- return ;
+ wxButton *def = wxDynamicCast(panel->GetDefaultItem(),
+ wxButton);
+ if ( def && def->IsEnabled() )
+ {
+ wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, def->GetId() );
+ event.SetEventObject(def);
+ def->Command(event);
+ return ;
+ }
}
}
//else: multiline controls need Enter for themselves
keychar = short(ev->message & charCodeMask);
keycode = short(ev->message & keyCodeMask) >> 8 ;
UMAHandleControlKey( m_macControl , keycode , keychar , ev->modifiers ) ;
- if ( keychar >= 0x20 || event.KeyCode() == WXK_RETURN)
+ if ( keychar >= 0x20 || event.KeyCode() == WXK_RETURN || event.KeyCode() == WXK_DELETE || event.KeyCode() == WXK_BACK)
{
wxCommandEvent event(wxEVT_COMMAND_TEXT_UPDATED, m_windowId);
event.SetString( GetValue() ) ;
event.Enable( CanRedo() );
}
+#endif
+ // wxUSE_TEXTCTRL