Show invite menu in wlm chat window immediately
[kdenetwork.git] / kget / ui / viewscontainer.cpp
blobb985446927f027d7cee8561ba2b41e1789f9e5ea
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"
21 #include "settings.h"
23 #include <klocale.h>
24 #include <kiconloader.h>
25 #include <kdebug.h>
26 #include <kio/global.h>
27 #include <KTitleWidget>
29 #include <QMenu>
30 #include <QFrame>
31 #include <QLabel>
33 TitleBar::TitleBar(QWidget * parent)
34 : 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)
58 : QToolButton(parent)
60 setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
61 setAutoExclusive(true);
62 setAutoRaise(false);
63 setCheckable(true);
64 setMinimumWidth(100);
65 connect(this, SIGNAL(toggled(bool)), SLOT(slotToggled(bool)));
68 void ButtonBase::slotToggled(bool checked)
70 kDebug(5001);
71 if(checked)
73 emit activated();
77 TransfersButton::TransfersButton()
78 : m_selectedTransfer(0)
80 setPopupMode(QToolButton::MenuButtonPopup);
82 m_menu = new QMenu(this);
83 m_menu->setTitle(i18n("Transfers:"));
84 setMenu(m_menu);
86 setEnabled(false);
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;
102 setText(filename);
103 setEnabled(true);
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;
113 ++it;
114 if (prev.value() == transfer)
116 prev.key()->deleteLater();
117 m_transfersMap.erase(prev);
118 //Delete the QAction
122 if(m_transfersMap.count() == 0)
124 setEnabled(false);
125 setText(QString());
127 else
129 if(m_selectedTransfer == transfer)
131 m_selectedTransfer = m_transfersMap.begin().value();
132 setText(m_selectedTransfer->source().fileName());
133 if(isChecked())
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 ));
144 setChecked(true);
147 void TransfersButton::slotToggled(bool checked)
149 kDebug(5001);
150 if(checked)
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)
165 : QWidget(parent)
167 //Bottom bar layout
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("dialog-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);
244 if(show) {
245 showDownloadsWindow();
247 else {
248 m_transfersViewDelegate->closeExpandableDetails();
252 void ViewsContainer::showTransferDetails(TransferHandler * transfer)
254 if(Settings::showExpandableTransferDetails()) {
255 m_transfersViewDelegate->itemActivated(m_transfersView->indexFromTransferHandler(transfer));
257 else {
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 = TransferDetails::detailsWidget(transfer);
267 //Add it to the m_transferItems list
268 m_transfersMap[transfer] = widget;
269 //Add the widget to the qstackedlayout
270 m_SLayout->addWidget( widget );
271 //Insert a new transfer in the m_transfersBt button
272 m_transfersBt->addTransfer(transfer);
275 //Select the new transfer
276 slotTransferSelected(transfer);
280 void ViewsContainer::closeTransferDetails(TransferHandler * transfer)
282 if(Settings::showExpandableTransferDetails()) {
283 m_transfersViewDelegate->closeExpandableDetails(m_transfersView->indexFromTransferHandler(transfer));
285 else {
286 m_transfersBt->removeTransfer(transfer);
288 m_transfersMap.remove(transfer);
289 showDownloadsWindow();
292 void ViewsContainer::showDownloadsWindow()
294 kDebug(5001) << "ViewsContainer::showDownloadsWindow";
295 m_SLayout->setCurrentWidget( m_transfersView );
297 //TitleBar update
298 m_titleBar->setDownloadsWindow();
301 void ViewsContainer::showFinishedWindow()
303 kDebug(5001) << "ViewsContainer::showFinishedWindow";
304 // m_SLayout->setCurrentWidget( m_finishedView );
306 //TitleBar update
307 m_titleBar->setFinishedWindow();
310 void ViewsContainer::slotTransferSelected(TransferHandler * transfer)
312 kDebug(5001) << "SlotTransferSelected";
314 m_SLayout->setCurrentWidget( m_transfersMap[transfer] );
316 //TitleBar update
317 m_titleBar->setTransfer(transfer);
319 //TransfersButton update
320 m_transfersBt->setTransfer(transfer);
323 #include "viewscontainer.moc"