gtk3assist 0.0.1 → 0.0.2

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.1
1
+ 0.0.2
@@ -0,0 +1,74 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "gtk3assist"
8
+ s.version = "0.0.2"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Kasper Johansen"]
12
+ s.date = "2012-09-13"
13
+ s.description = "A class for making it easier to develop Gtk3 based applications with the 'gir_ffi-gtk'-gem."
14
+ s.email = "k@spernj.org"
15
+ s.extra_rdoc_files = [
16
+ "LICENSE.txt",
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ ".rspec",
22
+ "Gemfile",
23
+ "Gemfile.lock",
24
+ "LICENSE.txt",
25
+ "README.rdoc",
26
+ "Rakefile",
27
+ "VERSION",
28
+ "gtk3assist.gemspec",
29
+ "lib/gtk3assist.rb",
30
+ "lib/gtk3assist_builder.rb",
31
+ "lib/gtk3assist_combobox.rb",
32
+ "lib/gtk3assist_msgbox.rb",
33
+ "lib/gtk3assist_treeview.rb",
34
+ "spec/gtk3assist_builder.glade",
35
+ "spec/gtk3assist_builder_spec.rb",
36
+ "spec/gtk3assist_combobox_spec.rb",
37
+ "spec/gtk3assist_msgbox_spec.rb",
38
+ "spec/gtk3assist_treeview_spec.rb",
39
+ "spec/spec_helper.rb"
40
+ ]
41
+ s.homepage = "http://github.com/kaspernj/gtk3assist"
42
+ s.licenses = ["MIT"]
43
+ s.require_paths = ["lib"]
44
+ s.rubygems_version = "1.8.24"
45
+ s.summary = "A class for making it easier to develop Gtk3 based applications with the 'gir_ffi-gtk'-gem."
46
+
47
+ if s.respond_to? :specification_version then
48
+ s.specification_version = 3
49
+
50
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
51
+ s.add_runtime_dependency(%q<gir_ffi-gtk>, [">= 0"])
52
+ s.add_runtime_dependency(%q<xml-simple>, [">= 0"])
53
+ s.add_development_dependency(%q<rspec>, ["~> 2.8.0"])
54
+ s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
55
+ s.add_development_dependency(%q<bundler>, [">= 1.0.0"])
56
+ s.add_development_dependency(%q<jeweler>, ["~> 1.8.4"])
57
+ else
58
+ s.add_dependency(%q<gir_ffi-gtk>, [">= 0"])
59
+ s.add_dependency(%q<xml-simple>, [">= 0"])
60
+ s.add_dependency(%q<rspec>, ["~> 2.8.0"])
61
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
62
+ s.add_dependency(%q<bundler>, [">= 1.0.0"])
63
+ s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
64
+ end
65
+ else
66
+ s.add_dependency(%q<gir_ffi-gtk>, [">= 0"])
67
+ s.add_dependency(%q<xml-simple>, [">= 0"])
68
+ s.add_dependency(%q<rspec>, ["~> 2.8.0"])
69
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
70
+ s.add_dependency(%q<bundler>, [">= 1.0.0"])
71
+ s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
72
+ end
73
+ end
74
+
@@ -4,7 +4,7 @@ class Gtk3assist::Builder
4
4
  ARGS_ALLOWED = [:builder]
5
5
 
6
6
  #Constructor.
7
- def initialize(args)
7
+ def initialize(args = {})
8
8
  raise "'args' was not a hash." if !args.is_a?(Hash)
9
9
  args.each do |key, val|
10
10
  raise "Invalid argument: '#{key}'." if !ARGS_ALLOWED.include?(key)
@@ -16,7 +16,11 @@ class Gtk3assist::Builder
16
16
  #Adds the given filepath to the builder and sets filepath for signal-connects.
17
17
  def add_from_file(fpath)
18
18
  @fpath = fpath
19
+
20
+ @builder = Gtk::Builder.new if !@builder
19
21
  @builder.add_from_file(fpath)
22
+
23
+ return self
20
24
  end
21
25
 
22
26
  #Returns a widget from a given key.
