Confirm to user when a conference has been deleted.

Synchronize conferences list when new conference info is received (preparation work for remote concellation/edition).
Change color on exclusive buttons in conferences list.
Disable camera button on audio-only mode.
This commit is contained in:
Julien Wadel 2022-08-26 13:50:00 +02:00
parent 157ee1c4ae
commit 8798023053
27 changed files with 178 additions and 36 deletions

View file

@ -817,7 +817,12 @@ Server url ikke konfigureret.</translation>
</message>
<message>
<source>conferencesCopiedURL</source>
<extracomment>&apos;Conference URL has been copied&apos; : Message text in a banner to warn the user that the µURL have been copied to the clipboard.</extracomment>
<extracomment>&apos;Conference URL has been copied&apos; : Message text in a banner to warn the user that the URL have been copied to the clipboard.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>conferencesDeleted</source>
<extracomment>&apos;Conference has been deleted&apos; : Message text in a banner to warn the user that the conference has been deleted.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>

View file

@ -817,7 +817,12 @@ Server URL ist nicht konfiguriert.</translation>
</message>
<message>
<source>conferencesCopiedURL</source>
<extracomment>&apos;Conference URL has been copied&apos; : Message text in a banner to warn the user that the µURL have been copied to the clipboard.</extracomment>
<extracomment>&apos;Conference URL has been copied&apos; : Message text in a banner to warn the user that the URL have been copied to the clipboard.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>conferencesDeleted</source>
<extracomment>&apos;Conference has been deleted&apos; : Message text in a banner to warn the user that the conference has been deleted.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>

View file

@ -817,9 +817,14 @@ Server URL not configured.</translation>
</message>
<message>
<source>conferencesCopiedURL</source>
<extracomment>&apos;Conference URL has been copied&apos; : Message text in a banner to warn the user that the µURL have been copied to the clipboard.</extracomment>
<extracomment>&apos;Conference URL has been copied&apos; : Message text in a banner to warn the user that the URL have been copied to the clipboard.</extracomment>
<translation>Conference URL has been copied</translation>
</message>
<message>
<source>conferencesDeleted</source>
<extracomment>&apos;Conference has been deleted&apos; : Message text in a banner to warn the user that the conference has been deleted.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ConfirmDialog</name>

View file

@ -817,7 +817,12 @@ URL del servidor no configurada.</translation>
</message>
<message>
<source>conferencesCopiedURL</source>
<extracomment>&apos;Conference URL has been copied&apos; : Message text in a banner to warn the user that the µURL have been copied to the clipboard.</extracomment>
<extracomment>&apos;Conference URL has been copied&apos; : Message text in a banner to warn the user that the URL have been copied to the clipboard.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>conferencesDeleted</source>
<extracomment>&apos;Conference has been deleted&apos; : Message text in a banner to warn the user that the conference has been deleted.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>

View file

@ -817,7 +817,12 @@ URL du serveur non configurée.</translation>
</message>
<message>
<source>conferencesCopiedURL</source>
<extracomment>&apos;Conference URL has been copied&apos; : Message text in a banner to warn the user that the µURL have been copied to the clipboard.</extracomment>
<extracomment>&apos;Conference URL has been copied&apos; : Message text in a banner to warn the user that the URL have been copied to the clipboard.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>conferencesDeleted</source>
<extracomment>&apos;Conference has been deleted&apos; : Message text in a banner to warn the user that the conference has been deleted.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>

View file

@ -811,7 +811,12 @@ A kiszolgáló URL-je nincs konfigurálva.</translation>
</message>
<message>
<source>conferencesCopiedURL</source>
<extracomment>&apos;Conference URL has been copied&apos; : Message text in a banner to warn the user that the µURL have been copied to the clipboard.</extracomment>
<extracomment>&apos;Conference URL has been copied&apos; : Message text in a banner to warn the user that the URL have been copied to the clipboard.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>conferencesDeleted</source>
<extracomment>&apos;Conference has been deleted&apos; : Message text in a banner to warn the user that the conference has been deleted.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>

View file

@ -817,9 +817,14 @@ URL del server non configurato.</translation>
</message>
<message>
<source>conferencesCopiedURL</source>
<extracomment>&apos;Conference URL has been copied&apos; : Message text in a banner to warn the user that the µURL have been copied to the clipboard.</extracomment>
<extracomment>&apos;Conference URL has been copied&apos; : Message text in a banner to warn the user that the URL have been copied to the clipboard.</extracomment>
<translation>L&apos;URL della conferenze è stato copiato</translation>
</message>
<message>
<source>conferencesDeleted</source>
<extracomment>&apos;Conference has been deleted&apos; : Message text in a banner to warn the user that the conference has been deleted.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ConfirmDialog</name>

