# File lib/rabbit/canvas.rb, line 133 def initialize(logger, renderer) @logger = logger @frame = NullFrame.new @theme_name = nil @saved_image_base_name = nil @saved_image_type = "png" @processing = false @quitted = false @parse_request_queue = [] @apply_theme_request_queue = [] @auto_redraw_timer = nil @output_html = false @rss_base_uri = nil @source_filename = nil @migemo_dictionary_search_path = [] @migemo_dictionary_name = nil @limit_time = nil @use_gl = false @font_resolution_ratio = 1 @max_n_comments = 100 @allotted_time = nil @comment_theme = nil clear @renderer = renderer.new(self) @actions = Action.action_group(self) end
# File lib/rabbit/canvas.rb, line 299 def <<(slide) slide.index = slides.size slides << slide end
# File lib/rabbit/canvas.rb, line 602 def action(name) act = @actions.get_action(name) if act act else logger.warn(_("Unknown action: %s") % name) false end end
# File lib/rabbit/canvas.rb, line 592 def activate(name, &block) act = action(name) if act and act.sensitive? act.activate(&block) true else false end end
# File lib/rabbit/canvas.rb, line 621 def allotted_time time = @allotted_time time ||= title_slide.allotted_time if title_slide Utils.ensure_time(time) end
# File lib/rabbit/canvas.rb, line 575 def append_comment(comment) @comments << comment @comments.shift if @comments.size > @max_n_comments @on_comment_callbacks.each do |name, callback| begin callback.call(comment) rescue logger.error($!) end end true end
# File lib/rabbit/canvas.rb, line 304 def apply_theme(name=nil, &block) _apply_theme(name, Object.new.__id__, &block) end
# File lib/rabbit/canvas.rb, line 168 def applying? not @apply_theme_request_queue.empty? end
# File lib/rabbit/canvas.rb, line 185 def attach_to(frame, window, container=nil, &block) @frame = frame if frame @renderer.attach_to(window, container, &block) if window end
# File lib/rabbit/canvas.rb, line 531 def cache_all_slides process do @renderer.cache_all_slides end end
# File lib/rabbit/canvas.rb, line 271 def change_current_index(new_index) mode = @index_mode if mode index = @index_current_index @index_current_index = new_index else index = @current_index @current_index = new_index end if 0 <= current_index and current_index < slide_size yield end ensure if mode @index_current_index = index else @current_index = index end end
# File lib/rabbit/canvas.rb, line 263 def current_index if @index_mode @index_current_index else @current_index end end
# File lib/rabbit/canvas.rb, line 253 def current_slide slide = slides[current_index] if slide slide else move_to_first slides.first end end
# File lib/rabbit/canvas.rb, line 569 def delete_on_comment_proc_by_name(name) @on_comment_callbacks.reject! do |callback_name, callback| callback_name == name end end
# File lib/rabbit/canvas.rb, line 190 def detach @frame = NullFrame.new @renderer.detach end
# File lib/rabbit/canvas.rb, line 295 def each(&block) slides.each(&block) end
# File lib/rabbit/canvas.rb, line 230 def find_slide(pattern) slides.find {|slide| slide.match?(pattern)} end
# File lib/rabbit/canvas.rb, line 507 def first_slide? current_index.zero? end
# File lib/rabbit/canvas.rb, line 639 def font_resolution INTERNAL_DPI * @font_resolution_ratio end
# File lib/rabbit/canvas.rb, line 181 def front(public_level=nil) Front.new(self, public_level) end
# File lib/rabbit/canvas.rb, line 367 def full_path(path) @source and @source.full_path(path) end
# File lib/rabbit/canvas.rb, line 401 def fullscreened @renderer.post_fullscreen end
# File lib/rabbit/canvas.rb, line 527 def have_next? have_next_slide? or (current_slide and !current_slide.last?) end
# File lib/rabbit/canvas.rb, line 523 def have_next_slide? slide_size - 1 > current_index end
# File lib/rabbit/canvas.rb, line 519 def have_previous? have_previous_slide? or (current_slide and !current_slide.first?) end
# File lib/rabbit/canvas.rb, line 515 def have_previous_slide? 0 < current_index end
# File lib/rabbit/canvas.rb, line 409 def iconified @renderer.post_iconify end
# File lib/rabbit/canvas.rb, line 470 def index_mode? @index_mode end
# File lib/rabbit/canvas.rb, line 511 def last_slide? slide_size.zero? or current_index == (slide_size - 1) end
# File lib/rabbit/canvas.rb, line 312 def merge_theme(name) unless @slides.empty? manager = Theme::Manager.new(self) manager.apply(name) @renderer.post_apply_theme end end
# File lib/rabbit/canvas.rb, line 462 def move_to_first move_to_if_can(0) end
# File lib/rabbit/canvas.rb, line 423 def move_to_if_can(index) if index and 0 <= index and index < slide_size move_to(index) end current_index end
# File lib/rabbit/canvas.rb, line 466 def move_to_last move_to(slide_size - 1) end
# File lib/rabbit/canvas.rb, line 430 def move_to_next_if_can slide = current_slide if slide and !slide.last? old_index = slide.drawing_index slide.move_to_next Action.update_status(self) @renderer.post_move_in_slide(old_index, slide.drawing_index) else move_to_next_slide_if_can end end
# File lib/rabbit/canvas.rb, line 442 def move_to_next_slide_if_can move_to_if_can(current_index + 1) end
# File lib/rabbit/canvas.rb, line 446 def move_to_previous_if_can slide = current_slide if slide and !slide.first? old_index = slide.drawing_index slide.move_to_previous Action.update_status(self) @renderer.post_move_in_slide(old_index, slide.drawing_index) else move_to_previous_slide_if_can end end
# File lib/rabbit/canvas.rb, line 458 def move_to_previous_slide_if_can move_to_if_can(current_index - 1) end
# File lib/rabbit/canvas.rb, line 363 def need_reload_source? !@processing and @source and @source.modified? end
# File lib/rabbit/canvas.rb, line 291 def next_slide slides[current_index + 1] end
# File lib/rabbit/canvas.rb, line 565 def on_comment(name, &callback) @on_comment_callbacks << [name, callback] end
# File lib/rabbit/canvas.rb, line 324 def parse(source=nil, callback=nil, &block) id = Object.new.__id__ @parse_request_queue.push(id) @source = source || @source begin index = current_index keep_index do @renderer.pre_parse clear Parser.parse(self, @source) set_current_index(index) reload_theme do if @parse_request_queue.last != id raise ParseFinish end callback.call if callback end @renderer.post_parse index = current_index end set_current_index(index) rescue ParseFinish rescue ParseError, UnsupportedFormatError if block_given? yield($!) else logger.warn($!.message) end ensure @parse_request_queue.delete_if {|x| x == id} end end
# File lib/rabbit/canvas.rb, line 164 def parsing? not @parse_request_queue.empty? end
# File lib/rabbit/canvas.rb, line 395 def print(&block) process do @renderer.print(&block) end end
# File lib/rabbit/canvas.rb, line 537 def processing? @processing end
# File lib/rabbit/canvas.rb, line 176 def quit @quitted = true @frame.quit end
# File lib/rabbit/canvas.rb, line 357 def reload_source(callback=nil, &block) if need_reload_source? parse(nil, callback, &block) end end
# File lib/rabbit/canvas.rb, line 320 def reload_theme(&block) apply_theme(@theme_name, &block) end
# File lib/rabbit/canvas.rb, line 635 def reset_timer @limit_time = nil end
# File lib/rabbit/canvas.rb, line 631 def rest_time @limit_time ? @limit_time - Time.now : nil end
# File lib/rabbit/canvas.rb, line 381 def save_as_image process do generator = HTML::Generator.new(self, saved_image_base_name, @saved_image_type, @output_html, @output_index_html, @rss_base_uri) generator.pdf_filename = filename if /\.pdf/ =~ filename.to_s generator.source_filename = @source_filename generator.save end end
# File lib/rabbit/canvas.rb, line 413 def saved_image_base_name if @saved_image_base_name base_name = GLib.filename_to_utf8(@saved_image_base_name) else base_name = title.dup end base_name << "-index" if index_mode? base_name end
# File lib/rabbit/canvas.rb, line 234 def slide_index(pattern) slides.each_with_index do |slide, i| return i if slide.match?(pattern) end nil end
# File lib/rabbit/canvas.rb, line 241 def slide_indexes(pattern) indexes = [] slides.each_with_index do |slide, i| indexes << i if slide.match?(pattern) end indexes end
# File lib/rabbit/canvas.rb, line 249 def slide_size slides.size end
# File lib/rabbit/canvas.rb, line 215 def slide_text(index=current_index) return "" if slides.empty? slide = slides[index] return "" if slide.nil? slide.text.strip end
# File lib/rabbit/canvas.rb, line 204 def slide_title(index=current_index) return "" if slides.empty? slide = slides[index] return title if slide.nil? if slide.is_a?(Element::TitleSlide) slide.title else "#{title}: #{slide.title}" end end
# File lib/rabbit/canvas.rb, line 222 def slides if @index_mode @index_slides else @slides end end
# File lib/rabbit/canvas.rb, line 496 def source_force_modified(force_modified) prev = @source.force_modified @source.force_modified = force_modified yield @source @source.force_modified = prev end
# File lib/rabbit/canvas.rb, line 541 def start_auto_redraw_timer(interval) stop_auto_redraw_timer timer = GLib::Timeout.add(interval * 1000) do if quitted? false else activate("Redraw") true end end @auto_redraw_timer = timer end
# File lib/rabbit/canvas.rb, line 627 def start_timer(limit) @limit_time = Time.now + limit end
# File lib/rabbit/canvas.rb, line 554 def stop_auto_redraw_timer if @auto_redraw_timer if GLib::Source.respond_to?(:remove) GLib::Source.remove(@auto_redraw_timer) else Gtk.timeout_remove(@auto_redraw_timer) end @auto_redraw_timer = nil end end
# File lib/rabbit/canvas.rb, line 308 def theme_name @theme_name || default_theme || "default" end
# File lib/rabbit/canvas.rb, line 195 def title ts = title_slide if ts ts.title else "Rabbit" end end
# File lib/rabbit/canvas.rb, line 588 def title_slide @slides.find{|x| x.is_a?(Element::TitleSlide)} end
# File lib/rabbit/canvas.rb, line 371 def tmp_dir_name @source and @source.tmp_dir_name end
# File lib/rabbit/canvas.rb, line 375 def to_pixbuf(i) move_to_if_can(i) current_slide.flush @renderer.to_pixbuf(current_slide) end
# File lib/rabbit/canvas.rb, line 474 def toggle_index_mode @renderer.pre_toggle_index_mode process do if @index_mode @index_mode = false @renderer.index_mode_off else update_index_slides @index_mode = true @renderer.index_mode_on end modified end @renderer.post_toggle_index_mode end
# File lib/rabbit/canvas.rb, line 405 def unfullscreened @renderer.post_unfullscreen end
Generated with the Darkfish Rdoc Generator 2.