What is FreeTUIT?



Tends toward the verbose and overly-explicit specification of all things big and small (such as the buttons and scrollbars, the actions and events (like the mouse-clicks and keystrokes, the focus and unfocus, the clicking and unclicking.)) The API provides a great degree of flexibility, very little guidance, and tends toward condescendingly reminding you that you're leveraging an enormous volume of advanced algorithms for memory management and widget rendering painstakingly crafted by untold masses of developers.
A B C ---- ---- ---- foo bar baz foot bart bazt

echo world | \
perl -e 'print shift, " ", <>' \
hello
perl -e '
print shift(@ARGV), " ",
readline(STDIN)'
hello
echo world |
<!DOCTYPE is a lie anyway ...> <html> <head> <title>webapp</title> </head> <body><p>hello world</p></body> </html>

#!/usr/bin/perl package MyFrame; use warnings; use strict; use Wx qw(:everything); use base qw(Wx::Frame); sub new { my( $self, $parent, $id, $title, $pos, $size, $style, $name ) = @_; $parent = undef unless defined $parent; $id = -1 unless defined $id; $title = "Hello World" unless defined $title; $pos = wxDefaultPosition unless defined $pos; $size = wxDefaultSize unless defined $size; $name = "" unless defined $name; $style = wxDEFAULT_FRAME_STYLE unless defined $style; $self = $self->SUPER::new( $parent, $id, $title, $pos, $size, $style, $name ); my $text = Wx::TextCtrl->new( $self, -1, "hello world", wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE ); my $sizer = Wx::BoxSizer->new(Wx::wxVERTICAL); $sizer->Add($text, 1, wxEXPAND, 0); $self->SetSizer($sizer); $self->Layout; return($self); } package MyApp; use base 'Wx::App'; sub OnInit { my $self = shift; my $frame = MyFrame->new; $frame->Show(1); } package main; my $app = MyApp->new; $app->MainLoop; # vim:ts=2:sw=2:et:sta
#!/usr/bin/perl package MyFrame; use warnings; use strict; use Wx qw(:everything); use wxPerl::Constructors; use base qw(wxPerl::Frame); use wxPerl::Styles qw(style wxVal); sub new { my $class = shift; my ($parent, $title, %opts) = @_; $title ||= 'Hello World'; my $self = $class->SUPER::new($parent, $title, %opts); my $text = wxPerl::TextCtrl->new($self, "hello world", style(te => 'multiline')); my $sizer = Wx::BoxSizer->new(wxVal('VERTICAL')); $sizer->Add($text, 1, wxVal('EXPAND')); $self->SetSizer($sizer); $self->Layout; return($self); } package MyApp; use base 'Wx::App'; sub OnInit { my $self = shift; my $frame = MyFrame->new; $frame->Show(1); } package main; my $app = MyApp->new; $app->MainLoop; # vim:ts=2:sw=2:et:sta
#! /usr/bin/env freetuit app{ frame[title="Hello World" size=400x250]{ row{ textarea[s:stretch=1 s:expand=1]{ hello world } } }#frame; }#app;



