Odkazy:
Tak a dostali jsme se ke komponentě textového editoru Scintilla. Tento objekt se jmanuje Wx::StyledTextCtrl. Scintilla je sofistikovaný editor pro editaci textu. Má rozsáhlé možnosti nastavení a dovede takové věci jako: barevnou syntaxi, počítání řádků, sbalování a rozbalování bloků kód a mnohé další.
Příklad 40.6. Nejjednodušší editor se Scintillou
#!/usr/bin/env ruby
require 'rubygems'
require 'wx'
class Editor < Wx::Frame
def initialize
super nil
@scintilla = Wx::StyledTextCtrl.new self
end
end
class App < Wx::App
def on_init
frame = Editor.new
frame.show
end
end
app = App.new.main_loop
Takto jednoduchý program není použitelný. Neimplementovali jsme ani nejzákladnější dvě oprace, tedy načtění textu ze souboru a zápis textu zpět do souboru.
Nahrávání a zápis do souborů (Load and save to file).
StyledTextCtrl.load_file StyledTextCtrl.save_file
Samotný text mohu do objektu dostat metodami:
StyledTextCtrl.add_text StyledTextCtrl.append_text StyledTextCtrl.insert_text StyledTextCtrl.clear_all
Jednoduché vložení textu pomocí insert_text je v následující ukázce. Nejdříve vymažu veškerý stávající obsah pomocí clear_all a poté vložím nový.
def initialize
super nil
@scintilla = Wx::StyledTextCtrl.new self
@scintilla.clear_all
@scintilla.insert_text(0, 'ěšč Předloha')
endA teď zkusíme načíst soubor. Zatím zadáme jméno přímo do programu.
def initialize
super nil
@scintilla = Wx::StyledTextCtrl.new self
@scintilla.load_file 'redit.rbw'
endNež pokročím dál, potřebuji se naučit odchytávat událost ukončení editoru, a správně na ni zareagovat uložením rozpracovaného souboru.
def initialize
…
# Bind events to code and/or methods
evt_close :on_close
end
def on_close
puts "Zavírám rámec editoru!"
destroy
endPokud spouštíme aplikaci na MS Windows pomoci Ruby(GUI), není standardní výstup definován a například příkaz puts způsobí havárii programu.
