| 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 "picodrive.hrh"\r |
| 18 | #include "rsc/picodrive.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 <eikedwin.h> // CEikEdwin\r |
| 27 | #include <quartzkeys.h> // EQuartzKeyTwoWayDown\r |
| 28 | \r |
| 29 | #include <qikcommand.h>\r |
| 30 | #include "../common/emu.h"\r |
| 31 | \r |
| 32 | \r |
| 33 | /************************************************\r |
| 34 | *\r |
| 35 | * config Dialog\r |
| 36 | *\r |
| 37 | ************************************************/\r |
| 38 | \r |
| 39 | CPicoConfigDialog::CPicoConfigDialog(_currentConfig_t &cfg) : config(cfg)\r |
| 40 | {\r |
| 41 | }\r |
| 42 | \r |
| 43 | void CPicoConfigDialog::PostLayoutDynInitL()\r |
| 44 | {\r |
| 45 | CEikHorOptionButtonList *buttons_rot = (CEikHorOptionButtonList*) Control( ECtlOptRotation );\r |
| 46 | CEikHorOptionButtonList *buttons_disp = (CEikHorOptionButtonList*) Control( ECtlOptScreenMode );\r |
| 47 | CEikCheckBox *chkbox_altrend= (CEikCheckBox*) Control( ECtlOptUseAltRend );\r |
| 48 | // CEikCheckBox *chkbox_acctmng= (CEikCheckBox*) Control( ECtlOptUseAccTiming );\r |
| 49 | CEikCheckBox *chkbox_sram = (CEikCheckBox*) Control( ECtlOptUseSRAM );\r |
| 50 | CEikCheckBox *chkbox_fps = (CEikCheckBox*) Control( ECtlOptShowFPS );\r |
| 51 | CEikCheckBox *chkbox_sound = (CEikCheckBox*) Control( ECtlOptEnableSound );\r |
| 52 | CEikCheckBox *chkbox_z80 = (CEikCheckBox*) Control( ECtlOptEmulateZ80 );\r |
| 53 | CEikCheckBox *chkbox_ym2612 = (CEikCheckBox*) Control( ECtlOptEmulateYM2612 );\r |
| 54 | CEikCheckBox *chkbox_sn76496= (CEikCheckBox*) Control( ECtlOptEmulateSN76496 );\r |
| 55 | CEikChoiceListBase *combo_sndq = (CEikChoiceListBase*) Control( ECtlOptSndQuality );\r |
| 56 | CEikCheckBox *chkbox_6bpad = (CEikCheckBox*) Control( ECtlOpt6ButtonPad );\r |
| 57 | CEikCheckBox *chkbox_gzipst = (CEikCheckBox*) Control( ECtlOptGzipStates );\r |
| 58 | // CEikCheckBox *chkbox_accsprt= (CEikCheckBox*) Control( ECtlOptUseAccSprites );\r |
| 59 | CEikChoiceListBase *combo_region = (CEikChoiceListBase*) Control( ECtlOptRegion );\r |
| 60 | CEikOptionButton *opt_fit2 = (CEikOptionButton*) buttons_disp->ComponentControl( TPicoConfig::PMFit2 );\r |
| 61 | CEikCheckBox *chkbox_cdda = (CEikCheckBox*) Control( ECtlOptCDcdda );\r |
| 62 | CEikCheckBox *chkbox_pcm = (CEikCheckBox*) Control( ECtlOptCDpcm );\r |
| 63 | CEikCheckBox *chkbox_ramcart= (CEikCheckBox*) Control( ECtlOptCDramcart );\r |
| 64 | CEikCheckBox *chkbox_sclrot = (CEikCheckBox*) Control( ECtlOptCDscalerot );\r |
| 65 | CEikCheckBox *chkbox_bsync = (CEikCheckBox*) Control( ECtlOptCDbettersync );\r |
| 66 | \r |
| 67 | buttons_rot ->SetButtonById(ECtlOptRotation0 + config.rotation);\r |
| 68 | buttons_disp->SetButtonById(ECtlOptScreenModeCenter + config.scaling);\r |
| 69 | chkbox_sram ->SetState(config.EmuOpt & 1 ? CEikButtonBase::ESet : CEikButtonBase::EClear);\r |
| 70 | chkbox_fps ->SetState(config.EmuOpt & 2 ? CEikButtonBase::ESet : CEikButtonBase::EClear);\r |
| 71 | chkbox_sound ->SetState(config.EmuOpt & 4 ? CEikButtonBase::ESet : CEikButtonBase::EClear);\r |
| 72 | chkbox_gzipst ->SetState(config.EmuOpt & 8 ? CEikButtonBase::ESet : CEikButtonBase::EClear);\r |
| 73 | chkbox_z80 ->SetState(config.s_PicoOpt& 4 ? CEikButtonBase::ESet : CEikButtonBase::EClear);\r |
| 74 | chkbox_ym2612 ->SetState(config.s_PicoOpt& 1 ? CEikButtonBase::ESet : CEikButtonBase::EClear);\r |
| 75 | chkbox_sn76496->SetState(config.s_PicoOpt& 2 ? CEikButtonBase::ESet : CEikButtonBase::EClear);\r |
| 76 | chkbox_altrend->SetState(config.s_PicoOpt& 0x10? CEikButtonBase::ESet : CEikButtonBase::EClear);\r |
| 77 | chkbox_6bpad ->SetState(config.s_PicoOpt& 0x20? CEikButtonBase::ESet : CEikButtonBase::EClear);\r |
| 78 | // chkbox_acctmng->SetState(config.s_PicoOpt& 0x40? CEikButtonBase::ESet : CEikButtonBase::EClear);\r |
| 79 | // chkbox_accsprt->SetState(config.s_PicoOpt& 0x80? CEikButtonBase::ESet : CEikButtonBase::EClear);\r |
| 80 | chkbox_cdda ->SetState(config.s_PicoOpt&0x0800?CEikButtonBase::ESet : CEikButtonBase::EClear);\r |
| 81 | chkbox_pcm ->SetState(config.s_PicoOpt&0x0400?CEikButtonBase::ESet : CEikButtonBase::EClear);\r |
| 82 | chkbox_ramcart->SetState(config.s_PicoOpt&0x8000?CEikButtonBase::ESet : CEikButtonBase::EClear);\r |
| 83 | chkbox_sclrot ->SetState(config.s_PicoOpt&0x1000?CEikButtonBase::ESet : CEikButtonBase::EClear);\r |
| 84 | chkbox_bsync ->SetState(config.s_PicoOpt&0x2000?CEikButtonBase::ESet : CEikButtonBase::EClear);\r |
| 85 | \r |
| 86 | // dim "fit2" if we are not in 0 or 180 mode\r |
| 87 | if (config.rotation != TPicoConfig::PRot0 && config.rotation != TPicoConfig::PRot180)\r |
| 88 | opt_fit2->SetDimmed(ETrue);\r |
| 89 | // dim some stuff for alternative renderer\r |
| 90 | if (config.s_PicoOpt & 0x10) {\r |
| 91 | // dim accurate sprites\r |
| 92 | //chkbox_accsprt->SetState(CEikButtonBase::EClear);\r |
| 93 | //chkbox_accsprt->SetDimmed(ETrue);\r |
| 94 | // dim fit\r |
| 95 | if(buttons_rot->LabeledButtonId() == ECtlOptRotation0 || buttons_rot->LabeledButtonId() == ECtlOptRotation180)\r |
| 96 | ((CEikOptionButton*)(buttons_disp->ComponentControl(TPicoConfig::PMFit)))->SetDimmed(ETrue);\r |
| 97 | }\r |
| 98 | \r |
| 99 | TInt sel = 0;\r |
| 100 | switch (config.s_PsndRate) {\r |
| 101 | case 11025: sel = 1; break;\r |
| 102 | case 16000: sel = 2; break;\r |
| 103 | case 22050: sel = 3; break;\r |
| 104 | case 44100: sel = 4; break;\r |
| 105 | }\r |
| 106 | sel += (config.s_PicoOpt&8) ? 5 : 0;\r |
| 107 | if (sel >= 10) sel = 0;\r |
| 108 | combo_sndq->SetCurrentItem(sel);\r |
| 109 | \r |
| 110 | switch(config.s_PicoRegion) {\r |
| 111 | case 1: sel = 4; break;\r |
| 112 | case 2: sel = 3; break;\r |
| 113 | case 4: sel = 2; break;\r |
| 114 | case 8: sel = 1; break;\r |
| 115 | default:sel = 0; // auto\r |
| 116 | }\r |
| 117 | combo_region->SetCurrentItem(sel);\r |
| 118 | }\r |
| 119 | \r |
| 120 | TBool CPicoConfigDialog::OkToExitL(TInt aButtonId)\r |
| 121 | {\r |
| 122 | if(aButtonId != EEikBidOk) return ETrue;\r |
| 123 | \r |
| 124 | CEikHorOptionButtonList *buttons_rot = (CEikHorOptionButtonList*) Control( ECtlOptRotation );\r |
| 125 | CEikHorOptionButtonList *buttons_disp = (CEikHorOptionButtonList*) Control( ECtlOptScreenMode );\r |
| 126 | CEikCheckBox *chkbox_altrend= (CEikCheckBox*) Control( ECtlOptUseAltRend );\r |
| 127 | // CEikCheckBox *chkbox_acctmng= (CEikCheckBox*) Control( ECtlOptUseAccTiming );\r |
| 128 | CEikCheckBox *chkbox_sram = (CEikCheckBox*) Control( ECtlOptUseSRAM );\r |
| 129 | CEikCheckBox *chkbox_fps = (CEikCheckBox*) Control( ECtlOptShowFPS );\r |
| 130 | CEikCheckBox *chkbox_sound = (CEikCheckBox*) Control( ECtlOptEnableSound );\r |
| 131 | CEikCheckBox *chkbox_z80 = (CEikCheckBox*) Control( ECtlOptEmulateZ80 );\r |
| 132 | CEikCheckBox *chkbox_ym2612 = (CEikCheckBox*) Control( ECtlOptEmulateYM2612 );\r |
| 133 | CEikCheckBox *chkbox_sn76496= (CEikCheckBox*) Control( ECtlOptEmulateSN76496 );\r |
| 134 | CEikChoiceListBase *combo_sndq = (CEikChoiceListBase*) Control( ECtlOptSndQuality );\r |
| 135 | CEikCheckBox *chkbox_6bpad = (CEikCheckBox*) Control( ECtlOpt6ButtonPad );\r |
| 136 | CEikCheckBox *chkbox_gzipst = (CEikCheckBox*) Control( ECtlOptGzipStates );\r |
| 137 | // CEikCheckBox *chkbox_accsprt= (CEikCheckBox*) Control( ECtlOptUseAccSprites );\r |
| 138 | CEikChoiceListBase *combo_region = (CEikChoiceListBase*) Control( ECtlOptRegion );\r |
| 139 | CEikCheckBox *chkbox_cdda = (CEikCheckBox*) Control( ECtlOptCDcdda );\r |
| 140 | CEikCheckBox *chkbox_pcm = (CEikCheckBox*) Control( ECtlOptCDpcm );\r |
| 141 | CEikCheckBox *chkbox_ramcart= (CEikCheckBox*) Control( ECtlOptCDramcart );\r |
| 142 | CEikCheckBox *chkbox_sclrot = (CEikCheckBox*) Control( ECtlOptCDscalerot );\r |
| 143 | CEikCheckBox *chkbox_bsync = (CEikCheckBox*) Control( ECtlOptCDbettersync );\r |
| 144 | \r |
| 145 | config.rotation = (TPicoConfig::TPicoScreenRotation) (buttons_rot->LabeledButtonId() - ECtlOptRotation0);\r |
| 146 | config.scaling = (TPicoConfig::TPicoScreenMode) (buttons_disp->LabeledButtonId() - ECtlOptScreenModeCenter);\r |
| 147 | \r |
| 148 | if(chkbox_sram ->State() == CEikButtonBase::ESet) config.EmuOpt |= 1; else config.EmuOpt &= ~1;\r |
| 149 | if(chkbox_fps ->State() == CEikButtonBase::ESet) config.EmuOpt |= 2; else config.EmuOpt &= ~2;\r |
| 150 | if(chkbox_sound ->State() == CEikButtonBase::ESet) config.EmuOpt |= 4; else config.EmuOpt &= ~4;\r |
| 151 | if(chkbox_gzipst ->State() == CEikButtonBase::ESet) config.EmuOpt |= 8; else config.EmuOpt &= ~8;\r |
| 152 | if(chkbox_z80 ->State() == CEikButtonBase::ESet) config.s_PicoOpt|= 4; else config.s_PicoOpt&= ~4;\r |
| 153 | if(chkbox_ym2612 ->State() == CEikButtonBase::ESet) config.s_PicoOpt|= 1; else config.s_PicoOpt&= ~1;\r |
| 154 | if(chkbox_sn76496->State() == CEikButtonBase::ESet) config.s_PicoOpt|= 2; else config.s_PicoOpt&= ~2;\r |
| 155 | if(chkbox_altrend->State() == CEikButtonBase::ESet) config.s_PicoOpt|= 0x10;else config.s_PicoOpt&= ~0x10;\r |
| 156 | if(chkbox_6bpad ->State() == CEikButtonBase::ESet) config.s_PicoOpt|= 0x20;else config.s_PicoOpt&= ~0x20;\r |
| 157 | // if(chkbox_acctmng->State() == CEikButtonBase::ESet) config.s_PicoOpt|= 0x40;else config.s_PicoOpt&= ~0x40;\r |
| 158 | // if(chkbox_accsprt->State() == CEikButtonBase::ESet) config.s_PicoOpt|= 0x80;else config.s_PicoOpt&= ~0x80;\r |
| 159 | if(chkbox_cdda ->State() == CEikButtonBase::ESet) config.s_PicoOpt |= 0x0800; else config.s_PicoOpt&= ~0x0800;\r |
| 160 | if(chkbox_pcm ->State() == CEikButtonBase::ESet) config.s_PicoOpt |= 0x0400; else config.s_PicoOpt&= ~0x0400;\r |
| 161 | if(chkbox_ramcart->State() == CEikButtonBase::ESet) config.s_PicoOpt |= 0x8000; else config.s_PicoOpt&= ~0x8000;\r |
| 162 | if(chkbox_sclrot ->State() == CEikButtonBase::ESet) config.s_PicoOpt |= 0x1000; else config.s_PicoOpt&= ~0x1000;\r |
| 163 | if(chkbox_bsync ->State() == CEikButtonBase::ESet) config.s_PicoOpt |= 0x2000; else config.s_PicoOpt&= ~0x2000;\r |
| 164 | \r |
| 165 | TInt sel = combo_sndq->CurrentItem();\r |
| 166 | if(sel >= 5) { config.s_PicoOpt |= 8; sel-=5; } else config.s_PicoOpt &= ~8;\r |
| 167 | switch (sel) {\r |
| 168 | default:config.s_PsndRate = 8000; break;\r |
| 169 | case 1: config.s_PsndRate = 11025; break;\r |
| 170 | case 2: config.s_PsndRate = 16000; break;\r |
| 171 | case 3: config.s_PsndRate = 22050; break;\r |
| 172 | case 4: config.s_PsndRate = 44100; break;\r |
| 173 | }\r |
| 174 | \r |
| 175 | switch (combo_region->CurrentItem()) {\r |
| 176 | case 4: config.s_PicoRegion = 1; break;\r |
| 177 | case 3: config.s_PicoRegion = 2; break;\r |
| 178 | case 2: config.s_PicoRegion = 4; break;\r |
| 179 | case 1: config.s_PicoRegion = 8; break;\r |
| 180 | default:config.s_PicoRegion = 0; // auto\r |
| 181 | }\r |
| 182 | \r |
| 183 | return ETrue;\r |
| 184 | }\r |
| 185 | \r |
| 186 | // simple GUI stuff needs lots of code\r |
| 187 | void CPicoConfigDialog::HandleControlStateChangeL(TInt aControlId)\r |
| 188 | {\r |
| 189 | if (aControlId == ECtlOptEnableSound)\r |
| 190 | {\r |
| 191 | CEikCheckBox *chkbox_sound = (CEikCheckBox*) Control( ECtlOptEnableSound );\r |
| 192 | CEikCheckBox *chkbox_z80 = (CEikCheckBox*) Control( ECtlOptEmulateZ80 );\r |
| 193 | CEikCheckBox *chkbox_ym2612 = (CEikCheckBox*) Control( ECtlOptEmulateYM2612 );\r |
| 194 | CEikCheckBox *chkbox_sn76496= (CEikCheckBox*) Control( ECtlOptEmulateSN76496 );\r |
| 195 | \r |
| 196 | if(chkbox_sound->State() == CEikButtonBase::ESet) {\r |
| 197 | // check all sound chips too, but only if they all are not set\r |
| 198 | if((chkbox_z80->State() | chkbox_ym2612->State() | chkbox_sn76496->State()) == CEikButtonBase::EClear) { // (==0)\r |
| 199 | chkbox_z80 ->SetState(CEikButtonBase::ESet);\r |
| 200 | chkbox_ym2612 ->SetState(CEikButtonBase::ESet);\r |
| 201 | chkbox_sn76496->SetState(CEikButtonBase::ESet);\r |
| 202 | chkbox_z80 ->DrawDeferred();\r |
| 203 | chkbox_ym2612 ->DrawDeferred();\r |
| 204 | chkbox_sn76496->DrawDeferred();\r |
| 205 | }\r |
| 206 | } else {\r |
| 207 | // clear everything, but only if everything is set\r |
| 208 | if((chkbox_z80->State() & chkbox_ym2612->State() & chkbox_sn76496->State()) == CEikButtonBase::ESet) { // (==1)\r |
| 209 | chkbox_z80 ->SetState(CEikButtonBase::EClear);\r |
| 210 | chkbox_ym2612 ->SetState(CEikButtonBase::EClear);\r |
| 211 | chkbox_sn76496->SetState(CEikButtonBase::EClear);\r |
| 212 | chkbox_z80 ->DrawDeferred();\r |
| 213 | chkbox_ym2612 ->DrawDeferred();\r |
| 214 | chkbox_sn76496->DrawDeferred();\r |
| 215 | }\r |
| 216 | }\r |
| 217 | }\r |
| 218 | else if(aControlId == ECtlOptUseAltRend || aControlId == ECtlOptRotation)\r |
| 219 | {\r |
| 220 | CEikCheckBox *chkbox_altrend= (CEikCheckBox*) Control( ECtlOptUseAltRend );\r |
| 221 | // CEikCheckBox *chkbox_accsprt= (CEikCheckBox*) Control( ECtlOptUseAccSprites );\r |
| 222 | CEikHorOptionButtonList *buttons_rot = (CEikHorOptionButtonList*) Control( ECtlOptRotation );\r |
| 223 | CEikHorOptionButtonList *buttons_disp = (CEikHorOptionButtonList*) Control( ECtlOptScreenMode );\r |
| 224 | CEikOptionButton *opt_fit = (CEikOptionButton*) buttons_disp->ComponentControl( TPicoConfig::PMFit );\r |
| 225 | CEikOptionButton *opt_fit2 = (CEikOptionButton*) buttons_disp->ComponentControl( TPicoConfig::PMFit2 );\r |
| 226 | \r |
| 227 | TBool dimmed = chkbox_altrend->State() == CEikButtonBase::ESet;\r |
| 228 | // show/hide more stuff for alternative renderer\r |
| 229 | // chkbox_accsprt->SetDimmed(dimmed);\r |
| 230 | if(buttons_rot->LabeledButtonId() == ECtlOptRotation0 || buttons_rot->LabeledButtonId() == ECtlOptRotation180) {\r |
| 231 | opt_fit->SetDimmed(dimmed);\r |
| 232 | if(dimmed && buttons_disp->LabeledButtonId() == ECtlOptScreenModeFit)\r |
| 233 | buttons_disp->SetButtonById(ECtlOptScreenModeFit2);\r |
| 234 | }\r |
| 235 | else opt_fit->SetDimmed(EFalse);\r |
| 236 | // chkbox_accsprt->DrawDeferred();\r |
| 237 | buttons_disp->DrawDeferred();\r |
| 238 | \r |
| 239 | if(buttons_rot->LabeledButtonId() == ECtlOptRotation0 || buttons_rot->LabeledButtonId() == ECtlOptRotation180) {\r |
| 240 | opt_fit2->SetDimmed(EFalse);\r |
| 241 | } else {\r |
| 242 | if(opt_fit2->State() == CEikButtonBase::ESet) {\r |
| 243 | buttons_disp->SetButtonById(ECtlOptScreenModeFit);\r |
| 244 | buttons_disp->DrawDeferred();\r |
| 245 | }\r |
| 246 | opt_fit2->SetDimmed(ETrue);\r |
| 247 | }\r |
| 248 | opt_fit2->DrawDeferred();\r |
| 249 | }\r |
| 250 | }\r |
| 251 | \r |
| 252 | \r |
| 253 | /************************************************\r |
| 254 | *\r |
| 255 | * About Dialog\r |
| 256 | *\r |
| 257 | ************************************************/\r |
| 258 | \r |
| 259 | void CAboutDialog::PostLayoutDynInitL()\r |
| 260 | {\r |
| 261 | TBuf<16> versionText;\r |
| 262 | TBuf<512> text;\r |
| 263 | \r |
| 264 | #if (KPicoBuildNumber != 0)\r |
| 265 | versionText.Format(_L("%d.%d%d"), KPicoMajorVersionNumber, KPicoMinorVersionNumber, KPicoBuildNumber);\r |
| 266 | #else\r |
| 267 | versionText.Format(_L("%d.%d"), KPicoMajorVersionNumber, KPicoMinorVersionNumber);\r |
| 268 | #endif\r |
| 269 | \r |
| 270 | CEikRichTextEditor* richTextEd = LocateControlByUniqueHandle<CEikRichTextEditor>(ECtlPicoAboutText);\r |
| 271 | User::LeaveIfNull(richTextEd);\r |
| 272 | \r |
| 273 | HBufC *aboutFormat = CEikonEnv::Static()->AllocReadResourceLC(R_PICO_TEXT_ABOUT);\r |
| 274 | CSimpleTextFormatParser *parser = CSimpleTextFormatParser::NewLC();\r |
| 275 | \r |
| 276 | text.Format(*aboutFormat, &versionText);\r |
| 277 | parser->ParseL(text, *richTextEd->RichText());\r |
| 278 | \r |
| 279 | richTextEd->UpdateAllFieldsL(); // Updates all the fields in the document\r |
| 280 | \r |
| 281 | CleanupStack::PopAndDestroy(parser);\r |
| 282 | CleanupStack::PopAndDestroy(aboutFormat);\r |
| 283 | }\r |
| 284 | \r |
| 285 | /*************************************************************\r |
| 286 | *\r |
| 287 | * Credits dialog\r |
| 288 | *\r |
| 289 | **************************************************************/\r |
| 290 | \r |
| 291 | void CCreditsDialog::PreLayoutDynInitL()\r |
| 292 | {\r |
| 293 | CEikEdwin *edwin = LocateControlByUniqueHandle<CEikEdwin>(ECtlPicoCreditsText);\r |
| 294 | User::LeaveIfNull(edwin);\r |
| 295 | \r |
| 296 | CDesCArrayFlat* desArray = CEikonEnv::Static()->ReadDesCArrayResourceL(R_PICO_TBUF_CREDITS);\r |
| 297 | CleanupStack::PushL(desArray);\r |
| 298 | \r |
| 299 | edwin->SetTextLimit(2048); // to prevent stupid "too big" warning\r |
| 300 | TInt count = desArray->Count();\r |
| 301 | for (TInt i = 0; i < count; i++)\r |
| 302 | {\r |
| 303 | edwin->Text()->InsertL(edwin->TextLength(), desArray->operator[](i));\r |
| 304 | edwin->Text()->InsertL(edwin->TextLength(), CEditableText::ELineBreak);\r |
| 305 | }\r |
| 306 | CleanupStack::PopAndDestroy(desArray);\r |
| 307 | }\r |
| 308 | \r |
| 309 | TKeyResponse CCreditsDialog::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)\r |
| 310 | {\r |
| 311 | if (aType == EEventKey)\r |
| 312 | {\r |
| 313 | CEikEdwin *edwin = LocateControlByUniqueHandle<CEikEdwin>(ECtlPicoCreditsText);\r |
| 314 | User::LeaveIfNull(edwin);\r |
| 315 | \r |
| 316 | if (aKeyEvent.iCode == EQuartzKeyTwoWayDown)\r |
| 317 | {\r |
| 318 | edwin->MoveDisplayL(TCursorPosition::EFLineDown);\r |
| 319 | edwin->UpdateScrollBarsL();\r |
| 320 | return EKeyWasConsumed;\r |
| 321 | }\r |
| 322 | else if (aKeyEvent.iCode == EQuartzKeyTwoWayUp)\r |
| 323 | {\r |
| 324 | edwin->MoveDisplayL(TCursorPosition::EFLineUp);\r |
| 325 | edwin->UpdateScrollBarsL();\r |
| 326 | return EKeyWasConsumed;\r |
| 327 | }\r |
| 328 | }\r |
| 329 | return CQikSimpleDialog::OfferKeyEventL(aKeyEvent, aType);\r |
| 330 | }\r |
| 331 | \r |
| 332 | /*************************************************************\r |
| 333 | *\r |
| 334 | * Debug dialog\r |
| 335 | *\r |
| 336 | **************************************************************/\r |
| 337 | \r |
| 338 | CDebugDialog::CDebugDialog(char *t)\r |
| 339 | {\r |
| 340 | Mem::Copy(iText, t, 1024);\r |
| 341 | iText[1023] = 0;\r |
| 342 | }\r |
| 343 | \r |
| 344 | void CDebugDialog::PreLayoutDynInitL()\r |
| 345 | {\r |
| 346 | char *p = iText, *line = iText;\r |
| 347 | TBool end=0;\r |
| 348 | TBuf<128> tbuf;\r |
| 349 | CEikEdwin *editor = LocateControlByUniqueHandle<CEikEdwin>(ECtlPicoCreditsText);\r |
| 350 | \r |
| 351 | while(!end) {\r |
| 352 | while(*p && *p != '\r' && *p != '\n') p++;\r |
| 353 | if(!*p) end=1;\r |
| 354 | *p = 0;\r |
| 355 | TPtrC8 ptr((TUint8*) line);\r |
| 356 | tbuf.Copy(ptr);\r |
| 357 | editor->Text()->InsertL(editor->TextLength(), tbuf);\r |
| 358 | editor->Text()->InsertL(editor->TextLength(), CEditableText::ELineBreak);\r |
| 359 | line = ++p;\r |
| 360 | }\r |
| 361 | }\r |