using Gtk; public class TextFileViewer : Window { private TextView text_view; public TextFileViewer() { this.title = "Просмотр текстового файла"; this.window_position = WindowPosition.CENTER; this.set_default_size( 500, 400 ); var toolbar = new Toolbar(); var open_button = new ToolButton.from_stock( Stock.OPEN ); toolbar.add( open_button ); open_button.clicked.connect( on_open_clicked ); this.text_view = new TextView(); this.text_view.editable = false; this.text_view.cursor_visible = false; var scroll = new ScrolledWindow( null, null ); scroll.set_policy( PolicyType.AUTOMATIC, PolicyType.AUTOMATIC ); scroll.add( this.text_view ); var vbox = new VBox( false, 0 ); vbox.pack_start( toolbar, false, true, 0 ); vbox.pack_start( scroll, true, true, 0 ); this.add( vbox ); } private void on_open_clicked() { var file_chooser = new FileChooserDialog( "Открыть файл", this, FileChooserAction.OPEN, Stock.CANCEL, ResponseType.CANCEL, Stock.OPEN, ResponseType.ACCEPT, null ); if( file_chooser.run() == ResponseType.ACCEPT ) { open_file( file_chooser.get_filename() ); } file_chooser.destroy(); } private void open_file( string filename ) { try { string text; size_t size; FileUtils.get_contents( filename, out text, out size ); this.text_view.buffer.set_text( text, (int) size ); } catch( Error e ) { stderr.printf( "Ошибка: %s\n", e.message ); } } public static int main( string[] args ) { Gtk.init( ref args ); var window = new TextFileViewer(); window.destroy.connect( Gtk.main_quit ); window.show_all(); Gtk.main(); return 0; } }