QTfrontend/ui/widget/chatwidget.cpp
changeset 7742 e5e529dcc9bb
parent 7741 d216f0599291
child 7743 dc41e9222d2c
equal deleted inserted replaced
7741:d216f0599291 7742:e5e529dcc9bb
    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);