TEHandle teH ;
long size ;
- ::GetControlData( m_macControl , 0, kControlEditTextTEHandleTag , sizeof( TEHandle ) , (char*) &teH , &size ) ;
- TECopy( teH ) ;
-#if TARGET_CARBON
- OSStatus err ;
- err = ClearCurrentScrap( );
-#else
- OSErr err ;
- err = ZeroScrap( );
-#endif
- TEToScrap() ;
+ ::GetControlData( m_macControl , 0, kControlEditTextTEHandleTag , sizeof( TEHandle ) , (char*) &teH , &size ) ;
+ TECopy( teH ) ;
+ ClearCurrentScrap();
+ TEToScrap() ;
}
}
TEHandle teH ;
long size ;
- ::GetControlData( m_macControl , 0, kControlEditTextTEHandleTag , sizeof( TEHandle ) , (char*) &teH , &size ) ;
- TECut( teH ) ;
-#if TARGET_CARBON
- OSStatus err ;
- err = ClearCurrentScrap( );
-#else
- OSErr err ;
- err = ZeroScrap( );
-#endif
- TEToScrap() ;
- // MacInvalidateControl() ;
- }
+ ::GetControlData( m_macControl , 0, kControlEditTextTEHandleTag , sizeof( TEHandle ) , (char*) &teH , &size ) ;
+ TECut( teH ) ;
+ ClearCurrentScrap();
+ TEToScrap() ;
+ // MacInvalidateControl() ;
+ }
}
void wxTextCtrl::Paste()
if ( !(m_windowStyle & wxTE_MULTILINE) )
{
wxWindow *parent = GetParent();
- wxPanel *panel = wxDynamicCast(parent, wxPanel);
- while ( parent != NULL && panel == NULL )
- {
- parent = parent->GetParent() ;
- panel = wxDynamicCast(parent, wxPanel);
+ while( parent && !parent->IsTopLevel() && parent->GetDefaultItem() == NULL ) {
+ parent = parent->GetParent() ;
}
- if ( panel && panel->GetDefaultItem() )
+ if ( parent && parent->GetDefaultItem() )
{
- wxButton *def = wxDynamicCast(panel->GetDefaultItem(),
+ wxButton *def = wxDynamicCast(parent->GetDefaultItem(),
wxButton);
if ( def && def->IsEnabled() )
{
event.SetEventObject(def);
def->Command(event);
return ;
- }
+ }
}
-
+
// this will make wxWindows eat the ENTER key so that
// we actually prevent line wrapping in a single line
// text control
#else
-#if !TARGET_CARBON
-#define GetControlOwner( control ) (**control).contrlOwner
-#endif
-
-//todo add access to global event record
-
-EventRecord event ;
-
-static EventRecord *GetCurrentEventRecord()
-{
- return &event ;
-}
-
+extern wxApp *wxTheApp ;
// CS:We will replace the TextEdit by using the MultiLanguageTextEngine based on the following code written by apple
/*
/* events handled by our focus advance override routine */
#if TARGET_CARBON
-static const EventTypeSpec gMLTEEvents[] = { { kEventClassTextInput, kEventUnicodeForKeyEvent } };
+static const EventTypeSpec gMLTEEvents[] = { { kEventClassTextInput, kEventTextInputUnicodeForKeyEvent } };
#define kMLTEEventCount (sizeof( gMLTEEvents ) / sizeof( EventTypeSpec ))
#endif
/* mUPOpenControl initializes a user pane control so it will be drawn
- and will behave as a scrolling text edit field inside of a window.
- This routine performs all of the initialization steps necessary,
- except it does not create the user pane control itself. theControl
- should refer to a user pane control that you have either created
- yourself or extracted from a dialog's control heirarchy using
- the GetDialogItemAsControl routine. */
-OSStatus mUPOpenControl(ControlHandle theControl) {
- Rect bounds;
- WindowPtr theWindow;
- STPTextPaneVars **tpvars, *varsp;
- OSStatus err;
- RGBColor rgbWhite = {0xFFFF, 0xFFFF, 0xFFFF};
- TXNBackground tback;
-
- /* set up our globals */
- if (gTPDrawProc == NULL) gTPDrawProc = NewControlUserPaneDrawUPP(TPPaneDrawProc);
- if (gTPHitProc == NULL) gTPHitProc = NewControlUserPaneHitTestUPP(TPPaneHitTestProc);
- if (gTPTrackProc == NULL) gTPTrackProc = NewControlUserPaneTrackingUPP(TPPaneTrackingProc);
- if (gTPIdleProc == NULL) gTPIdleProc = NewControlUserPaneIdleUPP(TPPaneIdleProc);
- if (gTPKeyProc == NULL) gTPKeyProc = NewControlUserPaneKeyDownUPP(TPPaneKeyDownProc);
- if (gTPActivateProc == NULL) gTPActivateProc = NewControlUserPaneActivateUPP(TPPaneActivateProc);
- if (gTPFocusProc == NULL) gTPFocusProc = NewControlUserPaneFocusUPP(TPPaneFocusProc);
-
- /* allocate our private storage */
- tpvars = (STPTextPaneVars **) NewHandleClear(sizeof(STPTextPaneVars));
- SetControlReference(theControl, (long) tpvars);
- HLock((Handle) tpvars);
- varsp = *tpvars;
- /* set the initial settings for our private data */
- varsp->fInFocus = false;
- varsp->fIsActive = true;
- varsp->fTEActive = false;
- varsp->fUserPaneRec = theControl;
- theWindow = varsp->fOwner = GetControlOwner(theControl);
+ and will behave as a scrolling text edit field inside of a window.
+ This routine performs all of the initialization steps necessary,
+ except it does not create the user pane control itself. theControl
+ should refer to a user pane control that you have either created
+ yourself or extracted from a dialog's control heirarchy using
+ the GetDialogItemAsControl routine. */
+OSStatus mUPOpenControl(ControlHandle theControl, bool multiline) {
+ Rect bounds;
+ WindowPtr theWindow;
+ STPTextPaneVars **tpvars, *varsp;
+ OSStatus err;
+ RGBColor rgbWhite = {0xFFFF, 0xFFFF, 0xFFFF};
+ TXNBackground tback;
+
+ /* set up our globals */
+ if (gTPDrawProc == NULL) gTPDrawProc = NewControlUserPaneDrawUPP(TPPaneDrawProc);
+ if (gTPHitProc == NULL) gTPHitProc = NewControlUserPaneHitTestUPP(TPPaneHitTestProc);
+ if (gTPTrackProc == NULL) gTPTrackProc = NewControlUserPaneTrackingUPP(TPPaneTrackingProc);
+ if (gTPIdleProc == NULL) gTPIdleProc = NewControlUserPaneIdleUPP(TPPaneIdleProc);
+ if (gTPKeyProc == NULL) gTPKeyProc = NewControlUserPaneKeyDownUPP(TPPaneKeyDownProc);
+ if (gTPActivateProc == NULL) gTPActivateProc = NewControlUserPaneActivateUPP(TPPaneActivateProc);
+ if (gTPFocusProc == NULL) gTPFocusProc = NewControlUserPaneFocusUPP(TPPaneFocusProc);
+
+ /* allocate our private storage */
+ tpvars = (STPTextPaneVars **) NewHandleClear(sizeof(STPTextPaneVars));
+ SetControlReference(theControl, (long) tpvars);
+ HLock((Handle) tpvars);
+ varsp = *tpvars;
+ /* set the initial settings for our private data */
+ varsp->fInFocus = false;
+ varsp->fIsActive = true;
+ varsp->fTEActive = false;
+ varsp->fUserPaneRec = theControl;
+ theWindow = varsp->fOwner = GetControlOwner(theControl);
#if TARGET_CARBON
varsp->fDrawingEnvironment = GetWindowPort(varsp->fOwner);
#else
err = InstallWindowEventHandler( varsp->fOwner, varsp->handlerUPP,
kMLTEEventCount, gMLTEEvents, tpvars, &varsp->handlerRef );
#endif
-
/* unlock our storage */
HUnlock((Handle) tpvars);
/* perform final activations and setup for our text field. Here,
}
- if ( style & wxTE_PASSWORD )
- {
+ if ( style & wxTE_PASSWORD )
+ {
m_macControl = ::NewControl( parent->GetMacRootWindow() , &bounds , "\p" , true , 0 , 0 , 1,
kControlEditTextPasswordProc , (long) this ) ;
}
TEHandle teH ;
long size ;
- ::GetControlData( m_macControl , 0, kControlEditTextTEHandleTag , sizeof( TEHandle ) , (char*) &teH , &size ) ;
- TECopy( teH ) ;
- #if TARGET_CARBON
- OSStatus err ;
- err = ClearCurrentScrap( );
- #else
- OSErr err ;
- err = ZeroScrap( );
- #endif
- TEToScrap() ;
- }
- }
+ ::GetControlData( m_macControl , 0, kControlEditTextTEHandleTag , sizeof( TEHandle ) , (char*) &teH , &size ) ;
+ TECopy( teH ) ;
+ ClearCurrentScrap();
+ TEToScrap() ;
+ }
+ else
+ {
+ mUPDoEditCommand( m_macControl , kmUPCopy ) ;
+ }
+ }
}
void wxTextCtrl::Cut()
TEHandle teH ;
long size ;
- ::GetControlData( m_macControl , 0, kControlEditTextTEHandleTag , sizeof( TEHandle ) , (char*) &teH , &size ) ;
- TECut( teH ) ;
- #if TARGET_CARBON
- OSStatus err ;
- err = ClearCurrentScrap( );
- #else
- OSErr err ;
- err = ZeroScrap( );
- #endif
- TEToScrap() ;
- // MacInvalidateControl() ;
- }
+ ::GetControlData( m_macControl , 0, kControlEditTextTEHandleTag , sizeof( TEHandle ) , (char*) &teH , &size ) ;
+ TECut( teH ) ;
+ ClearCurrentScrap();
+ TEToScrap() ;
+ // MacInvalidateControl() ;
}
+ else
+ {
+ mUPDoEditCommand( m_macControl , kmUPCut ) ;
+ }
+ }
}
void wxTextCtrl::Paste()
TEHandle teH ;
long size ;
- ::GetControlData( m_macControl , 0, kControlEditTextTEHandleTag , sizeof( TEHandle ) , (char*) &teH , &size ) ;
- TEFromScrap() ;
- TEPaste( teH ) ;
- WindowRef window = GetMacRootWindow() ;
- if ( window )
- {
- wxWindow* win = wxFindWinFromMacWindow( window ) ;
- if ( win )
- {
- wxMacDrawingHelper help( win ) ;
- // the mac control manager always assumes to have the origin at 0,0
- SetOrigin( 0 , 0 ) ;
-
- bool hasTabBehind = false ;
- wxWindow* parent = GetParent() ;
- while ( parent )
- {
- if( parent->MacGetWindowData() )
- {
- UMASetThemeWindowBackground( win->MacGetWindowData()->m_macWindow , kThemeBrushDialogBackgroundActive , false ) ;
- break ;
- }
-
- if( parent->IsKindOf( CLASSINFO( wxNotebook ) ) || parent->IsKindOf( CLASSINFO( wxTabCtrl ) ))
- {
- if ( ((wxControl*)parent)->GetMacControl() )
- SetUpControlBackground( ((wxControl*)parent)->GetMacControl() , -1 , true ) ;
- break ;
- }
-
- parent = parent->GetParent() ;
- }
-
- UMADrawControl( m_macControl ) ;
- UMASetThemeWindowBackground( win->MacGetWindowData()->m_macWindow , win->MacGetWindowData()->m_macWindowBackgroundTheme , false ) ;
- }
- }
- }
- }
+ ::GetControlData( m_macControl , 0, kControlEditTextTEHandleTag , sizeof( TEHandle ) , (char*) &teH , &size ) ;
+ TEFromScrap() ;
+ TEPaste( teH ) ;
+ WindowRef window = GetMacRootWindow() ;
+ if ( window )
+ {
+ wxWindow* win = wxFindWinFromMacWindow( window ) ;
+ if ( win )
+ {
+ wxMacDrawingHelper help( win ) ;
+ // the mac control manager always assumes to have the origin at 0,0
+ SetOrigin( 0 , 0 ) ;
+
+ bool hasTabBehind = false ;
+ wxWindow* parent = GetParent() ;
+ while ( parent )
+ {
+ if( parent->MacGetWindowData() )
+ {
+ ::SetThemeWindowBackground( win->MacGetWindowData()->m_macWindow , kThemeBrushDialogBackgroundActive , false ) ;
+ break ;
+ }
+
+ if( parent->IsKindOf( CLASSINFO( wxNotebook ) ) || parent->IsKindOf( CLASSINFO( wxTabCtrl ) ))
+ {
+ if ( ((wxControl*)parent)->GetMacControl() )
+ SetUpControlBackground( ((wxControl*)parent)->GetMacControl() , -1 , true ) ;
+ break ;
+ }
+
+ parent = parent->GetParent() ;
+ }
+
+ UMADrawControl( m_macControl ) ;
+ ::SetThemeWindowBackground( win->MacGetWindowData()->m_macWindow , win->MacGetWindowData()->m_macWindowBackgroundTheme , false ) ;
+ }
+ }
+ }
+ else
+ {
+ mUPDoEditCommand( m_macControl , kmUPPaste ) ;
+ }
+ }
}
bool wxTextCtrl::CanCopy() const
// ::GetControlData( m_macControl , 0, kControlEditTextSelectionTag , sizeof( selection ) , (char*) &selection , &size ) ;
return (**teH).teLength ;
}
+ else
+ {
+ STPTextPaneVars** tpvars = (STPTextPaneVars **) GetControlReference(m_macControl);
+
+ int actualsize = 0 ;
+ Handle theText ;
+ OSErr err = TXNGetDataEncoded( (**tpvars).fTXNRec, kTXNStartOffset, kTXNEndOffset, &theText , kTXNTextData );
+ /* all done */
+ if ( err )
+ {
+ actualsize = 0 ;
+ }
+ else
+ {
+ actualsize = GetHandleSize( theText ) ;
+ DisposeHandle( theText ) ;
+ }
+ return actualsize ;
+ }
}
void wxTextCtrl::Replace(long from, long to, const wxString& value)
ControlEditTextSelectionRec selection ;
- selection.selStart = from ;
- selection.selEnd = to ;
- ::SetControlData( m_macControl , 0, kControlEditTextSelectionTag , sizeof( selection ) , (char*) &selection ) ;
- ::GetControlData( m_macControl , 0, kControlEditTextTEHandleTag , sizeof( TEHandle ) , (char*) &teH , &size ) ;
- TESetSelect( from , to , teH ) ;
- TEDelete( teH ) ;
- TEInsert( value , value.Length() , teH ) ;
- }
- Refresh() ;
+ selection.selStart = from ;
+ selection.selEnd = to ;
+ ::SetControlData( m_macControl , 0, kControlEditTextSelectionTag , sizeof( selection ) , (char*) &selection ) ;
+ ::GetControlData( m_macControl , 0, kControlEditTextTEHandleTag , sizeof( TEHandle ) , (char*) &teH , &size ) ;
+ TESetSelect( from , to , teH ) ;
+ TEDelete( teH ) ;
+ TEInsert( value , value.Length() , teH ) ;
+ }
+ else
+ {
+ // TODO
+ }
+ Refresh() ;
}
void wxTextCtrl::Remove(long from, long to)
ControlEditTextSelectionRec selection ;
- selection.selStart = from ;
- selection.selEnd = to ;
- ::SetControlData( m_macControl , 0, kControlEditTextSelectionTag , sizeof( selection ) , (char*) &selection ) ;
- ::GetControlData( m_macControl , 0, kControlEditTextTEHandleTag , sizeof( TEHandle ) , (char*) &teH , &size ) ;
- TEDelete( teH ) ;
+ selection.selStart = from ;
+ selection.selEnd = to ;
+ ::SetControlData( m_macControl , 0, kControlEditTextSelectionTag , sizeof( selection ) , (char*) &selection ) ;
+ ::GetControlData( m_macControl , 0, kControlEditTextTEHandleTag , sizeof( TEHandle ) , (char*) &teH , &size ) ;
+ TEDelete( teH ) ;
+ }
+ else
+ {
+ //TODO
}
Refresh() ;
}
::SetControlData( m_macControl, 0, ( m_windowStyle & wxTE_PASSWORD ) ? kControlEditTextPasswordTag : kControlEditTextTextTag , 0 , (char*) ((const char*)NULL) ) ;
}
- Refresh() ;
+ else
+ {
+ mUPDoEditCommand( m_macControl , kmUPClear) ;
+ }
+ Refresh() ;
}
bool wxTextCtrl::IsModified() const
int wxTextCtrl::GetNumberOfLines() const
{
- if ( m_windowStyle & wxTE_PASSWORD )
- {
- Size actualsize;
- ::GetControlData( 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;
- }
+ // TODO change this if possible to reflect real lines
+ wxString content = GetValue() ;
+
+ int count = 1;
+ for (int i = 0; i < content.Length() ; i++)
+ {
+ if (content[i] == '\r') count++;
+ }
+
+ return count;
}
long wxTextCtrl::XYToPosition(long x, long y) const
int wxTextCtrl::GetLineLength(long lineNo) const
{
- if ( m_windowStyle & wxTE_PASSWORD )
- {
- Size actualsize;
- ::GetControlData( 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++;
- }
- }
+ // TODO change this if possible to reflect real lines
+ wxString content = GetValue() ;
+
+ // Find line first
+ int count = 0;
+ for (int i = 0; i < content.Length() ; i++)
+ {
+ if (count == lineNo)
+ {
+ // Count chars in line then
+ count = 0;
+ for (int j = i; j < content.Length(); j++)
+ {
+ count++;
+ if (content[j] == '\r') return count;
+ }
+
+ return count;
+ }
+ if (content[i] == '\r') count++;
+ }
return 0;
}
wxString wxTextCtrl::GetLineText(long lineNo) const
{
- if ( m_windowStyle & wxTE_PASSWORD )
- {
- Size actualsize;
- ::GetControlData( 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++;
- }
- }
+ // TODO change this if possible to reflect real lines
+ wxString content = GetValue() ;
+
+ // Find line first
+ int count = 0;
+ for (int i = 0; i < content.Length() ; i++)
+ {
+ if (count == lineNo)
+ {
+ // Add chars in line then
+ wxString tmp("");
+
+ for (int j = i; j < content.Length(); j++)
+ {
+ if (content[j] == '\r')
+ return tmp;
+
+ tmp += content[j];
+ }
+
+ return tmp;
+ }
+ if (content[i] == '\r') count++;
+ }
return wxString("");
}
if ( !(m_windowStyle & wxTE_MULTILINE) )
{
wxWindow *parent = GetParent();
- wxPanel *panel = wxDynamicCast(parent, wxPanel);
- while ( parent != NULL && panel == NULL )
- {
- parent = parent->GetParent() ;
- panel = wxDynamicCast(parent, wxPanel);
+ while( parent && !parent->IsTopLevel() && parent->GetDefaultItem() == NULL ) {
+ parent = parent->GetParent() ;
}
- if ( panel && panel->GetDefaultItem() )
+ if ( parent && parent->GetDefaultItem() )
{
- wxButton *def = wxDynamicCast(panel->GetDefaultItem(),
+ wxButton *def = wxDynamicCast(parent->GetDefaultItem(),
wxButton);
if ( def && def->IsEnabled() )
{