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:
Julien Wadel 2022-05-09 17:10:54 +02:00
parent a3554153d5
commit 2f5abc5c3b
30 changed files with 546 additions and 198 deletions

View 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

View 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

View file

@ -1757,6 +1757,20 @@ Click here: &lt;a href=&quot;%1&quot;&gt;%1&lt;/a&gt;
<translation>Conversation&apos;s devices</translation>
</message>
</context>
<context>
<name>ParticipantsListView</name>
<message>
<source>participantList</source>
<extracomment>&apos;Participant list&apos;</extracomment>
<translation type="unfinished">Participant list</translation>
</message>
<message>
<source>adminStatus</source>
<extracomment>&apos;Admin&apos; : Admin(istrator)</extracomment>
<translation type="unfinished">Admin</translation>
<extra-one>word for admin status</extra-one>
</message>
</context>
<context>
<name>ParticipantsView</name>
<message>

View file

@ -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>

View 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();

View file

@ -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.

View file

@ -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()));

View file

@ -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){

View file

@ -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();

View file

@ -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);

View file

@ -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
//

View file

@ -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();
}
}
}

View file

@ -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();

View file

@ -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)

View file

@ -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);
}

View file

@ -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>();
}

View 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)
}

View file

@ -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

View file

@ -1,6 +1,6 @@
pragma Singleton
import QtQml 2.2
// TextButtonAStyle (Grey)
import ColorsList 1.0
// =============================================================================

View file

@ -1,4 +1,4 @@
// TextButtonBStyle
// TextButtonBStyle (Primary)
pragma Singleton
import QtQml 2.2
import ColorsList 1.0

View file

@ -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
}

View file

@ -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
}
}
}

View file

@ -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

View file

@ -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

View file

@ -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
}
}
}
}
}

View file

@ -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
*/
}

View file

@ -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: {

View file

@ -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

View file

@ -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