Added TIMER menu command types
This commit is contained in:
parent
3725817427
commit
a737132e15
|
@ -4326,6 +4326,10 @@
|
||||||
there may be issues - particularly in lightbar grid menus I would guess
|
there may be issues - particularly in lightbar grid menus I would guess
|
||||||
since they can be quite complex.
|
since they can be quite complex.
|
||||||
|
|
||||||
|
For those of you alpha testing, if you do find a menu that does not
|
||||||
|
convert correctly, please send the .mnu file to me so that I can see if
|
||||||
|
I can improve the conversion process before 1.10 official release.
|
||||||
|
|
||||||
+ Each menu option on a menu now as its own "execution list" of menu
|
+ Each menu option on a menu now as its own "execution list" of menu
|
||||||
commands. This basically replaces the old "kludge" stacking of commands
|
commands. This basically replaces the old "kludge" stacking of commands
|
||||||
to execute back to back with a single hotkey. It is a much more clean
|
to execute back to back with a single hotkey. It is a much more clean
|
||||||
|
@ -4378,6 +4382,8 @@
|
||||||
Page Down
|
Page Down
|
||||||
Escape
|
Escape
|
||||||
Tab
|
Tab
|
||||||
|
Home
|
||||||
|
End
|
||||||
|
|
||||||
+ In a lightbar grid menu, each menu command now has the ability to execute
|
+ In a lightbar grid menu, each menu command now has the ability to execute
|
||||||
on a grid-specific event. The following are available options:
|
on a grid-specific event. The following are available options:
|
||||||
|
@ -4391,14 +4397,21 @@
|
||||||
Escape
|
Escape
|
||||||
PgUp
|
PgUp
|
||||||
PgDn
|
PgDn
|
||||||
|
Home
|
||||||
|
End
|
||||||
|
|
||||||
+ All displayed menu items now have an option for display type. If it set
|
+ All displayed menu items now have an option for display type. If it set
|
||||||
to Access it will only be displayed if the user has access. If it is set
|
to Access it will only be displayed if the user has access. If it is set
|
||||||
to Always, it will always been displayed, and if it is set to Never, it
|
to Always, it will always been displayed. If its set to Never, it will
|
||||||
will never be displayed.
|
never be displayed.
|
||||||
|
|
||||||
+ Lightbar and Lightbar/Grid menus now display menu header and prompts if
|
+ Lightbar and Lightbar/Grid menus now display menu header and prompts if
|
||||||
they are not set to a blank value. They were ignored in the past, but
|
they are not set to a blank value. They were ignored in the past, but
|
||||||
this provides some better flexibility. If you have lightbar menus you
|
this provides some better flexibility. If you have lightbar menus you
|
||||||
may need to validate that the header/footers in your menu flags are blank
|
may need to validate that the header/footers in your menu flags are blank
|
||||||
if you do not want this feature.
|
if you do not want this feature.
|
||||||
|
|
||||||
|
+ New auto-exec hotkey for menu commands: TIMER. An item with the hotkey
|
||||||
|
of TIMER will automatically execute every X amount of seconds, which is
|
||||||
|
defined per menu command. This combined with all of the other new
|
||||||
|
features makes for an amazingly powerful new menu system!
|
||||||
|
|
|
@ -54,6 +54,7 @@ Type
|
||||||
LastMCIValue : String;
|
LastMCIValue : String;
|
||||||
InputPos : Byte;
|
InputPos : Byte;
|
||||||
GetKeyCallBack : TGetKeyCallBack;
|
GetKeyCallBack : TGetKeyCallBack;
|
||||||
|
LastSecond : LongInt;
|
||||||
|
|
||||||
{$IFDEF WINDOWS}
|
{$IFDEF WINDOWS}
|
||||||
OutBuffer : Array[0..TBBSIOBufferSize] of Char;
|
OutBuffer : Array[0..TBBSIOBufferSize] of Char;
|
||||||
|
@ -1260,16 +1261,15 @@ End;
|
||||||
Function TBBSIO.GetKey : Char;
|
Function TBBSIO.GetKey : Char;
|
||||||
Var
|
Var
|
||||||
TimeCount : LongInt;
|
TimeCount : LongInt;
|
||||||
LastSec : LongInt = 0;
|
|
||||||
Begin
|
Begin
|
||||||
Result := #255;
|
Result := #255;
|
||||||
|
|
||||||
TBBSCore(Core).TimeOut := TimerSeconds;
|
TBBSCore(Core).TimeOut := TimerSeconds;
|
||||||
|
|
||||||
BufFlush;
|
BufFlush;
|
||||||
|
|
||||||
Repeat
|
Repeat
|
||||||
If LastSec <> TimerSeconds Then Begin
|
If LastSecond <> TimerSeconds Then Begin
|
||||||
|
|
||||||
If Assigned(GetKeyCallBack) Then
|
If Assigned(GetKeyCallBack) Then
|
||||||
If GetKeyCallBack(False) Then Begin
|
If GetKeyCallBack(False) Then Begin
|
||||||
|
@ -1277,7 +1277,7 @@ Begin
|
||||||
Exit;
|
Exit;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
LastSec := TimerSeconds;
|
LastSecond := TimerSeconds;
|
||||||
|
|
||||||
If InMacro Then
|
If InMacro Then
|
||||||
If InMacroPos <= Length(InMacroStr) Then Begin
|
If InMacroPos <= Length(InMacroStr) Then Begin
|
||||||
|
|
|
@ -24,6 +24,7 @@ Type
|
||||||
SetAction : Boolean;
|
SetAction : Boolean;
|
||||||
UseLongKey : Boolean;
|
UseLongKey : Boolean;
|
||||||
UseTimer : Boolean;
|
UseTimer : Boolean;
|
||||||
|
TimerCount : LongInt;
|
||||||
ViewOnly : Boolean;
|
ViewOnly : Boolean;
|
||||||
|
|
||||||
Constructor Create (O: Pointer);
|
Constructor Create (O: Pointer);
|
||||||
|
@ -34,7 +35,7 @@ Type
|
||||||
Function LoadMenu (Forced: Boolean) : Boolean;
|
Function LoadMenu (Forced: Boolean) : Boolean;
|
||||||
Procedure ExecuteMenu (Load, Forced, View, Action: Boolean);
|
Procedure ExecuteMenu (Load, Forced, View, Action: Boolean);
|
||||||
Function ExecuteCommandList (Num, JumpID: LongInt) : Byte;
|
Function ExecuteCommandList (Num, JumpID: LongInt) : Byte;
|
||||||
Function ExecuteByHotkey (Key: String) : Boolean;
|
Function ExecuteByHotkey (Key: String; Interval: LongInt) : Boolean;
|
||||||
Function ExecuteCommand (Cmd, CmdData: String) : Boolean;
|
Function ExecuteCommand (Cmd, CmdData: String) : Boolean;
|
||||||
Function ShowMenu : Boolean;
|
Function ShowMenu : Boolean;
|
||||||
Procedure GenerateMenu;
|
Procedure GenerateMenu;
|
||||||
|
@ -359,6 +360,7 @@ Begin
|
||||||
|
|
||||||
If TBBSCore(Owner).User.Access(Data.Item[Num]^.CmdData[Count]^.Access) Then Begin
|
If TBBSCore(Owner).User.Access(Data.Item[Num]^.CmdData[Count]^.Access) Then Begin
|
||||||
Result := 1;
|
Result := 1;
|
||||||
|
|
||||||
If ExecuteCommand(Data.Item[Num]^.CmdData[Count]^.MenuCmd, Data.Item[Num]^.CmdData[Count]^.Data) Then Begin
|
If ExecuteCommand(Data.Item[Num]^.CmdData[Count]^.MenuCmd, Data.Item[Num]^.CmdData[Count]^.Data) Then Begin
|
||||||
Result := 2;
|
Result := 2;
|
||||||
Exit;
|
Exit;
|
||||||
|
@ -367,7 +369,7 @@ Begin
|
||||||
End;
|
End;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Function TMenuEngine.ExecuteByHotkey (Key: String) : Boolean;
|
Function TMenuEngine.ExecuteByHotkey (Key: String; Interval: LongInt) : Boolean;
|
||||||
Var
|
Var
|
||||||
Count : LongInt;
|
Count : LongInt;
|
||||||
Begin
|
Begin
|
||||||
|
@ -382,10 +384,11 @@ Begin
|
||||||
End;
|
End;
|
||||||
|
|
||||||
If Data.Item[Count]^.HotKey = Key Then
|
If Data.Item[Count]^.HotKey = Key Then
|
||||||
If ExecuteCommandList(Count, -1) = 2 Then Begin
|
If (Key <> 'TIMER') or ((Key = 'TIMER') And (Interval MOD Data.Item[Count]^.Timer = 0)) Then
|
||||||
Result := True;
|
If ExecuteCommandList(Count, -1) = 2 Then Begin
|
||||||
Exit;
|
Result := True;
|
||||||
End;
|
Exit;
|
||||||
|
End;
|
||||||
End;
|
End;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
|
@ -452,7 +455,7 @@ Begin
|
||||||
TBBSCore(Owner).io.BufFlush;
|
TBBSCore(Owner).io.BufFlush;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
If ExecuteByHotKey('AFTER') Then Exit;
|
If ExecuteByHotKey('AFTER', 0) Then Exit;
|
||||||
|
|
||||||
If Data.Info.Footer <> '' Then
|
If Data.Info.Footer <> '' Then
|
||||||
TBBSCore(Owner).io.OutFull(Data.Info.Footer);
|
TBBSCore(Owner).io.OutFull(Data.Info.Footer);
|
||||||
|
@ -497,7 +500,7 @@ Var
|
||||||
Begin
|
Begin
|
||||||
While Not TBBSCore(Owner).ShutDown Do Begin
|
While Not TBBSCore(Owner).ShutDown Do Begin
|
||||||
If Not ViewOnly Then
|
If Not ViewOnly Then
|
||||||
If ExecuteByHotKey('EVERY') Then Exit;
|
If ExecuteByHotKey('EVERY', 0) Then Exit;
|
||||||
|
|
||||||
If ReDraw Then GenerateMenu;
|
If ReDraw Then GenerateMenu;
|
||||||
|
|
||||||
|
@ -567,7 +570,7 @@ Begin
|
||||||
If ViewOnly Then Exit;
|
If ViewOnly Then Exit;
|
||||||
|
|
||||||
If Not TBBSCore(Owner).ShutDown Then
|
If Not TBBSCore(Owner).ShutDown Then
|
||||||
If ExecuteByHotKey(Temp) Then
|
If ExecuteByHotKey(Temp, 0) Then
|
||||||
Exit;
|
Exit;
|
||||||
End;
|
End;
|
||||||
End;
|
End;
|
||||||
|
@ -664,7 +667,7 @@ Begin
|
||||||
|
|
||||||
While Not TBBSCore(Owner).ShutDown Do Begin
|
While Not TBBSCore(Owner).ShutDown Do Begin
|
||||||
If Not ViewOnly Then
|
If Not ViewOnly Then
|
||||||
ExecuteByHotKey('EVERY');
|
ExecuteByHotKey('EVERY', 0);
|
||||||
|
|
||||||
If SetAction Then
|
If SetAction Then
|
||||||
If Data.Info.NodeStatus <> '' Then
|
If Data.Info.NodeStatus <> '' Then
|
||||||
|
@ -697,7 +700,7 @@ Begin
|
||||||
TBBSCore(Owner).io.AllowArrow := True;
|
TBBSCore(Owner).io.AllowArrow := True;
|
||||||
|
|
||||||
If Not ViewOnly Then
|
If Not ViewOnly Then
|
||||||
ExecuteByHotKey('AFTER');
|
ExecuteByHotKey('AFTER', 0);
|
||||||
|
|
||||||
DrawBar (CursorPos, True);
|
DrawBar (CursorPos, True);
|
||||||
|
|
||||||
|
@ -770,12 +773,24 @@ Begin
|
||||||
End;
|
End;
|
||||||
End;
|
End;
|
||||||
End;
|
End;
|
||||||
|
#71 : If Data.Info.MenuType = 2 Then
|
||||||
|
Case ExecuteCommandList(CursorPos, 9) of
|
||||||
|
0 : ;
|
||||||
|
1 : Break;
|
||||||
|
2 : Exit;
|
||||||
|
End;
|
||||||
#73 : If Data.Info.MenuType = 2 Then
|
#73 : If Data.Info.MenuType = 2 Then
|
||||||
Case ExecuteCommandList(CursorPos, 7) of
|
Case ExecuteCommandList(CursorPos, 7) of
|
||||||
0 : ;
|
0 : ;
|
||||||
1 : Break;
|
1 : Break;
|
||||||
2 : Exit;
|
2 : Exit;
|
||||||
End;
|
End;
|
||||||
|
#79 : If Data.Info.MenuType = 2 Then
|
||||||
|
Case ExecuteCommandList(CursorPos, 10) of
|
||||||
|
0 : ;
|
||||||
|
1 : Break;
|
||||||
|
2 : Exit;
|
||||||
|
End;
|
||||||
#81 : If Data.Info.MenuType = 2 Then
|
#81 : If Data.Info.MenuType = 2 Then
|
||||||
Case ExecuteCommandList(CursorPos, 8) of
|
Case ExecuteCommandList(CursorPos, 8) of
|
||||||
0 : ;
|
0 : ;
|
||||||
|
@ -878,11 +893,23 @@ Begin
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Procedure TMenuEngine.ExecuteMenu (Load, Forced, View, Action: Boolean);
|
Procedure TMenuEngine.ExecuteMenu (Load, Forced, View, Action: Boolean);
|
||||||
|
|
||||||
|
Function TimerController (Forced: Boolean) : Boolean;
|
||||||
|
Begin
|
||||||
|
Result := False;
|
||||||
|
|
||||||
|
Inc (TimerCount);
|
||||||
|
|
||||||
|
ExecuteByHotkey('TIMER', TimerCount);
|
||||||
|
|
||||||
|
If TimerCount = 100000 Then TimerCount := 0;
|
||||||
|
End;
|
||||||
|
|
||||||
Var
|
Var
|
||||||
Count : LongInt;
|
Count : LongInt;
|
||||||
Begin
|
Begin
|
||||||
SetAction := Action;
|
SetAction := Action;
|
||||||
ViewOnly := View;
|
ViewOnly := View;
|
||||||
|
|
||||||
If ViewOnly Then Begin
|
If ViewOnly Then Begin
|
||||||
Case Data.Info.MenuType of
|
Case Data.Info.MenuType of
|
||||||
|
@ -924,6 +951,7 @@ Begin
|
||||||
ReDraw := NextReDraw;
|
ReDraw := NextReDraw;
|
||||||
NextReDraw := True;
|
NextReDraw := True;
|
||||||
UseLongKey := False;
|
UseLongKey := False;
|
||||||
|
TimerCount := 0;
|
||||||
|
|
||||||
For Count := 1 to Data.NumItems Do Begin
|
For Count := 1 to Data.NumItems Do Begin
|
||||||
If (Data.Item[Count]^.HotKey = 'EVERY') or
|
If (Data.Item[Count]^.HotKey = 'EVERY') or
|
||||||
|
@ -947,6 +975,9 @@ Begin
|
||||||
If Byte(Data.Item[Count]^.HotKey[0]) > 1 Then UseLongKey := True;
|
If Byte(Data.Item[Count]^.HotKey[0]) > 1 Then UseLongKey := True;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
|
If UseTimer Then
|
||||||
|
Session.io.GetKeyCallBack := TimerController;
|
||||||
|
|
||||||
Case Data.Info.MenuType of
|
Case Data.Info.MenuType of
|
||||||
0 : DoStandardMenu;
|
0 : DoStandardMenu;
|
||||||
1,
|
1,
|
||||||
|
@ -955,6 +986,8 @@ Begin
|
||||||
Else
|
Else
|
||||||
DoStandardMenu;
|
DoStandardMenu;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
|
Session.io.GetKeyCallback := NIL;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
End.
|
End.
|
||||||
|
|
Loading…
Reference in New Issue