View file

@ -811,7 +811,12 @@
</message>
<message>
<source>conferencesCopiedURL</source>
<extracomment>&apos;Conference URL has been copied&apos; : Message text in a banner to warn the user that the µURL have been copied to the clipboard.</extracomment>
<extracomment>&apos;Conference URL has been copied&apos; : Message text in a banner to warn the user that the URL have been copied to the clipboard.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>conferencesDeleted</source>
<extracomment>&apos;Conference has been deleted&apos; : Message text in a banner to warn the user that the conference has been deleted.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>

View file

@ -823,7 +823,12 @@ Nesukonfigūruotas serverio url.</translation>
</message>
<message>
<source>conferencesCopiedURL</source>
<extracomment>&apos;Conference URL has been copied&apos; : Message text in a banner to warn the user that the µURL have been copied to the clipboard.</extracomment>
<extracomment>&apos;Conference URL has been copied&apos; : Message text in a banner to warn the user that the URL have been copied to the clipboard.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>conferencesDeleted</source>
<extracomment>&apos;Conference has been deleted&apos; : Message text in a banner to warn the user that the conference has been deleted.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>

View file

@ -817,7 +817,12 @@ URL do servidor não configurado.</translation>
</message>
<message>
<source>conferencesCopiedURL</source>
<extracomment>&apos;Conference URL has been copied&apos; : Message text in a banner to warn the user that the µURL have been copied to the clipboard.</extracomment>
<extracomment>&apos;Conference URL has been copied&apos; : Message text in a banner to warn the user that the URL have been copied to the clipboard.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>conferencesDeleted</source>
<extracomment>&apos;Conference has been deleted&apos; : Message text in a banner to warn the user that the conference has been deleted.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>

View file

@ -823,9 +823,14 @@
</message>
<message>
<source>conferencesCopiedURL</source>
<extracomment>&apos;Conference URL has been copied&apos; : Message text in a banner to warn the user that the µURL have been copied to the clipboard.</extracomment>
<extracomment>&apos;Conference URL has been copied&apos; : Message text in a banner to warn the user that the URL have been copied to the clipboard.</extracomment>
<translation>URL конференции скопирован</translation>
</message>
<message>
<source>conferencesDeleted</source>
<extracomment>&apos;Conference has been deleted&apos; : Message text in a banner to warn the user that the conference has been deleted.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ConfirmDialog</name>

View file

@ -817,7 +817,12 @@ Serverwebbadressen är inte konfigurerad.</translation>
</message>
<message>
<source>conferencesCopiedURL</source>
<extracomment>&apos;Conference URL has been copied&apos; : Message text in a banner to warn the user that the µURL have been copied to the clipboard.</extracomment>
<extracomment>&apos;Conference URL has been copied&apos; : Message text in a banner to warn the user that the URL have been copied to the clipboard.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>conferencesDeleted</source>
<extracomment>&apos;Conference has been deleted&apos; : Message text in a banner to warn the user that the conference has been deleted.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>

View file

@ -811,7 +811,12 @@ Sunucu url&apos;si yapılandırılmadı.</translation>
</message>
<message>
<source>conferencesCopiedURL</source>
<extracomment>&apos;Conference URL has been copied&apos; : Message text in a banner to warn the user that the µURL have been copied to the clipboard.</extracomment>
<extracomment>&apos;Conference URL has been copied&apos; : Message text in a banner to warn the user that the URL have been copied to the clipboard.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>conferencesDeleted</source>
<extracomment>&apos;Conference has been deleted&apos; : Message text in a banner to warn the user that the conference has been deleted.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>

View file

@ -823,7 +823,12 @@
</message>
<message>
<source>conferencesCopiedURL</source>
<extracomment>&apos;Conference URL has been copied&apos; : Message text in a banner to warn the user that the µURL have been copied to the clipboard.</extracomment>
<extracomment>&apos;Conference URL has been copied&apos; : Message text in a banner to warn the user that the URL have been copied to the clipboard.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>conferencesDeleted</source>
<extracomment>&apos;Conference has been deleted&apos; : Message text in a banner to warn the user that the conference has been deleted.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>

View file

@ -811,7 +811,12 @@
</message>
<message>
<source>conferencesCopiedURL</source>
<extracomment>&apos;Conference URL has been copied&apos; : Message text in a banner to warn the user that the µURL have been copied to the clipboard.</extracomment>
<extracomment>&apos;Conference URL has been copied&apos; : Message text in a banner to warn the user that the URL have been copied to the clipboard.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>conferencesDeleted</source>
<extracomment>&apos;Conference has been deleted&apos; : Message text in a banner to warn the user that the conference has been deleted.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>

