]> git.saurik.com Git - wxWidgets.git/blobdiff - src/aui/auibar.cpp
Improve hit detection in wxMSW wxTreeCtrl with wxTR_FULL_ROW_HIGHLIGHT style.
[wxWidgets.git] / src / aui / auibar.cpp
index 67d5ba9af5df57207b9dfbc55915efe4f6872df4..773ccf41df7f88f05b042e1e7d8f0f536fb249a7 100644 (file)
@@ -38,8 +38,6 @@
 
 #ifdef __WXMAC__
 #include "wx/osx/private.h"
-// for themeing support
-#include <Carbon/Carbon.h>
 #endif
 
 #include "wx/arrimpl.cpp"
@@ -187,8 +185,8 @@ wxAuiDefaultToolBarArt::wxAuiDefaultToolBarArt()
     m_gripper_pen2 = wxPen(darker3_colour);
     m_gripper_pen3 = *wxWHITE_PEN;
 
-    static unsigned char button_dropdown_bits[] = { 0xe0, 0xf1, 0xfb };
-    static unsigned char overflow_bits[] = { 0x80, 0xff, 0x80, 0xc1, 0xe3, 0xf7 };
+    static const unsigned char button_dropdown_bits[] = { 0xe0, 0xf1, 0xfb };
+    static const unsigned char overflow_bits[] = { 0x80, 0xff, 0x80, 0xc1, 0xe3, 0xf7 };
 
     m_button_dropdown_bmp = wxAuiBitmapFromBits(button_dropdown_bits, 5, 3,
                                                 *wxBLACK);
@@ -555,6 +553,12 @@ wxSize wxAuiDefaultToolBarArt::GetLabelSize(
     // get item's width
     width = item.GetMinSize().GetWidth();
 
+    if (width == -1)
+    {
+        // no width specified, measure the text ourselves
+        width = dc.GetTextExtent(item.GetLabel()).GetX();
+    }
+
     return wxSize(width, height);
 }
 
@@ -728,9 +732,9 @@ void wxAuiDefaultToolBarArt::SetElementSize(int element_id, int size)
 {
     switch (element_id)
     {
-        case wxAUI_TBART_SEPARATOR_SIZE: m_separator_size = size;
-        case wxAUI_TBART_GRIPPER_SIZE:   m_gripper_size = size;
-        case wxAUI_TBART_OVERFLOW_SIZE:  m_overflow_size = size;
+        case wxAUI_TBART_SEPARATOR_SIZE: m_separator_size = size; break;
+        case wxAUI_TBART_GRIPPER_SIZE:   m_gripper_size = size; break;
+        case wxAUI_TBART_OVERFLOW_SIZE:  m_overflow_size = size; break;
     }
 }
 
@@ -833,7 +837,7 @@ wxAuiToolBar::wxAuiToolBar(wxWindow* parent,
     m_gripper_sizer_item = NULL;
     m_overflow_sizer_item = NULL;
     m_dragging = false;
-    m_style = style;
+    m_style = style | wxBORDER_NONE;
     m_gripper_visible = (m_style & wxAUI_TB_GRIPPER) ? true : false;
     m_overflow_visible = (m_style & wxAUI_TB_OVERFLOW) ? true : false;
     m_overflow_state = 0;
@@ -843,6 +847,7 @@ wxAuiToolBar::wxAuiToolBar(wxWindow* parent,
     SetExtraStyle(wxWS_EX_PROCESS_IDLE);
     if (style & wxAUI_TB_HORZ_LAYOUT)
         SetToolTextOrientation(wxAUI_TBTOOL_TEXT_RIGHT);
+    SetBackgroundStyle(wxBG_STYLE_CUSTOM);
 }
 
 
@@ -950,9 +955,9 @@ wxAuiToolBarItem* wxAuiToolBar::AddTool(int tool_id,
     item.min_size = wxDefaultSize;
     item.user_data = 0;
     item.sticky = false;
-    
-    if (item.id == wxID_ANY) 
-        item.id = wxNewId(); 
+
+    if (item.id == wxID_ANY)
+        item.id = wxNewId();
 
     if (!item.disabled_bitmap.IsOk())
     {
@@ -1018,9 +1023,9 @@ wxAuiToolBarItem* wxAuiToolBar::AddLabel(int tool_id,
     item.user_data = 0;
     item.sticky = false;
 
-    if (item.id == wxID_ANY) 
-        item.id = wxNewId(); 
-       
+    if (item.id == wxID_ANY)
+        item.id = wxNewId();
+
     m_items.Add(item);
     return &m_items.Last();
 }
@@ -1469,7 +1474,7 @@ void wxAuiToolBar::RefreshOverflowState()
     // find out if the mouse cursor is inside the dropdown rectangle
     if (overflow_rect.Contains(pt.x, pt.y))
     {
-        if (::wxGetMouseState().LeftDown())
+        if (::wxGetMouseState().LeftIsDown())
             overflow_state = wxAUI_BUTTON_STATE_PRESSED;
         else
             overflow_state = wxAUI_BUTTON_STATE_HOVER;
@@ -1496,7 +1501,7 @@ void wxAuiToolBar::ToggleTool(int tool_id, bool state)
             int i, idx, count;
             idx = GetToolIndex(tool_id);
             count = (int)m_items.GetCount();
-            
+
             if (idx >= 0 && idx < count)
             {
                 for (i = idx; i < count; ++i)
@@ -1512,7 +1517,7 @@ void wxAuiToolBar::ToggleTool(int tool_id, bool state)
                     m_items[i].state &= ~wxAUI_BUTTON_STATE_CHECKED;
                 }
             }
-            
+
             tool->state |= wxAUI_BUTTON_STATE_CHECKED;
         }
          else if (tool->kind == wxITEM_CHECK)
@@ -1786,7 +1791,7 @@ bool wxAuiToolBar::Realize()
                 sizer_item = sizer->Add(size.x + (m_tool_border_padding*2),
                                         size.y + (m_tool_border_padding*2),
                                         item.proportion,
-                                        wxALIGN_CENTER);
+                                        item.alignment);
                 if (i+1 < count)
                 {
                     sizer->AddSpacer(m_tool_packing);
@@ -1803,7 +1808,7 @@ bool wxAuiToolBar::Realize()
                 sizer_item = sizer->Add(size.x + (m_tool_border_padding*2),
                                         size.y + (m_tool_border_padding*2),
                                         0,
-                                        wxALIGN_CENTER);
+                                        item.alignment);
                 // add tool packing
                 if (i+1 < count)
                 {
@@ -2181,7 +2186,7 @@ void wxAuiToolBar::OnIdle(wxIdleEvent& evt)
 
 void wxAuiToolBar::OnPaint(wxPaintEvent& WXUNUSED(evt))
 {
-    wxBufferedPaintDC dc(this);
+    wxAutoBufferedPaintDC dc(this);
     wxRect cli_rect(wxPoint(0,0), GetClientSize());
 
 
@@ -2440,13 +2445,14 @@ void wxAuiToolBar::OnLeftUp(wxMouseEvent& evt)
                     toggle = true;
 
                 ToggleTool(m_action_item->id, toggle);
-                
+
                 // repaint immediately
                 Refresh(false);
                 Update();
-        
+
                 wxCommandEvent e(wxEVT_COMMAND_MENU_SELECTED, m_action_item->id);
                 e.SetEventObject(this);
+                e.SetInt (toggle);
                 GetEventHandler()->ProcessEvent(e);
                 DoIdleUpdate();
             }