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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
# -*- coding: utf-8 -*-
require File.join(File.dirname(__FILE__), "account_control")
Plugin.create :change_account do
# アカウント変更用の便利なコマンド
command(:account_previous,
name: _('前のアカウント'),
condition: lambda{ |opt| Service.instances.size >= 2 },
visible: true,
role: :window) do |opt|
index = Service.instances.index(Service.primary)
if index
max = Service.instances.size
Service.set_primary(Service.instances[(max + index - 1) % max])
elsif not Service.instances.empty?
Service.set_primary(Service.instances.first) end
end
command(:account_forward,
name: _('次のアカウント'),
condition: lambda{ |opt| Service.instances.size >= 2 },
visible: true,
role: :window) do |opt|
index = Service.instances.index(Service.primary)
if index
Service.set_primary(Service.instances[(index + 1) % Service.instances.size])
elsif not Service.instances.empty?
Service.set_primary(Service.instances.first) end
end
filter_command do |menu|
Enumerator.new{|y|
Plugin.filtering(:worlds, y)
}.each do |world|
slug = "switch_account_to_#{world.slug}".to_sym
menu[slug] = {
slug: slug,
exec: -> options {},
plugin: @name,
name: _('%{title}(%{world}) に切り替える'.freeze) % {
title: world.title,
world: world.class.slug
},
condition: -> options {},
visible: false,
role: :window,
icon: world.icon } end
[menu] end
# サブ垢は心の弱さ
settings _('アカウント情報') do
listview = ::Plugin::ChangeAccount::AccountControl.new(self)
btn_add = Gtk::Button.new(Gtk::Stock::ADD)
btn_delete = Gtk::Button.new(Gtk::Stock::DELETE)
btn_add.ssc(:clicked) do
boot_wizard
true
end
btn_delete.ssc(:clicked) do
true
end
listview.ssc(:delete_world) do |widget, worlds|
delete_world_with_confirm(worlds)
false
end
pack_start(Gtk::HBox.new(false, 4).
add(listview).
closeup(Gtk::HBox.new.
add(btn_add)))
end
def boot_wizard
dialog(_('アカウント追加')){
select 'Select world', :world do
worlds, = Plugin.filtering(:world_setting_list, Hash.new)
worlds.values.each do |world|
option world, world.name
end
end
step1 = await_input
selected_world = step1[:world]
instance_eval(&selected_world.proc)
}.next{ |res|
Plugin.call(:world_create, res.result)
}.trap{ |err|
error err
}
end
def delete_world_with_confirm(worlds)
dialog(_("アカウントの削除")){
label _("以下のアカウントを本当に削除しますか?\n一度削除するともう戻ってこないよ")
worlds.each{ |world|
link world
}
}.next{
worlds.each{ |world|
Plugin.call(:world_destroy, world)
}
}
end
defachievement(:tutorial,
description: _("mikutterのチュートリアルを見た"),
hint: 'Worldを登録してみよう(開発用超絶手抜き説明)'
) do |ach|
on_world_create do |world|
ach.take!
end
end
end
|