Уважаемые форумчане-кодеры!
Я тут затеял поизучать создание виджетов и решил несколько штучек сделать для себя. Но столкнулся с проблемой.
Хочу переделать немного стандартный виджет lockout, добавив в него немного функционала - еще одну кнопку (гашение экрана) и пару пунктов меню, отключающих и снова включающих подавление гашения экрана.
С кнопкой вроде справился. А вот как работает служба для источника PowerDevil в движке powermanagement, я, откровенно, не могу понять, она то срабатывает, то не срабатывает. Может быть, я что-то не учитываю?
Вот код, который я использую (добавил в стандартный QML):
......
PlasmaCore.DataSource {
id: dataEngine
engine: "powermanagement"
connectedSources: ["PowerDevil"]
}
Component.onCompleted: {
plasmoid.aspectRatioMode = IgnoreAspectRatio;
plasmoid.addEventListener('ConfigChanged', configChanged);
// далее - мой код...
plasmoid.setAction("bspm", "Suppress Screen Power Management", "help-hint");
plasmoid.setAction("sspm", "Stop Suppressing Screen Power Management");
plasmoid.setActionSeparator("separator");
}
function action_bspm() {
var service = dataEngine.serviceForSource("PowerDevil");
var operation = service.operationDescription("beginSuppressingScreenPowerManagement");
service.startOperationCall(operation);
}
function action_sspm() {
var service = dataEngine.serviceForSource("PowerDevil");
var operation = service.operationDescription("stopSuppressingScreenPowerManagement");
service.startOperationCall(operation);
}
......
Уф! Вроде сам доковырял методом научного тыка!
Вот, пользуйтесь, если кому нужно будет:
......
Flow {
id: lockout
property int minimumWidth
property int minimumHeight
property int minButtonSize: 16
property bool show_black: true
property bool show_lock: true
property bool show_switchUser: false
property bool show_leave: true
property bool show_suspend: false
property bool show_hibernate: false
property int visibleButtons: 3
property int orientation: Qt.Horizontal
property int cookie: 0
property bool suppressVisible: true
flow: orientation==Qt.Vertical ? Flow.TopToBottom : Flow.LeftToRight
onWidthChanged: checkLayout();
onHeightChanged: checkLayout();
PlasmaCore.DataSource {
id: dataEngine
engine: "powermanagement"
connectedSources: ["PowerDevil"]
}
Component.onCompleted: {
plasmoid.aspectRatioMode = IgnoreAspectRatio;
plasmoid.addEventListener('ConfigChanged', configChanged);
updateMenu();
}
function updateMenu() {
if (suppressVisible) {
plasmoid.removeAction("sspm");
plasmoid.removeAction("separator");
plasmoid.setAction("bspm", "Suppress Display Off", "help-hint");
plasmoid.setActionSeparator("separator");
} else {
plasmoid.removeAction("bspm");
plasmoid.removeAction("separator");
plasmoid.setAction("sspm", "Stop Suppressing Display Off", "preferences-system-power-management");
plasmoid.setActionSeparator("separator");
}
}
function getJobResult(job) {
cookie = job.result;
}
function action_bspm() {
var service = dataEngine.serviceForSource("PowerDevil");
var operation = service.operationDescription("beginSuppressingScreenPowerManagement");
var serviceJob = service.startOperationCall(operation);
serviceJob.finished.connect(getJobResult);
suppressVisible = false;
updateMenu();
}
function action_sspm() {
var service = dataEngine.serviceForSource("PowerDevil");
var operation = service.operationDescription("stopSuppressingScreenPowerManagement");
operation.cookie = cookie;
service.startOperationCall(operation);
suppressVisible = true;
updateMenu();
}
......
Было бы гораздо замечательнее, если бы вы готовые виджеты выложили куда-нибудь…
Будет сделано! :))
Заодно потестите... ;)
Вы мне только объясните, как мне правильно оформить виджет, если я за основу взял стандартный "lockout", автор которого Виранч Мехта...
Ну я не знаю, я не автор… В идеале хорошо бы выложить сюда https://store.kde.org/
Вот:
Запись в блоге
Туда пока рано: боюсь, заплюют. :)))
Отправить комментарий