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') end
A 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' end
Než 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
end
Pokud 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.