diff --git a/RingWinClient.pro b/RingWinClient.pro index c604bef2e2338c724ac9b0b2edad66a40594b06a..9d3c16eb6a389ea4785264384508d18129a2f3e1 100644 --- a/RingWinClient.pro +++ b/RingWinClient.pro @@ -43,7 +43,8 @@ SOURCES += main.cpp\ contactdelegate.cpp \ selectareadialog.cpp \ accountserializationadapter.cpp \ - instantmessagingwidget.cpp + instantmessagingwidget.cpp \ + accountstatedelegate.cpp HEADERS += mainwindow.h \ @@ -63,7 +64,8 @@ HEADERS += mainwindow.h \ contactdelegate.h \ selectareadialog.h \ accountserializationadapter.h \ - instantmessagingwidget.h + instantmessagingwidget.h \ + accountstatedelegate.h FORMS += mainwindow.ui \ callwidget.ui \ diff --git a/accountstatedelegate.cpp b/accountstatedelegate.cpp new file mode 100644 index 0000000000000000000000000000000000000000..f268cedaa39802c24b4a48107d100b9e0bb89866 --- /dev/null +++ b/accountstatedelegate.cpp @@ -0,0 +1,60 @@ +/*************************************************************************** + * 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 "accountstatedelegate.h" + +#include "accountmodel.h" +#include "account.h" + +AccountStateDelegate::AccountStateDelegate(QObject *parent) : + QStyledItemDelegate(parent) +{} + +void +AccountStateDelegate::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(); + 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; + auto font = painter->font() ; + font.setBold(true); + painter->setFont(font); + painter->setPen(AccountModel::instance()-> + getAccountByModelIndex(index)->stateColorName()); + painter->setOpacity(1.0); + painter->drawText(QRect(rect.left()+25, rect.top(), + rect.width(), rect.height()), + opt.displayAlignment, name); + } +} + +QSize +AccountStateDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const +{ + QSize result = QStyledItemDelegate::sizeHint(option, index); + return result; +} diff --git a/accountstatedelegate.h b/accountstatedelegate.h new file mode 100644 index 0000000000000000000000000000000000000000..9a50f04e9a071158d1b4bf01fb98bcb75cb30bdb --- /dev/null +++ b/accountstatedelegate.h @@ -0,0 +1,39 @@ +/*************************************************************************** + * 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 ACCOUNTSTATEDELEGATE_H +#define ACCOUNTSTATEDELEGATE_H + +#include <QObject> +#include <QString> +#include <QPainter> +#include <QApplication> +#include <QStyledItemDelegate> + +class AccountStateDelegate : public QStyledItemDelegate +{ + Q_OBJECT +public: + explicit AccountStateDelegate(QObject *parent = 0); + +protected: + void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; + QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const; +}; + +#endif // ACCOUNTSTATEDELEGATE_H diff --git a/configurationwidget.cpp b/configurationwidget.cpp index 63f5e762ab57c87761af7de26352ac0374e9fe7b..c1a5a9b6d48ee988128d16da3655d6cf7f4c4642 100644 --- a/configurationwidget.cpp +++ b/configurationwidget.cpp @@ -26,6 +26,7 @@ #include "video/previewmanager.h" #include "accountserializationadapter.h" +#include "accountstatedelegate.h" #include "accountmodel.h" #include "protocolmodel.h" @@ -44,6 +45,7 @@ ConfigurationWidget::ConfigurationWidget(QWidget *parent) : ui->setupUi(this); ui->accountView->setModel(accountModel_); + ui->accountView->setItemDelegate(new AccountStateDelegate()); isLoading_ = true; ui->deviceBox->setModel(deviceModel_);