openall_time_applet 0.0.10 → 0.0.11

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.10
1
+ 0.0.11
@@ -7,8 +7,8 @@
7
7
  <property name="can_focus">False</property>
8
8
  <property name="title" translatable="yes">Timelog list</property>
9
9
  <property name="window_position">center</property>
10
- <property name="default_width">640</property>
11
- <property name="default_height">480</property>
10
+ <property name="default_width">1000</property>
11
+ <property name="default_height">800</property>
12
12
  <signal name="destroy" handler="on_window_destroy" swapped="no"/>
13
13
  <child>
14
14
  <object class="GtkVBox" id="vbox1">
data/gui/win_overview.rb CHANGED
@@ -15,115 +15,74 @@ class Openall_time_applet::Gui::Win_overview
15
15
  iter[0] = _("None")
16
16
  iter[1] = 0.to_s
17
17
 
18
- task_ls_to_id = []
19
-
20
18
  @args[:oata].ob.list(:Task, {"orderby" => "title"}) do |task|
21
19
  iter = task_ls.append
22
20
  iter[0] = task[:title]
23
21
  iter[1] = task.id.to_s
24
- task_ls_to_id << task.id
25
22
  end
26
23
 
27
24
  init_data = @gui["tvTimelogs"].init([
28
25
  _("ID"),
29
26
  _("Description"),
27
+ _("Timestamp"),
30
28
  _("Time"),
31
29
  _("Transport"),
30
+ _("Length"),
31
+ _("Transport descr."),
32
+ _("Transport costs"),
33
+ {
34
+ :title => _("Fixed travel"),
35
+ :type => :toggle
36
+ },
37
+ {
38
+ :title => _("Int. work"),
39
+ :type => :toggle
40
+ },
32
41
  {
33
- :title => _("Needs sync"),
42
+ :title => _("Sync?"),
34
43
  :type => :toggle
35
44
  },
36
45
  {
37
46
  :title => _("Task"),
38
47
  :type => :combo,
39
- :model => task_ls
48
+ :model => task_ls,
49
+ :has_entry => false
40
50
  }
41
51
  ])
42
52
 
43
-
44
- #Set description to be editable.
45
- init_data[:renderers][1].editable = true
46
- init_data[:renderers][1].signal_connect("edited") do |renderer, row, var|
47
- sel = @gui["tvTimelogs"].sel
48
- timelog = @args[:oata].ob.get(:Timelog, sel[0])
49
-
50
- begin
51
- timelog[:descr] = var
52
- rescue => e
53
- Knj::Gtk2.msgbox(e.message, "warning")
54
- end
55
- end
56
-
57
- #Set time to be editable.
58
- init_data[:renderers][2].editable = true
59
- init_data[:renderers][2].signal_connect("edited") do |renderer, row, var|
60
- sel = @gui["tvTimelogs"].sel
61
- timelog = @args[:oata].ob.get(:Timelog, sel[0])
62
-
63
- begin
64
- time_secs = Knj::Strings.human_time_str_to_secs(var)
65
- rescue
66
- Knj::Gtk2.msgbox(_("Invalid time entered."))
67
- return nil
68
- end
69
-
70
- begin
71
- timelog[:time] = time_secs
72
- rescue => e
73
- Knj::Gtk2.msgbox(e.message, "warning")
74
- end
75
- end
76
-
77
- #Set transport to be editable.
78
- init_data[:renderers][3].editable = true
79
- init_data[:renderers][3].signal_connect("edited") do |renderer, row, var|
80
- sel = @gui["tvTimelogs"].sel
81
- timelog = @args[:oata].ob.get(:Timelog, sel[0])
82
-
83
- begin
84
- time_secs = Knj::Strings.human_time_str_to_secs(var)
85
- rescue
86
- Knj::Gtk2.msgbox(_("Invalid time entered."))
87
- return nil
88
- end
89
-
90
- begin
91
- timelog[:time_transport] = time_secs
92
- rescue => e
93
- Knj::Gtk2.msgbox(e.message, "warning")
94
- end
95
- end
96
-
97
- #Set sync flag to be activateable.
98
- init_data[:renderers][4].activatable = true
99
- init_data[:renderers][4].signal_connect("toggled") do |renderer, path, val|
100
- iter = @gui["tvTimelogs"].model.get_iter(path)
101
- id = @gui["tvTimelogs"].model.get_value(iter, 0)
102
- timelog = @args[:oata].ob.get(:Timelog, id)
103
-
104
- if timelog[:sync_need].to_i == 1
105
- timelog[:sync_need] = 0
106
- else
107
- timelog[:sync_need] = 1
108
- end
109
- end
110
-
111
- #Make task select-able.
112
- init_data[:renderers][5].editable = true
113
- init_data[:renderers][5].has_entry = false
114
- init_data[:renderers][5].signal_connect("edited") do |renderer, row_no, val|
115
- iter = @gui["tvTimelogs"].model.get_iter(row_no)
116
- id = @gui["tvTimelogs"].model.get_value(iter, 0)
117
- timelog = @args[:oata].ob.get(:Timelog, id)
118
-
119
- task = @args[:oata].ob.get_by(:Task, {"title" => val})
120
- if !task
121
- timelog[:task_id] = 0
122
- else
123
- timelog[:task_id] = task.id
124
- end
125
- end
126
-
53
+ Knj::Gtk2::Tv.editable_text_renderers_to_model(
54
+ :ob => @args[:oata].ob,
55
+ :tv => @gui["tvTimelogs"],
56
+ :model_class => :Timelog,
57
+ :renderers => init_data[:renderers],
58
+ :change_before => proc{ @dont_reload = true },
59
+ :change_after => proc{ @dont_reload = false },
60
+ :cols => {
61
+ 1 => :descr,
62
+ 2 => {:col => :timestamp, :type => :datetime},
63
+ 3 => {:col => :time, :type => :time_as_sec},
64
+ 4 => {:col => :time_transport, :type => :time_as_sec},
65
+ 5 => {:col => :transportlength, :type => :int},
66
+ 6 => {:col => :transportdescription},
67
+ 7 => {:col => :transportcosts, :type => :human_number, :decimals => 2},
68
+ 8 => {:col => :travelfixed},
69
+ 9 => {:col => :workinternal},
70
+ 10 => {:col => :sync_need},
71
+ 11 => {
72
+ :col => :task_id,
73
+ :value_callback => lambda{ |data|
74
+ task = @args[:oata].ob.get_by(:Task, {"title" => data[:value]})
75
+
76
+ if !task
77
+ return 0
78
+ else
79
+ return task.id
80
+ end
81
+ },
82
+ :value_set_callback => proc{ |data| data[:model].task_name }
83
+ }
84
+ }
85
+ )
127
86
 