View file

@ -38,7 +38,9 @@
// =============================================================================
ConferenceInfoListModel::ConferenceInfoListModel (QObject *parent) : ProxyListModel(parent) {
auto conferenceInfos = CoreManager::getInstance()->getCore()->getConferenceInformationList();
auto coreManager = CoreManager::getInstance();
connect(coreManager->getHandlers().get(), &CoreHandlers::conferenceInfoReceived, this, &ConferenceInfoListModel::onConferenceInfoReceived);
auto conferenceInfos = coreManager->getCore()->getConferenceInformationList();
QList<QSharedPointer<ConferenceInfoModel> > items;
for(auto conferenceInfo : conferenceInfos){
auto item = build(conferenceInfo);
@ -87,4 +89,30 @@ QVariant ConferenceInfoListModel::data (const QModelIndex &index, int role ) con
else if (role == Qt::DisplayRole +1 )
return QVariant::fromValue(mList[row].objectCast<ConferenceInfoModel>()->getDateTimeUtc().date());
return QVariant();
}
}
QSharedPointer<ConferenceInfoModel> ConferenceInfoListModel::get(std::shared_ptr<linphone::ConferenceInfo> conferenceInfo) const{
auto uri = conferenceInfo->getUri();
for(auto item : mList){
auto model = item.objectCast<ConferenceInfoModel>();
auto dbConferenceInfo = model->getConferenceInfo();
if(dbConferenceInfo == conferenceInfo
|| dbConferenceInfo->getUri()->weakEqual(uri))
return model;
}
return nullptr;
}
void ConferenceInfoListModel::onConferenceInfoReceived(const std::shared_ptr<const linphone::ConferenceInfo> & conferenceInfo){
auto realConferenceInfo = ConferenceInfoModel::findConferenceInfo(conferenceInfo);
if( realConferenceInfo){
auto model = get(realConferenceInfo);
if(model)
model->setConferenceInfo(realConferenceInfo);
else
add(realConferenceInfo);
}else
qWarning() << "No ConferenceInfo have beend found for " << conferenceInfo->getUri()->asString().c_str();
}

View file

@ -43,6 +43,9 @@ public:
QHash<int, QByteArray> roleNames () const override;
virtual QVariant data (const QModelIndex &index, int role = Qt::DisplayRole) const override;
QSharedPointer<ConferenceInfoModel> get(std::shared_ptr<linphone::ConferenceInfo> conferenceInfo) const;
void onConferenceInfoReceived(const std::shared_ptr<const linphone::ConferenceInfo> & conferenceInfo);
signals:
void filterTypeChanged(int filterType);

View file

