mirror of
https://gitlab.linphone.org/BC/public/linphone-desktop.git
synced 2026-04-27 19:06:22 +00:00
Add record and snapshot to video conference.
Deactivate snapshots from grid layout (not available). Toggle button for recording.
This commit is contained in:
parent
f7757dd8a3
commit
cc8057a0d2
9 changed files with 65 additions and 62 deletions
|
|
@ -769,6 +769,10 @@ bool CallModel::getRecording () const {
|
||||||
return mRecording;
|
return mRecording;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CallModel::getSnapshotEnabled() const{
|
||||||
|
return getVideoEnabled() && getConferenceVideoLayout() != LinphoneEnums::ConferenceLayout::ConferenceLayoutGrid;
|
||||||
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
|
|
||||||
void CallModel::sendDtmf (const QString &dtmf) {
|
void CallModel::sendDtmf (const QString &dtmf) {
|
||||||
|
|
@ -891,6 +895,7 @@ void CallModel::setConferenceVideoLayout(LinphoneEnums::ConferenceLayout layout)
|
||||||
if( mConferenceVideoLayout != layout){
|
if( mConferenceVideoLayout != layout){
|
||||||
mConferenceVideoLayout = layout;
|
mConferenceVideoLayout = layout;
|
||||||
emit conferenceVideoLayoutChanged();
|
emit conferenceVideoLayoutChanged();
|
||||||
|
emit snapshotEnabledChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -71,6 +71,8 @@ class CallModel : public QObject {
|
||||||
|
|
||||||
Q_PROPERTY(bool recording READ getRecording NOTIFY recordingChanged)
|
Q_PROPERTY(bool recording READ getRecording NOTIFY recordingChanged)
|
||||||
|
|
||||||
|
Q_PROPERTY(bool snapshotEnabled READ getSnapshotEnabled NOTIFY snapshotEnabledChanged) // Grid doesn't enable snapshot
|
||||||
|
|
||||||
Q_PROPERTY(QVariantList audioStats READ getAudioStats NOTIFY statsUpdated)
|
Q_PROPERTY(QVariantList audioStats READ getAudioStats NOTIFY statsUpdated)
|
||||||
Q_PROPERTY(QVariantList videoStats READ getVideoStats NOTIFY statsUpdated)
|
Q_PROPERTY(QVariantList videoStats READ getVideoStats NOTIFY statsUpdated)
|
||||||
|
|
||||||
|
|
@ -191,6 +193,7 @@ signals:
|
||||||
void microMutedChanged (bool status);
|
void microMutedChanged (bool status);
|
||||||
void cameraEnabledChanged();
|
void cameraEnabledChanged();
|
||||||
void recordingChanged (bool status);
|
void recordingChanged (bool status);
|
||||||
|
void snapshotEnabledChanged();
|
||||||
void statsUpdated ();
|
void statsUpdated ();
|
||||||
void statusChanged (CallStatus status);
|
void statusChanged (CallStatus status);
|
||||||
void videoRequested ();
|
void videoRequested ();
|
||||||
|
|
@ -205,6 +208,7 @@ signals:
|
||||||
|
|
||||||
void conferenceVideoLayoutChanged();
|
void conferenceVideoLayoutChanged();
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void handleCallEncryptionChanged (const std::shared_ptr<linphone::Call> &call);
|
void handleCallEncryptionChanged (const std::shared_ptr<linphone::Call> &call);
|
||||||
void handleCallStateChanged (const std::shared_ptr<linphone::Call> &call, linphone::Call::State state);
|
void handleCallStateChanged (const std::shared_ptr<linphone::Call> &call, linphone::Call::State state);
|
||||||
|
|
@ -249,6 +253,7 @@ public:
|
||||||
bool getUpdating () const;
|
bool getUpdating () const;
|
||||||
|
|
||||||
bool getRecording () const;
|
bool getRecording () const;
|
||||||
|
bool getSnapshotEnabled() const;
|
||||||
|
|
||||||
CallEncryption getEncryption () const;
|
CallEncryption getEncryption () const;
|
||||||
bool isSecured () const;
|
bool isSecured () const;
|
||||||
|
|
|
||||||
|
|
@ -193,23 +193,17 @@ Rectangle {
|
||||||
|
|
||||||
isCustom: true
|
isCustom: true
|
||||||
backgroundRadius: 90
|
backgroundRadius: 90
|
||||||
colorSet: incall.call.recording ? CallStyle.buttons.recordOn : CallStyle.buttons.recordOff
|
colorSet: CallStyle.buttons.record
|
||||||
visible: SettingsModel.callRecorderEnabled
|
visible: SettingsModel.callRecorderEnabled
|
||||||
|
toggled: incall.call.recording
|
||||||
|
|
||||||
onClicked: {
|
onClicked: {
|
||||||
var call = incall.call
|
var call = incall.call
|
||||||
return !incall.call.recording
|
return !toggled
|
||||||
? call.startRecording()
|
? call.startRecording()
|
||||||
: call.stopRecording()
|
: call.stopRecording()
|
||||||
}
|
}
|
||||||
|
tooltipText: !toggled
|
||||||
onVisibleChanged: {
|
|
||||||
if (!visible) {
|
|
||||||
call.stopRecording()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
tooltipText: !incall.call.recording
|
|
||||||
? qsTr('startRecordingLabel')
|
? qsTr('startRecordingLabel')
|
||||||
: qsTr('stopRecordingLabel')
|
: qsTr('stopRecordingLabel')
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -261,17 +261,17 @@ Window {
|
||||||
|
|
||||||
ActionButton {
|
ActionButton {
|
||||||
id: recordingSwitch
|
id: recordingSwitch
|
||||||
property bool recording : call && call.recording
|
toggled: call && call.recording
|
||||||
isCustom: true
|
isCustom: true
|
||||||
backgroundRadius: 90
|
backgroundRadius: 90
|
||||||
colorSet: recording ? CallFullscreenStyle.buttons.recordOn : CallFullscreenStyle.buttons.recordOff
|
colorSet: CallFullscreenStyle.buttons.record
|
||||||
visible: SettingsModel.callRecorderEnabled
|
visible: SettingsModel.callRecorderEnabled
|
||||||
|
|
||||||
onClicked: !recording
|
onClicked: !toggled
|
||||||
? call.startRecording()
|
? call.startRecording()
|
||||||
: call.stopRecording()
|
: call.stopRecording()
|
||||||
|
|
||||||
tooltipText: !recordingSwitch.recording
|
tooltipText: !toggled
|
||||||
? qsTr('startRecordingLabel')
|
? qsTr('startRecordingLabel')
|
||||||
: qsTr('stopRecordingLabel')
|
: qsTr('stopRecordingLabel')
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -142,17 +142,30 @@ Rectangle {
|
||||||
colorSet: VideoConferenceStyle.buttons.screenSharing
|
colorSet: VideoConferenceStyle.buttons.screenSharing
|
||||||
visible: false //TODO
|
visible: false //TODO
|
||||||
}
|
}
|
||||||
ActionButton{
|
ActionButton {
|
||||||
|
id: recordingSwitch
|
||||||
isCustom: true
|
isCustom: true
|
||||||
backgroundRadius: width/2
|
backgroundRadius: width/2
|
||||||
colorSet: VideoConferenceStyle.buttons.recordOff
|
colorSet: VideoConferenceStyle.buttons.record
|
||||||
visible: false //TODO
|
property CallModel callModel: conference.callModel
|
||||||
|
onCallModelChanged: if(!callModel) callModel.stopRecording()
|
||||||
|
visible: SettingsModel.callRecorderEnabled && callModel
|
||||||
|
toggled: callModel.recording
|
||||||
|
|
||||||
|
onClicked: {
|
||||||
|
return !toggled
|
||||||
|
? callModel.startRecording()
|
||||||
|
: callModel.stopRecording()
|
||||||
|
}
|
||||||
|
tooltipText: !toggled ? 'Start Recording' : 'Stop Recording'
|
||||||
}
|
}
|
||||||
ActionButton{
|
ActionButton{
|
||||||
isCustom: true
|
isCustom: true
|
||||||
backgroundRadius: width/2
|
backgroundRadius: width/2
|
||||||
colorSet: VideoConferenceStyle.buttons.screenshot
|
colorSet: VideoConferenceStyle.buttons.screenshot
|
||||||
visible: false //TODO
|
visible: conference.callModel.snapshotEnabled
|
||||||
|
onClicked: conference.callModel.takeSnapshot()
|
||||||
|
tooltipText:'take Snapshot'
|
||||||
}
|
}
|
||||||
ActionButton{
|
ActionButton{
|
||||||
isCustom: true
|
isCustom: true
|
||||||
|
|
|
||||||
|
|
@ -182,17 +182,30 @@ Window {
|
||||||
colorSet: VideoConferenceStyle.buttons.screenSharing
|
colorSet: VideoConferenceStyle.buttons.screenSharing
|
||||||
visible: false //TODO
|
visible: false //TODO
|
||||||
}
|
}
|
||||||
ActionButton{
|
ActionButton {
|
||||||
|
id: recordingSwitch
|
||||||
isCustom: true
|
isCustom: true
|
||||||
backgroundRadius: width/2
|
backgroundRadius: width/2
|
||||||
colorSet: VideoConferenceStyle.buttons.recordOff
|
colorSet: VideoConferenceStyle.buttons.record
|
||||||
visible: false //TODO
|
property CallModel callModel: conference.callModel
|
||||||
|
onCallModelChanged: if(!callModel) callModel.stopRecording()
|
||||||
|
visible: SettingsModel.callRecorderEnabled && callModel
|
||||||
|
toggled: callModel.recording
|
||||||
|
|
||||||
|
onClicked: {
|
||||||
|
return !toggled
|
||||||
|
? callModel.startRecording()
|
||||||
|
: callModel.stopRecording()
|
||||||
|
}
|
||||||
|
tooltipText: !toggled? 'Start Recording' : 'Stop Recording'
|
||||||
}
|
}
|
||||||
ActionButton{
|
ActionButton{
|
||||||
isCustom: true
|
isCustom: true
|
||||||
backgroundRadius: width/2
|
backgroundRadius: width/2
|
||||||
colorSet: VideoConferenceStyle.buttons.screenshot
|
colorSet: VideoConferenceStyle.buttons.screenshot
|
||||||
visible: false //TODO
|
visible: conference.callModel.snapshotEnabled
|
||||||
|
onClicked: conference.callModel.takeSnapshot()
|
||||||
|
tooltipText:'take Snapshot'
|
||||||
}
|
}
|
||||||
ActionButton{
|
ActionButton{
|
||||||
isCustom: true
|
isCustom: true
|
||||||
|
|
|
||||||
|
|
@ -167,27 +167,18 @@ QtObject {
|
||||||
property color foregroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_h', icon, 'sc_h_b_fg').color
|
property color foregroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_h', icon, 'sc_h_b_fg').color
|
||||||
property color foregroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_p', icon, 'sc_p_b_fg').color
|
property color foregroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_p', icon, 'sc_p_b_fg').color
|
||||||
}
|
}
|
||||||
property QtObject recordOn: QtObject {
|
property QtObject record: QtObject {
|
||||||
property int iconSize: 40
|
property int iconSize: 40
|
||||||
property string icon : 'record_custom'
|
property string icon : 'record_custom'
|
||||||
property string name : 'recordOn'
|
property string name : 'record'
|
||||||
property color backgroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_n', icon, 'sc_p_b_bg').color
|
|
||||||
property color backgroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_h', icon, 'sc_h_b_bg').color
|
|
||||||
property color backgroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_p', icon, 'sc_p_b_bg').color
|
|
||||||
property color foregroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_n', icon, 'sc_p_b_fg').color
|
|
||||||
property color foregroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_h', icon, 'sc_h_b_fg').color
|
|
||||||
property color foregroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_p', icon, 'sc_p_b_fg').color
|
|
||||||
}
|
|
||||||
property QtObject recordOff: QtObject {
|
|
||||||
property int iconSize: 40
|
|
||||||
property string icon : 'record_custom'
|
|
||||||
property string name : 'recordOff'
|
|
||||||
property color backgroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_n', icon, 'sc_n_b_bg').color
|
property color backgroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_n', icon, 'sc_n_b_bg').color
|
||||||
property color backgroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_h', icon, 'sc_h_b_bg').color
|
property color backgroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_h', icon, 'sc_h_b_bg').color
|
||||||
property color backgroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_p', icon, 'sc_p_b_bg').color
|
property color backgroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_p', icon, 'sc_p_b_bg').color
|
||||||
|
property color backgroundUpdatingColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_c', icon, 'sc_p_b_bg').color
|
||||||
property color foregroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_n', icon, 'sc_n_b_fg').color
|
property color foregroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_n', icon, 'sc_n_b_fg').color
|
||||||
property color foregroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_h', icon, 'sc_h_b_fg').color
|
property color foregroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_h', icon, 'sc_h_b_fg').color
|
||||||
property color foregroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_p', icon, 'sc_p_b_fg').color
|
property color foregroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_p', icon, 'sc_p_b_fg').color
|
||||||
|
property color foregroundUpdatingColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_c', icon, 'sc_p_b_fg').color
|
||||||
}
|
}
|
||||||
property QtObject fullscreen: QtObject {
|
property QtObject fullscreen: QtObject {
|
||||||
property int iconSize: 40
|
property int iconSize: 40
|
||||||
|
|
|
||||||
|
|
@ -167,27 +167,18 @@ QtObject {
|
||||||
property color foregroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_h', icon, 'me_h_b_fg').color
|
property color foregroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_h', icon, 'me_h_b_fg').color
|
||||||
property color foregroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_p', icon, 'me_p_b_fg').color
|
property color foregroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_p', icon, 'me_p_b_fg').color
|
||||||
}
|
}
|
||||||
property QtObject recordOn: QtObject {
|
property QtObject record: QtObject {
|
||||||
property int iconSize: 40
|
property int iconSize: 40
|
||||||
property string icon : 'record_custom'
|
property string icon : 'record_custom'
|
||||||
property string name : 'recordOn'
|
property string name : 'record'
|
||||||
property color backgroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_n', icon, 'me_p_b_bg').color
|
|
||||||
property color backgroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_h', icon, 'me_h_b_bg').color
|
|
||||||
property color backgroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_p', icon, 'me_p_b_bg').color
|
|
||||||
property color foregroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_n', icon, 'me_p_b_fg').color
|
|
||||||
property color foregroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_h', icon, 'me_h_b_fg').color
|
|
||||||
property color foregroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_p', icon, 'me_p_b_fg').color
|
|
||||||
}
|
|
||||||
property QtObject recordOff: QtObject {
|
|
||||||
property int iconSize: 40
|
|
||||||
property string icon : 'record_custom'
|
|
||||||
property string name : 'recordOff'
|
|
||||||
property color backgroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_n', icon, 'me_n_b_bg').color
|
property color backgroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_n', icon, 'me_n_b_bg').color
|
||||||
property color backgroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_h', icon, 'me_h_b_bg').color
|
property color backgroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_h', icon, 'me_h_b_bg').color
|
||||||
property color backgroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_p', icon, 'me_p_b_bg').color
|
property color backgroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_p', icon, 'me_p_b_bg').color
|
||||||
|
property color backgroundUpdatingColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_c', icon, 'me_p_b_bg').color
|
||||||
property color foregroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_n', icon, 'me_n_b_fg').color
|
property color foregroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_n', icon, 'me_n_b_fg').color
|
||||||
property color foregroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_h', icon, 'me_h_b_fg').color
|
property color foregroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_h', icon, 'me_h_b_fg').color
|
||||||
property color foregroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_p', icon, 'me_p_b_fg').color
|
property color foregroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_p', icon, 'me_p_b_fg').color
|
||||||
|
property color foregroundUpdatingColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_c', icon, 'me_p_b_fg').color
|
||||||
}
|
}
|
||||||
property QtObject fullscreen: QtObject {
|
property QtObject fullscreen: QtObject {
|
||||||
property int iconSize: 40
|
property int iconSize: 40
|
||||||
|
|
|
||||||
|
|
@ -182,27 +182,18 @@ QtObject {
|
||||||
property color foregroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_h', icon, 'sc_h_b_fg').color
|
property color foregroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_h', icon, 'sc_h_b_fg').color
|
||||||
property color foregroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_p', icon, 'sc_p_b_fg').color
|
property color foregroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_p', icon, 'sc_p_b_fg').color
|
||||||
}
|
}
|
||||||
property QtObject recordOn: QtObject {
|
property QtObject record: QtObject {
|
||||||
property int iconSize: 40
|
property int iconSize: 40
|
||||||
property string icon : 'record_custom'
|
property string icon : 'record_custom'
|
||||||
property string name : 'recordOn'
|
property string name : 'record'
|
||||||
property color backgroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_n', icon, 'sc_n_b_bg').color
|
|
||||||
property color backgroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_h', icon, 'sc_h_b_bg').color
|
|
||||||
property color backgroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_p', icon, 'sc_p_b_bg').color
|
|
||||||
property color foregroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_n', icon, 'sc_n_b_fg').color
|
|
||||||
property color foregroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_h', icon, 'sc_h_b_fg').color
|
|
||||||
property color foregroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_p', icon, 'sc_p_b_fg').color
|
|
||||||
}
|
|
||||||
property QtObject recordOff: QtObject {
|
|
||||||
property int iconSize: 40
|
|
||||||
property string icon : 'record_custom'
|
|
||||||
property string name : 'recordOff'
|
|
||||||
property color backgroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_n', icon, 'sc_n_b_bg').color
|
property color backgroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_n', icon, 'sc_n_b_bg').color
|
||||||
property color backgroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_h', icon, 'sc_h_b_bg').color
|
property color backgroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_h', icon, 'sc_h_b_bg').color
|
||||||
property color backgroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_p', icon, 'sc_p_b_bg').color
|
property color backgroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_p', icon, 'sc_p_b_bg').color
|
||||||
|
property color backgroundUpdatingColor : ColorsList.addImageColor(sectionName+'_'+name+'_bg_c', icon, 'sc_p_b_bg').color
|
||||||
property color foregroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_n', icon, 'sc_n_b_fg').color
|
property color foregroundNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_n', icon, 'sc_n_b_fg').color
|
||||||
property color foregroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_h', icon, 'sc_h_b_fg').color
|
property color foregroundHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_h', icon, 'sc_h_b_fg').color
|
||||||
property color foregroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_p', icon, 'sc_p_b_fg').color
|
property color foregroundPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_p', icon, 'sc_p_b_fg').color
|
||||||
|
property color foregroundUpdatingColor : ColorsList.addImageColor(sectionName+'_'+name+'_fg_c', icon, 'sc_p_b_fg').color
|
||||||
}
|
}
|
||||||
property QtObject screenshot: QtObject {
|
property QtObject screenshot: QtObject {
|
||||||
property int iconSize: 40
|
property int iconSize: 40
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue