17 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA |
17 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA |
18 */ |
18 */ |
19 |
19 |
20 #include <QDesktopServices> |
20 #include <QDesktopServices> |
21 #include <QTextBrowser> |
21 #include <QTextBrowser> |
22 #include <QLineEdit> |
|
23 #include <QAction> |
22 #include <QAction> |
24 #include <QTextDocument> |
|
25 #include <QFile> |
23 #include <QFile> |
26 #include <QList> |
|
27 #include <QSettings> |
|
28 #include <QTextStream> |
24 #include <QTextStream> |
29 #include <QMenu> |
25 #include <QMenu> |
30 #include <QCursor> |
26 #include <QCursor> |
31 #include <QScrollBar> |
|
32 #include <QItemSelectionModel> |
27 #include <QItemSelectionModel> |
33 #include <QStringList> |
|
34 #include <QDateTime> |
28 #include <QDateTime> |
35 #include <QTime> |
29 #include <QTime> |
36 #include <QPainter> |
|
37 #include <QListView> |
30 #include <QListView> |
38 #include <QMessageBox> |
|
39 #include <QModelIndexList> |
31 #include <QModelIndexList> |
40 #include <QDebug> |
|
41 #include <QSortFilterProxyModel> |
32 #include <QSortFilterProxyModel> |
42 #include <QMenu> |
33 #include <QMenu> |
43 |
34 |
44 #include "DataManager.h" |
35 #include "DataManager.h" |
45 #include "hwconsts.h" |
36 #include "hwconsts.h" |
243 chatNicks->setMinimumHeight(10); |
234 chatNicks->setMinimumHeight(10); |
244 chatNicks->setMinimumWidth(10); |
235 chatNicks->setMinimumWidth(10); |
245 chatNicks->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); |
236 chatNicks->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); |
246 chatNicks->setContextMenuPolicy(Qt::CustomContextMenu); |
237 chatNicks->setContextMenuPolicy(Qt::CustomContextMenu); |
247 |
238 |
248 connect(chatNicks, SIGNAL(itemDoubleClicked(QListWidgetItem *)), |
239 connect(chatNicks, SIGNAL(doubleClicked(QModelIndex)), |
249 this, SLOT(chatNickDoubleClicked(QListWidgetItem *))); |
240 this, SLOT(chatNickDoubleClicked(QModelIndex))); |
250 |
241 |
251 connect(chatNicks, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(nicksContextMenuRequested(QPoint))); |
242 connect(chatNicks, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(nicksContextMenuRequested(QPoint))); |
252 |
243 |
253 mainLayout.addWidget(chatNicks, 0, 1, 3, 1); |
244 mainLayout.addWidget(chatNicks, 0, 1, 3, 1); |
254 |
245 |
299 QDesktopServices::openUrl(link); |
290 QDesktopServices::openUrl(link); |
300 if (link.scheme() == "hwnick") |
291 if (link.scheme() == "hwnick") |
301 { |
292 { |
302 // decode nick |
293 // decode nick |
303 QString nick = QString::fromUtf8(QByteArray::fromBase64(link.encodedQuery())); |
294 QString nick = QString::fromUtf8(QByteArray::fromBase64(link.encodedQuery())); |
304 /*QList<QListWidgetItem *> items = chatNicks->findItems(nick, Qt::MatchExactly); |
295 QModelIndexList mil = chatNicks->model()->match(chatNicks->model()->index(0, 0), Qt::DisplayRole, nick); |
305 |
296 |
306 bool isOffline = (items.size() < 1); |
297 bool isOffline = (mil.size() < 1); |
307 |
|
308 QMenu * popup = new QMenu(this); |
|
309 |
298 |
310 if (isOffline) |
299 if (isOffline) |
311 { |
300 { |
312 m_clickedNick = nick; |
301 m_clickedNick = nick; |
313 chatNickSelected(0); // update friend and ignore entry |
302 chatNicks->selectionModel()->clearSelection(); |
314 chatNicks->setCurrentItem(NULL, QItemSelectionModel::Clear); |
|
315 } |
303 } |
316 else |
304 else |
317 { |
305 { |
318 // selecting an item will automatically scroll there, so let's save old position |
306 chatNicks->selectionModel()->select(mil[0], QItemSelectionModel::ClearAndSelect); |
319 QScrollBar * scrollBar = chatNicks->verticalScrollBar(); |
307 } |
320 int oldScrollPos = scrollBar->sliderPosition(); |
308 |
321 // select the nick which we want to see the actions for |
309 nicksContextMenuRequested(chatNicks->mapFromGlobal(QCursor::pos())); |
322 chatNicks->setCurrentItem(items[0], QItemSelectionModel::Clear); |
|
323 // selecting an item will automatically scroll there, so let's save old position |
|
324 scrollBar->setSliderPosition(oldScrollPos); |
|
325 } |
|
326 |
|
327 // load actions |
|
328 QList<QAction *> actions = chatNicks->actions(); |
|
329 |
|
330 foreach(QAction * action, actions) |
|
331 { |
|
332 if ((!isOffline) || (action->data().toBool())) |
|
333 popup->addAction(action); |
|
334 } |
|
335 |
|
336 // display menu popup at mouse cursor position |
|
337 popup->popup(QCursor::pos());*/ |
|
338 } |
310 } |
339 } |
311 } |
340 |
312 |
341 void HWChatWidget::setShowFollow(bool enabled) |
313 void HWChatWidget::setShowFollow(bool enabled) |
342 { |
314 { |
705 } |
677 } |
706 |
678 |
707 if(mil.size()) |
679 if(mil.size()) |
708 chatNicks->scrollTo(chatNicks->selectionModel()->selectedRows()[0]); |
680 chatNicks->scrollTo(chatNicks->selectionModel()->selectedRows()[0]); |
709 } |
681 } |
710 /* |
682 |
711 void HWChatWidget::chatNickDoubleClicked(QListWidgetItem * item) |
683 void HWChatWidget::chatNickDoubleClicked(const QModelIndex &index) |
712 { |
684 { |
713 if (item != NULL) |
685 m_clickedNick = index.data().toString(); |
714 m_clickedNick = item->text(); |
686 |
715 else |
|
716 m_clickedNick = ""; |
|
717 QList<QAction *> actions = chatNicks->actions(); |
687 QList<QAction *> actions = chatNicks->actions(); |
718 actions.first()->activate(QAction::Trigger); |
688 actions.first()->activate(QAction::Trigger); |
719 } |
689 } |
720 */ |
690 |
721 |
691 |
722 void HWChatWidget::adminAccess(bool b) |
692 void HWChatWidget::adminAccess(bool b) |
723 { |
693 { |
724 chatNicks->removeAction(acKick); |
694 chatNicks->removeAction(acKick); |
725 chatNicks->removeAction(acBan); |
695 chatNicks->removeAction(acBan); |