Comment
==========================================================

This include file exports definitions that create a block menu look and
feel. This is one of several look and feel files that export the same
procedures.

Useful Routines Exported:

LookSetup
   Call this to initialize the screen. Set MenuTitle and StatusLineText
   before calling this routine.

CornerStretchBox (Header,Col,Row)
   Creates a window from the array Choices with the upper left corner at
   Row/Col. LastKey is set to the letter that is chosen.

CenterStretchBox (Header,Col,Row)
   Creates a window from the array Choices with the center at Row/Col.
   if a 0 is passed for either the Row or Col then the center of the
   screen is assumed. LastKey is set to the letter that is chosen.

Leave
   Puts up an exit box.


==========================================================
EndComment


var
  Choices
  MenuTitle
  StatusLineText
  StatusWindow
  HeightDifference
  Greek = False

var
  BackGroundFG
  BackGroundBG
  TitleBoxBorderFG
  TitleBoxBG
  TitleBoxInsideFG
  ClockColorFG
  StatusLineFG
  StatusLineBG
  MenuInsideFG
  MenuBG
  MenuHeaderFG
  MenuHeaderBG
  MenuBorderFG
  MenuVertLinesFG
  MenuInverseFG
  MenuInverseBG
  MenuCapColorFG
  ConsoleInsideFG
  GreekFG
  GreekBG

;------ This is where you set your favorite colors.

Procedure SetColors
   if ColorScreen
      BackGroundFG     = LRed
      BackGroundBG     = Black
      TitleBoxBG       = Brown
      TitleBoxBorderFG = White
      TitleBoxInsideFG = Yellow
      ClockColorFG     = Yellow
      StatusLineFG     = Yellow
      StatusLineBG     = Mag
      MenuBG           = Blue
      MenuInsideFG     = Yellow
      MenuBorderFG     = Green
      MenuHeaderFG     = Yellow
      MenuHeaderBG     = Mag
      MenuVertLinesFG  = LGreen
      MenuInverseFG    = Yellow
      MenuInverseBG    = Red
      MenuCapColorFG   = White
      ConsoleInsideFG  = White
      GreekFG          = Black
      GreekBG          = Brown
   else
      BackGroundFG     = Grey
      BackGroundBG     = Black
      TitleBoxBG       = Grey
      TitleBoxBorderFG = Black
      TitleBoxInsideFG = Black
      ClockColorFG     = Black
      StatusLineFG     = Black
      StatusLineBG     = Grey
      MenuBG           = Black
      MenuInsideFG     = Grey
      MenuBorderFG     = Grey
      MenuHeaderFG     = Black
      MenuHeaderBG     = Grey
      MenuVertLinesFG  = White
      MenuInverseFG    = Black
      MenuInverseBG    = Grey
      MenuCapColorFG   = White
      ConsoleInsideFG  = Grey
      GreekFG          = Black
      GreekBG          = Grey
   endif
EndProc

;------ Sets up main window to block look.

Procedure LookSetup
   if MenuInsideFG = 0 then SetColors
   NoExit

   ;------ Clear the screen with a textured background

   if not Overlayed
      TextColor BackGroundFG BackGroundBG
      ClearScreen 176

      ;------ If Greek is true then draw greek columns

      if Greek then GreekColumns
   endif

   ;------ Draw Status Line

   NoBoxBorder
   InactiveBox NoBoxBorder
   Explode Off
   BoxInsideColor StatusLineFG StatusLineBG
   DrawBox 1 ScreenHeight ScreenWidth 1
   StatusWindow = CurrentWindow
   WriteCenter(StatusLineText)

   if not Overlayed

      ;------ Draw the Title Box

      SingleLineBox
      BoxInsideColor TitleBoxInsideFG TitleBoxBG
      BoxBorderColor TitleBoxBorderFG TitleBoxBG
      DrawBox 1 1 ScreenWidth 3
      GotoXY(ScreenWidth - Length(MenuTitle) - 3,1)
      Write MenuTitle

      ;------ Display the clock

      ClockColor ClockColorFG TitleBoxBG
      ClockPos 3 2

      ;------ Setup Console

      ConsolePos 42 5
      ConsoleHeaderColor MenuInverseFG MenuInverseBG
      ConsoleInsideColor ConsoleInsideFG MenuBG

   endif
   BoxHeaderColor MenuHeaderFG MenuHeaderBG
   HeightDifference = 3
EndProc


Procedure MakeBox(Header,Col,Row,Center)
var Height Width Cnt

   Width = Length(Header) - 1

     ;Get the widest element in the Choices Array

   if Length(Choices[1]) > 0
      Cnt = 65
      loop Choices
         Trim(LoopVal)
         if left(LoopVal,1) <> 'Ä'
            LoopVal = " " + Char(Cnt) + ". " + LoopVal
            Cnt = Cnt + 1
         endif
         Width = Max(Width,Length(LoopVal))
      endloop
   else
      Width = ScreenWidth - 7
   endif
   Height = NumberOfElements(Choices) + HeightDifference
   Width = Width + 5
   if Center
      if Row = 0

         ;Center window verticaly

         Row = ((ScreenHeight - Height) / 2) + 2
      else

         ;Center window with X Coordinate

         Row = (Row - (Height / 2) + 1)
      endif
      if Col = 0

         ;Center window horizonitly

         Col = (ScreenWidth - Width) / 2 + 1
      else

         ;Center window with Y Coordinate

         Col = (Col - (Width / 2) + 1)
      endif
   endif

   ;Make Sure Row and Col are within their range

   Row = Max(Row,5)
   Row = Min(Row,ScreenHeight - Height - 1)
   Col = Max(Col,2)
   Col = Min(Col,ScreenWidth - Width)

   DrawTheBox(Col,Row,Width,Height,Header)

     ;Write the menu choices

   loop Choices
      if left(LoopVal,1) = 'Ä'
         TextColor MenuVertLinesFG MenuBG
         ClearLine 196
         TextColor MenuInsideFG MenuBG
         CapsColor(MenuCapColorFG,MenuBG)
         Writeln
      else
         if LoopIndex = LoopLimit then Write(LoopVal) else Writeln(LoopVal)
      endif
   endloop

   UseArrows On
   Dispose(Choices)
EndProc

;------ Draw the Box

Procedure DrawTheBox (Col,Row,Width,Height,Header)

     ;Draw the main window

   BlockBox
   BoxInsideColor(MenuInsideFG,MenuBG)
   BoxBorderColor(MenuBorderFG,MenuBG)
   if Header > '' then Header = ' ' + Header + ' '
   BoxHeader = Header
   DrawBox(Col, Row, Width, Height)

   if Header > ''

      TextColor LCyan MenuBG
      ClearLine 205
      Writeln
      TextColor MenuInsideFG MenuBG
      CapsColor(MenuCapColorFG,MenuBG)
      InverseColor(MenuInverseFG,MenuInverseBG)
      Window(Col + 2, Row + 2, Width - 4, Height - HeightDifference)
   else
      CapsColor Black Black
   endif
EndProc

