source: branches/work_311/core/OpenWindowHelper.cpp @ 604

Revision 604, 5.0 KB checked in by jls17, 5 years ago (diff)
Line 
1//Copyright (C) 2009 John Luthgers | jls17
2//
3//This file is part of ARInside.
4//
5//    ARInside is free software: you can redistribute it and/or modify
6//    it under the terms of the GNU General Public License as published by
7//    the Free Software Foundation, version 2 of the License.
8//
9//    ARInside is distributed in the hope that it will be useful,
10//    but WITHOUT ANY WARRANTY; without even the implied warranty of
11//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12//    GNU General Public License for more details.
13//
14//    You should have received a copy of the GNU General Public License
15//    along with Foobar.  If not, see <http://www.gnu.org/licenses/>.
16
17#include "stdafx.h"
18#include "OpenWindowHelper.h"
19
20CDocActionOpenWindowHelper::CDocActionOpenWindowHelper(char* reportString)
21{
22        isValid = false;
23        isParsed = false;
24        this->reportString = reportString;
25
26        reportType_Start = NULL;
27        reportType_End = NULL;
28        reportLocation_Start = NULL;
29        reportLocation_End = NULL;
30        reportName_Start = NULL;
31        reportName_End = NULL;
32        reportDestination_Start = NULL;
33        //reportDestination_End = NULL;
34        entryIds_Start = NULL;
35        entryIds_End = NULL;
36        queryOverride_Start = NULL;
37        queryOverride_End = NULL;
38        reportOperation_Start = NULL;
39        reportOperation_End = NULL;
40        charEncoding_Start = NULL;
41        charEncoding_End = NULL;
42        inlineForm_Start = NULL;
43        inlineForm_End = NULL;
44}
45
46CDocActionOpenWindowHelper::~CDocActionOpenWindowHelper()
47{
48}
49
50bool CDocActionOpenWindowHelper::ParseReportData()
51{
52        isParsed = true;
53        if (reportString == NULL) return false;
54
55        bool found = false;
56        char *curScanPos = strstr(reportString, "Report: \1"); 
57        if (curScanPos == NULL) return false;
58        curScanPos += 9;
59
60        while (curScanPos[0] != 0)
61        {
62                if (curScanPos[0] == 0x0A)
63                {
64                        ++curScanPos;
65                        reportDestination_Start = curScanPos;
66                        return true;
67                }
68
69                // search for "=" character (the start of the value follows)
70                int reportAttribute = atoi(curScanPos);
71                curScanPos = strchr(curScanPos,'='); 
72                if (curScanPos == NULL) return found;
73                ++curScanPos;
74
75                // now search for \1, this marks the end of the value
76                const char* pos = strchr(curScanPos,'\1');
77                if (pos == NULL) return found;
78                size_t len = (size_t)(pos - curScanPos);
79
80                const char **start = NULL;
81                const char **end = NULL;
82
83                switch (reportAttribute)
84                {
85                case AR_REPORT_ATTR_TYPE:
86                        start = &reportType_Start;
87                        end = &reportType_End;
88                        break;
89                case AR_REPORT_ATTR_FILENAME:
90                        start = &reportName_Start;
91                        end = &reportName_End;
92                        break;
93                case AR_REPORT_ATTR_LOCATION:
94                        start = &reportLocation_Start;
95                        end = &reportLocation_End;
96                        break;
97                case AR_REPORT_ATTR_CHAR_ENCODING:
98                        start = &charEncoding_Start;
99                        end = &charEncoding_End;
100                        break;
101                case AR_REPORT_ATTR_ENTRYIDS:
102                        start = &entryIds_Start;
103                        end = &entryIds_End;
104                        break;
105                case AR_REPORT_ATTR_QUERY_OVERRIDE:
106                        start = &queryOverride_Start;
107                        end = &queryOverride_End;
108                        break;
109                case AR_REPORT_ATTR_OPERATION:
110                        start = &reportOperation_Start;
111                        end = &reportOperation_End;
112                        break;
113#if AR_CURRENT_API_VERSION >= AR_API_VERSION_764
114                case AR_REPORT_ATTR_INLINE_FORM:
115                        start = &inlineForm_Start;
116                        end = &inlineForm_End;
117                        break;
118#endif
119                }
120
121                if (start != NULL && end != NULL)
122                {
123                        *start = curScanPos;
124                        *end = pos;
125                }
126                curScanPos += len + 1;
127        }
128
129        return false;
130}
131
132void CDocActionOpenWindowHelper::CheckAlreadyParsed()
133{
134        if (!isParsed)
135                isValid = ParseReportData();
136}
137
138bool CDocActionOpenWindowHelper::IsValid()
139{
140        CheckAlreadyParsed();
141        return isValid;
142}
143
144string CDocActionOpenWindowHelper::getReportType()
145{
146        CheckAlreadyParsed();
147        if (!isValid) return "";
148
149        return string(reportType_Start, reportType_End);
150}
151
152string CDocActionOpenWindowHelper::getReportLocation()
153{
154        CheckAlreadyParsed();
155        if (!isValid) return "";
156
157        return string(reportLocation_Start, reportLocation_End);
158}
159
160string CDocActionOpenWindowHelper::getReportName()
161{
162        CheckAlreadyParsed();
163        if (!isValid) return "";
164
165        return string(reportName_Start, reportName_End);
166}
167
168string CDocActionOpenWindowHelper::getReportDestination()
169{
170        CheckAlreadyParsed();
171        if (!isValid) return "";
172
173        return reportDestination_Start;
174}
175
176string CDocActionOpenWindowHelper::getEntryIds()
177{
178        CheckAlreadyParsed();
179        if (!isValid) return "";
180
181        return string(entryIds_Start, entryIds_End);
182}
183
184string CDocActionOpenWindowHelper::getQueryOverride()
185{
186        CheckAlreadyParsed();
187        if (!isValid) return "";
188
189        return string(queryOverride_Start, queryOverride_End);
190}
191
192string CDocActionOpenWindowHelper::getReportOperation()
193{
194        CheckAlreadyParsed();
195        if (!isValid) return "";
196
197        return string(reportOperation_Start, reportOperation_End);
198}
199
200string CDocActionOpenWindowHelper::getCharEncoding()
201{
202        CheckAlreadyParsed();
203        if (!isValid) return "";
204
205        return string(charEncoding_Start, charEncoding_End);
206}
207
208string CDocActionOpenWindowHelper::getInlineForm()
209{
210        CheckAlreadyParsed();
211        if (!isValid) return "";
212
213        return string(inlineForm_Start, inlineForm_End);
214}
Note: See TracBrowser for help on using the repository browser.