#!/usr/bin/perl -w -- # generated by wxGlade 0.4.1 on Sun Oct 5 17:16:22 2008 # To get wxPerl visit http://wxPerl.sourceforge.net/ use Wx 0.15 qw[:allclasses]; use strict; package MyFrame; use Wx qw[:everything]; use base qw(Wx::Frame); use strict; sub new { my( $self, $parent, $id, $title, $pos, $size, $style, $name ) = @_; $parent = undef unless defined $parent; $id = -1 unless defined $id; $title = "blah" unless defined $title; $pos = wxDefaultPosition unless defined $pos; $size = wxDefaultSize unless defined $size; $name = "" unless defined $name; # begin wxGlade: MyFrame::new $style = wxDEFAULT_FRAME_STYLE unless defined $style; $self = $self->SUPER::new( $parent, $id, $title, $pos, $size, $style, $name ); $self->{object_2} = Wx::TextCtrl->new($self, -1, "", wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE); $self->{object_3} = Wx::TextCtrl->new($self, -1, "", wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE); $self->{object_5} = Wx::StaticText->new($self, -1, "blah", wxDefaultPosition, wxDefaultSize, ); $self->{object_6} = Wx::ComboBox->new($self, -1, "", wxDefaultPosition, wxDefaultSize, [], wxCB_DROPDOWN); $self->{object_8} = Wx::Button->new($self, -1, "Button1"); $self->{object_9} = Wx::Button->new($self, -1, "Button2"); $self->__set_properties(); $self->__do_layout(); # end wxGlade return $self; } sub __set_properties { my $self = shift; # begin wxGlade: MyFrame::__set_properties $self->{object_6}->SetSelection(-1); # end wxGlade }
# ... continued sub __do_layout { my $self = shift; # begin wxGlade: MyFrame::__do_layout $self->{object_1} = Wx::BoxSizer->new(wxVERTICAL); $self->{object_4} = Wx::FlexGridSizer->new(2, 2, 0, 0); $self->{object_7} = Wx::BoxSizer->new(wxHORIZONTAL); $self->{object_1}->Add($self->{object_2}, 1, wxEXPAND, 0); $self->{object_1}->Add($self->{object_3}, 1, wxEXPAND, 0); $self->{object_4}->Add($self->{object_5}, 2, wxEXPAND, 0); $self->{object_4}->Add($self->{object_6}, 0, wxEXPAND, 0); $self->{object_4}->Add(165, 0, 1, wxEXPAND, 0); $self->{object_7}->Add($self->{object_8}, 1, 0, 0); $self->{object_7}->Add($self->{object_9}, 1, 0, 0); $self->{object_4}->Add($self->{object_7}, 0, wxEXPAND, 0); $self->{object_4}->AddGrowableCol(0); $self->{object_1}->Add($self->{object_4}, 0, wxEXPAND, 0); # XXX it doesn't pack correctly because wxglade is incorrect #$self->SetAutoLayout(1); $self->SetSizer($self->{object_1}); #$self->{object_1}->Fit($self); $self->{object_1}->SetSizeHints($self); $self->Layout(); # end wxGlade } package MyApp; use base 'Wx::App'; sub OnInit { my $self = shift; my $frame = MyFrame->new; $frame->Show(1); } package main; my $app = MyApp->new; $app->MainLoop; 1;
<?xml version="1.0" encoding="utf-8"?> <resource> <object class="wxFrame" name="FRAME1"> <title></title> <object class="wxBoxSizer"> <orient>wxVERTICAL</orient> <object class="sizeritem"> <object class="wxTextCtrl"> <style>wxTE_MULTILINE</style> </object> <option>1</option> <flag>wxEXPAND</flag> </object>
<?xml version="1.0"?> <resource> ... <object class="wxMenuItem" name="menu_quit"> <label>E$xit\tAlt-X</label> </object>
... $self->{xrc} = Wx::XmlResource->new(); $self->xrc->InitAllHandlers(); $self->xrc->Load('xrc/resource.xrc'); ... EVT_MENU( $frame, Wx::XmlResource::GetXRCID('menu_quit'), sub { $frame->Close } );
EVT_MENU( $frame, Wx::XmlResource::GetXRCID('menu_quit'), sub { $frame->Close } );

