OSDN Git Service

Show Ignore Sub Menu
[tortoisegit/TortoiseGitJp.git] / src / TortoiseProc / RevisionGraph / RevisionGraphOptionsImpl.h
1 // TortoiseSVN - a Windows shell extension for easy version control\r
2 \r
3 // Copyright (C) 2003-2008 - TortoiseSVN\r
4 \r
5 // This program is free software; you can redistribute it and/or\r
6 // modify it under the terms of the GNU General Public License\r
7 // as published by the Free Software Foundation; either version 2\r
8 // of the License, or (at your option) any later version.\r
9 \r
10 // This program is distributed in the hope that it will be useful,\r
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of\r
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
13 // GNU General Public License for more details.\r
14 \r
15 // You should have received a copy of the GNU General Public License\r
16 // along with this program; if not, write to the Free Software Foundation,\r
17 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\r
18 //\r
19 #pragma once\r
20 \r
21 // forward declarations\r
22 \r
23 class CRevisionGraphOptionList;\r
24 \r
25 /** Default implementation class for interfaces\r
26 * that derive from IRevisionGraphOption.\r
27 */\r
28 \r
29 template<class Base>\r
30 class IRevisionGraphOptionImpl : public Base\r
31 {\r
32 private:\r
33 \r
34     /// data members\r
35 \r
36     int priority;\r
37     UINT id;\r
38     bool selected;\r
39 \r
40 protected:\r
41 \r
42     /// construction / destruction\r
43 \r
44     IRevisionGraphOptionImpl ( CRevisionGraphOptionList& list\r
45                              , int priority\r
46                              , UINT id);\r
47     virtual ~IRevisionGraphOptionImpl() {};\r
48 \r
49 public:\r
50 \r
51     /// implement IRevisionGraphOption\r
52 \r
53     virtual UINT CommandID() const;\r
54     virtual int Priority() const; \r
55 \r
56     virtual bool IsAvailable() const;\r
57     virtual bool IsSelected() const;\r
58     virtual bool IsActive() const; \r
59 \r
60     virtual void ToggleSelection();\r
61 \r
62     virtual void Prepare();\r
63 };\r
64 \r
65 // construction\r
66 \r
67 template<class Base>\r
68 IRevisionGraphOptionImpl<Base>::IRevisionGraphOptionImpl \r
69     ( CRevisionGraphOptionList& list\r
70     , int priority\r
71     , UINT id)\r
72     : priority (priority)\r
73     , id (id)\r
74     , selected (false)\r
75 {\r
76     list.Add (static_cast<typename Base::I*>(this));\r
77 }\r
78 \r
79 // implement IRevisionGraphOption\r
80 \r
81 template<class Base>\r
82 UINT IRevisionGraphOptionImpl<Base>::CommandID() const\r
83 {\r
84     return id;\r
85 }\r
86 \r
87 template<class Base>\r
88 int IRevisionGraphOptionImpl<Base>::Priority() const\r
89 {\r
90     return priority;\r
91 }\r
92 \r
93 template<class Base>\r
94 bool IRevisionGraphOptionImpl<Base>::IsAvailable() const\r
95 {\r
96     return true;\r
97 }\r
98 \r
99 template<class Base>\r
100 bool IRevisionGraphOptionImpl<Base>::IsSelected() const\r
101 {\r
102     return selected;\r
103 }\r
104 \r
105 template<class Base>\r
106 bool IRevisionGraphOptionImpl<Base>::IsActive() const\r
107 {\r
108     return IsSelected();\r
109 }\r
110 \r
111 template<class Base>\r
112 void IRevisionGraphOptionImpl<Base>::ToggleSelection()\r
113 {\r
114     selected = !selected;\r
115 }\r
116 \r
117 template<class Base>\r
118 void IRevisionGraphOptionImpl<Base>::Prepare()\r
119 {\r
120 }\r
121 \r
122 /** Implement a simple boolean option.\r
123 */\r
124 \r
125 template<class Base, int Prio, UINT ID>\r
126 class CRevisionGraphOptionImpl : public IRevisionGraphOptionImpl<Base>\r
127 {\r
128 protected:\r
129 \r
130     typedef typename CRevisionGraphOptionImpl<Base, Prio, ID> inherited;\r
131 \r
132 public:\r
133 \r
134     /// construction / destruction\r
135 \r
136     CRevisionGraphOptionImpl (CRevisionGraphOptionList& list)\r
137         : IRevisionGraphOptionImpl<Base>(list, Prio, ID)\r
138     {\r
139     }\r
140 };\r
141 \r
142 /** Implement an IOrderedTraversalOption boolean option.\r
143 */\r
144 \r
145 template<class Base, int Prio, UINT ID, bool CopyiesFirst, bool RootFirst>\r
146 class COrderedTraversalOptionImpl \r
147     : public CRevisionGraphOptionImpl<Base, Prio, ID>\r
148 {\r
149 protected:\r
150 \r
151     /// for simplied construction by the _derived_ class\r
152 \r
153     typedef typename COrderedTraversalOptionImpl< Base\r
154                                                 , Prio\r
155                                                 , ID\r
156                                                 , CopyiesFirst\r
157                                                 , RootFirst> inherited;\r
158 \r
159 public:\r
160 \r
161     /// construction / destruction\r
162 \r
163     COrderedTraversalOptionImpl (CRevisionGraphOptionList& list)\r
164         : CRevisionGraphOptionImpl<Base, Prio, ID>(list)\r
165     {\r
166     }\r
167 \r
168     /// implement IOrderedTraversalOption\r
169 \r
170     virtual bool WantsCopiesFirst() const\r
171     {\r
172         return CopyiesFirst;\r
173     }\r
174 \r
175     virtual bool WantsRootFirst() const\r
176     {\r
177         return RootFirst;\r
178     }\r
179 };\r
180 \r
181 /** Allow for two or more interfaces to be implemented by the same option.\r
182 */\r
183 \r
184 template<class I1, class I2>\r
185 class CCombineInterface \r
186     : public virtual I1\r
187     , public virtual I2\r
188 {\r
189     typedef I1 I;\r
190 };