jota 0.9.0 → 0.9.1

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/lib/gui.rb CHANGED
@@ -1,8 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- # $Id: gui.rb 300 2011-04-18 08:38:44Z dz $
4
-
5
-
6
3
  # rdoc: see http://en.wikibooks.org/wiki/Ruby_Programming/RubyDoc
7
4
 
8
5
  # = Class Gui - Realize the GTK+ related functions of Jota
@@ -34,6 +31,7 @@ require 'clip'
34
31
  require 'clip_array'
35
32
  require 'helper'
36
33
  require 'preferences'
34
+ require 'objspace'
37
35
 
38
36
  class Gui
39
37
 
@@ -42,8 +40,8 @@ require 'gtk2'
42
40
  attr :glade
43
41
 
44
42
  def Gui.gtk_version
45
- return "GTK+ %d.%d.%d" % [ Gtk::MAJOR_VERSION,
46
- Gtk::MINOR_VERSION,
43
+ return "GTK+ %d.%d.%d" % [ Gtk::MAJOR_VERSION,
44
+ Gtk::MINOR_VERSION,
47
45
  Gtk::MICRO_VERSION ]
48
46
  # TODO http://ruby-gnome2.sourceforge.jp/hiki.cgi?Gtk#MICRO_VERSION
49
47
  end
@@ -55,7 +53,7 @@ def initialize
55
53
  @clip_widget = nil
56
54
  @next_autosave = Time.now
57
55
  @changed = false
58
- end
56
+ end
59
57
 
60
58
  def open(filename)
61
59
  begin
@@ -67,7 +65,7 @@ def open(filename)
67
65
  set_autosave
68
66
  @changed = false
69
67
  return @data
70
- end
68
+ end
71
69
 
72
70
  def close
73
71
  update
@@ -75,7 +73,7 @@ def close
75
73
  if @data
76
74
  @data.close
77
75
  end
78
- end
76
+ end
79
77
 
80
78
  def clip_array
81
79
  return @data
@@ -113,15 +111,15 @@ def create_gui(width=nil, height=nil)
113
111
  @top_window.add_accel_group(@accel_group)
114
112
  @glade["main_menu"].accel_group=(@accel_group)
115
113
 
116
- @glade["menu_new"].add_accelerator('activate', @accel_group,
114
+ @glade["menu_new"].add_accelerator('activate', @accel_group,
117
115
  Gdk::Keyval::GDK_N, Gdk::Window::CONTROL_MASK, Gtk::ACCEL_VISIBLE)
118
- @glade["menu_open"].add_accelerator('activate', @accel_group,
116
+ @glade["menu_open"].add_accelerator('activate', @accel_group,
119
117
  Gdk::Keyval::GDK_O, Gdk::Window::CONTROL_MASK, Gtk::ACCEL_VISIBLE)
120
- @glade["menu_save"].add_accelerator('activate', @accel_group,
118
+ @glade["menu_save"].add_accelerator('activate', @accel_group,
121
119
  Gdk::Keyval::GDK_S, Gdk::Window::CONTROL_MASK, Gtk::ACCEL_VISIBLE)
122
- @glade["menu_close"].add_accelerator('activate', @accel_group,
120
+ @glade["menu_close"].add_accelerator('activate', @accel_group,
123
121
  Gdk::Keyval::GDK_W, Gdk::Window::CONTROL_MASK, Gtk::ACCEL_VISIBLE)
124
- @glade["menu_quit"].add_accelerator('activate', @accel_group,
122
+ @glade["menu_quit"].add_accelerator('activate', @accel_group,
125
123
  Gdk::Keyval::GDK_Q, Gdk::Window::CONTROL_MASK, Gtk::ACCEL_VISIBLE)
126
124
 
127
125
  # Update buttons and stuff
@@ -135,7 +133,12 @@ def create_gui(width=nil, height=nil)
135
133
  autosave
136
134
  true
137
135
  end
138
- end
136
+
137
+ # Log memory consumption
138
+ Gtk.timeout_add(86400*1000) do # once a day
139
+ print_verbose "ObjectSpace.memsize_of_all #{ObjectSpace.memsize_of_all}"
140
+ end
141
+ end
139
142
 
140
143
 
141
144
  #
@@ -144,16 +147,16 @@ end
144
147
 
145
148
  def on_top_destroy(widget)
146
149
  quit_app
147
- end
150
+ end
148
151
 
149
152
  def on_top_delete(widget, arg0)
150
153
  quit_app
151
154
  return true
152
- end
155
+ end
153
156
 
154
157
  def on_dialog_delete(widget, arg0)
155
158
  return true
156
- end
159
+ end
157
160
 
158
161
 
159
162
  #
@@ -163,13 +166,13 @@ end
163
166
  def on_main_menu_pressed(widget)
164
167
  update
165
168
  set_goto_menu
166
-
169
+
167
170
  @glade["main_menu"].popup(
168
171
  nil,
169
172
  nil,
170
173
  Gtk.current_event.button,
171
174
  Gtk.current_event_time)
172
- end
175
+ end
173
176
 
174
177
  def on_edit_menu_pressed(widget)
175
178
  @glade["edit_text_menu"].popup(
@@ -177,7 +180,7 @@ def on_edit_menu_pressed(widget)
177
180
  nil,
178
181
  Gtk.current_event.button,
179
182
  Gtk.current_event_time)
180
- end
183
+ end
181
184
 
182
185
  def on_delete_clicked(widget)
183
186
  if pref("confirm_delete") then
@@ -201,7 +204,7 @@ def on_delete_clicked(widget)
201
204
  update
202
205
 
203
206
  if pref("deletesave_enable") and not @data.current.empty? then
204
- deletefile = expand_filename(pref("deletesave_file"),
207
+ deletefile = expand_filename(pref("deletesave_file"),
205
208
  @data.dirname, @data.filename)
206
209
  begin
207
210
  @data.append(deletefile)
@@ -213,26 +216,26 @@ def on_delete_clicked(widget)
213
216
  @data.delete
214
217
  @changed = true
215
218
  show
216
- end
219
+ end
217
220
 
218
221
  def on_new_clicked(widget)
219
222
  update
220
223
  @data.new
221
224
  @changed = true
222
225
  show
223
- end
226
+ end
224
227
 
225
228
  def on_next_clicked(widget)
226
229
  update
227
230
  @data.next
228
231
  show
229
- end
232
+ end
230
233
 
231
234
  def on_prev_clicked(widget)
232
235
  update
233
236
  @data.prev
234
237
  show
235
- end
238
+ end
236
239
 
237
240
 
238
241
 
@@ -243,12 +246,12 @@ end
243
246
 
244
247
  def on_menu_quit_activate(widget)
245
248
  quit_app
246
- end
249
+ end
247
250
 
248
251
  def on_menu_save_activate(widget)
249
252
  update
250
253
  @data.save
251
- end
254
+ end
252
255
 
253
256
  def on_menu_new_activate(widget)
254
257
  filename = file_chooser_dialog :save
@@ -271,7 +274,7 @@ def on_menu_new_activate(widget)
271
274
  show
272
275
  set_autosave
273
276
  set_style
274
- end
277
+ end
275
278
 
276
279
  def on_menu_open_activate(widget)
277
280
  filename = file_chooser_dialog :open
@@ -288,13 +291,13 @@ def on_menu_open_activate(widget)
288
291
  update
289
292
  @data.close
290
293
  end
291
-
294
+
292
295
  @data = ca
293
296
 
294
297
  show
295
298
  set_autosave
296
299
  set_style
297
- end
300
+ end
298
301
 
299
302
  def on_menu_close_activate(widget)
300
303
  if @data.nil? then
@@ -305,7 +308,7 @@ def on_menu_close_activate(widget)
305
308
  @data.close
306
309
  @data = nil
307
310
  show
308
- end
311
+ end
309
312
 
310
313
  def on_menu_preferences_activate(widget)
311
314
  old_autosave_seconds = pref("autosave_seconds")
@@ -322,7 +325,7 @@ def on_menu_preferences_activate(widget)
322
325
  @glade["entry_sample"].text = "Sample Text"
323
326
 
324
327
  @glade["pref_autosave_enable"].active = pref("autosave_enable")
325
- @glade["pref_autosave_minutes"].text =
328
+ @glade["pref_autosave_minutes"].text =
326
329
  "%d" % (pref("autosave_seconds").to_i/60.0)
327
330
 
328
331
  @glade["pref_deletesave_enable"].active = pref("deletesave_enable")
@@ -339,7 +342,7 @@ def on_menu_preferences_activate(widget)
339
342
 
340
343
  set_pref("autosave_enable", @glade["pref_autosave_enable"].active?)
341
344
  set_pref("autosave_seconds", 60 * @glade["pref_autosave_minutes"].text.to_i)
342
-
345
+
343
346
  set_pref("deletesave_enable", @glade["pref_deletesave_enable"].active?)
344
347
  set_pref("deletesave_file", @glade["pref_deletesave_file"].text)
345
348
 
@@ -356,18 +359,18 @@ def on_menu_preferences_activate(widget)
356
359
  dialog.signal_connect("close") do
357
360
  dialog.hide
358
361
  end
359
- end
362
+ end
360
363
 
361
364
  def on_menu_about_activate(widget)
362
365
  dialog = @glade["about_dialog"]
363
366
  dialog.show
364
- dialog.signal_connect("close") do
367
+ dialog.signal_connect("close") do
365
368
  dialog.hide
366
369
  end
367
370
  dialog.signal_connect("destroy") do # XXX tut's nicht!?
368
371
  dialog.hide
369
372
  end
370
- dialog.signal_connect("response") do
373
+ dialog.signal_connect("response") do
371
374
  dialog.hide
372
375
  end
373
376
  end
@@ -396,7 +399,7 @@ def on_edit_text_wrap_activate(widget)
396
399
  else
397
400
  @clip_widget.wrap_mode = Gtk::TextTag::WRAP_NONE
398
401
  end
399
- end
402
+ end
400
403
 
401
404
 
402
405
  #
@@ -420,17 +423,17 @@ def on_font(widget)
420
423
  end
421
424
 
422
425
  dialog.show
423
- end
426
+ end
424
427
 
425
428
  def on_bgcolor(widget)
426
429
  color_helper :dialog_text => "Select Background Color",
427
430
  :pref_variable => "background"
428
- end
431
+ end
429
432
 
430
433
  def on_fgcolor(widget)
431
434
  color_helper :dialog_text => "Select Foreground Color",
432
435
  :pref_variable => "foreground"
433
- end
436
+ end
434
437
 
435
438
  # XXX
436
439
  def on_clip_button_press_event(widget,event)
@@ -454,7 +457,7 @@ def error_msgbox(message)
454
457
  Gtk::Dialog::MODAL,
455
458
  Gtk::MessageDialog::ERROR,
456
459
  Gtk::MessageDialog::BUTTONS_OK,
457
- message);
460
+ message.to_s);
458
461
  msgbox.title = "Error"
459
462
 
460
463
  msgbox.run do | response |
@@ -465,7 +468,7 @@ def error_msgbox(message)
465
468
  end
466
469
  end
467
470
  msgbox.destroy
468
- end
471
+ end
469
472
 
470
473
  def set_goto_menu
471
474
  return if @data.nil?
@@ -481,7 +484,7 @@ def set_goto_menu
481
484
 
482
485
  # Using markup in a MenuItems is not implemented before
483
486
  # GTK+ 2.16. Ruby GTK is 2.12 at the moment (2009-07).
484
-
487
+
485
488
  #la = Gtk::Label.new
486
489
  if i == @data.current_index then
487
490
  #title.gsub!(/</,"&lt;")
@@ -496,7 +499,7 @@ def set_goto_menu
496
499
 
497
500
  #mi = Gtk::MenuItem.new
498
501
  #mi.label = la
499
- mi = Gtk::MenuItem.new("%s%2d: %s" %
502
+ mi = Gtk::MenuItem.new("%s%2d: %s" %
500
503
  [marker, i+1, title])
501
504
  mi.signal_connect("activate") do
502
505
  on_menu_goto(i)
@@ -512,7 +515,7 @@ end
512
515
  def color_helper (hash)
513
516
  dialog_text = hash[:dialog_text]
514
517
  pref_variable = hash[:pref_variable]
515
-
518
+
516
519
  dialog = Gtk::ColorSelectionDialog.new(dialog_text)
517
520
 
518
521
  dialog.colorsel.current_color = array_to_color(pref(pref_variable))
@@ -533,7 +536,7 @@ def color_helper (hash)
533
536
  end
534
537
 
535
538
  dialog.show
536
- end
539
+ end
537
540
 
538
541
 
539
542
  def pref(key)
@@ -542,13 +545,13 @@ def pref(key)
542
545
  else
543
546
  @data.pref[key]
544
547
  end
545
- end
548
+ end
546
549
 
547
550
  def set_pref(key,value)
548
551
  if @data
549
552
  @data.pref[key] = value
550
553
  end
551
- end
554
+ end
552
555
 
553
556
  def set_title
554
557
  if @data then
@@ -581,12 +584,12 @@ def set_buttons
581
584
  else
582
585
  @glade["but_delete"].sensitive = true
583
586
  @glade["but_new"].sensitive = true
584
- @glade["but_next"].sensitive =
587
+ @glade["but_next"].sensitive =
585
588
  (@data.current_index != @data.length-1)
586
589
  @glade["but_prev"].sensitive = (@data.current_index != 0)
587
590
  @glade["but_edit"].sensitive = true
588
591
 
589
- @glade["label_index"].text =
592
+ @glade["label_index"].text =
590
593
  "%d of %d" % [@data.current_index+1, @data.length]
591
594
 
592
595
  status = ""
@@ -606,15 +609,15 @@ def set_buttons
606
609
  @glade["menu_goto"].sensitive = true
607
610
  end
608
611
 
609
- @top_window.focus = @glade["clip"]
610
- end
612
+ @glade["clip"].grab_focus
613
+ end
611
614
 
612
615
  def set_wrap_mode
613
616
  return if @data.nil?
614
617
 
615
618
  # Gtk::ToggleButton#active= emits an activate signal
616
619
  # and thus calls on_edit_text_wrap_activate
617
-
620
+
618
621
  if @data.current.wrap then
619
622
  @glade["edit_text_wrap"].active = true
620
623
  else
@@ -631,7 +634,7 @@ def set_style
631
634
  @clip_widget.modify_base(Gtk::STATE_NORMAL,
632
635
  array_to_color(pref("background")))
633
636
  @clip_widget.modify_font(Pango::FontDescription.new(pref("font")))
634
- end
637
+ end
635
638
 
636
639
 
637
640
  #
@@ -644,7 +647,7 @@ def set_style_sample(fg_gdk_color, bg_gdk_color, font)
644
647
  sample.modify_text(Gtk::STATE_NORMAL, fg_gdk_color) if fg_gdk_color
645
648
  sample.modify_base(Gtk::STATE_NORMAL, bg_gdk_color) if bg_gdk_color
646
649
  sample.modify_font(Pango::FontDescription.new(font)) if font
647
- end
650
+ end
648
651
 
649
652
  def quit_app
650
653
  if pref("confirm_quit") then
@@ -672,7 +675,7 @@ def quit_app
672
675
  end
673
676
 
674
677
  Gtk.main_quit
675
- end
678
+ end
676
679
 
677
680
  def set_about_dialog
678
681
  dlg = @glade["about_dialog"]
@@ -689,7 +692,7 @@ def set_about_dialog
689
692
  dlg.website="#{Version::AUTHOR_WEBSITE}"
690
693
  dlg.license="#{Version::LICENSE}"
691
694
  dlg.authors=["#{Version::AUTHOR} <#{Version::AUTHOR_EMAIL}>"]
692
- end
695
+ end
693
696
 
694
697
  def clip_to_widget(textview, clip_array)
695
698
  print_debug "clip_to_widget"
@@ -702,7 +705,7 @@ def clip_to_widget(textview, clip_array)
702
705
  clip = clip_array.current
703
706
 
704
707
  textview.buffer.text = clip.text
705
-
708
+
706
709
  if clip.pos then
707
710
  #mark = textview.buffer.get_insert
708
711
  # isn't implemented in Ruby ... grrrr
@@ -717,8 +720,8 @@ def clip_to_widget(textview, clip_array)
717
720
  textview.editable = true
718
721
  end
719
722
 
720
- @top_window.focus = @glade["clip"]
721
- end
723
+ @glade["clip"].grab_focus
724
+ end
722
725
 
723
726
  def widget_to_clip(textview, clip_array)
724
727
  print_debug "widget_to_clip"
@@ -732,21 +735,21 @@ def widget_to_clip(textview, clip_array)
732
735
  clip_array.current.wrap = true
733
736
  end
734
737
  end
735
- end
738
+ end
736
739
 
737
740
  def set_autosave
738
741
  if pref("autosave_enable") then
739
742
  @next_autosave = Time.now + pref("autosave_seconds")
740
743
  end
741
- end
744
+ end
742
745
 
743
746
  def array_to_color(arr)
744
747
  return Gdk::Color.new(arr[0],arr[1],arr[2])
745
- end
748
+ end
746
749
 
747
750
  def color_to_array(gdk_color)
748
751
  return [gdk_color.red, gdk_color.green, gdk_color.blue]
749
- end
752
+ end
750
753
 
751
754
  def file_chooser_dialog(mode)
752
755
  case mode
@@ -794,7 +797,7 @@ def file_chooser_dialog(mode)
794
797
  dialog.destroy
795
798
 
796
799
  return filename
797
- end
800
+ end
798
801
 
799
802
  def show
800
803
  clip_to_widget(@clip_widget,@data)
@@ -802,7 +805,7 @@ def show
802
805
  set_wrap_mode
803
806
  set_title
804
807
  end
805
-
808
+
806
809
  def update
807
810
  widget_to_clip(@clip_widget, @data) if @data
808
811
  set_buttons
@@ -810,10 +813,10 @@ def update
810
813
  end
811
814
 
812
815
  def autosave
813
- # do autosave if enabled and due
814
- if @data &&
816
+ # do autosave if enabled
817
+ if @data &&
815
818
  @changed &&
816
- pref("autosave_enable") &&
819
+ pref("autosave_enable") &&
817
820
  Time.now >= @next_autosave then
818
821
  print_verbose "autosaving at #{Time.now}"
819
822
  @data.save