1 /***************************************************************************
2 * Copyright (C) 2007 Fredrik Höglund <fredrik@kde.org> *
3 * Originally created as konqproxystyle.cpp, adapted to KDevelop. *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU Library General Public License as *
7 * published by the Free Software Foundation; either version 2 of the *
8 * License, or (at your option) any later version. *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
15 * You should have received a copy of the GNU Library General Public *
16 * License along with this program; if not, write to the *
17 * Free Software Foundation, Inc., *
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
19 ***************************************************************************/
20 #include "containerstyle.h"
22 #include <QtGui/QWidget>
23 #include <QStyleOptionTabV2>
25 #include "container.h"
29 ContainerStyle::ContainerStyle(QWidget
*parent
)
30 :QStyle(), parent(parent
)
34 QStyle
*ContainerStyle::style() const
36 return parent
->parentWidget()->style();
39 void ContainerStyle::drawComplexControl(ComplexControl control
, const QStyleOptionComplex
*option
,
40 QPainter
*painter
, const QWidget
*widget
) const
42 style()->drawComplexControl(control
, option
, painter
, widget
);
45 void ContainerStyle::drawControl(ControlElement element
, const QStyleOption
*option
, QPainter
*painter
,
46 const QWidget
*widget
) const
48 style()->drawControl(element
, option
, painter
, widget
);
51 void ContainerStyle::drawItemPixmap(QPainter
*painter
, const QRect
&rectangle
, int alignment
,
52 const QPixmap
&pixmap
) const
54 style()->drawItemPixmap(painter
, rectangle
, alignment
, pixmap
);
57 void ContainerStyle::drawItemText(QPainter
*painter
, const QRect
&rectangle
, int alignment
, const QPalette
&palette
,
58 bool enabled
, const QString
&text
, QPalette::ColorRole textRole
) const
60 style()->drawItemText(painter
, rectangle
, alignment
, palette
, enabled
, text
, textRole
);
63 void ContainerStyle::drawPrimitive(PrimitiveElement element
, const QStyleOption
*option
, QPainter
*painter
,
64 const QWidget
*widget
) const
66 if (element
== PE_FrameTabWidget
)
68 const Container
*tw
= static_cast<const Sublime::Container
*>(widget
);
69 const QTabBar
*tb
= tw
->tabBar();
71 QStyleOptionTabV2 tab
;
73 tab
.shape
= tb
->shape();
74 int overlap
= style()->pixelMetric(PM_TabBarBaseOverlap
, &tab
, tb
);
76 if (overlap
<= 0 || tw
->isTabBarHidden() || tb
->count() == 0)
79 QStyleOptionTabBarBase opt
;
82 opt
.selectedTabRect
= tb
->tabRect(tb
->currentIndex());
83 opt
.selectedTabRect
= QRect(tb
->mapToParent(opt
.selectedTabRect
.topLeft()), opt
.selectedTabRect
.size());
84 opt
.tabBarRect
= QRect(tb
->mapToParent(tb
->rect().topLeft()), tb
->size());
86 if (tw
->tabPosition() == QTabWidget::North
)
87 opt
.rect
= QRect(option
->rect
.left(), option
->rect
.top(), option
->rect
.width(), overlap
);
89 opt
.rect
= QRect(option
->rect
.left(), option
->rect
.bottom() - overlap
- 1, option
->rect
.width(), overlap
);
91 style()->drawPrimitive(PE_FrameTabBarBase
, &opt
, painter
, tb
);
95 style()->drawPrimitive(element
, option
, painter
, widget
);
98 QPixmap
ContainerStyle::generatedIconPixmap(QIcon::Mode iconMode
, const QPixmap
&pixmap
,
99 const QStyleOption
*option
) const
101 return style()->generatedIconPixmap(iconMode
, pixmap
, option
);
104 QStyle::SubControl
ContainerStyle::hitTestComplexControl(ComplexControl control
, const QStyleOptionComplex
*option
,
105 const QPoint
&position
, const QWidget
*widget
) const
107 return style()->hitTestComplexControl(control
, option
, position
, widget
);
110 QRect
ContainerStyle::itemPixmapRect(const QRect
&rectangle
, int alignment
, const QPixmap
&pixmap
) const
112 return style()->itemPixmapRect(rectangle
, alignment
, pixmap
);
115 QRect
ContainerStyle::itemTextRect(const QFontMetrics
&metrics
, const QRect
&rectangle
, int alignment
,
116 bool enabled
, const QString
&text
) const
118 return style()->itemTextRect(metrics
, rectangle
, alignment
, enabled
, text
);
121 int ContainerStyle::pixelMetric(PixelMetric metric
, const QStyleOption
*option
, const QWidget
*widget
) const
123 return style()->pixelMetric(metric
, option
, widget
);
126 void ContainerStyle::polish(QWidget
*widget
)
128 style()->polish(widget
);
131 void ContainerStyle::polish(QApplication
*application
)
133 style()->polish(application
);
136 void ContainerStyle::polish(QPalette
&palette
)
138 style()->polish(palette
);
141 QSize
ContainerStyle::sizeFromContents(ContentsType type
, const QStyleOption
*option
,
142 const QSize
&contentsSize
, const QWidget
*widget
) const
144 return style()->sizeFromContents(type
, option
, contentsSize
, widget
);
147 QIcon
ContainerStyle::standardIcon(StandardPixmap standardIcon
, const QStyleOption
*option
,
148 const QWidget
*widget
) const
150 return style()->standardIcon(standardIcon
, option
, widget
);
153 QPixmap
ContainerStyle::standardPixmap(StandardPixmap standardPixmap
, const QStyleOption
*option
,
154 const QWidget
*widget
) const
156 return style()->standardPixmap(standardPixmap
, option
, widget
);
159 QPalette
ContainerStyle::standardPalette() const
161 return style()->standardPalette();
164 int ContainerStyle::styleHint(StyleHint hint
, const QStyleOption
*option
, const QWidget
*widget
,
165 QStyleHintReturn
*returnData
) const
167 return style()->styleHint(hint
, option
, widget
, returnData
);
170 QRect
ContainerStyle::subControlRect(ComplexControl control
, const QStyleOptionComplex
*option
,
171 SubControl subControl
, const QWidget
*widget
) const
173 return style()->subControlRect(control
, option
, subControl
, widget
);
176 QRect
ContainerStyle::subElementRect(SubElement element
, const QStyleOption
*option
,
177 const QWidget
*widget
) const
179 if (element
== SE_TabWidgetTabContents
)
181 QRect rect
= style()->subElementRect(SE_TabWidgetTabPane
, option
, widget
);
183 const Container
*tw
= static_cast<const Sublime::Container
*>(widget
);
184 const QTabBar
*tb
= tw
->tabBar();
186 QStyleOptionTabV2 tab
;
188 tab
.shape
= tb
->shape();
189 int overlap
= style()->pixelMetric(PM_TabBarBaseOverlap
, &tab
, tw
->tabBar());
191 if (overlap
<= 0 || tw
->isTabBarHidden())
194 return tw
->tabPosition() == QTabWidget::North
?
195 rect
.adjusted(0, overlap
, 0, 0) : rect
.adjusted(0, 0, 0, -overlap
);
197 return style()->subElementRect(element
, option
, widget
);
200 void ContainerStyle::unpolish(QWidget
*widget
)
202 style()->unpolish(widget
);
205 void ContainerStyle::unpolish(QApplication
*application
)
207 style()->unpolish(application
);