]> git.saurik.com Git - wxWidgets.git/blobdiff - src/osx/carbon/utils.cpp
use correct scale when drawing
[wxWidgets.git] / src / osx / carbon / utils.cpp
index a1015f90c20d5768c8ab30adc1784a24d70695bc..2d2b5ccdf9b7e781cba7fa025c79062d8d87ae88 100644 (file)
 
 #include "wx/evtloop.h"
 
 
 #include "wx/evtloop.h"
 
-#if defined(__MWERKS__) && wxUSE_UNICODE
-#if __MWERKS__ < 0x4100
-    #include <wtime.h>
-#endif
-#endif
-
-#if wxUSE_BASE
+#if wxUSE_GUI
 
 // Emit a beeeeeep
 void wxBell()
 
 // Emit a beeeeeep
 void wxBell()
@@ -62,17 +56,13 @@ void wxBell()
     else
 #endif
 #if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5
     else
 #endif
 #if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5
-        SysBeep(30);
+        AlertSoundPlay();
 #else
     {
     }
 #endif
 }
 
 #else
     {
     }
 #endif
 }
 
-#endif // wxUSE_BASE
-
-#if wxUSE_GUI
-
 wxTimerImpl* wxGUIAppTraits::CreateTimerImpl(wxTimer *timer)
 {
     return new wxOSXTimerImpl(timer);
 wxTimerImpl* wxGUIAppTraits::CreateTimerImpl(wxTimer *timer)
 {
     return new wxOSXTimerImpl(timer);
@@ -144,8 +134,17 @@ wxString wxMacFindFolder( short        vol,
 
 #endif // wxUSE_BASE
 
 
 #endif // wxUSE_BASE
 
+
+// ============================================================================
+// GUI-only functions from now on
+// ============================================================================
+
 #if wxUSE_GUI
 
 #if wxUSE_GUI
 
+// ----------------------------------------------------------------------------
+// Miscellaneous functions
+// ----------------------------------------------------------------------------
+
 void wxGetMousePosition( int* x, int* y )
 {
     Point pt;
 void wxGetMousePosition( int* x, int* y )
 {
     Point pt;
@@ -186,45 +185,6 @@ void wxClientDisplayRect(int *x, int *y, int *width, int *height)
 
 #endif // wxUSE_GUI
 
 
 #endif // wxUSE_GUI
 
-#if wxUSE_BASE
-// ----------------------------------------------------------------------------
-// Common Event Support
-// ----------------------------------------------------------------------------
-
-void wxMacWakeUp()
-{
-    OSStatus err = noErr;
-
-#if wxOSX_USE_CARBON
-#if 0
-    // lead sometimes to race conditions, although all calls used should be thread safe ...
-    static wxMacCarbonEvent s_wakeupEvent;
-    if ( !s_wakeupEvent.IsValid() )
-    {
-       err = s_wakeupEvent.Create( 'WXMC', 'WXMC', GetCurrentEventTime(),
-                    kEventAttributeNone );
-    }
-    if ( err == noErr )
-    {
-
-        if ( IsEventInQueue( GetMainEventQueue() , s_wakeupEvent ) )
-            return;
-        s_wakeupEvent.SetCurrentTime();
-        err = PostEventToQueue(GetMainEventQueue(), s_wakeupEvent,
-                              kEventPriorityHigh );
-    }
-#else
-    wxMacCarbonEvent wakeupEvent;
-    wakeupEvent.Create( 'WXMC', 'WXMC', GetCurrentEventTime(),
-                        kEventAttributeNone );
-    err = PostEventToQueue(GetMainEventQueue(), wakeupEvent,
-                           kEventPriorityHigh );
-#endif
-#endif
-}
-
-#endif // wxUSE_BASE
-
 #if wxUSE_GUI
 
 // ----------------------------------------------------------------------------
 #if wxUSE_GUI
 
 // ----------------------------------------------------------------------------
@@ -259,27 +219,6 @@ void wxMacNativeToPoint( const Point *n , wxPoint* wx )
     wx->y = n->v;
 }
 
     wx->y = n->v;
 }
 
-//---------------------------------------------------------------------------
-// wxMac Specific string utility functions
-//---------------------------------------------------------------------------
-
-void wxMacStringToPascal( const wxString&from , StringPtr to )
-{
-    wxCharBuffer buf = from.mb_str( wxConvLocal );
-    int len = strlen(buf);
-
-    if ( len > 255 )
-        len = 255;
-    to[0] = len;
-    memcpy( (char*) &to[1] , buf , len );
-}
-
-wxString wxMacMakeStringFromPascal( ConstStringPtr from )
-{
-    return wxString( (char*) &from[1] , wxConvLocal , from[0] );
-}
-
-
 // ----------------------------------------------------------------------------
 // Carbon Event Support
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
 // Carbon Event Support
 // ----------------------------------------------------------------------------
@@ -414,7 +353,8 @@ OSStatus wxMacDataBrowserControl::AddColumn( DataBrowserListViewColumnDesc *colu
     return AddDataBrowserListViewColumn( m_controlRef, columnDesc, position );
 }
 
     return AddDataBrowserListViewColumn( m_controlRef, columnDesc, position );
 }
 
-OSStatus wxMacDataBrowserControl::GetColumnIDFromIndex( DataBrowserTableViewColumnIndex position, DataBrowserTableViewColumnID* id ){
+OSStatus wxMacDataBrowserControl::GetColumnIDFromIndex( DataBrowserTableViewColumnIndex position, DataBrowserTableViewColumnID* id )
+{
     return GetDataBrowserTableViewColumnProperty( m_controlRef, position, id );
 }
 
     return GetDataBrowserTableViewColumnProperty( m_controlRef, position, id );
 }
 
@@ -635,6 +575,11 @@ OSStatus wxMacDataBrowserControl::SetDisclosureColumn( DataBrowserPropertyID pro
     return SetDataBrowserListViewDisclosureColumn( m_controlRef, property, expandableRows);
 }
 
     return SetDataBrowserListViewDisclosureColumn( m_controlRef, property, expandableRows);
 }
 
+OSStatus wxMacDataBrowserControl::GetItemPartBounds( DataBrowserItemID item, DataBrowserPropertyID property, DataBrowserPropertyPart part, Rect * bounds )
+{
+    return GetDataBrowserItemPartBounds( m_controlRef, item, property, part, bounds);
+}
+
 // ============================================================================
 // Higher-level Databrowser
 // ============================================================================
 // ============================================================================
 // Higher-level Databrowser
 // ============================================================================
@@ -700,11 +645,10 @@ bool wxMacDataItem::IsLessThan(wxMacDataItemBrowserControl *WXUNUSED(owner) ,
     const wxMacDataItem* rhs,
     DataBrowserPropertyID sortProperty) const
 {
     const wxMacDataItem* rhs,
     DataBrowserPropertyID sortProperty) const
 {
-    const wxMacDataItem* otherItem = wx_const_cast(wxMacDataItem*,rhs);
     bool retval = false;
 
     if ( sortProperty == kNumericOrderColumnId )
     bool retval = false;
 
     if ( sortProperty == kNumericOrderColumnId )
-        retval = m_order < otherItem->m_order;
+        retval = m_order < rhs->m_order;
 
     return retval;
 }
 
     return retval;
 }