@ -93,6 +93,16 @@ ConferenceInfoModel::ConferenceInfoModel (QObject * parent) : QObject(parent){
cleanedClonedAddress->clean();
mConferenceInfo->setOrganizer(cleanedClonedAddress);
}
connect(this, &ConferenceInfoModel::conferenceInfoChanged, this, &ConferenceInfoModel::timeZoneModelChanged);
connect(this, &ConferenceInfoModel::conferenceInfoChanged, this, &ConferenceInfoModel::dateTimeChanged);
connect(this, &ConferenceInfoModel::conferenceInfoChanged, this, &ConferenceInfoModel::durationChanged);
connect(this, &ConferenceInfoModel::conferenceInfoChanged, this, &ConferenceInfoModel::organizerChanged);
connect(this, &ConferenceInfoModel::conferenceInfoChanged, this, &ConferenceInfoModel::subjectChanged);
connect(this, &ConferenceInfoModel::conferenceInfoChanged, this, &ConferenceInfoModel::descriptionChanged);
connect(this, &ConferenceInfoModel::conferenceInfoChanged, this, &ConferenceInfoModel::participantsChanged);
connect(this, &ConferenceInfoModel::conferenceInfoChanged, this, &ConferenceInfoModel::uriChanged);// Useless but just in case.
connect(this, &ConferenceInfoModel::conferenceInfoChanged, this, &ConferenceInfoModel::isScheduledChanged);
connect(this, &ConferenceInfoModel::conferenceInfoChanged, this, &ConferenceInfoModel::inviteModeChanged);
}
// Callable from C++
@ -262,6 +272,12 @@ void ConferenceInfoModel::setInviteMode(const int& mode){
}
}
void ConferenceInfoModel::setConferenceInfo(std::shared_ptr<linphone::ConferenceInfo> conferenceInfo){
mConferenceInfo = conferenceInfo;
mIsScheduled = (mConferenceInfo->getDateTime() != 0 || mConferenceInfo->getDuration() != 0);
emit conferenceInfoChanged();
}
//-------------------------------------------------------------------------------------------------
void ConferenceInfoModel::createConference(const int& securityLevel) {
@ -284,7 +300,7 @@ void ConferenceInfoModel::createConference(const int& securityLevel) {
void ConferenceInfoModel::deleteConferenceInfo(){
if(mConferenceInfo) {
CoreManager::getInstance()->getCore()->deleteConferenceInformation(mConferenceInfo);
emit removed();
emit removed(true);
}
}

View file

@ -83,6 +83,7 @@ public:
Q_INVOKABLE void setParticipants(ParticipantListModel * participants);
Q_INVOKABLE void setTimeZoneModel(TimeZoneModel * model);
void setConferenceInfo(std::shared_ptr<linphone::ConferenceInfo> conferenceInfo);
// Tools
Q_INVOKABLE void createConference(const int& securityLevel);
@ -108,8 +109,9 @@ signals:
void conferenceCreated();
void conferenceCreationFailed();
void conferenceInfoChanged();
void invitationsSent();
void removed();
void removed(bool byUser);
private:
std::shared_ptr<linphone::ConferenceInfo> mConferenceInfo;
@ -118,6 +120,7 @@ private:
bool mIsScheduled = true;
int mInviteMode = 0;
bool mRemoveRequested = false;// true if user has request its deletion from DB
};
Q_DECLARE_METATYPE(QSharedPointer<ConferenceInfoModel>)

View file

@ -37,7 +37,6 @@ using namespace std;
ConferenceInfoProxyModel::ConferenceInfoProxyModel (QObject *parent) : SortFilterAbstractProxyModel<ConferenceInfoListModel>(new ConferenceInfoListModel(parent), parent) {
connect(CoreManager::getInstance()->getAccountSettingsModel(), &AccountSettingsModel::primarySipAddressChanged, this, &ConferenceInfoProxyModel::update);
//connect(this, &ConferenceInfoProxyModel::filterTypeChanged, qobject_cast<ConferenceInfoListModel*>(sourceModel()), &ConferenceInfoListModel);
connect(CoreManager::getInstance()->getHandlers().get(), &CoreHandlers::conferenceInfoReceived, this, &ConferenceInfoProxyModel::onConferenceInfoReceived);
setFilterType((int)Scheduled);
}
@ -75,11 +74,3 @@ bool ConferenceInfoProxyModel::lessThan (const QModelIndex &left, const QModelIn
return a->getDateTimeUtc() < b->getDateTimeUtc();
}
void ConferenceInfoProxyModel::onConferenceInfoReceived(const std::shared_ptr<const linphone::ConferenceInfo> & conferenceInfo){
auto realConferenceInfo = ConferenceInfoModel::findConferenceInfo(conferenceInfo);
if( realConferenceInfo ){
auto model = qobject_cast<ConferenceInfoListModel*>(sourceModel());
model->add(realConferenceInfo);
}else
qWarning() << "No conferenceInfo have beend found for " << conferenceInfo->getUri()->asString().c_str();
}

View file

@ -49,8 +49,6 @@ public:
ConferenceInfoProxyModel (QObject *parent = Q_NULLPTR);
Q_INVOKABLE void update();
void onConferenceInfoReceived(const std::shared_ptr<const linphone::ConferenceInfo> & conferenceInfo);
protected:
bool filterAcceptsRow (int sourceRow, const QModelIndex &sourceParent) const override;

View file

@ -12,6 +12,7 @@ Row {
property int selectedButton: 0
property var texts
property int capitalization
property QtObject style: ExclusiveButtonsStyle
// ---------------------------------------------------------------------------
@ -46,12 +47,12 @@ Row {
capitalization: item.capitalization
anchors.verticalCenter: parent.verticalCenter
backgroundColor: selectedButton === index
? ExclusiveButtonsStyle.button.color.selected
? item.style.button.color.selected
: (down
? ExclusiveButtonsStyle.button.color.pressed
? item.style.button.color.pressed
: (hovered
? ExclusiveButtonsStyle.button.color.hovered
: ExclusiveButtonsStyle.button.color.normal
? item.style.button.color.hovered
: item.style.button.color.normal
)
)
text: modelData

View file

@ -34,6 +34,7 @@ Loader{
signal expandToggle()
signal conferenceUriCopied()
signal conferenceRemoved()
width: parent.width
height: parent.height
@ -352,5 +353,9 @@ Loader{
}
}
}
Connections{
target: conferenceInfoModel
onRemoved: if(byUser) mainItem.conferenceRemoved()
}
}

View file

@ -27,6 +27,7 @@ Rectangle {
property bool cameraIsReady : false
property bool previewIsReady : false
property bool isFullScreen: false // Use this variable to test if we are in fullscreen. Do not test _fullscreen : we need to clean memory before having the window (see .js file)
property bool isAudioOnly: callModel && callModel.isConference && conferenceLayout.sourceComponent == gridComponent && !callModel.videoEnabled
property var _fullscreen: null
on_FullscreenChanged: if( !_fullscreen) isFullScreen = false
@ -452,7 +453,7 @@ Rectangle {
backgroundRadius: 90
colorSet: callModel && callModel.cameraEnabled ? IncallStyle.buttons.cameraOn : IncallStyle.buttons.cameraOff
updating: callModel.videoEnabled && callModel.updating
visible: callModel && (!callModel.isConference || callModel.localVideoEnabled)
enabled: !conference.isAudioOnly
onClicked: if(callModel){
if( callModel.isConference){// Only deactivate camera in conference.
callModel.cameraEnabled = !callModel.cameraEnabled

View file

@ -67,6 +67,7 @@ Item{
]
capitalization: Font.AllUppercase
selectedButton: mainItem.filterType
style: ConferencesStyle.filter.buttons
onClicked: {
if(button <= 1)
mainItem.filterType = (button === 0 ? ConferenceInfoProxyModel.Ended : ConferenceInfoProxyModel.Scheduled);
@ -180,8 +181,10 @@ Item{
: 0
onExpandToggle: isExpanded = !isExpanded
//isExpanded: calendarGrid.expanded
//: 'Conference URL has been copied' : Message text in a banner to warn the user that the µURL have been copied to the clipboard.
//: 'Conference URL has been copied' : Message text in a banner to warn the user that the URL have been copied to the clipboard.
onConferenceUriCopied: messageBanner.noticeBannerText = qsTr('conferencesCopiedURL')
//: 'Conference has been deleted' : Message text in a banner to warn the user that the conference has been deleted.
onConferenceRemoved: messageBanner.noticeBannerText = qsTr('conferencesDeleted')
}
}
}

View file

@ -335,10 +335,12 @@ QtObject {
property color backgroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_h', icon, 's_n_b_bg').color
property color backgroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_p', icon, 's_p_b_bg').color
property color backgroundUpdatingColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_u', icon, 's_p_b_bg').color
property color backgroundDisabledColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_d', icon, 's_d_b_bg').color
property color foregroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_n', icon, 's_h_b_fg').color
property color foregroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_h', icon, 's_n_b_fg').color
property color foregroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_p', icon, 's_p_b_fg').color
property color foregroundUpdatingColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_u', icon, 's_p_b_fg').color
property color foregroundDisabledColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_d', icon, 's_d_b_fg').color
}
property QtObject cameraOff: QtObject {
property int iconSize: 40
@ -348,10 +350,12 @@ QtObject {
property color backgroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_h', icon, 's_n_b_bg').color
property color backgroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_p', icon, 's_p_b_bg').color
property color backgroundUpdatingColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_u', icon, 's_p_b_bg').color
property color backgroundDisabledColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_d', icon, 's_d_b_bg').color
property color foregroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_n', icon, 's_h_b_fg').color
property color foregroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_h', icon, 's_n_b_fg').color
property color foregroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_p', icon, 's_p_b_fg').color
property color foregroundUpdatingColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_u', icon, 's_p_b_fg').color
property color foregroundDisabledColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_d', icon, 's_d_b_fg').color
}
property QtObject pause: QtObject {
property int iconSize: 40

View file

@ -14,6 +14,20 @@ QtObject {
property QtObject filter: QtObject {
property string icon: 'filter_custom'
property color color: ColorsList.add(sectionName+'_filter_icon', 'c').color
property QtObject buttons: QtObject{
property int buttonsSpacing: 8
property QtObject button: QtObject {
property QtObject color: QtObject {
property color hovered: ColorsList.add(sectionName+'_button_h', 'n').color
property color normal: ColorsList.add(sectionName+'_button_n', 'x').color
property color pressed: ColorsList.add(sectionName+'_button_p', 'g').color
property color selected: ColorsList.add(sectionName+'_button_c', 'i').color
}
}
}
}
property QtObject bar: QtObject {
property color backgroundColor: ColorsList.add(sectionName+'_bar_bg', 'e').color