NBPrg40. INTERF_W.PAS. MiniOS. OpenSource.

NBPrg40. INTERF_W.PAS. MiniOS. OpenSource.
***************************************

{ Nikita Beloshenko (GNU) From Interf_w (WORK_SYS) }

Unit interf_w;

(********************************************
 *                                          *
 *   INTERF_W.PAS                           *
 *                                          *
 *   interf_w.                              *
 *                                          *
 ********************************************)

Interface
Uses graph,crt,dos,work_sys;

Type
     winterf=Object(work_sys_object)
             End;

     coord=Record
             x,y:integer;
           End;

     barcoord=Record
               A,B:coord
             End;

     interf=Object(winterf)
              up_s, down_s:String;
              s_:Array[1..10] Of String;
              bodycoord:barcoord;
              menubar:barcoord;
              titlebar:barcoord;
              workbar:barcoord;
              Constructor init;
              Procedure buildframe;
              Procedure buildbody;
              Procedure buildmenubar;
              Procedure buildtitlebar;
              Procedure buildworkbar;
              Procedure buildhelp;
              Procedure outhelp;
              Procedure outmesstr;
              Destructor done;
            End;

      palete=Object(interf)
               menutext_color:integer;
               titletext_color:integer;
               tacklistcolor:integer;
               helpcolor:integer;
               framecolor:integer;
               bodycolor:integer;
               menubar_framecolor:integer;
               menubar_bodycolor:integer;
               titlebar_framecolor:integer;
               titlebar_bodycolor:integer;
               workbar_framecolor:integer;
               workbar_bodycolor:integer;
               Constructor standart;
               Destructor done;
             End;

Var system_on:boolean;
    pinterf:^interf;
    ppalete:^palete;

Implementation

Var
  maxx, maxy : Integer;

