Branch data Line data Source code
1 : : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : : /*
3 : : * This file is part of the LibreOffice project.
4 : : *
5 : : * This Source Code Form is subject to the terms of the Mozilla Public
6 : : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : : */
9 : :
10 : : #include <rtl/ustrbuf.hxx>
11 : : #include "condformathelper.hxx"
12 : : #include "globstr.hrc"
13 : :
14 : : namespace {
15 : :
16 : 0 : rtl::OUString getTextForType(ScCondFormatEntryType eType)
17 : : {
18 : 0 : switch(eType)
19 : : {
20 : : case CONDITION:
21 : 0 : return ScGlobal::GetRscString(STR_COND_CONDITION);
22 : : case COLORSCALE:
23 : 0 : return ScGlobal::GetRscString(STR_COND_COLORSCALE);
24 : : case DATABAR:
25 : 0 : return ScGlobal::GetRscString(STR_COND_DATABAR);
26 : : case FORMULA:
27 : 0 : return ScGlobal::GetRscString(STR_COND_FORMULA);
28 : : default:
29 : 0 : break;
30 : : }
31 : :
32 : 0 : return rtl::OUString("");
33 : : }
34 : :
35 : 0 : rtl::OUString getExpression(sal_Int32 nIndex)
36 : : {
37 : 0 : switch(nIndex)
38 : : {
39 : : case 0:
40 : 0 : return rtl::OUString("=");
41 : : case 1:
42 : 0 : return rtl::OUString("<");
43 : : case 2:
44 : 0 : return rtl::OUString(">");
45 : : case 3:
46 : 0 : return rtl::OUString("<=");
47 : : case 4:
48 : 0 : return rtl::OUString(">=");
49 : : case 5:
50 : 0 : return rtl::OUString("!=");
51 : : case 6:
52 : 0 : return ScGlobal::GetRscString(STR_COND_BETWEEN);
53 : : case 7:
54 : 0 : return ScGlobal::GetRscString(STR_COND_NOTBETWEEN);
55 : : case 8:
56 : 0 : return ScGlobal::GetRscString(STR_COND_DUPLICATE);
57 : : case 9:
58 : 0 : return ScGlobal::GetRscString(STR_COND_UNIQUE);
59 : : }
60 : 0 : return rtl::OUString();
61 : : }
62 : :
63 : : }
64 : :
65 : 0 : rtl::OUString ScCondFormatHelper::GetExpression(const ScConditionalFormat& rFormat, const ScAddress& rPos)
66 : : {
67 : 0 : rtl::OUStringBuffer aBuffer;
68 : 0 : if(!rFormat.IsEmpty())
69 : : {
70 : 0 : switch(rFormat.GetEntry(0)->GetType())
71 : : {
72 : : case condformat::CONDITION:
73 : : {
74 : 0 : const ScConditionEntry* pEntry = static_cast<const ScConditionEntry*>(rFormat.GetEntry(0));
75 : 0 : ScConditionMode eMode = pEntry->GetOperation();
76 : 0 : if(eMode == SC_COND_DIRECT)
77 : : {
78 : 0 : aBuffer.append(getTextForType(FORMULA));
79 : 0 : aBuffer.append(" ");
80 : 0 : aBuffer.append(pEntry->GetExpression(rPos, 0));
81 : : }
82 : : else
83 : : {
84 : 0 : aBuffer.append(getTextForType(CONDITION));
85 : 0 : aBuffer.append(rtl::OUString(" "));
86 : 0 : aBuffer.append(getExpression(static_cast<sal_Int32>(eMode)));
87 : 0 : aBuffer.append(rtl::OUString(" "));
88 : 0 : if(eMode == SC_COND_BETWEEN || eMode == SC_COND_NOTBETWEEN)
89 : : {
90 : 0 : aBuffer.append(pEntry->GetExpression(rPos, 0));
91 : 0 : aBuffer.append(rtl::OUString(" and "));
92 : 0 : aBuffer.append(pEntry->GetExpression(rPos, 1));
93 : : }
94 : : else
95 : : {
96 : 0 : aBuffer.append(pEntry->GetExpression(rPos, 0));
97 : : }
98 : : }
99 : : }
100 : :
101 : 0 : break;
102 : : case condformat::DATABAR:
103 : 0 : aBuffer.append(getTextForType(DATABAR));
104 : 0 : break;
105 : : case condformat::COLORSCALE:
106 : 0 : aBuffer.append(getTextForType(COLORSCALE));
107 : 0 : break;
108 : : }
109 : : }
110 : 0 : return aBuffer.makeStringAndClear();
111 : : }
112 : :
113 : 0 : rtl::OUString ScCondFormatHelper::GetExpression( ScCondFormatEntryType eType, sal_Int32 nIndex )
114 : : {
115 : 0 : rtl::OUStringBuffer aBuffer(getTextForType(eType));
116 : 0 : aBuffer.append(rtl::OUString(" "));
117 : 0 : if(eType == CONDITION)
118 : 0 : aBuffer.append(getExpression(nIndex));
119 : :
120 : 0 : return aBuffer.makeStringAndClear();
121 : : }
122 : :
123 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|