#define PIXELS_PER_UNIT 10
+// ----------------------------------------------------------------------------
+// Aqua arrows
+// ----------------------------------------------------------------------------
+
+ /* XPM */
+ static char *aqua_arrow_right[] = {
+ /* columns rows colors chars-per-pixel */
+ "13 11 4 1",
+ " c None",
+ "b c #C0C0C0",
+ "c c #707070",
+ "d c #A0A0A0",
+ /* pixels */
+ " b ",
+ " ddb ",
+ " cccdb ",
+ " cccccd ",
+ " ccccccdb ",
+ " ccccccccd",
+ " ccccccdb ",
+ " cccccb ",
+ " cccdb ",
+ " ddb ",
+ " b "
+ };
+
+ /* XPM */
+ static char *aqua_arrow_down[] = {
+ /* columns rows colors chars-per-pixel */
+ "13 11 4 1",
+ " c None",
+ "b c #C0C0C0",
+ "c c #707070",
+ "d c #A0A0A0",
+ /* pixels */
+ " ",
+ " ",
+ " bdcccccccdb ",
+ " dcccccccd ",
+ " bcccccccb ",
+ " dcccccd ",
+ " bcccccb ",
+ " bcccd ",
+ " dcd ",
+ " bcb ",
+ " d "
+ };
+
// -----------------------------------------------------------------------------
// private classes
// -----------------------------------------------------------------------------
style |= wxTR_NO_LINES;
if (major < 10)
style |= wxTR_ROW_LINES;
+ if (major >= 10)
+ style |= wxTR_AQUA_BUTTONS;
#endif
+ if (style & wxTR_AQUA_BUTTONS)
+ {
+ m_arrowRight = new wxBitmap( aqua_arrow_right );
+ m_arrowDown = new wxBitmap( aqua_arrow_down );
+ }
+ else
+ {
+ m_arrowRight = NULL;
+ m_arrowDown = NULL;
+ }
+
wxScrolledWindow::Create( parent, id, pos, size,
style|wxHSCROLL|wxVSCROLL, name );
{
delete m_hilightBrush;
delete m_hilightUnfocusedBrush;
+
+ if (m_arrowRight) delete m_arrowRight;
+ if (m_arrowDown) delete m_arrowDown;
DeleteAllItems();
int offset = HasFlag(wxTR_ROW_LINES) ? 1 : 0;
- if ( item->IsSelected() && image != NO_IMAGE )
+ if ( HasFlag(wxTR_FULL_ROW_HIGHLIGHT) )
{
- // If it's selected, and there's an image, then we should
- // take care to leave the area under the image painted in the
- // background colour.
- dc.DrawRectangle( item->GetX() + image_w - 2, item->GetY()+offset,
- item->GetWidth() - image_w + 2, total_h-offset );
+ int x, y, w, h;
+
+ DoGetPosition(&x, &y);
+ DoGetSize(&w, &h);
+ dc.DrawRectangle(x, item->GetY()+offset, w, total_h-offset);
}
else
{
- dc.DrawRectangle( item->GetX()-2, item->GetY()+offset,
- item->GetWidth()+2, total_h-offset );
+ if ( item->IsSelected() && image != NO_IMAGE )
+ {
+ // If it's selected, and there's an image, then we should
+ // take care to leave the area under the image painted in the
+ // background colour.
+ dc.DrawRectangle( item->GetX() + image_w - 2, item->GetY()+offset,
+ item->GetWidth() - image_w + 2, total_h-offset );
+ }
+ else
+ {
+ dc.DrawRectangle( item->GetX()-2, item->GetY()+offset,
+ item->GetWidth()+2, total_h-offset );
+ }
}
if ( image != NO_IMAGE )
if (IsExposed(exposed_x, exposed_y, 10000, h)) // 10000 = very much
{
+ wxPen *pen =
+#ifndef __WXMAC__
+ // don't draw rect outline if we already have the
+ // background color under Mac
+ (item->IsSelected() && m_hasFocus) ? wxBLACK_PEN :
+#endif // !__WXMAC__
+ wxTRANSPARENT_PEN;
+
+ wxColour colText;
+ if ( item->IsSelected() )
+ {
+ colText = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_HIGHLIGHTTEXT);
+ }
+ else
+ {
+ wxTreeItemAttr *attr = item->GetAttributes();
+ if (attr && attr->HasTextColour())
+ colText = attr->GetTextColour();
+ else
+ colText = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_WINDOWTEXT);
+ }
+
+ // prepare to draw
+ dc.SetTextForeground(colText);
+ dc.SetPen(*pen);
+
+ // draw
+ PaintItem(item, dc);
+
+ if (HasFlag(wxTR_ROW_LINES))
+ {
+ // if the background colour is white, choose a
+ // contrasting color for the lines
+ dc.SetPen(*((GetBackgroundColour() == *wxWHITE)
+ ? wxMEDIUM_GREY_PEN : wxWHITE_PEN));
+ dc.DrawLine(0, y_top, 10000, y_top);
+ dc.DrawLine(0, y, 10000, y);
+ }
+
+ // restore DC objects
+ dc.SetBrush(*wxWHITE_BRUSH);
+ dc.SetPen(m_dottedPen);
+ dc.SetTextForeground(*wxBLACK);
+
if (item->HasPlus() && HasButtons()) // should the item show a button?
{
if (!HasFlag(wxTR_NO_LINES))
else if (HasFlag(wxTR_TWIST_BUTTONS))
{
// draw the twisty button here
- dc.SetPen(*wxBLACK_PEN);
- dc.SetBrush(*m_hilightBrush);
-
- wxPoint button[3];
-
- if (item->IsExpanded())
+
+ if (HasFlag(wxTR_AQUA_BUTTONS))
{
- button[0].x = x-5;
- button[0].y = y_mid-2;
- button[1].x = x+5;
- button[1].y = y_mid-2;
- button[2].x = x;
- button[2].y = y_mid+3;
+ if (item->IsExpanded())
+ dc.DrawBitmap( *m_arrowDown, x-5, y_mid-6, TRUE );
+ else
+ dc.DrawBitmap( *m_arrowRight, x-5, y_mid-6, TRUE );
}
else
{
- button[0].y = y_mid-5;
- button[0].x = x-2;
- button[1].y = y_mid+5;
- button[1].x = x-2;
- button[2].y = y_mid;
- button[2].x = x+3;
- }
- dc.DrawPolygon(3, button);
+ dc.SetBrush(*m_hilightBrush);
+ dc.SetPen(*wxBLACK_PEN);
+ wxPoint button[3];
- dc.SetPen(m_dottedPen);
+ if (item->IsExpanded())
+ {
+ button[0].x = x-5;
+ button[0].y = y_mid-2;
+ button[1].x = x+5;
+ button[1].y = y_mid-2;
+ button[2].x = x;
+ button[2].y = y_mid+3;
+ }
+ else
+ {
+ button[0].y = y_mid-5;
+ button[0].x = x-2;
+ button[1].y = y_mid+5;
+ button[1].x = x-2;
+ button[2].y = y_mid;
+ button[2].x = x+3;
+ }
+ dc.DrawPolygon(3, button);
+ dc.SetPen(m_dottedPen);
+ }
}
else // if (HasFlag(wxTR_HAS_BUTTONS))
{
x_start = 3;
dc.DrawLine(x_start, y_mid, x + m_spacing, y_mid);
}
-
- wxPen *pen =
-#ifndef __WXMAC__
- // don't draw rect outline if we already have the
- // background color under Mac
- (item->IsSelected() && m_hasFocus) ? wxBLACK_PEN :
-#endif // !__WXMAC__
- wxTRANSPARENT_PEN;
-
- wxColour colText;
- if ( item->IsSelected() )
- {
- colText = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_HIGHLIGHTTEXT);
- }
- else
- {
- wxTreeItemAttr *attr = item->GetAttributes();
- if (attr && attr->HasTextColour())
- colText = attr->GetTextColour();
- else
- colText = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_WINDOWTEXT);
- }
-
- // prepare to draw
- dc.SetTextForeground(colText);
- dc.SetPen(*pen);
-
- // draw
- PaintItem(item, dc);
-
- if (HasFlag(wxTR_ROW_LINES))
- {
- // if the background colour is white, choose a
- // contrasting color for the lines
- dc.SetPen(*((GetBackgroundColour() == *wxWHITE)
- ? wxMEDIUM_GREY_PEN : wxWHITE_PEN));
- dc.DrawLine(0, y_top, 10000, y_top);
- dc.DrawLine(0, y, 10000, y);
- }
-
- // restore DC objects
- dc.SetBrush(*wxWHITE_BRUSH);
- dc.SetPen(m_dottedPen);
- dc.SetTextForeground(*wxBLACK);
}
if (item->IsExpanded())