File: settings.rb

package info (click to toggle)
mikutter 3.5.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 10,256 kB
  • ctags: 2,165
  • sloc: ruby: 19,079; sh: 205; makefile: 20
file content (62 lines) | stat: -rw-r--r-- 2,413 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# -*- coding: utf-8 -*-

require File.expand_path File.join(File.dirname(__FILE__), 'builder')
require File.expand_path File.join(File.dirname(__FILE__), 'basic_settings')

Plugin.create(:settings) do

  command(:open_setting,
          name: _('設定'),
          condition: lambda{ |opt| true },
          visible: true,
          icon: Skin['settings.png'],
          role: :window) do |opt|
    Plugin.call(:open_setting)
  end

  on_open_setting do
    setting_window.show_all end

  def setting_window
    return @window if defined?(@window) and @window
    record_order = UserConfig[:settings_menu_order] || ["基本設定", "入力", "表示", "通知", "ショートカットキー", "アクティビティ", "アカウント情報"]
    @window = window = ::Gtk::Window.new(_('設定'))
    window.set_size_request(320, 240)
    window.set_default_size(640, 480)
    widgets_dict = {}
    menu = menu_widget(widgets_dict)
    settings = ::Gtk::VBox.new.set_no_show_all(true).show
    scrolled = ::Gtk::ScrolledWindow.new.set_hscrollbar_policy(::Gtk::POLICY_NEVER)
    Plugin.filtering(:defined_settings, []).first.each{ |title, definition, plugin|
      iter = menu.model.append
      iter[0] = title
      iter[1] = (record_order.index(title) || record_order.size)
      widgets_dict[title] = box = Plugin::Settings.new(Plugin.instance plugin)
      box.instance_eval(&definition)
      settings.closeup(box) }
    window.ssc(:destroy) {
      @window = nil
      false }

    scrolled_menu = ::Gtk::ScrolledWindow.new.set_policy(::Gtk::POLICY_NEVER, ::Gtk::POLICY_AUTOMATIC)

    window.add(::Gtk::HPaned.new.add1(scrolled_menu.add_with_viewport(menu)).add2(scrolled.add_with_viewport(settings))) end

  def menu_widget(widgets_dict)
    column = ::Gtk::TreeViewColumn.new("", ::Gtk::CellRendererText.new, text: 0)
    menumodel = ::Gtk::ListStore.new(String, Integer)
    menumodel.set_sort_column_id(1, order = ::Gtk::SORT_ASCENDING)
    menu = ::Gtk::TreeView.new(menumodel).set_headers_visible(false)
    menu.append_column(column)
    menu.signal_connect(:cursor_changed) {
      if menu.selection.selected
        active_title = menu.selection.selected[0]
        widgets_dict.each { |title, widget|
          if active_title == title
            widgets_dict[title].show_all
          else
            widgets_dict[title].hide end } end
      false }
    menu.set_width_request(HYDE) end

end