OSDN Git Service

構成変更のためファイルを置き直し。
[kybernetes/Kybernetes.git] / base / view / CmdHistory.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.Linq;\r
4 using System.Text;\r
5 \r
6 namespace com.andoutomo.kybernetes.view\r
7 {\r
8     /// <summary>\r
9     /// コマンドヒストリを保持します。\r
10     /// </summary>\r
11     public class CmdHistory\r
12     {\r
13         private string[] commandHist;\r
14         private int currentPosition;\r
15         const int MAXHIST = 10; \r
16 \r
17         public CmdHistory()\r
18         {\r
19             commandHist = new string[MAXHIST];\r
20             currentPosition = 0;\r
21         }\r
22         /// <summary>\r
23         /// 直前に実行されたコマンドをを提示します。\r
24         /// 同時にカレント位置を動かし、さらにその前のコマンドを提示する準備を行います。\r
25         /// </summary>\r
26         /// <returns></returns>\r
27         public string prevCommand()\r
28         {\r
29             //終点まで来ている場合は最後のコマンドを表示。カレント位置も動かさない。\r
30             if (currentPosition == MAXHIST)\r
31             {\r
32                 return commandHist[MAXHIST-1];\r
33             }\r
34             //次に提示するコマンドがある場合は、カレント位置を動かす。\r
35             if (!string.IsNullOrEmpty(commandHist[currentPosition]))\r
36             {\r
37                 currentPosition++;\r
38             }\r
39             //ヒストリ配列からコマンドを取得してreturn\r
40             if (currentPosition > 0)\r
41             {\r
42                 return commandHist[currentPosition - 1];\r
43             }\r
44             //この段階でcurrentPosition=0(ヒストリがない)場合は、空文字を返す。\r
45             else\r
46             {\r
47                 return string.Empty;\r
48             }\r
49         }\r
50         /// <summary>\r
51         /// カレント位置の次に実行されたコマンドを提示します。\r
52         /// </summary>\r
53         /// <returns></returns>\r
54         public string nextCommand()\r
55         {\r
56             currentPosition--;\r
57             if (currentPosition <= 0)\r
58             {\r
59                 currentPosition = 0;\r
60                 return string.Empty;\r
61             }\r
62             return commandHist[currentPosition-1];\r
63         }\r
64         /// <summary>\r
65         /// コマンド受け入れを行います。\r
66         /// コマンドはスタックされ、10件以上の場合は10番目が破棄されます。\r
67         /// また、同一のコマンドを連続入力した場合はスタックを行いません。\r
68         /// </summary>\r
69         /// <param name="command"></param>\r
70         public void stackCmd(string command)\r
71         {\r
72             if (command != commandHist[0])\r
73             {\r
74                 //スタックを行う\r
75                 for (int i = MAXHIST-1; i > 0; i--)\r
76                 {\r
77                     commandHist[i] = commandHist[i - 1];\r
78                 }\r
79 \r
80                 //新たなコマンドを追加する\r
81                 commandHist[0] = command;\r
82             }\r
83             //ポジションをリセット\r
84             resetPosition();\r
85         }\r
86         /// <summary>\r
87         /// ヒストリで参照するポジションをリセットします。\r
88         /// </summary>\r
89         public void resetPosition()\r
90         {\r
91             currentPosition = 0;\r
92         }\r
93     }\r
94 }\r