@@ -0,0 +1,102 @@
1
+ #This class contains code than can optimize productivity when coding comboboxes.
2
+ class Gtk3assist::Combobox
3
+ #An array containing allowed arguments for the constructor.
4
+ ARGS_ALLOWED = [:cb]
5
+
6
+ #An array containing allowed arguments for the 'add_item'-method.
7
+ ARGS_ALLOWED_ADD_ITEM = [:id, :title]
8
+
9
+ #The combobox-widget that this object handels.
10
+ attr_reader :cb
11
+
12
+ #Constructor.
13
+ def initialize(args = {})
14
+ raise "'args' was not a hash." if !args.is_a?(Hash)
15
+ args.each do |key, val|
16
+ raise "Invalid argument: '#{key}'." if !ARGS_ALLOWED.include?(key)
17
+ end
18
+
19
+ @objs = {}
20
+
21
+ if args[:cb]
22
+ @cb = args[:cb]
23
+ else
24
+ @cb = Gtk::ComboBox.new
25
+ end
26
+
27
+ @rend = Gtk::CellRendererText.new
28
+ @cb.pack_start(@rend, false)
29
+ @cb.add_attribute(@rend, "text", 0)
30
+
31
+ @model = Gtk::ListStore.new([GObject::TYPE_STRING, GObject::TYPE_STRING])
32
+ @cb.set_model(@model)
33
+ @cb.show
34
+ end
35
+
36
+ #Adds a new item to the combobox with ID and title.
37
+ def add_item(args)
38
+ raise "'args' was not a hash." if !args.is_a?(Hash)
39
+ args.each do |key, val|
40
+ raise "Invalid argument: '#{key}'." if !ARGS_ALLOWED_ADD_ITEM.include?(key)
41
+ end
42
+
43
+ raise "No ':title' was given." if !args[:title]
44
+ raise "No ':id' was given." if !args[:id]
45
+
46
+ iter = @model.append
47
+ @model.set_value(iter, 0, args[:title])
48
+
49
+ @objs[args[:id]] = {:iter => iter}
50
+ end
51
+
52
+ #Selects a certain item by id.
53
+ def sel_id(args)
54
+ raise "'args' was not a hash." if !args.is_a?(Hash)
55
+ raise "No ':id' was given." if !args.key?(:id)
56
+
57
+ @objs.each do |id, data|
58
+ if id == args[:id]
59
+ @cb.set_active_iter(data[:iter])
60
+ return nil
61
+ end
62
+ end
63
+
64
+ raise "Could not find item by that id: '#{args[:id]}'."
65
+ end
66
+
67
+ #Returns the selected item.
68
+ def sel
69
+ return self.items(:selected => true).next
70
+ end
71
+
72
+ #Enumerates over every single item in the combobox.
73
+ def items(args = nil, &blk)
74
+ enum = Enumerator.new do |y|
75
+ if args and args[:selected]
76
+ iter_cur = @cb.get_active_iter.last
77
+ else
78
+ iter_cur = @model.iter_first.last
79
+ end
80
+
81
+ while iter_cur
82
+ match = true
83
+
84
+ if match
85
+ y << {
86
+ :data => {
87
+ :title => @model.get_value(iter_cur, 0).get_string
88
+ }
89
+ }
90
+ end
91
+
92
+ break if !@model.iter_next(iter_cur) or (args and args[:selected])
93
+ end
94
+ end
95
+
96
+ if blk
97
+ enum.each(&blk)
98
+ else
99
+ return enum
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,152 @@
1
+ class Gtk3assist::Msgbox
2
+ #An array of possible arguments that the constructor accepts.
3
+ ARGS_ALLOWED = [:msg, :parent, :run, :title, :type]
4
+
5
+ #Various data like the current showing messagebox.
6
+ DATA = {}
7
+
8
+ #The Gtk::Dialog-object.
9
+ attr_reader :dialog
10
+
11
+ #The result of the dialog.
12
+ attr_reader :result
13
+
14
+ def self.current
15
+ raise "No current showing message-box." if !DATA[:current]
16
+ end
17
+
18
+ #Constructor.
19
+ def initialize(args)
20
+ raise "'args' wasnt a hash." if !args.is_a?(Hash)
21
+ args.each do |key, val|
22
+ raise "Invalid argument: '#{key}'." if !ARGS_ALLOWED.include?(key)
23
+ end
24
+
25
+ raise "No ':msg' was given." if args[:msg].to_s.strip.empty?
26
+ args[:type] = :info if !args[:type]
27
+
28
+ if !args[:title]
29
+ case args[:type]
30
+ when :warning
31
+ args[:title] = _("Warning")
32
+ when :yesno
33
+ args[:title] = _("Question")
34
+ when :info
35
+ args[:title] = _("Information")
36
+ else
37
+ raise "Unknown type: '#{args[:type]}'."
38
+ end
39
+ end
40
+
41
+ @dialog = Gtk::Dialog.new
42
+ @dialog.resize(350, 1)
43
+ @dialog.set_title(args[:title])
44
+
45
+ DATA[:current] = self
46
+ @dialog.signal_connect("destroy") do
47
+ DATA.delete(:current)
48
+ end
49
+
50
+ box = Gtk::Box.new(Gtk::Orientation[:horizontal], 4)
51
+ @dialog.get_content_area.add(box)
52
+
53
+ case args[:type]
54
+ when :warning, :info
55
+ if args[:type] == :info
56
+ image = Gtk::Image.new_from_stock(Gtk::STOCK_DIALOG_INFO, Gtk::IconSize[:dialog])
57
+ elsif args[:type] == :warning
58
+ image = Gtk::Image.new_from_stock(Gtk::STOCK_DIALOG_WARNING, Gtk::IconSize[:dialog])
59
+ else
60
+ raise "Unknown type: '#{args[:type]}'."
61
+ end
62
+
63
+ box.pack_start(image, false, false, 4)
64
+ image.show
65
+
66
+ lab = Gtk::Label.new(args[:msg])
67
+ lab.set_selectable(true)
68
+ lab.set_justify(Gtk::Justification[:left])
69
+
70
+ box.pack_start(lab, false, false, 4)
71
+ lab.show
72
+
73
+ but = Gtk::Button.new_from_stock(Gtk::STOCK_OK)
74
+ but.signal_connect("clicked") do
75
+ @result = Gtk::ResponseType[:ok]
76
+ @dialog.response(@result)
77
+ @dialog.destroy
78
+ end
79
+
80
+ res = Gtk::ResponseType[:ok]
81
+ @dialog.get_action_area.add(but)
82
+ but.show
83
+ when :yesno
84
+ image = Gtk::Image.new_from_stock(Gtk::STOCK_DIALOG_QUESTION, Gtk::IconSize[:dialog])
85
+
86
+ box.pack_start(image, false, false, 4)
87
+ image.show
88
+
89
+ lab = Gtk::Label.new(args[:msg])
90
+ lab.set_selectable(true)
91
+ lab.set_justify(Gtk::Justification[:left])
92
+
93
+ box.pack_start(lab, false, false, 4)
94
+ lab.show
95
+
96
+ but_yes = Gtk::Button.new_from_stock(Gtk::STOCK_YES)
97
+ but_yes.signal_connect("clicked") do
98
+ @result = Gtk::ResponseType[:yes]
99
+ @dialog.response(@result)
100
+ end
101
+
102
+ but_no = Gtk::Button.new_from_stock(Gtk::STOCK_NO)
103
+ but_no.signal_connect("clicked") do
104
+ @result = Gtk::ResponseType[:no]
105
+ @dialog.response(@result)
106
+ end
107
+ else
108
+ raise "Unknown type: '#{args[:type]}'."
109
+ end
110
+
111
+ box.show
112
+ @result = @dialog.run if !args.key?(:run) or args[:run]
113
+ end
114
+
115
+ #Runs the dialog.
116
+ def run
117
+ @result = @dialog.run
118
+ return @result
119
+ end
120
+
121
+ #Shows the dialog but doesnt run it.
122
+ def show
123
+ @dialog.show
124
+ end
125
+
126
+ #Responds to the dialog.
127
+ def respond(res)
128
+ case res
129
+ when :cancel, :no, :ok, :yes
130
+ @result = Gtk::ResponseType[res]
131
+ @dialog.response(@result)
132
+ else
133
+ raise "Unknown response: '#{res}'."
134
+ end
135
+ end
136
+
137
+ #Returns the result as a string.
138
+ def result_text
139
+ raise "No result yet." if !@result
140
+ return Gtk::ResponseType[@result].to_sym
141
+ end
142
+
143
+ #Contains a fallback method for '_' which is used to translate texts in the GetText-library.
144
+ def method_missing(method, *args, &block)
145
+ case method
146
+ when :_
147
+ return args[0]
148
+ else
149
+ raise NameError, "No such method: '#{method}'."
150
+ end
151
+ end
152
+ end
@@ -0,0 +1,42 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "Gtk3assist_combobox" do
4
+ it "should work" do
5
+ Gtk.init
6
+
7
+ win = Gtk::Window.new(:toplevel)
8
+ win.resize(640, 5)
9
+ win.signal_connect("destroy") do
10
+ Gtk.main_quit
11
+ end
12
+
13
+ cba = Gtk3assist::Combobox.new
14
+ cba.add_item(:id => 1, :title => "Kasper")
15
+ cba.add_item(:id => 2, :title => "Christina")
16
+
17
+ win.add(cba.cb)
18
+ win.show_all
19
+
20
+ cba.sel_id(:id => 1)
21
+ data = cba.sel
22
+
23
+ raise "Expected selected data to be a hash but it wasnt: '#{data.class.name}'." if !data.is_a?(Hash)
24
+ raise "Expected selected title to be 'Kasper' but it wasnt: '#{data[:data][:title]}'." if data[:data][:title] != "Kasper"
25
+
26
+ cba.sel_id(:id => 2)
27
+ data = cba.sel
28
+
29
+ raise "Expected selected data to be a hash but it wasnt: '#{data.class.name}'." if !data.is_a?(Hash)
30
+ raise "Expected selected title to be 'Kasper' but it wasnt: '#{data[:data][:title]}'." if data[:data][:title] != "Christina"
31
+
32
+ count = 0
33
+ cba.rows do |data|
34
+ #puts data
35
+ count += 1
36
+ end
37
+
38
+ raise "Expected count to be 2 but it wasnt: '#{count}'." if count != 2
39
+
40
+ #Gtk.main
41
+ end
42
+ end
@@ -0,0 +1,21 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "Gtk3assist_msgbox" do
4
+ it "should work" do
5
+ Gtk.init
6
+
7
+
8
+ msg = Gtk3assist::Msgbox.new(:type => :warning, :msg => "This is a test.", :run => false)
9
+ msg.show
10
+ msg.respond(:cancel)
11
+ res = msg.result_text
12
+ raise "Expected cancel but got: '#{res}'." if res != :cancel
13
+
14
+
15
+ msg = Gtk3assist::Msgbox.new(:type => :yesno, :msg => "Do you like ice-cream?", :run => false)
16
+ msg.show
17
+ msg.respond(:yes)
18
+ res = msg.result_text
19
+ raise "Expected yes but got: '#{res}'." if res != :yes
20
+ end
21
+ end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: gtk3assist
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.1
5
+ version: 0.0.2
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-09-05 00:00:00 Z
13
+ date: 2012-09-13 00:00:00 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: gir_ffi-gtk
@@ -96,11 +96,16 @@ files:
96
96
  - README.rdoc
97
97
  - Rakefile
98
98
  - VERSION
99
+ - gtk3assist.gemspec
99
100
  - lib/gtk3assist.rb
100
101
  - lib/gtk3assist_builder.rb
102
+ - lib/gtk3assist_combobox.rb
103
+ - lib/gtk3assist_msgbox.rb
101
104
  - lib/gtk3assist_treeview.rb
102
105
  - spec/gtk3assist_builder.glade
103
106
  - spec/gtk3assist_builder_spec.rb
107
+ - spec/gtk3assist_combobox_spec.rb
108
+ - spec/gtk3assist_msgbox_spec.rb
104
109
  - spec/gtk3assist_treeview_spec.rb
105
110
  - spec/spec_helper.rb
106
111
  homepage: http://github.com/kaspernj/gtk3assist
@@ -116,7 +121,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
116
121
  requirements:
117
122
  - - ">="
118
123
  - !ruby/object:Gem::Version
119
- hash: -825655960913752223
124
+ hash: -4119379591708986058
120
125
  segments:
121
126
  - 0
122
127
  version: "0"