Class: Qt::PlainTextEdit

Inherits:
Object show all
Defined in:
lib/cosmos/gui/qt.rb

Direct Known Subclasses

Cosmos::CompletionTextEdit

Constant Summary collapse

@@color_cache =
{}

Instance Method Summary collapse

Instance Method Details

#add_formatted_text(text, color = nil) ⇒ Object



433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
# File 'lib/cosmos/gui/qt.rb', line 433

def add_formatted_text(text, color = nil)
  if text =~ /[\x00-\x08\x0B-\x0C\x0E-\x1F\x7F-\xFF]/
    text.chomp!
    text = text.inspect.remove_quotes
    text << "\n"
  end
  if text =~ /<G>/ or color == Cosmos::GREEN
    text.gsub!(/<G>/, '')
    addText(text, Cosmos::GREEN)
  elsif text =~ /<Y>/ or color == Cosmos::YELLOW
    text.gsub!(/<Y>/, '')
    addText(text, Cosmos::YELLOW)
  elsif text =~ /<R>/ or color == Cosmos::RED
    text.gsub!(/<R>/, '')
    addText(text, Cosmos::RED)
  elsif text =~ /<B>/ or color == Cosmos::BLUE
    text.gsub!(/<B>/, '')
    addText(text, Cosmos::BLUE)
  else
    addText(text) # default is Cosmos::BLACK
  end
end

#addText(text, color = Cosmos::BLACK) ⇒ Object



456
457
458
459
# File 'lib/cosmos/gui/qt.rb', line 456

def addText(text, color = Cosmos::BLACK)
  @current_text ||= ''
  @current_text << escape_text(text.chomp, color) << '<br/>'.freeze
end

#appendText(text, color = Cosmos::BLACK) ⇒ Object



466
467
468
# File 'lib/cosmos/gui/qt.rb', line 466

def appendText(text, color = Cosmos::BLACK)
  appendHtml(escape_text(text.chomp, color))
end

#flushObject



461
462
463
464
# File 'lib/cosmos/gui/qt.rb', line 461

def flush
  appendHtml(@current_text)
  @current_text.clear
end

#selected_linesObject

Return the selected lines. If a partial line is selected the entire line will be returned. If there is no selection the line with the cursor will be returned



472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
# File 'lib/cosmos/gui/qt.rb', line 472

def selected_lines
  cursor = textCursor
  selection_end = cursor.selectionEnd
  # Initially place the cursor at the beginning of the selection
  # If nothing is selected this will just put the cursor at the beginning of the current line
  cursor.setPosition(textCursor.selectionStart)
  cursor.movePosition(Qt::TextCursor::StartOfLine)
  # Move the cursor to the end of the selection while keeping the anchor
  cursor.setPosition(selection_end, Qt::TextCursor::KeepAnchor)
  # Normally we want to select the entire line where the end of selection is
  # However if the user selects an exact number of lines
  # the cursor will be at the beginning of the following line
  # Therefore if the cursor is at the beginning of the line and we have a selection
  # we'll skip moving to the end of the line
  unless (cursor.atBlockStart and textCursor.hasSelection)
    cursor.movePosition(Qt::TextCursor::EndOfLine, Qt::TextCursor::KeepAnchor)
  end
  # If there is no selection then just return nil
  return nil if cursor.selectedText.nil?

  cursor.selection.toPlainText

  # The selectedText function returns the Unicode U+2029 paragraph separator character
  # instead of newline \n. Thus we have to unpack as Unicode, covert to newlines, and then repack
  #text = cursor.selectedText.unpack("U*")
  #text.collect! {|letter| if letter == 63 then 10 else letter end }
  #text.pack("U*")
end

#selection_end_lineObject

Return the line number (0 based) of the selection end



509
510
511
512
513
# File 'lib/cosmos/gui/qt.rb', line 509

def selection_end_line
  cursor = textCursor
  cursor.setPosition(textCursor.selectionEnd)
  cursor.blockNumber
end

#selection_start_lineObject

Return the line number (0 based) of the selection start



502
503
504
505
506
# File 'lib/cosmos/gui/qt.rb', line 502

def selection_start_line
  cursor = textCursor
  cursor.setPosition(textCursor.selectionStart)
  cursor.blockNumber
end