1 /* This file is part of the KDE project
3 Copyright (C) 2005 Dario Massarin <nekkar@libero.it>
4 Copyright (C) 2007 Urs Wolfer <uwolfer @ kde.org>
6 This program is free software; you can redistribute it and/or
7 modify it under the terms of the GNU General Public
8 License as published by the Free Software Foundation; either
9 version 2 of the License, or (at your option) any later version.
12 #include "viewscontainer.h"
14 #include "core/kget.h"
15 #include "core/plugin/transferfactory.h"
16 #include "core/transferhandler.h"
17 #include "core/transfertreeselectionmodel.h"
18 #include "transfersview.h"
19 #include "transfersviewdelegate.h"
20 #include "transferdetails.h"
24 #include <kiconloader.h>
26 #include <kio/global.h>
27 #include <KTitleWidget>
33 TitleBar::TitleBar(QWidget
* parent
)
36 m_titleWidget
= new KTitleWidget(this);
38 QHBoxLayout
*layout
= new QHBoxLayout(this);
39 layout
->addWidget(m_titleWidget
);
42 void TitleBar::setTransfer(TransferHandler
* transfer
)
44 m_titleWidget
->setText(i18n("Details for: %1", transfer
->source().fileName()), Qt::AlignCenter
);
47 void TitleBar::setDownloadsWindow()
49 m_titleWidget
->setText(i18n("All downloads"), Qt::AlignCenter
);
52 void TitleBar::setFinishedWindow()
54 m_titleWidget
->setText(i18n("Finished downloads"), Qt::AlignCenter
);
57 ButtonBase::ButtonBase(QWidget
* parent
)
60 setToolButtonStyle(Qt::ToolButtonTextBesideIcon
);
61 setAutoExclusive(true);
65 connect(this, SIGNAL(toggled(bool)), SLOT(slotToggled(bool)));
68 void ButtonBase::slotToggled(bool checked
)
70 kDebug(5001) << "ButtonBase::slotToggled";
77 TransfersButton::TransfersButton()
78 : m_selectedTransfer(0)
80 setPopupMode(QToolButton::MenuButtonPopup
);
82 m_menu
= new QMenu(this);
83 m_menu
->setTitle(i18n("Transfers:"));
88 connect(m_menu
, SIGNAL(triggered(QAction
*)),
89 this, SLOT(slotActionTriggered(QAction
*)));
92 void TransfersButton::addTransfer(TransferHandler
* transfer
)
94 QString filename
= transfer
->source().fileName();
96 QAction
* action
= m_menu
->addAction(KIO::pixmapForUrl( transfer
->source(), 0, KIconLoader::Desktop
, 16 ), filename
);
97 m_transfersMap
[action
] = transfer
;
99 if(!m_selectedTransfer
)
101 m_selectedTransfer
= transfer
;
107 void TransfersButton::removeTransfer(TransferHandler
* transfer
)
109 QMap
<QAction
*, TransferHandler
*>::iterator it
= m_transfersMap
.begin();
110 while (it
!= m_transfersMap
.end())
112 QMap
<QAction
*, TransferHandler
*>::iterator prev
= it
;
114 if (prev
.value() == transfer
)
117 m_transfersMap
.erase(prev
);
122 if(m_transfersMap
.count() == 0)
129 if(m_selectedTransfer
== transfer
)
131 m_selectedTransfer
= m_transfersMap
.begin().value();
132 setText(m_selectedTransfer
->source().fileName());
134 emit
selectedTransfer(m_selectedTransfer
);
139 void TransfersButton::setTransfer(TransferHandler
* transfer
)
141 m_selectedTransfer
= transfer
;
142 setText(transfer
->source().fileName());
143 setIcon(KIO::pixmapForUrl( transfer
->source(), 0, KIconLoader::Desktop
, 16 ));
147 void TransfersButton::slotToggled(bool checked
)
149 kDebug(5001) << "TransfersButton::slotToggled";
152 if(m_selectedTransfer
)
153 emit
selectedTransfer(m_selectedTransfer
);
157 void TransfersButton::slotActionTriggered(QAction
* action
)
159 kDebug(5001) << "Slot action triggered";
161 emit
selectedTransfer(m_transfersMap
[action
]);
164 ViewsContainer::ViewsContainer(QWidget
* parent
)
168 m_bottomBar
= new QWidget(this);
169 QVBoxLayout
*bbVBox
= new QVBoxLayout(m_bottomBar
);
170 bbVBox
->setMargin(2);
171 bbVBox
->setSpacing(2);
173 QFrame
* horizontalLine
= new QFrame();
174 horizontalLine
->setFrameShape(QFrame::HLine
);
175 horizontalLine
->setFrameShadow(QFrame::Sunken
);
177 m_HLayout
= new QHBoxLayout();
179 bbVBox
->addWidget(horizontalLine
);
180 bbVBox
->addSpacing(1);
181 bbVBox
->addLayout(m_HLayout
);
183 m_bottomBar
->setVisible(!Settings::showExpandableTransferDetails());
185 m_downloadsBt
= new ButtonBase();
186 m_downloadsBt
->setText(i18n("Downloads"));
187 m_downloadsBt
->setIcon(SmallIcon("kget"));
188 m_downloadsBt
->setChecked(true);
190 // m_finishedBt = new ButtonBase();
191 // m_finishedBt->setText(i18n("Old Mainview"));
192 // m_finishedBt->setIcon(SmallIcon("ok"));
194 m_transfersBt
= new TransfersButton();
196 m_HLayout
->addWidget(m_downloadsBt
);
197 // m_HLayout->addWidget(m_finishedBt);
198 m_HLayout
->addStretch(1);
199 m_HLayout
->addWidget(new QLabel(i18n("Transfer details:"), this));
200 m_HLayout
->addWidget(m_transfersBt
);
202 m_VLayout
= new QVBoxLayout();
203 m_VLayout
->setSpacing(1);
204 m_VLayout
->setMargin(0);
205 setLayout(m_VLayout
);
207 m_titleBar
= new TitleBar();
208 m_titleBar
->setVisible(!Settings::showExpandableTransferDetails());
209 m_SLayout
= new QStackedLayout();
211 m_VLayout
->addWidget(m_titleBar
);
212 m_VLayout
->addLayout(m_SLayout
);
213 m_VLayout
->addWidget(m_bottomBar
);
215 m_transfersView
= new TransfersView();
216 m_transfersViewDelegate
= new TransfersViewDelegate(m_transfersView
);
217 m_transfersView
->setItemDelegate(m_transfersViewDelegate
);
218 KGet::addTransferView(m_transfersView
);
219 m_transfersView
->setSelectionModel(KGet::selectionModel());
220 m_transfersView
->setSelectionMode(QAbstractItemView::ExtendedSelection
);
222 m_SLayout
->addWidget(m_transfersView
);
224 //This view hasn't been coded yet. For the moment,
225 //I set it to the old MainView.
226 // m_finishedView = new MainView();
227 // m_finishedView = new QWidget();
228 // m_SLayout->addWidget(m_finishedView);
230 connect(m_downloadsBt
, SIGNAL(activated()),
231 this, SLOT(showDownloadsWindow()));
232 // connect(m_finishedBt, SIGNAL(activated()),
233 // this, SLOT(showFinishedWindow()));
234 connect(m_transfersBt
, SIGNAL(selectedTransfer(TransferHandler
*)),
235 this, SLOT(slotTransferSelected(TransferHandler
*)));
237 showDownloadsWindow();
240 void ViewsContainer::setExpandableDetails(bool show
)
242 m_bottomBar
->setVisible(!show
);
243 m_titleBar
->setVisible(!show
);
245 showDownloadsWindow();
248 m_transfersViewDelegate
->closeExpandableDetails();
252 void ViewsContainer::showTransferDetails(TransferHandler
* transfer
)
254 if(Settings::showExpandableTransferDetails()) {
255 m_transfersViewDelegate
->itemActivated(m_transfersView
->indexFromTransferHandler(transfer
));
258 //First check if we already inserted this widget
259 QMap
<TransferHandler
*, QWidget
*>::iterator it
;
260 it
= m_transfersMap
.find(transfer
);
262 if( it
== m_transfersMap
.end() )
264 //Create the transfer widget
265 QWidget
* widget
= new TransferDetails(transfer
); KGet::factory(transfer
)->createDetailsWidget(transfer
);
266 //Add it to the m_transferItems list
267 m_transfersMap
[transfer
] = widget
;
268 //Add the widget to the qstackedlayout
269 m_SLayout
->addWidget( widget
);
270 //Insert a new transfer in the m_transfersBt button
271 m_transfersBt
->addTransfer(transfer
);
274 //Select the new transfer
275 slotTransferSelected(transfer
);
279 void ViewsContainer::closeTransferDetails(TransferHandler
* transfer
)
281 if(Settings::showExpandableTransferDetails()) {
282 m_transfersViewDelegate
->closeExpandableDetails(m_transfersView
->indexFromTransferHandler(transfer
));
285 m_transfersBt
->removeTransfer(transfer
);
287 m_transfersMap
.remove(transfer
);
288 showDownloadsWindow();
291 void ViewsContainer::showDownloadsWindow()
293 kDebug(5001) << "ViewsContainer::showDownloadsWindow";
294 m_SLayout
->setCurrentWidget( m_transfersView
);
297 m_titleBar
->setDownloadsWindow();
300 void ViewsContainer::showFinishedWindow()
302 kDebug(5001) << "ViewsContainer::showFinishedWindow";
303 // m_SLayout->setCurrentWidget( m_finishedView );
306 m_titleBar
->setFinishedWindow();
309 void ViewsContainer::slotTransferSelected(TransferHandler
* transfer
)
311 kDebug(5001) << "SlotTransferSelected";
313 m_SLayout
->setCurrentWidget( m_transfersMap
[transfer
] );
316 m_titleBar
->setTransfer(transfer
);
318 //TransfersButton update
319 m_transfersBt
->setTransfer(transfer
);
322 #include "viewscontainer.moc"