Class: Syskit::GUI::BatchManager
Defined Under Namespace
Classes: NewJobDialog, StartJob, ToString
Instance Method Summary
collapse
Methods inherited from WidgetList
#add_after, #add_before, #add_separator, #add_widget, #auto_resize?, #children_size_updated, #clear_widgets, #each_widget, #resizeEvent
Constructor Details
#initialize(syskit, parent = nil) ⇒ BatchManager
Returns a new instance of BatchManager
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
# File 'lib/syskit/gui/batch_manager.rb', line 6
def initialize(syskit, parent = nil)
super(parent)
@syskit = syskit
@actions = Qt::Widget.new
actions_layout = Qt::HBoxLayout.new(@actions)
@process_btn = Qt::PushButton.new("Process")
@cancel_btn = Qt::PushButton.new("Cancel")
actions_layout.add_widget(@process_btn)
actions_layout.add_widget(@cancel_btn)
add_widget(@actions, permanent: true)
@process_btn.connect(SIGNAL(:clicked)) do
process
end
@cancel_btn.connect(SIGNAL(:clicked)) do
cancel
end
disable_actions
@start_job = Array.new
@drop_job = Array.new
end
|
Instance Method Details
49
50
51
|
# File 'lib/syskit/gui/batch_manager.rb', line 49
def cancel
clear
end
|
53
54
55
56
57
58
|
# File 'lib/syskit/gui/batch_manager.rb', line 53
def clear
clear_widgets
@start_job.clear
@drop_job.clear
disable_actions
end
|
#create_new_job(action_name, arguments = Hash.new) ⇒ Object
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
# File 'lib/syskit/gui/batch_manager.rb', line 88
def create_new_job(action_name, arguments = Hash.new)
action_model = @syskit.actions.find { |m| m.name == action_name }
if !action_model
raise ArgumentError, "no action named #{action_name} found"
end
if action_model.arguments.empty?
start_job(action_name, Hash.new)
true
else
formatted_arguments = String.new
action_model.arguments.each do |arg|
default_arg = arguments.fetch(
arg.name.to_sym, arg.default)
has_default_arg = arguments.has_key?(arg.name.to_sym) || !arg.required?
if !formatted_arguments.empty?
formatted_arguments << ",\n"
end
doc_lines = (arg.doc || "").split("\n")
formatted_arguments << "\n # #{doc_lines.join("\n # ")}\n"
if !has_default_arg
formatted_arguments << " #{arg.name}: "
elsif default_arg.nil?
formatted_arguments << " #{arg.name}: nil"
elsif default_arg.respond_to?(:name) && MetaRuby::Registration.accessible_by_name?(default_arg)
formatted_arguments << " #{arg.name}: #{default_arg.name}"
elsif as_string = ToString.convert(default_arg)
formatted_arguments << " #{arg.name}: #{as_string}"
elsif arg.required?
formatted_arguments << " #{arg.name}: "
else
formatted_arguments << " # #{arg.name}'s default argument cannot be handled by the IDE\n"
formatted_arguments << " # #{arg.name}: #{default_arg}"
end
end
formatted_action = "#{action_name}!(\n#{formatted_arguments}\n)"
dialog = NewJobDialog.new(self, formatted_action)
if dialog.exec == Qt::Dialog::Accepted
action_name, action_options = dialog.result
start_job(action_name, action_options)
true
else false
end
end
end
|
#disable_actions ⇒ Object
62
63
64
65
66
|
# File 'lib/syskit/gui/batch_manager.rb', line 62
def disable_actions
emit active(false)
@process_btn.enabled = false
@cancel_btn.enabled = false
end
|
#drop_job(job_widget) ⇒ Object
76
77
78
79
80
|
# File 'lib/syskit/gui/batch_manager.rb', line 76
def drop_job(job_widget)
@drop_job << job_widget.job
add_before(Qt::Label.new("<b>Drop</b> #{job_widget.label}"), @actions)
enable_actions
end
|
#enable_actions ⇒ Object
68
69
70
71
72
|
# File 'lib/syskit/gui/batch_manager.rb', line 68
def enable_actions
emit active(true)
@process_btn.enabled = true
@cancel_btn.enabled = true
end
|
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
# File 'lib/syskit/gui/batch_manager.rb', line 31
def process
batch = @syskit.client.create_batch
@drop_job.each do |j|
batch.drop_job(j.job_id)
end
@start_job.each do |j|
arguments = j.action_arguments
arguments.delete(:job_id)
batch.start_job(j.action_name, arguments)
end
begin
batch.__process
rescue Exception => e
Qt::MessageBox.critical(self, "Syskit Process Batch", "failed to process batch: #{e.message}, see console output for more details")
end
clear
end
|
#start_job(action_name, action_arguments) ⇒ Object
82
83
84
85
86
|
# File 'lib/syskit/gui/batch_manager.rb', line 82
def start_job(action_name, action_arguments)
@start_job << StartJob.new(action_name, action_arguments)
add_before(Qt::Label.new("<b>Start</b> #{action_name}"), @actions)
enable_actions
end
|