class Alexandria::UI::PreferencesDialog
Public Class Methods
new(parent, &changed_block)
click to toggle source
Calls superclass method
Alexandria::UI::BuilderBase::new
# File lib/alexandria/ui/preferences_dialog.rb, line 20 def initialize(parent, &changed_block) super("preferences_dialog__builder.glade", widget_names) @preferences_dialog.transient_for = parent @changed_block = changed_block @cols = { @checkbutton_col_authors => "col_authors_visible", @checkbutton_col_isbn => "col_isbn_visible", @checkbutton_col_publisher => "col_publisher_visible", @checkbutton_col_publish_date => "col_publish_date_visible", @checkbutton_col_edition => "col_edition_visible", @checkbutton_col_redd => "col_redd_visible", @checkbutton_col_own => "col_own_visible", @checkbutton_col_want => "col_want_visible", @checkbutton_col_rating => "col_rating_visible", @checkbutton_col_tags => "col_tags_visible", @checkbutton_col_loaned_to => "col_loaned_to_visible" } @cols.each_pair do |checkbutton, pref_name| if checkbutton checkbutton.active = Preferences.instance.get_variable(pref_name) else log.warn do "no CheckButton for property #{pref_name} " \ "(probably conflicting versions of GUI and lib code)" end end end model = Gtk::ListStore.new(String, String, TrueClass, Integer) @treeview_providers.model = model reload_providers model.signal_connect_after("row-changed") { update_priority } renderer = Gtk::CellRendererToggle.new renderer.activatable = true renderer.signal_connect("toggled") do |_rndrr, path| tree_path = Gtk::TreePath.new(path) @treeview_providers.selection.select_path(tree_path) prov = selected_provider if prov prov.toggle_enabled adjust_selected_provider(prov) # reload_providers end end # renderer.active = true column = Gtk::TreeViewColumn.new("Enabled", renderer) column.set_cell_data_func(renderer) do |_col, rndr, _mod, iter| value = iter[2] rndr.active = value end @treeview_providers.append_column(column) renderer = Gtk::CellRendererText.new column = Gtk::TreeViewColumn.new("Providers", renderer) column.set_cell_data_func(renderer) do |_col, rndr, _mod, iter| rndr.markup = iter[0] end @treeview_providers.append_column(column) @treeview_providers.selection .signal_connect("changed") { sensitize_providers } @button_prov_setup.sensitive = false @button_prov_up.sensitive = @button_prov_down.sensitive = BookProviders.list.length > 1 @buttonbox_prov.set_child_secondary(@button_prov_add, true) @buttonbox_prov.set_child_secondary(@button_prov_remove, true) if BookProviders.abstract_classes.empty? @checkbutton_prov_advanced.sensitive = false else view_advanced = Preferences.instance.view_advanced_settings @checkbutton_prov_advanced.active = true if view_advanced end sensitize_providers setup_barcode_scanner_tab end
Public Instance Methods
event_is_right_click(event)
click to toggle source
# File lib/alexandria/ui/preferences_dialog.rb, line 143 def event_is_right_click(event) (event.event_type == :button_press) && (event.button == 3) end
on_close()
click to toggle source
# File lib/alexandria/ui/preferences_dialog.rb, line 241 def on_close @preferences_dialog.destroy Alexandria::Preferences.instance.save! end
on_column_toggled(checkbutton)
click to toggle source
# File lib/alexandria/ui/preferences_dialog.rb, line 228 def on_column_toggled(checkbutton) raise if @cols[checkbutton].nil? Preferences.instance.set_variable(@cols[checkbutton], checkbutton.active?) @changed_block.call end
on_help()
click to toggle source
# File lib/alexandria/ui/preferences_dialog.rb, line 246 def on_help Alexandria::UI.display_help(@preferences_dialog, "alexandria-preferences") end
on_provider_add()
click to toggle source
# File lib/alexandria/ui/preferences_dialog.rb, line 183 def on_provider_add provider = NewProviderDialog.new(@preferences_dialog).acquire return unless provider BookProviders.instance.update_priority reload_providers end
on_provider_advanced_toggled(checkbutton)
click to toggle source
# File lib/alexandria/ui/preferences_dialog.rb, line 177 def on_provider_advanced_toggled(checkbutton) on = checkbutton.active? Preferences.instance.view_advanced_settings = on @button_prov_add.visible = @button_prov_remove.visible = on end
on_provider_down()
click to toggle source
# File lib/alexandria/ui/preferences_dialog.rb, line 168 def on_provider_down iter = @treeview_providers.selection.selected next_iter = iter.dup next_iter.next! @treeview_providers.model.move_after(iter, next_iter) sensitize_providers update_priority end
on_provider_remove()
click to toggle source
# File lib/alexandria/ui/preferences_dialog.rb, line 204 def on_provider_remove provider = selected_provider dialog = AlertDialog.new(@main_app, _("Are you sure you want to " \ "permanently delete the provider " \ "'%s'?") % provider.fullname, Gtk::Stock::DIALOG_QUESTION, [[Gtk::Stock::CANCEL, Gtk::ResponseType::CANCEL], [Gtk::Stock::DELETE, Gtk::ResponseType::OK]], _("If you continue, the provider and " \ "all of its preferences will be " \ "permanently deleted.")) dialog.default_response = Gtk::ResponseType::CANCEL dialog.show_all if dialog.run == Gtk::ResponseType::OK provider.remove BookProviders.instance.update_priority reload_providers end dialog.destroy end
on_provider_setup()
click to toggle source
# File lib/alexandria/ui/preferences_dialog.rb, line 151 def on_provider_setup provider = selected_provider unless prefs_empty(provider.prefs) ProviderPreferencesDialog.new(@preferences_dialog, provider).acquire end end
on_provider_up()
click to toggle source
# File lib/alexandria/ui/preferences_dialog.rb, line 158 def on_provider_up iter = @treeview_providers.selection.selected previous_path = iter.path previous_path.prev! model = @treeview_providers.model model.move_after(model.get_iter(previous_path), iter) sensitize_providers update_priority end
on_scanner_device_type(_combo)
click to toggle source
# File lib/alexandria/ui/preferences_dialog.rb, line 191 def on_scanner_device_type(_combo) iter = @scanner_device_type.active_iter Preferences.instance.barcode_scanner = iter[1] if iter && iter[1] end
on_use_scan_sound(checkbox)
click to toggle source
# File lib/alexandria/ui/preferences_dialog.rb, line 200 def on_use_scan_sound(checkbox) Preferences.instance.play_scan_sound = checkbox.active? end
on_use_scanning_sound(checkbox)
click to toggle source
# File lib/alexandria/ui/preferences_dialog.rb, line 196 def on_use_scanning_sound(checkbox) Preferences.instance.play_scanning_sound = checkbox.active? end
prefs_empty(prefs)
click to toggle source
# File lib/alexandria/ui/preferences_dialog.rb, line 147 def prefs_empty(prefs) prefs.empty? || ((prefs.size == 1) && (prefs.first.name == "enabled")) end
setup_barcode_scanner_tab()
click to toggle source
# File lib/alexandria/ui/preferences_dialog.rb, line 122 def setup_barcode_scanner_tab @scanner_device_model = Gtk::ListStore.new(String, String) chosen_scanner_name = Preferences.instance.barcode_scanner index = 0 @scanner_device_type.model = @scanner_device_model renderer = Gtk::CellRendererText.new @scanner_device_type.pack_start(renderer, true) @scanner_device_type.add_attribute(renderer, "text", 0) Alexandria::Scanners.each_scanner do |scanner| iter = @scanner_device_model.append iter[0] = scanner.display_name iter[1] = scanner.name @scanner_device_type.active = index if chosen_scanner_name == scanner.name index += 1 end @use_scanning_sound.active = Preferences.instance.play_scanning_sound @use_scan_sound.active = Preferences.instance.play_scan_sound end
show()
click to toggle source
# File lib/alexandria/ui/preferences_dialog.rb, line 105 def show @preferences_dialog.show end
widget_names()
click to toggle source
# File lib/alexandria/ui/preferences_dialog.rb, line 109 def widget_names [:button_prov_add, :button_prov_down, :button_prov_remove, :button_prov_setup, :button_prov_up, :buttonbox_prov, :checkbutton_col_authors, :checkbutton_col_edition, :checkbutton_col_isbn, :checkbutton_col_loaned_to, :checkbutton_col_own, :checkbutton_col_publish_date, :checkbutton_col_publisher, :checkbutton_col_rating, :checkbutton_col_redd, :checkbutton_col_tags, :checkbutton_col_want, :checkbutton_prov_advanced, :preferences_dialog, :treeview_providers, :scanner_device_type, :use_scanning_sound, :use_scan_sound] end
Private Instance Methods
adjust_selected_provider(prov)
click to toggle source
# File lib/alexandria/ui/preferences_dialog.rb, line 274 def adjust_selected_provider(prov) iter = @treeview_providers.selection.selected iter[0] = if prov.enabled prov.fullname else "<i>#{prov.fullname}</i>" end iter[2] = prov.enabled end
reload_providers()
click to toggle source
# File lib/alexandria/ui/preferences_dialog.rb, line 253 def reload_providers model = @treeview_providers.model model.clear BookProviders.list.each_with_index do |x, index| iter = model.append iter[0] = if x.enabled x.fullname else "<i>#{x.fullname}</i>" end iter[1] = x.name iter[2] = x.enabled iter[3] = index end end
selected_provider()
click to toggle source
# File lib/alexandria/ui/preferences_dialog.rb, line 269 def selected_provider iter = @treeview_providers.selection.selected BookProviders.list.find { |x| x.name == iter[1] } unless iter.nil? end
sensitize_providers()
click to toggle source
# File lib/alexandria/ui/preferences_dialog.rb, line 284 def sensitize_providers model = @treeview_providers.model sel_iter = @treeview_providers.selection.selected if sel_iter.nil? # No selection, we are probably called by ListStore#clear @button_prov_up.sensitive = false @button_prov_down.sensitive = false @button_prov_setup.sensitive = false @button_prov_remove.sensitive = false else last_iter = model.get_iter((BookProviders.list.length - 1).to_s) @button_prov_up.sensitive = sel_iter != model.iter_first @button_prov_down.sensitive = sel_iter != last_iter provider = BookProviders.list.find { |x| x.name == sel_iter[1] } @button_prov_setup.sensitive = !prefs_empty(provider.prefs) @button_prov_remove.sensitive = provider.abstract? end end
update_priority()
click to toggle source
# File lib/alexandria/ui/preferences_dialog.rb, line 303 def update_priority priority = [] @treeview_providers.model.each do |_model, _path, iter| priority << iter[1] end Preferences.instance.providers_priority = priority BookProviders.instance.update_priority end