ig3tool 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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>