Skip to content
Snippets Groups Projects
Commit 92528dc0 authored by Emmanuel Lepage Vallee's avatar Emmanuel Lepage Vallee
Browse files

[ #60972 ] Port NumberCompletionModel to use D-Pointer

parent 74aefdf9
No related branches found
No related tags found
No related merge requests found
...@@ -36,8 +36,47 @@ ...@@ -36,8 +36,47 @@
//Private //Private
#include "private/phonedirectorymodel_p.h" #include "private/phonedirectorymodel_p.h"
NumberCompletionModel::NumberCompletionModel() : QAbstractTableModel(QCoreApplication::instance()), class NumberCompletionModelPrivate : public QObject
{
public:
enum class Columns {
CONTENT = 0,
NAME = 1,
ACCOUNT = 2,
WEIGHT = 3,
};
//Constructor
NumberCompletionModelPrivate(NumberCompletionModel* parent);
//Methods
void updateModel();
//Helper
void locateNameRange (const QString& prefix, QSet<PhoneNumber*>& set);
void locateNumberRange(const QString& prefix, QSet<PhoneNumber*>& set);
uint getWeight(PhoneNumber* number);
void getRange(QMap<QString,NumberWrapper*> map, const QString& prefix, QSet<PhoneNumber*>& set) const;
//Attributes
QMultiMap<int,PhoneNumber*> m_hNumbers ;
QString m_Prefix ;
Call* m_pCall ;
bool m_Enabled ;
bool m_UseUnregisteredAccount;
private:
NumberCompletionModel* q_ptr;
};
NumberCompletionModelPrivate::NumberCompletionModelPrivate(NumberCompletionModel* parent) : QObject(parent), q_ptr(parent),
m_pCall(nullptr),m_Enabled(false),m_UseUnregisteredAccount(true) m_pCall(nullptr),m_Enabled(false),m_UseUnregisteredAccount(true)
{
}
NumberCompletionModel::NumberCompletionModel() : QAbstractTableModel(QCoreApplication::instance()), d_ptr(new NumberCompletionModelPrivate(this))
{ {
setObjectName("NumberCompletionModel"); setObjectName("NumberCompletionModel");
} }
...@@ -50,15 +89,15 @@ NumberCompletionModel::~NumberCompletionModel() ...@@ -50,15 +89,15 @@ NumberCompletionModel::~NumberCompletionModel()
QVariant NumberCompletionModel::data(const QModelIndex& index, int role ) const QVariant NumberCompletionModel::data(const QModelIndex& index, int role ) const
{ {
if (!index.isValid()) return QVariant(); if (!index.isValid()) return QVariant();
const QMap<int,PhoneNumber*>::iterator i = const_cast<NumberCompletionModel*>(this)->m_hNumbers.end()-1-index.row(); const QMap<int,PhoneNumber*>::iterator i = d_ptr->m_hNumbers.end()-1-index.row();
const PhoneNumber* n = i.value(); const PhoneNumber* n = i.value();
const int weight = i.key (); const int weight = i.key ();
bool needAcc = (role>=100 || role == Qt::UserRole) && n->account() && n->account() != AccountModel::instance()->currentAccount() bool needAcc = (role>=100 || role == Qt::UserRole) && n->account() && n->account() != AccountModel::instance()->currentAccount()
&& n->account()->alias() != Account::ProtocolName::IP2IP; && n->account()->alias() != Account::ProtocolName::IP2IP;
switch (static_cast<NumberCompletionModel::Columns>(index.column())) { switch (static_cast<NumberCompletionModelPrivate::Columns>(index.column())) {
case NumberCompletionModel::Columns::CONTENT: case NumberCompletionModelPrivate::Columns::CONTENT:
switch (role) { switch (role) {
case Qt::DisplayRole: case Qt::DisplayRole:
return n->uri(); return n->uri();
...@@ -83,19 +122,19 @@ QVariant NumberCompletionModel::data(const QModelIndex& index, int role ) const ...@@ -83,19 +122,19 @@ QVariant NumberCompletionModel::data(const QModelIndex& index, int role ) const
break; break;
}; };
break; break;
case NumberCompletionModel::Columns::NAME: case NumberCompletionModelPrivate::Columns::NAME:
switch (role) { switch (role) {
case Qt::DisplayRole: case Qt::DisplayRole:
return n->primaryName(); return n->primaryName();
}; };
break; break;
case NumberCompletionModel::Columns::ACCOUNT: case NumberCompletionModelPrivate::Columns::ACCOUNT:
switch (role) { switch (role) {
case Qt::DisplayRole: case Qt::DisplayRole:
return n->account()?n->account()->id():AccountModel::instance()->currentAccount()->id(); return n->account()?n->account()->id():AccountModel::instance()->currentAccount()->id();
}; };
break; break;
case NumberCompletionModel::Columns::WEIGHT: case NumberCompletionModelPrivate::Columns::WEIGHT:
switch (role) { switch (role) {
case Qt::DisplayRole: case Qt::DisplayRole:
return weight; return weight;
...@@ -109,7 +148,7 @@ int NumberCompletionModel::rowCount(const QModelIndex& parent ) const ...@@ -109,7 +148,7 @@ int NumberCompletionModel::rowCount(const QModelIndex& parent ) const
{ {
if (parent.isValid()) if (parent.isValid())
return 0; return 0;
return m_hNumbers.size(); return d_ptr->m_hNumbers.size();
} }
int NumberCompletionModel::columnCount(const QModelIndex& parent ) const int NumberCompletionModel::columnCount(const QModelIndex& parent ) const
...@@ -145,47 +184,47 @@ bool NumberCompletionModel::setData(const QModelIndex& index, const QVariant &va ...@@ -145,47 +184,47 @@ bool NumberCompletionModel::setData(const QModelIndex& index, const QVariant &va
//Set the current call //Set the current call
void NumberCompletionModel::setCall(Call* call) void NumberCompletionModel::setCall(Call* call)
{ {
if (m_pCall) if (d_ptr->m_pCall)
disconnect(m_pCall,SIGNAL(dialNumberChanged(QString)),this,SLOT(setPrefix(QString))); disconnect(d_ptr->m_pCall,SIGNAL(dialNumberChanged(QString)),this,SLOT(setPrefix(QString)));
m_pCall = call; d_ptr->m_pCall = call;
if (m_pCall) if (d_ptr->m_pCall)
connect(m_pCall,SIGNAL(dialNumberChanged(QString)),this,SLOT(setPrefix(QString))); connect(d_ptr->m_pCall,SIGNAL(dialNumberChanged(QString)),this,SLOT(setPrefix(QString)));
setPrefix(call?call->dialNumber():QString()); setPrefix(call?call->dialNumber():QString());
} }
void NumberCompletionModel::setPrefix(const QString& str) void NumberCompletionModel::setPrefix(const QString& str)
{ {
m_Prefix = str; d_ptr->m_Prefix = str;
const bool e = ((m_pCall && m_pCall->state() == Call::State::DIALING) || (!m_pCall)) && (!str.isEmpty()); const bool e = ((d_ptr->m_pCall && d_ptr->m_pCall->state() == Call::State::DIALING) || (!d_ptr->m_pCall)) && (!str.isEmpty());
if (m_Enabled != e) { if (d_ptr->m_Enabled != e) {
m_Enabled = e; d_ptr->m_Enabled = e;
emit enabled(e); emit enabled(e);
} }
if (m_Enabled) if (d_ptr->m_Enabled)
updateModel(); d_ptr->updateModel();
else { else {
m_hNumbers.clear(); d_ptr->m_hNumbers.clear();
emit layoutChanged(); emit layoutChanged();
} }
} }
Call* NumberCompletionModel::call() const Call* NumberCompletionModel::call() const
{ {
return m_pCall; return d_ptr->m_pCall;
} }
PhoneNumber* NumberCompletionModel::number(const QModelIndex& idx) const PhoneNumber* NumberCompletionModel::number(const QModelIndex& idx) const
{ {
if (idx.isValid()) { if (idx.isValid()) {
return (const_cast<NumberCompletionModel*>(this)->m_hNumbers.end()-1-idx.row()).value(); return (d_ptr->m_hNumbers.end()-1-idx.row()).value();
} }
return nullptr; return nullptr;
} }
void NumberCompletionModel::updateModel() void NumberCompletionModelPrivate::updateModel()
{ {
QSet<PhoneNumber*> numbers; QSet<PhoneNumber*> numbers;
beginResetModel(); q_ptr->beginResetModel();
m_hNumbers.clear(); m_hNumbers.clear();
if (!m_Prefix.isEmpty()) { if (!m_Prefix.isEmpty()) {
locateNameRange ( m_Prefix, numbers ); locateNameRange ( m_Prefix, numbers );
...@@ -196,11 +235,11 @@ void NumberCompletionModel::updateModel() ...@@ -196,11 +235,11 @@ void NumberCompletionModel::updateModel()
m_hNumbers.insert(getWeight(n),n); m_hNumbers.insert(getWeight(n),n);
} }
} }
endResetModel(); q_ptr->endResetModel();
emit layoutChanged(); emit q_ptr->layoutChanged();
} }
void NumberCompletionModel::getRange(QMap<QString,NumberWrapper*> map, const QString& prefix, QSet<PhoneNumber*>& set) const void NumberCompletionModelPrivate::getRange(QMap<QString,NumberWrapper*> map, const QString& prefix, QSet<PhoneNumber*>& set) const
{ {
if (prefix.isEmpty()) if (prefix.isEmpty())
return; return;
...@@ -265,17 +304,17 @@ void NumberCompletionModel::getRange(QMap<QString,NumberWrapper*> map, const QSt ...@@ -265,17 +304,17 @@ void NumberCompletionModel::getRange(QMap<QString,NumberWrapper*> map, const QSt
} }
} }
void NumberCompletionModel::locateNameRange(const QString& prefix, QSet<PhoneNumber*>& set) void NumberCompletionModelPrivate::locateNameRange(const QString& prefix, QSet<PhoneNumber*>& set)
{ {
getRange(PhoneDirectoryModel::instance()->d_ptr->m_lSortedNames,prefix,set); getRange(PhoneDirectoryModel::instance()->d_ptr->m_lSortedNames,prefix,set);
} }
void NumberCompletionModel::locateNumberRange(const QString& prefix, QSet<PhoneNumber*>& set) void NumberCompletionModelPrivate::locateNumberRange(const QString& prefix, QSet<PhoneNumber*>& set)
{ {
getRange(PhoneDirectoryModel::instance()->d_ptr->m_hSortedNumbers,prefix,set); getRange(PhoneDirectoryModel::instance()->d_ptr->m_hSortedNumbers,prefix,set);
} }
uint NumberCompletionModel::getWeight(PhoneNumber* number) uint NumberCompletionModelPrivate::getWeight(PhoneNumber* number)
{ {
Q_UNUSED(number) Q_UNUSED(number)
uint weight = 1; uint weight = 1;
...@@ -289,15 +328,18 @@ uint NumberCompletionModel::getWeight(PhoneNumber* number) ...@@ -289,15 +328,18 @@ uint NumberCompletionModel::getWeight(PhoneNumber* number)
QString NumberCompletionModel::prefix() const QString NumberCompletionModel::prefix() const
{ {
return m_Prefix; return d_ptr->m_Prefix;
} }
void NumberCompletionModel::setUseUnregisteredAccounts(bool value) void NumberCompletionModel::setUseUnregisteredAccounts(bool value)
{ {
m_UseUnregisteredAccount = value; d_ptr->m_UseUnregisteredAccount = value;
} }
bool NumberCompletionModel::isUsingUnregisteredAccounts() bool NumberCompletionModel::isUsingUnregisteredAccounts()
{ {
return m_UseUnregisteredAccount; return d_ptr->m_UseUnregisteredAccount;
} }
#include <numbercompletionmodel.moc>
...@@ -22,12 +22,12 @@ ...@@ -22,12 +22,12 @@
#include "typedefs.h" #include "typedefs.h"
#include "phonedirectorymodel.h" #include "phonedirectorymodel.h"
//SFLPhone
class PhoneNumber; class PhoneNumber;
class Call; class Call;
//TODO remove //Private
class NumberWrapper; class NumberCompletionModelPrivate;
class LIB_EXPORT NumberCompletionModel : public QAbstractTableModel { class LIB_EXPORT NumberCompletionModel : public QAbstractTableModel {
Q_OBJECT Q_OBJECT
...@@ -47,12 +47,12 @@ public: ...@@ -47,12 +47,12 @@ public:
virtual ~NumberCompletionModel(); virtual ~NumberCompletionModel();
//Abstract model member //Abstract model member
QVariant data(const QModelIndex& index, int role = Qt::DisplayRole ) const; virtual QVariant data ( const QModelIndex& index, int role = Qt::DisplayRole ) const override;
int rowCount(const QModelIndex& parent = QModelIndex() ) const; virtual int rowCount ( const QModelIndex& parent = QModelIndex() ) const override;
Qt::ItemFlags flags(const QModelIndex& index ) const; virtual Qt::ItemFlags flags ( const QModelIndex& index ) const override;
virtual bool setData(const QModelIndex& index, const QVariant &value, int role); virtual bool setData ( const QModelIndex& index, const QVariant &value, int role ) override;
virtual int columnCount(const QModelIndex& parent = QModelIndex() ) const; virtual int columnCount( const QModelIndex& parent = QModelIndex() ) const override;
virtual QVariant headerData (int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const; virtual QVariant headerData ( int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const override;
//Setters //Setters
void setCall(Call* call); void setCall(Call* call);
...@@ -64,32 +64,9 @@ public: ...@@ -64,32 +64,9 @@ public:
bool isUsingUnregisteredAccounts(); bool isUsingUnregisteredAccounts();
QString prefix() const; QString prefix() const;
protected:
//Helper
void getRange(QMap<QString,NumberWrapper*> map, const QString& prefix, QSet<PhoneNumber*>& set) const;
private: private:
enum class Columns { QScopedPointer<NumberCompletionModelPrivate> d_ptr;
CONTENT = 0, Q_DECLARE_PRIVATE(NumberCompletionModel)
NAME = 1,
ACCOUNT = 2,
WEIGHT = 3,
};
//Methods
void updateModel();
//Helper
void locateNameRange (const QString& prefix, QSet<PhoneNumber*>& set);
void locateNumberRange(const QString& prefix, QSet<PhoneNumber*>& set);
uint getWeight(PhoneNumber* number);
//Attributes
QMultiMap<int,PhoneNumber*> m_hNumbers ;
QString m_Prefix ;
Call* m_pCall ;
bool m_Enabled ;
bool m_UseUnregisteredAccount;
public Q_SLOTS: public Q_SLOTS:
......
...@@ -39,6 +39,7 @@ class LIB_EXPORT PhoneDirectoryModel : public QAbstractTableModel { ...@@ -39,6 +39,7 @@ class LIB_EXPORT PhoneDirectoryModel : public QAbstractTableModel {
//NumberCompletionModel need direct access to the indexes //NumberCompletionModel need direct access to the indexes
friend class NumberCompletionModel; friend class NumberCompletionModel;
friend class NumberCompletionModelPrivate;
//Friend unit test class //Friend unit test class
friend class AutoCompletionTest; friend class AutoCompletionTest;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment