ジャンル不定の日記です。

Plasmoidの設定でハマってる・・・

引き続き、QMLの勉強中で、RSSやAtom等を取得してリスト表示するのは概ね出来そうなんだが、Plasmoidの設定関連でハマってる。
これはQtQuickとは別でKDEの情報探さないとダメみたいね。
Qtのリファレンス等の情報も不満だが、KDEの情報はもっと調べにくい。

/usr/share/plasma/plasmoids/ 以下にあるPlasmoidのコード参考にしたりとかして、
設定値を取得することはできたんだが、[適用]ボタン押した時にイベント駆動で処理する方法がわからない・・・
とりあえず、現時点でわかった情報。


contents/ui/main.qml
以外に、
contents/config/config.qml
contents/config/main.xml
contents/ui/xxxx.qml
が必要ぽい。

contents/config/config.qml
import org.kde.plasma.configuration 2.0

ConfigModel{
    ConfigCategory{
        name: "General"
        icon: "plasma"
        source: "configGeneral.qml"
    }
}
Plasmoidの設定が呼びだされた場合は、このファイルに従って設定画面のカテゴリが追加される。
この場合、[General]カテゴリが追加され、sourceで指定した contents/ui/configGeneral.qml が[General]カテゴリの設定画面になる。

contents/ui/configGeneral.qml
import QtQuick 2.0
import QtQuick.Controls 1.4

Item {
    property alias cfg_tf: tf.text
    TextField{
       id:tf
    }
}
これでTextFieldが一個だけの設定画面になる。
TextFieldのidがtfなのでtf.textが文字列となるが、エイリアスで cfg_ で始まるプロパティと同一にする必要があるぽい。

contents/config/main.xml
<?xml version="1.0" encoding="UTF-8"?>
<kcfg xmlns="http://www.kde.org/standards/kcfg/1.0"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0
      http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" >
  <kcfgfile name=""/>
  <group name="General">
    <entry name="tf" type="String">
      <default>test</default>
    </entry>
  </group>
</kcfg>
この.xmlファイルが設定ファイルになるぽい。
ファイルがなくてもエラーにならないが、再起動すると消える。
ここで<entry>属性のnameが"tf"となっているが、これが設定画面用.qmlのcfg_tfの値になるぽい。
configGeneral.qmlのTextFieldの値ととcfg_tfをaliasにしているので、TextFieldを変更すると保存される模様。

contents/ui/main.qml
import QtQuick 2.0
import org.kde.plasma.plasmoid 2.0

Column{
    id:root
    width:640
    height:480
    property string tf: plasmoid.configuration.tf;
    Text{
       text:tf
    }
}
いつものmain.qmlだが、org.kde.plasma.plasmoidをimportしている。
plasmoid.configuration.tf で設定値が取得できる模様。
ただし、[適用]ボタン押さなくてもすぐに反映しちゃうぽい。


で、[適用]ボタンを押した時にmain.qmlで処理したいんだが、その方法がわからない・・・