From: Kouhei S. <nu...@co...> - 2017-08-27 04:28:06
|
Kouhei Sutou 2017-08-27 13:27:48 +0900 (Sun, 27 Aug 2017) New Revision: 4fc1e0093ade0487adec7609d711596c0f813282 https://github.com/ruby-gnome2/ruby-gnome2/commit/4fc1e0093ade0487adec7609d711596c0f813282 Message: Merge pull request #1096 from cedlemo/gtk3_sample_gtk_demo_combobox_rb Gtk3 sample gtk demo combobox rb Patch by cedlemo. Thanks!!! |
From: cedlemo <nu...@co...> - 2017-08-27 04:28:06
|
cedlemo 2017-08-26 22:42:46 +0900 (Sat, 26 Aug 2017) New Revision: 087101d9e1a58a6d76c8aadb1f2a1a81be1026ee https://github.com/ruby-gnome2/ruby-gnome2/commit/087101d9e1a58a6d76c8aadb1f2a1a81be1026ee Merged 4fc1e00: Merge pull request #1096 from cedlemo/gtk3_sample_gtk_demo_combobox_rb Message: Update ruby demos TODO Modified files: gtk3/sample/gtk-demo/TODO Modified: gtk3/sample/gtk-demo/TODO (+1 -1) =================================================================== --- gtk3/sample/gtk-demo/TODO 2017-08-26 22:41:55 +0900 (36e452429) +++ gtk3/sample/gtk-demo/TODO 2017-08-26 22:42:46 +0900 (9c373be13) @@ -55,12 +55,12 @@ transparent.c ok ok images.c ok ok textview.c ok ok event_axes.c ok ok +combobox.c ok ok Remains : application.c no no changedisplay.c ok no -combobox.c no no css_blendmodes.c no no fishbowl.c no no flowbox.c no no |
From: cedlemo <nu...@co...> - 2017-08-27 04:28:07
|
cedlemo 2017-08-26 22:41:55 +0900 (Sat, 26 Aug 2017) New Revision: 33fee27cb20badda0a271350e8932e39b8cf053c https://github.com/ruby-gnome2/ruby-gnome2/commit/33fee27cb20badda0a271350e8932e39b8cf053c Merged 4fc1e00: Merge pull request #1096 from cedlemo/gtk3_sample_gtk_demo_combobox_rb Message: Fix styles issues (Rubocop) Modified files: gtk3/sample/gtk-demo/combobox.rb Modified: gtk3/sample/gtk-demo/combobox.rb (+20 -23) =================================================================== --- gtk3/sample/gtk-demo/combobox.rb 2017-08-26 22:34:12 +0900 (fbd6f7c7d) +++ gtk3/sample/gtk-demo/combobox.rb 2017-08-26 22:41:55 +0900 (5e7b4cfc5) @@ -10,6 +10,7 @@ How the options are displayed is controlled by cell renderers. =end + Icon = Struct.new(:name, :label) CapitalItem = Struct.new(:group, :name) @@ -35,8 +36,8 @@ class ComboboxDemo box.margin = 5 frame.add(box) - model = create_icon_store - combo = Gtk::ComboBox.new(:model => model) + store = create_icon_store + combo = Gtk::ComboBox.new(:model => store) box.add(combo) renderer = Gtk::CellRendererPixbuf.new @@ -56,7 +57,7 @@ class ComboboxDemo end combo.set_row_separator_func do |model, iter| - is_separator(model, iter) + separator?(model, iter) end combo.active = 0 @@ -69,19 +70,19 @@ class ComboboxDemo box.margin = 5 frame.add(box) - model = create_capital_store - combo = Gtk::ComboBox.new(:model => model) + store = create_capital_store + combo = Gtk::ComboBox.new(:model => store) box.add(combo) renderer = Gtk::CellRendererText.new combo.pack_start(renderer, true) combo.set_attributes(renderer, "text" => 0) combo.set_cell_data_func(renderer) do |_layout, cell_renderer, model, iter| - is_capital_sensitive(cell_renderer, model, iter) + capital_sensitive?(cell_renderer, model, iter) end path = Gtk::TreePath.new([0, 8, -1]) - iter = model.get_iter(path) + iter = store.get_iter(path) combo.set_active_iter(iter) # A GtkComboBoxEntry with validation @@ -164,7 +165,7 @@ class ComboboxDemo cell_renderer.sensitive = indices[0] != 1 end - def is_separator(model, iter) + def separator?(model, iter) path = model.get_path(iter) path.indices[0] == 4 end @@ -223,7 +224,7 @@ class ComboboxDemo capitals << CapitalItem.new(nil, "Santa Fe") capitals << CapitalItem.new(nil, "Springfield") capitals << CapitalItem.new(nil, "St. Paul") - capitals << CapitalItem.new("T - Z", nil ) + capitals << CapitalItem.new("T - Z", nil) capitals << CapitalItem.new(nil, "Tallahassee") capitals << CapitalItem.new(nil, "Topeka") capitals << CapitalItem.new(nil, "Trenton") @@ -242,7 +243,7 @@ class ComboboxDemo model end - def is_capital_sensitive(cell, tree_model, iter) + def capital_sensitive?(cell, tree_model, iter) sensitive = !tree_model.iter_has_child(iter) cell.sensitive = sensitive end @@ -257,28 +258,24 @@ end class MaskEntry < Gtk::Entry type_register + attr_writer :mask def initialize super - signal_connect "changed" do |editable| + signal_connect "changed" do set_background end end - def mask=(value) - @mask = value - end - private def set_background - if @mask - if !GLib::Regex.match?(@mask, text) - attrs = Pango::AttrList.new - attrs.insert(Pango::AttrForeground.new(65535, 32767, 32767)) - set_attributes(attrs) - else - set_attributes(nil) - end + return unless @mask + if !GLib::Regex.match?(@mask, text) + attrs = Pango::AttrList.new + attrs.insert(Pango::AttrForeground.new(65_535, 32_767, 32_767)) + set_attributes(attrs) + else + set_attributes(nil) end end end |
From: cedlemo <nu...@co...> - 2017-08-27 04:28:08
|
cedlemo 2017-08-26 22:34:12 +0900 (Sat, 26 Aug 2017) New Revision: 0072138d3ffecbfe348592f788d80a520994bc83 https://github.com/ruby-gnome2/ruby-gnome2/commit/0072138d3ffecbfe348592f788d80a520994bc83 Merged 4fc1e00: Merge pull request #1096 from cedlemo/gtk3_sample_gtk_demo_combobox_rb Message: Add combobox demo Added files: gtk3/sample/gtk-demo/combobox.rb Added: gtk3/sample/gtk-demo/combobox.rb (+284 -0) 100644 =================================================================== --- /dev/null +++ gtk3/sample/gtk-demo/combobox.rb 2017-08-26 22:34:12 +0900 (fbd6f7c7d) @@ -0,0 +1,284 @@ +# Copyright (c) 2016 Ruby-GNOME2 Project Team +# This program is licenced under the same licence as Ruby-GNOME2. +# +=begin += Combo Boxes + + The GtkComboBox widget allows to select one option out of a list. + The GtkComboBoxEntry additionally allows the user to enter a value + that is not in the list of options. + + How the options are displayed is controlled by cell renderers. +=end +Icon = Struct.new(:name, :label) +CapitalItem = Struct.new(:group, :name) + +class ComboboxDemo + ICON_NAME_COL = 0 + TEXT_COL = 1 + + def initialize(main_window) + @window = Gtk::Window.new(:toplevel) + @window.screen = main_window.screen + @window.title = "Combo Boxes" + vbox = Gtk::Box.new(:vertical, 2) + vbox.margin = 10 + @window.add(vbox) + + # A combobox demonstrating cell renderers, separators and + # insensitive rows. + + frame = Gtk::Frame.new("Items with icons") + vbox.pack_start(frame, :expand => false, :fill => false, :padding => 0) + + box = Gtk::Box.new(:vertical, 0) + box.margin = 5 + frame.add(box) + + model = create_icon_store + combo = Gtk::ComboBox.new(:model => model) + box.add(combo) + + renderer = Gtk::CellRendererPixbuf.new + combo.pack_start(renderer, false) + combo.set_attributes(renderer, "icon-name" => ICON_NAME_COL) + + combo.set_cell_data_func(renderer) do |_layout, cell_renderer, model, iter| + set_sensitive(cell_renderer, model, iter) + end + + renderer = Gtk::CellRendererText.new + combo.pack_start(renderer, true) + combo.set_attributes(renderer, "text" => TEXT_COL) + + combo.set_cell_data_func(renderer) do |_layout, cell_renderer, model, iter| + set_sensitive(cell_renderer, model, iter) + end + + combo.set_row_separator_func do |model, iter| + is_separator(model, iter) + end + + combo.active = 0 + + # A combobox demonstrating trees + frame = Gtk::Frame.new("Where are we?") + vbox.pack_start(frame, :expand => false, :fill => false, :padding => 0) + + box = Gtk::Box.new(:vertical, 0) + box.margin = 5 + frame.add(box) + + model = create_capital_store + combo = Gtk::ComboBox.new(:model => model) + box.add(combo) + + renderer = Gtk::CellRendererText.new + combo.pack_start(renderer, true) + combo.set_attributes(renderer, "text" => 0) + combo.set_cell_data_func(renderer) do |_layout, cell_renderer, model, iter| + is_capital_sensitive(cell_renderer, model, iter) + end + + path = Gtk::TreePath.new([0, 8, -1]) + iter = model.get_iter(path) + combo.set_active_iter(iter) + + # A GtkComboBoxEntry with validation + frame = Gtk::Frame.new("Editable") + vbox.pack_start(frame, :expand => true, :fill => true, :padding => 0) + box = Gtk::Box.new(:vertical, 0) + box.margin = 5 + frame.add(box) + + combo = Gtk::ComboBoxText.new(:entry => true) + fill_combo_entry(combo) + box.add(combo) + + entry = MaskEntry.new + entry.mask = "^([0-9]*|One|Two|2\302\275|Three)$" + + combo.remove(combo.child.gtype) + combo.add(entry) + + # A combobox with string IDs + frame = Gtk::Frame.new("String IDs") + vbox.pack_start(frame, :expand => false, :fill => false, :padding => 0) + + box = Gtk::Box.new(:vertical, 0) + box.margin = 5 + frame.add(box) + + combo = Gtk::ComboBoxText.new + combo.append("never", "Not visible") + combo.append("when-active", "Visible") + combo.append("always", "Always visible") + box.add(combo) + + entry = Gtk::Entry.new + combo.bind_property("active-id", entry, "text", :bidirectional) + box.add(entry) + end + + def run + if !@window.visible? + @window.show_all + else + @window.destroy + end + @window + end + + private + + def create_icon_store + icons = [] + icons << Icon.new("dialog-warning", "Warning") + icons << Icon.new("process-stop", "Stop") + icons << Icon.new("document-new", "New") + icons << Icon.new("edit-clear", "Clear") + icons << Icon.new(nil, nil) + icons << Icon.new("document-open", "Open") + model = Gtk::ListStore.new(String, String) + + icons.each do |icon| + iter = model.append + if icon.name + iter[ICON_NAME_COL] = icon.name + iter[TEXT_COL] = icon.label + else + iter[ICON_NAME_COL] = nil + iter[TEXT_COL] = "separator" + end + end + model + end + + # A GtkCellLayoutDataFunc that demonstrates how one can control + # sensitivity of rows. This particular function does nothing + # useful and just makes the second row insensitive. + + def set_sensitive(cell_renderer, model, iter) + path = model.get_path(iter) + indices = path.indices + cell_renderer.sensitive = indices[0] != 1 + end + + def is_separator(model, iter) + path = model.get_path(iter) + path.indices[0] == 4 + end + + def create_capital_store + capitals = [] + capitals << CapitalItem.new("A - B", nil) + capitals << CapitalItem.new(nil, "Albany") + capitals << CapitalItem.new(nil, "Annapolis") + capitals << CapitalItem.new(nil, "Atlanta") + capitals << CapitalItem.new(nil, "Augusta") + capitals << CapitalItem.new(nil, "Austin") + capitals << CapitalItem.new(nil, "Baton Rouge") + capitals << CapitalItem.new(nil, "Bismarck") + capitals << CapitalItem.new(nil, "Boise") + capitals << CapitalItem.new(nil, "Boston") + capitals << CapitalItem.new("C - D", nil) + capitals << CapitalItem.new(nil, "Carson City") + capitals << CapitalItem.new(nil, "Charleston") + capitals << CapitalItem.new(nil, "Cheyenne") + capitals << CapitalItem.new(nil, "Columbia") + capitals << CapitalItem.new(nil, "Columbus") + capitals << CapitalItem.new(nil, "Concord") + capitals << CapitalItem.new(nil, "Denver") + capitals << CapitalItem.new(nil, "Des Moines") + capitals << CapitalItem.new(nil, "Dover") + capitals << CapitalItem.new("E - J", nil) + capitals << CapitalItem.new(nil, "Frankfort") + capitals << CapitalItem.new(nil, "Harrisburg") + capitals << CapitalItem.new(nil, "Hartford") + capitals << CapitalItem.new(nil, "Helena") + capitals << CapitalItem.new(nil, "Honolulu") + capitals << CapitalItem.new(nil, "Indianapolis") + capitals << CapitalItem.new(nil, "Jackson") + capitals << CapitalItem.new(nil, "Jefferson City") + capitals << CapitalItem.new(nil, "Juneau") + capitals << CapitalItem.new("K - O", nil) + capitals << CapitalItem.new(nil, "Lansing") + capitals << CapitalItem.new(nil, "Lincoln") + capitals << CapitalItem.new(nil, "Little Rock") + capitals << CapitalItem.new(nil, "Madison") + capitals << CapitalItem.new(nil, "Montgomery") + capitals << CapitalItem.new(nil, "Montpelier") + capitals << CapitalItem.new(nil, "Nashville") + capitals << CapitalItem.new(nil, "Oklahoma City") + capitals << CapitalItem.new(nil, "Olympia") + capitals << CapitalItem.new(nil, "P - S") + capitals << CapitalItem.new(nil, "Phoenix") + capitals << CapitalItem.new(nil, "Pierre") + capitals << CapitalItem.new(nil, "Providence") + capitals << CapitalItem.new(nil, "Raleigh") + capitals << CapitalItem.new(nil, "Richmond") + capitals << CapitalItem.new(nil, "Sacramento") + capitals << CapitalItem.new(nil, "Salem") + capitals << CapitalItem.new(nil, "Salt Lake City") + capitals << CapitalItem.new(nil, "Santa Fe") + capitals << CapitalItem.new(nil, "Springfield") + capitals << CapitalItem.new(nil, "St. Paul") + capitals << CapitalItem.new("T - Z", nil ) + capitals << CapitalItem.new(nil, "Tallahassee") + capitals << CapitalItem.new(nil, "Topeka") + capitals << CapitalItem.new(nil, "Trenton") + model = Gtk::TreeStore.new(String) + iter = nil + iter2 = nil + capitals.each do |capital| + if capital.group + iter = model.append(nil) + iter[0] = capital.group + else + iter2 = model.append(iter) + iter2[0] = capital.name + end + end + model + end + + def is_capital_sensitive(cell, tree_model, iter) + sensitive = !tree_model.iter_has_child(iter) + cell.sensitive = sensitive + end + + def fill_combo_entry(combo) + combo.append_text("One") + combo.append_text("Two") + combo.append_text("2\302\275") + combo.append_text("Three") + end +end + +class MaskEntry < Gtk::Entry + type_register + def initialize + super + signal_connect "changed" do |editable| + set_background + end + end + + def mask=(value) + @mask = value + end + + private + + def set_background + if @mask + if !GLib::Regex.match?(@mask, text) + attrs = Pango::AttrList.new + attrs.insert(Pango::AttrForeground.new(65535, 32767, 32767)) + set_attributes(attrs) + else + set_attributes(nil) + end + end + end +end |