+++ /dev/null
-/*******************************************************************\r
- *\r
- * File: Dialogs.cpp\r
- *\r
- * Author: Peter van Sebille (peter@yipton.net)\r
- *\r
- * Modified/adapted for picodriveN by notaz, 2006\r
- *\r
- * (c) Copyright 2006, notaz\r
- * (c) Copyright 2002, Peter van Sebille\r
- * All Rights Reserved\r
- *\r
- *******************************************************************/\r
-\r
-#include "Dialogs.h"\r
-#include "Engine.h"\r
-#include "picodrive.hrh"\r
-#include "rsc/picodrive.rsg"\r
-\r
-#include "version.h"\r
-#include "CSimpleTextParser.h"\r
-#include <txtrich.h> // CRichText\r
-#include <eikrted.h> // CEikRichTextEditor\r
-#include <qikvertoptionbuttonlist.h> // CEikHorOptionButtonList\r
-#include <eikopbut.h> // CEikOptionButton\r
-#include <eikedwin.h> // CEikEdwin\r
-#include <quartzkeys.h> // EQuartzKeyTwoWayDown\r
-\r
-#include <qikcommand.h>\r
-#include "../common/emu.h"\r
-\r
-\r
-/************************************************\r
- *\r
- * config Dialog\r
- *\r
- ************************************************/\r
-\r
-CPicoConfigDialog::CPicoConfigDialog(_currentConfig_t &cfg) : config(cfg)\r
-{\r
-}\r
-\r
-void CPicoConfigDialog::PostLayoutDynInitL()\r
-{\r
- CEikHorOptionButtonList *buttons_rot = (CEikHorOptionButtonList*) Control( ECtlOptRotation );\r
- CEikHorOptionButtonList *buttons_disp = (CEikHorOptionButtonList*) Control( ECtlOptScreenMode );\r
- CEikCheckBox *chkbox_altrend= (CEikCheckBox*) Control( ECtlOptUseAltRend );\r
-// CEikCheckBox *chkbox_acctmng= (CEikCheckBox*) Control( ECtlOptUseAccTiming );\r
- CEikCheckBox *chkbox_sram = (CEikCheckBox*) Control( ECtlOptUseSRAM );\r
- CEikCheckBox *chkbox_fps = (CEikCheckBox*) Control( ECtlOptShowFPS );\r
- CEikCheckBox *chkbox_sound = (CEikCheckBox*) Control( ECtlOptEnableSound );\r
- CEikCheckBox *chkbox_z80 = (CEikCheckBox*) Control( ECtlOptEmulateZ80 );\r
- CEikCheckBox *chkbox_ym2612 = (CEikCheckBox*) Control( ECtlOptEmulateYM2612 );\r
- CEikCheckBox *chkbox_sn76496= (CEikCheckBox*) Control( ECtlOptEmulateSN76496 );\r
- CEikChoiceListBase *combo_sndq = (CEikChoiceListBase*) Control( ECtlOptSndQuality );\r
- CEikCheckBox *chkbox_6bpad = (CEikCheckBox*) Control( ECtlOpt6ButtonPad );\r
- CEikCheckBox *chkbox_gzipst = (CEikCheckBox*) Control( ECtlOptGzipStates );\r
-// CEikCheckBox *chkbox_accsprt= (CEikCheckBox*) Control( ECtlOptUseAccSprites );\r
- CEikChoiceListBase *combo_region = (CEikChoiceListBase*) Control( ECtlOptRegion );\r
- CEikOptionButton *opt_fit2 = (CEikOptionButton*) buttons_disp->ComponentControl( TPicoConfig::PMFit2 );\r
- CEikCheckBox *chkbox_cdda = (CEikCheckBox*) Control( ECtlOptCDcdda );\r
- CEikCheckBox *chkbox_pcm = (CEikCheckBox*) Control( ECtlOptCDpcm );\r
- CEikCheckBox *chkbox_ramcart= (CEikCheckBox*) Control( ECtlOptCDramcart );\r
- CEikCheckBox *chkbox_sclrot = (CEikCheckBox*) Control( ECtlOptCDscalerot );\r
- CEikCheckBox *chkbox_bsync = (CEikCheckBox*) Control( ECtlOptCDbettersync );\r
-\r
- buttons_rot ->SetButtonById(ECtlOptRotation0 + config.rotation);\r
- buttons_disp->SetButtonById(ECtlOptScreenModeCenter + config.scaling);\r
- chkbox_sram ->SetState(config.EmuOpt & 1 ? CEikButtonBase::ESet : CEikButtonBase::EClear);\r
- chkbox_fps ->SetState(config.EmuOpt & 2 ? CEikButtonBase::ESet : CEikButtonBase::EClear);\r
- chkbox_sound ->SetState(config.EmuOpt & 4 ? CEikButtonBase::ESet : CEikButtonBase::EClear);\r
- chkbox_gzipst ->SetState(config.EmuOpt & 8 ? CEikButtonBase::ESet : CEikButtonBase::EClear);\r
- chkbox_z80 ->SetState(config.s_PicoOpt& 4 ? CEikButtonBase::ESet : CEikButtonBase::EClear);\r
- chkbox_ym2612 ->SetState(config.s_PicoOpt& 1 ? CEikButtonBase::ESet : CEikButtonBase::EClear);\r
- chkbox_sn76496->SetState(config.s_PicoOpt& 2 ? CEikButtonBase::ESet : CEikButtonBase::EClear);\r
- chkbox_altrend->SetState(config.s_PicoOpt& 0x10? CEikButtonBase::ESet : CEikButtonBase::EClear);\r
- chkbox_6bpad ->SetState(config.s_PicoOpt& 0x20? CEikButtonBase::ESet : CEikButtonBase::EClear);\r
-// chkbox_acctmng->SetState(config.s_PicoOpt& 0x40? CEikButtonBase::ESet : CEikButtonBase::EClear);\r
-// chkbox_accsprt->SetState(config.s_PicoOpt& 0x80? CEikButtonBase::ESet : CEikButtonBase::EClear);\r
- chkbox_cdda ->SetState(config.s_PicoOpt&0x0800?CEikButtonBase::ESet : CEikButtonBase::EClear);\r
- chkbox_pcm ->SetState(config.s_PicoOpt&0x0400?CEikButtonBase::ESet : CEikButtonBase::EClear);\r
- chkbox_ramcart->SetState(config.s_PicoOpt&0x8000?CEikButtonBase::ESet : CEikButtonBase::EClear);\r
- chkbox_sclrot ->SetState(config.s_PicoOpt&0x1000?CEikButtonBase::ESet : CEikButtonBase::EClear);\r
- chkbox_bsync ->SetState(config.s_PicoOpt&0x2000?CEikButtonBase::ESet : CEikButtonBase::EClear);\r
-\r
- // dim "fit2" if we are not in 0 or 180 mode\r
- if (config.rotation != TPicoConfig::PRot0 && config.rotation != TPicoConfig::PRot180)\r
- opt_fit2->SetDimmed(ETrue);\r
- // dim some stuff for alternative renderer\r
- if (config.s_PicoOpt & 0x10) {\r
- // dim accurate sprites\r
- //chkbox_accsprt->SetState(CEikButtonBase::EClear);\r
- //chkbox_accsprt->SetDimmed(ETrue);\r
- // dim fit\r
- if(buttons_rot->LabeledButtonId() == ECtlOptRotation0 || buttons_rot->LabeledButtonId() == ECtlOptRotation180)\r
- ((CEikOptionButton*)(buttons_disp->ComponentControl(TPicoConfig::PMFit)))->SetDimmed(ETrue);\r
- }\r
-\r
- TInt sel = 0;\r
- switch (config.s_PsndRate) {\r
- case 11025: sel = 1; break;\r
- case 16000: sel = 2; break;\r
- case 22050: sel = 3; break;\r
- case 44100: sel = 4; break;\r
- }\r
- sel += (config.s_PicoOpt&8) ? 5 : 0;\r
- if (sel >= 10) sel = 0;\r
- combo_sndq->SetCurrentItem(sel);\r
-\r
- switch(config.s_PicoRegion) {\r
- case 1: sel = 4; break;\r
- case 2: sel = 3; break;\r
- case 4: sel = 2; break;\r
- case 8: sel = 1; break;\r
- default:sel = 0; // auto\r
- }\r
- combo_region->SetCurrentItem(sel);\r
-}\r
-\r
-TBool CPicoConfigDialog::OkToExitL(TInt aButtonId)\r
-{\r
- if(aButtonId != EEikBidOk) return ETrue;\r
-\r
- CEikHorOptionButtonList *buttons_rot = (CEikHorOptionButtonList*) Control( ECtlOptRotation );\r
- CEikHorOptionButtonList *buttons_disp = (CEikHorOptionButtonList*) Control( ECtlOptScreenMode );\r
- CEikCheckBox *chkbox_altrend= (CEikCheckBox*) Control( ECtlOptUseAltRend );\r
-// CEikCheckBox *chkbox_acctmng= (CEikCheckBox*) Control( ECtlOptUseAccTiming );\r
- CEikCheckBox *chkbox_sram = (CEikCheckBox*) Control( ECtlOptUseSRAM );\r
- CEikCheckBox *chkbox_fps = (CEikCheckBox*) Control( ECtlOptShowFPS );\r
- CEikCheckBox *chkbox_sound = (CEikCheckBox*) Control( ECtlOptEnableSound );\r
- CEikCheckBox *chkbox_z80 = (CEikCheckBox*) Control( ECtlOptEmulateZ80 );\r
- CEikCheckBox *chkbox_ym2612 = (CEikCheckBox*) Control( ECtlOptEmulateYM2612 );\r
- CEikCheckBox *chkbox_sn76496= (CEikCheckBox*) Control( ECtlOptEmulateSN76496 );\r
- CEikChoiceListBase *combo_sndq = (CEikChoiceListBase*) Control( ECtlOptSndQuality );\r
- CEikCheckBox *chkbox_6bpad = (CEikCheckBox*) Control( ECtlOpt6ButtonPad );\r
- CEikCheckBox *chkbox_gzipst = (CEikCheckBox*) Control( ECtlOptGzipStates );\r
-// CEikCheckBox *chkbox_accsprt= (CEikCheckBox*) Control( ECtlOptUseAccSprites );\r
- CEikChoiceListBase *combo_region = (CEikChoiceListBase*) Control( ECtlOptRegion );\r
- CEikCheckBox *chkbox_cdda = (CEikCheckBox*) Control( ECtlOptCDcdda );\r
- CEikCheckBox *chkbox_pcm = (CEikCheckBox*) Control( ECtlOptCDpcm );\r
- CEikCheckBox *chkbox_ramcart= (CEikCheckBox*) Control( ECtlOptCDramcart );\r
- CEikCheckBox *chkbox_sclrot = (CEikCheckBox*) Control( ECtlOptCDscalerot );\r
- CEikCheckBox *chkbox_bsync = (CEikCheckBox*) Control( ECtlOptCDbettersync );\r
-\r
- config.rotation = (TPicoConfig::TPicoScreenRotation) (buttons_rot->LabeledButtonId() - ECtlOptRotation0);\r
- config.scaling = (TPicoConfig::TPicoScreenMode) (buttons_disp->LabeledButtonId() - ECtlOptScreenModeCenter);\r
-\r
- if(chkbox_sram ->State() == CEikButtonBase::ESet) config.EmuOpt |= 1; else config.EmuOpt &= ~1;\r
- if(chkbox_fps ->State() == CEikButtonBase::ESet) config.EmuOpt |= 2; else config.EmuOpt &= ~2;\r
- if(chkbox_sound ->State() == CEikButtonBase::ESet) config.EmuOpt |= 4; else config.EmuOpt &= ~4;\r
- if(chkbox_gzipst ->State() == CEikButtonBase::ESet) config.EmuOpt |= 8; else config.EmuOpt &= ~8;\r
- if(chkbox_z80 ->State() == CEikButtonBase::ESet) config.s_PicoOpt|= 4; else config.s_PicoOpt&= ~4;\r
- if(chkbox_ym2612 ->State() == CEikButtonBase::ESet) config.s_PicoOpt|= 1; else config.s_PicoOpt&= ~1;\r
- if(chkbox_sn76496->State() == CEikButtonBase::ESet) config.s_PicoOpt|= 2; else config.s_PicoOpt&= ~2;\r
- if(chkbox_altrend->State() == CEikButtonBase::ESet) config.s_PicoOpt|= 0x10;else config.s_PicoOpt&= ~0x10;\r
- if(chkbox_6bpad ->State() == CEikButtonBase::ESet) config.s_PicoOpt|= 0x20;else config.s_PicoOpt&= ~0x20;\r
-// if(chkbox_acctmng->State() == CEikButtonBase::ESet) config.s_PicoOpt|= 0x40;else config.s_PicoOpt&= ~0x40;\r
-// if(chkbox_accsprt->State() == CEikButtonBase::ESet) config.s_PicoOpt|= 0x80;else config.s_PicoOpt&= ~0x80;\r
- if(chkbox_cdda ->State() == CEikButtonBase::ESet) config.s_PicoOpt |= 0x0800; else config.s_PicoOpt&= ~0x0800;\r
- if(chkbox_pcm ->State() == CEikButtonBase::ESet) config.s_PicoOpt |= 0x0400; else config.s_PicoOpt&= ~0x0400;\r
- if(chkbox_ramcart->State() == CEikButtonBase::ESet) config.s_PicoOpt |= 0x8000; else config.s_PicoOpt&= ~0x8000;\r
- if(chkbox_sclrot ->State() == CEikButtonBase::ESet) config.s_PicoOpt |= 0x1000; else config.s_PicoOpt&= ~0x1000;\r
- if(chkbox_bsync ->State() == CEikButtonBase::ESet) config.s_PicoOpt |= 0x2000; else config.s_PicoOpt&= ~0x2000;\r
-\r
- TInt sel = combo_sndq->CurrentItem();\r
- if(sel >= 5) { config.s_PicoOpt |= 8; sel-=5; } else config.s_PicoOpt &= ~8;\r
- switch (sel) {\r
- default:config.s_PsndRate = 8000; break;\r
- case 1: config.s_PsndRate = 11025; break;\r
- case 2: config.s_PsndRate = 16000; break;\r
- case 3: config.s_PsndRate = 22050; break;\r
- case 4: config.s_PsndRate = 44100; break;\r
- }\r
-\r
- switch (combo_region->CurrentItem()) {\r
- case 4: config.s_PicoRegion = 1; break;\r
- case 3: config.s_PicoRegion = 2; break;\r
- case 2: config.s_PicoRegion = 4; break;\r
- case 1: config.s_PicoRegion = 8; break;\r
- default:config.s_PicoRegion = 0; // auto\r
- }\r
-\r
- return ETrue;\r
-}\r
-\r
-// simple GUI stuff needs lots of code\r
-void CPicoConfigDialog::HandleControlStateChangeL(TInt aControlId)\r
-{\r
- if (aControlId == ECtlOptEnableSound)\r
- {\r
- CEikCheckBox *chkbox_sound = (CEikCheckBox*) Control( ECtlOptEnableSound );\r
- CEikCheckBox *chkbox_z80 = (CEikCheckBox*) Control( ECtlOptEmulateZ80 );\r
- CEikCheckBox *chkbox_ym2612 = (CEikCheckBox*) Control( ECtlOptEmulateYM2612 );\r
- CEikCheckBox *chkbox_sn76496= (CEikCheckBox*) Control( ECtlOptEmulateSN76496 );\r
-\r
- if(chkbox_sound->State() == CEikButtonBase::ESet) {\r
- // check all sound chips too, but only if they all are not set\r
- if((chkbox_z80->State() | chkbox_ym2612->State() | chkbox_sn76496->State()) == CEikButtonBase::EClear) { // (==0)\r
- chkbox_z80 ->SetState(CEikButtonBase::ESet);\r
- chkbox_ym2612 ->SetState(CEikButtonBase::ESet);\r
- chkbox_sn76496->SetState(CEikButtonBase::ESet);\r
- chkbox_z80 ->DrawDeferred();\r
- chkbox_ym2612 ->DrawDeferred();\r
- chkbox_sn76496->DrawDeferred();\r
- }\r
- } else {\r
- // clear everything, but only if everything is set\r
- if((chkbox_z80->State() & chkbox_ym2612->State() & chkbox_sn76496->State()) == CEikButtonBase::ESet) { // (==1)\r
- chkbox_z80 ->SetState(CEikButtonBase::EClear);\r
- chkbox_ym2612 ->SetState(CEikButtonBase::EClear);\r
- chkbox_sn76496->SetState(CEikButtonBase::EClear);\r
- chkbox_z80 ->DrawDeferred();\r
- chkbox_ym2612 ->DrawDeferred();\r
- chkbox_sn76496->DrawDeferred();\r
- }\r
- }\r
- }\r
- else if(aControlId == ECtlOptUseAltRend || aControlId == ECtlOptRotation)\r
- {\r
- CEikCheckBox *chkbox_altrend= (CEikCheckBox*) Control( ECtlOptUseAltRend );\r
-// CEikCheckBox *chkbox_accsprt= (CEikCheckBox*) Control( ECtlOptUseAccSprites );\r
- CEikHorOptionButtonList *buttons_rot = (CEikHorOptionButtonList*) Control( ECtlOptRotation );\r
- CEikHorOptionButtonList *buttons_disp = (CEikHorOptionButtonList*) Control( ECtlOptScreenMode );\r
- CEikOptionButton *opt_fit = (CEikOptionButton*) buttons_disp->ComponentControl( TPicoConfig::PMFit );\r
- CEikOptionButton *opt_fit2 = (CEikOptionButton*) buttons_disp->ComponentControl( TPicoConfig::PMFit2 );\r
-\r
- TBool dimmed = chkbox_altrend->State() == CEikButtonBase::ESet;\r
- // show/hide more stuff for alternative renderer\r
-// chkbox_accsprt->SetDimmed(dimmed);\r
- if(buttons_rot->LabeledButtonId() == ECtlOptRotation0 || buttons_rot->LabeledButtonId() == ECtlOptRotation180) {\r
- opt_fit->SetDimmed(dimmed);\r
- if(dimmed && buttons_disp->LabeledButtonId() == ECtlOptScreenModeFit)\r
- buttons_disp->SetButtonById(ECtlOptScreenModeFit2);\r
- }\r
- else opt_fit->SetDimmed(EFalse);\r
-// chkbox_accsprt->DrawDeferred();\r
- buttons_disp->DrawDeferred();\r
-\r
- if(buttons_rot->LabeledButtonId() == ECtlOptRotation0 || buttons_rot->LabeledButtonId() == ECtlOptRotation180) {\r
- opt_fit2->SetDimmed(EFalse);\r
- } else {\r
- if(opt_fit2->State() == CEikButtonBase::ESet) {\r
- buttons_disp->SetButtonById(ECtlOptScreenModeFit);\r
- buttons_disp->DrawDeferred();\r
- }\r
- opt_fit2->SetDimmed(ETrue);\r
- }\r
- opt_fit2->DrawDeferred();\r
- }\r
-}\r
-\r
-\r
-/************************************************\r
- *\r
- * About Dialog\r
- *\r
- ************************************************/\r
-\r
-void CAboutDialog::PostLayoutDynInitL()\r
-{\r
- TBuf<16> versionText;\r
- TBuf<512> text;\r
-\r
- #if (KPicoBuildNumber != 0)\r
- versionText.Format(_L("%d.%d%d"), KPicoMajorVersionNumber, KPicoMinorVersionNumber, KPicoBuildNumber);\r
- #else\r
- versionText.Format(_L("%d.%d"), KPicoMajorVersionNumber, KPicoMinorVersionNumber);\r
- #endif\r
-\r
- CEikRichTextEditor* richTextEd = LocateControlByUniqueHandle<CEikRichTextEditor>(ECtlPicoAboutText);\r
- User::LeaveIfNull(richTextEd);\r
-\r
- HBufC *aboutFormat = CEikonEnv::Static()->AllocReadResourceLC(R_PICO_TEXT_ABOUT);\r
- CSimpleTextFormatParser *parser = CSimpleTextFormatParser::NewLC();\r
-\r
- text.Format(*aboutFormat, &versionText);\r
- parser->ParseL(text, *richTextEd->RichText());\r
-\r
- richTextEd->UpdateAllFieldsL(); // Updates all the fields in the document\r
-\r
- CleanupStack::PopAndDestroy(parser);\r
- CleanupStack::PopAndDestroy(aboutFormat);\r
-}\r
-\r
-/*************************************************************\r
-*\r
-* Credits dialog\r
-*\r
-**************************************************************/\r
-\r
-void CCreditsDialog::PreLayoutDynInitL()\r
-{\r
- CEikEdwin *edwin = LocateControlByUniqueHandle<CEikEdwin>(ECtlPicoCreditsText);\r
- User::LeaveIfNull(edwin);\r
-\r
- CDesCArrayFlat* desArray = CEikonEnv::Static()->ReadDesCArrayResourceL(R_PICO_TBUF_CREDITS);\r
- CleanupStack::PushL(desArray);\r
-\r
- edwin->SetTextLimit(2048); // to prevent stupid "too big" warning\r
- TInt count = desArray->Count();\r
- for (TInt i = 0; i < count; i++)\r
- {\r
- edwin->Text()->InsertL(edwin->TextLength(), desArray->operator[](i));\r
- edwin->Text()->InsertL(edwin->TextLength(), CEditableText::ELineBreak);\r
- }\r
- CleanupStack::PopAndDestroy(desArray);\r
-}\r
-\r
-TKeyResponse CCreditsDialog::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)\r
-{\r
- if (aType == EEventKey)\r
- {\r
- CEikEdwin *edwin = LocateControlByUniqueHandle<CEikEdwin>(ECtlPicoCreditsText);\r
- User::LeaveIfNull(edwin);\r
-\r
- if (aKeyEvent.iCode == EQuartzKeyTwoWayDown)\r
- {\r
- edwin->MoveDisplayL(TCursorPosition::EFLineDown);\r
- edwin->UpdateScrollBarsL();\r
- return EKeyWasConsumed;\r
- }\r
- else if (aKeyEvent.iCode == EQuartzKeyTwoWayUp)\r
- {\r
- edwin->MoveDisplayL(TCursorPosition::EFLineUp);\r
- edwin->UpdateScrollBarsL();\r
- return EKeyWasConsumed;\r
- }\r
- }\r
- return CQikSimpleDialog::OfferKeyEventL(aKeyEvent, aType);\r
-}\r
-\r
-/*************************************************************\r
-*\r
-* Debug dialog\r
-*\r
-**************************************************************/\r
-\r
-CDebugDialog::CDebugDialog(char *t)\r
-{\r
- Mem::Copy(iText, t, 1024);\r
- iText[1023] = 0;\r
-}\r
-\r
-void CDebugDialog::PreLayoutDynInitL()\r
-{\r
- char *p = iText, *line = iText;\r
- TBool end=0;\r
- TBuf<128> tbuf;\r
- CEikEdwin *editor = LocateControlByUniqueHandle<CEikEdwin>(ECtlPicoCreditsText);\r
-\r
- while(!end) {\r
- while(*p && *p != '\r' && *p != '\n') p++;\r
- if(!*p) end=1;\r
- *p = 0;\r
- TPtrC8 ptr((TUint8*) line);\r
- tbuf.Copy(ptr);\r
- editor->Text()->InsertL(editor->TextLength(), tbuf);\r
- editor->Text()->InsertL(editor->TextLength(), CEditableText::ELineBreak);\r
- line = ++p;\r
- }\r
-}\r