]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/textctrl.cpp
Regenerated makefiles.
[wxWidgets.git] / src / mac / textctrl.cpp
index ac6399deb895b4c76a5cd334af60f9c013d914a5..183c86981c919257767f1213a242fde3dad3f4af 100644 (file)
@@ -60,7 +60,6 @@
 
 #define TE_UNLIMITED_LENGTH 0xFFFFFFFFUL
 
-extern wxApp *wxTheApp ;
 extern wxControl *wxFindControlFromMacControl(ControlHandle inControl ) ;
 
 // CS:TODO we still have a problem getting properly at the text events of a control because under Carbon
@@ -427,7 +426,7 @@ static pascal ControlPartCode TPPaneFocusProc(ControlHandle theControl, ControlF
         /* set up locals */
     focusResult = kControlFocusNoPart;
     tpvars = (STPTextPaneVars **) GetControlReference(theControl);
-    if (tpvars != NULL) {
+    if (tpvars != NULL && IsControlVisible( theControl ) ) {
         state = HGetState((Handle) tpvars);
         HLock((Handle) tpvars);
         varsp = *tpvars;
@@ -576,6 +575,13 @@ OSStatus mUPOpenControl(ControlHandle theControl, long wxStyle )
         kTXNSystemDefaultEncoding,
         &varsp->fTXNRec, &varsp->fTXNFrame, (TXNObjectRefcon) tpvars);
 
+    if ( (wxStyle & wxTE_MULTILINE) && (wxStyle & wxTE_DONTWRAP) )
+    {
+        TXNControlTag tag = kTXNWordWrapStateTag ;
+        TXNControlData dat ;
+        dat.uValue = kTXNNoAutoWrap ;
+        TXNSetTXNObjectControls( varsp->fTXNRec , false , 1 , &tag , &dat ) ;
+    }
         Str255 fontName ;
         SInt16 fontSize ;
         Style fontStyle ;
@@ -631,13 +637,16 @@ END_EVENT_TABLE()
 #endif
 
 // Text item
-wxTextCtrl::wxTextCtrl()
+void wxTextCtrl::Init()
 {
   m_macTE = NULL ;
   m_macTXN = NULL ;
   m_macTXNvars = NULL ;
   m_macUsesTXN = false ;
+
   m_editable = true ;
+  m_dirty = false;
+
   m_maxLength = TE_UNLIMITED_LENGTH ;
 }
 
@@ -674,7 +683,7 @@ bool wxTextCtrl::Create(wxWindow *parent, wxWindowID id,
     m_macUsesTXN &= (TXNInitTextension != (void*) kUnresolvedCFragSymbolAddress) ;
 
     // base initialization
-    if ( !CreateBase(parent, id, pos, size, style, validator, name) )
+    if ( !wxTextCtrlBase::Create(parent, id, pos, size, style, validator, name) )
         return FALSE;
 
     wxSize mySize = size ;
@@ -1196,17 +1205,19 @@ void wxTextCtrl::Remove(long from, long to)
 
 void wxTextCtrl::SetSelection(long from, long to)
 {
-    if ( from == -1 )
-        from = 0;
-
-    if ( to == -1 )
-        to = GetLastPosition();
-
     if ( !m_macUsesTXN )
     {
         ControlEditTextSelectionRec selection ;
-        selection.selStart = from ;
-        selection.selEnd = to ;
+        if ((from == -1) && (to == -1))
+        {
+               selection.selStart = 0 ;
+               selection.selEnd = 32767 ;
+        } 
+        else
+        {
+               selection.selStart = from ;
+               selection.selEnd = to ;
+       }
 
         TESetSelect( selection.selStart , selection.selEnd , ((TEHandle) m_macTE) ) ;
         ::SetControlData((ControlHandle)  m_macControl , 0, kControlEditTextSelectionTag , sizeof( selection ) , (char*) &selection ) ;
@@ -1220,7 +1231,10 @@ void wxTextCtrl::SetSelection(long from, long to)
         may force a redraw in the text area. */
         SetPort((**tpvars).fDrawingEnvironment);
         /* change the selection */
-        TXNSetSelection( (**tpvars).fTXNRec, from, to);
+        if ((from == -1) && (to == -1))
+               TXNSelectAll((TXNObject) m_macTXN);
+        else
+               TXNSetSelection( (**tpvars).fTXNRec, from, to);
         TXNShowSelection( (TXNObject) m_macTXN, kTXNShowStart);
     }
 }
@@ -1291,7 +1305,7 @@ void wxTextCtrl::Clear()
 
 bool wxTextCtrl::IsModified() const
 {
-    return TRUE;
+    return m_dirty;
 }
 
 bool wxTextCtrl::IsEditable() const
@@ -1393,7 +1407,7 @@ bool wxTextCtrl::CanRedo() const
 // Makes 'unmodified'
 void wxTextCtrl::DiscardEdits()
 {
-    // TODO
+    m_dirty = false;
 }
 
 int wxTextCtrl::GetNumberOfLines() const
@@ -1520,6 +1534,10 @@ void wxTextCtrl::OnChar(wxKeyEvent& event)
         // eat it
         return ;
     }
+
+    // assume that any key not processed yet is going to modify the control
+    m_dirty = true;
+
     if ( key == 'v' && event.MetaDown() )
     {
         if ( CanPaste() )
@@ -1592,8 +1610,25 @@ void wxTextCtrl::OnChar(wxKeyEvent& event)
 
     if (!eat_key)
     {
-        // default handling
-        event.Skip() ;
+        // perform keystroke handling
+#if TARGET_CARBON
+        if ( m_macUsesTXN && wxTheApp->MacGetCurrentEvent() != NULL && wxTheApp->MacGetCurrentEventHandlerCallRef() != NULL )
+            CallNextEventHandler((EventHandlerCallRef)wxTheApp->MacGetCurrentEventHandlerCallRef() , (EventRef) wxTheApp->MacGetCurrentEvent() ) ;
+        else 
+#endif
+        {
+            EventRecord rec ;
+            if ( wxMacConvertEventToRecord(  (EventRef) wxTheApp->MacGetCurrentEvent() , &rec ) )
+            {
+                EventRecord *ev = &rec ;
+                short keycode ;
+                short keychar ;
+                keychar = short(ev->message & charCodeMask);
+                keycode = short(ev->message & keyCodeMask) >> 8 ;
+
+                ::HandleControlKey( (ControlHandle) m_macControl , keycode , keychar , ev->modifiers ) ;
+            }
+        }
     }
     if ( ( key >= 0x20 && key < WXK_START ) ||
          key == WXK_RETURN ||