00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
#include "ktabzoombarlayout.h"
00013
00014
00015 class KTabZoomBarLayoutIterator :
public QGLayoutIterator
00016 {
00017
public:
00018
00019 KTabZoomBarLayoutIterator(
QPtrList<QLayoutItem> *l)
00020 :
idx(0),
list(l)
00021 {
00022 }
00023
00024 QLayoutItem *
current()
00025 {
00026
return idx < int(
list->count()) ?
list->at(
idx) : 0;
00027 }
00028
00029 QLayoutItem *
next()
00030 {
00031
idx++;
00032
return current();
00033 }
00034
00035 QLayoutItem *
takeCurrent()
00036 {
00037
return list->take(
idx);
00038 }
00039
00040
private:
00041
00042 int idx;
00043 QPtrList<QLayoutItem> *
list;
00044
00045 };
00046
00047
00048 KTabZoomBarLayout::KTabZoomBarLayout(
QWidget *parent, KTabZoomPosition::Position pos)
00049 :
QLayout(parent, 0, 2), m_pos(pos)
00050 {
00051
m_fontHeight = parent->fontMetrics().height();
00052 }
00053
00054 KTabZoomBarLayout::KTabZoomBarLayout(
QLayout *parent, KTabZoomPosition::Position pos)
00055 :
QLayout(parent, 2), m_pos(pos), m_fontHeight(10)
00056 {
00057 }
00058
00059
00060 KTabZoomBarLayout::KTabZoomBarLayout(KTabZoomPosition::Position pos)
00061 :
QLayout(2), m_pos(pos), m_fontHeight(10)
00062 {
00063 }
00064
00065
00066 KTabZoomBarLayout::~KTabZoomBarLayout()
00067 {
00068 deleteAllItems();
00069 }
00070
00071
00072 void KTabZoomBarLayout::addItem(
QLayoutItem *item)
00073 {
00074
m_list.append(item);
00075 }
00076
00077
00078 QSize KTabZoomBarLayout::sizeHint()
const
00079
{
00080
QSize sh(100,100);
00081
if ((
m_pos == KTabZoomPosition::Top) || (
m_pos == KTabZoomPosition::Bottom))
00082 sh =
QSize(
completeSize(),
m_fontHeight + 2);
00083
else
00084 sh = QSize(
m_fontHeight + 2,
completeSize());
00085
00086
return sh;
00087 }
00088
00089
00090 QSize KTabZoomBarLayout::minimumSize()
const
00091
{
00092
if ((
m_pos == KTabZoomPosition::Top) || (
m_pos == KTabZoomPosition::Bottom))
00093
return QSize(
completeSize(),
m_fontHeight + 2);
00094
else
00095
return QSize(
m_fontHeight + 2,
completeSize());
00096 }
00097
00098
00099 QLayoutIterator KTabZoomBarLayout::iterator()
00100 {
00101
return QLayoutIterator(
new KTabZoomBarLayoutIterator(&
m_list));
00102 }
00103
00104
00105 void KTabZoomBarLayout::setGeometry(
const QRect &rect)
00106 {
00107 QLayout::setGeometry(rect);
00108
00109
QPtrListIterator<QLayoutItem> it(
m_list);
00110
if (it.count() == 0)
00111
return;
00112
00113
QLayoutItem *o;
00114
int i = 0;
00115
00116
if ((
m_pos == KTabZoomPosition::Top) || (
m_pos == KTabZoomPosition::Bottom))
00117 {
00118
int w=0, h=0;
00119
00120
while ((o = it.current()) != 0)
00121 {
00122 ++it;
00123
00124
QSize sh = o->sizeHint();
00125
00126
if (w + sh.width() > rect.width())
00127 {
00128 w = 0;
00129 h = h +
m_fontHeight + 2;
00130 }
00131
00132 o->setGeometry(
QRect(w, h, sh.width(), sh.height()));
00133 w = w + sh.width() + spacing();
00134
00135 ++i;
00136 }
00137 }
00138
else
00139 {
00140
int h=0;
00141
00142
while ((o = it.current()) != 0)
00143 {
00144 ++it;
00145
00146
QSize sh = o->sizeHint();
00147
00148 o->setGeometry(
QRect(0, h, sh.width(), sh.height()));
00149 h = h + sh.height() + spacing();
00150
00151 ++i;
00152 }
00153 }
00154 }
00155
00156
00157 bool KTabZoomBarLayout::hasHeightForWidth ()
const
00158
{
00159
return (
m_pos == KTabZoomPosition::Top) || (
m_pos == KTabZoomPosition::Bottom);
00160 }
00161
00162
00163 int KTabZoomBarLayout::heightForWidth (
int width)
const
00164
{
00165
if ((
m_pos == KTabZoomPosition::Left) || (
m_pos == KTabZoomPosition::Right))
00166
return -1;
00167
00168
int height =
m_fontHeight + 2;
00169
00170
int w = 0;
00171
00172
QPtrListIterator<QLayoutItem> it(
m_list);
00173
QLayoutItem *o;
00174
while ((o = it.current()) != 0)
00175 {
00176 ++it;
00177
00178
QSize sh = o->sizeHint();
00179
00180
if ((w + sh.width()) < width)
00181 w = w + sh.width() + spacing();
00182
else
00183 {
00184 height = height + m_fontHeight + 2;
00185 w = sh.width() + spacing();
00186 }
00187 }
00188
00189
return height;
00190 }
00191
00192
00193 int KTabZoomBarLayout::completeSize()
const
00194
{
00195
QPtrListIterator<QLayoutItem> it(
m_list);
00196
00197
int s = spacing() * (it.count() - 1);
00198
00199
QLayoutItem *o;
00200
while ((o = it.current()) != 0)
00201 {
00202 ++it;
00203
00204
QSize sh = o->sizeHint();
00205
00206
if ((
m_pos == KTabZoomPosition::Left) || (
m_pos == KTabZoomPosition::Right))
00207 s += sh.width();
00208
else
00209 s += sh.height();
00210 }
00211
00212
return s;
00213 }