module Gtk::FormDSL

UIを定義するためのDSLメソッドをクラスに追加するmix-in。 現在の値(初期値)を返す[]メソッドと、値が変更された時に呼ばれる=メソッドを定義すること。

Public Class Methods

new(plugin) click to toggle source
Calls superclass method
# File core/mui/gtk_form_dsl.rb, line 9
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/mui/gtk_form_dsl.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
      false
    }
  }
  closeup about
  about
end
adjustment(name, config, min, max) click to toggle source

特定範囲の数値入力

Args

label

ラベル

config

設定のキー

min

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

max

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

# File core/mui/gtk_form_dsl.rb, line 47
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((self[config] 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|
    self[config] = 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/mui/gtk_form_dsl.rb, line 64
def boolean(label, config)
  input = Gtk::CheckButton.new(label)
  input.active = self[config]
  input.signal_connect(:toggled){ |widget|
    self[config] = widget.active?
    false
  }
  closeup input
  input
end
color(label, config) click to toggle source

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

Args

label

ラベル

config

設定のキー

# File core/mui/gtk_form_dsl.rb, line 231
def color(label, config)
  closeup container = Gtk::HBox.new(false, 0).add(Gtk::Label.new(label).left).closeup(colorselect(label, config))
  container
end
create_inner_setting() click to toggle source

settingsメソッドとSelectから内部的に呼ばれるメソッド。Groupの中に入れるGtkウィジェットを返す。 戻り値は同時にこのmix-inをロードしている必要がある。

# File core/mui/gtk_form_dsl.rb, line 278
def create_inner_setting
  self.new()
end
dirselect(label, config, _current=Dir.pwd, dir: _current, title: label.to_s) click to toggle source

ディレクトリを選択する

Args

label

ラベル

config

設定のキー

current

初期のディレクトリ

# File core/mui/gtk_form_dsl.rb, line 89
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/mui/gtk_form_dsl.rb, line 80
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/mui/gtk_form_dsl.rb, line 222
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/mui/gtk_form_dsl.rb, line 241
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/mui/gtk_form_dsl.rb, line 97
def input(label, config)
  container = Gtk::HBox.new(false, 0)
  input = Gtk::Entry.new
  input.text = self[config] || ""
  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|
    self[config] = widget.text
    false
  }
  closeup container
  container
end
inputpass(label, config) click to toggle source

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

Args

label

ラベル

config

設定のキー

# File core/mui/gtk_form_dsl.rb, line 115
def inputpass(label, config)
  container = Gtk::HBox.new(false, 0)
  input = Gtk::Entry.new
  input.visibility = false
  input.text = self[config] || ''
  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|
    self[config] = widget.text
    false
  }
  closeup container
  container
end
method_missing_at_select_dsl(*args, &block) click to toggle source
# File core/mui/gtk_form_dsl.rb, line 282
def method_missing_at_select_dsl(*args, &block)
  method_missing(*args, &block)
end
multi(label, config) click to toggle source

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

Args

label

ラベル

config

設定のキー

# File core/mui/gtk_form_dsl.rb, line 135
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 = self[config] || []
      (c.is_a?(Array) ? c : [c]).compact }
    add_button = lambda { |content|
      input = Gtk::Entry.new
      input.text = content.to_s
      input.ssc(:changed) { |w|
        self[config] = w.parent.children.map(&:text).compact
        false
      }
      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/mui/gtk_form_dsl.rb, line 269
def multiselect(label, config, default = {})
  builder = Gtk::FormDSL::MultiSelect.new(self, 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/mui/gtk_form_dsl.rb, line 22
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 = self[config] || ''
  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|
    self[config] = widget.text
    false
  }
  closeup container
  container
end
select(label, config, default = {}) click to toggle source

要素を1つ選択させる

Args

label

ラベル

config

設定のキー

default

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

&block

内容

# File core/mui/gtk_form_dsl.rb, line 254
def select(label, config, default = {})
  builder = Gtk::FormDSL::Select.new(self, 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/mui/gtk_form_dsl.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 = create_inner_setting.set_border_width(4)
  box.instance_eval(&Proc.new)
  closeup group.add(box)
  group
end