ig3tool 0.1.0 → 0.2.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.
Files changed (60) hide show
  1. data/bin/ig3tool +17 -21
  2. data/lib/actions/bib.rb +295 -0
  3. data/lib/actions/bitching.rb +19 -0
  4. data/lib/actions/cultuur.rb +3 -0
  5. data/lib/actions/interne.rb +98 -0
  6. data/lib/actions/kaching.rb +90 -0
  7. data/lib/actions/people.rb +178 -0
  8. data/lib/actions/printing.rb +125 -0
  9. data/lib/actions/product.rb +154 -0
  10. data/lib/bib.rb +94 -0
  11. data/lib/billing.rb +112 -0
  12. data/lib/bitching.rb +49 -0
  13. data/lib/config.rb +19 -0
  14. data/lib/glade/cola_light_small.png +0 -0
  15. data/lib/glade/cola_light_xsmall.png +0 -0
  16. data/lib/glade/cola_small.png +0 -0
  17. data/lib/glade/cola_xsmall.png +0 -0
  18. data/lib/glade/doos_small.png +0 -0
  19. data/lib/glade/doos_xsmall.png +0 -0
  20. data/lib/glade/icons/cola_light_small.png +0 -0
  21. data/lib/glade/icons/cola_light_xsmall.png +0 -0
  22. data/lib/glade/icons/cola_small.png +0 -0
  23. data/lib/glade/icons/cola_xsmall.png +0 -0
  24. data/lib/glade/icons/doos_small.png +0 -0
  25. data/lib/glade/icons/doos_xsmall.png +0 -0
  26. data/lib/glade/icons/piggy_small.png +0 -0
  27. data/lib/glade/icons/piggy_xsmall.png +0 -0
  28. data/lib/glade/money_small.png +0 -0
  29. data/lib/glade/money_xsmall.png +0 -0
  30. data/lib/glade/newinterne.glade +504 -0
  31. data/lib/glade/piggy_small.png +0 -0
  32. data/lib/glade/piggy_xsmall.png +0 -0
  33. data/lib/glade/sales.glade +89 -87
  34. data/lib/horrible_hack.rb +15 -0
  35. data/lib/interne.rb +111 -0
  36. data/lib/ldap.rb +104 -0
  37. data/lib/log.rb +25 -0
  38. data/lib/membership.rb +32 -0
  39. data/lib/mymd5.rb +95 -0
  40. data/lib/people.rb +143 -0
  41. data/lib/printing.rb +238 -0
  42. data/lib/request.rb +14 -0
  43. data/lib/sales.rb +158 -0
  44. data/lib/ui/automaatwindow.rb +2 -2
  45. data/lib/ui/bibliotheekwindow.rb +16 -17
  46. data/lib/ui/bibwindow.rb +15 -15
  47. data/lib/ui/gladehelper.rb +20 -6
  48. data/lib/ui/internewindow.rb +12 -9
  49. data/lib/ui/loginwindow.rb +2 -4
  50. data/lib/ui/memberswindow.rb +9 -9
  51. data/lib/ui/newinterne.rb +258 -0
  52. data/lib/ui/peoplewindow.rb +14 -16
  53. data/lib/ui/printenwindow.rb +11 -11
  54. data/lib/ui/printingwindow.rb +19 -20
  55. data/lib/ui/productswindow.rb +27 -15
  56. data/lib/ui/saleswindow.rb +21 -8
  57. data/lib/ui/toolwindow.rb +5 -3
  58. data/lib/utils.rb +106 -0
  59. data/lib/web.rb +98 -0
  60. metadata +48 -3
