knjrbfw 0.0.46 → 0.0.47

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. data/VERSION +1 -1
  2. data/knjrbfw.gemspec +2 -2
  3. data/lib/knj/gtk2_tv.rb +112 -0
  4. metadata +3 -3
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.46
1
+ 0.0.47
data/knjrbfw.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{knjrbfw}
8
- s.version = "0.0.46"
8
+ s.version = "0.0.47"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Kasper Johansen"]
12
- s.date = %q{2012-06-11}
12
+ s.date = %q{2012-06-12}
13
13
  s.description = %q{Including stuff for HTTP, SSH and much more.}
14
14
  s.email = %q{k@spernj.org}
15
15
  s.extra_rdoc_files = [
data/lib/knj/gtk2_tv.rb CHANGED
@@ -48,6 +48,7 @@ module Knj::Gtk2::Tv
48
48
  col.add_attribute(renderer, :text, count)
49
49
 
50
50
  renderer.model = args[:model] if args.key?(:model)
51
+ renderer.has_entry = args[:has_entry] if args.key?(:has_entry)
51
52
  tv.append_column(col)
52
53
  else
53
54
  raise "Invalid type: '#{args[:type]}'."
@@ -104,6 +105,117 @@ module Knj::Gtk2::Tv
104
105
 
105
106
  return returnval
106
107
  end
108
+
109
+ @@editable_text_callbacks = {
110
+ :datetime => {
111
+ :value => proc{ |data|
112
+ begin
113
+ Knj::Datet.in(data[:value]).dbstr
114
+ rescue Knj::Errors::InvalidData
115
+ raise "Invalid timestamp entered."
116
+ end
117
+ },
118
+ :value_set => proc{ |data|
119
+ Knj::Datet.in(data[:value]).out
120
+ }
121
+ },
122
+ :time_as_sec => {
123
+ :value => proc{ |data| Knj::Strings.human_time_str_to_secs(data[:value]) },
124
+ :value_set => proc{ |data| Knj::Strings.secs_to_human_time_str(data[:value]) }
125
+ },
126
+ :int => {
127
+ :value => proc{ |data| data[:value].to_i.to_s }
128
+ },
129
+ :human_number => {
130
+ :value => proc{ |data| Knj::Locales.number_in(data[:value]) },
131
+ :value_set => proc{ |data| Knj::Locales.number_out(data[:value], data[:col_data][:decimals]) }
132
+ }
133
+ }
134
+
135
+ def self.editable_text_renderers_to_model(args)
136
+ args[:id_col] = 0 if !args.key?(:id_col)
137
+
138
+ args[:cols].each do |col_no, col_data|
139
+ col_data = {:col => col_data} if col_data.is_a?(Symbol)
140
+
141
+ if col_data.key?(:type)
142
+ if callbacks = @@editable_text_callbacks[col_data[:type]]
143
+ col_data[:value_callback] = callbacks[:value] if callbacks.key?(:value)
144
+ col_data[:value_set_callback] = callbacks[:value_set] if callbacks.key?(:value_set)
145
+ else
146
+ raise "Invalid type: '#{col_data[:type]}'."
147
+ end
148
+ end
149
+
150
+ renderer = args[:renderers][col_no]
151
+
152
+ if renderer.is_a?(Gtk::CellRendererText)
153
+ renderer.editable = true
154
+ renderer.signal_connect("edited") do |renderer, row_no, value|
155
+ iter = args[:tv].model.get_iter(row_no)
156
+ id = args[:tv].model.get_value(iter, args[:id_col])
157
+ model_obj = args[:ob].get(args[:model_class], id)
158
+ cancel = false
159
+
160
+ if col_data[:value_callback]
161
+ begin
162
+ value = col_data[:value_callback].call(:args => args, :value => value, :model => model_obj, :col_no => col_no, :col_data => col_data)
163
+ rescue => e
164
+ Knj::Gtk2.msgbox(e.message, "warning")
165
+ cancel = true
166
+ end
167
+ end
168
+
169
+ if !cancel
170
+ args[:change_before].call if args[:change_before]
171
+
172
+ begin
173
+ model_obj[col_data[:col]] = value
174
+ value = col_data[:value_set_callback].call(:args => args, :value => value, :model => model_obj, :col_no => col_no, :col_data => col_data) if col_data.key?(:value_set_callback)
175
+ iter[col_no] = value
176
+ rescue => e
177
+ Knj::Gtk2.msgbox(e.message, "warning")
178
+ ensure
179
+ args[:change_after].call(:args => args) if args[:change_after]
180
+ end
181
+ end
182
+ end
183
+ elsif renderer.is_a?(Gtk::CellRendererToggle)
184
+ renderer.activatable = true
185
+ renderer.signal_connect("toggled") do |renderer, path, val|
186
+ iter = args[:tv].model.get_iter(path)
187
+ id = args[:tv].model.get_value(iter, 0)
188
+ model_obj = args[:ob].get(args[:model_class], id)
189
+
190
+ if col_data[:value_callback]
191
+ begin
192
+ value = col_data[:value_callback].call(:args => args, :value => value, :model => model_obj, :col_no => col_no, :col_data => col_data)
193
+ rescue => e
194
+ Knj::Gtk2.msgbox(e.message, "warning")
195
+ cancel = true
196
+ end
197
+ end
198
+
199
+ if !cancel
200
+ args[:change_before].call if args[:change_before]
201
+ begin
202
+ if model_obj[col_data[:col]].to_i == 1
203
+ model_obj[col_data[:col]] = 0
204
+ iter[col_no] = 0
205
+ else
206
+ model_obj[col_data[:col]] = 1
207
+ iter[col_no] = 1
208
+ end
209
+ ensure
210
+ args[:change_after].call(:args => args) if args[:change_after]
211
+ end
212
+ end
213
+ end
214
+ else
215
+ raise "Invalid cellrenderer: '#{renderer.class.name}'."
216
+ end
217
+ end
218
+ end
107
219
  end
108
220
 
109
221
  class Gtk::TreeView
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: knjrbfw
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.46
5
+ version: 0.0.47
6
6
  platform: ruby
7
7
  authors:
8
8
  - Kasper Johansen
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2012-06-11 00:00:00 +02:00
13
+ date: 2012-06-12 00:00:00 +02:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -379,7 +379,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
379
379
  requirements:
380
380
  - - ">="
381
381
  - !ruby/object:Gem::Version
382
- hash: -3622671606985967169
382
+ hash: -3151714353965357285
383
383
  segments:
384
384
  - 0
385
385
  version: "0"