class Plugin::Settings

プラグインに、簡単に設定ファイルを定義する機能を提供する。 以下の例は、このクラスを利用してプラグインの設定画面を定義する例。

Plugin.create(:test) do
  settings("設定") do
    boolean "チェックする", :test_check
  end
end

settingsの中身は、 Plugin::Settings のインスタンスの中で実行される。 つまり、 Plugin::Settings のインスタンスメソッドは、 _settings{}_ の中で実行できるメソッドと同じです。 例ではbooleanメソッドを呼び出して、真偽値を入力させるウィジェットを配置させるように定義している (チェックボックス)。明確にウィジェットを設定できるわけではなくて、値の意味を定義するだけなので、 前後関係などに影響されてウィジェットが変わる場合があるかも。

Public Class Methods

new(plugin) click to toggle source
Calls superclass method
# File core/plugin/settings/builder.rb, line 23
def initialize(plugin)
  type_strict plugin => Plugin
  super()
  @plugin = plugin
  if block_given?
    instance_eval(&Proc.new)
  end
end

Public Instance Methods

about(label, options={}) click to toggle source

〜についてダイアログを出すためのボタン。押すとダイアログが出てくる

Args

label

ラベル

options

設定値。以下のキーを含むハッシュ。

:name

ソフトウェア名

:version

バージョン

:copyright

コピーライト

:comments

コメント

:license

ライセンス

:website

Webページ

:logo

ロゴ画像のフルパス

:authors

作者の名前。通常Twitter screen name(Array)

:artists

デザイナとかの名前。通常Twitter screen name(Array)

:documenters

ドキュメントかいた人とかの名前。通常Twitter screen name(Array)

# File core/plugin/settings/builder.rb, line 200
def about(label, options={})
  name_mapper = Hash.new{|h,k| k }
  name_mapper[:name] = :program_name
  about = Gtk::Button.new(label)
  about.signal_connect("clicked"){
    dialog = Gtk::AboutDialog.new.show
    options.each { |key, value|
      dialog.__send__("#{name_mapper[key]}=", about_converter[key][value]) }
    dialog.signal_connect('response') { dialog.destroy } }
  closeup about
  about end
adjustment(name, config, min, max) click to toggle source

特定範囲の数値入力

Args

label

ラベル

config

設定のキー

min

最低値。これより小さい数字は入力できないようになる

max

最高値。これより大きい数字は入力できないようになる

# File core/plugin/settings/builder.rb, line 59
def adjustment(name, config, min, max)
  container = Gtk::HBox.new(false, 0)
  container.pack_start(Gtk::Label.new(name), false, true, 0)
  adj = Gtk::Adjustment.new((Listener[config].get or min).to_f, min.to_f, max.to_f, 1.0, 5.0, 0.0)
  spinner = Gtk::SpinButton.new(adj, 0, 0)
  adj.signal_connect('value-changed'){ |widget, e|
    Listener[config].set widget.value.to_i
    false
  }
  closeup container.pack_start(Gtk::Alignment.new(1.0, 0.5, 0, 0).add(spinner), true, true, 0)
  container
end
boolean(label, config) click to toggle source

真偽値入力

Args

label

ラベル

config

設定のキー

# File core/plugin/settings/builder.rb, line 76
def boolean(label, config)
  input = Gtk::CheckButton.new(label)
  input.active = Listener[config].get
  input.signal_connect('toggled'){ |widget|
    Listener[config].set widget.active? }
  closeup input
  input end
color(label, config) click to toggle source

色を決定させる。押すと色を設定するダイアログが出てくる。

Args

label

ラベル

config

設定のキー

# File core/plugin/settings/builder.rb, line 224
def color(label, config)
  closeup container = Gtk::HBox.new(false, 0).add(Gtk::Label.new(label).left).closeup(colorselect(label, config))
  container end
dirselect(label, config, _current=Dir.pwd, dir: _current, title: label.to_s) click to toggle source

ディレクトリを選択する

Args

label

ラベル

config

設定のキー

current

初期のディレクトリ

# File core/plugin/settings/builder.rb, line 98
def dirselect(label, config, _current=Dir.pwd, dir: _current, title: label.to_s)
  fsselect(label, config, dir: dir, action: Gtk::FileChooser::ACTION_SELECT_FOLDER, title: title)
end
fileselect(label, config, _current=Dir.pwd, dir: _current, title: label.to_s) click to toggle source

ファイルを選択する

Args

label

ラベル

config

設定のキー

dir

初期のディレクトリ

# File core/plugin/settings/builder.rb, line 89
def fileselect(label, config, _current=Dir.pwd, dir: _current, title: label.to_s)
  fsselect(label, config, dir: dir, action: Gtk::FileChooser::ACTION_OPEN, title: title)
end
font(label, config) click to toggle source

フォントを決定させる。押すとフォント、サイズを設定するダイアログが出てくる。

Args

label

ラベル

config

設定のキー

# File core/plugin/settings/builder.rb, line 216
def font(label, config)
  closeup container = Gtk::HBox.new(false, 0).add(Gtk::Label.new(label).left).closeup(fontselect(label, config))
  container end
fontcolor(label, font, color) click to toggle source

フォントと色を決定させる。

Args

label

ラベル

font

