mirror of
https://gitlab.linphone.org/BC/public/linphone-desktop.git
synced 2026-01-27 16:59:21 +00:00
Add ICS actions (design only) on scheduled.
Add 'Me' on participants list and fix behaviours on participants in video conference. Prepare for invitations (SDK not working yet).
This commit is contained in:
parent
a3554153d5
commit
2f5abc5c3b
30 changed files with 546 additions and 198 deletions
46
linphone-app/assets/images/ics_copy_custom.svg
Normal file
46
linphone-app/assets/images/ics_copy_custom.svg
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="80"
|
||||
height="80"
|
||||
viewBox="0 0 80 80"
|
||||
version="1.1"
|
||||
id="svg6"
|
||||
sodipodi:docname="ics_copy_custom.svg"
|
||||
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs10" />
|
||||
<sodipodi:namedview
|
||||
id="namedview8"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
showgrid="false"
|
||||
width="80px"
|
||||
inkscape:zoom="5.6283784"
|
||||
inkscape:cx="74"
|
||||
inkscape:cy="59.87515"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1043"
|
||||
inkscape:window-x="1920"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg6" />
|
||||
<g
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
id="g4"
|
||||
transform="matrix(0.599988,0,0,0.66666667,-4.9994,-9.3333335)">
|
||||
<path
|
||||
d="M 81.439,104 H 59.28 C 54.163,104 50,99.795 50,94.625 V 62.867 c 0,-5.17 4.163,-9.375 9.28,-9.375 h 22.16 c 5.117,0 9.28,4.206 9.28,9.375 v 31.758 c 0,5.17 -4.163,9.375 -9.28,9.375 z M 59.28,58.18 c -2.559,0 -4.64,2.103 -4.64,4.687 v 31.758 c 0,2.585 2.081,4.688 4.64,4.688 h 22.158 c 2.558,0 4.64,-2.103 4.64,-4.688 V 62.867 c 0,-2.584 -2.082,-4.687 -4.64,-4.687 z M 100,88.766 V 53.375 C 100,48.205 95.837,44 90.72,44 H 64.964 c -1.281,0 -2.32,1.05 -2.32,2.344 0,1.294 1.039,2.343 2.32,2.343 H 90.72 c 2.559,0 4.64,2.103 4.64,4.688 v 35.39 c 0,1.295 1.04,2.344 2.32,2.344 1.282,0 2.321,-1.049 2.321,-2.343 z"
|
||||
fill="#000000"
|
||||
fill-rule="nonzero"
|
||||
id="path2" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.8 KiB |
52
linphone-app/assets/images/ics_edit_custom.svg
Normal file
52
linphone-app/assets/images/ics_edit_custom.svg
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="80"
|
||||
height="80"
|
||||
viewBox="0 0 80 80"
|
||||
version="1.1"
|
||||
id="svg10"
|
||||
sodipodi:docname="modifyDefault.svg"
|
||||
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs14" />
|
||||
<sodipodi:namedview
|
||||
id="namedview12"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
showgrid="false"
|
||||
width="80px"
|
||||
inkscape:zoom="5.20625"
|
||||
inkscape:cx="-0.67226891"
|
||||
inkscape:cy="37.839136"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1163"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg10" />
|
||||
<g
|
||||
fill="none"
|
||||
fill-rule="evenodd"
|
||||
id="g8"
|
||||
transform="matrix(1.8889439,0,0,2.0000027,1.2216171,-7.7899496e-5)">
|
||||
<g
|
||||
fill="#000000"
|
||||
fill-rule="nonzero"
|
||||
id="g6">
|
||||
<path
|
||||
d="M 26.333,19.846 A 0.66,0.66 0 0 0 25.667,20.5 v 6.538 A 0.66,0.66 0 0 1 25,27.692 H 13 A 0.66,0.66 0 0 1 12.333,27.038 V 13.962 A 0.66,0.66 0 0 1 13,13.308 h 8 A 0.66,0.66 0 0 0 21.667,12.654 0.66,0.66 0 0 0 21,12 h -8 c -1.105,0 -2,0.878 -2,1.962 V 27.038 C 11,28.122 11.895,29 13,29 h 12 c 1.105,0 2,-0.878 2,-1.962 V 20.5 a 0.66,0.66 0 0 0 -0.667,-0.654 z"
|
||||
id="path2" />
|
||||
<path
|
||||
d="m 28.287,11.714 a 2.436,2.436 0 0 0 -3.446,0 l -8.382,8.382 a 0.643,0.643 0 0 0 -0.153,0.248 l -1.273,3.819 a 0.636,0.636 0 0 0 0.804,0.805 l 3.818,-1.273 a 0.637,0.637 0 0 0 0.25,-0.154 l 8.381,-8.382 a 2.436,2.436 0 0 0 0,-3.445 z m -0.9,2.545 -8.273,8.273 -2.472,0.826 0.823,-2.469 8.276,-8.273 a 1.164,1.164 0 0 1 1.646,1.643 z"
|
||||
id="path4" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2 KiB |
|
|
@ -1757,6 +1757,20 @@ Click here: <a href="%1">%1</a>
|
|||
<translation>Conversation's devices</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ParticipantsListView</name>
|
||||
<message>
|
||||
<source>participantList</source>
|
||||
<extracomment>'Participant list'</extracomment>
|
||||
<translation type="unfinished">Participant list</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>adminStatus</source>
|
||||
<extracomment>'Admin' : Admin(istrator)</extracomment>
|
||||
<translation type="unfinished">Admin</translation>
|
||||
<extra-one>word for admin status</extra-one>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ParticipantsView</name>
|
||||
<message>
|
||||
|
|
|
|||
|
|
@ -92,6 +92,8 @@
|
|||
<file>assets/images/home_custom.svg</file>
|
||||
<file>assets/images/home_invite_friends.svg</file>
|
||||
<file>assets/images/home_use_linphone.svg</file>
|
||||
<file>assets/images/ics_copy_custom.svg</file>
|
||||
<file>assets/images/ics_edit_custom.svg</file>
|
||||
<file>assets/images/incoming_call_custom.svg</file>
|
||||
<file>assets/images/led_green.svg</file>
|
||||
<file>assets/images/led_orange.svg</file>
|
||||
|
|
@ -174,6 +176,7 @@
|
|||
<file>ui/modules/Common/Form/Buttons/SmallButton.qml</file>
|
||||
<file>ui/modules/Common/Form/Buttons/TextButtonA.qml</file>
|
||||
<file>ui/modules/Common/Form/Buttons/TextButtonB.qml</file>
|
||||
<file>ui/modules/Common/Form/Buttons/TextButtonC.qml</file>
|
||||
<file>ui/modules/Common/Form/CheckBoxText.qml</file>
|
||||
<file>ui/modules/Common/Form/ComboBox.js</file>
|
||||
<file>ui/modules/Common/Form/ComboBox.qml</file>
|
||||
|
|
@ -243,6 +246,7 @@
|
|||
<file>ui/modules/Common/Styles/Form/Buttons/SmallButtonStyle.qml</file>
|
||||
<file>ui/modules/Common/Styles/Form/Buttons/TextButtonAStyle.qml</file>
|
||||
<file>ui/modules/Common/Styles/Form/Buttons/TextButtonBStyle.qml</file>
|
||||
<file>ui/modules/Common/Styles/Form/Buttons/TextButtonCStyle.qml</file>
|
||||
<file>ui/modules/Common/Styles/Form/CheckBoxTextStyle.qml</file>
|
||||
<file>ui/modules/Common/Styles/Form/ComboBoxStyle.qml</file>
|
||||
<file>ui/modules/Common/Styles/Form/CommonItemDelegateStyle.qml</file>
|
||||
|
|
|
|||
|
|
@ -155,7 +155,7 @@ ChatRoomModel::ChatRoomModel (std::shared_ptr<linphone::ChatRoom> chatRoom, QObj
|
|||
if(mChatRoom){
|
||||
mParticipantListModel = QSharedPointer<ParticipantListModel>::create(this);
|
||||
connect(mParticipantListModel.get(), &ParticipantListModel::participantsChanged, this, &ChatRoomModel::fullPeerAddressChanged);
|
||||
auto participants = mChatRoom->getParticipants();
|
||||
auto participants = getParticipants();
|
||||
for(auto participant : participants){
|
||||
auto contact = CoreManager::getInstance()->getContactsListModel()->findContactModelFromSipAddress(Utils::coreStringToAppString((participant)->getAddress()->asString()));
|
||||
if(contact) {
|
||||
|
|
@ -182,7 +182,7 @@ ChatRoomModel::~ChatRoomModel () {
|
|||
if(mDeleteChatRoom){
|
||||
mDeleteChatRoom = false;
|
||||
if(CoreManager::getInstance()->getCore() ){
|
||||
auto participants = mChatRoom->getParticipants();
|
||||
auto participants = getParticipants();
|
||||
std::list<std::shared_ptr<linphone::Address>> participantsAddress;
|
||||
for(auto p : participants)
|
||||
participantsAddress.push_back(p->getAddress()->clone());
|
||||
|
|
@ -348,7 +348,7 @@ QString ChatRoomModel::getUsername () const {
|
|||
|
||||
QString ChatRoomModel::getAvatar () const {
|
||||
if( mChatRoom && mChatRoom->getNbParticipants() == 1){
|
||||
auto participants = mChatRoom->getParticipants();
|
||||
auto participants = getParticipants();
|
||||
auto contact = CoreManager::getInstance()->getContactsListModel()->findContactModelFromSipAddress(Utils::coreStringToAppString((*participants.begin())->getAddress()->asString()));
|
||||
if(contact)
|
||||
return contact->getVcardModel()->getAvatar();
|
||||
|
|
@ -358,7 +358,7 @@ QString ChatRoomModel::getAvatar () const {
|
|||
|
||||
int ChatRoomModel::getPresenceStatus() const {
|
||||
if( mChatRoom && mChatRoom->getNbParticipants() == 1 && !isGroupEnabled()){
|
||||
auto participants = mChatRoom->getParticipants();
|
||||
auto participants = getParticipants();
|
||||
auto contact = CoreManager::getInstance()->getContactsListModel()->findContactModelFromSipAddress(Utils::coreStringToAppString((*participants.begin())->getAddress()->asString()));
|
||||
if(contact) {
|
||||
return contact->getPresenceLevel();
|
||||
|
|
@ -369,10 +369,18 @@ int ChatRoomModel::getPresenceStatus() const {
|
|||
return -1;
|
||||
}
|
||||
|
||||
ParticipantListModel* ChatRoomModel::getParticipants() const{
|
||||
ParticipantListModel* ChatRoomModel::getParticipantListModel() const{
|
||||
return mParticipantListModel.get();
|
||||
}
|
||||
|
||||
std::list<std::shared_ptr<linphone::Participant>> ChatRoomModel::getParticipants() const{
|
||||
auto participantList = mChatRoom->getParticipants();
|
||||
auto me = mChatRoom->getMe();
|
||||
if( me )
|
||||
participantList.push_front(me);
|
||||
return participantList;
|
||||
}
|
||||
|
||||
int ChatRoomModel::getState() const {
|
||||
return mChatRoom ? (int)mChatRoom->getState() : 0;
|
||||
}
|
||||
|
|
@ -476,7 +484,7 @@ QString ChatRoomModel::getParticipantAddress(){
|
|||
return "";
|
||||
}
|
||||
}else{
|
||||
auto participants = getParticipants();
|
||||
auto participants = getParticipantListModel();
|
||||
if(participants->getCount() > 1)
|
||||
return participants->getAt<ParticipantModel>(1)->getSipAddress();
|
||||
else
|
||||
|
|
@ -1110,7 +1118,7 @@ void ChatRoomModel::handlePresenceStatusReceived(std::shared_ptr<linphone::Frien
|
|||
//cleanContactAddress->clean();
|
||||
canUpdatePresence = mChatRoom->getLocalAddress()->weakEqual(*itContactAddress);
|
||||
if(!canUpdatePresence && !isGroupEnabled() && mChatRoom->getNbParticipants() == 1){
|
||||
auto participants = mChatRoom->getParticipants();
|
||||
auto participants = getParticipants();
|
||||
auto contact = CoreManager::getInstance()->getContactsListModel()->findContactModelFromSipAddress(Utils::coreStringToAppString((*participants.begin())->getAddress()->asString()));
|
||||
if(contact){
|
||||
auto friendsAddresses = contact->getVcardModel()->getSipAddresses();
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@ public:
|
|||
Q_PROPERTY(bool canBeEphemeral READ canBeEphemeral NOTIFY canBeEphemeralChanged)
|
||||
Q_PROPERTY(bool markAsReadEnabled READ markAsReadEnabled WRITE enableMarkAsRead NOTIFY markAsReadEnabledChanged)
|
||||
|
||||
Q_PROPERTY(ParticipantListModel* participants READ getParticipants CONSTANT)
|
||||
Q_PROPERTY(ParticipantListModel* participants READ getParticipantListModel CONSTANT)
|
||||
|
||||
Q_PROPERTY(ChatMessageModel * reply READ getReply WRITE setReply NOTIFY replyChanged)
|
||||
|
||||
|
|
@ -133,7 +133,8 @@ public:
|
|||
bool getIsRemoteComposing () const;
|
||||
bool isEntriesLoading() const;
|
||||
bool isBasic() const;
|
||||
ParticipantListModel* getParticipants() const;
|
||||
ParticipantListModel* getParticipantListModel() const;
|
||||
std::list<std::shared_ptr<linphone::Participant>> getParticipants() const;
|
||||
std::shared_ptr<linphone::ChatRoom> getChatRoom();
|
||||
QList<QString> getComposers();
|
||||
QString getParticipantAddress(); // return peerAddress if not secure else return the first participant SIP address.
|
||||
|
|
|
|||
|
|
@ -114,7 +114,7 @@ bool ConferenceHelperModel::ConferenceAddModel::addToConference (const QString &
|
|||
}
|
||||
|
||||
void ConferenceHelperModel::ConferenceAddModel::addParticipants(ChatRoomModel * model){
|
||||
auto participants = model->getChatRoom()->getParticipants();
|
||||
auto participants = model->getParticipants();
|
||||
for( auto participant : participants){
|
||||
if(participant){
|
||||
addToConference(Utils::coreStringToAppString(participant->getAddress()->asString()));
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@ void ConferenceListener::onParticipantDeviceIsSpeakingChanged(const std::shared_
|
|||
emit participantDeviceIsSpeakingChanged(participantDevice, isSpeaking);
|
||||
}
|
||||
void ConferenceListener::onStateChanged(const std::shared_ptr<linphone::Conference> & conference, linphone::Conference::State newState){
|
||||
qDebug() << "onStateChanged";
|
||||
qDebug() << "onStateChanged:" << (int)newState;
|
||||
emit conferenceStateChanged(newState);
|
||||
}
|
||||
void ConferenceListener::onSubjectChanged(const std::shared_ptr<linphone::Conference> & conference, const std::string & subject){
|
||||
|
|
|
|||
|
|
@ -110,15 +110,22 @@ ParticipantModel* ConferenceModel::getLocalParticipant() const{
|
|||
return mLocalParticipant.get();
|
||||
}
|
||||
|
||||
ParticipantListModel* ConferenceModel::getParticipants() const{
|
||||
ParticipantListModel* ConferenceModel::getParticipantListModel() const{
|
||||
return mParticipantListModel.get();
|
||||
}
|
||||
|
||||
std::list<std::shared_ptr<linphone::Participant>> ConferenceModel::getParticipantList()const{
|
||||
auto participantList = mConference->getParticipantList();
|
||||
auto me = mConference->getMe();
|
||||
if( me )
|
||||
participantList.push_front(me);
|
||||
return participantList;
|
||||
}
|
||||
//-----------------------------------------------------------------------------------------------------------------------
|
||||
// LINPHONE LISTENERS
|
||||
//-----------------------------------------------------------------------------------------------------------------------
|
||||
void ConferenceModel::onParticipantAdded(const std::shared_ptr<const linphone::Participant> & participant){
|
||||
qDebug() << "Added call, participant count: " << mConference->getParticipantList().size();
|
||||
qDebug() << "Added call, participant count: " << getParticipantList().size();
|
||||
if(!mLocalParticipant){
|
||||
if(updateLocalParticipant())
|
||||
emit localParticipantChanged();
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ public:
|
|||
|
||||
Q_PROPERTY(QString subject READ getSubject NOTIFY subjectChanged)
|
||||
Q_PROPERTY(QDateTime startDate READ getStartDate CONSTANT)
|
||||
Q_PROPERTY(ParticipantListModel* participants READ getParticipants CONSTANT)
|
||||
Q_PROPERTY(ParticipantListModel* participants READ getParticipantListModel CONSTANT)
|
||||
Q_PROPERTY(ParticipantModel* localParticipant READ getLocalParticipant NOTIFY localParticipantChanged)
|
||||
|
||||
|
||||
|
|
@ -54,7 +54,8 @@ public:
|
|||
QDateTime getStartDate() const;
|
||||
Q_INVOKABLE qint64 getElapsedSeconds() const;
|
||||
Q_INVOKABLE ParticipantModel* getLocalParticipant() const;
|
||||
ParticipantListModel* getParticipants() const;
|
||||
ParticipantListModel* getParticipantListModel() const;
|
||||
std::list<std::shared_ptr<linphone::Participant>> getParticipantList() const; // SDK exclude me. We want to get ALL participants.
|
||||
|
||||
virtual void onParticipantAdded(const std::shared_ptr<const linphone::Participant> & participant);
|
||||
virtual void onParticipantRemoved(const std::shared_ptr<const linphone::Participant> & participant);
|
||||
|
|
|
|||
|
|
@ -87,6 +87,7 @@ class ColorListModel : public ProxyListModel {
|
|||
|
||||
ADD_COLOR("s", "#96be64", "Security")
|
||||
|
||||
|
||||
ADD_COLOR("t", "#C2C2C2", "Title Header")
|
||||
ADD_COLOR("u", "#D2D2D2", "Menu border (message)")
|
||||
ADD_COLOR("v", "#E7E7E7", "Menu pressed (message)")
|
||||
|
|
@ -117,6 +118,11 @@ class ColorListModel : public ProxyListModel {
|
|||
ADD_COLOR("conference_out_avatar_bg", "#A1A1A1", "Conferences: Background avatar")
|
||||
ADD_COLOR("conference_bg", "#798791", "Conferences: Background")
|
||||
|
||||
ADD_COLOR("validation", "#96C11F", "Background for validation on buttons")
|
||||
ADD_COLOR("validation_h", "#7B9D1B", "Hovered background for validation on buttons")
|
||||
|
||||
ADD_COLOR("readonly_fg", "#B1B1B1", "Chat text area Readonly foreground")
|
||||
|
||||
|
||||
// Standard actions
|
||||
//
|
||||
|
|
|
|||
|
|
@ -62,7 +62,8 @@ ParticipantListModel::ParticipantListModel (ConferenceModel * conferenceModel, Q
|
|||
connect(mConferenceModel, &ConferenceModel::participantAdded, this, QOverload<const std::shared_ptr<const linphone::Participant> &>::of(&ParticipantListModel::onParticipantAdded));
|
||||
connect(mConferenceModel, &ConferenceModel::participantRemoved, this, QOverload<const std::shared_ptr<const linphone::Participant> &>::of(&ParticipantListModel::onParticipantRemoved));
|
||||
connect(mConferenceModel, &ConferenceModel::participantAdminStatusChanged, this, QOverload<const std::shared_ptr<const linphone::Participant> &>::of(&ParticipantListModel::onParticipantAdminStatusChanged));
|
||||
|
||||
|
||||
connect(mConferenceModel, &ConferenceModel::conferenceStateChanged, this, &ParticipantListModel::onStateChanged);
|
||||
//connect(mConferenceModel, &ConferenceModel::participantDeviceAdded, this, &ParticipantListModel::onParticipantDeviceAdded);
|
||||
//connect(mConferenceModel, &ConferenceModel::participantDeviceRemoved, this, &ParticipantListModel::onParticipantDeviceRemoved);
|
||||
|
||||
|
|
@ -147,7 +148,8 @@ bool ParticipantListModel::contains(const QString& address) const{
|
|||
void ParticipantListModel::updateParticipants () {
|
||||
if( mChatRoomModel || mConferenceModel) {
|
||||
bool changed = false;
|
||||
auto dbParticipants = (mChatRoomModel ? mChatRoomModel->getChatRoom()->getParticipants() : mConferenceModel->getConference()->getParticipantList());
|
||||
auto dbParticipants = (mChatRoomModel ? mChatRoomModel->getParticipants() : mConferenceModel->getParticipantList());
|
||||
/*
|
||||
std::shared_ptr<linphone::Participant> me;
|
||||
if( mChatRoomModel )
|
||||
me = mChatRoomModel->getChatRoom()->getMe();
|
||||
|
|
@ -155,7 +157,7 @@ void ParticipantListModel::updateParticipants () {
|
|||
me = mConferenceModel->getLocalParticipant()->getParticipant();
|
||||
if(me)
|
||||
dbParticipants.push_front(me);
|
||||
|
||||
*/
|
||||
//Remove left participants
|
||||
//for(auto participant : mList){
|
||||
auto itParticipant = mList.begin();
|
||||
|
|
@ -359,3 +361,11 @@ void ParticipantListModel::onParticipantRegistrationSubscriptionRequested(const
|
|||
}
|
||||
void ParticipantListModel::onParticipantRegistrationUnsubscriptionRequested(const std::shared_ptr<const linphone::Address> & participantAddress){
|
||||
}
|
||||
|
||||
void ParticipantListModel::onStateChanged(){
|
||||
if(mConferenceModel){
|
||||
if(mConferenceModel->getConference()->getState() == linphone::Conference::State::Created){
|
||||
updateParticipants();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -82,6 +82,7 @@ public slots:
|
|||
void onParticipantDeviceRemoved(const std::shared_ptr<const linphone::EventLog> & eventLog);
|
||||
void onParticipantRegistrationSubscriptionRequested(const std::shared_ptr<const linphone::Address> & participantAddress);
|
||||
void onParticipantRegistrationUnsubscriptionRequested(const std::shared_ptr<const linphone::Address> & participantAddress);
|
||||
void onStateChanged();
|
||||
|
||||
signals:
|
||||
void securityLevelChanged();
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@ public:
|
|||
Q_PROPERTY(ContactModel *contactModel READ getContactModel CONSTANT)
|
||||
Q_PROPERTY(QString sipAddress READ getSipAddress WRITE setSipAddress NOTIFY sipAddressChanged)
|
||||
Q_PROPERTY(bool adminStatus READ getAdminStatus WRITE setAdminStatus NOTIFY adminStatusChanged)
|
||||
Q_PROPERTY(bool isMe READ isMe CONSTANT)
|
||||
Q_PROPERTY(QDateTime creationTime READ getCreationTime CONSTANT)
|
||||
Q_PROPERTY(bool focus READ isFocus CONSTANT)
|
||||
Q_PROPERTY(int securityLevel READ getSecurityLevel NOTIFY securityLevelChanged)
|
||||
|
|
|
|||
|
|
@ -70,7 +70,8 @@ QVariantList ParticipantProxyModel::getParticipants() const{
|
|||
}
|
||||
|
||||
int ParticipantProxyModel::getCount() const{
|
||||
return qobject_cast<ParticipantListModel*>(sourceModel())->rowCount();
|
||||
auto model = getParticipantListModel();
|
||||
return model ? model->rowCount() : 0;
|
||||
}
|
||||
|
||||
bool ParticipantProxyModel::getShowMe() const{
|
||||
|
|
@ -83,7 +84,7 @@ void ParticipantProxyModel::setChatRoomModel(ChatRoomModel * chatRoomModel){
|
|||
if(!mChatRoomModel || mChatRoomModel != chatRoomModel){
|
||||
mChatRoomModel = chatRoomModel;
|
||||
if(mChatRoomModel) {
|
||||
auto participants = mChatRoomModel->getParticipants();
|
||||
auto participants = mChatRoomModel->getParticipantListModel();
|
||||
setSourceModel(participants);
|
||||
emit participantListModelChanged();
|
||||
for(int i = 0 ; i < participants->getCount() ; ++i)
|
||||
|
|
@ -101,7 +102,7 @@ void ParticipantProxyModel::setConferenceModel(ConferenceModel * conferenceModel
|
|||
if(!mConferenceModel || mConferenceModel != conferenceModel){
|
||||
mConferenceModel = conferenceModel;
|
||||
if(mConferenceModel) {
|
||||
auto participants = mConferenceModel->getParticipants();
|
||||
auto participants = mConferenceModel->getParticipantListModel();
|
||||
setSourceModel(participants);
|
||||
emit participantListModelChanged();
|
||||
for(int i = 0 ; i < participants->getCount() ; ++i)
|
||||
|
|
@ -134,6 +135,16 @@ void ParticipantProxyModel::addAddress(const QString& address){
|
|||
connect(participant.get(), &ParticipantModel::invitationTimeout, this, &ParticipantProxyModel::removeModel);
|
||||
participant->startInvitation();
|
||||
}
|
||||
if( mConferenceModel && mConferenceModel->getConference()){
|
||||
//mConferenceModel->getConference()->addParticipant(Utils::interpretUrl(address));
|
||||
std::list<std::shared_ptr<linphone::Address>> addressesToInvite;
|
||||
addressesToInvite.push_back(Utils::interpretUrl(address));
|
||||
auto callParameters = CoreManager::getInstance()->getCore()->createCallParams(mConferenceModel->getConference()->getCall());
|
||||
|
||||
mConferenceModel->getConference()->inviteParticipants(addressesToInvite, callParameters);
|
||||
connect(participant.get(), &ParticipantModel::invitationTimeout, this, &ParticipantProxyModel::removeModel);
|
||||
participant->startInvitation();
|
||||
}
|
||||
emit countChanged();
|
||||
emit addressAdded(address);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ void LinphoneEnums::registerMetaTypes(){
|
|||
qRegisterMetaType<LinphoneEnums::EventLogType>();
|
||||
qRegisterMetaType<LinphoneEnums::ChatMessageState>();
|
||||
qRegisterMetaType<LinphoneEnums::CallStatus>();
|
||||
qRegisterMetaType<LinphoneEnums::ConferenceLayout>();
|
||||
qRegisterMetaType<LinphoneEnums::TunnelMode>();
|
||||
qRegisterMetaType<LinphoneEnums::RecorderState>();
|
||||
}
|
||||
|
|
|
|||
22
linphone-app/ui/modules/Common/Form/Buttons/TextButtonC.qml
Normal file
22
linphone-app/ui/modules/Common/Form/Buttons/TextButtonC.qml
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
import Common.Styles 1.0
|
||||
|
||||
// =============================================================================
|
||||
|
||||
AbstractTextButton {
|
||||
property var textButtonStyle : TextButtonCStyle
|
||||
|
||||
colorDisabled: textButtonStyle.backgroundColor.disabled
|
||||
colorHovered: textButtonStyle.backgroundColor.hovered
|
||||
colorNormal: textButtonStyle.backgroundColor.normal
|
||||
colorPressed: textButtonStyle.backgroundColor.pressed
|
||||
|
||||
textColorDisabled: textButtonStyle.textColor.disabled
|
||||
textColorHovered: textButtonStyle.textColor.hovered
|
||||
textColorNormal: textButtonStyle.textColor.normal
|
||||
textColorPressed: textButtonStyle.textColor.pressed
|
||||
|
||||
borderColorDisabled: (textButtonStyle.borderColor?textButtonStyle.borderColor.disabled:colorDisabled)
|
||||
borderColorHovered: (textButtonStyle.borderColor?textButtonStyle.borderColor.hovered:colorHovered)
|
||||
borderColorNormal: (textButtonStyle.borderColor?textButtonStyle.borderColor.normal:colorNormal)
|
||||
borderColorPressed: (textButtonStyle.borderColor?textButtonStyle.borderColor.pressed:colorPressed)
|
||||
}
|
||||
|
|
@ -70,7 +70,7 @@ Controls.TextField {
|
|||
}
|
||||
}
|
||||
|
||||
color: textFieldStyle.text.color
|
||||
color: textField.readOnly ? textFieldStyle.text.readOnly : textFieldStyle.text.normal
|
||||
font.pointSize: textFieldStyle.text.pointSize
|
||||
rightPadding: textFieldStyle.text.rightPadding + toolsContainer.width
|
||||
selectByMouse: true
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
pragma Singleton
|
||||
import QtQml 2.2
|
||||
|
||||
// TextButtonAStyle (Grey)
|
||||
import ColorsList 1.0
|
||||
|
||||
// =============================================================================
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
// TextButtonBStyle
|
||||
// TextButtonBStyle (Primary)
|
||||
pragma Singleton
|
||||
import QtQml 2.2
|
||||
import ColorsList 1.0
|
||||
|
|
|
|||
|
|
@ -0,0 +1,23 @@
|
|||
// TextButtonCStyle (Green)
|
||||
pragma Singleton
|
||||
import QtQml 2.2
|
||||
import ColorsList 1.0
|
||||
// =============================================================================
|
||||
|
||||
QtObject {
|
||||
property string sectionName: 'TextButtonC'
|
||||
property QtObject backgroundColor: QtObject {
|
||||
property color disabled: ColorsList.add(sectionName+'_bg_d', 'i30').color
|
||||
property color hovered: ColorsList.add(sectionName+'_bg_h', 'validation_h').color
|
||||
property color normal: ColorsList.add(sectionName+'_bg_n', 'validation').color
|
||||
property color pressed: ColorsList.add(sectionName+'_bg_p', 'i').color
|
||||
}
|
||||
|
||||
property QtObject textColor: QtObject {
|
||||
property color disabled: ColorsList.add(sectionName+'_text_d', 'q').color
|
||||
property color hovered: ColorsList.add(sectionName+'_text_h', 'q').color
|
||||
property color normal: ColorsList.add(sectionName+'_text_n', 'q').color
|
||||
property color pressed: ColorsList.add(sectionName+'_text_p', 'q').color
|
||||
}
|
||||
property QtObject borderColor : backgroundColor
|
||||
}
|
||||
|
|
@ -9,89 +9,122 @@ QtObject {
|
|||
property string sectionName: 'TextField'
|
||||
property QtObject normal : QtObject {
|
||||
property QtObject background: QtObject {
|
||||
property int height: 36
|
||||
property int width: 200
|
||||
|
||||
property int radius: 4
|
||||
|
||||
property QtObject border: QtObject {
|
||||
property QtObject color: QtObject {
|
||||
property color error: ColorsList.add(sectionName+'_n_bg_border_error', 'error').color
|
||||
property color normal: ColorsList.add(sectionName+'_n_bg_border_n', 'c').color
|
||||
property color selected: ColorsList.add(sectionName+'_n_bg_border_c', 'i').color
|
||||
property int height: 36
|
||||
property int width: 200
|
||||
|
||||
property int radius: 4
|
||||
|
||||
property QtObject border: QtObject {
|
||||
property QtObject color: QtObject {
|
||||
property color error: ColorsList.add(sectionName+'_n_bg_border_error', 'error').color
|
||||
property color normal: ColorsList.add(sectionName+'_n_bg_border_n', 'c').color
|
||||
property color selected: ColorsList.add(sectionName+'_n_bg_border_c', 'i').color
|
||||
}
|
||||
|
||||
property int width: 1
|
||||
}
|
||||
|
||||
property QtObject color: QtObject {
|
||||
property color normal: ColorsList.add(sectionName+'_n_bg_n', 'q').color
|
||||
property color readOnly: ColorsList.add(sectionName+'_n_bg_readonly', 'e').color
|
||||
}
|
||||
|
||||
property int width: 1
|
||||
}
|
||||
|
||||
property QtObject color: QtObject {
|
||||
property color normal: ColorsList.add(sectionName+'_n_bg_n', 'q').color
|
||||
property color readOnly: ColorsList.add(sectionName+'_n_bg_readonly', 'e').color
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
property QtObject text: QtObject {
|
||||
property color color: ColorsList.add(sectionName+'_n_text', 'd').color
|
||||
property int pointSize: Units.dp * 10
|
||||
property int rightPadding: 10
|
||||
property color normal: ColorsList.add(sectionName+'_n_text', 'd').color
|
||||
property color readOnly: ColorsList.add(sectionName+'_n_text_readonly', 'd').color
|
||||
property int pointSize: Units.dp * 10
|
||||
property int rightPadding: 10
|
||||
}
|
||||
}
|
||||
property QtObject unbordered : QtObject {
|
||||
property QtObject background: QtObject {
|
||||
property int height: 36
|
||||
property int width: 200
|
||||
|
||||
property int radius: 4
|
||||
|
||||
property QtObject border: QtObject {
|
||||
property QtObject color: QtObject {
|
||||
property color error: 'black'
|
||||
property color normal: 'black'
|
||||
property color selected: 'black'
|
||||
property int height: 36
|
||||
property int width: 200
|
||||
|
||||
property int radius: 4
|
||||
|
||||
property QtObject border: QtObject {
|
||||
property QtObject color: QtObject {
|
||||
property color error: 'black'
|
||||
property color normal: 'black'
|
||||
property color selected: 'black'
|
||||
}
|
||||
|
||||
property int width: 0
|
||||
}
|
||||
|
||||
property QtObject color: QtObject {
|
||||
property color normal: ColorsList.add(sectionName+'_unbordered_bg_n', 'q').color
|
||||
property color readOnly: ColorsList.add(sectionName+'_unbordered_bg_readonly', 'e').color
|
||||
}
|
||||
|
||||
property int width: 0
|
||||
}
|
||||
|
||||
property QtObject color: QtObject {
|
||||
property color normal: ColorsList.add(sectionName+'_unbordered_bg_n', 'q').color
|
||||
property color readOnly: ColorsList.add(sectionName+'_unbordered_bg_readonly', 'e').color
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
property QtObject text: QtObject {
|
||||
property color color: ColorsList.add(sectionName+'_unbordered_text', 'd').color
|
||||
property int pointSize: Units.dp * 10
|
||||
property int rightPadding: 10
|
||||
property color normal: ColorsList.add(sectionName+'_unbordered_text', 'd').color
|
||||
property color readOnly: ColorsList.add(sectionName+'_unbordered_text_readonly', 'd').color
|
||||
property int pointSize: Units.dp * 10
|
||||
property int rightPadding: 10
|
||||
}
|
||||
}
|
||||
property QtObject flat : QtObject {
|
||||
property QtObject background: QtObject {
|
||||
property int height: 36
|
||||
property int width: 200
|
||||
|
||||
property int radius: 0
|
||||
|
||||
property QtObject border: QtObject {
|
||||
property QtObject color: QtObject {
|
||||
property color error: 'black'
|
||||
property color normal: 'black'
|
||||
property color selected: 'black'
|
||||
property int height: 36
|
||||
property int width: 200
|
||||
|
||||
property int radius: 0
|
||||
|
||||
property QtObject border: QtObject {
|
||||
property QtObject color: QtObject {
|
||||
property color error: 'black'
|
||||
property color normal: 'black'
|
||||
property color selected: 'black'
|
||||
}
|
||||
|
||||
property int width: 0
|
||||
}
|
||||
|
||||
property QtObject color: QtObject {
|
||||
property color normal: ColorsList.add(sectionName+'_flat_bg_n', 'q').color
|
||||
property color readOnly: ColorsList.add(sectionName+'_flat_bg_readonly', 'e').color
|
||||
}
|
||||
|
||||
property int width: 0
|
||||
}
|
||||
|
||||
property QtObject color: QtObject {
|
||||
property color normal: ColorsList.add(sectionName+'_flat_bg_n', 'q').color
|
||||
property color readOnly: ColorsList.add(sectionName+'_flat_bg_readonly', 'e').color
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
property QtObject text: QtObject {
|
||||
property color color: ColorsList.add(sectionName+'_flat_text', 'd').color
|
||||
property int pointSize: Units.dp * 10
|
||||
property int rightPadding: 10
|
||||
property color normal: ColorsList.add(sectionName+'_flat_text', 'd').color
|
||||
property color readonly: ColorsList.add(sectionName+'_flat_text_readonly', 'd').color
|
||||
property int pointSize: Units.dp * 10
|
||||
property int rightPadding: 10
|
||||
}
|
||||
}
|
||||
property QtObject flatInverse : QtObject {
|
||||
property QtObject background: QtObject {
|
||||
property int height: 36
|
||||
property int width: 200
|
||||
|
||||
property int radius: 0
|
||||
|
||||
property QtObject border: QtObject {
|
||||
property QtObject color: QtObject {
|
||||
property color error: 'black'
|
||||
property color normal: 'black'
|
||||
property color selected: 'black'
|
||||
}
|
||||
|
||||
property int width: 0
|
||||
}
|
||||
|
||||
property QtObject color: QtObject {
|
||||
property color normal: ColorsList.add(sectionName+'_flat_inv_bg_n', 'q').color
|
||||
property color readOnly: ColorsList.add(sectionName+'_flat_inv_bg_readonly', 'q').color
|
||||
}
|
||||
}
|
||||
|
||||
property QtObject text: QtObject {
|
||||
property color color: ColorsList.add(sectionName+'_flat_inv_text', 'd').color
|
||||
property color readOnly: ColorsList.add(sectionName+'_flat_inv_readonly', 'readonly_fg').color
|
||||
property int pointSize: Units.dp * 10
|
||||
property int rightPadding: 10
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ singleton FileChooserButtonStyle 1.0 Form/Buttons/FileChooserButtonStyle.qml
|
|||
singleton SmallButtonStyle 1.0 Form/Buttons/SmallButtonStyle.qml
|
||||
singleton TextButtonAStyle 1.0 Form/Buttons/TextButtonAStyle.qml
|
||||
singleton TextButtonBStyle 1.0 Form/Buttons/TextButtonBStyle.qml
|
||||
singleton TextButtonCStyle 1.0 Form/Buttons/TextButtonCStyle.qml
|
||||
|
||||
singleton NumericFieldStyle 1.0 Form/Fields/NumericFieldStyle.qml
|
||||
singleton TextAreaFieldStyle 1.0 Form/Fields/TextAreaFieldStyle.qml
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@ ExclusiveButtons 1.0 Form/Buttons/ExclusiveButtons.qml
|
|||
FileChooserButton 1.0 Form/Buttons/FileChooserButton.qml
|
||||
TextButtonA 1.0 Form/Buttons/TextButtonA.qml
|
||||
TextButtonB 1.0 Form/Buttons/TextButtonB.qml
|
||||
TextButtonC 1.0 Form/Buttons/TextButtonC.qml
|
||||
|
||||
HexField 1.0 Form/Fields/HexField.qml
|
||||
NumericField 1.0 Form/Fields/NumericField.qml
|
||||
|
|
|
|||
|
|
@ -193,6 +193,7 @@ Loader{
|
|||
font.weight: Font.Bold
|
||||
|
||||
text: 'Description :'
|
||||
visible: description.text != ''
|
||||
}
|
||||
TextAreaField{
|
||||
id: description
|
||||
|
|
@ -204,12 +205,67 @@ Loader{
|
|||
textColor: ChatCalendarMessageStyle.description.color
|
||||
font.pointSize: ChatCalendarMessageStyle.description.pointSize
|
||||
border.width: 0
|
||||
visible: description.text != ''
|
||||
|
||||
//font.weight: Font.Bold
|
||||
//elide: Text.ElideRight
|
||||
//wrapMode: TextEdit.WordWrap
|
||||
|
||||
text: mainItem.conferenceInfoModel.description
|
||||
}
|
||||
Text{
|
||||
id: linkTitle
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: 10
|
||||
color: ChatCalendarMessageStyle.subject.color
|
||||
font.pointSize: ChatCalendarMessageStyle.subject.pointSize
|
||||
font.weight: Font.Bold
|
||||
|
||||
text: 'Lien de la conférence'
|
||||
}
|
||||
RowLayout{
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
Layout.leftMargin: 10
|
||||
Layout.rightMargin: 60
|
||||
spacing: 10
|
||||
TextField{
|
||||
id: uriField
|
||||
readOnly: true
|
||||
Layout.fillWidth: true
|
||||
textFieldStyle: TextFieldStyle.flatInverse
|
||||
text: mainItem.conferenceInfoModel.uri
|
||||
|
||||
}
|
||||
ActionButton{
|
||||
iconSize: uriField.height
|
||||
isCustom: true
|
||||
colorSet: ChatCalendarMessageStyle.copyLinkButton
|
||||
backgroundRadius: width/2
|
||||
}
|
||||
}
|
||||
RowLayout{
|
||||
Layout.fillWidth: true
|
||||
Layout.topMargin: 10
|
||||
Layout.rightMargin: 10
|
||||
spacing: 10
|
||||
Item{
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
TextButtonC{
|
||||
text: 'REJOINDRE'
|
||||
}
|
||||
ActionButton{
|
||||
isCustom: true
|
||||
colorSet: ChatCalendarMessageStyle.editButton
|
||||
backgroundRadius: width/2
|
||||
}
|
||||
ActionButton{
|
||||
isCustom: true
|
||||
colorSet: ChatCalendarMessageStyle.deleteButton
|
||||
backgroundRadius: width/2
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,101 +11,120 @@ QtObject {
|
|||
property int topMargin: 0
|
||||
property int widthMargin: 5
|
||||
property int minWidth: 300
|
||||
|
||||
property int actionButtonsSize: 36
|
||||
property int avatarSize: 30
|
||||
property int deleteButtonSize: 22
|
||||
property int height: 50
|
||||
property int leftMargin: 40
|
||||
property int bottomMargin: 10
|
||||
property int presenceLevelSize: 12
|
||||
property int rightMargin: 25
|
||||
property int spacing: 15
|
||||
property int lineHeight: 20
|
||||
|
||||
property QtObject backgroundColor: QtObject {
|
||||
property color normal: ColorsList.add(sectionName+'_conference_bg_n', 'conference_entry_bg').color
|
||||
property color hovered: ColorsList.add(sectionName+'_conference_bg_h', 'g10').color
|
||||
}
|
||||
|
||||
property QtObject border: QtObject {
|
||||
property color color: ColorsList.add(sectionName+'_conference_border', 'f').color
|
||||
property int width: 1
|
||||
}
|
||||
|
||||
property QtObject indicator: QtObject {
|
||||
property color color: ColorsList.add(sectionName+'_conference_indicator', 'i').color
|
||||
property int width: 5
|
||||
}
|
||||
|
||||
property QtObject schedule: QtObject {
|
||||
property int spacing: 0
|
||||
property int pointSize: Units.dp * 9
|
||||
property string icon : 'schedule_custom'
|
||||
property int iconSize: 30
|
||||
property color color: ColorsList.add(sectionName+'_schedule', 'j').color
|
||||
}
|
||||
property QtObject subject: QtObject {
|
||||
property int spacing: 5
|
||||
property int pointSize: Units.dp * 11
|
||||
property color color: ColorsList.add(sectionName+'_subject', 'j').color
|
||||
}
|
||||
property QtObject description: QtObject {
|
||||
property int spacing: 5
|
||||
property int pointSize: Units.dp * 9
|
||||
property color color: ColorsList.add(sectionName+'_description', 'j').color
|
||||
}
|
||||
property QtObject participants: QtObject {
|
||||
property int spacing: 5
|
||||
property int pointSize: Units.dp * 9
|
||||
property string icon : 'calendar_participants_custom'
|
||||
property int iconSize: 30
|
||||
property color color: ColorsList.add(sectionName+'_participants', 'j').color
|
||||
}
|
||||
|
||||
property QtObject gotoButton: QtObject{
|
||||
property int iconSize: 20
|
||||
property string name : 'goto'
|
||||
property string icon : 'transfer_custom'
|
||||
property color backgroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_b_n', icon, 's_n_b_bg').color
|
||||
property color backgroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_b_h', icon, 's_h_b_bg').color
|
||||
property color backgroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_b_p', icon, 's_p_b_bg').color
|
||||
property color foregroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_f_n', icon, 's_n_b_fg').color
|
||||
property color foregroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_f_h', icon, 's_h_b_fg').color
|
||||
property color foregroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_f_p', icon, 's_p_b_fg').color
|
||||
}
|
||||
property QtObject infoButton: QtObject{
|
||||
property int iconSize: 35
|
||||
property string name : 'info'
|
||||
property string icon : 'menu_info_custom'
|
||||
property color backgroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_b_n', icon, 'me_n_b_bg').color
|
||||
property color backgroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_b_h', icon, 'me_h_b_bg').color
|
||||
property color backgroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_b_p', icon, 'me_p_b_bg').color
|
||||
property color foregroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_f_n', icon, 'me_n_b_fg').color
|
||||
property color foregroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_f_h', icon, 'me_h_b_fg').color
|
||||
property color foregroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_f_p', icon, 'me_p_b_fg').color
|
||||
}
|
||||
|
||||
property QtObject organizer: QtObject {
|
||||
property color color: ColorsList.add(sectionName+'_conference_organizer', 'j').color
|
||||
property int pointSize: Units.dp * 9
|
||||
property int width: 220
|
||||
}
|
||||
|
||||
property int actionButtonsSize: 36
|
||||
property int avatarSize: 30
|
||||
property int deleteButtonSize: 22
|
||||
property int height: 50
|
||||
property int leftMargin: 40
|
||||
property int bottomMargin: 10
|
||||
property int presenceLevelSize: 12
|
||||
property int rightMargin: 25
|
||||
property int spacing: 15
|
||||
property int lineHeight: 20
|
||||
|
||||
//property color : ColorsList.add(sectionName+'_conference_bg_n', 'conference_entry_bg').color
|
||||
|
||||
/*
|
||||
property color color: ColorsList.add(sectionName, 'q').color
|
||||
property QtObject header: QtObject{
|
||||
property color color: ColorsList.add(sectionName+'_header', 'h').color
|
||||
property int pointSizeOffset: -3
|
||||
property QtObject forwardIcon: QtObject{
|
||||
property string icon : 'menu_forward_custom'
|
||||
property int iconSize: 22
|
||||
}
|
||||
property QtObject backgroundColor: QtObject {
|
||||
property color normal: ColorsList.add(sectionName+'_conference_bg_n', 'conference_entry_bg').color
|
||||
property color hovered: ColorsList.add(sectionName+'_conference_bg_h', 'g10').color
|
||||
}
|
||||
|
||||
property QtObject border: QtObject {
|
||||
property color color: ColorsList.add(sectionName+'_conference_border', 'f').color
|
||||
property int width: 1
|
||||
}
|
||||
|
||||
property QtObject indicator: QtObject {
|
||||
property color color: ColorsList.add(sectionName+'_conference_indicator', 'i').color
|
||||
property int width: 5
|
||||
}
|
||||
|
||||
property QtObject schedule: QtObject {
|
||||
property int spacing: 0
|
||||
property int pointSize: Units.dp * 9
|
||||
property string icon : 'schedule_custom'
|
||||
property int iconSize: 30
|
||||
property color color: ColorsList.add(sectionName+'_schedule', 'j').color
|
||||
}
|
||||
property QtObject subject: QtObject {
|
||||
property int spacing: 5
|
||||
property int pointSize: Units.dp * 11
|
||||
property color color: ColorsList.add(sectionName+'_subject', 'j').color
|
||||
}
|
||||
property QtObject description: QtObject {
|
||||
property int spacing: 5
|
||||
property int pointSize: Units.dp * 9
|
||||
property color color: ColorsList.add(sectionName+'_description', 'j').color
|
||||
}
|
||||
property QtObject participants: QtObject {
|
||||
property int spacing: 5
|
||||
property int pointSize: Units.dp * 9
|
||||
property string icon : 'calendar_participants_custom'
|
||||
property int iconSize: 30
|
||||
property color color: ColorsList.add(sectionName+'_participants', 'j').color
|
||||
}
|
||||
|
||||
property QtObject gotoButton: QtObject{
|
||||
property int iconSize: 20
|
||||
property string name : 'goto'
|
||||
property string icon : 'transfer_custom'
|
||||
property color backgroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_b_n', icon, 's_n_b_bg').color
|
||||
property color backgroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_b_h', icon, 's_h_b_bg').color
|
||||
property color backgroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_b_p', icon, 's_p_b_bg').color
|
||||
property color foregroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_f_n', icon, 's_n_b_fg').color
|
||||
property color foregroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_f_h', icon, 's_h_b_fg').color
|
||||
property color foregroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_f_p', icon, 's_p_b_fg').color
|
||||
}
|
||||
property QtObject infoButton: QtObject{
|
||||
property int iconSize: 35
|
||||
property string name : 'info'
|
||||
property string icon : 'menu_info_custom'
|
||||
property color backgroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_b_n', icon, 'me_n_b_bg').color
|
||||
property color backgroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_b_h', icon, 'me_h_b_bg').color
|
||||
property color backgroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_b_p', icon, 'me_p_b_bg').color
|
||||
property color foregroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_f_n', icon, 'me_n_b_fg').color
|
||||
property color foregroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_f_h', icon, 'me_h_b_fg').color
|
||||
property color foregroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_f_p', icon, 'me_p_b_fg').color
|
||||
}
|
||||
|
||||
property QtObject organizer: QtObject {
|
||||
property color color: ColorsList.add(sectionName+'_conference_organizer', 'j').color
|
||||
property int pointSize: Units.dp * 9
|
||||
property int width: 220
|
||||
}
|
||||
property QtObject copyLinkButton: QtObject{
|
||||
property int iconSize: 20
|
||||
property string name : 'copy'
|
||||
property string icon : 'ics_copy_custom'
|
||||
property color backgroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_b_n', icon, 's_n_b_bg').color
|
||||
property color backgroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_b_h', icon, 's_h_b_bg').color
|
||||
property color backgroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_b_p', icon, 's_p_b_bg').color
|
||||
property color foregroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_f_n', icon, 's_n_b_fg').color
|
||||
property color foregroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_f_h', icon, 's_h_b_fg').color
|
||||
property color foregroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_f_p', icon, 's_p_b_fg').color
|
||||
}
|
||||
property QtObject editButton: QtObject{
|
||||
property int iconSize: 40
|
||||
property string name : 'edit'
|
||||
property string icon : 'ics_edit_custom'
|
||||
property color backgroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_b_n', icon, 's_n_b_bg').color
|
||||
property color backgroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_b_h', icon, 's_h_b_bg').color
|
||||
property color backgroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_b_p', icon, 's_p_b_bg').color
|
||||
property color foregroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_f_n', icon, 's_n_b_fg').color
|
||||
property color foregroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_f_h', icon, 's_h_b_fg').color
|
||||
property color foregroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_f_p', icon, 's_p_b_fg').color
|
||||
}
|
||||
property QtObject deleteButton: QtObject{
|
||||
property int iconSize: 40
|
||||
property string name : 'delete'
|
||||
property string icon : 'delete_custom'
|
||||
property color backgroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_b_n', icon, 's_n_b_bg').color
|
||||
property color backgroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_b_h', icon, 's_h_b_bg').color
|
||||
property color backgroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_b_p', icon, 's_p_b_bg').color
|
||||
property color foregroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_f_n', icon, 's_n_b_fg').color
|
||||
property color foregroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_f_h', icon, 's_h_b_fg').color
|
||||
property color foregroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_f_p', icon, 's_p_b_fg').color
|
||||
}
|
||||
|
||||
property int padding: 8
|
||||
*/
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ ColumnLayout {
|
|||
|
||||
property ParticipantModel me: conferenceModel && conferenceModel.localParticipant
|
||||
|
||||
property int count: selectedParticipants.count
|
||||
property bool isAdmin : (chatRoomModel && chatRoomModel.isMeAdmin && !chatRoomModel.isReadOnly) || (me && me.adminStatus)
|
||||
property bool canHandleParticipants : isAdmin && ( (chatRoomModel && chatRoomModel.canHandleParticipants) || conferenceModel)
|
||||
property bool haveEncryption: chatRoomModel && chatRoomModel.haveEncryption
|
||||
|
|
@ -70,7 +71,7 @@ ColumnLayout {
|
|||
Layout.bottomMargin: 5
|
||||
|
||||
//readOnly: toAddView.count >= conferenceManager.maxParticipants
|
||||
textFieldStyle: TextFieldStyle.normal
|
||||
textFieldStyle: TextFieldStyle.unbordered
|
||||
|
||||
ColumnLayout{
|
||||
anchors.fill:parent
|
||||
|
|
@ -134,8 +135,7 @@ ColumnLayout {
|
|||
conferenceModel: mainLayout.conferenceModel
|
||||
onAddressAdded: smartSearchBar.addAddressToIgnore(sipAddress)
|
||||
onAddressRemoved: smartSearchBar.removeAddressToIgnore(sipAddress)
|
||||
showMe: mainLayout.isAdmin
|
||||
|
||||
showMe: true
|
||||
}
|
||||
|
||||
onEntryClicked: {
|
||||
|
|
|
|||
|
|
@ -237,9 +237,20 @@ ScrollableListView {
|
|||
Layout.fillHeight: true
|
||||
Layout.fillWidth: true
|
||||
showContactAddress: sipAddressesView.showContactAddress
|
||||
function getStatus(){
|
||||
var count = 0;
|
||||
var txt = ''
|
||||
if( $modelData.adminStatus) {
|
||||
//: '(Admin)' : One word for Admin(istrator)
|
||||
//~ Context Little Header in one word for a column in participant
|
||||
statusText : showAdminStatus && $modelData.adminStatus ? qsTr('participantsAdminHeader') : ''
|
||||
txt += qsTr('participantsAdminHeader')
|
||||
++count
|
||||
}
|
||||
if( $modelData.isMe)
|
||||
txt += (count++ > 0 ? ' - ' : '') + 'Me'
|
||||
return txt
|
||||
}
|
||||
statusText : showAdminStatus ? getStatus() : ''
|
||||
|
||||
entry: $modelData
|
||||
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ Rectangle{
|
|||
// HEADER
|
||||
Borders{
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: Math.max(VideoConferenceMenuStyle.header.height, title.implicitHeight+20)
|
||||
Layout.preferredHeight: Math.max(VideoConferenceMenuStyle.header.height, titleMenu.implicitHeight+20)
|
||||
bottomColor: VideoConferenceMenuStyle.list.border.color
|
||||
bottomWidth: VideoConferenceMenuStyle.list.border.width
|
||||
RowLayout{
|
||||
|
|
@ -55,8 +55,8 @@ Rectangle{
|
|||
visible: contentsStack.nViews > 1
|
||||
}
|
||||
Text{
|
||||
id: title
|
||||
text: 'Paramètres'
|
||||
id: titleMenu
|
||||
text: contentsStack.currentItem.title //'Paramètres'
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: implicitHeight
|
||||
horizontalAlignment: Qt.AlignCenter
|
||||
|
|
@ -81,27 +81,37 @@ Rectangle{
|
|||
initialItem: settingsMenuComponent
|
||||
Layout.fillHeight: true
|
||||
Layout.fillWidth: true
|
||||
onPopEnterChanged: if(nViews <= 1 ) title.text = 'Paramètres'
|
||||
//onPopEnterChanged: if(nViews <= 1 ) title.text = 'Paramètres'
|
||||
}
|
||||
Component{
|
||||
id: settingsMenuComponent
|
||||
ColumnLayout{
|
||||
property string objectName: 'settingsMenu'
|
||||
property string title: 'Paramètres'
|
||||
Layout.fillHeight: true
|
||||
Layout.fillWidth: true
|
||||
|
||||
// List of title texts in order to allow bindings between all components
|
||||
property var menuTitles: [
|
||||
'Régler les périphériques'
|
||||
, 'Modifier la mise en page'
|
||||
, mainItem.isMeAdmin ? 'Inviter des participants' : 'Participants'
|
||||
|
||||
]
|
||||
|
||||
Repeater{
|
||||
model: [
|
||||
{text: 'Régler les périphériques'
|
||||
, icon: VideoConferenceMenuStyle.settingsIcons.mediaIcon
|
||||
{titleIndex: 0
|
||||
,icon: VideoConferenceMenuStyle.settingsIcons.mediaIcon
|
||||
, nextPage:mediaMenu},
|
||||
|
||||
{text: 'Modifier la mise en page'
|
||||
{titleIndex: 1
|
||||
, icon: (mainItem.callModel.videoEnabled ?
|
||||
(mainItem.callModel.conferenceVideoLayout == LinphoneEnums.ConferenceLayoutGrid ? VideoConferenceMenuStyle.settingsIcons.gridIcon : VideoConferenceMenuStyle.settingsIcons.activeSpeakerIcon)
|
||||
: VideoConferenceMenuStyle.settingsIcons.audioOnlyIcon)
|
||||
, nextPage:layoutMenu},
|
||||
|
||||
{text: mainItem.isMeAdmin ? 'Inviter des participants' : 'Participants'
|
||||
{ titleIndex: 2
|
||||
, icon: VideoConferenceMenuStyle.settingsIcons.participantsIcon
|
||||
, nextPage:participantsMenu}
|
||||
]
|
||||
|
|
@ -130,7 +140,7 @@ Rectangle{
|
|||
wrapMode: Text.WordWrap
|
||||
elide: Text.ElideRight
|
||||
|
||||
text: modelData.text
|
||||
text: menuTitles[modelData.titleIndex]
|
||||
font.pointSize: VideoConferenceMenuStyle.list.pointSize
|
||||
color: VideoConferenceMenuStyle.list.color
|
||||
}
|
||||
|
|
@ -146,8 +156,7 @@ Rectangle{
|
|||
MouseArea{
|
||||
anchors.fill: parent
|
||||
onClicked: {
|
||||
title.text = modelData.text
|
||||
contentsStack.push(modelData.nextPage)
|
||||
contentsStack.push(modelData.nextPage, {title:Qt.binding(function() { return settingsDescription.text})})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -162,6 +171,7 @@ Rectangle{
|
|||
Component{
|
||||
id: mediaMenu
|
||||
ColumnLayout{
|
||||
property string title
|
||||
Layout.fillHeight: true
|
||||
Layout.fillWidth: true
|
||||
MultimediaParametersDialog{
|
||||
|
|
@ -185,6 +195,7 @@ Rectangle{
|
|||
Component{
|
||||
id: layoutMenu
|
||||
ColumnLayout{
|
||||
property string title
|
||||
Layout.fillHeight: true
|
||||
Layout.fillWidth: true
|
||||
Repeater{
|
||||
|
|
@ -238,13 +249,21 @@ Rectangle{
|
|||
Component{
|
||||
id: participantsMenu
|
||||
ColumnLayout{
|
||||
property string title
|
||||
Layout.fillHeight: true
|
||||
Layout.fillWidth: true
|
||||
ParticipantsListView{
|
||||
Layout.fillHeight: true
|
||||
Layout.fillWidth: true
|
||||
Layout.leftMargin: 10
|
||||
Layout.rightMargin: 10
|
||||
//Layout.minimumHeight: fitHeight
|
||||
conferenceModel: mainItem.conferenceModel
|
||||
isAdmin: mainItem.isMeAdmin
|
||||
Text{
|
||||
text: 'Vous êtes actuellement seul dans cette conférence'
|
||||
visible: parent.count
|
||||
}
|
||||
}
|
||||
Item{// Spacer
|
||||
Layout.fillWidth: true
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
Subproject commit 074802f6c0bcc7f095e94faad804ce083de3bcc3
|
||||
Subproject commit 438e41d95550c5fb9dc1bb7385cafcd323fd0698
|
||||
Loading…
Add table
Reference in a new issue