Class: QDA::GUI::CompositeText

Inherits:
HighlightingTextCtrl show all
Includes:
FindableText
Defined in:
lib/weft/wxgui/controls/textcontrols.rb

Overview

a text display that is made up of text fragments from multiple documents. It keeps track of which fragment is found at which point, so that when passages are marked they are routed back to the source document.

Defined Under Namespace

Classes: TextTable

Constant Summary collapse

HEADER_STYLE =
Wx::TextAttr.new(Wx::RED)
NORMAL_STYLE =
Wx::TextAttr.new(Wx::BLACK)

Constants included from HighlightingTextCtrl::TextColourHighlighter

HighlightingTextCtrl::TextColourHighlighter::HIGHLIGHTED_STYLE

Constants inherited from TrueSelectionTextCtrl

TrueSelectionTextCtrl::NEWLINE_CORRECTION_FACTOR

Instance Method Summary collapse

Methods included from FindableText

#get_subject, #on_find, #on_find_close, #searching_down?, #searching_up?, #start_find

Methods included from HighlightingTextCtrl::TextColourHighlighter

#clear, #highlight, #unhighlight

Methods included from HighlightingTextCtrl::NullHighlighter

#highlight, #unhighlight

Methods inherited from TrueSelectionTextCtrl

#save_position, #true_index_to_pos, #true_insertion_point, #true_point, #true_selection

Constructor Details

#initialize(parent, text, offset, app) ⇒ CompositeText

Returns a new instance of CompositeText.



388
389
390
391
392
393
394
395
396
397
# File 'lib/weft/wxgui/controls/textcontrols.rb', line 388

def initialize(parent, text, offset, app)
  @saved_styles = Hash.new()
  super(parent, -1, text, Wx::DEFAULT_POSITION, Wx::DEFAULT_SIZE, 
         Wx::TE_MULTILINE|Wx::TE_READONLY|Wx::TE_RICH|Wx::TE_NOHIDESEL)
  @app = app
  evt_enter_window do | e |
    set_cursor Wx::Cursor.new(Wx::CURSOR_IBEAM)
  end
  set_font( @app.display_font )
end

Instance Method Details

#highlight_codingtable(codingtable) ⇒ Object

highlights the coded vectors or fragments



458
459
460
461
462
463
464
465
466
467
468
469
470
471
# File 'lib/weft/wxgui/controls/textcontrols.rb', line 458

def highlight_codingtable(codingtable)
  return unless @fragments
  areas = @fragments.to_codingtable.join(codingtable)
  save_position do
    unhighlight()
    areas.each do | docid, codes  |
      codes.each do | code |
        translated = @table.translate(docid, code.offset)
        next if translated.nil?
        highlight(translated, translated + code.length)
      end
    end
  end
end

#jump_to_fragment(evt) ⇒ Object



442
443
444
445
446
447
448
449
# File 'lib/weft/wxgui/controls/textcontrols.rb', line 442

def jump_to_fragment(evt)
  frag, offset = *@table.fetch(true_insertion_point)
  # if we've clicked on a text bit
  return unless frag
  @app.on_document_open( frag.docid,
                         frag.offset + offset )

end

#populate(fragments) ⇒ Object

displays the hash table of fragments, keyed on document title as a set of results, ordered by case-insensitive document title order.



401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
# File 'lib/weft/wxgui/controls/textcontrols.rb', line 401

def populate(fragments)
  self.clear()
  @table = TextTable.new()
  @cursor = 0
  @fragments = fragments
  # sort by document title
  save_position() do
    fragments.each_title do | doc_title, frags |
      frags.each { | frag | write_frag(frag) }
      write_range("\n", nil)
    end
  end
  evt_left_dclick()  { | e | jump_to_fragment(e) }
  self.insertion_point = 0
end

#selection_to_fragmentsObject



451
452
453
454
455
# File 'lib/weft/wxgui/controls/textcontrols.rb', line 451

def selection_to_fragments()
  cursor, finish = *true_selection()
  length = finish - cursor
  results = @table.range_to_vectors(cursor, length)
end

#set_font(font) ⇒ Object

need to repaint headers and so on



474
475
476
477
478
479
480
481
# File 'lib/weft/wxgui/controls/textcontrols.rb', line 474

def set_font(font)
  super(font)
  @saved_styles.each do | style, segments |
    segments.each do | seg | 
      set_style(seg[0], seg[1], style)
    end
  end
end