@@ -768,13 +712,7 @@ Boolean wxMacDataItemBrowserControl::CompareItems(DataBrowserItemID itemOneID,
 {
     wxMacDataItem* itemOne = (wxMacDataItem*) itemOneID;
     wxMacDataItem* itemTwo = (wxMacDataItem*) itemTwoID;
 {
     wxMacDataItem* itemOne = (wxMacDataItem*) itemOneID;
     wxMacDataItem* itemTwo = (wxMacDataItem*) itemTwoID;
-    return CompareItems( itemOne , itemTwo , sortProperty );
-}
 
 
-Boolean wxMacDataItemBrowserControl::CompareItems(const wxMacDataItem*  itemOne,
-    const wxMacDataItem*  itemTwo,
-    DataBrowserPropertyID sortProperty)
-{
     Boolean retval = false;
     if ( itemOne != NULL )
         retval = itemOne->IsLessThan( this , itemTwo , sortProperty);
     Boolean retval = false;
     if ( itemOne != NULL )
         retval = itemOne->IsLessThan( this , itemTwo , sortProperty);
@@ -788,15 +726,6 @@ OSStatus wxMacDataItemBrowserControl::GetSetItemData(
     Boolean changeValue )
 {
     wxMacDataItem* item = (wxMacDataItem*) itemID;
     Boolean changeValue )
 {
     wxMacDataItem* item = (wxMacDataItem*) itemID;
-    return GetSetItemData(item, property, itemData , changeValue );
-}
-
-OSStatus wxMacDataItemBrowserControl::GetSetItemData(
-    wxMacDataItem* item,
-    DataBrowserPropertyID property,
-    DataBrowserItemDataRef itemData,
-    Boolean changeValue )
-{
     OSStatus err = errDataBrowserPropertyNotSupported;
     switch( property )
     {
     OSStatus err = errDataBrowserPropertyNotSupported;
     switch( property )
     {
@@ -822,14 +751,6 @@ void wxMacDataItemBrowserControl::ItemNotification(
     DataBrowserItemDataRef itemData)
 {
     wxMacDataItem* item = (wxMacDataItem*) itemID;
     DataBrowserItemDataRef itemData)
 {
     wxMacDataItem* item = (wxMacDataItem*) itemID;
-    ItemNotification( item , message, itemData);
-}
-
-void wxMacDataItemBrowserControl::ItemNotification(
-    const wxMacDataItem* item,
-    DataBrowserItemNotification message,
-    DataBrowserItemDataRef itemData)
-{
     if (item != NULL)
         item->Notification( this, message, itemData);
 }
     if (item != NULL)
         item->Notification( this, message, itemData);
 }
@@ -904,7 +825,9 @@ void wxMacDataItemBrowserControl::UpdateItems(const wxMacDataItem *container,
     delete [] items;
 }
 
     delete [] items;
 }
 
-void wxMacDataItemBrowserControl::InsertColumn(int colId, DataBrowserPropertyType colType,
+static int column_id_counter = 0;
+
+void wxMacDataItemBrowserControl::InsertColumn(int col, DataBrowserPropertyType colType,
                                             const wxString& title, SInt16 just, int defaultWidth)
 {
     DataBrowserListViewColumnDesc columnDesc;
                                             const wxString& title, SInt16 just, int defaultWidth)
 {
     DataBrowserListViewColumnDesc columnDesc;
@@ -922,7 +845,7 @@ void wxMacDataItemBrowserControl::InsertColumn(int colId, DataBrowserPropertyTyp
     // TODO: Why is m_font not defined when we enter wxLC_LIST mode, but is
     // defined for other modes?
     wxFontEncoding enc;
     // TODO: Why is m_font not defined when we enter wxLC_LIST mode, but is
     // defined for other modes?
     wxFontEncoding enc;
-    if ( m_font.Ok() )
+    if ( m_font.IsOk() )
         enc = m_font.GetEncoding();
     else
         enc = wxLocale::GetSystemEncoding();
         enc = m_font.GetEncoding();
     else
         enc = wxLocale::GetSystemEncoding();
@@ -932,18 +855,20 @@ void wxMacDataItemBrowserControl::InsertColumn(int colId, DataBrowserPropertyTyp
     columnDesc.headerBtnDesc.minimumWidth = 0;
     columnDesc.headerBtnDesc.maximumWidth = 30000;
 
     columnDesc.headerBtnDesc.minimumWidth = 0;
     columnDesc.headerBtnDesc.maximumWidth = 30000;
 
-    columnDesc.propertyDesc.propertyID = (kMinColumnId + colId);
+    DataBrowserPropertyID id = kMinColumnId + column_id_counter;
+    column_id_counter++;
+
+    columnDesc.propertyDesc.propertyID = id;
     columnDesc.propertyDesc.propertyType = colType;
     columnDesc.propertyDesc.propertyFlags = kDataBrowserListViewSortableColumn;
     columnDesc.propertyDesc.propertyFlags |= kDataBrowserListViewTypeSelectColumn;
     columnDesc.propertyDesc.propertyFlags |= kDataBrowserListViewNoGapForIconInHeaderButton;
 
     columnDesc.propertyDesc.propertyType = colType;
     columnDesc.propertyDesc.propertyFlags = kDataBrowserListViewSortableColumn;
     columnDesc.propertyDesc.propertyFlags |= kDataBrowserListViewTypeSelectColumn;
     columnDesc.propertyDesc.propertyFlags |= kDataBrowserListViewNoGapForIconInHeaderButton;
 
-    verify_noerr( AddColumn( &columnDesc, kDataBrowserListViewAppendColumn ) );
+    verify_noerr( AddColumn( &columnDesc, col ) );
 
     if (defaultWidth > 0){
 
     if (defaultWidth > 0){
-        SetColumnWidth(colId, defaultWidth);
+        SetColumnWidth(col, defaultWidth);
     }
     }
-
 }
 
 void wxMacDataItemBrowserControl::SetColumnWidth(int colId, int width)
 }
 
 void wxMacDataItemBrowserControl::SetColumnWidth(int colId, int width)
@@ -1002,6 +927,7 @@ void wxMacDataItemBrowserControl::RemoveItems(wxMacDataItem *container, wxArrayM
 
 void wxMacDataItemBrowserControl::RemoveAllItems(wxMacDataItem *container)
 {
 
 void wxMacDataItemBrowserControl::RemoveAllItems(wxMacDataItem *container)
 {
+    SetScrollPosition(0, 0);
     OSStatus err = wxMacDataBrowserControl::RemoveItems( (DataBrowserItemID)container, 0 , NULL , kDataBrowserItemNoProperty );
     verify_noerr( err );
 }
     OSStatus err = wxMacDataBrowserControl::RemoveItems( (DataBrowserItemID)container, 0 , NULL , kDataBrowserItemNoProperty );
     verify_noerr( err );
 }
@@ -1059,10 +985,9 @@ void wxMacDataItemBrowserControl::MacDelete( unsigned int n )
 
 void wxMacDataItemBrowserControl::MacInsert( unsigned int n, wxMacDataItem* item)
 {
 
 void wxMacDataItemBrowserControl::MacInsert( unsigned int n, wxMacDataItem* item)
 {
-    SInt32 frontLineOrder = 0;
-
     if ( m_sortOrder == SortOrder_None )
     {
     if ( m_sortOrder == SortOrder_None )
     {
+
         // increase the order of the lines to be shifted
         unsigned int lines = MacGetCount();
         for ( unsigned int i = n; i < lines; ++i)
         // increase the order of the lines to be shifted
         unsigned int lines = MacGetCount();
         for ( unsigned int i = n; i < lines; ++i)
@@ -1070,22 +995,21 @@ void wxMacDataItemBrowserControl::MacInsert( unsigned int n, wxMacDataItem* item
             wxMacDataItem* iter = (wxMacDataItem*) GetItemFromLine(i);
             iter->SetOrder( iter->GetOrder() + 1 );
         }
             wxMacDataItem* iter = (wxMacDataItem*) GetItemFromLine(i);
             iter->SetOrder( iter->GetOrder() + 1 );
         }
+
+#if 0
+        // I don't understand what this code is supposed to do, RR.
+        SInt32 frontLineOrder = 0;
         if ( n > 0 )
         {
             wxMacDataItem* iter = (wxMacDataItem*) GetItemFromLine(n-1);
         if ( n > 0 )
         {
             wxMacDataItem* iter = (wxMacDataItem*) GetItemFromLine(n-1);
-            frontLineOrder = iter->GetOrder();
+            frontLineOrder = iter->GetOrder()+1;
         }
         }
+#else
+        item->SetOrder( n );
+#endif
     }
 
     }
 
-    wxArrayMacDataItemPtr ids;
-    ids.SetCount( 1 );
-
-    if ( m_sortOrder == SortOrder_None )
-        item->SetOrder( frontLineOrder + 1 );
-
-    ids[0] = item;
-
-    AddItems( wxMacDataBrowserRootContainer, ids );
+    AddItem( wxMacDataBrowserRootContainer, item );
 }
 
 void wxMacDataItemBrowserControl::MacClear()
 }
 
 void wxMacDataItemBrowserControl::MacClear()