~ubuntu-branches/ubuntu/edgy/digikam/edgy-updates

« back to all changes in this revision

Viewing changes to digikam/libs/widgets/sidebar.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Achim Bohnet
  • Date: 2006-05-15 01:15:02 UTC
  • mfrom: (1.2.5 upstream)
  • Revision ID: james.westby@ubuntu.com-20060515011502-kpyuz7766hpbuia8
Tags: 0.8.2~rc1-0ubuntu1
* sync with debian (UVF see #44102)
  0.8.2~rc1-0ubuntu1 is identical to debian's 0.8.1+0.8.2-rc1-1.
  Version was changed due to latest 0.8.1.ubuntu-0ubuntu1 upload.
  This version is unfortunately bigger than debian's 0.8.1+0.8.2-rc1-1
* Merge in ubuntu changelog

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
 
19
19
/** @file sidebar.cpp */
20
20
 
21
 
#include "sidebar.h"
 
21
// QT includes.
22
22
 
23
23
#include <qsplitter.h>
24
24
#include <qwidgetstack.h>
25
25
#include <qdatastream.h>
26
26
 
 
27
// KDE includes.
 
28
 
27
29
#include <kapplication.h>
28
30
#include <kconfig.h>
29
31
#include <kdeversion.h>
30
32
#include <kmultitabbar.h>
31
33
#include <kiconloader.h>
32
34
 
33
 
using namespace Digikam;
 
35
// Local includes.
 
36
 
 
37
#include "sidebar.h"
 
38
 
 
39
namespace Digikam
 
40
{
 
41
    
 
42
class SidebarPriv
 
43
{
 
44
public:
 
45
 
 
46
    SidebarPriv()
 
47
    {
 
48
        stack     = 0;
 
49
        splitter  = 0;
 
50
        tabs      = 0;
 
51
        activeTab = -1;
 
52
        minimized = false;
 
53
    }
 
54
 
 
55
    bool          minimizedDefault;
 
56
    bool          minimized;
 
57
 
 
58
    int           tabs;
 
59
    int           activeTab;
 
60
    int           minSize;
 
61
    int           maxSize;
 
62
        
 
63
    QWidgetStack *stack;
 
64
    QSplitter    *splitter;
 
65
    QSize         bigSize;
 
66
 
 
67
    Sidebar::Side side;
 
68
};
34
69
 
35
70
Sidebar::Sidebar(QWidget *parent, Side side, bool minimizedDefault)
36
71
    : KMultiTabBar(KMultiTabBar::Vertical, parent, "Sidebar")
37
72
{
38
 
    m_tabs = 0;
39
 
    m_activeTab = -1;
40
 
    m_minimized = false;
41
 
    m_minimizedDefault = minimizedDefault;
42
 
    m_side = side;
 
73
    d = new SidebarPriv;
 
74
    d->minimizedDefault = minimizedDefault;
 
75
    d->side = side;
43
76
}
44
77
 
45
78
Sidebar::~Sidebar()
46
79
{
47
80
    saveViewState();
 
81
    delete d;
48
82
}
49
83
 
50
84
void Sidebar::setSplitter(QSplitter *sp)
55
89
    setStyle(KMultiTabBar::KDEV3);
56
90
#endif
57
91
    showActiveTabTexts(true);
58
 
    m_stack = new QWidgetStack(sp);
 
92
    d->stack = new QWidgetStack(sp);
59
93
            
60
 
    if(m_side == Left)
 
94
    if(d->side == Left)
61
95
        setPosition(KMultiTabBar::Left);
62
96
    else
63
97
        setPosition(KMultiTabBar::Right);
69
103
    int minimized;
70
104
    
71
105
    KConfig *config = kapp->config();
72
 
    config->setGroup(QString("%1-%2").arg(name()).arg(m_side));
 
106
    config->setGroup(QString("%1-%2").arg(name()).arg(d->side));
73
107
   
74
108
    tab = config->readNumEntry("ActiveTab", 0);
75
 
    minimized = config->readNumEntry("Minimized", m_minimizedDefault);
 
109
    minimized = config->readNumEntry("Minimized", d->minimizedDefault);
76
110
        
77
111
    if(minimized)
78
112
    {
79
 
        m_activeTab = tab;
80
 
        setTab(m_activeTab, true);
81
 
        m_stack->raiseWidget(m_activeTab);
 
113
        d->activeTab = tab;
 
114
        setTab(d->activeTab, true);
 
115
        d->stack->raiseWidget(d->activeTab);
82
116
 
83
 
        emit signalChangedTab(m_stack->visibleWidget());        
 
117
        emit signalChangedTab(d->stack->visibleWidget());
84
118
    }
85
119
    else
86
 
        m_activeTab = -1;
 
120
        d->activeTab = -1;
87
121
    
88
122
    clicked(tab);
89
123
}
91
125
void Sidebar::saveViewState()
92
126
{
93
127
    KConfig *config = kapp->config();
94
 
    config->setGroup(QString("%1-%2").arg(name()).arg(m_side));
 
128
    config->setGroup(QString("%1-%2").arg(name()).arg(d->side));
95
129
    
96
 
    config->writeEntry("ActiveTab", m_activeTab);
97
 
    config->writeEntry("Minimized", (int)m_minimized);
 
130
    config->writeEntry("ActiveTab", d->activeTab);
 
131
    config->writeEntry("Minimized", (int)d->minimized);
98
132
}
99
133
 
100
134
void Sidebar::appendTab(QWidget *w, const QPixmap &pic, const QString &title)
101
135
{
102
 
    w->reparent(m_stack, QPoint(0,0));
103
 
    KMultiTabBar::appendTab(pic, m_tabs, title);
104
 
    m_stack->addWidget(w, m_tabs);
 
136
    w->reparent(d->stack, QPoint(0,0));
 
137
    KMultiTabBar::appendTab(pic, d->tabs, title);
 
138
    d->stack->addWidget(w, d->tabs);
105
139
 
106
 
    connect(tab(m_tabs), SIGNAL(clicked(int)),
 
140
    connect(tab(d->tabs), SIGNAL(clicked(int)),
107
141
            this, SLOT(clicked(int)));
108
142
    
109
 
    m_tabs++;
 
143
    d->tabs++;
110
144
}
111
145
 
112
146
void Sidebar::deleteTab(QWidget *w)
113
147
{
114
 
    int tab = m_stack->id(w);
 
148
    int tab = d->stack->id(w);
115
149
    if(tab < 0)
116
150
        return;
117
151
    
118
 
    if(tab == m_activeTab)
119
 
        m_activeTab = -1;
 
152
    if(tab == d->activeTab)
 
153
        d->activeTab = -1;
120
154
    
121
155
    removeTab(tab);
122
156
    //TODO show another widget
124
158
 
125
159
void Sidebar::clicked(int tab)
126
160
{
127
 
    if(tab >= m_tabs || tab < 0)
 
161
    if(tab >= d->tabs || tab < 0)
128
162
        return;
129
163
    
130
 
    if(tab == m_activeTab)
 
164
    if(tab == d->activeTab)
131
165
    {
132
 
        m_stack->isHidden() ? expand() : shrink();
 
166
        d->stack->isHidden() ? expand() : shrink();
133
167
    }
134
168
    else
135
169
    {
136
 
        if(m_activeTab >= 0)
137
 
            setTab(m_activeTab, false);
 
170
        if(d->activeTab >= 0)
 
171
            setTab(d->activeTab, false);
138
172
    
139
 
        m_activeTab = tab;    
140
 
        setTab(m_activeTab, true);
141
 
        m_stack->raiseWidget(m_activeTab);
 
173
        d->activeTab = tab;
 
174
        setTab(d->activeTab, true);
 
175
        d->stack->raiseWidget(d->activeTab);
142
176
        
143
 
        if(m_minimized)
 
177
        if(d->minimized)
144
178
            expand();
145
179
 
146
 
        emit signalChangedTab(m_stack->visibleWidget());
 
180
        emit signalChangedTab(d->stack->visibleWidget());
147
181
    }
148
182
}
149
183
 
150
184
void Sidebar::setActiveTab(QWidget *w)
151
185
{
152
 
    int tab = m_stack->id(w);
 
186
    int tab = d->stack->id(w);
153
187
    if(tab < 0)
154
188
        return;
155
189
    
156
 
    if(m_activeTab >= 0)
157
 
        setTab(m_activeTab, false);
 
190
    if(d->activeTab >= 0)
 
191
        setTab(d->activeTab, false);
158
192
    
159
 
    m_activeTab = tab;    
160
 
    setTab(m_activeTab, true);
161
 
    m_stack->raiseWidget(m_activeTab);
 
193
    d->activeTab = tab;
 
194
    setTab(d->activeTab, true);
 
195
    d->stack->raiseWidget(d->activeTab);
162
196
        
163
 
    if(m_minimized)
 
197
    if(d->minimized)
164
198
        expand();    
165
199
 
166
 
    emit signalChangedTab(m_stack->visibleWidget());
 
200
    emit signalChangedTab(d->stack->visibleWidget());
167
201
}
168
202
 
169
203
QWidget* Sidebar::getActiveTab()
170
204
{
171
 
    return m_stack->visibleWidget();
 
205
    return d->stack->visibleWidget();
172
206
}
173
207
 
174
208
void Sidebar::shrink()
175
209
{
176
 
    m_minimized = true;
177
 
    m_bigSize = size();
178
 
    m_minSize = minimumWidth();
179
 
    m_maxSize = maximumWidth();
 
210
    d->minimized = true;
 
211
    d->bigSize = size();
 
212
    d->minSize = minimumWidth();
 
213
    d->maxSize = maximumWidth();
180
214
            
181
 
    m_stack->hide();
 
215
    d->stack->hide();
182
216
 
183
217
    KMultiTabBarTab* tab = tabs()->first();
184
218
    if (tab)
193
227
 
194
228
void Sidebar::expand()
195
229
{
196
 
    m_minimized = false;
197
 
    m_stack->show();
198
 
    resize(m_bigSize);
199
 
    setMinimumWidth(m_minSize);
200
 
    setMaximumWidth(m_maxSize);
 
230
    d->minimized = false;
 
231
    d->stack->show();
 
232
    resize(d->bigSize);
 
233
    setMinimumWidth(d->minSize);
 
234
    setMaximumWidth(d->maxSize);
201
235
}
202
236
 
 
237
}  // namespace Digikam
 
238
 
203
239
#include "sidebar.moc"