Convert to and from \n and \r in wxMac's text

control so that it always expects \n as in
     all other ports.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@16172 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling
2002-07-14 16:51:35 +00:00
parent dda2e4fdca
commit 29e4a1901a
2 changed files with 502 additions and 472 deletions

View File

@@ -130,7 +130,7 @@ typedef struct {
/* our focus advance override routine */ /* our focus advance override routine */
EventHandlerUPP handlerUPP; EventHandlerUPP handlerUPP;
EventHandlerRef handlerRef; EventHandlerRef handlerRef;
bool fMultiline ; bool fMultiline ;
} STPTextPaneVars; } STPTextPaneVars;
@@ -196,24 +196,24 @@ static pascal void TPPaneDrawProc(ControlRef theControl, ControlPartCode thePart
SetPort((**tpvars).fDrawingEnvironment); SetPort((**tpvars).fDrawingEnvironment);
/* verify our boundary */ /* verify our boundary */
GetControlBounds(theControl, &bounds); GetControlBounds(theControl, &bounds);
if ( ! EqualRect(&bounds, &varsp->fRFocusOutline) ) { if ( ! EqualRect(&bounds, &varsp->fRFocusOutline) ) {
// scrollbar is on the border, we add one // scrollbar is on the border, we add one
Rect oldbounds = varsp->fRFocusOutline ; Rect oldbounds = varsp->fRFocusOutline ;
InsetRect( &oldbounds , -1 , -1 ) ; InsetRect( &oldbounds , -1 , -1 ) ;
InvalWindowRect( GetControlOwner( theControl ) , &oldbounds ) ; InvalWindowRect( GetControlOwner( theControl ) , &oldbounds ) ;
SetRect(&varsp->fRFocusOutline, bounds.left, bounds.top, bounds.right, bounds.bottom); SetRect(&varsp->fRFocusOutline, bounds.left, bounds.top, bounds.right, bounds.bottom);
SetRect(&varsp->fRTextOutline, bounds.left, bounds.top, bounds.right, bounds.bottom); SetRect(&varsp->fRTextOutline, bounds.left, bounds.top, bounds.right, bounds.bottom);
SetRect(&varsp->fRTextArea, bounds.left + 2 , bounds.top + (varsp->fMultiline ? 0 : 2) , SetRect(&varsp->fRTextArea, bounds.left + 2 , bounds.top + (varsp->fMultiline ? 0 : 2) ,
bounds.right - (varsp->fMultiline ? 0 : 2), bounds.bottom - (varsp->fMultiline ? 0 : 2)); bounds.right - (varsp->fMultiline ? 0 : 2), bounds.bottom - (varsp->fMultiline ? 0 : 2));
RectRgn(varsp->fTextBackgroundRgn, &varsp->fRTextOutline); RectRgn(varsp->fTextBackgroundRgn, &varsp->fRTextOutline);
TXNSetFrameBounds( varsp->fTXNRec, varsp->fRTextArea.top, varsp->fRTextArea.left, TXNSetFrameBounds( varsp->fTXNRec, varsp->fRTextArea.top, varsp->fRTextArea.left,
varsp->fRTextArea.bottom, varsp->fRTextArea.right, varsp->fTXNFrame); varsp->fRTextArea.bottom, varsp->fRTextArea.right, varsp->fTXNFrame);
} }
/* update the text region */ /* update the text region */
RGBColor white = { 65535 , 65535 , 65535 } ; RGBColor white = { 65535 , 65535 , 65535 } ;
RGBBackColor( &white ) ; RGBBackColor( &white ) ;
EraseRgn(varsp->fTextBackgroundRgn); EraseRgn(varsp->fTextBackgroundRgn);
TXNDraw(varsp->fTXNRec, NULL); TXNDraw(varsp->fTXNRec, NULL);
/* restore the drawing environment */ /* restore the drawing environment */
@@ -451,42 +451,42 @@ static pascal ControlPartCode TPPaneFocusProc(ControlHandle theControl, ControlF
/* mUPOpenControl initializes a user pane control so it will be drawn /* mUPOpenControl initializes a user pane control so it will be drawn
and will behave as a scrolling text edit field inside of a window. and will behave as a scrolling text edit field inside of a window.
This routine performs all of the initialization steps necessary, This routine performs all of the initialization steps necessary,
except it does not create the user pane control itself. theControl except it does not create the user pane control itself. theControl
should refer to a user pane control that you have either created should refer to a user pane control that you have either created
yourself or extracted from a dialog's control heirarchy using yourself or extracted from a dialog's control heirarchy using
the GetDialogItemAsControl routine. */ the GetDialogItemAsControl routine. */
OSStatus mUPOpenControl(ControlHandle theControl, bool multiline) OSStatus mUPOpenControl(ControlHandle theControl, bool multiline)
{ {
Rect bounds; Rect bounds;
WindowRef theWindow; WindowRef theWindow;
STPTextPaneVars **tpvars, *varsp; STPTextPaneVars **tpvars, *varsp;
OSStatus err; OSStatus err;
RGBColor rgbWhite = {0xFFFF, 0xFFFF, 0xFFFF}; RGBColor rgbWhite = {0xFFFF, 0xFFFF, 0xFFFF};
TXNBackground tback; TXNBackground tback;
/* set up our globals */ /* set up our globals */
if (gTPDrawProc == NULL) gTPDrawProc = NewControlUserPaneDrawUPP(TPPaneDrawProc); if (gTPDrawProc == NULL) gTPDrawProc = NewControlUserPaneDrawUPP(TPPaneDrawProc);
if (gTPHitProc == NULL) gTPHitProc = NewControlUserPaneHitTestUPP(TPPaneHitTestProc); if (gTPHitProc == NULL) gTPHitProc = NewControlUserPaneHitTestUPP(TPPaneHitTestProc);
if (gTPTrackProc == NULL) gTPTrackProc = NewControlUserPaneTrackingUPP(TPPaneTrackingProc); if (gTPTrackProc == NULL) gTPTrackProc = NewControlUserPaneTrackingUPP(TPPaneTrackingProc);
if (gTPIdleProc == NULL) gTPIdleProc = NewControlUserPaneIdleUPP(TPPaneIdleProc); if (gTPIdleProc == NULL) gTPIdleProc = NewControlUserPaneIdleUPP(TPPaneIdleProc);
if (gTPKeyProc == NULL) gTPKeyProc = NewControlUserPaneKeyDownUPP(TPPaneKeyDownProc); if (gTPKeyProc == NULL) gTPKeyProc = NewControlUserPaneKeyDownUPP(TPPaneKeyDownProc);
if (gTPActivateProc == NULL) gTPActivateProc = NewControlUserPaneActivateUPP(TPPaneActivateProc); if (gTPActivateProc == NULL) gTPActivateProc = NewControlUserPaneActivateUPP(TPPaneActivateProc);
if (gTPFocusProc == NULL) gTPFocusProc = NewControlUserPaneFocusUPP(TPPaneFocusProc); if (gTPFocusProc == NULL) gTPFocusProc = NewControlUserPaneFocusUPP(TPPaneFocusProc);
/* allocate our private storage */ /* allocate our private storage */
tpvars = (STPTextPaneVars **) NewHandleClear(sizeof(STPTextPaneVars)); tpvars = (STPTextPaneVars **) NewHandleClear(sizeof(STPTextPaneVars));
SetControlReference(theControl, (long) tpvars); SetControlReference(theControl, (long) tpvars);
HLock((Handle) tpvars); HLock((Handle) tpvars);
varsp = *tpvars; varsp = *tpvars;
/* set the initial settings for our private data */ /* set the initial settings for our private data */
varsp->fMultiline = multiline ; varsp->fMultiline = multiline ;
varsp->fInFocus = false; varsp->fInFocus = false;
varsp->fIsActive = true; varsp->fIsActive = true;
varsp->fTEActive = true; // in order to get a deactivate varsp->fTEActive = true; // in order to get a deactivate
varsp->fUserPaneRec = theControl; varsp->fUserPaneRec = theControl;
theWindow = varsp->fOwner = GetControlOwner(theControl); theWindow = varsp->fOwner = GetControlOwner(theControl);
varsp->fDrawingEnvironment = (GrafPtr) GetWindowPort(theWindow); varsp->fDrawingEnvironment = (GrafPtr) GetWindowPort(theWindow);
@@ -515,26 +515,26 @@ OSStatus mUPOpenControl(ControlHandle theControl, bool multiline)
/* create the new edit field */ /* create the new edit field */
TXNNewObject(NULL, varsp->fOwner, &varsp->fRTextArea, TXNNewObject(NULL, varsp->fOwner, &varsp->fRTextArea,
( multiline ? kTXNWantVScrollBarMask : 0 ) | ( multiline ? kTXNWantVScrollBarMask : 0 ) |
kTXNDontDrawCaretWhenInactiveMask | kTXNDontDrawCaretWhenInactiveMask |
kTXNDontDrawSelectionWhenInactiveMask | kTXNDontDrawSelectionWhenInactiveMask |
kTXNAlwaysWrapAtViewEdgeMask , kTXNAlwaysWrapAtViewEdgeMask ,
kTXNTextEditStyleFrameType, kTXNTextEditStyleFrameType,
kTXNTextensionFile, kTXNTextensionFile,
kTXNSystemDefaultEncoding, kTXNSystemDefaultEncoding,
&varsp->fTXNRec, &varsp->fTXNFrame, (TXNObjectRefcon) tpvars); &varsp->fTXNRec, &varsp->fTXNFrame, (TXNObjectRefcon) tpvars);
Str255 fontName ; Str255 fontName ;
SInt16 fontSize ; SInt16 fontSize ;
Style fontStyle ; Style fontStyle ;
GetThemeFont(kThemeSmallSystemFont , GetApplicationScript() , fontName , &fontSize , &fontStyle ) ; GetThemeFont(kThemeSmallSystemFont , GetApplicationScript() , fontName , &fontSize , &fontStyle ) ;
TXNTypeAttributes typeAttr[] = TXNTypeAttributes typeAttr[] =
{ {
{ kTXNQDFontNameAttribute , kTXNQDFontNameAttributeSize , { (void*) fontName } } , { kTXNQDFontNameAttribute , kTXNQDFontNameAttributeSize , { (void*) fontName } } ,
{ kTXNQDFontSizeAttribute , kTXNFontSizeAttributeSize , { (void*) (fontSize << 16) } } , { kTXNQDFontSizeAttribute , kTXNFontSizeAttributeSize , { (void*) (fontSize << 16) } } ,
{ kTXNQDFontStyleAttribute , kTXNQDFontStyleAttributeSize , { (void*) normal } } , { kTXNQDFontStyleAttribute , kTXNQDFontStyleAttributeSize , { (void*) normal } } ,
} ; } ;
OSStatus status = TXNSetTypeAttributes (varsp->fTXNRec, sizeof( typeAttr ) / sizeof(TXNTypeAttributes) , typeAttr, OSStatus status = TXNSetTypeAttributes (varsp->fTXNRec, sizeof( typeAttr ) / sizeof(TXNTypeAttributes) , typeAttr,
@@ -544,7 +544,7 @@ OSStatus mUPOpenControl(ControlHandle theControl, bool multiline)
tback.bgType = kTXNBackgroundTypeRGB; tback.bgType = kTXNBackgroundTypeRGB;
tback.bg.color = rgbWhite; tback.bg.color = rgbWhite;
TXNSetBackground( varsp->fTXNRec, &tback); TXNSetBackground( varsp->fTXNRec, &tback);
/* unlock our storage */ /* unlock our storage */
HUnlock((Handle) tpvars); HUnlock((Handle) tpvars);
/* perform final activations and setup for our text field. Here, /* perform final activations and setup for our text field. Here,
@@ -624,12 +624,12 @@ bool wxTextCtrl::Create(wxWindow *parent, wxWindowID id,
return FALSE; return FALSE;
wxSize mySize = size ; wxSize mySize = size ;
if ( m_macUsesTXN ) if ( m_macUsesTXN )
{ {
m_macHorizontalBorder = 5 ; // additional pixels around the real control m_macHorizontalBorder = 5 ; // additional pixels around the real control
m_macVerticalBorder = 3 ; m_macVerticalBorder = 3 ;
} }
else else
{ {
m_macHorizontalBorder = 5 ; // additional pixels around the real control m_macHorizontalBorder = 5 ; // additional pixels around the real control
m_macVerticalBorder = 5 ; m_macVerticalBorder = 5 ;
@@ -661,14 +661,14 @@ bool wxTextCtrl::Create(wxWindow *parent, wxWindowID id,
if ( !m_macUsesTXN ) if ( !m_macUsesTXN )
{ {
m_macControl = ::NewControl( MAC_WXHWND(parent->MacGetRootWindow()) , &bounds , "\p" , true , 0 , 0 , 1, m_macControl = ::NewControl( MAC_WXHWND(parent->MacGetRootWindow()) , &bounds , "\p" , true , 0 , 0 , 1,
(style & wxTE_PASSWORD) ? kControlEditTextPasswordProc : kControlEditTextProc , (long) this ) ; (style & wxTE_PASSWORD) ? kControlEditTextPasswordProc : kControlEditTextProc , (long) this ) ;
long size ; long size ;
::GetControlData((ControlHandle) m_macControl , 0, kControlEditTextTEHandleTag , sizeof( TEHandle ) , (char*) &((TEHandle) m_macTE) , &size ) ; ::GetControlData((ControlHandle) m_macControl , 0, kControlEditTextTEHandleTag , sizeof( TEHandle ) , (char*) &((TEHandle) m_macTE) , &size ) ;
} }
else else
{ {
short featurSet; short featurSet;
featurSet = kControlSupportsEmbedding | kControlSupportsFocus // | kControlWantsIdle featurSet = kControlSupportsEmbedding | kControlSupportsFocus // | kControlWantsIdle
@@ -677,31 +677,31 @@ bool wxTextCtrl::Create(wxWindow *parent, wxWindowID id,
/* create the control */ /* create the control */
m_macControl = NewControl(MAC_WXHWND(parent->MacGetRootWindow()), &bounds, "\p", true, featurSet, 0, featurSet, kControlUserPaneProc, 0); m_macControl = NewControl(MAC_WXHWND(parent->MacGetRootWindow()), &bounds, "\p", true, featurSet, 0, featurSet, kControlUserPaneProc, 0);
/* set up the mUP specific features and data */ /* set up the mUP specific features and data */
mUPOpenControl((ControlHandle) m_macControl, m_windowStyle & wxTE_MULTILINE ); mUPOpenControl((ControlHandle) m_macControl, m_windowStyle & wxTE_MULTILINE );
if ( parent ) if ( parent )
{ {
parent->MacGetTopLevelWindow()->MacInstallEventHandler() ; parent->MacGetTopLevelWindow()->MacInstallEventHandler() ;
} }
} }
MacPostControlCreate() ; MacPostControlCreate() ;
wxString value ; wxString value ;
if( wxApp::s_macDefaultEncodingIsPC ) if( wxApp::s_macDefaultEncodingIsPC )
value = wxMacMakeMacStringFromPC( st ) ; value = wxMacMakeMacStringFromPC( st ) ;
else else
value = st ; value = st ;
if ( !m_macUsesTXN ) if ( !m_macUsesTXN )
{ {
::SetControlData( (ControlHandle) m_macControl, 0, ( m_windowStyle & wxTE_PASSWORD ) ? kControlEditTextPasswordTag : kControlEditTextTextTag , value.Length() , (char*) ((const char*)value) ) ; ::SetControlData( (ControlHandle) m_macControl, 0, ( m_windowStyle & wxTE_PASSWORD ) ? kControlEditTextPasswordTag : kControlEditTextTextTag , value.Length() , (char*) ((const char*)value) ) ;
} }
else else
{ {
STPTextPaneVars **tpvars; STPTextPaneVars **tpvars;
/* set up locals */ /* set up locals */
tpvars = (STPTextPaneVars **) GetControlReference((ControlHandle) m_macControl); tpvars = (STPTextPaneVars **) GetControlReference((ControlHandle) m_macControl);
/* set the text in the record */ /* set the text in the record */
TXNSetData( (**tpvars).fTXNRec, kTXNTextData, (void*)value.c_str(), value.Length(), TXNSetData( (**tpvars).fTXNRec, kTXNTextData, (void*)value.c_str(), value.Length(),
kTXNStartOffset, kTXNEndOffset); kTXNStartOffset, kTXNEndOffset);
m_macTXN = (**tpvars).fTXNRec ; m_macTXN = (**tpvars).fTXNRec ;
@@ -715,32 +715,43 @@ bool wxTextCtrl::Create(wxWindow *parent, wxWindowID id,
wxString wxTextCtrl::GetValue() const wxString wxTextCtrl::GetValue() const
{ {
Size actualsize; Size actualsize;
if ( !m_macUsesTXN )
{ if ( !m_macUsesTXN )
::GetControlData( (ControlHandle) m_macControl, 0, ( m_windowStyle & wxTE_PASSWORD ) ? kControlEditTextPasswordTag : kControlEditTextTextTag , 32767 , wxBuffer , &actualsize) ; {
} ::GetControlData( (ControlHandle) m_macControl, 0,
else ( m_windowStyle & wxTE_PASSWORD ) ? kControlEditTextPasswordTag : kControlEditTextTextTag,
{ 32767 , wxBuffer , &actualsize ) ;
Handle theText ; }
OSStatus err = TXNGetDataEncoded( ((TXNObject) m_macTXN), kTXNStartOffset, kTXNEndOffset, &theText , kTXNTextData );
/* all done */
if ( err )
{
actualsize = 0 ;
}
else
{
actualsize = GetHandleSize( theText ) ;
if (actualsize != 0)
strncpy( wxBuffer , *theText , actualsize ) ;
DisposeHandle( theText ) ;
}
}
wxBuffer[actualsize] = 0 ;
if( wxApp::s_macDefaultEncodingIsPC )
return wxMacMakePCStringFromMac( wxBuffer ) ;
else else
return wxString(wxBuffer); {
Handle theText ;
OSStatus err = TXNGetDataEncoded( ((TXNObject) m_macTXN), kTXNStartOffset, kTXNEndOffset, &theText , kTXNTextData );
// all done
if ( err )
{
actualsize = 0 ;
}
else
{
actualsize = GetHandleSize( theText ) ;
if (actualsize != 0)
strncpy( wxBuffer , *theText , actualsize ) ;
DisposeHandle( theText ) ;
}
}
wxBuffer[actualsize] = 0 ;
wxString value;
if( wxApp::s_macDefaultEncodingIsPC )
value = wxMacMakePCStringFromMac( wxBuffer ) ;
else
value = wxBuffer;
value.Replace( "\r", "\n" );
return value;
} }
void wxTextCtrl::GetSelection(long* from, long* to) const void wxTextCtrl::GetSelection(long* from, long* to) const
@@ -758,21 +769,25 @@ void wxTextCtrl::GetSelection(long* from, long* to) const
void wxTextCtrl::SetValue(const wxString& st) void wxTextCtrl::SetValue(const wxString& st)
{ {
wxString value ; wxString value;
if( wxApp::s_macDefaultEncodingIsPC ) if( wxApp::s_macDefaultEncodingIsPC )
value = wxMacMakeMacStringFromPC( st ) ; value = wxMacMakeMacStringFromPC( st ) ;
else else
value = st ; value = st;
if ( !m_macUsesTXN )
{ value.Replace( "\n", "\r" );
::SetControlData((ControlHandle) m_macControl, 0, ( m_windowStyle & wxTE_PASSWORD ) ? kControlEditTextPasswordTag : kControlEditTextTextTag , value.Length() , (char*) ((const char*)value) ) ;
} if ( !m_macUsesTXN )
else {
{ ::SetControlData((ControlHandle) m_macControl, 0, ( m_windowStyle & wxTE_PASSWORD ) ? kControlEditTextPasswordTag : kControlEditTextTextTag , value.Length() , (char*) ((const char*)value) ) ;
TXNSetData( ((TXNObject) m_macTXN), kTXNTextData, (void*)value.c_str(), value.Length(), }
kTXNStartOffset, kTXNEndOffset); else
} {
TXNSetData( ((TXNObject) m_macTXN), kTXNTextData, (void*)value.c_str(), value.Length(),
kTXNStartOffset, kTXNEndOffset);
}
MacRedrawControl() ; MacRedrawControl() ;
} }
@@ -783,17 +798,17 @@ void wxTextCtrl::Copy()
{ {
if ( !m_macUsesTXN ) if ( !m_macUsesTXN )
{ {
TECopy( ((TEHandle) m_macTE) ) ; TECopy( ((TEHandle) m_macTE) ) ;
ClearCurrentScrap(); ClearCurrentScrap();
TEToScrap() ; TEToScrap() ;
MacRedrawControl() ; MacRedrawControl() ;
} }
else else
{ {
ClearCurrentScrap(); ClearCurrentScrap();
TXNCopy((TXNObject)m_macTXN); TXNCopy((TXNObject)m_macTXN);
TXNConvertToPublicScrap(); TXNConvertToPublicScrap();
} }
} }
} }
@@ -803,22 +818,22 @@ void wxTextCtrl::Cut()
{ {
if ( !m_macUsesTXN ) if ( !m_macUsesTXN )
{ {
TECut( ((TEHandle) m_macTE) ) ; TECut( ((TEHandle) m_macTE) ) ;
ClearCurrentScrap(); ClearCurrentScrap();
TEToScrap() ; TEToScrap() ;
MacRedrawControl() ; MacRedrawControl() ;
} }
else else
{ {
ClearCurrentScrap(); ClearCurrentScrap();
TXNCut((TXNObject)m_macTXN); TXNCut((TXNObject)m_macTXN);
TXNConvertToPublicScrap(); TXNConvertToPublicScrap();
} }
wxCommandEvent event(wxEVT_COMMAND_TEXT_UPDATED, m_windowId); wxCommandEvent event(wxEVT_COMMAND_TEXT_UPDATED, m_windowId);
event.SetString( GetValue() ) ; event.SetString( GetValue() ) ;
event.SetEventObject( this ); event.SetEventObject( this );
GetEventHandler()->ProcessEvent(event); GetEventHandler()->ProcessEvent(event);
} }
} }
void wxTextCtrl::Paste() void wxTextCtrl::Paste()
@@ -831,11 +846,11 @@ void wxTextCtrl::Paste()
TEPaste( (TEHandle) m_macTE ) ; TEPaste( (TEHandle) m_macTE ) ;
MacRedrawControl() ; MacRedrawControl() ;
} }
else else
{ {
TXNConvertFromPublicScrap(); TXNConvertFromPublicScrap();
TXNPaste((TXNObject)m_macTXN); TXNPaste((TXNObject)m_macTXN);
} }
wxCommandEvent event(wxEVT_COMMAND_TEXT_UPDATED, m_windowId); wxCommandEvent event(wxEVT_COMMAND_TEXT_UPDATED, m_windowId);
event.SetString( GetValue() ) ; event.SetString( GetValue() ) ;
event.SetEventObject( this ); event.SetEventObject( this );
@@ -876,8 +891,8 @@ bool wxTextCtrl::CanPaste() const
err = GetCurrentScrap( &scrapRef ); err = GetCurrentScrap( &scrapRef );
if ( err != noTypeErr && err != memFullErr ) if ( err != noTypeErr && err != memFullErr )
{ {
ScrapFlavorFlags flavorFlags; ScrapFlavorFlags flavorFlags;
Size byteCount; Size byteCount;
if (( err = GetScrapFlavorFlags( scrapRef, 'TEXT', &flavorFlags )) == noErr) if (( err = GetScrapFlavorFlags( scrapRef, 'TEXT', &flavorFlags )) == noErr)
{ {
@@ -904,9 +919,9 @@ void wxTextCtrl::SetEditable(bool editable)
{ {
m_editable = editable ; m_editable = editable ;
if ( editable ) if ( editable )
UMAActivateControl( (ControlHandle) m_macControl ) ; UMAActivateControl( (ControlHandle) m_macControl ) ;
else else
UMADeactivateControl((ControlHandle) m_macControl ) ; UMADeactivateControl((ControlHandle) m_macControl ) ;
} }
} }
@@ -957,22 +972,22 @@ void wxTextCtrl::Replace(long from, long to, const wxString& value)
{ {
if ( !m_macUsesTXN ) if ( !m_macUsesTXN )
{ {
ControlEditTextSelectionRec selection ; ControlEditTextSelectionRec selection ;
selection.selStart = from ; selection.selStart = from ;
selection.selEnd = to ; selection.selEnd = to ;
::SetControlData((ControlHandle) m_macControl , 0, kControlEditTextSelectionTag , sizeof( selection ) , (char*) &selection ) ; ::SetControlData((ControlHandle) m_macControl , 0, kControlEditTextSelectionTag , sizeof( selection ) , (char*) &selection ) ;
TESetSelect( from , to , ((TEHandle) m_macTE) ) ; TESetSelect( from , to , ((TEHandle) m_macTE) ) ;
TEDelete( ((TEHandle) m_macTE) ) ; TEDelete( ((TEHandle) m_macTE) ) ;
TEInsert( value , value.Length() , ((TEHandle) m_macTE) ) ; TEInsert( value , value.Length() , ((TEHandle) m_macTE) ) ;
} }
else else
{ {
TXNSetSelection( ((TXNObject) m_macTXN) , from , to ) ; TXNSetSelection( ((TXNObject) m_macTXN) , from , to ) ;
TXNClear( ((TXNObject) m_macTXN) ) ; TXNClear( ((TXNObject) m_macTXN) ) ;
TXNSetData( ((TXNObject) m_macTXN), kTXNTextData, (void*)value.c_str(), value.Length(), TXNSetData( ((TXNObject) m_macTXN), kTXNTextData, (void*)value.c_str(), value.Length(),
kTXNUseCurrentSelection, kTXNUseCurrentSelection); kTXNUseCurrentSelection, kTXNUseCurrentSelection);
} }
Refresh() ; Refresh() ;
} }
@@ -980,12 +995,12 @@ void wxTextCtrl::Remove(long from, long to)
{ {
if ( !m_macUsesTXN ) if ( !m_macUsesTXN )
{ {
ControlEditTextSelectionRec selection ; ControlEditTextSelectionRec selection ;
selection.selStart = from ; selection.selStart = from ;
selection.selEnd = to ; selection.selEnd = to ;
::SetControlData( (ControlHandle) m_macControl , 0, kControlEditTextSelectionTag , sizeof( selection ) , (char*) &selection ) ; ::SetControlData( (ControlHandle) m_macControl , 0, kControlEditTextSelectionTag , sizeof( selection ) , (char*) &selection ) ;
TEDelete( ((TEHandle) m_macTE) ) ; TEDelete( ((TEHandle) m_macTE) ) ;
} }
else else
{ {
@@ -1009,14 +1024,14 @@ void wxTextCtrl::SetSelection(long from, long to)
} }
else else
{ {
STPTextPaneVars **tpvars; STPTextPaneVars **tpvars;
/* set up our locals */ /* set up our locals */
tpvars = (STPTextPaneVars **) GetControlReference((ControlHandle) m_macControl); tpvars = (STPTextPaneVars **) GetControlReference((ControlHandle) m_macControl);
/* and our drawing environment as the operation /* and our drawing environment as the operation
may force a redraw in the text area. */ may force a redraw in the text area. */
SetPort((**tpvars).fDrawingEnvironment); SetPort((**tpvars).fDrawingEnvironment);
/* change the selection */ /* change the selection */
TXNSetSelection( (**tpvars).fTXNRec, from, to); TXNSetSelection( (**tpvars).fTXNRec, from, to);
} }
} }
@@ -1033,20 +1048,20 @@ bool wxTextCtrl::LoadFile(const wxString& file)
void wxTextCtrl::WriteText(const wxString& text) void wxTextCtrl::WriteText(const wxString& text)
{ {
wxString value ; wxString value ;
if( wxApp::s_macDefaultEncodingIsPC ) if( wxApp::s_macDefaultEncodingIsPC )
value = wxMacMakeMacStringFromPC( text ) ; value = wxMacMakeMacStringFromPC( text ) ;
else else
value = text ; value = text ;
if ( !m_macUsesTXN ) if ( !m_macUsesTXN )
{ {
TEInsert( value , value.Length() , ((TEHandle) m_macTE) ) ; TEInsert( value , value.Length() , ((TEHandle) m_macTE) ) ;
} }
else else
{ {
TXNSetData( ((TXNObject) m_macTXN), kTXNTextData, (void*) (const char*)value, value.Length(), TXNSetData( ((TXNObject) m_macTXN), kTXNTextData, (void*) (const char*)value, value.Length(),
kTXNUseCurrentSelection, kTXNUseCurrentSelection); kTXNUseCurrentSelection, kTXNUseCurrentSelection);
} }
MacRedrawControl() ; MacRedrawControl() ;
} }
void wxTextCtrl::AppendText(const wxString& text) void wxTextCtrl::AppendText(const wxString& text)
@@ -1063,7 +1078,7 @@ void wxTextCtrl::Clear()
} }
if ( !m_macUsesTXN ) if ( !m_macUsesTXN )
{ {
::SetControlData((ControlHandle) m_macControl, 0, ( m_windowStyle & wxTE_PASSWORD ) ? kControlEditTextPasswordTag : kControlEditTextTextTag , 0 , (char*) ((const char*)NULL) ) ; ::SetControlData((ControlHandle) m_macControl, 0, ( m_windowStyle & wxTE_PASSWORD ) ? kControlEditTextPasswordTag : kControlEditTextTextTag , 0 , (char*) ((const char*)NULL) ) ;
} }
else else
{ {
@@ -1094,14 +1109,14 @@ wxSize wxTextCtrl::DoGetBestSize() const
int wText = 100 ; int wText = 100 ;
int hText; int hText;
if ( m_macUsesTXN ) if ( m_macUsesTXN )
{ {
hText = 17 ; hText = 17 ;
} }
else else
{ {
hText = 13 ; hText = 13 ;
} }
/* /*
int cx, cy; int cx, cy;
wxGetCharSize(GetHWND(), &cx, &cy, &GetFont()); wxGetCharSize(GetHWND(), &cx, &cy, &GetFont());
@@ -1162,9 +1177,9 @@ int wxTextCtrl::GetNumberOfLines() const
wxString content = GetValue() ; wxString content = GetValue() ;
int count = 1; int count = 1;
for (int i = 0; i < content.Length() ; i++) for (int i = 0; i < content.Length() ; i++)
{ {
if (content[i] == '\r') count++; if (content[i] == '\r') count++;
} }
return count; return count;
@@ -1190,25 +1205,25 @@ int wxTextCtrl::GetLineLength(long lineNo) const
{ {
// TODO change this if possible to reflect real lines // TODO change this if possible to reflect real lines
wxString content = GetValue() ; wxString content = GetValue() ;
// Find line first // Find line first
int count = 0; int count = 0;
for (int i = 0; i < content.Length() ; i++) for (int i = 0; i < content.Length() ; i++)
{ {
if (count == lineNo) if (count == lineNo)
{ {
// Count chars in line then // Count chars in line then
count = 0; count = 0;
for (int j = i; j < content.Length(); j++) for (int j = i; j < content.Length(); j++)
{ {
count++; count++;
if (content[j] == '\r') return count; if (content[j] == '\r') return count;
} }
return count; return count;
} }
if (content[i] == '\r') count++; if (content[i] == '\r') count++;
} }
return 0; return 0;
} }
@@ -1217,28 +1232,28 @@ wxString wxTextCtrl::GetLineText(long lineNo) const
// TODO change this if possible to reflect real lines // TODO change this if possible to reflect real lines
wxString content = GetValue() ; wxString content = GetValue() ;
// Find line first // Find line first
int count = 0; int count = 0;
for (int i = 0; i < content.Length() ; i++) for (int i = 0; i < content.Length() ; i++)
{ {
if (count == lineNo) if (count == lineNo)
{ {
// Add chars in line then // Add chars in line then
wxString tmp(""); wxString tmp("");
for (int j = i; j < content.Length(); j++) for (int j = i; j < content.Length(); j++)
{ {
if (content[j] == '\r') if (content[j] == '\r')
return tmp; return tmp;
tmp += content[j]; tmp += content[j];
} }
return tmp; return tmp;
} }
if (content[i] == '\r') count++; if (content[i] == '\r') count++;
} }
return "" ; return "" ;
} }
/* /*
@@ -1355,11 +1370,11 @@ void wxTextCtrl::MacSuperShown( bool show )
if ( (former != m_macControlIsShown) && m_macUsesTXN ) if ( (former != m_macControlIsShown) && m_macUsesTXN )
{ {
if ( m_macControlIsShown ) if ( m_macControlIsShown )
TXNSetFrameBounds( (TXNObject) m_macTXN, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.top, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.left, TXNSetFrameBounds( (TXNObject) m_macTXN, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.top, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.left,
(**(STPTextPaneVars **)m_macTXNvars).fRTextArea.bottom,(**(STPTextPaneVars **)m_macTXNvars).fRTextArea.right, (**(STPTextPaneVars **)m_macTXNvars).fTXNFrame); (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.bottom,(**(STPTextPaneVars **)m_macTXNvars).fRTextArea.right, (**(STPTextPaneVars **)m_macTXNvars).fTXNFrame);
else else
TXNSetFrameBounds( (TXNObject) m_macTXN, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.top + 30000, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.left, TXNSetFrameBounds( (TXNObject) m_macTXN, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.top + 30000, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.left,
(**(STPTextPaneVars **)m_macTXNvars).fRTextArea.bottom + 30000, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.right, (**(STPTextPaneVars **)m_macTXNvars).fTXNFrame); (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.bottom + 30000, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.right, (**(STPTextPaneVars **)m_macTXNvars).fTXNFrame);
} }
} }
@@ -1372,11 +1387,11 @@ bool wxTextCtrl::Show(bool show)
if ( former != m_macControlIsShown ) if ( former != m_macControlIsShown )
{ {
if ( m_macControlIsShown ) if ( m_macControlIsShown )
TXNSetFrameBounds( (TXNObject) m_macTXN, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.top, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.left, TXNSetFrameBounds( (TXNObject) m_macTXN, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.top, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.left,
(**(STPTextPaneVars **)m_macTXNvars).fRTextArea.bottom,(**(STPTextPaneVars **)m_macTXNvars).fRTextArea.right, (**(STPTextPaneVars **)m_macTXNvars).fTXNFrame); (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.bottom,(**(STPTextPaneVars **)m_macTXNvars).fRTextArea.right, (**(STPTextPaneVars **)m_macTXNvars).fTXNFrame);
else else
TXNSetFrameBounds( (TXNObject) m_macTXN, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.top + 30000, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.left, TXNSetFrameBounds( (TXNObject) m_macTXN, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.top + 30000, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.left,
(**(STPTextPaneVars **)m_macTXNvars).fRTextArea.bottom + 30000, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.right, (**(STPTextPaneVars **)m_macTXNvars).fTXNFrame); (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.bottom + 30000, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.right, (**(STPTextPaneVars **)m_macTXNvars).fTXNFrame);
} }
return retval ; return retval ;

View File

@@ -130,7 +130,7 @@ typedef struct {
/* our focus advance override routine */ /* our focus advance override routine */
EventHandlerUPP handlerUPP; EventHandlerUPP handlerUPP;
EventHandlerRef handlerRef; EventHandlerRef handlerRef;
bool fMultiline ; bool fMultiline ;
} STPTextPaneVars; } STPTextPaneVars;
@@ -196,24 +196,24 @@ static pascal void TPPaneDrawProc(ControlRef theControl, ControlPartCode thePart
SetPort((**tpvars).fDrawingEnvironment); SetPort((**tpvars).fDrawingEnvironment);
/* verify our boundary */ /* verify our boundary */
GetControlBounds(theControl, &bounds); GetControlBounds(theControl, &bounds);
if ( ! EqualRect(&bounds, &varsp->fRFocusOutline) ) { if ( ! EqualRect(&bounds, &varsp->fRFocusOutline) ) {
// scrollbar is on the border, we add one // scrollbar is on the border, we add one
Rect oldbounds = varsp->fRFocusOutline ; Rect oldbounds = varsp->fRFocusOutline ;
InsetRect( &oldbounds , -1 , -1 ) ; InsetRect( &oldbounds , -1 , -1 ) ;
InvalWindowRect( GetControlOwner( theControl ) , &oldbounds ) ; InvalWindowRect( GetControlOwner( theControl ) , &oldbounds ) ;
SetRect(&varsp->fRFocusOutline, bounds.left, bounds.top, bounds.right, bounds.bottom); SetRect(&varsp->fRFocusOutline, bounds.left, bounds.top, bounds.right, bounds.bottom);
SetRect(&varsp->fRTextOutline, bounds.left, bounds.top, bounds.right, bounds.bottom); SetRect(&varsp->fRTextOutline, bounds.left, bounds.top, bounds.right, bounds.bottom);
SetRect(&varsp->fRTextArea, bounds.left + 2 , bounds.top + (varsp->fMultiline ? 0 : 2) , SetRect(&varsp->fRTextArea, bounds.left + 2 , bounds.top + (varsp->fMultiline ? 0 : 2) ,
bounds.right - (varsp->fMultiline ? 0 : 2), bounds.bottom - (varsp->fMultiline ? 0 : 2)); bounds.right - (varsp->fMultiline ? 0 : 2), bounds.bottom - (varsp->fMultiline ? 0 : 2));
RectRgn(varsp->fTextBackgroundRgn, &varsp->fRTextOutline); RectRgn(varsp->fTextBackgroundRgn, &varsp->fRTextOutline);
TXNSetFrameBounds( varsp->fTXNRec, varsp->fRTextArea.top, varsp->fRTextArea.left, TXNSetFrameBounds( varsp->fTXNRec, varsp->fRTextArea.top, varsp->fRTextArea.left,
varsp->fRTextArea.bottom, varsp->fRTextArea.right, varsp->fTXNFrame); varsp->fRTextArea.bottom, varsp->fRTextArea.right, varsp->fTXNFrame);
} }
/* update the text region */ /* update the text region */
RGBColor white = { 65535 , 65535 , 65535 } ; RGBColor white = { 65535 , 65535 , 65535 } ;
RGBBackColor( &white ) ; RGBBackColor( &white ) ;
EraseRgn(varsp->fTextBackgroundRgn); EraseRgn(varsp->fTextBackgroundRgn);
TXNDraw(varsp->fTXNRec, NULL); TXNDraw(varsp->fTXNRec, NULL);
/* restore the drawing environment */ /* restore the drawing environment */
@@ -451,42 +451,42 @@ static pascal ControlPartCode TPPaneFocusProc(ControlHandle theControl, ControlF
/* mUPOpenControl initializes a user pane control so it will be drawn /* mUPOpenControl initializes a user pane control so it will be drawn
and will behave as a scrolling text edit field inside of a window. and will behave as a scrolling text edit field inside of a window.
This routine performs all of the initialization steps necessary, This routine performs all of the initialization steps necessary,
except it does not create the user pane control itself. theControl except it does not create the user pane control itself. theControl
should refer to a user pane control that you have either created should refer to a user pane control that you have either created
yourself or extracted from a dialog's control heirarchy using yourself or extracted from a dialog's control heirarchy using
the GetDialogItemAsControl routine. */ the GetDialogItemAsControl routine. */
OSStatus mUPOpenControl(ControlHandle theControl, bool multiline) OSStatus mUPOpenControl(ControlHandle theControl, bool multiline)
{ {
Rect bounds; Rect bounds;
WindowRef theWindow; WindowRef theWindow;
STPTextPaneVars **tpvars, *varsp; STPTextPaneVars **tpvars, *varsp;
OSStatus err; OSStatus err;
RGBColor rgbWhite = {0xFFFF, 0xFFFF, 0xFFFF}; RGBColor rgbWhite = {0xFFFF, 0xFFFF, 0xFFFF};
TXNBackground tback; TXNBackground tback;
/* set up our globals */ /* set up our globals */
if (gTPDrawProc == NULL) gTPDrawProc = NewControlUserPaneDrawUPP(TPPaneDrawProc); if (gTPDrawProc == NULL) gTPDrawProc = NewControlUserPaneDrawUPP(TPPaneDrawProc);
if (gTPHitProc == NULL) gTPHitProc = NewControlUserPaneHitTestUPP(TPPaneHitTestProc); if (gTPHitProc == NULL) gTPHitProc = NewControlUserPaneHitTestUPP(TPPaneHitTestProc);
if (gTPTrackProc == NULL) gTPTrackProc = NewControlUserPaneTrackingUPP(TPPaneTrackingProc); if (gTPTrackProc == NULL) gTPTrackProc = NewControlUserPaneTrackingUPP(TPPaneTrackingProc);
if (gTPIdleProc == NULL) gTPIdleProc = NewControlUserPaneIdleUPP(TPPaneIdleProc); if (gTPIdleProc == NULL) gTPIdleProc = NewControlUserPaneIdleUPP(TPPaneIdleProc);
if (gTPKeyProc == NULL) gTPKeyProc = NewControlUserPaneKeyDownUPP(TPPaneKeyDownProc); if (gTPKeyProc == NULL) gTPKeyProc = NewControlUserPaneKeyDownUPP(TPPaneKeyDownProc);
if (gTPActivateProc == NULL) gTPActivateProc = NewControlUserPaneActivateUPP(TPPaneActivateProc); if (gTPActivateProc == NULL) gTPActivateProc = NewControlUserPaneActivateUPP(TPPaneActivateProc);
if (gTPFocusProc == NULL) gTPFocusProc = NewControlUserPaneFocusUPP(TPPaneFocusProc); if (gTPFocusProc == NULL) gTPFocusProc = NewControlUserPaneFocusUPP(TPPaneFocusProc);
/* allocate our private storage */ /* allocate our private storage */
tpvars = (STPTextPaneVars **) NewHandleClear(sizeof(STPTextPaneVars)); tpvars = (STPTextPaneVars **) NewHandleClear(sizeof(STPTextPaneVars));
SetControlReference(theControl, (long) tpvars); SetControlReference(theControl, (long) tpvars);
HLock((Handle) tpvars); HLock((Handle) tpvars);
varsp = *tpvars; varsp = *tpvars;
/* set the initial settings for our private data */ /* set the initial settings for our private data */
varsp->fMultiline = multiline ; varsp->fMultiline = multiline ;
varsp->fInFocus = false; varsp->fInFocus = false;
varsp->fIsActive = true; varsp->fIsActive = true;
varsp->fTEActive = true; // in order to get a deactivate varsp->fTEActive = true; // in order to get a deactivate
varsp->fUserPaneRec = theControl; varsp->fUserPaneRec = theControl;
theWindow = varsp->fOwner = GetControlOwner(theControl); theWindow = varsp->fOwner = GetControlOwner(theControl);
varsp->fDrawingEnvironment = (GrafPtr) GetWindowPort(theWindow); varsp->fDrawingEnvironment = (GrafPtr) GetWindowPort(theWindow);
@@ -515,26 +515,26 @@ OSStatus mUPOpenControl(ControlHandle theControl, bool multiline)
/* create the new edit field */ /* create the new edit field */
TXNNewObject(NULL, varsp->fOwner, &varsp->fRTextArea, TXNNewObject(NULL, varsp->fOwner, &varsp->fRTextArea,
( multiline ? kTXNWantVScrollBarMask : 0 ) | ( multiline ? kTXNWantVScrollBarMask : 0 ) |
kTXNDontDrawCaretWhenInactiveMask | kTXNDontDrawCaretWhenInactiveMask |
kTXNDontDrawSelectionWhenInactiveMask | kTXNDontDrawSelectionWhenInactiveMask |
kTXNAlwaysWrapAtViewEdgeMask , kTXNAlwaysWrapAtViewEdgeMask ,
kTXNTextEditStyleFrameType, kTXNTextEditStyleFrameType,
kTXNTextensionFile, kTXNTextensionFile,
kTXNSystemDefaultEncoding, kTXNSystemDefaultEncoding,
&varsp->fTXNRec, &varsp->fTXNFrame, (TXNObjectRefcon) tpvars); &varsp->fTXNRec, &varsp->fTXNFrame, (TXNObjectRefcon) tpvars);
Str255 fontName ; Str255 fontName ;
SInt16 fontSize ; SInt16 fontSize ;
Style fontStyle ; Style fontStyle ;
GetThemeFont(kThemeSmallSystemFont , GetApplicationScript() , fontName , &fontSize , &fontStyle ) ; GetThemeFont(kThemeSmallSystemFont , GetApplicationScript() , fontName , &fontSize , &fontStyle ) ;
TXNTypeAttributes typeAttr[] = TXNTypeAttributes typeAttr[] =
{ {
{ kTXNQDFontNameAttribute , kTXNQDFontNameAttributeSize , { (void*) fontName } } , { kTXNQDFontNameAttribute , kTXNQDFontNameAttributeSize , { (void*) fontName } } ,
{ kTXNQDFontSizeAttribute , kTXNFontSizeAttributeSize , { (void*) (fontSize << 16) } } , { kTXNQDFontSizeAttribute , kTXNFontSizeAttributeSize , { (void*) (fontSize << 16) } } ,
{ kTXNQDFontStyleAttribute , kTXNQDFontStyleAttributeSize , { (void*) normal } } , { kTXNQDFontStyleAttribute , kTXNQDFontStyleAttributeSize , { (void*) normal } } ,
} ; } ;
OSStatus status = TXNSetTypeAttributes (varsp->fTXNRec, sizeof( typeAttr ) / sizeof(TXNTypeAttributes) , typeAttr, OSStatus status = TXNSetTypeAttributes (varsp->fTXNRec, sizeof( typeAttr ) / sizeof(TXNTypeAttributes) , typeAttr,
@@ -544,7 +544,7 @@ OSStatus mUPOpenControl(ControlHandle theControl, bool multiline)
tback.bgType = kTXNBackgroundTypeRGB; tback.bgType = kTXNBackgroundTypeRGB;
tback.bg.color = rgbWhite; tback.bg.color = rgbWhite;
TXNSetBackground( varsp->fTXNRec, &tback); TXNSetBackground( varsp->fTXNRec, &tback);
/* unlock our storage */ /* unlock our storage */
HUnlock((Handle) tpvars); HUnlock((Handle) tpvars);
/* perform final activations and setup for our text field. Here, /* perform final activations and setup for our text field. Here,
@@ -624,12 +624,12 @@ bool wxTextCtrl::Create(wxWindow *parent, wxWindowID id,
return FALSE; return FALSE;
wxSize mySize = size ; wxSize mySize = size ;
if ( m_macUsesTXN ) if ( m_macUsesTXN )
{ {
m_macHorizontalBorder = 5 ; // additional pixels around the real control m_macHorizontalBorder = 5 ; // additional pixels around the real control
m_macVerticalBorder = 3 ; m_macVerticalBorder = 3 ;
} }
else else
{ {
m_macHorizontalBorder = 5 ; // additional pixels around the real control m_macHorizontalBorder = 5 ; // additional pixels around the real control
m_macVerticalBorder = 5 ; m_macVerticalBorder = 5 ;
@@ -661,14 +661,14 @@ bool wxTextCtrl::Create(wxWindow *parent, wxWindowID id,
if ( !m_macUsesTXN ) if ( !m_macUsesTXN )
{ {
m_macControl = ::NewControl( MAC_WXHWND(parent->MacGetRootWindow()) , &bounds , "\p" , true , 0 , 0 , 1, m_macControl = ::NewControl( MAC_WXHWND(parent->MacGetRootWindow()) , &bounds , "\p" , true , 0 , 0 , 1,
(style & wxTE_PASSWORD) ? kControlEditTextPasswordProc : kControlEditTextProc , (long) this ) ; (style & wxTE_PASSWORD) ? kControlEditTextPasswordProc : kControlEditTextProc , (long) this ) ;
long size ; long size ;
::GetControlData((ControlHandle) m_macControl , 0, kControlEditTextTEHandleTag , sizeof( TEHandle ) , (char*) &((TEHandle) m_macTE) , &size ) ; ::GetControlData((ControlHandle) m_macControl , 0, kControlEditTextTEHandleTag , sizeof( TEHandle ) , (char*) &((TEHandle) m_macTE) , &size ) ;
} }
else else
{ {
short featurSet; short featurSet;
featurSet = kControlSupportsEmbedding | kControlSupportsFocus // | kControlWantsIdle featurSet = kControlSupportsEmbedding | kControlSupportsFocus // | kControlWantsIdle
@@ -677,31 +677,31 @@ bool wxTextCtrl::Create(wxWindow *parent, wxWindowID id,
/* create the control */ /* create the control */
m_macControl = NewControl(MAC_WXHWND(parent->MacGetRootWindow()), &bounds, "\p", true, featurSet, 0, featurSet, kControlUserPaneProc, 0); m_macControl = NewControl(MAC_WXHWND(parent->MacGetRootWindow()), &bounds, "\p", true, featurSet, 0, featurSet, kControlUserPaneProc, 0);
/* set up the mUP specific features and data */ /* set up the mUP specific features and data */
mUPOpenControl((ControlHandle) m_macControl, m_windowStyle & wxTE_MULTILINE ); mUPOpenControl((ControlHandle) m_macControl, m_windowStyle & wxTE_MULTILINE );
if ( parent ) if ( parent )
{ {
parent->MacGetTopLevelWindow()->MacInstallEventHandler() ; parent->MacGetTopLevelWindow()->MacInstallEventHandler() ;
} }
} }
MacPostControlCreate() ; MacPostControlCreate() ;
wxString value ; wxString value ;
if( wxApp::s_macDefaultEncodingIsPC ) if( wxApp::s_macDefaultEncodingIsPC )
value = wxMacMakeMacStringFromPC( st ) ; value = wxMacMakeMacStringFromPC( st ) ;
else else
value = st ; value = st ;
if ( !m_macUsesTXN ) if ( !m_macUsesTXN )
{ {
::SetControlData( (ControlHandle) m_macControl, 0, ( m_windowStyle & wxTE_PASSWORD ) ? kControlEditTextPasswordTag : kControlEditTextTextTag , value.Length() , (char*) ((const char*)value) ) ; ::SetControlData( (ControlHandle) m_macControl, 0, ( m_windowStyle & wxTE_PASSWORD ) ? kControlEditTextPasswordTag : kControlEditTextTextTag , value.Length() , (char*) ((const char*)value) ) ;
} }
else else
{ {
STPTextPaneVars **tpvars; STPTextPaneVars **tpvars;
/* set up locals */ /* set up locals */
tpvars = (STPTextPaneVars **) GetControlReference((ControlHandle) m_macControl); tpvars = (STPTextPaneVars **) GetControlReference((ControlHandle) m_macControl);
/* set the text in the record */ /* set the text in the record */
TXNSetData( (**tpvars).fTXNRec, kTXNTextData, (void*)value.c_str(), value.Length(), TXNSetData( (**tpvars).fTXNRec, kTXNTextData, (void*)value.c_str(), value.Length(),
kTXNStartOffset, kTXNEndOffset); kTXNStartOffset, kTXNEndOffset);
m_macTXN = (**tpvars).fTXNRec ; m_macTXN = (**tpvars).fTXNRec ;
@@ -715,32 +715,43 @@ bool wxTextCtrl::Create(wxWindow *parent, wxWindowID id,
wxString wxTextCtrl::GetValue() const wxString wxTextCtrl::GetValue() const
{ {
Size actualsize; Size actualsize;
if ( !m_macUsesTXN )
{ if ( !m_macUsesTXN )
::GetControlData( (ControlHandle) m_macControl, 0, ( m_windowStyle & wxTE_PASSWORD ) ? kControlEditTextPasswordTag : kControlEditTextTextTag , 32767 , wxBuffer , &actualsize) ; {
} ::GetControlData( (ControlHandle) m_macControl, 0,
else ( m_windowStyle & wxTE_PASSWORD ) ? kControlEditTextPasswordTag : kControlEditTextTextTag,
{ 32767 , wxBuffer , &actualsize ) ;
Handle theText ; }
OSStatus err = TXNGetDataEncoded( ((TXNObject) m_macTXN), kTXNStartOffset, kTXNEndOffset, &theText , kTXNTextData );
/* all done */
if ( err )
{
actualsize = 0 ;
}
else
{
actualsize = GetHandleSize( theText ) ;
if (actualsize != 0)
strncpy( wxBuffer , *theText , actualsize ) ;
DisposeHandle( theText ) ;
}
}
wxBuffer[actualsize] = 0 ;
if( wxApp::s_macDefaultEncodingIsPC )
return wxMacMakePCStringFromMac( wxBuffer ) ;
else else
return wxString(wxBuffer); {
Handle theText ;
OSStatus err = TXNGetDataEncoded( ((TXNObject) m_macTXN), kTXNStartOffset, kTXNEndOffset, &theText , kTXNTextData );
// all done
if ( err )
{
actualsize = 0 ;
}
else
{
actualsize = GetHandleSize( theText ) ;
if (actualsize != 0)
strncpy( wxBuffer , *theText , actualsize ) ;
DisposeHandle( theText ) ;
}
}
wxBuffer[actualsize] = 0 ;
wxString value;
if( wxApp::s_macDefaultEncodingIsPC )
value = wxMacMakePCStringFromMac( wxBuffer ) ;
else
value = wxBuffer;
value.Replace( "\r", "\n" );
return value;
} }
void wxTextCtrl::GetSelection(long* from, long* to) const void wxTextCtrl::GetSelection(long* from, long* to) const
@@ -758,21 +769,25 @@ void wxTextCtrl::GetSelection(long* from, long* to) const
void wxTextCtrl::SetValue(const wxString& st) void wxTextCtrl::SetValue(const wxString& st)
{ {
wxString value ; wxString value;
if( wxApp::s_macDefaultEncodingIsPC ) if( wxApp::s_macDefaultEncodingIsPC )
value = wxMacMakeMacStringFromPC( st ) ; value = wxMacMakeMacStringFromPC( st ) ;
else else
value = st ; value = st;
if ( !m_macUsesTXN )
{ value.Replace( "\n", "\r" );
::SetControlData((ControlHandle) m_macControl, 0, ( m_windowStyle & wxTE_PASSWORD ) ? kControlEditTextPasswordTag : kControlEditTextTextTag , value.Length() , (char*) ((const char*)value) ) ;
} if ( !m_macUsesTXN )
else {
{ ::SetControlData((ControlHandle) m_macControl, 0, ( m_windowStyle & wxTE_PASSWORD ) ? kControlEditTextPasswordTag : kControlEditTextTextTag , value.Length() , (char*) ((const char*)value) ) ;
TXNSetData( ((TXNObject) m_macTXN), kTXNTextData, (void*)value.c_str(), value.Length(), }
kTXNStartOffset, kTXNEndOffset); else
} {
TXNSetData( ((TXNObject) m_macTXN), kTXNTextData, (void*)value.c_str(), value.Length(),
kTXNStartOffset, kTXNEndOffset);
}
MacRedrawControl() ; MacRedrawControl() ;
} }
@@ -783,17 +798,17 @@ void wxTextCtrl::Copy()
{ {
if ( !m_macUsesTXN ) if ( !m_macUsesTXN )
{ {
TECopy( ((TEHandle) m_macTE) ) ; TECopy( ((TEHandle) m_macTE) ) ;
ClearCurrentScrap(); ClearCurrentScrap();
TEToScrap() ; TEToScrap() ;
MacRedrawControl() ; MacRedrawControl() ;
} }
else else
{ {
ClearCurrentScrap(); ClearCurrentScrap();
TXNCopy((TXNObject)m_macTXN); TXNCopy((TXNObject)m_macTXN);
TXNConvertToPublicScrap(); TXNConvertToPublicScrap();
} }
} }
} }
@@ -803,22 +818,22 @@ void wxTextCtrl::Cut()
{ {
if ( !m_macUsesTXN ) if ( !m_macUsesTXN )
{ {
TECut( ((TEHandle) m_macTE) ) ; TECut( ((TEHandle) m_macTE) ) ;
ClearCurrentScrap(); ClearCurrentScrap();
TEToScrap() ; TEToScrap() ;
MacRedrawControl() ; MacRedrawControl() ;
} }
else else
{ {
ClearCurrentScrap(); ClearCurrentScrap();
TXNCut((TXNObject)m_macTXN); TXNCut((TXNObject)m_macTXN);
TXNConvertToPublicScrap(); TXNConvertToPublicScrap();
} }
wxCommandEvent event(wxEVT_COMMAND_TEXT_UPDATED, m_windowId); wxCommandEvent event(wxEVT_COMMAND_TEXT_UPDATED, m_windowId);
event.SetString( GetValue() ) ; event.SetString( GetValue() ) ;
event.SetEventObject( this ); event.SetEventObject( this );
GetEventHandler()->ProcessEvent(event); GetEventHandler()->ProcessEvent(event);
} }
} }
void wxTextCtrl::Paste() void wxTextCtrl::Paste()
@@ -831,11 +846,11 @@ void wxTextCtrl::Paste()
TEPaste( (TEHandle) m_macTE ) ; TEPaste( (TEHandle) m_macTE ) ;
MacRedrawControl() ; MacRedrawControl() ;
} }
else else
{ {
TXNConvertFromPublicScrap(); TXNConvertFromPublicScrap();
TXNPaste((TXNObject)m_macTXN); TXNPaste((TXNObject)m_macTXN);
} }
wxCommandEvent event(wxEVT_COMMAND_TEXT_UPDATED, m_windowId); wxCommandEvent event(wxEVT_COMMAND_TEXT_UPDATED, m_windowId);
event.SetString( GetValue() ) ; event.SetString( GetValue() ) ;
event.SetEventObject( this ); event.SetEventObject( this );
@@ -876,8 +891,8 @@ bool wxTextCtrl::CanPaste() const
err = GetCurrentScrap( &scrapRef ); err = GetCurrentScrap( &scrapRef );
if ( err != noTypeErr && err != memFullErr ) if ( err != noTypeErr && err != memFullErr )
{ {
ScrapFlavorFlags flavorFlags; ScrapFlavorFlags flavorFlags;
Size byteCount; Size byteCount;
if (( err = GetScrapFlavorFlags( scrapRef, 'TEXT', &flavorFlags )) == noErr) if (( err = GetScrapFlavorFlags( scrapRef, 'TEXT', &flavorFlags )) == noErr)
{ {
@@ -904,9 +919,9 @@ void wxTextCtrl::SetEditable(bool editable)
{ {
m_editable = editable ; m_editable = editable ;
if ( editable ) if ( editable )
UMAActivateControl( (ControlHandle) m_macControl ) ; UMAActivateControl( (ControlHandle) m_macControl ) ;
else else
UMADeactivateControl((ControlHandle) m_macControl ) ; UMADeactivateControl((ControlHandle) m_macControl ) ;
} }
} }
@@ -957,22 +972,22 @@ void wxTextCtrl::Replace(long from, long to, const wxString& value)
{ {
if ( !m_macUsesTXN ) if ( !m_macUsesTXN )
{ {
ControlEditTextSelectionRec selection ; ControlEditTextSelectionRec selection ;
selection.selStart = from ; selection.selStart = from ;
selection.selEnd = to ; selection.selEnd = to ;
::SetControlData((ControlHandle) m_macControl , 0, kControlEditTextSelectionTag , sizeof( selection ) , (char*) &selection ) ; ::SetControlData((ControlHandle) m_macControl , 0, kControlEditTextSelectionTag , sizeof( selection ) , (char*) &selection ) ;
TESetSelect( from , to , ((TEHandle) m_macTE) ) ; TESetSelect( from , to , ((TEHandle) m_macTE) ) ;
TEDelete( ((TEHandle) m_macTE) ) ; TEDelete( ((TEHandle) m_macTE) ) ;
TEInsert( value , value.Length() , ((TEHandle) m_macTE) ) ; TEInsert( value , value.Length() , ((TEHandle) m_macTE) ) ;
} }
else else
{ {
TXNSetSelection( ((TXNObject) m_macTXN) , from , to ) ; TXNSetSelection( ((TXNObject) m_macTXN) , from , to ) ;
TXNClear( ((TXNObject) m_macTXN) ) ; TXNClear( ((TXNObject) m_macTXN) ) ;
TXNSetData( ((TXNObject) m_macTXN), kTXNTextData, (void*)value.c_str(), value.Length(), TXNSetData( ((TXNObject) m_macTXN), kTXNTextData, (void*)value.c_str(), value.Length(),
kTXNUseCurrentSelection, kTXNUseCurrentSelection); kTXNUseCurrentSelection, kTXNUseCurrentSelection);
} }
Refresh() ; Refresh() ;
} }
@@ -980,12 +995,12 @@ void wxTextCtrl::Remove(long from, long to)
{ {
if ( !m_macUsesTXN ) if ( !m_macUsesTXN )
{ {
ControlEditTextSelectionRec selection ; ControlEditTextSelectionRec selection ;
selection.selStart = from ; selection.selStart = from ;
selection.selEnd = to ; selection.selEnd = to ;
::SetControlData( (ControlHandle) m_macControl , 0, kControlEditTextSelectionTag , sizeof( selection ) , (char*) &selection ) ; ::SetControlData( (ControlHandle) m_macControl , 0, kControlEditTextSelectionTag , sizeof( selection ) , (char*) &selection ) ;
TEDelete( ((TEHandle) m_macTE) ) ; TEDelete( ((TEHandle) m_macTE) ) ;
} }
else else
{ {
@@ -1009,14 +1024,14 @@ void wxTextCtrl::SetSelection(long from, long to)
} }
else else
{ {
STPTextPaneVars **tpvars; STPTextPaneVars **tpvars;
/* set up our locals */ /* set up our locals */
tpvars = (STPTextPaneVars **) GetControlReference((ControlHandle) m_macControl); tpvars = (STPTextPaneVars **) GetControlReference((ControlHandle) m_macControl);
/* and our drawing environment as the operation /* and our drawing environment as the operation
may force a redraw in the text area. */ may force a redraw in the text area. */
SetPort((**tpvars).fDrawingEnvironment); SetPort((**tpvars).fDrawingEnvironment);
/* change the selection */ /* change the selection */
TXNSetSelection( (**tpvars).fTXNRec, from, to); TXNSetSelection( (**tpvars).fTXNRec, from, to);
} }
} }
@@ -1033,20 +1048,20 @@ bool wxTextCtrl::LoadFile(const wxString& file)
void wxTextCtrl::WriteText(const wxString& text) void wxTextCtrl::WriteText(const wxString& text)
{ {
wxString value ; wxString value ;
if( wxApp::s_macDefaultEncodingIsPC ) if( wxApp::s_macDefaultEncodingIsPC )
value = wxMacMakeMacStringFromPC( text ) ; value = wxMacMakeMacStringFromPC( text ) ;
else else
value = text ; value = text ;
if ( !m_macUsesTXN ) if ( !m_macUsesTXN )
{ {
TEInsert( value , value.Length() , ((TEHandle) m_macTE) ) ; TEInsert( value , value.Length() , ((TEHandle) m_macTE) ) ;
} }
else else
{ {
TXNSetData( ((TXNObject) m_macTXN), kTXNTextData, (void*) (const char*)value, value.Length(), TXNSetData( ((TXNObject) m_macTXN), kTXNTextData, (void*) (const char*)value, value.Length(),
kTXNUseCurrentSelection, kTXNUseCurrentSelection); kTXNUseCurrentSelection, kTXNUseCurrentSelection);
} }
MacRedrawControl() ; MacRedrawControl() ;
} }
void wxTextCtrl::AppendText(const wxString& text) void wxTextCtrl::AppendText(const wxString& text)
@@ -1063,7 +1078,7 @@ void wxTextCtrl::Clear()
} }
if ( !m_macUsesTXN ) if ( !m_macUsesTXN )
{ {
::SetControlData((ControlHandle) m_macControl, 0, ( m_windowStyle & wxTE_PASSWORD ) ? kControlEditTextPasswordTag : kControlEditTextTextTag , 0 , (char*) ((const char*)NULL) ) ; ::SetControlData((ControlHandle) m_macControl, 0, ( m_windowStyle & wxTE_PASSWORD ) ? kControlEditTextPasswordTag : kControlEditTextTextTag , 0 , (char*) ((const char*)NULL) ) ;
} }
else else
{ {
@@ -1094,14 +1109,14 @@ wxSize wxTextCtrl::DoGetBestSize() const
int wText = 100 ; int wText = 100 ;
int hText; int hText;
if ( m_macUsesTXN ) if ( m_macUsesTXN )
{ {
hText = 17 ; hText = 17 ;
} }
else else
{ {
hText = 13 ; hText = 13 ;
} }
/* /*
int cx, cy; int cx, cy;
wxGetCharSize(GetHWND(), &cx, &cy, &GetFont()); wxGetCharSize(GetHWND(), &cx, &cy, &GetFont());
@@ -1162,9 +1177,9 @@ int wxTextCtrl::GetNumberOfLines() const
wxString content = GetValue() ; wxString content = GetValue() ;
int count = 1; int count = 1;
for (int i = 0; i < content.Length() ; i++) for (int i = 0; i < content.Length() ; i++)
{ {
if (content[i] == '\r') count++; if (content[i] == '\r') count++;
} }
return count; return count;
@@ -1190,25 +1205,25 @@ int wxTextCtrl::GetLineLength(long lineNo) const
{ {
// TODO change this if possible to reflect real lines // TODO change this if possible to reflect real lines
wxString content = GetValue() ; wxString content = GetValue() ;
// Find line first // Find line first
int count = 0; int count = 0;
for (int i = 0; i < content.Length() ; i++) for (int i = 0; i < content.Length() ; i++)
{ {
if (count == lineNo) if (count == lineNo)
{ {
// Count chars in line then // Count chars in line then
count = 0; count = 0;
for (int j = i; j < content.Length(); j++) for (int j = i; j < content.Length(); j++)
{ {
count++; count++;
if (content[j] == '\r') return count; if (content[j] == '\r') return count;
} }
return count; return count;
} }
if (content[i] == '\r') count++; if (content[i] == '\r') count++;
} }
return 0; return 0;
} }
@@ -1217,28 +1232,28 @@ wxString wxTextCtrl::GetLineText(long lineNo) const
// TODO change this if possible to reflect real lines // TODO change this if possible to reflect real lines
wxString content = GetValue() ; wxString content = GetValue() ;
// Find line first // Find line first
int count = 0; int count = 0;
for (int i = 0; i < content.Length() ; i++) for (int i = 0; i < content.Length() ; i++)
{ {
if (count == lineNo) if (count == lineNo)
{ {
// Add chars in line then // Add chars in line then
wxString tmp(""); wxString tmp("");
for (int j = i; j < content.Length(); j++) for (int j = i; j < content.Length(); j++)
{ {
if (content[j] == '\r') if (content[j] == '\r')
return tmp; return tmp;
tmp += content[j]; tmp += content[j];
} }
return tmp; return tmp;
} }
if (content[i] == '\r') count++; if (content[i] == '\r') count++;
} }
return "" ; return "" ;
} }
/* /*
@@ -1355,11 +1370,11 @@ void wxTextCtrl::MacSuperShown( bool show )
if ( (former != m_macControlIsShown) && m_macUsesTXN ) if ( (former != m_macControlIsShown) && m_macUsesTXN )
{ {
if ( m_macControlIsShown ) if ( m_macControlIsShown )
TXNSetFrameBounds( (TXNObject) m_macTXN, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.top, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.left, TXNSetFrameBounds( (TXNObject) m_macTXN, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.top, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.left,
(**(STPTextPaneVars **)m_macTXNvars).fRTextArea.bottom,(**(STPTextPaneVars **)m_macTXNvars).fRTextArea.right, (**(STPTextPaneVars **)m_macTXNvars).fTXNFrame); (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.bottom,(**(STPTextPaneVars **)m_macTXNvars).fRTextArea.right, (**(STPTextPaneVars **)m_macTXNvars).fTXNFrame);
else else
TXNSetFrameBounds( (TXNObject) m_macTXN, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.top + 30000, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.left, TXNSetFrameBounds( (TXNObject) m_macTXN, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.top + 30000, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.left,
(**(STPTextPaneVars **)m_macTXNvars).fRTextArea.bottom + 30000, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.right, (**(STPTextPaneVars **)m_macTXNvars).fTXNFrame); (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.bottom + 30000, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.right, (**(STPTextPaneVars **)m_macTXNvars).fTXNFrame);
} }
} }
@@ -1372,11 +1387,11 @@ bool wxTextCtrl::Show(bool show)
if ( former != m_macControlIsShown ) if ( former != m_macControlIsShown )
{ {
if ( m_macControlIsShown ) if ( m_macControlIsShown )
TXNSetFrameBounds( (TXNObject) m_macTXN, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.top, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.left, TXNSetFrameBounds( (TXNObject) m_macTXN, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.top, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.left,
(**(STPTextPaneVars **)m_macTXNvars).fRTextArea.bottom,(**(STPTextPaneVars **)m_macTXNvars).fRTextArea.right, (**(STPTextPaneVars **)m_macTXNvars).fTXNFrame); (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.bottom,(**(STPTextPaneVars **)m_macTXNvars).fRTextArea.right, (**(STPTextPaneVars **)m_macTXNvars).fTXNFrame);
else else
TXNSetFrameBounds( (TXNObject) m_macTXN, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.top + 30000, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.left, TXNSetFrameBounds( (TXNObject) m_macTXN, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.top + 30000, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.left,
(**(STPTextPaneVars **)m_macTXNvars).fRTextArea.bottom + 30000, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.right, (**(STPTextPaneVars **)m_macTXNvars).fTXNFrame); (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.bottom + 30000, (**(STPTextPaneVars **)m_macTXNvars).fRTextArea.right, (**(STPTextPaneVars **)m_macTXNvars).fTXNFrame);
} }
return retval ; return retval ;