|
1 // Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). |
|
2 // All rights reserved. |
|
3 // This component and the accompanying materials are made available |
|
4 // under the terms of "Eclipse Public License v1.0" |
|
5 // which accompanies this distribution, and is available |
|
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
7 // |
|
8 // Initial Contributors: |
|
9 // Nokia Corporation - initial contribution. |
|
10 // |
|
11 // Contributors: |
|
12 // |
|
13 // Description: |
|
14 // Implementation of CConfigureSCMDialog class |
|
15 // |
|
16 |
|
17 |
|
18 |
|
19 /** |
|
20 @file |
|
21 @internalTechnology |
|
22 @released |
|
23 @see CCoreDumpFormatter |
|
24 */ |
|
25 |
|
26 #include "coredumpui.h" |
|
27 #include "coredumpscmdialog.h" |
|
28 |
|
29 |
|
30 CConfigureSCMDialog::CConfigureSCMDialog(RCoreDumpSession &aCoreDumpSession) |
|
31 : CCoreDumpDialogBase(aCoreDumpSession) |
|
32 { |
|
33 } |
|
34 |
|
35 CConfigureSCMDialog::~CConfigureSCMDialog() |
|
36 { |
|
37 iConfs.ResetAndDestroy(); |
|
38 } |
|
39 |
|
40 void CConfigureSCMDialog::PreLayoutDynInitL() |
|
41 { |
|
42 UpdateDialogDataL(); |
|
43 } |
|
44 |
|
45 void CConfigureSCMDialog::PostLayoutDynInitL() |
|
46 { |
|
47 } |
|
48 |
|
49 void CConfigureSCMDialog::UpdateDialogDataL() |
|
50 { |
|
51 // We are loading up edwins as defined in rss file here |
|
52 // A better approach may be to create the items dynamically if time allows |
|
53 // example code for this at http://wiki.forum.nokia.com/index.php/Create_Modal_dialog_and_add_controls_dynamically |
|
54 |
|
55 //update dialog |
|
56 RPointerArray<CEikEdwin> edwins; |
|
57 edwins.Append(static_cast<CEikEdwin*>(Control(EEdwin0))); |
|
58 edwins.Append(static_cast<CEikEdwin*>(Control(EEdwin1))); |
|
59 edwins.Append(static_cast<CEikEdwin*>(Control(EEdwin2))); |
|
60 edwins.Append(static_cast<CEikEdwin*>(Control(EEdwin3))); |
|
61 edwins.Append(static_cast<CEikEdwin*>(Control(EEdwin4))); |
|
62 edwins.Append(static_cast<CEikEdwin*>(Control(EEdwin5))); |
|
63 edwins.Append(static_cast<CEikEdwin*>(Control(EEdwin6))); |
|
64 edwins.Append(static_cast<CEikEdwin*>(Control(EEdwin7))); |
|
65 edwins.Append(static_cast<CEikEdwin*>(Control(EEdwin8))); |
|
66 edwins.Append(static_cast<CEikEdwin*>(Control(EEdwin9))); |
|
67 edwins.Append(static_cast<CEikEdwin*>(Control(EEdwin10))); |
|
68 edwins.Append(static_cast<CEikEdwin*>(Control(EEdwin11))); |
|
69 edwins.Append(static_cast<CEikEdwin*>(Control(EEdwin12))); |
|
70 edwins.Append(static_cast<CEikEdwin*>(Control(EEdwin13))); |
|
71 edwins.Append(static_cast<CEikEdwin*>(Control(EEdwin14))); |
|
72 edwins.Append(static_cast<CEikEdwin*>(Control(EEdwin15))); |
|
73 edwins.Append(static_cast<CEikEdwin*>(Control(EEdwin16))); |
|
74 edwins.Append(static_cast<CEikEdwin*>(Control(EEdwin17))); |
|
75 edwins.Append(static_cast<CEikEdwin*>(Control(EEdwin18))); |
|
76 |
|
77 for (TInt i = 0; i < edwins.Count(); i++) |
|
78 { |
|
79 edwins[i]->SetDimmed(ETrue); |
|
80 edwins[i]->SetReadOnly(ETrue); |
|
81 } |
|
82 |
|
83 RPointerArray<CEikLabel> labels; |
|
84 labels.Append(static_cast<CEikLabel*>(Control(ELabel0))); // 0 |
|
85 labels.Append(static_cast<CEikLabel*>(Control(ELabel1))); |
|
86 labels.Append(static_cast<CEikLabel*>(Control(ELabel2))); |
|
87 labels.Append(static_cast<CEikLabel*>(Control(ELabel3))); |
|
88 labels.Append(static_cast<CEikLabel*>(Control(ELabel4))); |
|
89 labels.Append(static_cast<CEikLabel*>(Control(ELabel5))); |
|
90 labels.Append(static_cast<CEikLabel*>(Control(ELabel6))); |
|
91 labels.Append(static_cast<CEikLabel*>(Control(ELabel7))); |
|
92 labels.Append(static_cast<CEikLabel*>(Control(ELabel8))); |
|
93 labels.Append(static_cast<CEikLabel*>(Control(ELabel9))); |
|
94 labels.Append(static_cast<CEikLabel*>(Control(ELabel10))); |
|
95 labels.Append(static_cast<CEikLabel*>(Control(ELabel11))); |
|
96 labels.Append(static_cast<CEikLabel*>(Control(ELabel12))); |
|
97 labels.Append(static_cast<CEikLabel*>(Control(ELabel13))); |
|
98 labels.Append(static_cast<CEikLabel*>(Control(ELabel14))); |
|
99 labels.Append(static_cast<CEikLabel*>(Control(ELabel15))); |
|
100 labels.Append(static_cast<CEikLabel*>(Control(ELabel16))); |
|
101 labels.Append(static_cast<CEikLabel*>(Control(ELabel17))); |
|
102 labels.Append(static_cast<CEikLabel*>(Control(ELabel18))); |
|
103 |
|
104 // Read config parameters from CDS |
|
105 TInt noConfigParams = 0; |
|
106 iConfs.ResetAndDestroy(); |
|
107 |
|
108 TRAPD(err, noConfigParams = iCoreDumpSession.GetNumberConfigParametersL()); |
|
109 if(err != KErrNone) |
|
110 { |
|
111 TBuf<23> error; |
|
112 error.Format(_L("Error: %d"), err); |
|
113 CEikonEnv::InfoWinL(_L("Could not get number of config params!"), error); |
|
114 User::Leave(err); |
|
115 } |
|
116 TInt control = 0; |
|
117 |
|
118 for (TInt i = 0; i < noConfigParams; i++) |
|
119 { |
|
120 COptionConfig* conf; |
|
121 conf = iCoreDumpSession.GetConfigParameterL(i); |
|
122 if (conf->Source()== COptionConfig::ESCMConfig && control < edwins.Count()) |
|
123 { |
|
124 iConfs.Append(conf); |
|
125 |
|
126 TBuf<255> buf = conf->Prompt(); |
|
127 switch (conf->Type()) |
|
128 { |
|
129 // SCM configuration options are all TInt (TInt priority) |
|
130 case COptionConfig::ETInt: |
|
131 { |
|
132 buf.Append(_L("\n(priority (0-255) ")); |
|
133 TBuf<100> value; |
|
134 value.Format(_L("%d"), iConfs[control]->Value()); |
|
135 edwins[control]->SetTextL(&value); |
|
136 // save the edwin in the tag field of option config |
|
137 // this will make unloading the data easier |
|
138 conf->SetTag(edwins[control]); |
|
139 } |
|
140 break; |
|
141 default: |
|
142 break; |
|
143 } |
|
144 labels[control]->SetTextL(buf); |
|
145 edwins[control]->SetDimmed(EFalse); |
|
146 edwins[control++]->SetReadOnly(EFalse); |
|
147 } |
|
148 else |
|
149 { |
|
150 delete conf; |
|
151 } |
|
152 } |
|
153 edwins.Close(); |
|
154 labels.Close(); |
|
155 } |
|
156 |
|
157 |
|
158 TBool CConfigureSCMDialog::OkToExitL(TInt aButtonId) |
|
159 { |
|
160 |
|
161 TBool ret = ETrue; |
|
162 TInt err = KErrNone; |
|
163 |
|
164 |
|
165 // for the scm dialog - each edwin contains an integer value priority |
|
166 for (TInt i = 0; i <iConfs.Count(); i++) |
|
167 { |
|
168 COptionConfig* conf = iConfs[i]; |
|
169 if(!conf) |
|
170 { |
|
171 continue; |
|
172 } |
|
173 |
|
174 |
|
175 // retrieve the edwin pointer (saved in iTag member) |
|
176 CEikEdwin* edwin = (CEikEdwin*) conf->Tag(); |
|
177 if(edwin) |
|
178 { |
|
179 HBufC* hBuf = edwin->GetTextInHBufL(); |
|
180 CleanupStack::PushL(hBuf); |
|
181 //hBuf->Des() |
|
182 TLex lex(*hBuf); |
|
183 TInt32 priority; |
|
184 err = lex.Val(priority); |
|
185 |
|
186 if(err != KErrNone) |
|
187 { |
|
188 LOG_MSG(" error from lex.Val(conf) -> CConfigureSCMDialog::CEikonEnv::Static()->InfoMsg;" ); |
|
189 CEikonEnv::Static()->InfoMsg(_L("Value must be an integer")); |
|
190 } |
|
191 else if(priority != conf->Value()) |
|
192 { |
|
193 iConfs[i]->Value(priority); |
|
194 |
|
195 LOG_MSG4("CConfigureSCMDialog::OkToExitL modifying item uid=%d instance=%d value=%d", |
|
196 conf->Uid(), conf->Instance(), conf->Value()); |
|
197 |
|
198 |
|
199 |
|
200 TRAP( err, iCoreDumpSession.SetConfigParameterL( *iConfs[i]) ); |
|
201 if( err != KErrNone) |
|
202 { |
|
203 CEikonEnv::Static()->InfoMsg(_L("Error changing config param ")); |
|
204 } |
|
205 |
|
206 } |
|
207 |
|
208 CleanupStack::PopAndDestroy(hBuf); |
|
209 } |
|
210 |
|
211 } |
|
212 |
|
213 return ret; |
|
214 } |