11 changed files with 158 additions and 14 deletions
@ -0,0 +1,97 @@ |
|||
import QtQuick 2.10 |
|||
import QtQuick.Controls 2.3 |
|||
import QtQuick.Layouts 1.3 |
|||
import de.skycoder42.QtMvvm.Core 1.1 |
|||
import de.skycoder42.QtMvvm.Quick 1.1 |
|||
|
|||
MsgBoxBase { |
|||
id: _progressDialog |
|||
|
|||
closePolicy: Popup.NoAutoClose |
|||
autoHandleBtns: false |
|||
|
|||
readonly property ProgressControl progressControl: msgConfig.defaultValue |
|||
property string format: "%p%" |
|||
|
|||
property int _cancelAction: MessageConfig.NoButton |
|||
readonly property bool _allowClose: !progressControl || !msgResult |
|||
|
|||
onButtonClicked: tryCancel(button) |
|||
onAboutToHide: { //TODO find a way to NOT auto react on button presses... better that this solution |
|||
var closeFn = function(){ |
|||
if(!_allowClose) |
|||
_progressDialog.visible = true; |
|||
}; |
|||
if(QuickPresenter.currentStyle == "Material") |
|||
Qt.callLater(closeFn); |
|||
else |
|||
closeFn(); |
|||
} |
|||
|
|||
Component.onCompleted: { |
|||
if(msgResult) |
|||
msgResult.setCloseTarget(_progressDialog, "finish()"); |
|||
} |
|||
|
|||
function finish() { |
|||
msgResult.complete(_cancelAction); |
|||
msgResult = null; |
|||
close(); |
|||
} |
|||
|
|||
function tryCancel(button) { |
|||
if(_cancelAction == MessageConfig.NoButton) { |
|||
_cancelAction = button; |
|||
footer.enabled = false; |
|||
if(progressControl) |
|||
progressControl.requestCancel(button); |
|||
else |
|||
finish(); |
|||
} |
|||
} |
|||
|
|||
function closeAction() { |
|||
tryCancel(MessageConfig.Cancel); |
|||
return true; |
|||
} |
|||
|
|||
Connections { |
|||
target: progressControl |
|||
onChangeLabel: _contentLabel.text = text; |
|||
onCloseRequested: finish() |
|||
} |
|||
|
|||
GridLayout { |
|||
columns: 2 |
|||
anchors.fill: parent |
|||
|
|||
Label { |
|||
id: _contentLabel |
|||
text: msgConfig.text.replace(/<\/p>/g, "</p><br/>") //needed because qml does not put space between paragraphs... |
|||
visible: text != "" |
|||
Layout.fillWidth: true |
|||
Layout.columnSpan: 2 |
|||
wrapMode: Text.Wrap |
|||
onLinkActivated: Qt.openUrlExternally(link) |
|||
} |
|||
|
|||
ProgressBar { |
|||
id: _loadProgress |
|||
Layout.fillWidth: true |
|||
Layout.columnSpan: progressControl.indeterminate ? 2 : 1 |
|||
indeterminate: progressControl.indeterminate |
|||
from: progressControl.minimum |
|||
to: progressControl.maximum |
|||
value: progressControl.progress |
|||
} |
|||
|
|||
Label { |
|||
id: _progressLabel |
|||
visible: !progressControl.indeterminate |
|||
text: format |
|||
.replace("%p", Math.round(((progressControl.progress - progressControl.minimum) / (progressControl.maximum - progressControl.minimum)) * 100.0)) |
|||
.replace("%v", progressControl.progress) |
|||
.replace("%m", progressControl.maximum - progressControl.minimum) |
|||
} |
|||
} |
|||
} |
Loading…
Reference in new issue