my $top = 'FreeTUIT::Wx'; my $app = $top->create_child( app => %options ); my $frame = $app->create_child( frame => title => "frame" );
app{ frame[title=whatever]{ column{ textarea[:text1 s:expand=1 s:stretch=1]{} grid[stretch_columns="0:1" s:expand=1]{ gridrow{ label[s:align="left,center" s:expand=1]{Hi!} combobox[s:expand=1]{option{...}} } gridrow{ ... row[s:expand=1]{ button{Ok} button{Cancel} } } }#grid; }#column; }#frame; }#app;
menubar{ menu[:_File]{ action[:_Open] action[:_Fail] } ... }
$frame->menu_file_open($evt);

#!/usr/bin/env freetuit app{ frame[@FreeTUIT::Example::SimpleEditor title="SimpleDit" size=600x400]{ column{ textarea[:text0 s:expand=1 s:stretch=1]{} } menubar{ menu[:_File]{ action[:_New/Ctrl-N] action[:_Open/Ctrl-O] action[:_Save/Ctrl-S] action[:_Quit/Ctrl-W] } menu[:_Help]{ action[:_About] } }#menubar; toolbar{ tool[:New =menu_file_new icon=:file-new tip="New File"] tool[:Open =menu_file_open icon=:file-open tip="Open File"] tool[:Save =menu_file_save icon=:file-save tip="Save File"] }#toolbar; }#frame; }#app; # vim:ts=2:sw=2:et:sta:ft=hbml
package FreeTUIT::Example::SimpleEditor; use warnings; use strict; use Carp; use base 'FreeTUIT::Wx::frame'; use File::Fu; =head1 NAME FreeTUIT::Example::SimpleEditor - edit and save ascii text =cut # we override finish() as an OnInit - probably shouldn't be this way my $title; sub finish { my $self = shift; $self->SUPER::finish(@_); $title = $self->GetTitle; $self->set_filename(''); $self->text0->SetFocus; } ###################################################################### # accessor and policy for managing the current File::Fu::File sub filename {shift->{filename}} sub set_filename { my $self = shift; my ($file) = @_; $self->{filename} = $file; my $name = $file ? $file->file : '*unnamed*'; $self->SetTitle("$title - $name"); } ###################################################################### =head1 Menu Events =head2 menu_file_new $frame->menu_file_new($evt); =cut sub menu_file_new { my $self = shift; # TODO prompt about saving $self->text0->SetValue(''); $self->set_filename(undef); } ###################################################################### =head2 menu_file_open $frame->menu_file_open($evt); =cut sub menu_file_open { my $self = shift; my $dialog = Wx::FileDialog->new($self, "Choose a file",
"", "", "*.*", Wx::wxOPEN()|Wx::wxFILE_MUST_EXIST(), ); my $ok = $dialog->ShowModal; return() unless($ok == Wx::wxID_OK()); my $file = File::Fu->file($dialog->GetPath); my $text = $file->read; $self->text0->SetValue($text); $self->set_filename($file); } ###################################################################### =head2 menu_file_save $frame->menu_file_save($evt); =cut sub menu_file_save { my $self = shift; unless($self->filename) { my $dialog = Wx::FileDialog->new($self, "Enter filename", '', '', '*.*', Wx::wxSAVE()|Wx::wxOVERWRITE_PROMPT() ); my $ok = $dialog->ShowModal; # XXX a focus nit? return() unless($ok == Wx::wxID_OK()); $self->set_filename(File::Fu->file($dialog->GetPath)); } $self->filename->write($self->text0->GetValue); } ###################################################################### =head2 menu_file_quit $frame->menu_file_quit($evt); =cut sub menu_file_quit { my $self = shift; $self->Close; } ###################################################################### =head2 menu_help_about $frame->menu_help_about($evt); =cut sub menu_help_about { my $self = shift; my $dialog = Wx::MessageDialog->new($self, "This is $title - a silly little demo for FreeTUIT\n\n" . "If you are using this for serious editing, have fun!" ); $dialog->ShowModal; } ###################################################################### 1;
#!/usr/bin/env freetuit app{ frame[ class=FreeTUIT::Example::SimpleEditor title="SimpleDit" size=600x400 ]{ column{ textarea[:text0 s:expand=1 s:stretch=1]{} } ...
... menubar{ menu[:_File]{ action[:_New/Ctrl-N] action[:_Open/Ctrl-O] ... menu[:_Help]{ action[:_About] }
toolbar{ tool[:New =menu_file_new icon=:file-new tip="New File"] tool[:Open =menu_file_open icon=:file-open tip="Open File"] tool[:Save =menu_file_save icon=:file-save tip="Save File"] }#toolbar;
tool[ name=New id=menu_file_new icon=:file-new tip="New File" ]
package FreeTUIT::Example::SimpleEditor; ... use base 'FreeTUIT::Wx::frame'; sub menu_file_new { my $self = shift; # TODO prompt about saving $self->text0->SetValue(''); $self->set_filename(undef); } ...
sub menu_file_open { my $self = shift; my $dialog = Wx::FileDialog->new($self, "Choose a file", "", "", "*.*", Wx::wxOPEN()|Wx::wxFILE_MUST_EXIST(), ); my $ok = $dialog->ShowModal; return() unless($ok == Wx::wxID_OK()); my $file = File::Fu->file($dialog->GetPath); my $text = $file->read; $self->text0->SetValue($text); $self->set_filename($file); }