data/lib/bib.rb ADDED
@@ -0,0 +1,94 @@
1
+ module Ig3tool
2
+
3
+ class BibSection < ActiveRecord::Base
4
+
5
+ set_table_name "bib_sections"
6
+ set_nonauto_primary_key :name
7
+
8
+ validates_presence_of :name, :full_name
9
+
10
+ validates_uniqueness_of :name
11
+
12
+ has_many :books,
13
+ :class_name => "BibBook",
14
+ :foreign_key => "section"
15
+
16
+ end
17
+
18
+ class BibBook < ActiveRecord::Base
19
+
20
+ set_table_name "bib_books"
21
+ set_nonauto_primary_key :isbn
22
+
23
+ validates_presence_of :isbn,
24
+ :title,
25
+ :author,
26
+ :publisher,
27
+ :section
28
+
29
+ validates_each :section do |record, attr, value|
30
+ begin
31
+ BibSection.find(value)
32
+ rescue
33
+ record.errors.add attr, "Invalid section: '#{value}'"
34
+ false
35
+ end
36
+ end
37
+
38
+ has_many :loans,
39
+ :class_name => "BibLoan",
40
+ :foreign_key => "isbn"
41
+
42
+ def available?
43
+ available > 0
44
+ end
45
+
46
+ def available
47
+ copies - loans.length
48
+ end
49
+
50
+ # ISBN-13 -> ISBN-10
51
+ def self._isbn13(code)
52
+ raise "Invalid ISBN-10 number!" if code.length != 10
53
+ code.chop!
54
+ code = "978" + code
55
+
56
+ sum = 0
57
+ code.split(//).each_with_index do |c, i|
58
+ sum += c.to_i * ( i % 2 == 0 ? 1 : 3 )
59
+ end
60
+
61
+ rem = sum % 10
62
+ check = (rem == 0) ? 0 : 10 - rem
63
+
64
+ code = code + check.to_s
65
+ end
66
+
67
+ # ISBN-10 -> ISBN-13
68
+ def self._isbn10(code)
69
+ raise "Invalid ISBN-13 number!" if code.length != 13
70
+ code = code[3..11]
71
+
72
+ sum = 0
73
+ 9.times {|i| sum += code[i].chr.to_i * (10 - i) }
74
+
75
+ check = 11 - sum % 11
76
+ check = 0 if sum == 0
77
+ check = 'X' if check == 10
78
+ code = code + check.to_s
79
+ end
80
+
81
+ end
82
+
83
+ class BibLoan < ActiveRecord::Base
84
+
85
+ set_table_name "bib_loans"
86
+
87
+ validates_presence_of :isbn,
88
+ :member_id,
89
+ :warranty,
90
+ :loan_date
91
+
92
+ end
93
+
94
+ end
data/lib/billing.rb ADDED
@@ -0,0 +1,112 @@
1
+ module Ig3tool
2
+
3
+ #
4
+ # Handige documentatie:
5
+ #
6
+ # Lesk, M.E.: "TBL -- A Program to Format Tables"
7
+ # http://www.cs.bell-labs.com/10thEdMan/tbl.pdf
8
+ #
9
+ # PIC -- A Graphics Language for Typesetting, Brian Kernighan
10
+ # http://www.cs.bell-labs.com/cm/cs/cstr/116.ps.gz
11
+ #
12
+
13
+ # dit is het billing gedoe
14
+ # om een fancy factuur uit te printen
15
+ # again thx to Peter
16
+
17
+
18
+ CONFIG = { 'groff' => 'groff -ma4 -p -t | gv -',
19
+ 'groff_alt' => 'groff -ma4 -p -t -l -L-Pigprint@igwe' }
20
+
21
+
22
+ class Sales
23
+
24
+ def printout debugger
25
+ return if @sales.empty?
26
+
27
+ p = Person.find(:first, :conditions => ['username=?', debugger])
28
+ return unless p
29
+ debugger = p.firstname + " " + p.lastname
30
+ date = dutch_date
31
+
32
+ def to_groff (str)
33
+ gr = ''
34
+ str.unpack('U*').each do |c|
35
+ gr += c < 256 ? c.chr : sprintf('\[u%04X]', c)
36
+ end
37
+ return gr
38
+ end
39
+
40
+ groff = IO.popen(CONFIG["groff"], "w")
41
+ groff.print <<EOF
42
+
43
+
44
+
45
+
46
+
47
+ .TS
48
+ box, expand ;
49
+ l r
50
+ ^ r .
51
+ T{
52
+ Infogroep
53
+ p/a Faculteit Wetenschappen
54
+ lokaal 1E8, tel. 02/629 33 56
55
+ Vrije Universiteit Brussel
56
+ T}\tBrussel, #{date}
57
+ \tT{
58
+ .PS
59
+ B: box height 1 width 3.3
60
+ .ps 8
61
+ " stempel" at B.sw above ljust
62
+ .ps 10
63
+ .PE
64
+ T}
65
+
66
+
67
+
68
+ .TE
69
+ .TS
70
+ box, expand ;
71
+ l | c | c
72
+ l | n | n .
73
+ Omschrijving artikels\tAantal\tPrijs
74
+ _
75
+ EOF
76
+
77
+ each do |s|
78
+ groff.printf("%s\t%d\t%.2f\n", to_groff(s.product.name), s.count, s.price)
79
+ end
80
+
81
+ groff.print <<EOF
82
+ _
83
+ .T&
84
+ l s nB .
85
+ T{
86
+
87
+
88
+ Voor Infogroep,
89
+
90
+
91
+
92
+ #{to_groff(debugger)}
93
+ T}\t#{sprintf '%.2f', total_price}
94
+ .TE
95
+ EOF
96
+
97
+ groff.close
98
+ end
99
+
100
+ def dutch_date
101
+ months = %w(_ januari februari maart april mei juni juli
102
+ augustus september oktober november december)
103
+ days = %w(zondag maandag dinsdag woensdag donderdag
104
+ vrijdag zaterdag zondag)
105
+ t = Time.now
106
+ "#{days[t.wday]} #{t.day} #{months[t.month]} #{t.year}"
107
+ end
108
+ private :dutch_date
109
+
110
+ end
111
+
112
+ end
data/lib/bitching.rb ADDED
@@ -0,0 +1,49 @@
1
+ require 'digest/md5'
2
+
3
+ module Ig3tool
4
+
5
+ class Bitch < ActiveRecord::Base
6
+
7
+ set_table_name "bitches"
8
+
9
+ validates_presence_of :crap, :bitch
10
+
11
+ validates_uniqueness_of :crap
12
+
13
+ def self.lookup(crap)
14
+ Bitch.find(:first, :conditions => ["crap = ?", crap])
15
+ end
16
+
17
+ def self.bitch(crap)
18
+ Bitch.lookup(crap).bitch
19
+ end
20
+
21
+ def log_request(request)
22
+ r = Request.new
23
+ r.bitch = self.bitch
24
+ r.request = request
25
+ r.save
26
+ end
27
+
28
+ def self.can_request?(crap)
29
+ not Bitch.lookup(crap).nil?
30
+ end
31
+
32
+ def self.wannabe(user, pass)
33
+ # check if user isa ldap user
34
+ # generate some sort of token to auth with
35
+ raise Token, "you don't know the magic word..." unless IGLDAP.bitchke?(user, pass)
36
+ b = Bitch.new
37
+ b.bitch = user
38
+ #b.crap = user.crypt("$1$" + Time.now.strftime("%S%M"))
39
+ b.crap = Digest::MD5.hexdigest(user + Time.now.to_s)
40
+ b.save!
41
+ b.crap
42
+ end
43
+
44
+ end
45
+
46
+ end
47
+
48
+
49
+
data/lib/config.rb ADDED
@@ -0,0 +1,19 @@
1
+ module Ig3tool
2
+
3
+ require 'yaml'
4
+
5
+ class Config
6
+ def Config.load(file)
7
+ begin
8
+ @@file = YAML.load_file(file)
9
+ rescue SystemCallError => boom
10
+ abort "Kon config file niet laden: #{boom.message}"
11
+ end
12
+ end
13
+
14
+ def Config.[](attribute)
15
+ @@file[attribute]
16
+ end
17
+ end
18
+
19
+ end
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,504 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
3
+ <!--Generated with glade3 3.4.1 on Fri Mar 21 11:27:19 2008 -->
4
+ <glade-interface>
5
+ <widget class="GtkWindow" id="window">
6
+ <property name="visible">True</property>
7
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
8
+ <property name="border_width">5</property>
9
+ <property name="title" translatable="yes">ig3tool - members</property>
10
+ <property name="default_width">500</property>
11
+ <property name="default_height">500</property>
12
+ <property name="icon">members_xklein.png</property>
13
+ <property name="icon_name">printingicon</property>
14
+ <property name="gravity">GDK_GRAVITY_CENTER</property>
15
+ <child>
16
+ <widget class="GtkAlignment" id="alignment1">
17
+ <property name="visible">True</property>
18
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
19
+ <property name="border_width">5</property>
20
+ <child>
21
+ <widget class="GtkFrame" id="credits">
22
+ <property name="visible">True</property>
23
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
24
+ <property name="border_width">1</property>
25
+ <property name="label_xalign">0</property>
26
+ <property name="shadow_type">GTK_SHADOW_NONE</property>
27
+ <child>
28
+ <widget class="GtkAlignment" id="alignment1">
29
+ <property name="visible">True</property>
30
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
31
+ <property name="top_padding">20</property>
32
+ <property name="left_padding">5</property>
33
+ <property name="right_padding">5</property>
34
+ <child>
35
+ <widget class="GtkVBox" id="vbox1">
36
+ <property name="visible">True</property>
37
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
38
+ <child>
39
+ <widget class="GtkAlignment" id="alignment2">
40
+ <property name="visible">True</property>
41
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
42
+ <child>
43
+ <widget class="GtkVBox" id="vbox2">
44
+ <property name="visible">True</property>
45
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
46
+ <child>
47
+ <widget class="GtkAlignment" id="alignment7">
48
+ <property name="visible">True</property>
49
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
50
+ <child>
51
+ <widget class="GtkHBox" id="hbox1">
52
+ <property name="visible">True</property>
53
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
54
+ <child>
55
+ <widget class="GtkAlignment" id="alignment9">
56
+ <property name="visible">True</property>
57
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
58
+ <property name="right_padding">5</property>
59
+ <child>
60
+ <widget class="GtkComboBox" id="fromcombo">
61
+ <property name="visible">True</property>
62
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
63
+ <signal name="changed" handler="fromchange"/>
64
+ </widget>
65
+ </child>
66
+ </widget>
67
+ </child>
68
+ <child>
69
+ <widget class="GtkAlignment" id="alignment10">
70
+ <property name="visible">True</property>
71
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
72
+ <child>
73
+ <widget class="GtkButton" id="sendbutton">
74
+ <property name="visible">True</property>
75
+ <property name="can_focus">True</property>
76
+ <property name="receives_default">True</property>
77
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
78
+ <property name="tooltip" translatable="yes">toss money from left to right</property>
79
+ <property name="response_id">0</property>
80
+ <signal name="clicked" handler="tossmoney"/>
81
+ <signal name="activate" handler="tossmoney"/>
82
+ <child>
83
+ <widget class="GtkImage" id="image2">
84
+ <property name="visible">True</property>
85
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
86
+ <property name="stock">gtk-go-forward</property>
87
+ </widget>
88
+ </child>
89
+ </widget>
90
+ </child>
91
+ </widget>
92
+ <packing>
93
+ <property name="expand">False</property>
94
+ <property name="padding">5</property>
95
+ <property name="position">1</property>
96
+ </packing>
97
+ </child>
98
+ <child>
99
+ <widget class="GtkAlignment" id="alignment11">
100
+ <property name="visible">True</property>
101
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
102
+ <property name="left_padding">5</property>
103
+ <child>
104
+ <widget class="GtkComboBox" id="tocombo">
105
+ <property name="visible">True</property>
106
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
107
+ <signal name="changed" handler="tochange"/>
108
+ </widget>
109
+ </child>
110
+ </widget>
111
+ <packing>
112
+ <property name="position">2</property>
113
+ </packing>
114
+ </child>
115
+ </widget>
116
+ </child>
117
+ </widget>
118
+ </child>
119
+ <child>
120
+ <widget class="GtkAlignment" id="alignment9">
121
+ <property name="visible">True</property>
122
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
123
+ <property name="top_padding">10</property>
124
+ <child>
125
+ <widget class="GtkLabel" id="action">
126
+ <property name="visible">True</property>
127
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
128
+ <property name="label" translatable="yes">the imps are &lt;b&gt;procrastinating&lt;/b&gt;...</property>
129
+ <property name="use_markup">True</property>
130
+ </widget>
131
+ </child>
132
+ </widget>
133
+ <packing>
134
+ <property name="position">1</property>
135
+ </packing>
136
+ </child>
137
+ </widget>
138
+ </child>
139
+ </widget>
140
+ <packing>
141
+ <property name="expand">False</property>
142
+ </packing>
143
+ </child>
144
+ <child>
145
+ <widget class="GtkAlignment" id="alignment3">
146
+ <property name="visible">True</property>
147
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
148
+ <property name="top_padding">5</property>
149
+ <property name="bottom_padding">10</property>
150
+ <child>
151
+ <widget class="GtkHSeparator" id="hseparator1">
152
+ <property name="visible">True</property>
153
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
154
+ </widget>
155
+ </child>
156
+ </widget>
157
+ <packing>
158
+ <property name="expand">False</property>
159
+ <property name="position">1</property>
160
+ </packing>
161
+ </child>
162
+ <child>
163
+ <widget class="GtkAlignment" id="alignment4">
164
+ <property name="visible">True</property>
165
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
166
+ <property name="xalign">1</property>
167
+ <child>
168
+ <widget class="GtkHBox" id="hbox2">
169
+ <property name="visible">True</property>
170
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
171
+ <child>
172
+ <widget class="GtkAlignment" id="alignment15">
173
+ <property name="visible">True</property>
174
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
175
+ <child>
176
+ <widget class="GtkVBox" id="vbox5">
177
+ <property name="visible">True</property>
178
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
179
+ <property name="spacing">5</property>
180
+ <child>
181
+ <widget class="GtkAlignment" id="alignment20">
182
+ <property name="visible">True</property>
183
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
184
+ <property name="right_padding">5</property>
185
+ <child>
186
+ <widget class="GtkLabel" id="label8">
187
+ <property name="visible">True</property>
188
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
189
+ <property name="xalign">1</property>
190
+ </widget>
191
+ </child>
192
+ </widget>
193
+ </child>
194
+ <child>
195
+ <widget class="GtkAlignment" id="alignment21">
196
+ <property name="visible">True</property>
197
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
198
+ <child>
199
+ <widget class="GtkLabel" id="label9">
200
+ <property name="visible">True</property>
201
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
202
+ <property name="xalign">1</property>
203
+ <property name="xpad">5</property>
204
+ </widget>
205
+ </child>
206
+ </widget>
207
+ <packing>
208
+ <property name="position">1</property>
209
+ </packing>
210
+ </child>
211
+ <child>
212
+ <widget class="GtkAlignment" id="alignment22">
213
+ <property name="visible">True</property>
214
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
215
+ <child>
216
+ <widget class="GtkLabel" id="label10">
217
+ <property name="visible">True</property>
218
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
219
+ <property name="xalign">1</property>
220
+ <property name="xpad">5</property>
221
+ </widget>
222
+ </child>
223
+ </widget>
224
+ <packing>
225
+ <property name="position">2</property>
226
+ </packing>
227
+ </child>
228
+ </widget>
229
+ </child>
230
+ </widget>
231
+ </child>
232
+ <child>
233
+ <widget class="GtkAlignment" id="alignment12">
234
+ <property name="visible">True</property>
235
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
236
+ <child>
237
+ <widget class="GtkVBox" id="vbox3">
238
+ <property name="visible">True</property>
239
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
240
+ <property name="spacing">5</property>
241
+ <child>
242
+ <widget class="GtkAlignment" id="alignment12">
243
+ <property name="visible">True</property>
244
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
245
+ <property name="right_padding">5</property>
246
+ <child>
247
+ <widget class="GtkLabel" id="label3">
248
+ <property name="visible">True</property>
249
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
250
+ <property name="xalign">1</property>
251
+ <property name="label" translatable="yes">current saldo:</property>
252
+ </widget>
253
+ </child>
254
+ </widget>
255
+ </child>
256
+ <child>
257
+ <widget class="GtkAlignment" id="alignment13">
258
+ <property name="visible">True</property>
259
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
260
+ <child>
261
+ <widget class="GtkLabel" id="label4">
262
+ <property name="visible">True</property>
263
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
264
+ <property name="xalign">1</property>
265
+ <property name="xpad">5</property>
266
+ <property name="label" translatable="yes">amount:</property>
267
+ </widget>
268
+ </child>
269
+ </widget>
270
+ <packing>
271
+ <property name="position">1</property>
272
+ </packing>
273
+ </child>
274
+ <child>
275
+ <widget class="GtkAlignment" id="alignment14">
276
+ <property name="visible">True</property>
277
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
278
+ <child>
279
+ <widget class="GtkLabel" id="label5">
280
+ <property name="visible">True</property>
281
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
282
+ <property name="xalign">1</property>
283
+ <property name="xpad">5</property>
284
+ <property name="label" translatable="yes">message:</property>
285
+ </widget>
286
+ </child>
287
+ </widget>
288
+ <packing>
289
+ <property name="position">2</property>
290
+ </packing>
291
+ </child>
292
+ </widget>
293
+ </child>
294
+ </widget>
295
+ <packing>
296
+ <property name="expand">False</property>
297
+ <property name="position">1</property>
298
+ </packing>
299
+ </child>
300
+ <child>
301
+ <widget class="GtkAlignment" id="alignment13">
302
+ <property name="visible">True</property>
303
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
304
+ <property name="xalign">1</property>
305
+ <child>
306
+ <widget class="GtkVBox" id="vbox3">
307
+ <property name="visible">True</property>
308
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
309
+ <property name="spacing">5</property>
310
+ <child>
311
+ <widget class="GtkAlignment" id="alignment12">
312
+ <property name="visible">True</property>
313
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
314
+ <property name="xalign">1</property>
315
+ <child>
316
+ <widget class="GtkEntry" id="saldo">
317
+ <property name="visible">True</property>
318
+ <property name="sensitive">False</property>
319
+ <property name="can_focus">True</property>
320
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
321
+ <property name="xalign">1</property>
322
+ </widget>
323
+ </child>
324
+ </widget>
325
+ </child>
326
+ <child>
327
+ <widget class="GtkAlignment" id="alignment13">
328
+ <property name="visible">True</property>
329
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
330
+ <property name="xalign">1</property>
331
+ <child>
332
+ <widget class="GtkEntry" id="amount">
333
+ <property name="visible">True</property>
334
+ <property name="can_focus">True</property>
335
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
336
+ <property name="xalign">1</property>
337
+ </widget>
338
+ </child>
339
+ </widget>
340
+ <packing>
341
+ <property name="position">1</property>
342
+ </packing>
343
+ </child>
344
+ <child>
345
+ <widget class="GtkAlignment" id="alignment14">
346
+ <property name="visible">True</property>
347
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
348
+ <property name="xalign">1</property>
349
+ <child>
350
+ <widget class="GtkEntry" id="message">
351
+ <property name="visible">True</property>
352
+ <property name="can_focus">True</property>
353
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
354
+ </widget>
355
+ </child>
356
+ </widget>
357
+ <packing>
358
+ <property name="position">2</property>
359
+ </packing>
360
+ </child>
361
+ </widget>
362
+ </child>
363
+ </widget>
364
+ <packing>
365
+ <property name="position">2</property>
366
+ </packing>
367
+ </child>
368
+ </widget>
369
+ </child>
370
+ </widget>
371
+ <packing>
372
+ <property name="expand">False</property>
373
+ <property name="position">2</property>
374
+ </packing>
375
+ </child>
376
+ <child>
377
+ <widget class="GtkAlignment" id="alignment16">
378
+ <property name="visible">True</property>
379
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
380
+ <property name="xalign">1</property>
381
+ <property name="xscale">0</property>
382
+ <property name="top_padding">5</property>
383
+ <child>
384
+ <widget class="GtkButton" id="button1">
385
+ <property name="width_request">100</property>
386
+ <property name="visible">True</property>
387
+ <property name="can_focus">True</property>
388
+ <property name="receives_default">True</property>
389
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
390
+ <property name="label" translatable="yes">gtk-refresh</property>
391
+ <property name="use_stock">True</property>
392
+ <property name="response_id">0</property>
393
+ <signal name="clicked" handler="refresh"/>
394
+ <signal name="activate" handler="refresh"/>
395
+ </widget>
396
+ </child>
397
+ </widget>
398
+ <packing>
399
+ <property name="expand">False</property>
400
+ <property name="fill">False</property>
401
+ <property name="position">3</property>
402
+ </packing>
403
+ </child>
404
+ <child>
405
+ <widget class="GtkAlignment" id="alignment5">
406
+ <property name="visible">True</property>
407
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
408
+ <property name="top_padding">10</property>
409
+ <property name="bottom_padding">10</property>
410
+ <child>
411
+ <widget class="GtkHSeparator" id="hseparator3">
412
+ <property name="visible">True</property>
413
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
414
+ </widget>
415
+ </child>
416
+ </widget>
417
+ <packing>
418
+ <property name="expand">False</property>
419
+ <property name="position">4</property>
420
+ </packing>
421
+ </child>
422
+ <child>
423
+ <widget class="GtkAlignment" id="alignment6">
424
+ <property name="visible">True</property>
425
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
426
+ <child>
427
+ <widget class="GtkScrolledWindow" id="scrolledwindow1">
428
+ <property name="visible">True</property>
429
+ <property name="can_focus">True</property>
430
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
431
+ <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
432
+ <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
433
+ <property name="shadow_type">GTK_SHADOW_IN</property>
434
+ <child>
435
+ <widget class="GtkTreeView" id="transactions">
436
+ <property name="visible">True</property>
437
+ <property name="can_focus">True</property>
438
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
439
+ <property name="enable_search">False</property>
440
+ </widget>
441
+ </child>
442
+ </widget>
443
+ </child>
444
+ </widget>
445
+ <packing>
446
+ <property name="position">5</property>
447
+ </packing>
448
+ </child>
449
+ <child>
450
+ <widget class="GtkAlignment" id="alignment8">
451
+ <property name="visible">True</property>
452
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
453
+ <property name="top_padding">10</property>
454
+ <child>
455
+ <widget class="GtkLabel" id="notification">
456
+ <property name="visible">True</property>
457
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
458
+ <property name="xalign">1</property>
459
+ </widget>
460
+ </child>
461
+ </widget>
462
+ <packing>
463
+ <property name="expand">False</property>
464
+ <property name="position">6</property>
465
+ </packing>
466
+ </child>
467
+ </widget>
468
+ </child>
469
+ </widget>
470
+ </child>
471
+ <child>
472
+ <widget class="GtkHBox" id="hbox3">
473
+ <property name="visible">True</property>
474
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
475
+ <child>
476
+ <widget class="GtkImage" id="image3">
477
+ <property name="visible">True</property>
478
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
479
+ <property name="pixbuf">piggy_small.png</property>
480
+ </widget>
481
+ </child>
482
+ <child>
483
+ <widget class="GtkLabel" id="label1">
484
+ <property name="visible">True</property>
485
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
486
+ <property name="xpad">5</property>
487
+ <property name="label" translatable="yes">ig3tool&lt;b&gt;interne&lt;/b&gt;</property>
488
+ <property name="use_markup">True</property>
489
+ </widget>
490
+ <packing>
491
+ <property name="position">1</property>
492
+ </packing>
493
+ </child>
494
+ </widget>
495
+ <packing>
496
+ <property name="type">label_item</property>
497
+ </packing>
498
+ </child>
499
+ </widget>
500
+ </child>
501
+ </widget>
502
+ </child>
503
+ </widget>
504
+ </glade-interface>