# IUP::Text (formating) example
use strict;
use warnings;
use IUP ':all';
#xxxFIXME not finished yet but somehow works
sub text2multiline {
my ($self, $attribute) = @_;
my $mltline = $self->GetDialogChild("mltline");
my $text = $self->GetDialogChild("text");
warn "t2m: $attribute=", $text->VALUE, "\n";
$mltline->SetAttribute($attribute, $text->VALUE);
}
sub multiline2text {
my ($self, $attribute) = @_;
my $mltline = $self->GetDialogChild("mltline");
my $text = $self->GetDialogChild("text");
$text->VALUE($mltline->GetAttribute($attribute));
}
sub btn_append_cb {
my $self = shift;
text2multiline($self, "APPEND");
return IUP_DEFAULT;
}
sub btn_insert_cb {
my $self = shift;
text2multiline($self, "INSERT");
return IUP_DEFAULT;
}
sub btn_clip_cb {
my $self = shift;
text2multiline($self, "CLIPBOARD");
return IUP_DEFAULT;
}
sub btn_key_cb {
my $self = shift;
my $mltline = $self->GetDialogChild("mltline");
my $text = $self->GetDialogChild("text");
$mltline->SetFocus();
IUP->Flush();
#xxxFIXME
#IupSetfAttribute(NULL, "KEY", "%d", iupKeyNameToCode(IupGetAttribute(text, "VALUE")));
return IUP_DEFAULT;
}
sub btn_caret_cb {
my $self = shift;
my $opt = IUP->GetByName("text2multi");
if ($opt->VALUE eq 'ON') {
text2multiline($self, "CARET");
}
else {
multiline2text($self, "CARET");
}
return IUP_DEFAULT;
}
sub btn_readonly_cb {
my $self = shift;
my $opt = IUP->GetByName("text2multi");
if ($opt->VALUE eq 'ON') {
text2multiline($self, "READONLY");
}
else {
multiline2text($self, "READONLY");
}
return IUP_DEFAULT;
}
sub btn_selection_cb {
my $self = shift;
my $opt = IUP->GetByName("text2multi");
if ($opt->VALUE eq 'ON') {
text2multiline($self, "SELECTION");
}
else {
multiline2text($self, "SELECTION");
}
return IUP_DEFAULT;
}
sub btn_selectedtext_cb {
my $self = shift;
my $opt = IUP->GetByName("text2multi");
if ($opt->VALUE eq 'ON') {
text2multiline($self, "SELECTEDTEXT");
}
else {
multiline2text($self, "SELECTEDTEXT");
}
return IUP_DEFAULT;
}
sub btn_overwrite_cb {
my $self = shift;
my $opt = IUP->GetByName("text2multi");
if ($opt->VALUE eq 'ON') {
text2multiline($self, "OVERWRITE");
}
else {
multiline2text($self, "OVERWRITE");
}
return IUP_DEFAULT;
}
sub btn_active_cb {
my $self = shift;
my $opt = IUP->GetByName("text2multi");
if ($opt->VALUE eq 'ON') {
text2multiline($self, "ACTIVE");
}
else {
multiline2text($self, "ACTIVE");
}
return IUP_DEFAULT;
}
sub btn_remformat_cb {
my $self = shift;
text2multiline($self, "REMOVEFORMATTING");
return IUP_DEFAULT;
}
sub btn_nc_cb {
my $self = shift;
my $opt = IUP->GetByName("text2multi");
if ($opt->VALUE eq 'ON') {
text2multiline($self, "NC");
}
else {
multiline2text($self, "NC");
}
return IUP_DEFAULT;
}
sub btn_value_cb {
my $self = shift;
my $opt = IUP->GetByName("text2multi");
if ($opt->VALUE eq 'ON') {
text2multiline($self, "VALUE");
}
else {
multiline2text($self, "VALUE");
}
return IUP_DEFAULT;
}
sub btn_tabsize_cb {
my $self = shift;
my $opt = IUP->GetByName("text2multi");
if ($opt->VALUE eq 'ON') {
text2multiline($self, "TABSIZE");
}
else {
multiline2text($self, "TABSIZE");
}
return IUP_DEFAULT;
}
sub k_f2 {
printf("K_F2\n");
return IUP_DEFAULT;
}
sub file_open {
my ($rv, $filename) = IUP->GetFile();
warn "filename=$filename\n";
return IUP_DEFAULT;
}
sub k_any {
my ($self, $c) = @_;
warn "K_ANY (c=$c, printable=", IUP->isPrintable($c), ")\n";
printf ">> CARET(%s)\n", $self->GetAttribute("CARET");
if ($c == K_cA) {
return IUP_IGNORE;
}
elsif ($c == K_F2) {
k_f2();
return IUP_IGNORE;
}
elsif ($c == K_cO) {
file_open();
return IUP_IGNORE;
}
return IUP_CONTINUE;
}
sub action {
# unsed at the moment
my ($self, $c, $after) = @_;
warn "ACTION (c=$c, after=$after)\n";
if (IUP->isPrintable($c)) {
printf "ACTION (printable '%s')\n", IUP->KeyCodeToName($c); #xxxCHECKLATER we do not support KeyCodeToName
}
if ($c == K_i) {
return IUP_IGNORE; # OK
}
if ($c == K_cD) {
return IUP_IGNORE; # Sound a beep in Windows
}
if ($c == K_h) {
return K_j;
}
return IUP_DEFAULT;
}
sub caret_cb {
my ($self, $lin, $col, $pos) = @_;
warn "CARET_CB ($lin, $col, $pos)\n";
printf ">> CARET(%s - %s)\n", $self->CARET, $self->CARETPOS;
return IUP_DEFAULT;
}
sub getfocus_cb {
warn "GETFOCUS_CB\n";
return IUP_DEFAULT;
}
sub help_cb {
warn "HELP_CB\n";
return IUP_DEFAULT;
}
sub killfocus_cb {
warn "KILLFOCUS_CB\n";
return IUP_DEFAULT;
}
sub leavewindow_cb {
warn "LEAVEWINDOW_CB\n";
return IUP_DEFAULT;
}
sub enterwindow_cb {
warn "ENTERWINDOW_CB\n";
return IUP_DEFAULT;
}
sub btn_def_esc_cb {
warn "DEFAULTESC\n";
return IUP_DEFAULT;
}
sub btn_def_enter_cb {
warn "DEFAULTENTER\n";
return IUP_DEFAULT;
}
sub dropfiles_cb {
my ($self, $filename, $num, $x, $y) = @_;
printf "DROPFILES_CB (%s, %d, x=%d, y=%d)\n", $filename, $num, $x, $y;
return IUP_DEFAULT;
}
sub button_cb {
my ($self, $but, $pressed, $x, $y, $status) = @_;
printf "BUTTON_CB (but=%c (%d), x=%d, y=%d [%s])\n", $but, $pressed, $x, $y, $status;
my $pos = $self->ConvertXYToPos($x, $y);
my ($lin, $col) = $self->TextConvertPosToLinCol($pos);
printf ">> (lin=%d, col=%d, pos=%d)\n", $lin, $col, $pos;
return IUP_DEFAULT;
}
sub motion_cb {
my ($self, $x, $y, $status) = @_;
printf "MOTION_CB (x=%d, y=%d [%s])\n", $x, $y, $status;
my $pos = $self->ConvertXYToPos($x, $y);
my ($lin, $col) = $self->TextConvertPosToLinCol($pos);
printf ">> (lin=%d, col=%d, pos=%d)\n", $lin, $col, $pos;
return IUP_DEFAULT;
}
sub TextTest {
#? Iup->SetGlobal("UTF8AUTOCONVERT", "NO");
my $text = IUP::Text->new();
$text->SetAttribute("EXPAND", "HORIZONTAL");
#? $text->SetAttribute("VALUE", "Single Line Text");
$text->SetAttribute("CUEBANNER", "Enter Attribute Value Here");
$text->SetAttribute("NAME", "text");
$text->SetAttribute("TIP", "Attribute Value");
my $opt = IUP::Toggle->new( TITLE=>"Set/Get", VALUE=>"ON", name=>"text2multi" );
my $mltline = IUP::Text->new( MULTILINE=>"YES", NAME=>"mltline" );
$mltline->SetCallback("DROPFILES_CB", \&dropfiles_cb);
$mltline->SetCallback("BUTTON_CB", \&button_cb);
#? $mltline->SetCallback("MOTION_CB", \&motion_cb);
$mltline->SetCallback("HELP_CB", \&help_cb);
$mltline->SetCallback("GETFOCUS_CB", \&getfocus_cb);
$mltline->SetCallback("KILLFOCUS_CB", \&killfocus_cb);
$mltline->SetCallback("ENTERWINDOW_CB", \&enterwindow_cb);
$mltline->SetCallback("LEAVEWINDOW_CB", \&leavewindow_cb);
#? $mltline->SetCallback("ACTION", \&action);
$mltline->SetCallback("K_ANY", \&k_any);
#$mltline->SetCallback("K_F2", \&k_f2); #xxxCHECKLATER we do not support K_xxx callbacks
$mltline->SetCallback("CARET_CB", \&caret_cb);
#? $mltline->SetAttribute("WORDWRAP", "YES");
#? $mltline->SetAttribute("BORDER", "NO");
#? $mltline->SetAttribute("AUTOHIDE", "YES");
#? $mltline->SetAttribute("BGCOLOR", "255 0 128");
#? $mltline->SetAttribute("FGCOLOR", "0 128 192");
#? $mltline->SetAttribute("PADDING", "15x15");
#? $mltline->SetAttribute("VALUE", "First Line\nSecond Line Big Big Big\nThird Line\nmore\nmore\nçãõáóé"); # UTF-8
$mltline->SetAttribute("VALUE", "First Line\nSecond Line Big Big Big\nThird Line\nmore\nmore\nçãõáóé"); # Windows-1252
$mltline->SetAttribute("TIP", "First Line\nSecond Line\nThird Line");
#? $mltline->SetAttribute("FONT", "Helvetica, 14");
#? $mltline->SetAttribute("MASK", IUP_MASK_FLOAT);
#? $mltline->SetAttribute("FILTER", "UPPERCASE");
#? $mltline->SetAttribute("ALIGNMENT", "ACENTER");
#? $mltline->SetAttribute("CANFOCUS", "NO");
# Turns on multiline expand and text horizontal expand
$mltline->SetAttribute("SIZE", "80x40");
$mltline->SetAttribute("EXPAND", "YES");
#? $mltline->SetAttribute("FONT", "Courier, 16");
#? $mltline->SetAttribute("FONT", "Arial, 12");
#? $mltline->SetAttribute("FORMATTING", "YES");
my $formatting = 0;
if ($formatting) { # just to make easier to comment this section
# formatting before Map
my $formattag;
$mltline->SetAttribute("FORMATTING", "YES");
$formattag = IUP::User->new();
$formattag->SetAttribute("ALIGNMENT", "CENTER");
$formattag->SetAttribute("SPACEAFTER", "10");
$formattag->SetAttribute("FONTSIZE", "24");
$formattag->SetAttribute("SELECTION", "3,1:3,50");
$mltline->SetAttribute("ADDFORMATTAG_HANDLE", $formattag);
$formattag = IUP::User->new();
$formattag->SetAttribute("BGCOLOR", "255 128 64");
$formattag->SetAttribute("UNDERLINE", "SINGLE");
$formattag->SetAttribute("WEIGHT", "BOLD");
$formattag->SetAttribute("SELECTION", "3,7:3,11");
$mltline->SetAttribute("ADDFORMATTAG_HANDLE", $formattag);
}
# Creates buttons
#? my $btn_append = IUP::Button->new( TITLE=>"APPEND çãõáóé" ) # Windows-1252
#? my $btn_append = IUP::Button->new( TITLE=>"APPEND çãõáóé" ); # UTF-8
my $btn_append = IUP::Button->new( TITLE=>"&APPEND" );
my $btn_insert = IUP::Button->new( TITLE=>"INSERT" );
my $btn_caret = IUP::Button->new( TITLE=>"CARET" );
my $btn_readonly = IUP::Button->new( TITLE=>"READONLY" );
my $btn_selection = IUP::Button->new( TITLE=>"SELECTION" );
my $btn_selectedtext = IUP::Button->new( TITLE=>"SELECTEDTEXT" );
my $btn_nc = IUP::Button->new( TITLE=>"NC" );
my $btn_value = IUP::Button->new( TITLE=>"VALUE" );
my $btn_tabsize = IUP::Button->new( TITLE=>"TABSIZE" );
my $btn_clip = IUP::Button->new( TITLE=>"CLIPBOARD" );
my $btn_key = IUP::Button->new( TITLE=>"KEY" );
my $btn_def_enter = IUP::Button->new( TITLE=>"Default Enter" );
my $btn_def_esc = IUP::Button->new( TITLE=>"Default Esc" );
my $btn_active = IUP::Button->new( TITLE=>"ACTIVE" );
my $btn_remformat = IUP::Button->new( TITLE=>"REMOVEFORMATTING" );
my $btn_overwrite = IUP::Button->new( TITLE=>"OVERWRITE" );
$btn_append->SetAttribute( TIP => "First Line\nSecond Line\nThird Line" );
#Registers callbacks
$btn_append->SetCallback("ACTION", \& btn_append_cb);
$btn_insert->SetCallback("ACTION", \& btn_insert_cb);
$btn_caret->SetCallback("ACTION", \& btn_caret_cb);
$btn_readonly->SetCallback("ACTION", \& btn_readonly_cb);
$btn_selection->SetCallback("ACTION", \& btn_selection_cb);
$btn_selectedtext->SetCallback("ACTION", \& btn_selectedtext_cb);
$btn_nc->SetCallback("ACTION", \& btn_nc_cb);
$btn_value->SetCallback("ACTION", \& btn_value_cb);
$btn_tabsize->SetCallback("ACTION", \& btn_tabsize_cb);
$btn_clip->SetCallback("ACTION", \& btn_clip_cb);
$btn_key->SetCallback("ACTION", \& btn_key_cb);
$btn_def_enter->SetCallback("ACTION", \& btn_def_enter_cb);
$btn_def_esc->SetCallback("ACTION", \& btn_def_esc_cb);
$btn_active->SetCallback("ACTION", \& btn_active_cb);
$btn_remformat->SetCallback("ACTION", \& btn_remformat_cb);
$btn_overwrite->SetCallback("ACTION", \& btn_overwrite_cb);
my $lbl = IUP::Label->new( TITLE=>"&Multiline:", PADDING=>"2x2");
# Creates dlg
my $dlg = IUP::Dialog->new( child=>IUP::Vbox->new( [
$lbl,
$mltline,
IUP::Hbox->new( [$text, $opt] ),
IUP::Hbox->new( [$btn_append, $btn_insert, $btn_caret, $btn_readonly, $btn_selection] ),
IUP::Hbox->new( [$btn_selectedtext, $btn_nc, $btn_value, $btn_tabsize, $btn_clip, $btn_key] ),
IUP::Hbox->new( [$btn_def_enter, $btn_def_esc, $btn_active, $btn_remformat, $btn_overwrite] ),
] ),
TITLE=>"IupText Test",
MARGIN=>"10x10",
GAP=>5,
DEFAULTENTER=>$btn_def_enter,
DEFAULTESC=>$btn_def_esc,
SHRINK=>"YES" );
if ($formatting) { # just to make easier to comment this section
$dlg->Map(); # formatting after Map
my $formattag = IUP::User->new();
$formattag->SetAttribute( ITALIC=>"YES", STRIKEOUT=>"YES", SELECTION=>"2,1:2,12" );
$mltline->SetAttribute( ADDFORMATTAG_HANDLE=>$formattag );
}
# Shows dlg in the center of the screen
$dlg->ShowXY(IUP_CENTER, IUP_CENTER);
$mltline->SetFocus();
}
### main ###
TextTest();
IUP->MainLoop();