require 'Sx.pm';

package Sx;

sub SWD {
  &SetWidgetDat(@_);
}

sub GWD {
  &GetWidgetDat(@_);
}

sub SWI {
  &SetWidgetInt(@_);
}

sub GWI {
  &GetWidgetInt(@_);
}

sub PerlIt {
  local($w,$cmd) = @_;
  $result = eval "$cmd";
  print "{$cmd} --> $result\n";
  &SetStringEntry($w,'');
  &SetLabel($rev,"$result <- $cmd");
}


sub Select {
  local($w,$n) = @_;

  SetWidgetState($up,1);
  SetWidgetState($down,1);
  SetWidgetState($left,1);
  SetWidgetState($right,1);
  SetWidgetState($ok,1);
  $ToMove = $w;
}

sub redisplay {

}

sub Up {
  SWI($ToMove,'vertDistance',GWI($ToMove,'vertDistance')-1);
}

sub Down {
  SWI($ToMove,'vertDistance',GWI($ToMove,'vertDistance')+1);
}

sub Left {
  SWI($ToMove,'horizDistance',GWI($ToMove,'horizDistance')-1);
}

sub Right {
  SWI($ToMove,'horizDistance',GWI($ToMove,'horizDistance')+1);
}

sub Ok {
#  $ToMove = '';
  SetWidgetState($up,0);
  SetWidgetState($down,0);
  SetWidgetState($left,0);
  SetWidgetState($right,0);
  SetWidgetState($ok,0);
}

sub NewButton {
  my($name,$w);

  $name = GetString("Button Name","Unamed");
  $w = &MakeToggle($name,0,$Sx::NullSx,'Select');
  eval "\$B$name = \$w;";
  &SetWidgetPos($w,$Sx::PLACE_UNDER,$rev,$Sx::NO_CARE, $Sx::NullSx);
}

sub quit {
  print "args are [@_]\n";
}

$version = "1.0 exp";
$Home = $ENV{'HOME'};
&OpenDisplay('SxSetup',@ARGV);
&GetStandardColors;

$MainBut[0] = &MakeButton('Exit (no save)', 'exit', 'Exit');
$MainBut[1] = &MakeButton('Save & Quit', 'quit', 'test');
$MainBut[2] = &MakeButton('New Button', 'NewButton');

print "$MainBut[1] (SQ)\n";

$up = &MakeButton('U','Up');
$down = &MakeButton('D','Down');
$left = &MakeButton('L','Left');
$ok = &MakeButton('P','Ok');
$right = &MakeButton('R','Right');

$evl = &MakeStringEntry("",400,'PerlIt');
$rev = &MakeLabel("                                   ");
$drw = &MakeDrawArea(500,500,'redisplay');

&SetWidgetPos($MainBut[1], $Sx::PLACE_RIGHT, $MainBut[0], $Sx::NO_CARE, $Sx::NullSx);
&SetWidgetPos($MainBut[2], $Sx::PLACE_RIGHT, $MainBut[1], $Sx::NO_CARE, $Sx::NullSx);
&SetWidgetPos($evl,$Sx::PLACE_UNDER, $MainBut[0], $Sx::NO_CARE, $Sx::NullSx);
&SetWidgetPos($rev,$Sx::PLACE_UNDER, $evl,$Sx::NO_CARE, $Sx::NullSx);
&SetWidgetPos($drw,$Sx::PLACE_UNDER, $rev,$Sx::NO_CARE, $Sx::NullSx);

&SetWidgetPos($up, $Sx::PLACE_RIGHT, $MainBut[2], $Sx::NO_CARE, $Sx::NullSx);
SWI($up,'horizDistance',42);
&SetWidgetPos($left, $Sx::PLACE_RIGHT, $evl, $Sx::PLACE_UNDER, $up);
&SetWidgetPos($ok, $Sx::PLACE_RIGHT, $left, $Sx::PLACE_UNDER, $up);
&SetWidgetPos($right, $Sx::PLACE_RIGHT, $ok, $Sx::PLACE_UNDER, $up);
&SetWidgetPos($down, $Sx::PLACE_RIGHT, $rev, $Sx::PLACE_UNDER, $left);
SWI($down,'horizDistance',70);

Ok;

&ShowDisplay;

&MainLoop;