フォントの設定のキー

color

色の設定のキー

# File core/plugin/settings/builder.rb, line 233
def fontcolor(label, font, color)
  closeup container = font(label, font).closeup(colorselect(label, color))
  container end
input(label, config) click to toggle source

一行テキストボックス

Args

label

ラベル

config

設定のキー

# File core/plugin/settings/builder.rb, line 106
def input(label, config)
  container = Gtk::HBox.new(false, 0)
  input = Gtk::Entry.new
  input.text = Listener[config].get || ""
  container.pack_start(Gtk::Label.new(label), false, true, 0) if label
  container.pack_start(Gtk::Alignment.new(1.0, 0.5, 0, 0).add(input), true, true, 0)
  input.signal_connect('changed'){ |widget|
    Listener[config].set widget.text }
  closeup container
  container
end
inputpass(label, config) click to toggle source

一行テキストボックス(非表示)

Args

label

ラベル

config

設定のキー

# File core/plugin/settings/builder.rb, line 122
def inputpass(label, config)
  container = Gtk::HBox.new(false, 0)
  input = Gtk::Entry.new
  input.visibility = false
  input.text = Listener[config].get
  container.pack_start(Gtk::Label.new(label), false, true, 0) if label
  container.pack_start(Gtk::Alignment.new(1.0, 0.5, 0, 0).add(input), true, true, 0)
  input.signal_connect('changed'){ |widget|
    Listener[config].set widget.text }
  closeup container
  container
end
multi(label, config) click to toggle source

複数テキストボックス 任意個の項目を入力させて、配列で受け取る。

Args

label

ラベル

config

設定のキー

# File core/plugin/settings/builder.rb, line 140
def multi(label, config)
  settings(label) do
    container, box = Gtk::HBox.new(false, 0), Gtk::VBox.new(false, 0)
    input_ary = []
    btn_add = Gtk::Button.new(Gtk::Stock::ADD)
    array_converter = lambda {
      c = Listener[config].get || []
      (c.is_a?(Array) ? c : [c]).compact }
    add_button = lambda { |content|
      input = Gtk::Entry.new
      input.text = content.to_s
      input.ssc(:changed) { |w|
        Listener[config].set w.parent.children.map(&:text).compact }
      input.ssc('focus_out_event'){ |w|
        w.parent.remove(w) if w.text.empty?
        false }
      box.closeup input
      input }
    input_ary = array_converter.call.each(&add_button)
    btn_add.ssc(:clicked) { |w|
      w.get_ancestor(Gtk::Window).set_focus(add_button.call("").show)
      false }
    container.pack_start(box, true, true, 0)
    container.pack_start(Gtk::Alignment.new(1.0, 1.0, 0, 0).add(btn_add), false, true, 0)
    closeup container
    container
  end
end
multiselect(label, config, default = {}) click to toggle source

要素を複数個選択させる

Args

label

ラベル

config

設定のキー

default

連想配列で、 _値_ => _ラベル_ の形式で、デフォルト値を与える。 block と同時に与えれられたら、 default の値が先に入って、 block は後に入る。

&block

内容

# File core/plugin/settings/builder.rb, line 259
def multiselect(label, config, default = {})
  builder = Plugin::Settings::MultiSelect.new(@plugin, default)
  builder.instance_eval(&Proc.new) if block_given?
  closeup container = builder.build(label, config)
  container end
multitext(label, config) click to toggle source

複数行テキスト

Args

label

ラベル

config

設定のキー

# File core/plugin/settings/builder.rb, line 36
def multitext(label, config)
  container = Gtk::HBox.new(false, 0)
  input = Gtk::TextView.new
  input.wrap_mode = Gtk::TextTag::WRAP_CHAR
  input.border_width = 2
  input.accepts_tab = false
  input.editable = true
  input.width_request = HYDE
  input.buffer.text = Listener[config].get || ''
  container.pack_start(Gtk::Label.new(label), false, true, 0) if label
  container.pack_start(Gtk::Alignment.new(1.0, 0.5, 0, 0).add(input), true, true, 0)
  input.buffer.ssc('changed'){ |widget|
    Listener[config].set widget.text }
  closeup container
  container
end
select(label, config, default = {}) click to toggle source

要素を1つ選択させる

Args

label

ラベル

config

設定のキー

default

連想配列で、 _値_ => _ラベル_ の形式で、デフォルト値を与える。 block と同時に与えれられたら、 default の値が先に入って、 block は後に入る。

&block

内容

# File core/plugin/settings/builder.rb, line 245
def select(label, config, default = {})
  builder = Plugin::Settings::Select.new(@plugin, default)
  builder.instance_eval(&Proc.new) if block_given?
  closeup container = builder.build(label, config)
  container end
settings(title) click to toggle source

設定のグループ。関連の強い設定をカテゴライズできる。

Args

title

ラベル

&block

ブロック

# File core/plugin/settings/builder.rb, line 173
def settings(title)
  group = Gtk::Frame.new.set_border_width(8)
  if(title.is_a?(Gtk::Widget))
    group.set_label_widget(title)
  else
    group.set_label(title) end
  box = Plugin::Settings.new(@plugin).set_border_width(4)
  box.instance_eval(&Proc.new)
  closeup group.add(box)
  group
end