openall_time_applet 0.0.10 → 0.0.11

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/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"