lib/alexandria/ui/ui_manager.rb in alexandria-book-collection-manager-0.6.9 vs lib/alexandria/ui/ui_manager.rb in alexandria-book-collection-manager-0.7.0
- old
+ new
@@ -1,8 +1,8 @@
# Copyright (C) 2004-2006 Laurent Sansonetti
# Copyright (C) 2008 Joseph Method
-# Copyright (C) 2011 Matijs van Zuijlen
+# Copyright (C) 2011, 2016 Matijs van Zuijlen
#
# Alexandria is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 2 of the
# License, or (at your option) any later version.
@@ -36,11 +36,11 @@
# The maximum number of rating stars displayed.
MAX_RATING_STARS = 5
def initialize(parent)
- super('main_app__builder.glade', widget_names)
+ super('main_app__builder.glade', widget_names)
@parent = parent
@library_separator_iter = nil
@libraries = nil
@move_mid = nil
@@ -58,11 +58,10 @@
setup_active_model
setup_dependents
setup_accel_group
setup_popups
setup_window_events
- setup_dialog_hooks
setup_books_iconview_sorting
on_books_selection_changed
restore_preferences
log.debug { "UI Manager initialized: #{@iconview.model.inspect}" }
@clicking_on_sidepane = true
@@ -87,12 +86,12 @@
@uimanager = Gtk::UIManager.new
@uimanager.insert_action_group(@actiongroup, 0)
end
def setup_dependents
- @listview_model = Gtk::TreeModelSort.new(@filtered_model)
- @iconview_model = Gtk::TreeModelSort.new(@filtered_model)
+ @listview_model = Gtk::TreeModelSort.new(model: @filtered_model)
+ @iconview_model = Gtk::TreeModelSort.new(model: @filtered_model)
@listview_manager = ListViewManager.new @listview, self
@iconview_manager = IconViewManager.new @iconview, self
@sidepane_manager = SidePaneManager.new @library_listview, self
@library_listview = @sidepane_manager.library_listview
@listview_manager.setup_listview_columns_visibility
@@ -113,64 +112,60 @@
log.debug { 'setup_toolbar' }
setup_book_providers
add_main_toolbar_items
@toolbar = @uimanager.get_widget('/MainToolbar')
@toolbar.show_arrow = true
- @toolbar.insert(-1, Gtk::SeparatorToolItem.new)
+ @toolbar.insert(Gtk::SeparatorToolItem.new, -1)
setup_toolbar_combobox
setup_toolbar_filter_entry
- @toolbar.insert(-1, Gtk::SeparatorToolItem.new)
+ @toolbar.insert(Gtk::SeparatorToolItem.new, -1)
setup_toolbar_viewas
@toolbar.show_all
@actiongroup['Undo'].sensitive = @actiongroup['Redo'].sensitive = false
UndoManager.instance.add_observer(self)
- @vbox1.add(@toolbar, position: 1, expand: false, fill: false)
+ @vbox1.add(@toolbar, position: 1, expand: false, fill: false)
end
def add_main_toolbar_items
mid = @uimanager.new_merge_id
@uimanager.add_ui(mid, 'ui/', 'MainToolbar', 'MainToolbar',
- Gtk::UIManager::TOOLBAR, false)
+ :toolbar, false)
@uimanager.add_ui(mid, 'ui/MainToolbar/', 'New', 'New',
- Gtk::UIManager::TOOLITEM, false)
+ :toolitem, false)
@uimanager.add_ui(mid, 'ui/MainToolbar/', 'AddBook', 'AddBook',
- Gtk::UIManager::TOOLITEM, false)
+ :toolitem, false)
# @uimanager.add_ui(mid, "ui/MainToolbar/", "sep", "sep",
- # Gtk::UIManager::SEPARATOR, false)
+ # :separator, false)
# @uimanager.add_ui(mid, "ui/MainToolbar/", "Refresh", "Refresh",
- # Gtk::UIManager::TOOLITEM, false)
+ # :toolitem, false)
end
def setup_toolbar_filter_entry
@filter_entry = Gtk::Entry.new
@filter_entry.signal_connect('changed', &method(:on_toolbar_filter_entry_changed))
@toolitem = Gtk::ToolItem.new
@toolitem.expand = true
@toolitem.border_width = 5
- @tooltips.set_tip(@filter_entry,
- _('Type here the search criterion'), nil)
+ @filter_entry.set_tooltip_text _('Type here the search criterion')
@toolitem << @filter_entry
- @toolbar.insert(-1, @toolitem)
+ @toolbar.insert(@toolitem, -1)
end
def setup_toolbar_combobox
- @tooltips = Gtk::Tooltips.new
-
- cb = Gtk::ComboBox.new
- cb.set_row_separator_func do |_model, iter|
+ cb = Gtk::ComboBoxText.new
+ cb.set_row_separator_func do |model, iter|
# log.debug { "row_separator" }
- iter[0] == '-'
+ model.get_value(iter, 0) == '-'
end
[_('Match everything'),
'-',
_('Title contains'),
_('Authors contain'),
_('ISBN contains'),
_('Publisher contains'),
_('Notes contain'),
- _('Tags contain')
- ].each do |item|
+ _('Tags contain')].each do |item|
cb.append_text(item)
end
cb.active = 0
cb.signal_connect('changed', &method(:on_criterion_combobox_changed))
@@ -179,16 +174,16 @@
eb = Gtk::EventBox.new
eb << cb
@toolitem = Gtk::ToolItem.new
@toolitem.border_width = 5
@toolitem << eb
- @toolbar.insert(-1, @toolitem)
- @tooltips.set_tip(eb, _('Change the search type'), nil)
+ @toolbar.insert(@toolitem, -1)
+ eb.set_tooltip_text _('Change the search type')
end
def setup_toolbar_viewas
- @toolbar_view_as = Gtk::ComboBox.new
+ @toolbar_view_as = Gtk::ComboBoxText.new
@toolbar_view_as.append_text(_('View as Icons'))
@toolbar_view_as.append_text(_('View as List'))
@toolbar_view_as.active = 0
@toolbar_view_as_signal_hid = \
@toolbar_view_as.signal_connect('changed', &method(:on_toolbar_view_as_changed))
@@ -198,12 +193,12 @@
eb = Gtk::EventBox.new
eb << @toolbar_view_as
@toolitem = Gtk::ToolItem.new
@toolitem.border_width = 5
@toolitem << eb
- @toolbar.insert(-1, @toolitem)
- @tooltips.set_tip(eb, _('Choose how to show books'), nil)
+ @toolbar.insert(@toolitem, -1)
+ eb.set_tooltip_text _('Choose how to show books')
end
def setup_book_providers
log.debug { 'setup_book_providers' }
mid = @uimanager.new_merge_id
@@ -212,11 +207,11 @@
['ui/MainMenubar/ViewMenu/OnlineInformation/',
'ui/BookPopup/OnlineInformation/',
'ui/NoBookPopup/OnlineInformation/'].each do |path|
log.debug { "Adding #{name} to #{path}" }
@uimanager.add_ui(mid, path, name, name,
- Gtk::UIManager::MENUITEM, false)
+ :menuitem, false)
end
end
end
def add_menus_and_popups_from_xml
@@ -232,25 +227,13 @@
@main_app.add_accel_group(@uimanager.accel_group)
end
def setup_menus
@menubar = @uimanager.get_widget('/MainMenubar')
- @vbox1.add(@menubar, position: 0, expand: false, fill: false)
+ @vbox1.add(@menubar, position: 0, expand: false, fill: false)
end
- def setup_dialog_hooks
- log.debug { 'setup_dialog_hooks' }
- Gtk::AboutDialog.set_url_hook do |_about, link|
- log.debug { 'set_url_hook' }
- open_web_browser(link)
- end
- Gtk::AboutDialog.set_email_hook do |_about, link|
- log.debug { 'set_email_hook' }
- open_email_client('mailto:' + link)
- end
- end
-
def setup_popups
log.debug { 'setup_popups' }
@library_popup = @uimanager.get_widget('/LibraryPopup')
@smart_library_popup = @uimanager.get_widget('/SmartLibraryPopup')
@nolibrary_popup = @uimanager.get_widget('/NoLibraryPopup')
@@ -267,12 +250,12 @@
def setup_active_model
log.debug { 'setting up active model' }
# The active model.
list = [
- Gdk::Pixbuf, # COVER_LIST
- Gdk::Pixbuf, # COVER_ICON
+ GdkPixbuf::Pixbuf, # COVER_LIST
+ GdkPixbuf::Pixbuf, # COVER_ICON
String, # TITLE
String, # TITLE_REDUCED
String, # AUTHORS
String, # ISBN
String, # PUBLISHER
@@ -299,24 +282,24 @@
if filter.empty?
true
else
data = case @filter_books_mode
when 0 then
- (iter[Columns::TITLE] or '') +
- (iter[Columns::AUTHORS] or '') +
- (iter[Columns::ISBN] or '') +
- (iter[Columns::PUBLISHER] or '') +
- (iter[Columns::NOTES] or '') +
- (iter[Columns::TAGS] or '')
+ (iter[Columns::TITLE] || '') +
+ (iter[Columns::AUTHORS] || '') +
+ (iter[Columns::ISBN] || '') +
+ (iter[Columns::PUBLISHER] || '') +
+ (iter[Columns::NOTES] || '') +
+ (iter[Columns::TAGS] || '')
when 2 then iter[Columns::TITLE]
when 3 then iter[Columns::AUTHORS]
when 4 then iter[Columns::ISBN]
when 5 then iter[Columns::PUBLISHER]
when 6 then iter[Columns::NOTES]
when 7 then iter[Columns::TAGS]
end
- !data.nil? and data.downcase.include?(filter.downcase)
+ !data.nil? && data.downcase.include?(filter.downcase)
end
end
# Give filter entry the initial keyboard focus.
@filter_entry.grab_focus
@@ -342,11 +325,11 @@
widget.unselect_all
obj.select_path(path)
sensitize_library selected_library
if widget.is_a?(Gtk::TreeView)
- Gtk.idle_add do
+ GLib::Idle.add do
# cur_path, focus_col = widget.cursor
widget.focus = true
widget.set_cursor(path, nil, false)
@@ -375,17 +358,17 @@
# Then we wait a while and only *then* pop up the menu.
if library_already_selected
sensitize_library selected_library
- Gtk.idle_add do
+ GLib::Idle.add do
menu.popup(nil, nil, event.button, event.time)
# @clicking_on_sidepane = false
false
end
else
- Gtk.idle_add do
+ GLib::Idle.add do
menu.popup(nil, nil, event.button, event.time)
# @clicking_on_sidepane = false
false
end
@@ -408,11 +391,11 @@
# widget.grab_focus
widget.get_path_at_pos(event.x, event.y).nil? ? @nolibrary_popup : selected_library.is_a?(SmartLibrary) ? @smart_library_popup : @library_popup
end
def event_is_right_click(event)
- event.event_type == Gdk::Event::BUTTON_PRESS and event.button == 3
+ (event.event_type == :button_press) && (event.button == 3)
end
def on_books_button_press_event(widget, event)
log.debug { 'books_button_press_event' }
if event_is_right_click event
@@ -428,11 +411,11 @@
end
else
widget.unselect_all
end
- menu = (selected_books.empty?) ? @nobook_popup : @book_popup
+ menu = selected_books.empty? ? @nobook_popup : @book_popup
menu.popup(nil, nil, event.button, event.time)
end
end
def get_library_selection_text(library)
@@ -445,11 +428,11 @@
if n_unrated == library.length
n_("Library '%s' selected, %d unrated book",
"Library '%s' selected, %d unrated books",
library.length) % [library.name,
library.length]
- elsif n_unrated == 0
+ elsif n_unrated.zero?
n_("Library '%s' selected, %d book",
"Library '%s' selected, %d books",
library.length) % [library.name,
library.length]
else
@@ -485,11 +468,11 @@
books = selected_books
set_status_label(get_appbar_status(library, books))
# selection = @library_listview.selection.selected ? @library_listview.selection.selected.has_focus? : false
# Focus is the wrong idiom here.
- unless @clicking_on_sidepane or (@main_app.focus == @library_listview)
+ unless @clicking_on_sidepane || (@main_app.focus == @library_listview)
# unless @main_app.focus == @library_listview
log.debug { "Currently focused widget: #{@main_app.focus.inspect}" }
log.debug { "#{@library_listview} : #{@library_popup} : #{@listview}" }
log.debug { "@library_listview: #{@library_listview.has_focus?} or @library_popup:#{@library_popup.has_focus?}" } # or selection: #{selection}"}
@@ -519,11 +502,11 @@
# FIXME: Clean up endless negation in this logic
no_urls = true
BookProviders.each do |provider|
has_no_url = true
begin
- has_no_url = (b.isbn.nil? or b.isbn.strip.empty? or provider.url(b).nil?)
+ has_no_url = (b.isbn.nil? || b.isbn.strip.empty? || provider.url(b).nil?)
rescue => ex
log.warn { "Error determining URL from #{provider.name}; #{ex.message}" }
end
@actiongroup[provider.action_name].sensitive = !has_no_url
no_urls = false unless has_no_url
@@ -534,20 +517,20 @@
end
end
@clicking_on_sidepane = false
end
- def on_switch_page
+ def on_switch_page(_notebook, _page, page_num)
log.debug { 'on_switch_page' }
- @actiongroup['ArrangeIcons'].sensitive = @notebook.page == 0
+ @actiongroup['ArrangeIcons'].sensitive = page_num.zero?
on_books_selection_changed
end
def on_focus(widget, _event_focus)
- if @clicking_on_sidepane or widget == @library_listview
+ if @clicking_on_sidepane || (widget == @library_listview)
log.debug { 'on_focus: @library_listview' }
- Gtk.idle_add do
+ GLib::Idle.add do
%w(OnlineInformation SelectAll DeselectAll).each do |action|
@actiongroup[action].sensitive = false
end
@actiongroup['Properties'].sensitive = selected_library.is_a?(SmartLibrary)
@actiongroup['Delete'].sensitive = determine_delete_option
@@ -557,11 +540,11 @@
on_books_selection_changed
end
end
def determine_delete_option
- sensitive = (@libraries.all_regular_libraries.length > 1 or selected_library.is_a?(SmartLibrary))
+ sensitive = (@libraries.all_regular_libraries.length > 1 || selected_library.is_a?(SmartLibrary))
sensitive
end
def on_close_sidepane
log.debug { 'on_close_sidepane' }
@@ -570,19 +553,14 @@
def select_a_book(book)
select_this_book = proc do |bk, view|
@filtered_model.refilter
iter = iter_from_book bk
- unless iter
- next
- end
+ next unless iter
path = iter.path
- unless view.model
- next
- end
- path = view.model.convert_path_to_child_path(path)
- path = @filtered_model.convert_path_to_child_path(path)
+ next unless view.model
+ path = view_path_to_model_path(view, path)
log.debug { "Path for #{bk.ident} is #{path}" }
selection = view.respond_to?(:selection) ? @listview.selection : @iconview
selection.unselect_all
selection.select_path(path)
end
@@ -604,13 +582,11 @@
if caller.is_a?(UndoManager)
@actiongroup['Undo'].sensitive = caller.can_undo?
@actiongroup['Redo'].sensitive = caller.can_redo?
elsif caller.is_a?(Library)
unless caller.updating?
- Gtk.queue do
- handle_update_caller_library ary
- end
+ handle_update_caller_library ary
end
else
raise 'unrecognized update event'
end
end
@@ -623,13 +599,11 @@
case kind
when Library::BOOK_ADDED
append_book(book)
when Library::BOOK_UPDATED
iter = iter_from_ident(book.saved_ident)
- if iter
- fill_iter_with_book(iter, book)
- end
+ fill_iter_with_book(iter, book) if iter
when Library::BOOK_REMOVED
@model.remove(iter_from_book(book))
end
@iconview.unfreeze
@listview.unfreeze # NEW
@@ -644,47 +618,13 @@
def open_web_browser(url)
if url.nil?
log.warn('Attempt to open browser with nil url')
return
end
- if (cmd = Preferences.instance.www_browser)
- launch_command = cmd
- if cmd.downcase.index('%u')
- launch_command = cmd.gsub(/%U/i, "\"" + url + "\"")
- else
- launch_command = cmd + " \"" + url + "\""
- end
- Thread.new { system(launch_command) }
- else
- ErrorDialog.new(@main_app,
- _('Unable to launch the web browser'),
- _('Check out that a web browser is ' \
- 'configured as default (Desktop ' \
- 'Preferences -> Advanced -> Preferred ' \
- 'Applications) and try again.'))
- end
+ Gtk.show_uri url
end
- def open_email_client(url)
- if (cmd = Preferences.instance.email_client)
- launch_command = cmd
- if cmd.downcase.index('%u')
- launch_command = cmd.gsub(/%u/i, "\"" + url + "\"")
- else
- launch_command = cmd + " \"" + url + "\""
- end
- Thread.new { system(launch_command) }
- else
- ErrorDialog.new(@main_app,
- _('Unable to launch the mail reader'),
- _('Check out that a mail reader is ' \
- 'configured as default (Desktop ' \
- 'Preferences -> Advanced -> Preferred ' \
- 'Applications) and try again.'))
- end
- end
-
def detach_old_libraries
log.debug { 'Un-observing old libraries' }
@libraries.all_regular_libraries.each do |library|
if library.is_a?(Library)
library.delete_observer(self)
@@ -717,38 +657,38 @@
# standard. We will attempt to replace them from the book
# providers. Otherwise, we will turn them into manual
# entries.\n" )
@libraries.ruined_books.each { |bi|
- new_message += "\n#{bi[1] or bi[1].inspect}"
+ new_message += "\n#{bi[1] || bi[1].inspect}"
}
recovery_dialog = Gtk::MessageDialog.new(@main_app, Gtk::Dialog::MODAL,
Gtk::MessageDialog::WARNING,
Gtk::MessageDialog::BUTTONS_OK_CANCEL,
new_message).show
recovery_dialog.signal_connect('response') do |_dialog, response_type|
recovery_dialog.destroy
- if response_type == Gtk::Dialog::RESPONSE_OK
+ if response_type == :ok
# progress indicator...
@progressbar.fraction = 0
- @appbar.children.first.visible = true # show the progress bar
+ @appbar.children.first.visible = true # show the progress bar
total_book_count = @libraries.ruined_books.size
fraction_per_book = 1.0 / total_book_count
prog_percentage = 0
@libraries.ruined_books.reverse!
- Gtk.idle_add do
+ GLib::Idle.add do
ruined_book = @libraries.ruined_books.pop
if ruined_book
book, isbn, library = ruined_book
begin
book_rslt = Alexandria::BookProviders.isbn_search(isbn.to_s)
book = book_rslt[0]
cover_uri = book_rslt[1]
- # TODO if the book was saved okay, make sure the old
+ # TODO: if the book was saved okay, make sure the old
# empty yaml file doesn't stick around esp if doing
# isbn-10 --> isbn-13 conversion...
if isbn.size == 10
filename = library.yaml(isbn)
log.debug { "removing old file #{filename}" }
@@ -816,22 +756,22 @@
iter[Columns::AUTHORS] = book.authors.join(', ')
iter[Columns::ISBN] = book.isbn.to_s
iter[Columns::PUBLISHER] = book.publisher
iter[Columns::PUBLISH_DATE] = book.publishing_year.to_s
iter[Columns::EDITION] = book.edition
- iter[Columns::NOTES] = (book.notes or '')
- iter[Columns::LOANED_TO] = (book.loaned_to or '')
- rating = (book.rating or Book::DEFAULT_RATING)
+ iter[Columns::NOTES] = (book.notes || '')
+ iter[Columns::LOANED_TO] = (book.loaned_to || '')
+ rating = (book.rating || Book::DEFAULT_RATING)
iter[Columns::RATING] = MAX_RATING_STARS - rating # ascending order is the default
iter[Columns::OWN] = book.own?
iter[Columns::REDD] = book.redd?
iter[Columns::WANT] = book.want?
- if book.tags
- iter[Columns::TAGS] = book.tags.join(',')
- else
- iter[Columns::TAGS] = ''
- end
+ iter[Columns::TAGS] = if book.tags
+ book.tags.join(',')
+ else
+ ''
+ end
icon = Icons.cover(selected_library, book)
log.debug { "Setting icon #{icon} for book #{book.title}" }
iter[Columns::COVER_LIST] = cache_scaled_icon(icon, 20, 25)
@@ -914,49 +854,42 @@
library = selected_library
@model.clear
@iconview.freeze
@listview.freeze # NEW / bdewey
@progressbar.fraction = 0
- @appbar.children.first.visible = true # show the progress bar
+ @appbar.children.first.visible = true # show the progress bar
set_status_label(_("Loading '%s'...") % library.name)
total = library.length
log.debug { "library #{library.name} length #{library.length}" }
n = 0
- Gtk.idle_add do
+ GLib::Idle.add do
block_return = true
book = library[n]
if book
- Gtk.queue do
- begin
- append_book(book)
- rescue => ex
- trace = ex.backtrace.join("\n > ")
- log.error { "append_books failed #{ex.message} #{trace}" }
- end
- # convert to percents
- coeff = total / 100.0
- percent = n / coeff
- fraction = percent / 100
- log.debug { "#index #{n} percent #{percent} fraction #{fraction}" }
- @progressbar.fraction = fraction
- n += 1
+ begin
+ append_book(book)
+ rescue => ex
+ trace = ex.backtrace.join("\n > ")
+ log.error { "append_books failed #{ex.message} #{trace}" }
end
+ fraction = n * 1.0 / total
+ log.debug { "#index #{n} fraction #{fraction}" }
+ @progressbar.fraction = fraction
+ n += 1
else
- Gtk.queue do
- @iconview.unfreeze
- @listview.unfreeze # NEW / bdewey
- @filtered_model.refilter
- @listview.columns_autosize
- @progressbar.fraction = 1
- # Hide the progress bar.
- @appbar.children.first.visible = false
- # Refresh the status bar.
- on_books_selection_changed
- @library_listview.set_sensitive(true)
- block_return = false
- end
+ @iconview.unfreeze
+ @listview.unfreeze # NEW / bdewey
+ @filtered_model.refilter
+ @listview.columns_autosize
+ @progressbar.fraction = 1
+ # Hide the progress bar.
+ @appbar.children.first.visible = false
+ # Refresh the status bar.
+ on_books_selection_changed
+ @library_listview.set_sensitive(true)
+ block_return = false
end
block_return
end
end
@@ -987,61 +920,48 @@
log.debug { "Book from iter: #{library} #{iter}" }
library.find { |x| x.ident == iter[Columns::IDENT] }
end
def iter_from_ident(ident)
- log.debug { "#{ident}" }
+ log.debug { ident.to_s }
iter = @model.iter_first
ok = true
while ok
- if iter[Columns::IDENT] == ident
- return iter
- end
+ return iter if iter[Columns::IDENT] == ident
ok = iter.next!
end
nil
end
def iter_from_book(book)
- log.debug { "#{book}" }
+ log.debug { book.to_s }
iter_from_ident(book.ident)
end
def collate_selected_books(page)
- a = []
+ result = []
library = selected_library
- view = page == 0 ? @iconview : @listview
- selection = page == 0 ? @iconview : @listview.selection
- selection.selected_each do |_the_view, path|
- # don't use the_view which is passed in by this block
- # as it doesn't consider the filtering for some reason
- # see bug #24568
- unless view.model
- next
+ if page.zero?
+ result = @iconview.selected_items.map do |path|
+ path = view_path_to_model_path(@iconview, path)
+ book_from_iter(library, @model.get_iter(path))
end
- path = view.model.convert_path_to_child_path(path)
- if path
- path = @filtered_model.convert_path_to_child_path(path)
- # FIX this sometimes returns a nil path for iconview...
- if path
- iter = @model.get_iter(path)
- if iter
- a << book_from_iter(library, iter)
- end
- end
- # This used to cause a crash when manually adding the first
- # book to a Library displayed in an Iconview
- # TODO find root cause of this
+ else
+ selection = @listview.selection
+ rows, _model = selection.selected_rows
+ result = rows.map do |path|
+ path = view_path_to_model_path(@listview, path)
+ book_from_iter(library, @model.get_iter(path))
end
end
- a
+
+ result
end
def selected_books
- a = collate_selected_books(@notebook.page)
- selected = a.select { |x| !x.nil? }
+ selected = collate_selected_books(@notebook.page).compact
log.debug { "Selected books = #{selected.inspect}" }
selected
end
def refresh_libraries
@@ -1052,21 +972,19 @@
@main_app.title = library.name + ' - ' + TITLE
# Disable the selected library in the move libraries actions.
@libraries.all_regular_libraries.each do |i_library|
action = @actiongroup[i_library.action_name]
- if action
- action.sensitive = i_library != library
- end
+ action.sensitive = i_library != library if action
end
sensitize_library library
end
def sensitize_library(library)
smart = library.is_a?(SmartLibrary)
log.debug { "sensitize_library: smartlibrary = #{smart}" }
- Gtk.idle_add do
+ GLib::Idle.add do
@actiongroup['AddBook'].sensitive = !smart
@actiongroup['AddBookManual'].sensitive = !smart
@actiongroup['Properties'].sensitive = smart
can_delete = smart || (@libraries.all_regular_libraries.length > 1)
@actiongroup['Delete'].sensitive = can_delete ## true #(@libraries.all_regular_libraries.length > 1)
@@ -1130,11 +1048,11 @@
@prefs.statusbar_visible = @actiongroup['Statusbar'].active?
@prefs.view_as = @notebook.page
@prefs.selected_library = selected_library.name
cols_width = {}
@listview.columns.each do |c|
- cols_width[c.title] = [c.widget.size_request.first, c.width].max
+ cols_width[c.title] = c.width
end
@prefs.cols_width = '{' + cols_width.to_a.map do |t, v|
'"' + t + '": ' + v.to_s
end.join(', ') + '}'
log.debug { "cols_width: #{@prefs.cols_width} " }
@@ -1147,21 +1065,21 @@
UndoManager.instance.push { undoable_move(dest, source, books) }
end
def move_selected_books_to_library(library)
books = selected_books.select do |book|
- !library.include?(book) or
+ !library.include?(book) ||
ConflictWhileCopyingDialog.new(@main_app,
library,
book).replace?
end
undoable_move(selected_library, library, books)
end
def setup_move_actions
@actiongroup.actions.each do |action|
- next unless /^MoveIn/.match(action.name)
+ next unless /^MoveIn/ =~ action.name
@actiongroup.remove_action(action)
end
actions = []
@libraries.all_regular_libraries.each do |library|
actions << [
@@ -1176,11 +1094,11 @@
@libraries.all_regular_libraries.each do |library|
name = library.action_name
['ui/MainMenubar/EditMenu/Move/',
'ui/BookPopup/Move/'].each do |path|
@uimanager.add_ui(@move_mid, path, name, name,
- Gtk::UIManager::MENUITEM, false)
+ :menuitem, false)
end
end
end
def current_view
@@ -1194,15 +1112,12 @@
# Gets the sort order of the current library, for use by export
def library_sort_order
# added by Cathal Mc Ginley, 23 Oct 2007
log.debug { "library_sort_order #{@notebook.page}: #{@iconview.model.inspect} #{@listview.model.inspect}" }
- sorted_on = current_view.model.sort_column_id
- if sorted_on
- sort_column = sorted_on[0]
- sort_order = sorted_on[1]
-
+ result, sort_column, sort_order = current_view.model.sort_column_id
+ if result
column_ids_to_attributes = { 2 => :title,
4 => :authors,
5 => :isbn,
6 => :publisher,
7 => :publishing_year,
@@ -1210,12 +1125,12 @@
12 => :redd,
13 => :own,
14 => :want,
9 => :rating }
- sort_attribute = column_ids_to_attributes[sort_column]
- ascending = (sort_order == Gtk::SORT_ASCENDING)
+ sort_attribute = column_ids_to_attributes.fetch sort_column
+ ascending = (sort_order == :ascending)
LibrarySortOrder.new(sort_attribute, ascending)
else
LibrarySortOrder::Unsorted.new
end
end
@@ -1258,11 +1173,11 @@
end
UndoManager.instance.push { undoable_undelete(library, books) }
end
def remove_library_separator
- if !@library_separator_iter.nil? and @libraries.all_smart_libraries.empty?
+ if !@library_separator_iter.nil? && @libraries.all_smart_libraries.empty?
@library_listview.model.remove(@library_separator_iter)
@library_separator_iter = nil
end
end
@@ -1289,16 +1204,23 @@
end
ICONS_SORTS = [
Columns::TITLE, Columns::AUTHORS, Columns::ISBN,
Columns::PUBLISHER, Columns::EDITION, Columns::RATING, Columns::REDD, Columns::OWN, Columns::WANT
- ]
+ ].freeze
def setup_books_iconview_sorting
- sort_order = @prefs.reverse_icons ? Gtk::SORT_DESCENDING : Gtk::SORT_ASCENDING
+ sort_order = @prefs.reverse_icons ? :descending : :ascending
mode = ICONS_SORTS[@prefs.arrange_icons_mode]
@iconview_model.set_sort_column_id(mode, sort_order)
@filtered_model.refilter # force redraw
+ end
+
+ private
+
+ def view_path_to_model_path(view, path)
+ path = view.model.convert_path_to_child_path(path)
+ @filtered_model.convert_path_to_child_path(path) if path
end
end
end
end