ig3tool 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/bin/ig3tool +114 -0
- data/lib/glade/bib.glade +539 -0
- data/lib/glade/bibliotheek.glade +994 -0
- data/lib/glade/icons/cola.png +0 -0
- data/lib/glade/icons/emblem-money.png +0 -0
- data/lib/glade/icons/emblem-package.png +0 -0
- data/lib/glade/icons/emblem-penning.xpm +98 -0
- data/lib/glade/icons/emblem-people.png +0 -0
- data/lib/glade/icons/emblem-sales.png +0 -0
- data/lib/glade/icons/gdict.png +0 -0
- data/lib/glade/icons/members_klein.png +0 -0
- data/lib/glade/icons/members_xklein.png +0 -0
- data/lib/glade/icons/no.xpm +34 -0
- data/lib/glade/icons/stock_book.svg +338 -0
- data/lib/glade/icons/stock_book_klein.png +0 -0
- data/lib/glade/icons/stock_book_xklein.png +0 -0
- data/lib/glade/icons/stock_bookmark.svg +327 -0
- data/lib/glade/icons/stock_bookmark_klein.png +0 -0
- data/lib/glade/icons/stock_bookmark_xklein.png +0 -0
- data/lib/glade/icons/stock_print.png +0 -0
- data/lib/glade/interne.glade +228 -0
- data/lib/glade/loginwindow.glade +255 -0
- data/lib/glade/memberinfo.svg +411 -0
- data/lib/glade/memberinfo_klein.png +0 -0
- data/lib/glade/memberinfo_xklein.png +0 -0
- data/lib/glade/members.glade +596 -0
- data/lib/glade/members.svg +559 -0
- data/lib/glade/members_klein.png +0 -0
- data/lib/glade/members_xklein.png +0 -0
- data/lib/glade/penningtool.glade +731 -0
- data/lib/glade/people.glade +947 -0
- data/lib/glade/printen.glade +358 -0
- data/lib/glade/printer.png +0 -0
- data/lib/glade/printer_klein.png +0 -0
- data/lib/glade/printer_xklein.png +0 -0
- data/lib/glade/printerlog_klein.png +0 -0
- data/lib/glade/printerlog_xklein.png +0 -0
- data/lib/glade/printing.glade +841 -0
- data/lib/glade/products.glade +404 -0
- data/lib/glade/sales.glade +426 -0
- data/lib/glade/stock_book.svg +338 -0
- data/lib/glade/stock_book_klein.png +0 -0
- data/lib/glade/stock_book_xklein.png +0 -0
- data/lib/glade/stock_bookmark_klein.png +0 -0
- data/lib/glade/stock_bookmark_xklein.png +0 -0
- data/lib/glade/vendingmachine.glade +207 -0
- data/lib/lib/errors.rb +90 -0
- data/lib/lib/util.rb +89 -0
- data/lib/ui/automaatwindow.rb +107 -0
- data/lib/ui/bibliotheekwindow.rb +453 -0
- data/lib/ui/bibwindow.rb +537 -0
- data/lib/ui/gladehelper.rb +110 -0
- data/lib/ui/internewindow.rb +126 -0
- data/lib/ui/loginwindow.rb +60 -0
- data/lib/ui/memberswindow.rb +327 -0
- data/lib/ui/messagebox.rb +23 -0
- data/lib/ui/peoplewindow.rb +333 -0
- data/lib/ui/printenwindow.rb +329 -0
- data/lib/ui/printingwindow.rb +395 -0
- data/lib/ui/productswindow.rb +160 -0
- data/lib/ui/saleswindow.rb +207 -0
- data/lib/ui/toolwindow.rb +97 -0
- metadata +128 -0
@@ -0,0 +1,126 @@
|
|
1
|
+
module Ig3tool
|
2
|
+
|
3
|
+
class InterneWindow < GladeHelper
|
4
|
+
|
5
|
+
## - Constants ----
|
6
|
+
MENU_PATH = ["Interne", "Interne"]
|
7
|
+
ICON = "emblem-money.png"
|
8
|
+
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
super("interne.glade")
|
12
|
+
|
13
|
+
@debugger1 = @glade.get_widget("debugger1")
|
14
|
+
@debugger2 = @glade.get_widget("debugger2")
|
15
|
+
@saldo = @glade.get_widget("saldo")
|
16
|
+
@amount = @glade.get_widget("amount")
|
17
|
+
@list = @glade.get_widget("list")
|
18
|
+
|
19
|
+
r = Gtk::CellRendererText.new
|
20
|
+
#@list.model = Gtk::ListStore.new(String, String, Float, String)
|
21
|
+
#%w(Van Naar Aantal Mededeling).each_with_index do |str, i|
|
22
|
+
# @list.insert_column(-1, str, r, :text => i)
|
23
|
+
#end
|
24
|
+
|
25
|
+
# TIJDELIJK: Het is beter dat de debugger meer info kan zien -> Lezen uit log ipv interne_transaction
|
26
|
+
# XXX TODO IN SERVER -> changen naar interne transacties als deze dan overal ingevuld worden!
|
27
|
+
@list.model = Gtk::ListStore.new(String, String, String, String)
|
28
|
+
%w(Systeem Subsysteem Tijd Mededeling).each_with_index do |str, i|
|
29
|
+
@list.insert_column(-1, str, r, :text => i)
|
30
|
+
end
|
31
|
+
|
32
|
+
make_debugger_combo @debugger1
|
33
|
+
make_debugger_combo @debugger2
|
34
|
+
|
35
|
+
@window.show_all
|
36
|
+
end
|
37
|
+
|
38
|
+
def make_debugger_combo(combo) # kas is ook een "debugger"
|
39
|
+
super(combo)
|
40
|
+
r = combo.model.prepend
|
41
|
+
r[0] = nil
|
42
|
+
r[1] = "kas"
|
43
|
+
combo.active = 0
|
44
|
+
end
|
45
|
+
|
46
|
+
def left_clicked
|
47
|
+
amount = @amount.text.to_c
|
48
|
+
_transfer(@debugger1, @debugger2, -amount)
|
49
|
+
end
|
50
|
+
|
51
|
+
def right_clicked
|
52
|
+
amount = @amount.text.to_c
|
53
|
+
_transfer(@debugger1, @debugger2, amount)
|
54
|
+
end
|
55
|
+
|
56
|
+
def debugger1_changed
|
57
|
+
username = _get_username(@debugger1)
|
58
|
+
return if username.nil?
|
59
|
+
|
60
|
+
if username != "kas"
|
61
|
+
saldo = $global["client"].interne(username)
|
62
|
+
@saldo.text = saldo.from_c.to_s
|
63
|
+
else
|
64
|
+
@saldo.text = ""
|
65
|
+
end
|
66
|
+
|
67
|
+
m = _get_widget("list").model
|
68
|
+
m.clear
|
69
|
+
|
70
|
+
_get_widget("list").model = nil
|
71
|
+
|
72
|
+
username = nil if username == "kas"
|
73
|
+
|
74
|
+
transactions = $global["client"].interne_log(username)
|
75
|
+
transactions.each do |t|
|
76
|
+
r = m.append
|
77
|
+
r[0] = t.system
|
78
|
+
r[1] = t.subsystem
|
79
|
+
time = Time.at(t.timestamp.to_i)
|
80
|
+
r[2] = time.asctime
|
81
|
+
r[3] = t.message
|
82
|
+
end
|
83
|
+
|
84
|
+
_get_widget("list").model = m
|
85
|
+
end
|
86
|
+
|
87
|
+
def eval_amount
|
88
|
+
t = @amount.text.strip
|
89
|
+
t.gsub!(/[^\d+\/*().-]/, "")
|
90
|
+
if t =~ /[+\/*()-]/
|
91
|
+
t = begin eval(t).to_s rescue "0" end
|
92
|
+
else
|
93
|
+
t = t.to_f.to_s
|
94
|
+
end
|
95
|
+
@amount.text = t
|
96
|
+
0
|
97
|
+
end
|
98
|
+
|
99
|
+
private
|
100
|
+
def _transfer(from_widget, to_widget, amount)
|
101
|
+
from = _get_username(from_widget)
|
102
|
+
to = _get_username(to_widget)
|
103
|
+
return if from.nil? or to.nil? or from == to or amount == 0
|
104
|
+
|
105
|
+
args = {
|
106
|
+
:from => from,
|
107
|
+
:to => to,
|
108
|
+
:amount => amount
|
109
|
+
}
|
110
|
+
|
111
|
+
new_saldo = $global["client"].interne_transfer! args
|
112
|
+
@saldo.text = $global["client"].interne(from).from_c.to_s
|
113
|
+
|
114
|
+
# Fake Debugger1 changed -> updaten log kaderke
|
115
|
+
debugger1_changed
|
116
|
+
end
|
117
|
+
|
118
|
+
def _get_username(widget)
|
119
|
+
return nil if widget.active == -1
|
120
|
+
return widget.active_iter[1]
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
register_window(InterneWindow)
|
125
|
+
|
126
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module Ig3tool
|
2
|
+
class LoginWindow < GladeHelper
|
3
|
+
include GetText
|
4
|
+
|
5
|
+
MENU_PATH = ["Login", "Login"]
|
6
|
+
ICON = "stock_print.png"
|
7
|
+
|
8
|
+
attr :glade
|
9
|
+
|
10
|
+
def initialize(client, &block)
|
11
|
+
super("loginwindow.glade", "loginwindow")
|
12
|
+
|
13
|
+
@c = client
|
14
|
+
|
15
|
+
@username = @glade.get_widget("username")
|
16
|
+
@password = @glade.get_widget("password")
|
17
|
+
@apply = @glade.get_widget("apply")
|
18
|
+
@loginwin = @glade.get_widget("loginwindow")
|
19
|
+
@success = block
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
def password_activate(widget)
|
24
|
+
@apply.activate
|
25
|
+
end
|
26
|
+
def apply(widget)
|
27
|
+
h = {"username" => @username.text, "password" => @password.text}
|
28
|
+
@username.text = ""
|
29
|
+
@password.text = ""
|
30
|
+
@c.wannabe!(h)
|
31
|
+
@loginwin.hide
|
32
|
+
@success.call
|
33
|
+
rescue Token => t
|
34
|
+
puts "ERROR: #{t.message}"
|
35
|
+
error_dialog(self, t)
|
36
|
+
end
|
37
|
+
def cancel(widget)
|
38
|
+
@username.text = ""
|
39
|
+
@password.text = ""
|
40
|
+
@loginwin.hide
|
41
|
+
Gtk.main_quit
|
42
|
+
return nil
|
43
|
+
end
|
44
|
+
def destroy_event(widget, arg0)
|
45
|
+
@username.text = ""
|
46
|
+
@password.text = ""
|
47
|
+
@loginwin.hide
|
48
|
+
end
|
49
|
+
def delete_event(widget, arg0)
|
50
|
+
@username.text = ""
|
51
|
+
@password.text = ""
|
52
|
+
@loginwin.hide
|
53
|
+
end
|
54
|
+
def username_activate(widget)
|
55
|
+
@password.grab_focus
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
@@ -0,0 +1,327 @@
|
|
1
|
+
module Ig3tool
|
2
|
+
|
3
|
+
class MembersWindow < GladeHelper
|
4
|
+
MENU_PATH = ["Leden"]
|
5
|
+
ICON = "members_xklein.png"
|
6
|
+
FIELDS = %w(first_name last_name email username rolnr address phone)
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
super("members.glade")
|
10
|
+
|
11
|
+
@people_view = _get_widget("people_view")
|
12
|
+
@people_view.model = @people_store = Gtk::ListStore.new(Object, String)
|
13
|
+
r = Gtk::CellRendererText.new
|
14
|
+
@people_view.insert_column(-1, "Naam", r, :text => 1)
|
15
|
+
|
16
|
+
past_view = _get_widget("past_view")
|
17
|
+
past_view.model = Gtk::ListStore.new(String, String, String)
|
18
|
+
past_view.insert_column(-1, "Jaar", r, :text => 0)
|
19
|
+
past_view.insert_column(-1, "Status", r, :text => 1)
|
20
|
+
past_view.insert_column(-1, "Lidnummer", r, :text => 2)
|
21
|
+
past_view.columns.last.expand = true
|
22
|
+
|
23
|
+
sg = Gtk::SizeGroup.new(Gtk::SizeGroup::BOTH)
|
24
|
+
|
25
|
+
@glade.widget_names.grep(/^slabel/).each do |n|
|
26
|
+
sg.add_widget(_get_widget(n))
|
27
|
+
end
|
28
|
+
|
29
|
+
@notification_label = _get_widget("notification_label")
|
30
|
+
|
31
|
+
_get_widget("first_name").grab_focus
|
32
|
+
statussen = $global["client"].person_statussen
|
33
|
+
make_status_combo(_get_widget("status"), statussen)
|
34
|
+
|
35
|
+
Thread.new do
|
36
|
+
_get_widget("query").active = 0 # triggers query_changed
|
37
|
+
_get_widget("status").active = 0 # triggers status_changed
|
38
|
+
end
|
39
|
+
|
40
|
+
_create_people_rightclick_menu # Instantieer een rightclick menu
|
41
|
+
|
42
|
+
@window.show
|
43
|
+
end
|
44
|
+
|
45
|
+
## - Handlers (GUI) ----
|
46
|
+
# Rechtermuisknop op een persoon in de lijst
|
47
|
+
def people_button_press_event (widget, event)
|
48
|
+
if event.kind_of? Gdk::EventButton and event.button == 3
|
49
|
+
@people_view_menu.popup(nil, nil, event.button, event.time)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
# Bij dubbel klik op een naam in de lijst
|
54
|
+
def people_view_row_activated (widget, path, column)
|
55
|
+
iter = widget.model.get_iter(path)
|
56
|
+
_show iter[0]
|
57
|
+
end
|
58
|
+
|
59
|
+
def new_clicked
|
60
|
+
_clear
|
61
|
+
end
|
62
|
+
|
63
|
+
def ok_clicked
|
64
|
+
_save
|
65
|
+
end
|
66
|
+
|
67
|
+
def delete_clicked
|
68
|
+
_delete(@selected_person)
|
69
|
+
end
|
70
|
+
|
71
|
+
def query_changed
|
72
|
+
_update_people
|
73
|
+
end
|
74
|
+
|
75
|
+
def entry_activate
|
76
|
+
lookup_clicked
|
77
|
+
end
|
78
|
+
|
79
|
+
def focus_changed
|
80
|
+
@notification_label.text = ""
|
81
|
+
false
|
82
|
+
end
|
83
|
+
|
84
|
+
def lookup_clicked
|
85
|
+
attrs = {}
|
86
|
+
|
87
|
+
FIELDS.each do |k|
|
88
|
+
v = _get_widget(k).text.strip
|
89
|
+
attrs[k] = v unless v.nil? or v.empty?
|
90
|
+
end
|
91
|
+
|
92
|
+
begin
|
93
|
+
people = $global["client"].person_lookup(attrs)
|
94
|
+
_set_people(people)
|
95
|
+
rescue Exception => e
|
96
|
+
_print_msg "Error: Lookup: #{$!}"
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
def status_changed (status)
|
101
|
+
sensitive = status.active > 0
|
102
|
+
_get_widget("slabel_memberid").sensitive = sensitive
|
103
|
+
_get_widget("memberid").sensitive = sensitive
|
104
|
+
end
|
105
|
+
|
106
|
+
def image_button_release_event
|
107
|
+
dialog = Gtk::FileChooserDialog.new("Open File", nil, Gtk::FileChooser::ACTION_OPEN, nil, [Gtk::Stock::CANCEL, Gtk::Dialog::RESPONSE_CANCEL],[Gtk::Stock::OPEN, Gtk::Dialog::RESPONSE_ACCEPT])
|
108
|
+
if dialog.run == Gtk::Dialog::RESPONSE_ACCEPT
|
109
|
+
filename = dialog.filename
|
110
|
+
_get_widget("image").set = filename
|
111
|
+
# Upload filename naar server?
|
112
|
+
# Blob?
|
113
|
+
# lokaal saven in /usr/share?
|
114
|
+
# TODO!
|
115
|
+
end
|
116
|
+
dialog.destroy
|
117
|
+
end
|
118
|
+
|
119
|
+
# Private
|
120
|
+
private
|
121
|
+
def _create_people_rightclick_menu
|
122
|
+
# Creeer een menu
|
123
|
+
@people_view_menu = Gtk::Menu.new
|
124
|
+
people_view_menu_edit_item = Gtk::MenuItem.new("Edit")
|
125
|
+
people_view_menu_delete_item = Gtk::MenuItem.new("Delete")
|
126
|
+
people_view_menu_edit_item.signal_connect("activate") {
|
127
|
+
# Show selected Persoon
|
128
|
+
# Treeview heeft default Mode Gtk::SELECTION_SINGLE
|
129
|
+
@people_view.selection.selected_each { |model, path, iter| _show(iter[0]) }
|
130
|
+
}
|
131
|
+
|
132
|
+
# Delete de geselecteerde persoon
|
133
|
+
people_view_menu_delete_item.signal_connect("activate") {
|
134
|
+
@people_view.selection.selected_each { |model, path, iter|
|
135
|
+
_delete(iter[0],false)
|
136
|
+
model.remove(iter) # Verwijder uit de lijst
|
137
|
+
}
|
138
|
+
}
|
139
|
+
|
140
|
+
@people_view_menu.append(people_view_menu_edit_item)
|
141
|
+
@people_view_menu.append(people_view_menu_delete_item)
|
142
|
+
@people_view_menu.show_all
|
143
|
+
end
|
144
|
+
|
145
|
+
def _show (who)
|
146
|
+
@selected_person = who
|
147
|
+
|
148
|
+
begin
|
149
|
+
FIELDS.each {|n| _get_widget(n).text = who.send(n.to_sym).to_s }
|
150
|
+
|
151
|
+
ms = $global["client"].person_memberships(who.username)
|
152
|
+
|
153
|
+
|
154
|
+
if !ms.nil?
|
155
|
+
ms.sort! {|a, b| b.year <=> a.year }
|
156
|
+
if !ms.empty? and ms[0].year.to_i == Time.werkjaar
|
157
|
+
_get_widget("status").active = statussen.index(ms[0].status)
|
158
|
+
_get_widget("memberid").text = ms[0].barcode
|
159
|
+
ms.shift
|
160
|
+
else
|
161
|
+
_get_widget("status").active = 0
|
162
|
+
_get_widget("memberid").text = ""
|
163
|
+
end
|
164
|
+
|
165
|
+
end
|
166
|
+
|
167
|
+
model = _get_widget("past_view").model
|
168
|
+
model.clear
|
169
|
+
|
170
|
+
ms.each do |m|
|
171
|
+
row = model.append
|
172
|
+
row[0] = m.year.to_s
|
173
|
+
row[1] = m.status.to_s
|
174
|
+
row[2] = m.barcode.to_s
|
175
|
+
end
|
176
|
+
rescue Exception => e
|
177
|
+
_print_msg "Fout: Memberinfo: #{$!}"
|
178
|
+
_clear
|
179
|
+
end
|
180
|
+
|
181
|
+
end
|
182
|
+
|
183
|
+
def _delete(who, refresh = true)
|
184
|
+
begin
|
185
|
+
$global["client"].person_remove!({ :username => who.username })
|
186
|
+
_clear
|
187
|
+
_update_people if refresh
|
188
|
+
rescue Exception => e
|
189
|
+
_print_msg "Error: Delete: #{$!}"
|
190
|
+
else
|
191
|
+
_print_msg "Person deleted!"
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
def _clear
|
196
|
+
@selected_person = nil
|
197
|
+
(FIELDS + %w(memberid)).each {|n| _get_widget(n).text = "" }
|
198
|
+
_get_widget("status").active = 0
|
199
|
+
_get_widget("past_view").model.clear
|
200
|
+
_get_widget("first_name").grab_focus
|
201
|
+
end
|
202
|
+
|
203
|
+
|
204
|
+
def _save
|
205
|
+
data = {
|
206
|
+
:last_name => _get_widget("last_name").text,
|
207
|
+
:first_name => _get_widget("first_name").text,
|
208
|
+
:rolnr => _get_widget("rolnr").text,
|
209
|
+
:username => _get_widget("username").text,
|
210
|
+
:email => _get_widget("email").text,
|
211
|
+
:address => _get_widget("address").text,
|
212
|
+
:phone => _get_widget("phone").text,
|
213
|
+
:gsm => _get_widget("gsm").text,
|
214
|
+
:status => _get_widget("status").active_iter[1],
|
215
|
+
:memberid => _get_widget("memberid").text
|
216
|
+
}
|
217
|
+
if @selected_person.nil? or @selected_person.username != data[:username]
|
218
|
+
# Indien hij nog niet bestaat, aanmaken in de database
|
219
|
+
begin
|
220
|
+
answer = $global["client"].person_add! data
|
221
|
+
@selected_person = $global["client"].person_lookup("username" => data[:username])[0]
|
222
|
+
iter = _insert_person(@selected_person)
|
223
|
+
@people_view.selection.select_iter(iter)
|
224
|
+
rescue Exception => e
|
225
|
+
_print_msg "Fout: Toevoegen: #{$!}"
|
226
|
+
else
|
227
|
+
_print_msg "Persoon toegevoegd", answer
|
228
|
+
end
|
229
|
+
|
230
|
+
else
|
231
|
+
# Anders-> zorg voor update via people.real_id
|
232
|
+
begin
|
233
|
+
answer = $global["client"].person_update! data
|
234
|
+
@selected_person = $global["client"].person_lookup("username" => data[:username])[0]
|
235
|
+
iter = _insert_person(@selected_person)
|
236
|
+
@people_view.selection.select_iter(iter)
|
237
|
+
rescue Exception => e
|
238
|
+
_print_msg "Fout: Aanpassen: #{$!}"
|
239
|
+
else
|
240
|
+
_print_msg "Persoonsinformatie aangepast", answer
|
241
|
+
end
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
245
|
+
def _update_people(clear = true)
|
246
|
+
case _get_widget("query").active
|
247
|
+
when 1; sym = :person_debuggers
|
248
|
+
when 2; sym = :person_honorarymembers
|
249
|
+
when 3; sym = :person_members
|
250
|
+
when 4; sym = :person_nonmembers
|
251
|
+
else sym = :person_everybody
|
252
|
+
end
|
253
|
+
|
254
|
+
if clear
|
255
|
+
@people_store.clear
|
256
|
+
r = @people_store.append
|
257
|
+
r[0] = nil
|
258
|
+
r[1] = "Loading..."
|
259
|
+
end
|
260
|
+
people = $global["client"].send(sym)
|
261
|
+
_set_people(people)
|
262
|
+
end
|
263
|
+
|
264
|
+
def _set_people(people, clear = true)
|
265
|
+
people.sort! do |a,b|
|
266
|
+
x = a.last_name <=> b.last_name
|
267
|
+
x == 0 ? a.first_name <=> b.first_name : x
|
268
|
+
end
|
269
|
+
|
270
|
+
@people_view.model = nil
|
271
|
+
@people_store.clear if clear
|
272
|
+
|
273
|
+
people.each do |p|
|
274
|
+
row = @people_store.append
|
275
|
+
row[0] = p
|
276
|
+
row[1] = p.last_name + " " + p.first_name
|
277
|
+
end
|
278
|
+
|
279
|
+
@people_view.model = @people_store
|
280
|
+
end
|
281
|
+
|
282
|
+
def _print_msg (msg, extra_info = nil)
|
283
|
+
puts msg
|
284
|
+
puts " - #{extra_info}" if extra_info
|
285
|
+
@notification_label.text = msg
|
286
|
+
end
|
287
|
+
|
288
|
+
def _insert_person(person)
|
289
|
+
iter = @people_store.iter_first
|
290
|
+
while iter[0].last_name <= person.last_name and iter.next!
|
291
|
+
break if iter[0].username == person.username
|
292
|
+
1
|
293
|
+
end
|
294
|
+
|
295
|
+
p person
|
296
|
+
if iter[0].username == person.username
|
297
|
+
new = iter
|
298
|
+
new[0] = person
|
299
|
+
new[1] = "#{person.last_name} #{person.first_name}"
|
300
|
+
@people_store.row_changed(new.path, new)
|
301
|
+
puts "replaced #{new[1]}, (#{new.path})"
|
302
|
+
else
|
303
|
+
new = @people_store.insert_before(iter)
|
304
|
+
new[0] = person
|
305
|
+
new[1] = "#{person.last_name} #{person.first_name}"
|
306
|
+
@people_store.row_changed(new.path, new)
|
307
|
+
puts "inserted #{new[1]} before #{iter[1]}, (#{new.path})"
|
308
|
+
end
|
309
|
+
|
310
|
+
new
|
311
|
+
end
|
312
|
+
|
313
|
+
def _delete_person(person)
|
314
|
+
iter = @people_store.iter_first
|
315
|
+
while iter[0].last_name <= person.last_name and iter.next!
|
316
|
+
if iter[0].username == person.username
|
317
|
+
@people_store.remove(iter)
|
318
|
+
break
|
319
|
+
end
|
320
|
+
end
|
321
|
+
end
|
322
|
+
|
323
|
+
end
|
324
|
+
|
325
|
+
register_window(MembersWindow)
|
326
|
+
|
327
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Ig3tool
|
2
|
+
|
3
|
+
module_function
|
4
|
+
|
5
|
+
def messagebox(title,message)
|
6
|
+
|
7
|
+
overwrite = false
|
8
|
+
dialog = Gtk::MessageDialog.new(nil,
|
9
|
+
Gtk::Dialog::DESTROY_WITH_PARENT | Gtk::Dialog::MODAL,
|
10
|
+
Gtk::MessageDialog::QUESTION,
|
11
|
+
Gtk::MessageDialog::BUTTONS_YES_NO,
|
12
|
+
message)
|
13
|
+
dialog.title = title
|
14
|
+
dialog.run do |response|
|
15
|
+
case response
|
16
|
+
when Gtk::Dialog::RESPONSE_YES
|
17
|
+
overwrite = true
|
18
|
+
end
|
19
|
+
dialog.destroy
|
20
|
+
end
|
21
|
+
overwrite # Return overwrite? boolean -> true indien 'YES'
|
22
|
+
end
|
23
|
+
end
|