| 1 | /*******************************************************************\r |
| 2 | *\r |
| 3 | * File: Dialogs.cpp\r |
| 4 | *\r |
| 5 | * Author: Peter van Sebille (peter@yipton.net)\r |
| 6 | *\r |
| 7 | * Modified/adapted for picodriveN by notaz, 2006\r |
| 8 | *\r |
| 9 | * (c) Copyright 2006, notaz\r |
| 10 | * (c) Copyright 2002, Peter van Sebille\r |
| 11 | * All Rights Reserved\r |
| 12 | *\r |
| 13 | *******************************************************************/\r |
| 14 | \r |
| 15 | #include "Dialogs.h"\r |
| 16 | #include "Engine.h"\r |
| 17 | #include "picodriven.hrh"\r |
| 18 | #include "picodriven.rsg"\r |
| 19 | \r |
| 20 | #include "../version.h"\r |
| 21 | #include "CSimpleTextParser.h"\r |
| 22 | #include <txtrich.h> // CRichText\r |
| 23 | #include <eikrted.h> // CEikRichTextEditor\r |
| 24 | #include <qikvertoptionbuttonlist.h> // CEikHorOptionButtonList\r |
| 25 | #include <eikopbut.h> // CEikOptionButton\r |
| 26 | #include <QuartzKeys.h> // EQuartzKeyTwoWayDown\r |
| 27 | \r |
| 28 | \r |
| 29 | /************************************************\r |
| 30 | *\r |
| 31 | * config Dialog\r |
| 32 | *\r |
| 33 | ************************************************/\r |
| 34 | \r |
| 35 | CPicoConfigDialog::CPicoConfigDialog(TPicoConfig &cfg, TPLauncherConfig &cfgl) : config(cfg), config_l(cfgl)\r |
| 36 | {\r |
| 37 | }\r |
| 38 | \r |
| 39 | void CPicoConfigDialog::PostLayoutDynInitL()\r |
| 40 | {\r |
| 41 | CEikHorOptionButtonList *buttons_rot = (CEikHorOptionButtonList*) Control( ECtlOptRotation );\r |
| 42 | CEikHorOptionButtonList *buttons_disp = (CEikHorOptionButtonList*) Control( ECtlOptScreenMode );\r |
| 43 | CEikCheckBox *chkbox_altrend= (CEikCheckBox*) Control( ECtlOptUseAltRend );\r |
| 44 | CEikCheckBox *chkbox_acctmng= (CEikCheckBox*) Control( ECtlOptUseAccTiming );\r |
| 45 | CEikCheckBox *chkbox_sram = (CEikCheckBox*) Control( ECtlOptUseSRAM );\r |
| 46 | CEikCheckBox *chkbox_fps = (CEikCheckBox*) Control( ECtlOptShowFPS );\r |
| 47 | CEikCheckBox *chkbox_sound = (CEikCheckBox*) Control( ECtlOptEnableSound );\r |
| 48 | CEikCheckBox *chkbox_z80 = (CEikCheckBox*) Control( ECtlOptEmulateZ80 );\r |
| 49 | CEikCheckBox *chkbox_ym2612 = (CEikCheckBox*) Control( ECtlOptEmulateYM2612 );\r |
| 50 | CEikCheckBox *chkbox_sn76496= (CEikCheckBox*) Control( ECtlOptEmulateSN76496 );\r |
| 51 | CEikChoiceListBase *combo_sndq = (CEikChoiceListBase*) Control( ECtlOptSndQuality );\r |
| 52 | CEikCheckBox *chkbox_6bpad = (CEikCheckBox*) Control( ECtlOpt6ButtonPad );\r |
| 53 | CEikCheckBox *chkbox_gzipst = (CEikCheckBox*) Control( ECtlOptGzipStates );\r |
| 54 | CEikCheckBox *chkbox_motvol = (CEikCheckBox*) Control( ECtlOptMotDontUseVol );\r |
| 55 | CEikCheckBox *chkbox_accsprt= (CEikCheckBox*) Control( ECtlOptUseAccSprites );\r |
| 56 | CEikChoiceListBase *combo_region = (CEikChoiceListBase*) Control( ECtlOptRegion );\r |
| 57 | CEikOptionButton *opt_fit2 = (CEikOptionButton*) buttons_disp->ComponentControl( TPicoConfig::PMFit2 );\r |
| 58 | \r |
| 59 | buttons_rot ->SetButtonById(ECtlOptRotation0 + config.iScreenRotation);\r |
| 60 | buttons_disp->SetButtonById(ECtlOptScreenModeCenter + config.iScreenMode);\r |
| 61 | chkbox_sram ->SetState(config.iFlags & 1 ? CEikButtonBase::ESet : CEikButtonBase::EClear);\r |
| 62 | chkbox_fps ->SetState(config.iFlags & 2 ? CEikButtonBase::ESet : CEikButtonBase::EClear);\r |
| 63 | chkbox_sound ->SetState(config.iFlags & 4 ? CEikButtonBase::ESet : CEikButtonBase::EClear);\r |
| 64 | chkbox_motvol ->SetState(config.iFlags & 0x40 ? CEikButtonBase::ESet : CEikButtonBase::EClear);\r |
| 65 | chkbox_gzipst ->SetState(config.iFlags & 0x80 ? CEikButtonBase::ESet : CEikButtonBase::EClear);\r |
| 66 | chkbox_z80 ->SetState(config.iPicoOpt & 4 ? CEikButtonBase::ESet : CEikButtonBase::EClear);\r |
| 67 | chkbox_ym2612 ->SetState(config.iPicoOpt & 1 ? CEikButtonBase::ESet : CEikButtonBase::EClear);\r |
| 68 | chkbox_sn76496->SetState(config.iPicoOpt & 2 ? CEikButtonBase::ESet : CEikButtonBase::EClear);\r |
| 69 | chkbox_altrend->SetState(config.iPicoOpt & 0x10? CEikButtonBase::ESet : CEikButtonBase::EClear);\r |
| 70 | chkbox_6bpad ->SetState(config.iPicoOpt & 0x20? CEikButtonBase::ESet : CEikButtonBase::EClear);\r |
| 71 | chkbox_acctmng->SetState(config.iPicoOpt & 0x40? CEikButtonBase::ESet : CEikButtonBase::EClear);\r |
| 72 | chkbox_accsprt->SetState(config.iPicoOpt & 0x80? CEikButtonBase::ESet : CEikButtonBase::EClear);\r |
| 73 | \r |
| 74 | // hide "fit2" if we are not in 0 or 180 mode\r |
| 75 | if(config.iScreenRotation != TPicoConfig::PRot0 && config.iScreenRotation != TPicoConfig::PRot180) opt_fit2->MakeVisible(EFalse);\r |
| 76 | // dim some stuff for alternative renderer\r |
| 77 | if(config.iPicoOpt & 0x10) {\r |
| 78 | buttons_disp->SetDimmed(ETrue);\r |
| 79 | ((CEikOptionButton*)(buttons_rot->ComponentControl(TPicoConfig::PRot0)))->SetDimmed(ETrue);\r |
| 80 | ((CEikOptionButton*)(buttons_rot->ComponentControl(TPicoConfig::PRot180)))->SetDimmed(ETrue);\r |
| 81 | }\r |
| 82 | // dim accurate sprites\r |
| 83 | if(config.iPicoOpt & 0x10) {\r |
| 84 | chkbox_accsprt->SetState(CEikButtonBase::EClear);\r |
| 85 | chkbox_accsprt->SetDimmed(ETrue);\r |
| 86 | }\r |
| 87 | \r |
| 88 | TInt sel = (config.iPicoOpt&8) ? 4 : 0;\r |
| 89 | sel+= (config.iFlags>>3)&3;\r |
| 90 | combo_sndq->SetCurrentItem(sel);\r |
| 91 | switch(config.PicoRegion) {\r |
| 92 | case 1: sel = 4; break;\r |
| 93 | case 2: sel = 3; break;\r |
| 94 | case 4: sel = 2; break;\r |
| 95 | case 8: sel = 1; break;\r |
| 96 | default:sel = 0; // auto\r |
| 97 | }\r |
| 98 | combo_region->SetCurrentItem(sel);\r |
| 99 | }\r |
| 100 | \r |
| 101 | TBool CPicoConfigDialog::OkToExitL(TInt aButtonId)\r |
| 102 | {\r |
| 103 | if(aButtonId != EEikBidOk) return ETrue;\r |
| 104 | \r |
| 105 | CEikHorOptionButtonList *buttons_rot = (CEikHorOptionButtonList*) Control( ECtlOptRotation );\r |
| 106 | CEikHorOptionButtonList *buttons_disp = (CEikHorOptionButtonList*) Control( ECtlOptScreenMode );\r |
| 107 | CEikCheckBox *chkbox_altrend= (CEikCheckBox*) Control( ECtlOptUseAltRend );\r |
| 108 | CEikCheckBox *chkbox_acctmng= (CEikCheckBox*) Control( ECtlOptUseAccTiming );\r |
| 109 | CEikCheckBox *chkbox_sram = (CEikCheckBox*) Control( ECtlOptUseSRAM );\r |
| 110 | CEikCheckBox *chkbox_fps = (CEikCheckBox*) Control( ECtlOptShowFPS );\r |
| 111 | CEikCheckBox *chkbox_sound = (CEikCheckBox*) Control( ECtlOptEnableSound );\r |
| 112 | CEikCheckBox *chkbox_z80 = (CEikCheckBox*) Control( ECtlOptEmulateZ80 );\r |
| 113 | CEikCheckBox *chkbox_ym2612 = (CEikCheckBox*) Control( ECtlOptEmulateYM2612 );\r |
| 114 | CEikCheckBox *chkbox_sn76496= (CEikCheckBox*) Control( ECtlOptEmulateSN76496 );\r |
| 115 | CEikChoiceListBase *combo_sndq = (CEikChoiceListBase*) Control( ECtlOptSndQuality );\r |
| 116 | CEikCheckBox *chkbox_6bpad = (CEikCheckBox*) Control( ECtlOpt6ButtonPad );\r |
| 117 | CEikCheckBox *chkbox_gzipst = (CEikCheckBox*) Control( ECtlOptGzipStates );\r |
| 118 | CEikCheckBox *chkbox_motvol = (CEikCheckBox*) Control( ECtlOptMotDontUseVol );\r |
| 119 | CEikCheckBox *chkbox_accsprt= (CEikCheckBox*) Control( ECtlOptUseAccSprites );\r |
| 120 | CEikChoiceListBase *combo_region = (CEikChoiceListBase*) Control( ECtlOptRegion );\r |
| 121 | \r |
| 122 | config.iScreenRotation = (TPicoConfig::TPicoScreenRotation) (buttons_rot->LabeledButtonId() - ECtlOptRotation0);\r |
| 123 | config.iScreenMode = (TPicoConfig::TPicoScreenMode) (buttons_disp->LabeledButtonId() - ECtlOptScreenModeCenter);\r |
| 124 | \r |
| 125 | if(chkbox_sram ->State() == CEikButtonBase::ESet) config.iFlags |= 1; else config.iFlags &= ~1;\r |
| 126 | if(chkbox_fps ->State() == CEikButtonBase::ESet) config.iFlags |= 2; else config.iFlags &= ~2;\r |
| 127 | if(chkbox_sound ->State() == CEikButtonBase::ESet) config.iFlags |= 4; else config.iFlags &= ~4;\r |
| 128 | if(chkbox_motvol ->State() == CEikButtonBase::ESet) config.iFlags |= 0x40; else config.iFlags &= ~0x40;\r |
| 129 | if(chkbox_gzipst ->State() == CEikButtonBase::ESet) config.iFlags |= 0x80; else config.iFlags &= ~0x80;\r |
| 130 | if(chkbox_z80 ->State() == CEikButtonBase::ESet) config.iPicoOpt |= 4; else config.iPicoOpt &= ~4;\r |
| 131 | if(chkbox_ym2612 ->State() == CEikButtonBase::ESet) config.iPicoOpt |= 1; else config.iPicoOpt &= ~1;\r |
| 132 | if(chkbox_sn76496->State() == CEikButtonBase::ESet) config.iPicoOpt |= 2; else config.iPicoOpt &= ~2;\r |
| 133 | if(chkbox_altrend->State() == CEikButtonBase::ESet) config.iPicoOpt |= 0x10;else config.iPicoOpt &= ~0x10;\r |
| 134 | if(chkbox_6bpad ->State() == CEikButtonBase::ESet) config.iPicoOpt |= 0x20;else config.iPicoOpt &= ~0x20;\r |
| 135 | if(chkbox_acctmng->State() == CEikButtonBase::ESet) config.iPicoOpt |= 0x40;else config.iPicoOpt &= ~0x40;\r |
| 136 | if(chkbox_accsprt->State() == CEikButtonBase::ESet) config.iPicoOpt |= 0x80;else config.iPicoOpt &= ~0x80;\r |
| 137 | \r |
| 138 | TInt sel = combo_sndq->CurrentItem();\r |
| 139 | if(sel > 3) { config.iPicoOpt |= 8; sel-=4; } else config.iPicoOpt &= ~8;\r |
| 140 | config.iFlags &= ~0x18;\r |
| 141 | config.iFlags |= (sel<<3)&0x18;\r |
| 142 | \r |
| 143 | switch(combo_region->CurrentItem()) {\r |
| 144 | case 4: config.PicoRegion = 1; break;\r |
| 145 | case 3: config.PicoRegion = 2; break;\r |
| 146 | case 2: config.PicoRegion = 4; break;\r |
| 147 | case 1: config.PicoRegion = 8; break;\r |
| 148 | default:config.PicoRegion = 0; // auto\r |
| 149 | }\r |
| 150 | \r |
| 151 | return ETrue;\r |
| 152 | }\r |
| 153 | \r |
| 154 | // simple GUI stuff needs lots of code\r |
| 155 | void CPicoConfigDialog::HandleControlStateChangeL(TInt aControlId)\r |
| 156 | {\r |
| 157 | if(aControlId == ECtlOptEnableSound) {\r |
| 158 | CEikCheckBox *chkbox_sound = (CEikCheckBox*) Control( ECtlOptEnableSound );\r |
| 159 | CEikCheckBox *chkbox_z80 = (CEikCheckBox*) Control( ECtlOptEmulateZ80 );\r |
| 160 | CEikCheckBox *chkbox_ym2612 = (CEikCheckBox*) Control( ECtlOptEmulateYM2612 );\r |
| 161 | CEikCheckBox *chkbox_sn76496= (CEikCheckBox*) Control( ECtlOptEmulateSN76496 );\r |
| 162 | \r |
| 163 | if(chkbox_sound->State() == CEikButtonBase::ESet) {\r |
| 164 | // check all sound chips too, but only if they all are not set\r |
| 165 | if((chkbox_z80->State() | chkbox_ym2612->State() | chkbox_sn76496->State()) == CEikButtonBase::EClear) { // (==0)\r |
| 166 | chkbox_z80 ->SetState(CEikButtonBase::ESet);\r |
| 167 | chkbox_ym2612 ->SetState(CEikButtonBase::ESet);\r |
| 168 | chkbox_sn76496->SetState(CEikButtonBase::ESet);\r |
| 169 | chkbox_z80 ->DrawDeferred();\r |
| 170 | chkbox_ym2612 ->DrawDeferred();\r |
| 171 | chkbox_sn76496->DrawDeferred();\r |
| 172 | }\r |
| 173 | } else {\r |
| 174 | // clear everything, but only if everything is set\r |
| 175 | if((chkbox_z80->State() & chkbox_ym2612->State() & chkbox_sn76496->State()) == CEikButtonBase::ESet) { // (==1)\r |
| 176 | chkbox_z80 ->SetState(CEikButtonBase::EClear);\r |
| 177 | chkbox_ym2612 ->SetState(CEikButtonBase::EClear);\r |
| 178 | chkbox_sn76496->SetState(CEikButtonBase::EClear);\r |
| 179 | chkbox_z80 ->DrawDeferred();\r |
| 180 | chkbox_ym2612 ->DrawDeferred();\r |
| 181 | chkbox_sn76496->DrawDeferred();\r |
| 182 | }\r |
| 183 | }\r |
| 184 | } else if(aControlId == ECtlOptUseAltRend) {\r |
| 185 | CEikCheckBox *chkbox_altrend= (CEikCheckBox*) Control( ECtlOptUseAltRend );\r |
| 186 | CEikCheckBox *chkbox_accsprt= (CEikCheckBox*) Control( ECtlOptUseAccSprites );\r |
| 187 | CEikHorOptionButtonList *buttons_rot = (CEikHorOptionButtonList*) Control( ECtlOptRotation );\r |
| 188 | CEikHorOptionButtonList *buttons_disp = (CEikHorOptionButtonList*) Control( ECtlOptScreenMode );\r |
| 189 | \r |
| 190 | TBool dimmed = chkbox_altrend->State() == CEikButtonBase::ESet;\r |
| 191 | // show/hide more stuff for alternative renderer\r |
| 192 | buttons_disp->SetDimmed(dimmed);\r |
| 193 | chkbox_accsprt->SetDimmed(dimmed);\r |
| 194 | ((CEikOptionButton*)(buttons_rot->ComponentControl(TPicoConfig::PRot0)))->SetDimmed(dimmed);\r |
| 195 | ((CEikOptionButton*)(buttons_rot->ComponentControl(TPicoConfig::PRot180)))->SetDimmed(dimmed);\r |
| 196 | if(dimmed && buttons_rot->LabeledButtonId() != ECtlOptRotation90 && buttons_rot->LabeledButtonId() != ECtlOptRotation270) {\r |
| 197 | buttons_rot->SetButtonById(ECtlOptRotation90);\r |
| 198 | aControlId = ECtlOptRotation; // cause rotation update\r |
| 199 | }\r |
| 200 | buttons_disp->SetButtonById(ECtlOptScreenModeCenter);\r |
| 201 | chkbox_accsprt->DrawDeferred();\r |
| 202 | buttons_disp->DrawDeferred();\r |
| 203 | buttons_rot->DrawDeferred();\r |
| 204 | }\r |
| 205 | if(aControlId == ECtlOptRotation) {\r |
| 206 | CEikHorOptionButtonList *buttons_rot = (CEikHorOptionButtonList*) Control( ECtlOptRotation );\r |
| 207 | CEikHorOptionButtonList *buttons_disp = (CEikHorOptionButtonList*) Control( ECtlOptScreenMode );\r |
| 208 | CEikOptionButton *opt_fit2 = (CEikOptionButton*) buttons_disp->ComponentControl( TPicoConfig::PMFit2 );\r |
| 209 | \r |
| 210 | if(buttons_rot->LabeledButtonId() == ECtlOptRotation0 || buttons_rot->LabeledButtonId() == ECtlOptRotation180) {\r |
| 211 | opt_fit2->MakeVisible(ETrue);\r |
| 212 | opt_fit2->DrawDeferred();\r |
| 213 | } else {\r |
| 214 | if(opt_fit2->State() == CEikButtonBase::ESet) {\r |
| 215 | buttons_disp->SetButtonById(ECtlOptScreenModeFit);\r |
| 216 | buttons_disp->DrawDeferred();\r |
| 217 | }\r |
| 218 | opt_fit2->MakeVisible(EFalse);\r |
| 219 | }\r |
| 220 | }\r |
| 221 | }\r |
| 222 | \r |
| 223 | \r |
| 224 | /*************************************************************\r |
| 225 | *\r |
| 226 | * Credits dialog\r |
| 227 | *\r |
| 228 | **************************************************************/\r |
| 229 | \r |
| 230 | void CCreditsDialog::PreLayoutDynInitL()\r |
| 231 | {\r |
| 232 | CDesCArrayFlat* desArray = CEikonEnv::Static()->ReadDesCArrayResourceL(iMessageResourceID);\r |
| 233 | CleanupStack::PushL(desArray);\r |
| 234 | \r |
| 235 | TInt iLength;\r |
| 236 | TInt count = desArray->Count();\r |
| 237 | for (TInt i=0 ;i < count; i++)\r |
| 238 | {\r |
| 239 | iLength = static_cast<CEikGlobalTextEditor*>(Control(ECtlCredits))->TextLength();\r |
| 240 | static_cast<CEikGlobalTextEditor*>(Control(ECtlCredits))->Text()->InsertL(iLength, desArray->operator[](i));\r |
| 241 | iLength = static_cast<CEikGlobalTextEditor*>(Control(ECtlCredits))->TextLength();\r |
| 242 | static_cast<CEikGlobalTextEditor*>(Control(ECtlCredits))->Text()->InsertL(iLength, CEditableText::ELineBreak);\r |
| 243 | }\r |
| 244 | CleanupStack::PopAndDestroy(desArray);\r |
| 245 | }\r |
| 246 | \r |
| 247 | void CCreditsDialog::PostLayoutDynInitL()\r |
| 248 | {\r |
| 249 | static_cast<CEikGlobalTextEditor*>(Control(ECtlCredits))->CreateScrollBarFrameL();\r |
| 250 | static_cast<CEikGlobalTextEditor*>(Control(ECtlCredits))->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EAuto, CEikScrollBarFrame::EAuto);\r |
| 251 | }\r |
| 252 | \r |
| 253 | TKeyResponse CCreditsDialog::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)\r |
| 254 | {\r |
| 255 | if (aType == EEventKey)\r |
| 256 | {\r |
| 257 | if (aKeyEvent.iCode == EQuartzKeyTwoWayDown)\r |
| 258 | {\r |
| 259 | static_cast<CEikGlobalTextEditor*>(Control(ECtlCredits))->MoveDisplayL(TCursorPosition::EFLineDown);\r |
| 260 | static_cast<CEikGlobalTextEditor*>(Control(ECtlCredits))->UpdateScrollBarsL();\r |
| 261 | return EKeyWasConsumed;\r |
| 262 | }\r |
| 263 | else if (aKeyEvent.iCode == EQuartzKeyTwoWayUp)\r |
| 264 | {\r |
| 265 | static_cast<CEikGlobalTextEditor*>(Control(ECtlCredits))->MoveDisplayL(TCursorPosition::EFLineUp);\r |
| 266 | static_cast<CEikGlobalTextEditor*>(Control(ECtlCredits))->UpdateScrollBarsL();\r |
| 267 | return EKeyWasConsumed;\r |
| 268 | }\r |
| 269 | }\r |
| 270 | return CEikDialog::OfferKeyEventL(aKeyEvent, aType);\r |
| 271 | }\r |
| 272 | \r |
| 273 | \r |
| 274 | /*************************************************************\r |
| 275 | *\r |
| 276 | * Debug dialog\r |
| 277 | *\r |
| 278 | **************************************************************/\r |
| 279 | \r |
| 280 | CDebugDialog::CDebugDialog(char *t)\r |
| 281 | {\r |
| 282 | Mem::Copy(iText, t, 1024);\r |
| 283 | iText[1023] = 0;\r |
| 284 | }\r |
| 285 | \r |
| 286 | void CDebugDialog::PreLayoutDynInitL()\r |
| 287 | {\r |
| 288 | char *p = iText, *line = iText;\r |
| 289 | TBool end=0;\r |
| 290 | TBuf<128> tbuf;\r |
| 291 | CEikGlobalTextEditor *editor = static_cast<CEikGlobalTextEditor*>(Control(ECtlDebugEdit));\r |
| 292 | \r |
| 293 | while(!end) {\r |
| 294 | while(*p && *p != '\r' && *p != '\n') p++;\r |
| 295 | if(!*p) end=1;\r |
| 296 | *p = 0;\r |
| 297 | TPtrC8 ptr((TUint8*) line);\r |
| 298 | tbuf.Copy(ptr);\r |
| 299 | editor->Text()->InsertL(editor->TextLength(), tbuf);\r |
| 300 | editor->Text()->InsertL(editor->TextLength(), CEditableText::ELineBreak);\r |
| 301 | line = ++p;\r |
| 302 | }\r |
| 303 | }\r |
| 304 | \r |
| 305 | void CDebugDialog::PostLayoutDynInitL()\r |
| 306 | {\r |
| 307 | static_cast<CEikGlobalTextEditor*>(Control(ECtlDebugEdit))->CreateScrollBarFrameL();\r |
| 308 | static_cast<CEikGlobalTextEditor*>(Control(ECtlDebugEdit))->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EAuto, CEikScrollBarFrame::EAuto);\r |
| 309 | }\r |
| 310 | \r |
| 311 | TKeyResponse CDebugDialog::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)\r |
| 312 | {\r |
| 313 | if (aType == EEventKey)\r |
| 314 | {\r |
| 315 | if (aKeyEvent.iCode == EQuartzKeyTwoWayDown)\r |
| 316 | {\r |
| 317 | static_cast<CEikGlobalTextEditor*>(Control(ECtlDebugEdit))->MoveDisplayL(TCursorPosition::EFLineDown);\r |
| 318 | static_cast<CEikGlobalTextEditor*>(Control(ECtlDebugEdit))->UpdateScrollBarsL();\r |
| 319 | return EKeyWasConsumed;\r |
| 320 | }\r |
| 321 | else if (aKeyEvent.iCode == EQuartzKeyTwoWayUp)\r |
| 322 | {\r |
| 323 | static_cast<CEikGlobalTextEditor*>(Control(ECtlDebugEdit))->MoveDisplayL(TCursorPosition::EFLineUp);\r |
| 324 | static_cast<CEikGlobalTextEditor*>(Control(ECtlDebugEdit))->UpdateScrollBarsL();\r |
| 325 | return EKeyWasConsumed;\r |
| 326 | }\r |
| 327 | }\r |
| 328 | return CEikDialog::OfferKeyEventL(aKeyEvent, aType);\r |
| 329 | }\r |
| 330 | \r |
| 331 | \r |
| 332 | /************************************************\r |
| 333 | *\r |
| 334 | * SimpleTextInfoDialog\r |
| 335 | *\r |
| 336 | ************************************************/\r |
| 337 | \r |
| 338 | \r |
| 339 | CSimpleTextInfoDialog::CSimpleTextInfoDialog(TInt aTextIdOne, TInt aRichTextCtlIdOne, TInt aTextIdTwo, TInt aRichTextCtlIdTwo, TBool aSimpleTextResIdOneIsArray, TBool aSimpleTextResIdTwoIsArray)\r |
| 340 | : iSimpleTextResIdOne(aTextIdOne),\r |
| 341 | iSimpleTextResIdTwo(aTextIdTwo),\r |
| 342 | iRichTextCtlIdOne(aRichTextCtlIdOne),\r |
| 343 | iRichTextCtlIdTwo(aRichTextCtlIdTwo),\r |
| 344 | iSimpleTextResIdOneIsArray(aSimpleTextResIdOneIsArray),\r |
| 345 | iSimpleTextResIdTwoIsArray(aSimpleTextResIdTwoIsArray),\r |
| 346 | iSetDialogBackground(ETrue)\r |
| 347 | {\r |
| 348 | }\r |
| 349 | \r |
| 350 | void CSimpleTextInfoDialog::PreLayoutDynInitL()\r |
| 351 | {\r |
| 352 | CEikRichTextEditor* richTextEditor;\r |
| 353 | \r |
| 354 | if (iRichTextCtlIdOne != -1)\r |
| 355 | {\r |
| 356 | richTextEditor=STATIC_CAST(CEikRichTextEditor*, Control(iRichTextCtlIdOne));\r |
| 357 | PreLayoutDynInitRichTextL(*richTextEditor, iRichTextCtlIdOne, iSimpleTextResIdOne);\r |
| 358 | }\r |
| 359 | \r |
| 360 | if (iRichTextCtlIdTwo != -1)\r |
| 361 | {\r |
| 362 | richTextEditor=STATIC_CAST(CEikRichTextEditor*, Control(iRichTextCtlIdTwo));\r |
| 363 | richTextEditor->Border().SetType(ENone);\r |
| 364 | PreLayoutDynInitRichTextL(*richTextEditor, iRichTextCtlIdTwo, iSimpleTextResIdTwo);\r |
| 365 | }\r |
| 366 | }\r |
| 367 | \r |
| 368 | \r |
| 369 | void CSimpleTextInfoDialog::PreLayoutDynInitRichTextL(CEikRichTextEditor& aRichTextEditor, TInt aRichTextCtlId, TInt aSimpleTextResId)\r |
| 370 | {\r |
| 371 | iEikonEnv->BusyMsgL(_L("Opening"));\r |
| 372 | aRichTextEditor.SetEdwinSizeObserver(this);\r |
| 373 | if (iSetDialogBackground)\r |
| 374 | aRichTextEditor.SetBackgroundColorL(iEikonEnv->Color(EColorDialogBackground));\r |
| 375 | aRichTextEditor.SetSize(aRichTextEditor.Size()); // Set the size of the edwin\r |
| 376 | \r |
| 377 | // no scrollbars for us\r |
| 378 | aRichTextEditor.CreateScrollBarFrameL(); // Create the scrollbars\r |
| 379 | aRichTextEditor.ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff, iWantVertScrollbar ? CEikScrollBarFrame::EAuto: CEikScrollBarFrame::EOff);\r |
| 380 | \r |
| 381 | ShowTextL(*aRichTextEditor.RichText(), aRichTextCtlId, aSimpleTextResId);\r |
| 382 | \r |
| 383 | aRichTextEditor.UpdateAllFieldsL(); // Updates all the fields in the document\r |
| 384 | \r |
| 385 | aRichTextEditor.UpdateScrollBarsL();\r |
| 386 | }\r |
| 387 | \r |
| 388 | \r |
| 389 | void CSimpleTextInfoDialog::PostLayoutDynInitL()\r |
| 390 | {\r |
| 391 | Layout();\r |
| 392 | iEikonEnv->BusyMsgCancel();\r |
| 393 | }\r |
| 394 | \r |
| 395 | TBool CSimpleTextInfoDialog::HandleEdwinSizeEventL(CEikEdwin* aEdwin, TEdwinSizeEvent aEventType, TSize aDesirableEdwinSize)\r |
| 396 | {\r |
| 397 | if ((aEventType == EEventSizeChanging))\r |
| 398 | aEdwin->SetSize(aDesirableEdwinSize);\r |
| 399 | return EFalse;\r |
| 400 | }\r |
| 401 | \r |
| 402 | void CSimpleTextInfoDialog::ShowTextL(CRichText& aRichText, TInt /*aRichTextCtlId*/, TInt aResId)\r |
| 403 | {\r |
| 404 | if (aResId != -1)\r |
| 405 | {\r |
| 406 | if ( ((aResId == iSimpleTextResIdOne) && (iSimpleTextResIdOneIsArray)) ||\r |
| 407 | ((aResId == iSimpleTextResIdTwo) && (iSimpleTextResIdTwoIsArray))\r |
| 408 | )\r |
| 409 | {\r |
| 410 | CDesCArrayFlat* desArray = CEikonEnv::Static()->ReadDesCArrayResourceL(aResId);\r |
| 411 | CleanupStack::PushL(desArray);\r |
| 412 | \r |
| 413 | CSimpleTextFormatParser* parser = CSimpleTextFormatParser::NewLC();\r |
| 414 | \r |
| 415 | TInt count = desArray->Count();\r |
| 416 | for (TInt i=0 ;i<count ; i++)\r |
| 417 | parser->ParseL(desArray->operator[](i), aRichText);\r |
| 418 | \r |
| 419 | CleanupStack::PopAndDestroy(parser);\r |
| 420 | CleanupStack::PopAndDestroy(desArray);\r |
| 421 | }\r |
| 422 | else\r |
| 423 | {\r |
| 424 | HBufC* text = CEikonEnv::Static()->AllocReadResourceLC(aResId);\r |
| 425 | ShowSimpleTextL(*text, aRichText);\r |
| 426 | CleanupStack::PopAndDestroy(text);\r |
| 427 | }\r |
| 428 | }\r |
| 429 | }\r |
| 430 | \r |
| 431 | void CSimpleTextInfoDialog::ShowSimpleTextL(const TDesC& aSimpleText, CRichText& aRichText)\r |
| 432 | {\r |
| 433 | CSimpleTextFormatParser* parser = CSimpleTextFormatParser::NewLC();\r |
| 434 | parser->ParseL(aSimpleText, aRichText);\r |
| 435 | \r |
| 436 | CleanupStack::PopAndDestroy(parser);\r |
| 437 | }\r |
| 438 | \r |
| 439 | \r |
| 440 | \r |
| 441 | /************************************************\r |
| 442 | *\r |
| 443 | * About Dialog\r |
| 444 | *\r |
| 445 | ************************************************/\r |
| 446 | \r |
| 447 | CAboutDialog::CAboutDialog() : CSimpleTextInfoDialog(-1, ECtlAboutVersion, R_SIMPLE_TEXT_ABOUT_LINKS, ECtlAboutLinks)\r |
| 448 | {\r |
| 449 | }\r |
| 450 | \r |
| 451 | void CAboutDialog::ShowTextL(CRichText& aRichText, TInt aRichTextCtlId, TInt aResId)\r |
| 452 | {\r |
| 453 | if (aRichTextCtlId == ECtlAboutLinks)\r |
| 454 | CSimpleTextInfoDialog::ShowTextL(aRichText, aRichTextCtlId, aResId);\r |
| 455 | else\r |
| 456 | {\r |
| 457 | TBuf<16> versionText;\r |
| 458 | TBuf<512> text;\r |
| 459 | \r |
| 460 | #if (KPicoBuildNumber != 0)\r |
| 461 | versionText.Format(_L("%d.%d%d"), KPicoMajorVersionNumber, KPicoMinorVersionNumber, KPicoBuildNumber);\r |
| 462 | #else\r |
| 463 | versionText.Format(_L("%d.%d"), KPicoMajorVersionNumber, KPicoMinorVersionNumber);\r |
| 464 | #endif\r |
| 465 | \r |
| 466 | HBufC* aboutFormat = CEikonEnv::Static()->AllocReadResourceLC(R_SIMPLE_TEXT_ABOUT);\r |
| 467 | text.Format(*aboutFormat, &versionText);\r |
| 468 | \r |
| 469 | ShowSimpleTextL(text, aRichText);\r |
| 470 | \r |
| 471 | CleanupStack::PopAndDestroy(aboutFormat);\r |
| 472 | }\r |
| 473 | }\r |