From 6761c010227619d24d49a7f166e29dae3e84ba74 Mon Sep 17 00:00:00 2001 From: wmorgan Date: Wed, 12 Sep 2007 00:05:46 +0000 Subject: [PATCH] display and allow toggling of per-message new/read status in thread-view-mode git-svn-id: svn://rubyforge.org/var/svn/sup/trunk@565 5c8cc53c-5e98-4d25-b20a-d8db53a31250 --- lib/sup/modes/thread-index-mode.rb | 1 - lib/sup/modes/thread-view-mode.rb | 40 ++++++++++++++++++------------ 2 files changed, 24 insertions(+), 17 deletions(-) diff --git a/lib/sup/modes/thread-index-mode.rb b/lib/sup/modes/thread-index-mode.rb index baa0325..3fa4c25 100644 --- a/lib/sup/modes/thread-index-mode.rb +++ b/lib/sup/modes/thread-index-mode.rb @@ -80,7 +80,6 @@ class ThreadIndexMode < LineCursorMode ## the first draw_screen is needed before topline and botline ## are set, and the second to show the cursor having moved - t.remove_label :unread update_text_for_line curpos UpdateManager.relay self, :read, t end diff --git a/lib/sup/modes/thread-view-mode.rb b/lib/sup/modes/thread-view-mode.rb index abee116..643f6e2 100644 --- a/lib/sup/modes/thread-view-mode.rb +++ b/lib/sup/modes/thread-view-mode.rb @@ -24,7 +24,8 @@ class ThreadViewMode < LineCursorMode k.add :jump_to_next_open, "Jump to next open message", 'n' k.add :jump_to_prev_open, "Jump to previous open message", 'p' k.add :toggle_starred, "Star or unstar message", '*' - k.add :collapse_non_new_messages, "Collapse all but new messages", 'N' + k.add :toggle_new, "Toggle new/read status of message", 'N' +# k.add :collapse_non_new_messages, "Collapse all but new messages", 'N' k.add :reply, "Reply to a message", 'r' k.add :forward, "Forward a message", 'f' k.add :alias, "Edit alias/nickname for a person", 'i' @@ -60,7 +61,7 @@ class ThreadViewMode < LineCursorMode @layout[m].state = initial_state_for m @layout[m].color = altcolor ? :alternate_patina_color : :message_patina_color @layout[m].star_color = altcolor ? :alternate_starred_patina_color : :starred_patina_color - @layout[m].orig_new = m.has_label? :unread + @layout[m].orig_new = m.has_label? :read altcolor = !altcolor if latest_date.nil? || m.date > latest_date latest_date = m.date @@ -71,6 +72,7 @@ class ThreadViewMode < LineCursorMode @layout[latest].state = :open if @layout[latest].state == :closed @layout[earliest].state = :detailed if earliest.has_label?(:unread) || @thread.size == 1 + @thread.remove_label :unread regen_text end @@ -150,10 +152,19 @@ class ThreadViewMode < LineCursorMode def toggle_starred m = @message_lines[curpos] or return - if m.has_label? :starred - m.remove_label :starred + toggle_label m, :starred + end + + def toggle_new + m = @message_lines[curpos] or return + toggle_label m, :unread + end + + def toggle_label m, label + if m.has_label? label + m.remove_label label else - m.add_label :starred + m.add_label label end ## TODO: don't recalculate EVERYTHING just to add a stupid little ## star to the display @@ -393,14 +404,10 @@ private def message_patina_lines m, state, start, parent, prefix, color, star_color prefix_widget = [color, prefix] - widget = - case state - when :closed - [color, "+ "] - when :open, :detailed - [color, "- "] - end - imp_widget = + + open_widget = [color, (state == :closed ? "+ " : "- ")] + new_widget = [color, (m.has_label?(:unread) ? "N" : " ")] + starred_widget = if m.has_label?(:starred) [star_color, "* "] else @@ -410,19 +417,20 @@ private case state when :open @person_lines[start] = m.from - [[prefix_widget, widget, imp_widget, + [[prefix_widget, open_widget, new_widget, starred_widget, [color, "#{m.from ? m.from.mediumname : '?'} to #{m.recipients.map { |l| l.shortname }.join(', ')} #{m.date.to_nice_s} (#{m.date.to_nice_distance_s})"]]] when :closed @person_lines[start] = m.from - [[prefix_widget, widget, imp_widget, + [[prefix_widget, open_widget, new_widget, starred_widget, [color, "#{m.from ? m.from.mediumname : '?'}, #{m.date.to_nice_s} (#{m.date.to_nice_distance_s}) #{m.snippet}"]]] when :detailed @person_lines[start] = m.from - from = [[prefix_widget, widget, imp_widget, [color, "From: #{m.from ? format_person(m.from) : '?'}"]]] + from = [[prefix_widget, open_widget, new_widget, starred_widget, + [color, "From: #{m.from ? format_person(m.from) : '?'}"]]] rest = [] unless m.to.empty? -- 2.45.2