]>
cloud.milkyroute.net Git - dolphin.git/blob - src/dolphintabpage.cpp
1 /***************************************************************************
2 * Copyright (C) 2014 by Emmanuel Pescosta <emmanuelpescosta099@gmail.com> *
4 * This program is free software; you can redistribute it and/or modify *
5 * it under the terms of the GNU General Public License as published by *
6 * the Free Software Foundation; either version 2 of the License, or *
7 * (at your option) any later version. *
9 * This program is distributed in the hope that it will be useful, *
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
12 * GNU General Public License for more details. *
14 * You should have received a copy of the GNU General Public License *
15 * along with this program; if not, write to the *
16 * Free Software Foundation, Inc., *
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
18 ***************************************************************************/
20 #include "dolphintabpage.h"
22 #include "dolphinviewcontainer.h"
23 #include "dolphin_generalsettings.h"
27 DolphinTabPage::DolphinTabPage(const KUrl
& primaryUrl
, const KUrl
& secondaryUrl
, QWidget
* parent
) :
29 m_primaryViewActive(true),
30 m_splitViewEnabled(false)
32 QVBoxLayout
* layout
= new QVBoxLayout(this);
33 layout
->setSpacing(0);
36 m_splitter
= new QSplitter(Qt::Horizontal
, this);
37 m_splitter
->setChildrenCollapsible(false);
38 layout
->addWidget(m_splitter
);
40 // Create a new primary view
41 m_primaryViewContainer
= createViewContainer(primaryUrl
);
42 connect(m_primaryViewContainer
->view(), SIGNAL(urlChanged(KUrl
)),
43 this, SIGNAL(activeViewUrlChanged(KUrl
)));
45 m_splitter
->addWidget(m_primaryViewContainer
);
46 m_primaryViewContainer
->show();
48 if (secondaryUrl
.isValid() || GeneralSettings::splitView()) {
49 // Provide a secondary view, if the given secondary url is valid or if the
50 // startup settings are set this way (use the url of the primary view).
51 m_splitViewEnabled
= true;
52 const KUrl
& url
= secondaryUrl
.isValid() ? secondaryUrl
: primaryUrl
;
53 m_secondaryViewContainer
= createViewContainer(url
);
54 m_splitter
->addWidget(m_secondaryViewContainer
);
55 m_secondaryViewContainer
->show();
58 m_primaryViewContainer
->setActive(true);
61 bool DolphinTabPage::primaryViewActive() const
63 return m_primaryViewActive
;
66 bool DolphinTabPage::splitViewEnabled() const
68 return m_splitViewEnabled
;
71 void DolphinTabPage::setSplitViewEnabled(bool enabled
)
73 if (m_splitViewEnabled
!= enabled
) {
74 m_splitViewEnabled
= enabled
;
77 const KUrl
& url
= m_primaryViewContainer
->url();
78 m_secondaryViewContainer
= createViewContainer(url
);
79 m_splitter
->addWidget(m_secondaryViewContainer
);
80 m_secondaryViewContainer
->show();
81 m_secondaryViewContainer
->setActive(true);
83 // Close the view which is active.
84 DolphinViewContainer
* view
= activeViewContainer();
85 if (m_primaryViewActive
) {
86 // If the primary view is active, we have to swap the pointers
87 // because the secondary view will be the new primary view.
88 qSwap(m_primaryViewContainer
, m_secondaryViewContainer
);
90 m_primaryViewContainer
->setActive(true);
97 DolphinViewContainer
* DolphinTabPage::primaryViewContainer() const
99 return m_primaryViewContainer
;
102 DolphinViewContainer
* DolphinTabPage::secondaryViewContainer() const
104 return m_secondaryViewContainer
;
107 DolphinViewContainer
* DolphinTabPage::activeViewContainer() const
109 return m_primaryViewActive
? m_primaryViewContainer
:
110 m_secondaryViewContainer
;
113 KFileItemList
DolphinTabPage::selectedItems() const
115 KFileItemList items
= m_primaryViewContainer
->view()->selectedItems();
116 if (m_splitViewEnabled
) {
117 items
+= m_secondaryViewContainer
->view()->selectedItems();
122 int DolphinTabPage::selectedItemsCount() const
124 int selectedItemsCount
= m_primaryViewContainer
->view()->selectedItemsCount();
125 if (m_splitViewEnabled
) {
126 selectedItemsCount
+= m_secondaryViewContainer
->view()->selectedItemsCount();
128 return selectedItemsCount
;
131 void DolphinTabPage::markUrlsAsSelected(const QList
<KUrl
>& urls
)
133 m_primaryViewContainer
->view()->markUrlsAsSelected(urls
);
134 if (m_splitViewEnabled
) {
135 m_secondaryViewContainer
->view()->markUrlsAsSelected(urls
);
139 void DolphinTabPage::markUrlAsCurrent(const KUrl
& url
)
141 m_primaryViewContainer
->view()->markUrlAsCurrent(url
);
142 if (m_splitViewEnabled
) {
143 m_secondaryViewContainer
->view()->markUrlAsCurrent(url
);
147 void DolphinTabPage::setPlacesSelectorVisible(bool visible
)
149 m_primaryViewContainer
->urlNavigator()->setPlacesSelectorVisible(visible
);
150 if (m_splitViewEnabled
) {
151 m_secondaryViewContainer
->urlNavigator()->setPlacesSelectorVisible(visible
);
155 void DolphinTabPage::refreshViews()
157 m_primaryViewContainer
->readSettings();
158 if (m_splitViewEnabled
) {
159 m_secondaryViewContainer
->readSettings();
163 QByteArray
DolphinTabPage::saveState() const
166 QDataStream
stream(&state
, QIODevice::WriteOnly
);
168 stream
<< m_splitViewEnabled
;
170 stream
<< m_primaryViewContainer
->url();
171 stream
<< m_primaryViewContainer
->urlNavigator()->isUrlEditable();
173 if (m_splitViewEnabled
) {
174 stream
<< m_secondaryViewContainer
->url();
175 stream
<< m_secondaryViewContainer
->urlNavigator()->isUrlEditable();
178 stream
<< m_primaryViewActive
;
179 stream
<< m_splitter
->saveState();
184 void DolphinTabPage::restoreState(const QByteArray
& state
)
186 QByteArray sd
= state
;
187 QDataStream
stream(&sd
, QIODevice::ReadOnly
);
189 bool isSplitViewEnabled
= false;
190 stream
>> isSplitViewEnabled
;
191 setSplitViewEnabled(isSplitViewEnabled
);
194 stream
>> primaryUrl
;
195 m_primaryViewContainer
->setUrl(primaryUrl
);
196 bool primaryUrlEditable
;
197 stream
>> primaryUrlEditable
;
198 m_primaryViewContainer
->urlNavigator()->setUrlEditable(primaryUrlEditable
);
200 if (isSplitViewEnabled
) {
202 stream
>> secondaryUrl
;
203 m_secondaryViewContainer
->setUrl(secondaryUrl
);
204 bool secondaryUrlEditable
;
205 stream
>> secondaryUrlEditable
;
206 m_secondaryViewContainer
->urlNavigator()->setUrlEditable(secondaryUrlEditable
);
209 stream
>> m_primaryViewActive
;
210 if (m_primaryViewActive
) {
211 m_primaryViewContainer
->setActive(true);
213 Q_ASSERT(m_splitViewEnabled
);
214 m_secondaryViewContainer
->setActive(true);
217 QByteArray splitterState
;
218 stream
>> splitterState
;
219 m_splitter
->restoreState(splitterState
);
222 void DolphinTabPage::slotViewActivated()
224 const DolphinView
* oldActiveView
= activeViewContainer()->view();
226 // Set the view, which was active before, to inactive
227 // and update the active view type.
228 if (m_splitViewEnabled
) {
229 activeViewContainer()->setActive(false);
230 m_primaryViewActive
= !m_primaryViewActive
;
232 m_primaryViewActive
= true;
235 const DolphinView
* newActiveView
= activeViewContainer()->view();
237 if (newActiveView
!= oldActiveView
) {
238 disconnect(oldActiveView
, SIGNAL(urlChanged(KUrl
)),
239 this, SIGNAL(activeViewUrlChanged(KUrl
)));
240 connect(newActiveView
, SIGNAL(urlChanged(KUrl
)),
241 this, SIGNAL(activeViewUrlChanged(KUrl
)));
244 emit
activeViewUrlChanged(activeViewContainer()->url());
245 emit
activeViewChanged();
248 DolphinViewContainer
* DolphinTabPage::createViewContainer(const KUrl
& url
) const
250 DolphinViewContainer
* container
= new DolphinViewContainer(url
, m_splitter
);
251 container
->setActive(false);
253 const DolphinView
* view
= container
->view();
254 connect(view
, SIGNAL(activated()),
255 this, SLOT(slotViewActivated()));