128
87
  @gui["tvTimelogs"].columns[0].visible = false
129
88
  self.reload_timelogs
@@ -134,19 +93,30 @@ class Openall_time_applet::Gui::Win_overview
134
93
  @gui["window"].show_all
135
94
  end
136
95
 
137
- def on_cell_edited(*args)
138
- print "Cell edit!\n"
139
- Knj::Php.print_r(args)
96
+ def dont_reload
97
+ @dont_reload = true
98
+ begin
99
+ yield
100
+ ensure
101
+ @dont_reload = false
102
+ end
140
103
  end
141
104
 
142
105
  def reload_timelogs
106
+ return nil if @dont_reload
143
107
  @gui["tvTimelogs"].model.clear
144
108
  @args[:oata].ob.list(:Timelog, {"orderby" => "id"}) do |timelog|
145
109
  @gui["tvTimelogs"].append([
146
110
  timelog.id,
147
111
  timelog.descr_short,
112
+ timelog.timestamp_str,
148
113
  timelog.time_as_human,
149
114
  timelog.time_transport_as_human,
115
+ Knj::Locales.number_out(timelog[:transportlength], 0),
116
+ timelog.transport_descr_short,
117
+ Knj::Locales.number_out(timelog[:transportcosts], 2),
118
+ Knj::Strings.yn_str(timelog[:travelfixed], true, false),
119
+ Knj::Strings.yn_str(timelog[:workinternal], true, false),
150
120
  Knj::Strings.yn_str(timelog[:sync_need], true, false),
151
121
  timelog.task_name
152
122
  ])
data/models/timelog.rb CHANGED
@@ -57,6 +57,14 @@ class Openall_time_applet::Models::Timelog < Knj::Datarow
57
57
  return descr
58
58
  end
59
59
 
60
+ #Returns a short one-line short description.
61
+ def transport_descr_short
62
+ descr = self[:transportdescription].to_s.gsub("\n", " ").gsub(/\s{2,}/, " ")
63
+ descr = Knj::Strings.shorten(descr, 20)
64
+ descr = "[#{_("no description")}]" if descr.to_s.strip.length <= 0
65
+ return descr
66
+ end
67
+
60
68
  #Returns the time as a human readable format.
61
69
  def time_as_human
62
70
  return Knj::Strings.secs_to_human_time_str(self[:time])
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{openall_time_applet}
8
- s.version = "0.0.10"
8
+ s.version = "0.0.11"
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-08}
12
+ s.date = %q{2012-06-12}
13
13
  s.default_executable = %q{openall_time_applet.rb}
14
14
  s.description = %q{Off-line time-tracking for OpenAll with syncing when online.}
15
15
  s.email = %q{k@spernj.org}
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: openall_time_applet
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.10
5
+ version: 0.0.11
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-08 00:00:00 +02:00
13
+ date: 2012-06-12 00:00:00 +02:00
14
14
  default_executable: openall_time_applet.rb
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -195,7 +195,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
195
195
  requirements:
196
196
  - - ">="
197
197
  - !ruby/object:Gem::Version
198
- hash: -2758697315612499860
198
+ hash: -4306951825399689854
199
199
  segments:
200
200
  - 0
201
201
  version: "0"