Main Page | Class Hierarchy | Compound List | File List | Compound Members | File Members | Related Pages

prefsdialog.cpp

Go to the documentation of this file.
00001 // PREFSDIALOG.CPP
00002 //
00003 // Copyright PanSoftware Ltd 2000
00004 //
00005 //    This program is free software; you can redistribute it and/or modify
00006 //    it under the terms of the GNU General Public License as published by
00007 //    the Free Software Foundation; either version 2 of the License, or
00008 //    (at your option) any later version.
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> // CEikChoiceList
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>   // CEikFileBrowserDialog
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>   // CEikCheckBox
00065 #include <eikdclbm.h>   // CDirContentsListBoxModel
00066 #include <eikfbrow.h>   // CEikFileBrowserDialog
00067 #endif
00068 
00069 #include "e32frodo.hrh"
00070 #include <e32frodo.rsg>
00071 #include "prefsdialog.h"
00072 
00073 
00074 //
00075 // CPrefsDialog implementation
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         // 1541
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         // 1541
00123         SetChoiceListCurrentItem(EDlg1541Emul1541Proc, iPrefs->Emul1541Proc);
00124 
00125         // Joystick
00126         SetChoiceListCurrentItem(EDlgJoystick1On, iPrefs->Joystick1On);
00127         SetChoiceListCurrentItem(EDlgJoystick2On, iPrefs->Joystick2On);
00128 
00129         // VIC
00130         SetNumberEditorValue(EDlgVICSkipFrames, iPrefs->SkipFrames);
00131         SetChoiceListCurrentItem(EDlgVICSpritesOn, iPrefs->SpritesOn);
00132         SetChoiceListCurrentItem(EDlgVICSpriteColl, iPrefs->SpriteCollisions);
00133 
00134         // SID
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         // CPU
00144         SetNumberEditorValue(EDlgCPUNormalCycles, iPrefs->NormalCycles);
00145         SetNumberEditorValue(EDlgCPUBadLineCycles, iPrefs->BadLineCycles);
00146         SetNumberEditorValue(EDlgCPUCIACycles, iPrefs->CIACycles);
00147         SetNumberEditorValue(EDlgCPUFloppyCycles, iPrefs->FloppyCycles);
00148 
00149         // Stuff
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         // 1541
00160         STATIC_CAST(CEikCheckBox*,Control(EDlg1541Emul1541Proc))->SetState((CEikButtonBase::TState)iPrefs->Emul1541Proc);
00161 
00162         // Joystick
00163         STATIC_CAST(CEikCheckBox*,Control(EDlgJoystick1On))->SetState((CEikButtonBase::TState)iPrefs->Joystick1On);
00164         STATIC_CAST(CEikCheckBox*,Control(EDlgJoystick2On))->SetState((CEikButtonBase::TState)iPrefs->Joystick2On);
00165 
00166         // VIC
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         // SID
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         // CPU
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         // Stuff
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 // From Jal:
00202 // I removed the SetActivePageByIdL from the PreLayoutDynInitL and put it in
00203 // the SetInitialCurrentLine instead of the DrawNow.
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                 // the only difference here between ER5 and ER6 is the
00243                 // concrete file open controls
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                 // 1541
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                 // Joystick
00333                 iPrefs->Joystick1On = ChoiceListCurrentItem(EDlgJoystick1On);
00334                 iPrefs->Joystick2On = ChoiceListCurrentItem(EDlgJoystick2On);
00335 
00336                 // VIC
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                 // CPU
00349                 iPrefs->NormalCycles = NumberEditorValue(EDlgCPUNormalCycles);
00350                 iPrefs->BadLineCycles = NumberEditorValue(EDlgCPUBadLineCycles);
00351                 iPrefs->CIACycles = NumberEditorValue(EDlgCPUCIACycles);
00352                 iPrefs->FloppyCycles = NumberEditorValue(EDlgCPUFloppyCycles);
00353 
00354                 // Stuff
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                 // Joystick
00365                 iPrefs->Joystick1On = STATIC_CAST(CEikCheckBox*,Control(EDlgJoystick1On))->State();
00366                 iPrefs->Joystick2On = STATIC_CAST(CEikCheckBox*,Control(EDlgJoystick2On))->State();
00367 
00368                 // VIC
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                 // SID
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                 // CPU
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                 // Stuff
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                 // if no changes, do no changes
00395                 if(*iPrefs == *iOrigPrefs)
00396                         return ETrue;                   // ETrue means close Dialog box
00397 
00398                 // Pause Emulator if running
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         // Redraw if changed
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         // Redraw if changed
00473         if (wasDimmed != cbaToolbar.IsCommandDimmed(EButGetFile))
00474                 cbaToolbar.ButtonById(EButGetFile)->DrawNow();
00475 
00476         }
00477 #endif // __ER6__
00478 
00479 
00480 // EOF - PREFSDIALOG.CPP

Generated on Tue Feb 8 04:08:06 2005 for E32frodo by doxygen 1.3.3