(*------------------------------------------------*)
(*              ЦВЕТОВАЯ  ПАЛИТРА                 *)
(*------------------------------------------------*)
Constructor palete.standart;
Begin
  {//Стандартная палитра.}
  menutext_color:=red;
  titletext_color:=red;
  tacklistcolor:=yellow;
  helpcolor:=white;
  framecolor:=red;
  bodycolor:=blue;
  menubar_framecolor:=white;
  menubar_bodycolor:=lightgray;
  titlebar_framecolor:=white;
  titlebar_bodycolor:=lightgray;
  workbar_framecolor:=red;
  workbar_bodycolor:=lightblue;
End;

Destructor palete.done;
Begin
  {//Очистка палитры.}
  menutext_color:=0;
  titletext_color:=0;
  tacklistcolor:=0;
  helpcolor:=0;
  framecolor:=0;
  bodycolor:=0;
  menubar_framecolor:=0;
  menubar_bodycolor:=0;
  titlebar_framecolor:=0;
  titlebar_bodycolor:=0;
  workbar_framecolor:=0;
  workbar_bodycolor:=0;
End;

(*------------------------------------------------*)
(*               ГРАФИЧЕСКИЙ  ИНТЕРФЕЙС           *)
(*------------------------------------------------*)
Constructor interf.init;
Var i:byte;
Begin
  {//Очистка буфера справки.}
  For i:=1 To 5 Do s_[i]:='';
  {//Максимальные координаты.}
  maxx:=getmaxx; maxy:=getmaxy;
  With bodycoord.A Do Begin x:=0; y:=0; End;
  With bodycoord.B Do Begin x:=maxx; y:=maxy; End;
  With menubar.A Do Begin x:=maxx Div 20; y:=maxy Div 20; End;
  With menubar.B Do Begin x:=maxx-maxx Div 20; y:=maxy Div 9; End;
  With titlebar.A Do Begin x:=maxx Div 20; y:=maxy-maxy Div 9; End;
  With titlebar.B Do Begin x:=maxx-maxx Div 20; y:=maxy-maxy Div 20; End;
  With workbar.A Do Begin x:=maxx-maxx Div 5; y:=maxy Div 7; End;
  With workbar.B Do Begin x:=maxx-maxx Div 20; y:=maxy-maxy Div 7; End;
  {//Конструкция палитры.}
  new(ppalete,standart);
  {//Конструктор интерфейса.}
  buildframe;
  buildbody;
  buildmenubar;
  buildtitlebar;
  buildworkbar;
  buildhelp;
End;

Procedure interf.buildframe;
Var x,y,x1,y1:integer;
Begin
  {//Рамка.}
  With ppalete^ Do setcolor(framecolor);
  x:=bodycoord.a.x;  y:=bodycoord.a.y;
  x1:=bodycoord.b.x; y1:=bodycoord.b.y;
  line(x,y,x1,y);    line(x1,y,x1,y1);
  line(x1,y1,x,y1);  line(x,y1,x,y);
End;

Procedure interf.buildbody;
Var x,y,x1,y1:integer;
Begin
  {//Заливка.}
  With ppalete^ Do setfillstyle(solidfill,bodycolor);
  x:=bodycoord.a.x+1;  y:=bodycoord.a.y+1;
  x1:=bodycoord.b.x-1; y1:=bodycoord.b.y-1;
  bar(x,y,x1,y1);
End;

Procedure interf.buildmenubar;
Var x,y,x1,y1:integer;
Begin
  {//Меню.}
  With ppalete^ Do setcolor(menubar_framecolor);
  With ppalete^ Do setfillstyle(solidfill,menubar_bodycolor);
  x:=menubar.a.x;  y:=menubar.a.y;
  x1:=menubar.b.x; y1:=menubar.b.y;
  If (x>2) And (y>2) Then Begin
  line(x+2,y-2,x1+2,y-2); line(x1+2,y-2,x1+2,y1-2); End;
  line(x,y,x1,y);    line(x1,y,x1,y1);
  line(x1,y1,x,y1);  line(x,y1,x,y);
  inc(x); inc(y);    dec(x1); dec(y1);
  bar(x,y,x1,y1);
End;

Procedure interf.buildtitlebar;
Var x,y,x1,y1:integer;
Begin
  {//Титульная область (снизу).}
  With ppalete^ Do setcolor(titlebar_framecolor);
  With ppalete^ Do setfillstyle(solidfill,titlebar_bodycolor);
  x:=titlebar.a.x;  y:=titlebar.a.y;
  x1:=titlebar.b.x; y1:=titlebar.b.y;
  If (x>2) And (y>2) Then Begin
  line(x+2,y-2,x1+2,y-2); line(x1+2,y-2,x1+2,y1-2); End;
  line(x,y,x1,y);    line(x1,y,x1,y1);
  line(x1,y1,x,y1);  line(x,y1,x,y);
  inc(x); inc(y);    dec(x1); dec(y1);
  bar(x,y,x1,y1);
End;

Procedure interf.buildworkbar;
Var x,y,x1,y1:integer;
Begin
  {//Командная область.}
  With ppalete^ Do setcolor(workbar_framecolor);
  With ppalete^ Do setfillstyle(solidfill,workbar_bodycolor);
  x:=workbar.a.x;  y:=workbar.a.y;
  x1:=workbar.b.x; y1:=workbar.b.y;
  If (x>2) And (y>2) Then Begin
  line(x+2,y-2,x1+2,y-2); line(x1+2,y-2,x1+2,y1-2); End;
  line(x,y,x1,y);    line(x1,y,x1,y1);
  line(x1,y1,x,y1);  line(x,y1,x,y);
  inc(x); inc(y);    dec(x1); dec(y1);
  bar(x,y,x1,y1);
End;

Procedure interf.buildhelp;
Var x,y,x1:integer; i:byte;
Begin
  {//Инициация координат буфера справки.}
  With ppalete^ Do setcolor(helpcolor);
  x:=workbar.a.x+2;
  x1:=workbar.b.x-2;
  y:=(workbar.a.y+workbar.b.y) Div 2;
  line(x,y,x1,y);
  {//Текст.}
  s_[1]:='E-exit.';
  {//Выведение текста.}
  inc(x,5);
  settextstyle(smallfont,horizdir,5);
  For i:=1 To 5 Do Begin
      y:=y+10;
      outtextxy(x,y,s_[i]);
  End;
End;

Procedure interf.outhelp;
Var x,y,x1:integer; i:byte;
Begin
  {//Выведение текста справки.}
  {//Инициация координат буфера справки.}
  With ppalete^ Do setcolor(helpcolor);
  With ppalete^ Do setfillstyle(solidfill,workbar_bodycolor);
  x:=workbar.a.x+2;
  x1:=workbar.b.x-2;
  y:=(workbar.a.y+workbar.b.y) Div 2;
  bar(x+1,y+1,workbar.b.x-1,workbar.b.y-1);
  line(x,y,x1,y);
  {//Выведение текста.}
  inc(x,5);
  settextstyle(smallfont,horizdir,5);
  For i:=1 To 10 Do Begin
      y:=y+10;
      outtextxy(x,y,s_[i]);
  End;
End;

Procedure interf.outmesstr;
Var x,y:integer;
Begin
  {//Вывод строк сообщения.}
  With ppalete^ Do setcolor(menutext_color);
  x:=menubar.a.x+10; y:=menubar.b.y-15;
  settextstyle(smallfont,horizdir,5);
  outtextxy(x,y,up_s);
  With ppalete^ Do setcolor(titletext_color);
  x:=titlebar.a.x+10; y:=titlebar.b.y-15;
  settextstyle(smallfont,horizdir,5);
  outtextxy(x,y,down_s);
End;

Destructor interf.done;
Begin
  {//Процедура деструктора.}
  dispose(ppalete,done);
End;

End.