history : add history block in UI
This patch implements the history model from LRC and
display it in UI.
Refs #72793
Change-Id: Id0bd6a2cb6df8ec2e6d2365e0f0c82810b5c8f6b
diff --git a/RingWinClient.pro b/RingWinClient.pro
index 7b3c996..fd52a65 100644
--- a/RingWinClient.pro
+++ b/RingWinClient.pro
@@ -39,7 +39,8 @@
videowidget.cpp \
utils.cpp \
wizarddialog.cpp \
- windowscontactbackend.cpp
+ windowscontactbackend.cpp \
+ historydelegate.cpp
HEADERS += mainwindow.h \
callwidget.h \
@@ -56,7 +57,8 @@
videowidget.h \
utils.h \
wizarddialog.h \
- windowscontactbackend.h
+ windowscontactbackend.h \
+ historydelegate.h
FORMS += mainwindow.ui \
callwidget.ui \
diff --git a/callwidget.cpp b/callwidget.cpp
index 100fa4a..52b055c 100644
--- a/callwidget.cpp
+++ b/callwidget.cpp
@@ -19,6 +19,7 @@
#include "callwidget.h"
#include "ui_callwidget.h"
+#include <memory>
#include "imconversationmanager.h"
#include "instantmessagingmodel.h"
@@ -28,6 +29,7 @@
#include "accountmodel.h"
#include "categorizedcontactmodel.h"
#include "windowscontactbackend.h"
+#include "historydelegate.h"
#include "wizarddialog.h"
@@ -71,10 +73,18 @@
PersonModel::instance()->
addCollection<WindowsContactBackend>(LoadOptions::FORCE_ENABLED);
- ui->historyList->setModel(CategorizedHistoryModel::instance());
+ auto historyModel = std::unique_ptr<QSortFilterProxyModel>(new QSortFilterProxyModel());
+ historyModel->setSourceModel(CategorizedHistoryModel::instance());
+ historyModel->setSortRole(static_cast<int>(Call::Role::Date));
+ historyModel->sort(0,Qt::DescendingOrder);
+ ui->historyList->setModel(historyModel.get());
+ ui->historyList->setHeaderHidden(true);
+ ui->historyList->setItemDelegate(new HistoryDelegate());
+ historyModel.release();
+
CategorizedContactModel::instance()->setSortAlphabetical(false);
ui->contactView->setModel(CategorizedContactModel::instance());
- ui->contactView->setHeaderHidden(true);
+
ui->speakerSlider->setValue(Audio::Settings::instance()->playbackVolume());
ui->micSlider->setValue(Audio::Settings::instance()->captureVolume());
@@ -151,7 +161,7 @@
CallWidget::on_acceptButton_clicked()
{
if (actualCall_ != nullptr)
- actualCall_->performAction(Call::Action::ACCEPT);
+ actualCall_->performAction(Call::Action::ACCEPT);
ui->callInvite->setVisible(false);
}
@@ -202,7 +212,7 @@
ui->videoWidget->hide();
} else if (call->state() == Call::State::HOLD) {
ui->videoWidget->hide();
- } else if (call->state() == Call::State::CURRENT){
+ } else if (call->state() == Call::State::CURRENT) {
ui->videoWidget->show();
ui->messageOutput->setModel(
IMConversationManager::instance()->getModel(actualCall_));
@@ -289,3 +299,13 @@
outCall->performAction(Call::Action::ACCEPT);
}
}
+
+void CallWidget::on_historyList_doubleClicked(const QModelIndex &index)
+{
+ QString number = index.model()->data(index, static_cast<int>(Call::Role::Number)).toString();
+ if (not number.isEmpty()) {
+ auto outCall = CallModel::instance()->dialingCall(number);
+ outCall->setDialNumber(number);
+ outCall->performAction(Call::Action::ACCEPT);
+ }
+}
diff --git a/callwidget.h b/callwidget.h
index ee31f78..726a067 100644
--- a/callwidget.h
+++ b/callwidget.h
@@ -65,6 +65,7 @@
void on_micSlider_sliderMoved(int position);
void on_micSlider_sliderReleased();
void on_contactView_doubleClicked(const QModelIndex &index);
+ void on_historyList_doubleClicked(const QModelIndex &index);
private slots:
void callIncoming(Call *call);
diff --git a/callwidget.ui b/callwidget.ui
index d8b657f..99dbbaf 100644
--- a/callwidget.ui
+++ b/callwidget.ui
@@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>700</width>
- <height>668</height>
+ <height>695</height>
</rect>
</property>
<property name="sizePolicy">
@@ -125,7 +125,7 @@
<number>4</number>
</property>
<item>
- <widget class="QTreeView" name="contactView"/>
+ <widget class="QListView" name="contactView"/>
</item>
</layout>
</widget>
diff --git a/historydelegate.cpp b/historydelegate.cpp
new file mode 100644
index 0000000..99488ba
--- /dev/null
+++ b/historydelegate.cpp
@@ -0,0 +1,71 @@
+/***************************************************************************
+ * Copyright (C) 2015 by Savoir-Faire Linux *
+ * Author: Edric Ladent Milaret <edric.ladent-milaret@savoirfairelinux.com>*
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 3 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program. If not, see <http://www.gnu.org/licenses/>. *
+ **************************************************************************/
+
+#include "historydelegate.h"
+
+#include <QDebug>
+
+HistoryDelegate::HistoryDelegate(QObject *parent) :
+ QStyledItemDelegate(parent)
+{
+
+}
+
+void
+HistoryDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
+ const QModelIndex &index) const
+{
+ QStyleOptionViewItemV4 opt = option;
+ initStyleOption(&opt, index);
+
+ if (index.column() == 0) {
+ auto name = index.model()->data(index, Qt::DisplayRole).toString();
+ auto number = index.model()->data(index, static_cast<int>(Call::Role::Number)).toString();
+ opt.text = "";
+ QStyle *style = opt.widget ? opt.widget->style() : QApplication::style();
+ style->drawControl(QStyle::CE_ItemViewItem, &opt, painter, opt.widget);
+ auto rect = opt.rect;
+ QPalette::ColorGroup cg = opt.state & QStyle::State_Enabled ? QPalette::Normal : QPalette::Disabled;
+ if (cg == QPalette::Normal && !(opt.state & QStyle::State_Active))
+ cg = QPalette::Inactive;
+ painter->setPen(opt.palette.color(cg, QPalette::Text));
+ painter->setOpacity(1.0);
+ if (not number.isEmpty()) {
+ painter->drawText(QRect(rect.left(), rect.top(), rect.width(), rect.height()/2),
+ opt.displayAlignment, name);
+ painter->setOpacity(0.7);
+ painter->drawText(QRect(rect.left(), rect.top() + rect.height()/2, rect.width(), rect.height()/2),
+ opt.displayAlignment, number);
+ } else {
+ painter->drawText(QRect(rect.left(), rect.top(), rect.width(), rect.height()),
+ opt.displayAlignment, name);
+ }
+ }
+}
+
+QSize
+HistoryDelegate::sizeHint(const QStyleOptionViewItem & option, const QModelIndex & index ) const
+{
+ QSize result = QStyledItemDelegate::sizeHint(option, index);
+ if (not index.model()->data(index, static_cast<int>(Call::Role::Number)).toString().isEmpty()) {
+ result.setHeight(result.height()*2);
+ } else {
+ result.setHeight(result.height());
+ }
+ return result;
+}
diff --git a/historydelegate.h b/historydelegate.h
new file mode 100644
index 0000000..d15424f
--- /dev/null
+++ b/historydelegate.h
@@ -0,0 +1,44 @@
+/***************************************************************************
+ * Copyright (C) 2015 by Savoir-Faire Linux *
+ * Author: Edric Ladent Milaret <edric.ladent-milaret@savoirfairelinux.com>*
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 3 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program. If not, see <http://www.gnu.org/licenses/>. *
+ **************************************************************************/
+
+#ifndef HISTORYDELEGATE_H
+#define HISTORYDELEGATE_H
+
+#include <QObject>
+#include <QString>
+#include <QPainter>
+#include <QApplication>
+#include <QStyledItemDelegate>
+
+#include "categorizedhistorymodel.h"
+
+class HistoryDelegate : public QStyledItemDelegate
+{
+ Q_OBJECT
+public:
+ explicit HistoryDelegate(QObject *parent = 0);
+
+protected:
+ void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
+ QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
+signals:
+
+public slots:
+};
+
+#endif // HISTORYDELEGATE_H