author | drw <drw> | 2005-08-09 18:10:46 (UTC) |
---|---|---|
committer | drw <drw> | 2005-08-09 18:10:46 (UTC) |
commit | 2630b8b81ddf6904379eedab4e3c307ee6399863 (patch) (unidiff) | |
tree | f88ea9ff42e77c322136de6dea4c5cb16e3e225e | |
parent | 438e79dd18c8b752f1e7d74a79f3cdf84f8703c8 (diff) | |
download | opie-2630b8b81ddf6904379eedab4e3c307ee6399863.zip opie-2630b8b81ddf6904379eedab4e3c307ee6399863.tar.gz opie-2630b8b81ddf6904379eedab4e3c307ee6399863.tar.bz2 |
Fix for bug #1682 - correct sizing of tab control
-rw-r--r-- | libopie2/opieui/otabwidget.cpp | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/libopie2/opieui/otabwidget.cpp b/libopie2/opieui/otabwidget.cpp index d617a9c..7103884 100644 --- a/libopie2/opieui/otabwidget.cpp +++ b/libopie2/opieui/otabwidget.cpp | |||
@@ -60,215 +60,224 @@ OTabWidget::OTabWidget( QWidget *parent, const char *name, TabStyle s, TabPositi | |||
60 | // Style | 60 | // Style |
61 | s = ( TabStyle ) config.readNumEntry( "TabStyle", (int) IconTab ); | 61 | s = ( TabStyle ) config.readNumEntry( "TabStyle", (int) IconTab ); |
62 | if ( s <= Global || s > IconList) | 62 | if ( s <= Global || s > IconList) |
63 | s = IconTab; | 63 | s = IconTab; |
64 | 64 | ||
65 | // Position | 65 | // Position |
66 | ( config.readEntry( "TabPosition", "Top" ) == "Bottom" ) ? p = Bottom | 66 | ( config.readEntry( "TabPosition", "Top" ) == "Bottom" ) ? p = Bottom |
67 | : p = Top; | 67 | : p = Top; |
68 | } | 68 | } |
69 | 69 | ||
70 | // Initialize widget stack for tab widgets | 70 | // Initialize widget stack for tab widgets |
71 | m_widgetStack = new QWidgetStack( this ); | 71 | m_widgetStack = new QWidgetStack( this ); |
72 | m_widgetStack->setFrameStyle( QFrame::NoFrame ); | 72 | m_widgetStack->setFrameStyle( QFrame::NoFrame ); |
73 | m_widgetStack->setLineWidth( style().defaultFrameWidth() ); | 73 | m_widgetStack->setLineWidth( style().defaultFrameWidth() ); |
74 | 74 | ||
75 | // Set initial selector control style and position | 75 | // Set initial selector control style and position |
76 | setTabStyle( s ); | 76 | setTabStyle( s ); |
77 | setTabPosition( p ); | 77 | setTabPosition( p ); |
78 | } | 78 | } |
79 | 79 | ||
80 | OTabWidget::~OTabWidget() | 80 | OTabWidget::~OTabWidget() |
81 | { | 81 | { |
82 | m_tabs.setAutoDelete( true ); | 82 | m_tabs.setAutoDelete( true ); |
83 | m_tabs.clear(); | 83 | m_tabs.clear(); |
84 | } | 84 | } |
85 | 85 | ||
86 | void OTabWidget::addTab( QWidget *child, const QString &icon, const QString &label ) | 86 | void OTabWidget::addTab( QWidget *child, const QString &icon, const QString &label ) |
87 | { | 87 | { |
88 | int tabid = -1; | 88 | int tabid = -1; |
89 | 89 | ||
90 | if ( m_usingTabs ) | 90 | if ( m_usingTabs ) |
91 | { | 91 | { |
92 | // Create new tab in tab bar | 92 | // Create new tab in tab bar |
93 | QTab *tab = new QTab(); | 93 | QTab *tab = new QTab(); |
94 | 94 | ||
95 | // Set label (and icon if necessary) | 95 | // Set label (and icon if necessary) |
96 | if ( m_tabBarStyle == IconTab ) | 96 | if ( m_tabBarStyle == IconTab ) |
97 | { | 97 | { |
98 | tab->label = QString::null; | 98 | tab->label = QString::null; |
99 | tab->iconset = new QIconSet( Opie::Core::OResource::loadPixmap( icon, Opie::Core::OResource::SmallIcon ) ); | 99 | tab->iconset = new QIconSet( Opie::Core::OResource::loadPixmap( icon, Opie::Core::OResource::SmallIcon ) ); |
100 | } | 100 | } |
101 | else | 101 | else |
102 | tab->label = label; | 102 | tab->label = label; |
103 | 103 | ||
104 | tabid = m_tabBar->addTab( tab ); | 104 | tabid = m_tabBar->addTab( tab ); |
105 | } | 105 | } |
106 | else | 106 | else |
107 | { | 107 | { |
108 | // Insert entry (with icon if necessary) into drop down list | 108 | // Insert entry (with icon if necessary) into drop down list |
109 | if ( m_tabBarStyle == IconList ) | 109 | if ( m_tabBarStyle == IconList ) |
110 | m_tabList->insertItem( Opie::Core::OResource::loadPixmap( icon, Opie::Core::OResource::SmallIcon ), label, -1 ); | 110 | m_tabList->insertItem( Opie::Core::OResource::loadPixmap( icon, Opie::Core::OResource::SmallIcon ), label, -1 ); |
111 | else | 111 | else |
112 | m_tabList->insertItem( label ); | 112 | m_tabList->insertItem( label ); |
113 | } | 113 | } |
114 | 114 | ||
115 | // Add widget to stack | 115 | // Add widget to stack |
116 | m_widgetStack->addWidget( child, tabid ); | 116 | m_widgetStack->addWidget( child, tabid ); |
117 | m_widgetStack->raiseWidget( child ); | 117 | m_widgetStack->raiseWidget( child ); |
118 | m_widgetStack->setFrameStyle( QFrame::StyledPanel | QFrame::Raised ); | 118 | m_widgetStack->setFrameStyle( QFrame::StyledPanel | QFrame::Raised ); |
119 | 119 | ||
120 | // Keep track of tab information | 120 | // Keep track of tab information |
121 | OTabInfo *tabinfo = new OTabInfo( tabid, child, icon, label ); | 121 | OTabInfo *tabinfo = new OTabInfo( tabid, child, icon, label ); |
122 | m_tabs.append( tabinfo ); | 122 | m_tabs.append( tabinfo ); |
123 | 123 | ||
124 | // Force resizing of child controls | ||
125 | resizeEvent( 0x0 ); | ||
126 | |||
124 | // Make newly added tab the current one displayed | 127 | // Make newly added tab the current one displayed |
125 | selectTab( tabinfo ); | 128 | selectTab( tabinfo ); |
126 | } | 129 | } |
127 | 130 | ||
128 | void OTabWidget::removePage( QWidget *childwidget ) | 131 | void OTabWidget::removePage( QWidget *childwidget ) |
129 | { | 132 | { |
130 | if ( childwidget ) | 133 | if ( childwidget ) |
131 | { | 134 | { |
132 | // Find tab information for desired widget | 135 | // Find tab information for desired widget |
133 | OTabInfo *tab = m_tabs.first(); | 136 | OTabInfo *tab = m_tabs.first(); |
134 | while ( tab && tab->control() != childwidget ) | 137 | while ( tab && tab->control() != childwidget ) |
135 | tab = m_tabs.next(); | 138 | tab = m_tabs.next(); |
136 | 139 | ||
137 | if ( tab && tab->control() == childwidget ) | 140 | if ( tab && tab->control() == childwidget ) |
138 | { | 141 | { |
139 | if ( m_usingTabs ) | 142 | if ( m_usingTabs ) |
140 | { | 143 | { |
141 | // Remove tab from tab bar | 144 | // Remove tab from tab bar |
142 | m_tabBar->setTabEnabled( tab->id(), false ); | 145 | m_tabBar->setTabEnabled( tab->id(), false ); |
143 | m_tabBar->removeTab( m_tabBar->tab( tab->id() ) ); | 146 | m_tabBar->removeTab( m_tabBar->tab( tab->id() ) ); |
144 | } | 147 | } |
145 | else | 148 | else |
146 | { | 149 | { |
147 | // Remove entry from drop down list | 150 | // Remove entry from drop down list |
148 | int i = 0; | 151 | int i = 0; |
149 | while ( i < m_tabList->count() && m_tabList->text( i ) != tab->label() ) | 152 | while ( i < m_tabList->count() && m_tabList->text( i ) != tab->label() ) |
150 | i++; | 153 | i++; |
151 | if ( m_tabList->text( i ) == tab->label() ) | 154 | if ( m_tabList->text( i ) == tab->label() ) |
152 | m_tabList->removeItem( i ); | 155 | m_tabList->removeItem( i ); |
153 | } | 156 | } |
154 | 157 | ||
155 | // Remove widget from stack | 158 | // Remove widget from stack |
156 | m_widgetStack->removeWidget( childwidget ); | 159 | m_widgetStack->removeWidget( childwidget ); |
157 | 160 | ||
158 | // Get rid of tab information | 161 | // Get rid of tab information |
159 | m_tabs.remove( tab ); | 162 | m_tabs.remove( tab ); |
160 | delete tab; | 163 | delete tab; |
161 | 164 | ||
162 | // Reset current tab | 165 | // Reset current tab |
163 | m_currTab = m_tabs.current(); | 166 | m_currTab = m_tabs.current(); |
164 | if ( !m_currTab ) | 167 | if ( !m_currTab ) |
165 | m_widgetStack->setFrameStyle( QFrame::NoFrame ); | 168 | m_widgetStack->setFrameStyle( QFrame::NoFrame ); |
166 | 169 | ||
167 | // Redraw widget | 170 | // Redraw widget |
168 | setUpLayout(); | 171 | setUpLayout(); |
169 | } | 172 | } |
173 | |||
174 | // Force resizing of child controls | ||
175 | resizeEvent( 0x0 ); | ||
170 | } | 176 | } |
171 | } | 177 | } |
172 | 178 | ||
173 | void OTabWidget::changeTab( QWidget *widget, const QString &iconset, const QString &label) | 179 | void OTabWidget::changeTab( QWidget *widget, const QString &iconset, const QString &label) |
174 | { | 180 | { |
175 | // Find tab information for desired widget | 181 | // Find tab information for desired widget |
176 | OTabInfo *currtab = m_tabs.first(); | 182 | OTabInfo *currtab = m_tabs.first(); |
177 | while ( currtab && currtab->control() != widget ) | 183 | while ( currtab && currtab->control() != widget ) |
178 | currtab = m_tabs.next(); | 184 | currtab = m_tabs.next(); |
179 | 185 | ||
180 | if ( currtab && currtab->control() == widget ) | 186 | if ( currtab && currtab->control() == widget ) |
181 | { | 187 | { |
182 | QPixmap icon( Opie::Core::OResource::loadPixmap( iconset, Opie::Core::OResource::SmallIcon ) ); | 188 | QPixmap icon( Opie::Core::OResource::loadPixmap( iconset, Opie::Core::OResource::SmallIcon ) ); |
183 | 189 | ||
184 | if ( m_usingTabs ) | 190 | if ( m_usingTabs ) |
185 | { | 191 | { |
186 | // Update tab label and icon (if necessary) | 192 | // Update tab label and icon (if necessary) |
187 | QTab *tab = m_tabBar->tab( currtab->id() ); | 193 | QTab *tab = m_tabBar->tab( currtab->id() ); |
188 | tab->setText( label ); | 194 | tab->setText( label ); |
189 | if ( m_tabBarStyle == IconTab ) | 195 | if ( m_tabBarStyle == IconTab ) |
190 | tab->setIconSet( icon ); | 196 | tab->setIconSet( icon ); |
191 | } | 197 | } |
192 | else | 198 | else |
193 | { | 199 | { |
194 | // Update entry label and icon (if necessary) | 200 | // Update entry label and icon (if necessary) |
195 | int i = 0; | 201 | int i = 0; |
196 | while ( i < m_tabList->count() && m_tabList->text( i ) != currtab->label() ) | 202 | while ( i < m_tabList->count() && m_tabList->text( i ) != currtab->label() ) |
197 | i++; | 203 | i++; |
198 | if ( i < m_tabList->count() && m_tabList->text( i ) == currtab->label() ) | 204 | if ( i < m_tabList->count() && m_tabList->text( i ) == currtab->label() ) |
199 | { | 205 | { |
200 | if ( m_tabBarStyle == IconList ) | 206 | if ( m_tabBarStyle == IconList ) |
201 | m_tabList->changeItem( icon, label, i ); | 207 | m_tabList->changeItem( icon, label, i ); |
202 | else | 208 | else |
203 | m_tabList->changeItem( label, i ); | 209 | m_tabList->changeItem( label, i ); |
204 | } | 210 | } |
205 | } | 211 | } |
206 | 212 | ||
207 | // Update tab information | 213 | // Update tab information |
208 | currtab->setLabel( label ); | 214 | currtab->setLabel( label ); |
209 | currtab->setIcon( iconset ); | 215 | currtab->setIcon( iconset ); |
210 | 216 | ||
217 | // Force resizing of child controls | ||
218 | resizeEvent( 0x0 ); | ||
219 | |||
211 | // Redraw widget | 220 | // Redraw widget |
212 | setUpLayout(); | 221 | setUpLayout(); |
213 | } | 222 | } |
214 | } | 223 | } |
215 | 224 | ||
216 | void OTabWidget::setCurrentTab( QWidget *childwidget ) | 225 | void OTabWidget::setCurrentTab( QWidget *childwidget ) |
217 | { | 226 | { |
218 | OTabInfo *currtab = m_tabs.first(); | 227 | OTabInfo *currtab = m_tabs.first(); |
219 | while ( currtab && currtab->control() != childwidget ) | 228 | while ( currtab && currtab->control() != childwidget ) |
220 | { | 229 | { |
221 | currtab = m_tabs.next(); | 230 | currtab = m_tabs.next(); |
222 | } | 231 | } |
223 | if ( currtab && currtab->control() == childwidget ) | 232 | if ( currtab && currtab->control() == childwidget ) |
224 | { | 233 | { |
225 | selectTab( currtab ); | 234 | selectTab( currtab ); |
226 | } | 235 | } |
227 | } | 236 | } |
228 | 237 | ||
229 | void OTabWidget::setCurrentTab( const QString &tabname ) | 238 | void OTabWidget::setCurrentTab( const QString &tabname ) |
230 | { | 239 | { |
231 | OTabInfo *newtab = m_tabs.first(); | 240 | OTabInfo *newtab = m_tabs.first(); |
232 | while ( newtab && newtab->label() != tabname ) | 241 | while ( newtab && newtab->label() != tabname ) |
233 | { | 242 | { |
234 | newtab = m_tabs.next(); | 243 | newtab = m_tabs.next(); |
235 | } | 244 | } |
236 | if ( newtab && newtab->label() == tabname ) | 245 | if ( newtab && newtab->label() == tabname ) |
237 | { | 246 | { |
238 | selectTab( newtab ); | 247 | selectTab( newtab ); |
239 | } | 248 | } |
240 | } | 249 | } |
241 | 250 | ||
242 | void OTabWidget::setCurrentTab(int tabindex) | 251 | void OTabWidget::setCurrentTab(int tabindex) |
243 | { | 252 | { |
244 | OTabInfo *newtab = m_tabs.first(); | 253 | OTabInfo *newtab = m_tabs.first(); |
245 | while ( newtab && newtab->id() != tabindex ) | 254 | while ( newtab && newtab->id() != tabindex ) |
246 | { | 255 | { |
247 | newtab = m_tabs.next(); | 256 | newtab = m_tabs.next(); |
248 | } | 257 | } |
249 | if ( newtab && newtab->id() == tabindex ) | 258 | if ( newtab && newtab->id() == tabindex ) |
250 | { | 259 | { |
251 | selectTab( newtab ); | 260 | selectTab( newtab ); |
252 | } | 261 | } |
253 | } | 262 | } |
254 | 263 | ||
255 | 264 | ||
256 | OTabWidget::TabStyle OTabWidget::tabStyle() const | 265 | OTabWidget::TabStyle OTabWidget::tabStyle() const |
257 | { | 266 | { |
258 | return m_tabBarStyle; | 267 | return m_tabBarStyle; |
259 | } | 268 | } |
260 | 269 | ||
261 | void OTabWidget::setTabStyle( TabStyle s ) | 270 | void OTabWidget::setTabStyle( TabStyle s ) |
262 | { | 271 | { |
263 | // Get out if new and current styles are the same | 272 | // Get out if new and current styles are the same |
264 | if ( s == m_tabBarStyle ) | 273 | if ( s == m_tabBarStyle ) |
265 | return; | 274 | return; |
266 | 275 | ||
267 | // Delete current selector control | 276 | // Delete current selector control |
268 | if ( m_usingTabs ) | 277 | if ( m_usingTabs ) |
269 | { | 278 | { |
270 | delete m_tabBar; | 279 | delete m_tabBar; |
271 | m_tabBar = 0l; | 280 | m_tabBar = 0l; |
272 | } | 281 | } |
273 | else | 282 | else |
274 | { | 283 | { |