hide current call in transfer call list #LINQT-2256

This commit is contained in:
Gaelle Braud 2025-12-15 14:41:10 +01:00
parent 50ec67298e
commit 6d9b5efcc5
7 changed files with 71 additions and 49 deletions

View file

@ -25,20 +25,32 @@
DEFINE_ABSTRACT_OBJECT(CallProxy) DEFINE_ABSTRACT_OBJECT(CallProxy)
CallProxy::CallProxy(QObject *parent) : LimitProxy(parent) { CallProxy::CallProxy() : SortFilterProxy() {
mShowCurrentCall = true;
} }
CallProxy::~CallProxy() { CallProxy::~CallProxy() {
} }
CallGui *CallProxy::getCurrentCall() { CallGui *CallProxy::getCurrentCall() {
auto model = getListModel<CallList>(); auto model = qobject_cast<CallList *>(sourceModel());
if (!mCurrentCall && model) mCurrentCall = model->getCurrentCall(); if (!mCurrentCall && model) mCurrentCall = model->getCurrentCall();
return mCurrentCall; return mCurrentCall;
} }
void CallProxy::setShowCurrentCall(bool show) {
if (mShowCurrentCall != show) {
mShowCurrentCall = show;
emit showCurrentCallChanged();
}
}
bool CallProxy::showCurrentCall() const {
return mShowCurrentCall;
}
void CallProxy::setCurrentCall(CallGui *call) { void CallProxy::setCurrentCall(CallGui *call) {
getListModel<CallList>()->setCurrentCall(call); qobject_cast<CallList *>(sourceModel())->setCurrentCall(call);
} }
// Reset the default account to let UI build its new object if needed. // Reset the default account to let UI build its new object if needed.
@ -48,12 +60,12 @@ void CallProxy::resetCurrentCall() {
} }
bool CallProxy::getHaveCall() const { bool CallProxy::getHaveCall() const {
auto model = getListModel<CallList>(); auto model = qobject_cast<CallList *>(sourceModel());
return model ? model->getHaveCall() : false; return model ? model->getHaveCall() : false;
} }
void CallProxy::setSourceModel(QAbstractItemModel *model) { void CallProxy::setSourceModel(QAbstractItemModel *model) {
auto oldCallList = getListModel<CallList>(); auto oldCallList = qobject_cast<CallList *>(sourceModel());
if (oldCallList) { if (oldCallList) {
disconnect(oldCallList); disconnect(oldCallList);
} }
@ -63,24 +75,24 @@ void CallProxy::setSourceModel(QAbstractItemModel *model) {
connect(newCallList, &CallList::haveCallChanged, this, &CallProxy::haveCallChanged, Qt::QueuedConnection); connect(newCallList, &CallList::haveCallChanged, this, &CallProxy::haveCallChanged, Qt::QueuedConnection);
connect(this, &CallProxy::lMergeAll, newCallList, &CallList::lMergeAll); connect(this, &CallProxy::lMergeAll, newCallList, &CallList::lMergeAll);
} }
setSourceModels(new SortFilterList(model)); QSortFilterProxyModel::setSourceModel(model);
} }
bool CallProxy::SortFilterList::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const { bool CallProxy::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const {
bool show = (mFilterText.isEmpty() || mFilterText == "*"); bool show = (mFilterText.isEmpty() || mFilterText == "*");
auto callList = qobject_cast<CallList *>(sourceModel());
auto call = callList->getAt<CallCore>(sourceRow);
if (!mShowCurrentCall && call == callList->getCurrentCallCore()) return false;
if (!show) { if (!show) {
QRegularExpression search(QRegularExpression::escape(mFilterText), QRegularExpression search(QRegularExpression::escape(mFilterText),
QRegularExpression::CaseInsensitiveOption | QRegularExpression::CaseInsensitiveOption |
QRegularExpression::UseUnicodePropertiesOption); QRegularExpression::UseUnicodePropertiesOption);
auto call = qobject_cast<CallList *>(sourceModel())->getAt<CallCore>(sourceRow);
show = call->getRemoteAddress().contains(search); show = call->getRemoteAddress().contains(search);
} }
return show; return show;
} }
bool CallProxy::SortFilterList::lessThan(const QModelIndex &sourceLeft, const QModelIndex &sourceRight) const { bool CallProxy::lessThan(const QModelIndex &sourceLeft, const QModelIndex &sourceRight) const {
auto l = getItemAtSource<CallList, CallCore>(sourceLeft.row()); auto l = getItemAtSource<CallList, CallCore>(sourceLeft.row());
auto r = getItemAtSource<CallList, CallCore>(sourceRight.row()); auto r = getItemAtSource<CallList, CallCore>(sourceRight.row());

View file

@ -28,15 +28,14 @@
// ============================================================================= // =============================================================================
class CallProxy : public LimitProxy, public AbstractObject { class CallProxy : public SortFilterProxy, public AbstractObject {
Q_OBJECT Q_OBJECT
Q_PROPERTY(CallGui *currentCall READ getCurrentCall WRITE setCurrentCall NOTIFY currentCallChanged) Q_PROPERTY(CallGui *currentCall READ getCurrentCall WRITE setCurrentCall NOTIFY currentCallChanged)
Q_PROPERTY(bool haveCall READ getHaveCall NOTIFY haveCallChanged) Q_PROPERTY(bool haveCall READ getHaveCall NOTIFY haveCallChanged)
Q_PROPERTY(bool showCurrentCall READ showCurrentCall WRITE setShowCurrentCall NOTIFY showCurrentCallChanged)
public: public:
DECLARE_SORTFILTER_CLASS() CallProxy();
CallProxy(QObject *parent = Q_NULLPTR);
~CallProxy(); ~CallProxy();
// Get a new object from List or give the stored one. // Get a new object from List or give the stored one.
@ -48,15 +47,23 @@ public:
bool getHaveCall() const; bool getHaveCall() const;
void setShowCurrentCall(bool show);
bool showCurrentCall() const;
void setSourceModel(QAbstractItemModel *sourceModel) override; void setSourceModel(QAbstractItemModel *sourceModel) override;
virtual bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
virtual bool lessThan(const QModelIndex &sourceLeft, const QModelIndex &sourceRight) const override;
signals: signals:
void lMergeAll(); void lMergeAll();
void currentCallChanged(); void currentCallChanged();
void haveCallChanged(); void haveCallChanged();
void showCurrentCallChanged();
protected: protected:
CallGui *mCurrentCall = nullptr; // When null, a new UI object is build from List CallGui *mCurrentCall = nullptr; // When null, a new UI object is build from List
bool mShowCurrentCall = false;
DECLARE_ABSTRACT_OBJECT DECLARE_ABSTRACT_OBJECT
}; };

View file

@ -1078,49 +1078,49 @@
<context> <context>
<name>CallListView</name> <name>CallListView</name>
<message> <message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="60"/> <location filename="../../view/Control/Display/Call/CallListView.qml" line="62"/>
<source>meeting</source> <source>meeting</source>
<extracomment>&quot;Réunion</extracomment> <extracomment>&quot;Réunion</extracomment>
<translation>Besprechung</translation> <translation>Besprechung</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="62"/> <location filename="../../view/Control/Display/Call/CallListView.qml" line="64"/>
<source>call</source> <source>call</source>
<extracomment>&quot;Appel&quot;</extracomment> <extracomment>&quot;Appel&quot;</extracomment>
<translation>Anruf</translation> <translation>Anruf</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="67"/> <location filename="../../view/Control/Display/Call/CallListView.qml" line="69"/>
<source>paused_call_or_meeting</source> <source>paused_call_or_meeting</source>
<extracomment>&quot;%1 en pause&quot;</extracomment> <extracomment>&quot;%1 en pause&quot;</extracomment>
<translation>%1 pausiert</translation> <translation>%1 pausiert</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="69"/> <location filename="../../view/Control/Display/Call/CallListView.qml" line="71"/>
<source>ongoing_call_or_meeting</source> <source>ongoing_call_or_meeting</source>
<extracomment>&quot;%1 en cours&quot;</extracomment> <extracomment>&quot;%1 en cours&quot;</extracomment>
<translation>%1 laufend</translation> <translation>%1 laufend</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="89"/> <location filename="../../view/Control/Display/Call/CallListView.qml" line="91"/>
<source>transfer_call_name_accessible_name</source> <source>transfer_call_name_accessible_name</source>
<extracomment>Transfer call %1</extracomment> <extracomment>Transfer call %1</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="117"/> <location filename="../../view/Control/Display/Call/CallListView.qml" line="119"/>
<source>resume_call_name_accessible_name</source> <source>resume_call_name_accessible_name</source>
<extracomment>Resume %1 call</extracomment> <extracomment>Resume %1 call</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="119"/> <location filename="../../view/Control/Display/Call/CallListView.qml" line="121"/>
<source>pause_call_name_accessible_name</source> <source>pause_call_name_accessible_name</source>
<extracomment>Pause %1 call</extracomment> <extracomment>Pause %1 call</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="142"/> <location filename="../../view/Control/Display/Call/CallListView.qml" line="144"/>
<source>end_call_name_accessible_name</source> <source>end_call_name_accessible_name</source>
<extracomment>End %1 call</extracomment> <extracomment>End %1 call</extracomment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -4971,7 +4971,7 @@ Error</extracomment>
<context> <context>
<name>NewCallForm</name> <name>NewCallForm</name>
<message> <message>
<location filename="../../view/Page/Form/Call/NewCallForm.qml" line="24"/> <location filename="../../view/Page/Form/Call/NewCallForm.qml" line="25"/>
<source>call_transfer_active_calls_label</source> <source>call_transfer_active_calls_label</source>
<extracomment>&quot;Appels en cours&quot;</extracomment> <extracomment>&quot;Appels en cours&quot;</extracomment>
<translation>Laufender Anruf</translation> <translation>Laufender Anruf</translation>

View file

@ -1089,49 +1089,49 @@
<context> <context>
<name>CallListView</name> <name>CallListView</name>
<message> <message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="60"/> <location filename="../../view/Control/Display/Call/CallListView.qml" line="62"/>
<source>meeting</source> <source>meeting</source>
<extracomment>&quot;Réunion</extracomment> <extracomment>&quot;Réunion</extracomment>
<translation>Meeting</translation> <translation>Meeting</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="62"/> <location filename="../../view/Control/Display/Call/CallListView.qml" line="64"/>
<source>call</source> <source>call</source>
<extracomment>&quot;Appel&quot;</extracomment> <extracomment>&quot;Appel&quot;</extracomment>
<translation>Call</translation> <translation>Call</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="67"/> <location filename="../../view/Control/Display/Call/CallListView.qml" line="69"/>
<source>paused_call_or_meeting</source> <source>paused_call_or_meeting</source>
<extracomment>&quot;%1 en pause&quot;</extracomment> <extracomment>&quot;%1 en pause&quot;</extracomment>
<translation>%1 paused</translation> <translation>%1 paused</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="69"/> <location filename="../../view/Control/Display/Call/CallListView.qml" line="71"/>
<source>ongoing_call_or_meeting</source> <source>ongoing_call_or_meeting</source>
<extracomment>&quot;%1 en cours&quot;</extracomment> <extracomment>&quot;%1 en cours&quot;</extracomment>
<translation>Ongoing %1</translation> <translation>Ongoing %1</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="89"/> <location filename="../../view/Control/Display/Call/CallListView.qml" line="91"/>
<source>transfer_call_name_accessible_name</source> <source>transfer_call_name_accessible_name</source>
<extracomment>Transfer call %1</extracomment> <extracomment>Transfer call %1</extracomment>
<translation>Transfer call %1</translation> <translation>Transfer call %1</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="117"/> <location filename="../../view/Control/Display/Call/CallListView.qml" line="119"/>
<source>resume_call_name_accessible_name</source> <source>resume_call_name_accessible_name</source>
<extracomment>Resume %1 call</extracomment> <extracomment>Resume %1 call</extracomment>
<translation>Resume %1 call</translation> <translation>Resume %1 call</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="119"/> <location filename="../../view/Control/Display/Call/CallListView.qml" line="121"/>
<source>pause_call_name_accessible_name</source> <source>pause_call_name_accessible_name</source>
<extracomment>Pause %1 call</extracomment> <extracomment>Pause %1 call</extracomment>
<translation>Pause %1 call</translation> <translation>Pause %1 call</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="142"/> <location filename="../../view/Control/Display/Call/CallListView.qml" line="144"/>
<source>end_call_name_accessible_name</source> <source>end_call_name_accessible_name</source>
<extracomment>End %1 call</extracomment> <extracomment>End %1 call</extracomment>
<translation>End %1 call</translation> <translation>End %1 call</translation>
@ -4941,7 +4941,7 @@ Expiration : %1</translation>
<context> <context>
<name>NewCallForm</name> <name>NewCallForm</name>
<message> <message>
<location filename="../../view/Page/Form/Call/NewCallForm.qml" line="24"/> <location filename="../../view/Page/Form/Call/NewCallForm.qml" line="25"/>
<source>call_transfer_active_calls_label</source> <source>call_transfer_active_calls_label</source>
<extracomment>&quot;Appels en cours&quot;</extracomment> <extracomment>&quot;Appels en cours&quot;</extracomment>
<translation>Ongoing call</translation> <translation>Ongoing call</translation>

View file

@ -1089,49 +1089,49 @@
<context> <context>
<name>CallListView</name> <name>CallListView</name>
<message> <message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="60"/> <location filename="../../view/Control/Display/Call/CallListView.qml" line="62"/>
<source>meeting</source> <source>meeting</source>
<extracomment>&quot;Réunion</extracomment> <extracomment>&quot;Réunion</extracomment>
<translation>Réunion</translation> <translation>Réunion</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="62"/> <location filename="../../view/Control/Display/Call/CallListView.qml" line="64"/>
<source>call</source> <source>call</source>
<extracomment>&quot;Appel&quot;</extracomment> <extracomment>&quot;Appel&quot;</extracomment>
<translation>Appel</translation> <translation>Appel</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="67"/> <location filename="../../view/Control/Display/Call/CallListView.qml" line="69"/>
<source>paused_call_or_meeting</source> <source>paused_call_or_meeting</source>
<extracomment>&quot;%1 en pause&quot;</extracomment> <extracomment>&quot;%1 en pause&quot;</extracomment>
<translation>%1 en pause</translation> <translation>%1 en pause</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="69"/> <location filename="../../view/Control/Display/Call/CallListView.qml" line="71"/>
<source>ongoing_call_or_meeting</source> <source>ongoing_call_or_meeting</source>
<extracomment>&quot;%1 en cours&quot;</extracomment> <extracomment>&quot;%1 en cours&quot;</extracomment>
<translation>%1 en cours</translation> <translation>%1 en cours</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="89"/> <location filename="../../view/Control/Display/Call/CallListView.qml" line="91"/>
<source>transfer_call_name_accessible_name</source> <source>transfer_call_name_accessible_name</source>
<extracomment>Transfer call %1</extracomment> <extracomment>Transfer call %1</extracomment>
<translation>Transférer l&apos;appel %1</translation> <translation>Transférer l&apos;appel %1</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="117"/> <location filename="../../view/Control/Display/Call/CallListView.qml" line="119"/>
<source>resume_call_name_accessible_name</source> <source>resume_call_name_accessible_name</source>
<extracomment>Resume %1 call</extracomment> <extracomment>Resume %1 call</extracomment>
<translation>Reprendre l&apos;appel %1</translation> <translation>Reprendre l&apos;appel %1</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="119"/> <location filename="../../view/Control/Display/Call/CallListView.qml" line="121"/>
<source>pause_call_name_accessible_name</source> <source>pause_call_name_accessible_name</source>
<extracomment>Pause %1 call</extracomment> <extracomment>Pause %1 call</extracomment>
<translation>Mettre l&apos;appel %1 en pause</translation> <translation>Mettre l&apos;appel %1 en pause</translation>
</message> </message>
<message> <message>
<location filename="../../view/Control/Display/Call/CallListView.qml" line="142"/> <location filename="../../view/Control/Display/Call/CallListView.qml" line="144"/>
<source>end_call_name_accessible_name</source> <source>end_call_name_accessible_name</source>
<extracomment>End %1 call</extracomment> <extracomment>End %1 call</extracomment>
<translation>Terminer l&apos;appel %1</translation> <translation>Terminer l&apos;appel %1</translation>
@ -4941,7 +4941,7 @@ Expiration : %1</translation>
<context> <context>
<name>NewCallForm</name> <name>NewCallForm</name>
<message> <message>
<location filename="../../view/Page/Form/Call/NewCallForm.qml" line="24"/> <location filename="../../view/Page/Form/Call/NewCallForm.qml" line="25"/>
<source>call_transfer_active_calls_label</source> <source>call_transfer_active_calls_label</source>
<extracomment>&quot;Appels en cours&quot;</extracomment> <extracomment>&quot;Appels en cours&quot;</extracomment>
<translation>Appels en cours</translation> <translation>Appels en cours</translation>

View file

@ -11,19 +11,21 @@ import "qrc:/qt/qml/Linphone/view/Control/Tool/Helper/utils.js" as Utils
ListView { ListView {
id: mainItem id: mainItem
model: CallProxy {
id: callProxy
sourceModel: AppCpp.calls
}
implicitHeight: contentHeight implicitHeight: contentHeight
spacing: Utils.getSizeWithScreenRatio(15) spacing: Utils.getSizeWithScreenRatio(15)
clip: true clip: true
onCountChanged: forceLayout()
signal transferCallToAnotherRequested(CallGui dest)
property bool isTransferList: false property bool isTransferList: false
property string currentRemoteAddress: AppCpp.calls.currentCall ? AppCpp.calls.currentCall.core.remoteAddress : "" property string currentRemoteAddress: AppCpp.calls.currentCall ? AppCpp.calls.currentCall.core.remoteAddress : ""
signal transferCallToAnotherRequested(CallGui dest)
onCountChanged: forceLayout()
model: CallProxy {
id: callProxy
sourceModel: AppCpp.calls
showCurrentCall: !mainItem.isTransferList
}
delegate: RowLayout { delegate: RowLayout {
id: callInformationItem id: callInformationItem

View file

@ -20,6 +20,7 @@ CreationFormLayout {
topLayoutVisible: mainItem.displayCurrentCalls && callList.count > 0 topLayoutVisible: mainItem.displayCurrentCalls && callList.count > 0
topContent: [ topContent: [
Text { Text {
visible: callList.count > 0
//: "Appels en cours" //: "Appels en cours"
text: qsTr("call_transfer_active_calls_label") text: qsTr("call_transfer_active_calls_label")
font { font {