00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00017 #include <basched.h>
00018 #include <eikenv.h>
00019 #include <eikdialg.h>
00020 #include <eikbtpan.h>
00021 #include <eiklbbut.h>
00022 #include <eikcmbut.h>
00023 #include <eikappui.h>
00024 #include <eikapp.h>
00025 #include <eikdoc.h>
00026
00027 #ifndef __SERIES60__
00028 #include <eikchlst.h>
00029 #endif
00030
00031 #include <eikseced.h>
00032 #include <eikprogi.h>
00033 #include <eikrted.h>
00034 #include <eikgted.h>
00035 #include <eikdlgtb.h>
00036 #include <txtrich.h>
00037 #include <txtglobl.h>
00038 #include <eikedwin.h>
00039 #include <eikon.rsg>
00040 #include <eikclb.h>
00041 #include <eikclbd.h>
00042 #include <badesca.h>
00043 #include <eiktxlbx.h>
00044 #include <eikfctry.h>
00045 #include <w32std.h>
00046 #include <e32keys.h>
00047
00048 #if defined(__CRYSTAL__)
00049 #include <eikbtgpc.h>
00050 #include <ckndgopn.h>
00051 #include <eikmfne.h>
00052 #include <eikchkbx.h>
00053 #elif defined(__SERIES60__)
00054
00055 #elif defined(__QUARTZ__)
00056 #include <eikbtgpc.h>
00057 #include <eikfbrow.h>
00058 #else
00059 #include <eikmfne.h>
00060 #include <eikdialg.hrh>
00061 #include <eikcmds.hrh>
00062 #include <eikedwin.hrh>
00063 #include <eiktxtut.h>
00064 #include <eikchkbx.h>
00065 #include <eikdclbm.h>
00066 #include <eikfbrow.h>
00067 #endif
00068
00069 #include "e32frodo.hrh"
00070 #include <e32frodo.rsg>
00071 #include "prefsdialog.h"
00072
00073
00074
00075
00076
00077
00078
00079 CPrefsDialog::CPrefsDialog(C64* aC64)
00083 :iC64(aC64)
00084 ,iOrigPrefs(&(aC64->ThePrefs))
00085 {
00086 __CHECK_NULL(aC64);
00087
00088 iPrefs = new Prefs();
00089 *iPrefs = *iOrigPrefs;
00090
00091 CTOR(CPrefsDialog);
00092 }
00093
00094
00095 CPrefsDialog::~CPrefsDialog()
00099 {
00100 delete iPrefs;
00101 DTOR(CPrefsDialog);
00102 }
00103
00104
00105 void CPrefsDialog::PreLayoutDynInitL()
00106 {
00107
00108
00109 for(TInt i=0;i<4;i++)
00110 {
00111 TText8* buf= (TText8*)iPrefs->DrivePath[i];
00112 TInt bufLen=TPtrC8(buf).Length();
00113 TInt maxBufLen = sizeof(iPrefs->DrivePath[i]);
00114 TPtr8 drivePath(buf,bufLen,maxBufLen);
00115 TFileName drivePath2;
00116 drivePath2.Copy(drivePath);
00117 STATIC_CAST(CEikEdwin*,Control(EDlg1541Drive8+i))->SetTextL(&drivePath2);
00118 }
00119
00120 #if defined(__CRYSTAL__)
00121
00122
00123 SetChoiceListCurrentItem(EDlg1541Emul1541Proc, iPrefs->Emul1541Proc);
00124
00125
00126 SetChoiceListCurrentItem(EDlgJoystick1On, iPrefs->Joystick1On);
00127 SetChoiceListCurrentItem(EDlgJoystick2On, iPrefs->Joystick2On);
00128
00129
00130 SetNumberEditorValue(EDlgVICSkipFrames, iPrefs->SkipFrames);
00131 SetChoiceListCurrentItem(EDlgVICSpritesOn, iPrefs->SpritesOn);
00132 SetChoiceListCurrentItem(EDlgVICSpriteColl, iPrefs->SpriteCollisions);
00133
00134
00135
00136 SetChoiceListCurrentItem(EDlgSIDType, iPrefs->SIDType);
00137 SetCheckBoxState(EDlgSIDFilters, iPrefs->SIDFilters?(CEikButtonBase::ESet):(CEikButtonBase::EClear));
00139 SetNumberEditorValue(EDlgSIDLatencyMax, iPrefs->LatencyMax);
00141 STATIC_CAST(CEikNumberEditor*,Control(EDlgSIDVolume))->SetNumber(iPrefs->iVolume);
00142
00143
00144 SetNumberEditorValue(EDlgCPUNormalCycles, iPrefs->NormalCycles);
00145 SetNumberEditorValue(EDlgCPUBadLineCycles, iPrefs->BadLineCycles);
00146 SetNumberEditorValue(EDlgCPUCIACycles, iPrefs->CIACycles);
00147 SetNumberEditorValue(EDlgCPUFloppyCycles, iPrefs->FloppyCycles);
00148
00149
00150 STATIC_CAST(CEikChoiceList*,Control(EDlgStuffREUSize))->SetCurrentItem(iPrefs->REUSize);
00151 SetChoiceListCurrentItem(EDlgStuffFastReset, iPrefs->FastReset);
00152
00153 #elif defined (__SERIES60__)
00154
00155 #elif defined (__QUARTZ__)
00156
00157 #else
00158
00159
00160 STATIC_CAST(CEikCheckBox*,Control(EDlg1541Emul1541Proc))->SetState((CEikButtonBase::TState)iPrefs->Emul1541Proc);
00161
00162
00163 STATIC_CAST(CEikCheckBox*,Control(EDlgJoystick1On))->SetState((CEikButtonBase::TState)iPrefs->Joystick1On);
00164 STATIC_CAST(CEikCheckBox*,Control(EDlgJoystick2On))->SetState((CEikButtonBase::TState)iPrefs->Joystick2On);
00165
00166
00167 STATIC_CAST(CEikNumberEditor*,Control(EDlgVICSkipFrames))->SetNumber(iPrefs->SkipFrames);
00168 STATIC_CAST(CEikCheckBox*,Control(EDlgVICSpritesOn))->SetState((CEikButtonBase::TState)iPrefs->SpritesOn);
00169 STATIC_CAST(CEikCheckBox*,Control(EDlgVICSpriteColl))->SetState((CEikButtonBase::TState)iPrefs->SpriteCollisions);
00170
00171
00172 STATIC_CAST(CEikChoiceList*,Control(EDlgSIDType))->SetCurrentItem(iPrefs->SIDType);
00173 STATIC_CAST(CEikCheckBox*,Control(EDlgSIDFilters))->SetState((CEikButtonBase::TState)iPrefs->SIDFilters);
00174 STATIC_CAST(CEikNumberEditor*,Control(EDlgSIDLatencyMin))->SetNumber(iPrefs->LatencyMin);
00175 STATIC_CAST(CEikNumberEditor*,Control(EDlgSIDLatencyMax))->SetNumber(iPrefs->LatencyMax);
00176 STATIC_CAST(CEikNumberEditor*,Control(EDlgSIDLatencyAvg))->SetNumber(iPrefs->LatencyAvg);
00177 STATIC_CAST(CEikNumberEditor*,Control(EDlgSIDVolume))->SetNumber(iPrefs->iVolume);
00178
00179
00180 STATIC_CAST(CEikNumberEditor*,Control(EDlgCPUNormalCycles))->SetNumber(iPrefs->NormalCycles);
00181 STATIC_CAST(CEikNumberEditor*,Control(EDlgCPUBadLineCycles))->SetNumber(iPrefs->BadLineCycles);
00182 STATIC_CAST(CEikNumberEditor*,Control(EDlgCPUCIACycles))->SetNumber(iPrefs->CIACycles);
00183 STATIC_CAST(CEikNumberEditor*,Control(EDlgCPUFloppyCycles))->SetNumber(iPrefs->FloppyCycles);
00184
00185
00186 STATIC_CAST(CEikChoiceList*,Control(EDlgStuffREUSize))->SetCurrentItem(iPrefs->REUSize);
00187 STATIC_CAST(CEikCheckBox*,Control(EDlgStuffFastReset))->SetState((CEikButtonBase::TState)iPrefs->FastReset);
00188
00189 MakePanelButtonVisible(EEikBidSpace, EFalse);
00190 #endif
00191 }
00192
00193
00194 void CPrefsDialog::SetInitialCurrentLine()
00198 {
00199
00200
00201
00202
00203
00204
00205
00206 #if defined(__CRYSTAL__)
00207 SetActivePageByIdL(EDlgFocusJoystick);
00208 SetInitialFocus();
00209 #elif defined(__SERIES60__)
00210
00211 #else
00212 TRAPD(ret, TryChangeFocusToL(EDlgFocusJoystick));
00213 ELOG(if(ret != KErrNone))
00214 ELOG2(_L8("WARNING: could not change focus [ret=%d]"), ret );
00215 #endif
00216 }
00217
00218
00219 _LIT8(KD64, "D64");
00220 _LIT8(KT64, "T64");
00221
00222
00223 TBool CPrefsDialog::OkToExitL(TInt aControlId)
00227 {
00228 TInt focusItemId = IdOfFocusControl();
00229
00230 if (aControlId==EButGetFile)
00231 {
00232 TFileName diskImagePathAndName;
00233 CEikEdwin* edwin = STATIC_CAST(CEikEdwin*,Control(focusItemId));
00234 edwin->GetText(diskImagePathAndName);
00235
00236 if(diskImagePathAndName.Length() == 0)
00237 diskImagePathAndName.Copy(_L("C:\\"));
00238
00239 TBool success = EFalse;
00240
00241
00242
00243
00244
00245 #if defined(__CRYSTAL__)
00246 success = CCknOpenFileDialog::RunDlgLD(diskImagePathAndName);
00247 #elif defined(__SERIES60__)
00248
00249 #elif defined(__QUARTZ__)
00250
00251 #else // __ER6__
00252 CDirContentsListBoxModel::TSortOrder order = CDirContentsListBoxModel::EOrderByName;
00253 CEikFileBrowserDialog* browseDialog = new (ELeave)
00254 CEikFileBrowserDialog(diskImagePathAndName, CEikFileBrowser::EShowSystem, order);
00255 success = browseDialog->ExecuteLD(R_EIK_DIALOG_FILE_BROWSE);
00256 #endif
00257 if(success)
00258 edwin->SetTextL(&diskImagePathAndName);
00259
00260 return(EFalse);
00261 }
00262
00263 if (aControlId==EEikBidOk)
00264 {
00265
00266 TBool joy_reminder = EFalse;
00267 #if !defined(__ER6__)
00268
00271 RWsSession ws;
00272 const TInt ret = ws.Connect();
00273 if(!ret && !(EModifierCapsLock & ws.GetModifierState()) )
00274 {
00275
00276 if(
00277 (!iPrefs->Joystick1On && ChoiceListCurrentItem(EDlgJoystick1On))
00278 ||
00279 (!iPrefs->Joystick2On && ChoiceListCurrentItem(EDlgJoystick2On))
00280 )
00281 joy_reminder = ETrue;
00282 if(
00283 (!iPrefs->Joystick1On && ((CEikCheckBox*)Control(EDlgJoystick1On))->State())
00284 ||
00285 (!iPrefs->Joystick2On && ((CEikCheckBox*)Control(EDlgJoystick2On))->State())
00286 )
00287 joy_reminder = ETrue;
00288
00289 ws.Close();
00290 }
00291 #endif
00292
00293
00294
00295
00296 #if defined(__CRYSTAL__)
00297 iPrefs->Emul1541Proc = ChoiceListCurrentItem(EDlg1541Emul1541Proc);
00298 #elif defined(__SERIES60__)
00299
00300 #elif defined(__QUARTZ__)
00301
00302 #else // __ER6__
00303 iPrefs->Emul1541Proc = STATIC_CAST(CEikCheckBox*,Control(EDlg1541Emul1541Proc))->State();
00304 #endif
00305
00306 for(TInt i=0;i<4;i++)
00307 {
00308 TText8* buf= (TText8*)iPrefs->DrivePath[i];
00309 TInt bufLen = TPtrC8(buf).Length();
00310 TInt maxBufLen = sizeof(iPrefs->DrivePath[i]);
00311 TPtr8 drivePath(buf,bufLen,maxBufLen);
00312 TFileName tmp;
00313 STATIC_CAST(CEikEdwin*,Control(EDlg1541Drive8+i))->GetText(tmp);
00314 drivePath.Copy(tmp);
00315 drivePath.ZeroTerminate();
00316
00317 if(drivePath.Length() == 0)
00318 {
00319 iPrefs->DriveType[i]=DRVTYPE_DIR;
00320 }
00321 else
00322 if (drivePath.Right(3).CompareF(KD64)==0)
00323 iPrefs->DriveType[i]=DRVTYPE_D64;
00324 else if (drivePath.Right(3).CompareF(KT64)==0)
00325 iPrefs->DriveType[i]=DRVTYPE_T64;
00326 else
00327 iPrefs->DriveType[i]=DRVTYPE_DIR;
00328 }
00329
00330 #if defined(__CRYSTAL__)
00331
00332
00333 iPrefs->Joystick1On = ChoiceListCurrentItem(EDlgJoystick1On);
00334 iPrefs->Joystick2On = ChoiceListCurrentItem(EDlgJoystick2On);
00335
00336
00337 iPrefs->SkipFrames = NumberEditorValue(EDlgVICSkipFrames);
00338 iPrefs->SpritesOn = ChoiceListCurrentItem(EDlgVICSpritesOn);
00339 iPrefs->SpriteCollisions = ChoiceListCurrentItem(EDlgVICSpriteColl);
00340
00341 iPrefs->SIDType = STATIC_CAST(CEikChoiceList*,Control(EDlgSIDType))->CurrentItem();
00342 iPrefs->SIDFilters = STATIC_CAST(CEikCheckBox*,Control(EDlgSIDFilters))->State();
00344 iPrefs->LatencyMax = STATIC_CAST(CEikNumberEditor*,Control(EDlgSIDLatencyMax))->Number();
00346 iPrefs->iVolume = STATIC_CAST(CEikNumberEditor*,Control(EDlgSIDVolume))->Number();
00347
00348
00349 iPrefs->NormalCycles = NumberEditorValue(EDlgCPUNormalCycles);
00350 iPrefs->BadLineCycles = NumberEditorValue(EDlgCPUBadLineCycles);
00351 iPrefs->CIACycles = NumberEditorValue(EDlgCPUCIACycles);
00352 iPrefs->FloppyCycles = NumberEditorValue(EDlgCPUFloppyCycles);
00353
00354
00355 iPrefs->REUSize = ChoiceListCurrentItem(EDlgStuffREUSize);
00356 iPrefs->FastReset = ChoiceListCurrentItem(EDlgStuffFastReset);
00357
00358 #elif defined(__SERIES60__)
00359
00360 #elif defined(__QUARTZ__)
00361
00362 #else // __ER6__
00363
00364
00365 iPrefs->Joystick1On = STATIC_CAST(CEikCheckBox*,Control(EDlgJoystick1On))->State();
00366 iPrefs->Joystick2On = STATIC_CAST(CEikCheckBox*,Control(EDlgJoystick2On))->State();
00367
00368
00369 iPrefs->SkipFrames = STATIC_CAST(CEikNumberEditor*,Control(EDlgVICSkipFrames))->Number();
00370 iPrefs->SpritesOn = STATIC_CAST(CEikCheckBox*,Control(EDlgVICSpritesOn))->State();
00371 iPrefs->SpriteCollisions = STATIC_CAST(CEikCheckBox*,Control(EDlgVICSpriteColl))->State();
00372
00373
00374 iPrefs->SIDType = STATIC_CAST(CEikChoiceList*,Control(EDlgSIDType))->CurrentItem();
00375 iPrefs->SIDFilters = STATIC_CAST(CEikCheckBox*,Control(EDlgSIDFilters))->State();
00376 iPrefs->LatencyMin = STATIC_CAST(CEikNumberEditor*,Control(EDlgSIDLatencyMin))->Number();
00377 iPrefs->LatencyMax = STATIC_CAST(CEikNumberEditor*,Control(EDlgSIDLatencyMax))->Number();
00378 iPrefs->LatencyAvg = STATIC_CAST(CEikNumberEditor*,Control(EDlgSIDLatencyAvg))->Number();
00379 iPrefs->iVolume = STATIC_CAST(CEikNumberEditor*,Control(EDlgSIDVolume))->Number();
00380
00381
00382 iPrefs->NormalCycles = STATIC_CAST(CEikNumberEditor*,Control(EDlgCPUNormalCycles))->Number();
00383 iPrefs->BadLineCycles = STATIC_CAST(CEikNumberEditor*,Control(EDlgCPUBadLineCycles))->Number();
00384 iPrefs->CIACycles = STATIC_CAST(CEikNumberEditor*,Control(EDlgCPUCIACycles))->Number();
00385 iPrefs->FloppyCycles = STATIC_CAST(CEikNumberEditor*,Control(EDlgCPUFloppyCycles))->Number();
00386
00387
00388 iPrefs->REUSize = STATIC_CAST(CEikChoiceList*,Control(EDlgStuffREUSize))->CurrentItem();
00389 iPrefs->FastReset = STATIC_CAST(CEikCheckBox*,Control(EDlgStuffFastReset))->State();
00390
00391 #endif // __ER6__
00392
00393
00394
00395 if(*iPrefs == *iOrigPrefs)
00396 return ETrue;
00397
00398
00399 TBool paused = iC64->Paused();
00400
00401 if(!paused)
00402 iC64->TogglePause();
00403
00404 iC64->NewPrefs(iPrefs);
00405
00406 *iOrigPrefs = *iPrefs;
00407
00408 if(!paused)
00409 iC64->TogglePause();
00410
00411 _LIT(KPrefsChange, "prefs changed");
00412 _LIT(KJoyOnText, "enable capslock to use joystick");
00413
00414 if(joy_reminder)
00415 iEikonEnv->InfoMsg(KJoyOnText);
00416 else
00417 iEikonEnv->InfoMsg(KPrefsChange);
00418
00419 return ETrue;
00420 }
00421
00422 #ifdef __CRYSTAL__
00423 if (focusItemId > 0)
00424 {
00425 TInt nextFocusItemId=ChoiceListCurrentItem(focusItemId);
00426 TryChangeFocusToL(1+nextFocusItemId);
00427 return EFalse;
00428 }
00429 #endif
00430
00431 return EFalse;
00432 }
00433
00434
00435 void CPrefsDialog::PageChangedL(TInt aControlId)
00440 {
00441 #if defined(__ER6__)
00442 (void)aControlId;
00443 CEikButtonGroupContainer& cbaToolbar = ButtonGroupContainer();
00444 const TBool wasDimmed = cbaToolbar.IsCommandDimmed(EButGetFile);
00445 cbaToolbar.DimCommand(EButGetFile, ETrue);
00446
00447 if (wasDimmed != cbaToolbar.IsCommandDimmed(EButGetFile))
00448 cbaToolbar.ButtonById(EButGetFile)->DrawNow();
00449 #else // __ER6__
00450 const TBool visible = (aControlId == EDlgFocus1541);
00451 MakePanelButtonVisible(EButGetFile, visible);
00452 #endif
00453 }
00454
00455
00456 #if defined(__ER6__)
00457
00458 void CPrefsDialog::LineChangedL(TInt aControlId)
00463 {
00464 CEikButtonGroupContainer& cbaToolbar = ButtonGroupContainer();
00465
00466 const TBool wasDimmed = cbaToolbar.IsCommandDimmed(EButGetFile);
00467 cbaToolbar.DimCommand(EButGetFile, ETrue);
00468 if (ActivePageId() == EDlgFocus1541)
00469 if (aControlId == EDlg1541Drive8 || aControlId == EDlg1541Drive9
00470 || aControlId == EDlg1541Drive10 || aControlId == EDlg1541Drive11)
00471 cbaToolbar.DimCommand(EButGetFile, EFalse);
00472
00473 if (wasDimmed != cbaToolbar.IsCommandDimmed(EButGetFile))
00474 cbaToolbar.ButtonById(EButGetFile)->DrawNow();
00475
00476 }
00477 #endif // __ER6__
00478
00479
00480