1 /*
2 * Copyright 2008, Haiku.
3 * Distributed under the terms of the MIT license.
4 *
5 * Authors:
6 * Michael Pfeiffer <laplace@users.sourceforge.net>
7 */
8
9 #include "StatementWrapper.h"
10
11 static const char* kOpenUIStatement = "OpenUI";
12 static const char* kCloseUIStatement = "CloseUI";
13
14 static const char* kOpenGroupStatement = "OpenGroup";
15 static const char* kCloseGroupStatement = "CloseGroup";
16 static const char* kOpenSubGroupStatement = "OpenSubGroup";
17 static const char* kCloseSubGroupStatement = "CloseSubGroup";
18
19 // JCL
20 static const char* kJCL = "JCL";
21 static const char* kJCLOpenUIStatement = "JCLOpenUI";
22 static const char* kJCLCloseUIStatement = "JCLCloseUI";
23
24
StatementWrapper(Statement * statement)25 StatementWrapper::StatementWrapper(Statement* statement)
26 : fStatement(statement)
27 {
28 // nothing to do
29 }
30
GroupStatement(Statement * statement)31 GroupStatement::GroupStatement(Statement* statement)
32 : StatementWrapper(statement)
33 {
34 // nothing to do
35 }
36
IsUIGroup()37 bool GroupStatement::IsUIGroup()
38 {
39 return strcmp(GetKeyword(), kOpenUIStatement) == 0;
40 }
41
IsGroup()42 bool GroupStatement::IsGroup()
43 {
44 return strcmp(GetKeyword(), kOpenGroupStatement) == 0;
45 }
46
IsSubGroup()47 bool GroupStatement::IsSubGroup()
48 {
49 return strcmp(GetKeyword(), kOpenSubGroupStatement) == 0;
50 }
51
IsJCL()52 bool GroupStatement::IsJCL()
53 {
54 return strstr(GetKeyword(), kJCL) == GetKeyword();
55 }
56
IsOpenGroup()57 bool GroupStatement::IsOpenGroup()
58 {
59 const char* keyword = GetKeyword();
60
61 return strcmp(keyword, kOpenUIStatement) == 0 ||
62 strcmp(keyword, kOpenGroupStatement) == 0 ||
63 strcmp(keyword, kOpenSubGroupStatement) == 0 ||
64 strcmp(keyword, kJCLOpenUIStatement) == 0;
65 }
66
IsCloseGroup()67 bool GroupStatement::IsCloseGroup()
68 {
69 const char* keyword = GetKeyword();
70
71 return strcmp(keyword, kCloseUIStatement) == 0 ||
72 strcmp(keyword, kCloseGroupStatement) == 0 ||
73 strcmp(keyword, kCloseSubGroupStatement) == 0 ||
74 strcmp(keyword, kJCLCloseUIStatement) == 0;
75 }
76
GetValue()77 Value* GroupStatement::GetValue()
78 {
79 if (strcmp(GetKeyword(), kOpenUIStatement) == 0 ||
80 strcmp(GetKeyword(), kJCLOpenUIStatement) == 0) {
81 return GetStatement()->GetOption();
82 } else {
83 return GetStatement()->GetValue();
84 }
85 }
86
GetGroupName()87 const char* GroupStatement::GetGroupName()
88 {
89 Value* value = GetValue();
90 if (value == NULL) return NULL;
91 BString* string = value->GetValue();
92 if (string == NULL) return NULL;
93 const char* name = string->String();
94 if (name != NULL && *name == '*') {
95 // skip '*'
96 name ++;
97 }
98 return name;
99 }
100
GetGroupTranslation()101 const char* GroupStatement::GetGroupTranslation()
102 {
103 Value* value = GetValue();
104 if (value == NULL) return NULL;
105 BString* string = value->GetTranslation();
106 if (string == NULL) return NULL;
107 return string->String();
108 }
109
GetType()110 GroupStatement::Type GroupStatement::GetType()
111 {
112 const char* type = GetStatement()->GetValueString();
113 if (type == NULL) return kUnknown;
114
115 if (strstr(type, "PickOne") != NULL) return kPickOne;
116 if (strstr(type, "PickMany") != NULL) return kPickMany;
117 if (strstr(type, "Boolean") != NULL) return kBoolean;
118
119 return kUnknown;
120 }
121