--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testapps/rschandler/Common/src/ResourceHandler_Dialogs.cpp Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,1325 @@
+// Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#include <e32svr.h>
+#include "ResourceHandler.h"
+
+//
+// Thread Dialog
+//
+
+CThreadNumberDialog::CThreadNumberDialog()
+ {
+ }
+
+void CThreadNumberDialog::PreLayoutDynInitL()
+ {
+ // to start use the thread ID of this thread
+ iThreadID = RThread().Id();
+ UpdateDialogData();
+ }
+
+void CThreadNumberDialog::PostLayoutDynInitL()
+ {
+
+ }
+
+void CThreadNumberDialog::UpdateDialogData()
+ {
+ if (iThreadID > 0) UpdateDialogDataReal(); // Real thread
+ else UpdateDialogDataAll(); // 0 for all unprotected threads
+ }
+
+void CThreadNumberDialog::UpdateDialogDataAll()
+//update dialog - set for all threads
+ {
+ // match controls and set values
+ CXIKNUMBEREDITOR *thisNumberEditor;
+ thisNumberEditor = STATIC_CAST(CXIKNUMBEREDITOR*, Control(EThreadNumberCtl));
+ thisNumberEditor->SETNUMBERVALUEL(0);
+
+ CEikCheckBox *sysCheckBox, *protCheckBox;
+ sysCheckBox = STATIC_CAST(CEikCheckBox*,Control(EThreadSystemCtl));
+ protCheckBox = STATIC_CAST(CEikCheckBox*,Control(EThreadProtectedCtl));
+
+ CEikCommandButton *killBut, *okBut, *setBut;
+ killBut = STATIC_CAST(CEikCommandButton*, ButtonGroupContainer().CommandButtonOrNull(EThreadKillButtonCtl));
+ okBut = STATIC_CAST(CEikCommandButton*, ButtonGroupContainer().CommandButtonOrNull(EEikBidOk));
+ setBut = STATIC_CAST(CEikCommandButton*, ButtonGroupContainer().CommandButtonOrNull(EThreadSetButtonCtl));
+ CEikLabel *priorityDialogPrompt, *priorityNumberLabel;
+ priorityNumberLabel = STATIC_CAST(CEikLabel*, Control(EThreadPriorityText));
+ priorityDialogPrompt = STATIC_CAST(CEikLabel*, Control(EThreadPriorityPrompt));
+
+ priorityDialogPrompt->SetTextL(_L("Cannot set priority for all threads."));
+
+#ifdef UIQ
+ CEikLabel *theThreadLabel, *theProcessLabel;
+ theThreadLabel = STATIC_CAST(CEikLabel*, Control(EThreadLabelThreadName));
+ theProcessLabel = STATIC_CAST(CEikLabel*, Control(EThreadLabelProcessName));
+ theProcessLabel->SetTextL(_L("Various"));
+ theThreadLabel->SetTextL(_L("All unprotected"));
+#endif
+#ifdef TV
+ CEikLabel *threadAndProcessLabel;
+ threadAndProcessLabel = STATIC_CAST(CEikLabel*, Control(EThreadLabelThreadAndProcessName));
+ threadAndProcessLabel->SetTextL(_L("All threads/processes"));
+#endif
+ CEikChoiceList *prioritySelector;
+ prioritySelector = STATIC_CAST(CEikChoiceList*, Control(EThreadPriorityButtonCtl));
+
+
+ // Change the dimming on the component controls as appropriate for all threads
+ protCheckBox->SetDimmed(ETrue);
+ sysCheckBox->SetDimmed(EFalse);
+
+ prioritySelector->MakeVisible(EFalse);
+
+ priorityNumberLabel->MakeVisible(EFalse);
+
+ killBut->SetDimmed(ETrue);
+ okBut->SetDimmed(EFalse);
+ setBut->SetDimmed(EFalse);
+ DrawNow();
+
+ }
+
+//updates dialog depending on iThreadID
+void CThreadNumberDialog::UpdateDialogDataReal()
+ {
+ // match controls
+ CXIKNUMBEREDITOR *thisNumberEditor;
+ thisNumberEditor = STATIC_CAST(CXIKNUMBEREDITOR*, Control(EThreadNumberCtl));
+ thisNumberEditor->SETNUMBERVALUEL(0);
+
+ CEikCheckBox *sysCheckBox, *protCheckBox;
+ sysCheckBox = STATIC_CAST(CEikCheckBox*,Control(EThreadSystemCtl));
+ protCheckBox = STATIC_CAST(CEikCheckBox*,Control(EThreadProtectedCtl));
+
+ CEikCommandButton *killBut, *okBut, *setBut;
+ okBut = STATIC_CAST(CEikCommandButton*, ButtonGroupContainer().CommandButtonOrNull(EEikBidOk));
+ setBut = STATIC_CAST(CEikCommandButton*, ButtonGroupContainer().CommandButtonOrNull(EThreadSetButtonCtl));
+ killBut = STATIC_CAST(CEikCommandButton*, ButtonGroupContainer().CommandButtonOrNull(EThreadKillButtonCtl));
+
+#ifdef UIQ
+ CEikLabel *theThreadLabel, *theProcessLabel;
+ theThreadLabel = STATIC_CAST(CEikLabel*, Control(EThreadLabelThreadName));
+ theProcessLabel = STATIC_CAST(CEikLabel*, Control(EThreadLabelProcessName));
+#endif
+#ifdef TV
+ CEikLabel *threadAndProcessLabel;
+ threadAndProcessLabel = STATIC_CAST(CEikLabel*, Control(EThreadLabelThreadAndProcessName));
+#endif
+
+ CEikChoiceList *priorityOpButs;
+ priorityOpButs = STATIC_CAST(CEikChoiceList*, Control(EThreadPriorityButtonCtl));
+
+ //
+ //Update dialog info with thread details
+ //
+
+ RThread thread;
+ TInt err = KErrNone;
+
+ err = thread.Open(iThreadID);
+
+ if (err!=KErrNone)
+ {
+ thread.Close();
+ TBuf<70> errorMessage(_L("Cannot get thread number "));
+ errorMessage.AppendNum(iThreadID);
+ errorMessage.Append(_L(". Thread::Open()"));
+ DisplayError(errorMessage, err);
+ thread.Open(RThread().Id()); // Get this thread
+ }
+
+ thisNumberEditor->SETNUMBERVALUEL(thread.Id());
+
+#ifdef UIQ
+ theThreadLabel->SetTextL(thread.Name());
+#endif
+#ifdef TV
+ TBuf<150> lProcessAndThread(thread.Name());
+#endif
+
+ RProcess process;
+ thread.Process(process);
+#ifdef UIQ
+ theProcessLabel->SetTextL(process.Name());
+#endif
+#ifdef TV
+ lProcessAndThread.Append(_L("/"));
+ lProcessAndThread.Append(process.Name());
+ threadAndProcessLabel->SetTextL(lProcessAndThread);
+#endif
+ process.Close();
+
+ CEikLabel *priorityDialogPrompt, *priorityNumberLabel;
+
+ priorityDialogPrompt = STATIC_CAST(CEikLabel*, Control(EThreadPriorityPrompt));
+ if ( iThreadID == RThread().Id()) priorityDialogPrompt->SetTextL(_L("The priority of the current thread cannot be reset from within this application."));
+ else priorityDialogPrompt->SetTextL(_L("Set the priority."));
+
+ priorityNumberLabel = STATIC_CAST(CEikLabel*, Control(EThreadPriorityText));
+ TBuf<30> priorityText(_L("Priority Value: "));
+ TBuf<4> priorityNumber;
+
+ priorityNumber.Format(KFormatDec,thread.Priority());
+ priorityText.Append(priorityNumber);
+ priorityNumberLabel->SetTextL(priorityText);
+
+ TThreadPriority lThreadPriority = thread.Priority();
+ TInt lThreadPrioritySetting;
+ switch (lThreadPriority)
+ {
+ case(EPriorityAbsoluteHigh): lThreadPrioritySetting = EThreadP500_AbsoluteHigh; break;
+ case(EPriorityAbsoluteForeground): lThreadPrioritySetting = EThreadP400_AbsoluteForeground; break;
+ case(EPriorityAbsoluteBackground): lThreadPrioritySetting = EThreadP300_AbsoluteBackground; break;
+ case(EPriorityAbsoluteLow): lThreadPrioritySetting = EThreadP200_AbsoluteLow; break;
+ case(EPriorityAbsoluteVeryLow): lThreadPrioritySetting = EThreadP100_AbsoluteVeryLow; break;
+ case(EPriorityRealTime): lThreadPrioritySetting = EThreadP30_RealTime; break;
+ case(EPriorityMuchMore): lThreadPrioritySetting = EThreadP20_MuchMore; break;
+ case(EPriorityMore): lThreadPrioritySetting = EThreadP10_More; break;
+ case(EPriorityNormal): lThreadPrioritySetting = EThreadP0_Normal; break;
+ case(EPriorityLess): lThreadPrioritySetting = EThreadPm10_Less; break;
+ case(EPriorityMuchLess): lThreadPrioritySetting = EThreadPm20_MuchLess; break;
+ case(EPriorityNull): lThreadPrioritySetting = EThreadPm30_Null; break;
+ default: lThreadPrioritySetting = EThreadP_NotStandard; break;
+ }
+
+ priorityOpButs->SetCurrentItem(lThreadPrioritySetting);
+
+ sysCheckBox->SetState(CEikButtonBase::EIndeterminate);
+ protCheckBox->SetState(CEikButtonBase::EIndeterminate);
+
+ // Change the dimming on the component controls depending on the thread
+ sysCheckBox->SetDimmed(EFalse);
+
+ if ( iThreadID == RThread().Id()) priorityOpButs->SetDimmed(ETrue);
+ else priorityOpButs->SetDimmed(EFalse);
+
+ killBut->SetDimmed(EFalse);
+ okBut->SetDimmed(EFalse);
+ setBut->SetDimmed(EFalse);
+
+ if (iThreadID == RThread().Id())
+ {
+ // can change the protection on this thread
+ protCheckBox->SetDimmed(EFalse);
+ }
+ else
+ {
+ // cannot change protection
+ protCheckBox->SetDimmed(ETrue);
+ if (true) // If we are in secure then we ensure that the
+ // user can not change anything.
+ {
+ // cannot change anything
+ sysCheckBox->SetDimmed(ETrue);
+ priorityOpButs->SetDimmed(ETrue);
+ killBut->SetDimmed(ETrue);
+ okBut->SetDimmed(ETrue);
+ setBut->SetDimmed(ETrue);
+ }
+
+ }
+
+ thread.Close();
+ DrawNow();
+
+ }
+
+void CThreadNumberDialog::UpdatePriorityText()
+//updates the priority number value to correspond to the priority option selected
+ {
+
+ }
+
+void CThreadNumberDialog::HandleControlStateChangeL(TInt aControlId)
+ {
+ if (aControlId == EThreadGetButtonCtl)
+ {
+ CXIKNUMBEREDITOR *thisNumberEditor;
+ thisNumberEditor = STATIC_CAST(CXIKNUMBEREDITOR*, Control(EThreadNumberCtl));
+ iThreadID = (TThreadId)thisNumberEditor->NUMBERVALUE();
+ // re-evaluate everything
+ UpdateDialogData();
+
+ // re-draw
+ PageChangedL(EThreadPageGeneral);
+ PageChangedL(EThreadPagePriority);
+ PageChangedL(EThreadPageOther);
+ DrawNow();
+ }
+ }
+
+void CThreadNumberDialog::SetThread()
+ {
+ //change thread parameters
+ if (iThreadID > 0)
+ {
+ // only get here if thread is not protected
+
+
+ RThread thread;
+ TInt err = thread.Open(iThreadID);
+
+ if (err == KErrNone)
+ {
+ // This is the current thread
+ if ( iThreadID == RThread().Id())
+ {
+ }
+
+
+
+ CEikChoiceList *opButs;
+ opButs = STATIC_CAST(CEikChoiceList*, Control(EThreadPriorityButtonCtl));
+
+ TThreadPriority threadPrioritySet = EPriorityNull;
+ TInt currentItem = opButs->CurrentItem();
+
+ switch (currentItem)
+ {
+ case (EThreadP500_AbsoluteHigh): threadPrioritySet=EPriorityAbsoluteHigh; break;
+ case (EThreadP400_AbsoluteForeground): threadPrioritySet=EPriorityAbsoluteForeground; break;
+ case (EThreadP300_AbsoluteBackground): threadPrioritySet=EPriorityAbsoluteBackground; break;
+ case (EThreadP200_AbsoluteLow): threadPrioritySet=EPriorityAbsoluteLow; break;
+ case (EThreadP100_AbsoluteVeryLow): threadPrioritySet=EPriorityAbsoluteVeryLow; break;
+ case (EThreadP30_RealTime): threadPrioritySet=EPriorityRealTime; break;
+ case (EThreadP20_MuchMore): threadPrioritySet=EPriorityMuchMore; break;
+ case (EThreadP10_More): threadPrioritySet=EPriorityMore; break;
+ case (EThreadP0_Normal): threadPrioritySet=EPriorityNormal; break;
+ case (EThreadPm10_Less): threadPrioritySet=EPriorityLess; break;
+ case (EThreadPm20_MuchLess): threadPrioritySet=EPriorityMuchLess; break;
+ case (EThreadPm30_Null): threadPrioritySet=EPriorityNull;
+ iEikonEnv->InfoWinL(_L("Error"), _L("Cannot change thread priority to Null"));
+ break;
+ default: iEikonEnv->InfoWinL(_L("Error"), _L("Invalid priority: cannot change thread priority to Not Standard"));
+
+ };
+
+ if (threadPrioritySet != EPriorityNull)
+ {
+ thread.SetPriority(threadPrioritySet);
+
+ TThreadPriority threadPriorityGot = thread.Priority();
+ if (threadPrioritySet!=threadPriorityGot)
+ {
+ iEikonEnv->InfoWinL(_L("Error"), _L("Thread priority not set: RThread::SetPriority() unsuccessful!"));
+ }
+ thread.Close();
+ }
+ }
+ }
+ else //all threads selected - only changes system setting
+ {
+
+ TName prefix(KAsterisk);
+ TFindThread findHb;
+ findHb.Find(prefix);
+ TFullName name; // this is a TBuf
+ RThread thread;
+
+ while (findHb.Next(name)==KErrNone)
+ {
+ TInt err = thread.Open(name);
+ if (err != KErrNone)
+ {
+ TBuf<70> errorMessage(_L("Cannot get thread "));
+ errorMessage.Append(name);
+ errorMessage.Append(_L(". RThread::Open()"));
+ DisplayError(errorMessage, err);
+ }
+
+ if (err == KErrNone)
+ {
+
+
+ thread.Close();
+ }
+ }
+ }
+ }
+
+TBool CThreadNumberDialog::OkToExitL(TInt aButtonId)
+ {
+ if (aButtonId == EEikBidCancel)
+ {
+ return ETrue;
+ }
+ else if (aButtonId == EThreadSetButtonCtl)
+ {
+ SetThread();
+ UpdateDialogData();
+ iEikonEnv->InfoMsg(_L("Attribute(s) set as displayed"));
+ return EFalse;
+ }
+ else if (aButtonId == EEikBidOk)
+ {
+ SetThread();
+ return ETrue;
+ }
+ else if (aButtonId == EThreadKillButtonCtl)
+ {
+ RThread thread;
+ TInt err = thread.Open(iThreadID);
+ if (err == KErrNone)
+ {
+ thread.Kill(KErrNone);
+ iEikonEnv->InfoMsg(_L("Thread Killed"));
+ }
+ else iEikonEnv->InfoWinL(_L("Error"), _L("Attempt to open thread for modification unsuccessful."));
+ thread.Close();
+ return EFalse;
+ }
+ return ETrue;
+ }
+
+//
+//
+// Process Dialog
+//
+//
+
+CProcessNumberDialog::CProcessNumberDialog()
+ {
+ }
+
+void CProcessNumberDialog::PreLayoutDynInitL()
+ {
+ // to start use the thread ID of this Process
+ iProcessID = RProcess().Id();
+ UpdateDialogData();
+ }
+
+void CProcessNumberDialog::PostLayoutDynInitL()
+ {
+ }
+
+void CProcessNumberDialog::UpdateDialogData()
+//Updates GUI data
+ {
+ // match the controls
+ CXIKNUMBEREDITOR *thisNumberEditor;
+ thisNumberEditor = STATIC_CAST(CXIKNUMBEREDITOR*, Control(EProcessNumberCtl));
+ CEikLabel *priorityTextLabel;
+ priorityTextLabel = STATIC_CAST(CEikLabel*, Control(EProcessPriorityText));
+
+ CEikCheckBox *sysCheckBox, *protCheckBox;
+ sysCheckBox = STATIC_CAST(CEikCheckBox*,Control(EProcessSystemCtl));
+ protCheckBox = STATIC_CAST(CEikCheckBox*,Control(EProcessProtectedCtl));
+
+ CEikCommandButton *killBut, *okBut, *setBut;
+ killBut = STATIC_CAST(CEikCommandButton*, ButtonGroupContainer().CommandButtonOrNull(EProcessKillButtonCtl));
+ okBut = STATIC_CAST(CEikCommandButton*, ButtonGroupContainer().CommandButtonOrNull(EEikBidOk));
+ setBut = STATIC_CAST(CEikCommandButton*, ButtonGroupContainer().CommandButtonOrNull(EProcessSetButtonCtl));
+
+ CEikLabel *theProcessLabel;
+ theProcessLabel = STATIC_CAST(CEikLabel*, Control(EProcessLabelProcessName));
+
+ CEikChoiceList *opButs;
+ opButs = STATIC_CAST(CEikChoiceList*, Control(EProcessPriorityButtonCtl));
+
+ //open a process and update GUI data
+ RProcess process;
+ TInt err = KErrNone;
+
+ err = process.Open(iProcessID); // Opens a handle to a process
+
+ if (err!=KErrNone)
+ {
+ TBuf<70> errorMessage(_L("Cannot get process number "));
+ errorMessage.AppendNum(iProcessID);
+ errorMessage.Append(_L(". System error number "));
+ errorMessage.AppendNum(err);
+
+ iEikonEnv->InfoWinL(_L("Error"), errorMessage);
+ iProcessID = RProcess().Id();
+ process.Open(iProcessID); // Opens a handle to this Process
+ }
+
+ thisNumberEditor->SETNUMBERVALUEL(process.Id());
+ theProcessLabel->SetTextL(process.Name());
+
+ TBuf<30> priorityText(_L("Priority Value: "));
+ TBuf<10> priorityNumber;
+ priorityNumber.Format(KFormatDec,process.Priority());
+ priorityText.Append(priorityNumber);
+ priorityTextLabel->SetTextL(priorityText);
+ if (process.Priority()==EPriorityLow) opButs->SetCurrentItem(EProcessP150_PriorityLow);
+ else if (process.Priority()==EPriorityBackground) opButs->SetCurrentItem(EProcessP250_PriorityBackground);
+ else if (process.Priority()==EPriorityForeground) opButs->SetCurrentItem(EProcessP350_PriorityForeground);
+ else if (process.Priority()==EPriorityHigh) opButs->SetCurrentItem(EProcessP450_PriorityHigh);
+ else if (process.Priority()==EPriorityWindowServer) opButs->SetCurrentItem(EProcessP650_PriorityWindowServer);
+ else if (process.Priority()==EPriorityFileServer) opButs->SetCurrentItem(EProcessP750_PriorityFileServer);
+ else if (process.Priority()==EPriorityRealTimeServer) opButs->SetCurrentItem(EProcessP850_PriorityRealTimeServer);
+ else if (process.Priority()==EPrioritySupervisor) opButs->SetCurrentItem(EProcessP950_PrioritySupervisor);
+ else (opButs->SetCurrentItem(EProcessPriorityNotStandard));
+
+
+ sysCheckBox->SetState(CEikButtonBase::EIndeterminate);
+ protCheckBox->SetState(CEikButtonBase::EIndeterminate);
+
+
+ // Change the dimming on the component controls depending on the Process
+ sysCheckBox->SetDimmed(EFalse);
+ opButs->SetDimmed(EFalse);
+ #ifdef WINS
+ opButs->SetDimmed(ETrue);
+ #endif
+
+ killBut->SetDimmed(EFalse);
+ okBut->SetDimmed(EFalse);
+ setBut->SetDimmed(EFalse);
+ if (iProcessID == RProcess().Id())
+ {
+ // can change the protection on this Process
+ protCheckBox->SetDimmed(EFalse);
+ }
+ else
+ {
+ // cannot change protection
+ protCheckBox->SetDimmed(ETrue);
+ if (true) // If we are in secure then we ensure that the
+ // user can not change anything.
+ {
+ // cannot change anything
+ sysCheckBox->SetDimmed(ETrue);
+ opButs->SetDimmed(ETrue);
+ killBut->SetDimmed(ETrue);
+ okBut->SetDimmed(ETrue);
+ setBut->SetDimmed(ETrue);
+ }
+ }
+ process.Close(); // Closes the handle
+ DrawNow();
+
+ }
+
+void CProcessNumberDialog::SetProcess()
+{
+ // only get here if Process is not protected
+
+
+ RProcess process;
+ TInt err = process.Open(iProcessID);
+
+ if (err == KErrNone)
+ {
+ // This is the current Process
+ if ( iProcessID == RProcess().Id())
+ {
+ }
+
+
+
+ CEikChoiceList *opButs;
+ TProcessPriority processPrioritySelected = EPriorityLow;
+
+ opButs = STATIC_CAST(CEikChoiceList*, Control(EProcessPriorityButtonCtl));
+
+ TInt currentItem = opButs->CurrentItem();
+ TBool validPrioritySelected = ETrue;
+
+ switch (currentItem)
+ {
+ case (EProcessP150_PriorityLow): processPrioritySelected=EPriorityLow; break;
+ case (EProcessP250_PriorityBackground): processPrioritySelected=EPriorityBackground; break;
+ case (EProcessP350_PriorityForeground): processPrioritySelected=EPriorityForeground; break;
+ case (EProcessP450_PriorityHigh): processPrioritySelected=EPriorityHigh; break;
+ case (EProcessP650_PriorityWindowServer):
+ case (EProcessP750_PriorityFileServer):
+ case (EProcessP850_PriorityRealTimeServer):
+ case (EProcessP950_PrioritySupervisor):
+ default: iEikonEnv->InfoWinL(_L("Error"), _L("This is an internal priority and cannot be explicitly set"));
+ validPrioritySelected = EFalse;
+ break;
+ }
+ if (validPrioritySelected == 1) process.SetPriority(processPrioritySelected);
+
+ }
+ process.Close();
+ }
+
+void CProcessNumberDialog::HandleControlStateChangeL(TInt aControlId)
+ {
+ if (aControlId == EProcessGetButtonCtl)
+ {
+ CXIKNUMBEREDITOR *thisNumberEditor;
+ thisNumberEditor = STATIC_CAST(CXIKNUMBEREDITOR*, Control(EProcessNumberCtl));
+ iProcessID = (TProcessId)thisNumberEditor->NUMBERVALUE();
+ // re-evaluate everything
+ UpdateDialogData();
+
+ // re-draw
+ PageChangedL(EProcessPageGeneral);
+ PageChangedL(EProcessPagePriority);
+ PageChangedL(EProcessPageOther);
+ DrawNow();
+ }
+ }
+
+TBool CProcessNumberDialog::OkToExitL(TInt aButtonId)
+ {
+ if (aButtonId == EEikBidCancel) // do nothing
+ {
+ return ETrue;
+ }
+ else if (aButtonId == EProcessSetButtonCtl)
+ {
+ SetProcess();
+ UpdateDialogData();
+ iEikonEnv->InfoMsg(_L("Attribute(s) set as displayed"));
+ return EFalse;
+ }
+ else if (aButtonId == EProcessKillButtonCtl)
+ {
+ RProcess Process;
+ TInt err = Process.Open(iProcessID);
+ if (err == KErrNone)
+ {
+ iEikonEnv->InfoMsg(_L("Killing Process"));
+ Process.Kill(KErrNone);
+ }
+ Process.Close();
+ iEikonEnv->InfoMsg(_L("Process killed"));
+ return EFalse;
+ }
+
+ else if (aButtonId == EEikBidOk)
+ {
+ SetProcess();
+ return ETrue;
+ }
+ else return ETrue;
+ }
+
+
+//
+//
+// Debug Dialog
+//
+//
+
+CDebugDialog::CDebugDialog()
+ {
+ }
+
+void CDebugDialog::PreLayoutDynInitL()
+ {
+ GetPortNumber();
+ GetKernelOptions();
+ }
+
+void CDebugDialog::GetPortNumber()
+ {
+ //map the control
+ CXIKNUMBEREDITOR *thisNumberEditor;
+ thisNumberEditor = static_cast<CXIKNUMBEREDITOR*>(Control(EDebugPortCtl));
+ //set control value
+ TInt debugPort, err;
+ err = HAL::Get(HAL::EDebugPort, debugPort);
+ if (err == KErrNone)
+ {
+ thisNumberEditor->SETNUMBERVALUEL(debugPort);
+ iCurrentDebugPort = debugPort;
+ }
+ else
+ {
+ thisNumberEditor->SETNUMBERVALUEL(-1);
+ iCurrentDebugPort = -1;
+ }
+
+ }
+
+void CDebugDialog::GetKernelOptions()
+ {
+ // Kernel debug mask
+
+ TUint32 debugMask = UserSvr::DebugMask();
+ //map the controls (check boxes) and set the control values
+
+ CEikCheckBox *aCheckBox;
+
+ aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKHARDWARE));
+ aCheckBox->SetState(debugMask & KHARDWARE ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+
+ aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKBOOT));
+ aCheckBox->SetState(debugMask & KBOOT ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+
+ aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKSERVER));
+ aCheckBox->SetState(debugMask & KSERVER ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+
+ aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKMMU));
+ aCheckBox->SetState(debugMask & KMMU ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+
+ aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKSEMAPHORE));
+ aCheckBox->SetState(debugMask & KSEMAPHORE ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+
+ aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKSCHED));
+ aCheckBox->SetState(debugMask & KSCHED ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+
+ aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKPROC));
+ aCheckBox->SetState(debugMask & KPROC ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+
+ aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKEXEC));
+ aCheckBox->SetState(debugMask & KEXEC ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+
+ aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKEXECFAST));
+ aCheckBox->SetState(debugMask & KEXECFAST ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+
+ aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKTHREAD));
+ aCheckBox->SetState(debugMask & KTHREAD ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+
+ aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKDLL));
+ aCheckBox->SetState(debugMask & KDLL ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+
+ aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKLOGON));
+ aCheckBox->SetState(debugMask & KLOGON ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+
+ aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKPBUS1));
+ aCheckBox->SetState(debugMask & KPBUS1 ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+
+ aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKPBUS2));
+ aCheckBox->SetState(debugMask & KPBUS2 ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+
+ aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKPBUSDRV));
+ aCheckBox->SetState(debugMask & KPBUSDRV ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+
+ aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKPOWER));
+ aCheckBox->SetState(debugMask & KPOWER ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+
+ aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKTIMING));
+ aCheckBox->SetState(debugMask & KTIMING ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+
+ aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKEVENT));
+ aCheckBox->SetState(debugMask & KEVENT ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+
+ aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKMEMTRACE));
+ aCheckBox->SetState(debugMask & KMEMTRACE ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+
+ aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKIPC));
+ aCheckBox->SetState(debugMask & KIPC ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+
+ aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKDEBUGGER));
+ aCheckBox->SetState(debugMask & KDEBUGGER ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+
+ aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKVIDEO));
+ aCheckBox->SetState(debugMask & KVIDEO ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+
+ aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKUSB));
+ aCheckBox->SetState(debugMask & KUSB ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+
+ aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKPANIC));
+ aCheckBox->SetState(debugMask & KPANIC ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+ }
+
+void CDebugDialog::SetDebugOptions()
+ {
+ TBuf<800> errorMssg; //to show where updates unsuccessful
+ //set new debug port
+ CXIKNUMBEREDITOR *thisNumberEditor;
+ thisNumberEditor = static_cast<CXIKNUMBEREDITOR*>(Control(EDebugPortCtl));
+ TInt newDebugPort = thisNumberEditor->NUMBERVALUE();
+
+ TInt err;
+ if (newDebugPort!=-1)
+ {
+ err = HAL::Set(HAL::EDebugPort, newDebugPort);
+ if (err==KErrNone) iCurrentDebugPort = newDebugPort;
+ else
+ {
+ TBuf<3> errorCode;
+ errorCode.Format(KFormatDec,err);
+ errorMssg.Append(_L("Cannot set port: System error "));
+ errorMssg.Append(errorCode);
+ errorMssg.Append('\n');
+ thisNumberEditor->SETNUMBERVALUEL(iCurrentDebugPort);
+ }
+ }
+ //set new Kernel debug values
+ CEikCheckBox *aCheckBox;
+ TUint32 debugMask = 0;
+ aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKHARDWARE));
+ if (aCheckBox->State()==CEikButtonBase::ESet) debugMask|=KHARDWARE;
+
+ aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKBOOT));
+ if (aCheckBox->State()==CEikButtonBase::ESet) debugMask|=KBOOT;
+
+ aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKSERVER));
+ if (aCheckBox->State()==CEikButtonBase::ESet) debugMask|=KSERVER;
+
+ aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKMMU));
+ if (aCheckBox->State()==CEikButtonBase::ESet) debugMask|=KMMU;
+
+ aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKSEMAPHORE));
+ if (aCheckBox->State()==CEikButtonBase::ESet) debugMask|=KSEMAPHORE;
+
+ aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKSCHED));
+ if (aCheckBox->State()==CEikButtonBase::ESet) debugMask|=KSCHED;
+
+ aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKPROC));
+ if (aCheckBox->State()==CEikButtonBase::ESet) debugMask|=KPROC;
+
+ aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKEXEC));
+ if (aCheckBox->State()==CEikButtonBase::ESet) debugMask|=KEXEC;
+
+ aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKEXECFAST));
+ if (aCheckBox->State()==CEikButtonBase::ESet) debugMask|=KEXECFAST;
+
+ aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKTHREAD));
+ if (aCheckBox->State()==CEikButtonBase::ESet) debugMask|=KTHREAD;
+
+ aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKDLL));
+ if (aCheckBox->State()==CEikButtonBase::ESet) debugMask|=KDLL;
+
+ aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKLOGON));
+ if (aCheckBox->State()==CEikButtonBase::ESet) debugMask|=KLOGON;
+
+ aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKPBUS1));
+ if (aCheckBox->State()==CEikButtonBase::ESet) debugMask|=KPBUS1;
+
+ aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKPBUS2));
+ if (aCheckBox->State()==CEikButtonBase::ESet) debugMask|=KPBUS2;
+
+ aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKPBUSDRV));
+ if (aCheckBox->State()==CEikButtonBase::ESet) debugMask|=KPBUSDRV;
+
+ aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKPOWER));
+ if (aCheckBox->State()==CEikButtonBase::ESet) debugMask|=KPOWER;
+
+ aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKTIMING));
+ if (aCheckBox->State()==CEikButtonBase::ESet) debugMask|=KTIMING;
+
+ aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKEVENT));
+ if (aCheckBox->State()==CEikButtonBase::ESet) debugMask|=KEVENT;
+
+ aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKMEMTRACE));
+ if (aCheckBox->State()==CEikButtonBase::ESet) debugMask|=KMEMTRACE;
+
+ aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKIPC));
+ if (aCheckBox->State()==CEikButtonBase::ESet) debugMask|=KIPC;
+
+ aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKDEBUGGER));
+ if (aCheckBox->State()==CEikButtonBase::ESet) debugMask|=KDEBUGGER;
+
+ aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKVIDEO));
+ if (aCheckBox->State()==CEikButtonBase::ESet) debugMask|=KVIDEO;
+
+ aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKUSB));
+ if (aCheckBox->State()==CEikButtonBase::ESet) debugMask|=KUSB;
+
+ aCheckBox = static_cast<CEikCheckBox*>(Control(EDebugKernelKPANIC));
+ if (aCheckBox->State()==CEikButtonBase::ESet) debugMask|=KPANIC;
+
+ User::SetDebugMask(debugMask);
+ TUint32 updatedDebugMask = UserSvr::DebugMask();
+ if (debugMask != updatedDebugMask)
+ {
+ errorMssg.Append(_L("Unable to set kernel options selected. Note that KPanic must be selected if any other options are selected. View the \nupdated dialog to see which Kernel options are set"));
+ GetKernelOptions();
+ }
+
+
+ CEikCheckBox *thisCheckBox, *thisCheckBox2, *thisCheckBox3;
+ thisCheckBox = static_cast<CEikCheckBox*>(Control(EDebugFileServerCtl));
+ thisCheckBox2 = static_cast<CEikCheckBox*>(Control(EDebugFATCtl));
+ thisCheckBox3 = static_cast<CEikCheckBox*>(Control(EDebugLoaderCtl));
+
+ TInt fsDebugMask = 0;
+ if (thisCheckBox->State()==CEikButtonBase::ESet) fsDebugMask|=KFSERV;
+ if (thisCheckBox2->State()==CEikButtonBase::ESet) fsDebugMask|=KFSYS;
+ if (thisCheckBox3->State()==CEikButtonBase::ESet) fsDebugMask|=KFLDR;
+
+ RFs aRFs;
+ err = aRFs.Connect();
+ if (err == KErrNone)
+ {
+ err = aRFs.SetDebugRegister(fsDebugMask);
+ if (err != KErrNone)
+ errorMssg.Append(_L("Unable to set FS options: RFs::SetDebugRegister() fails with System error number "));
+ TBuf<3> errorCode;
+ errorCode.Format(KFormatDec, err);
+ errorMssg.Append(errorCode);
+ }
+ else
+ {
+ errorMssg.Append(_L("\nRFs::Connect() fails with System error number "));
+ TBuf<3> errorCode;
+ errorCode.Format(KFormatDec, err);
+ errorMssg.Append(errorCode);
+ thisCheckBox->SetState(CEikButtonBase::EClear);
+ thisCheckBox2->SetState(CEikButtonBase::EClear);
+ thisCheckBox3->SetState(CEikButtonBase::EClear);
+ }
+ aRFs.Close();
+
+ if (errorMssg.Length() != 0)
+ {
+ _LIT(KDialogTitle, "Error");
+ iEikonEnv->InfoWinL(KDialogTitle, errorMssg);
+ }
+ }
+
+TBool CDebugDialog::OkToExitL(TInt aButtonId)
+ {
+ if (aButtonId == EDebugSetButtonCtl)
+ {
+ SetDebugOptions();
+ DrawNow();
+ return EFalse;
+ }
+ if (aButtonId == EEikBidOk)
+ {
+ SetDebugOptions();
+ }
+ else if (aButtonId == EEikBidCancel)
+ {
+ // Do Nothing
+ }
+ return ETrue;
+ }
+
+//
+//
+// Ram Dialog
+//
+//
+
+CRamDialog::CRamDialog()
+ {
+ noChunks = 0;
+ }
+
+void CRamDialog::PreLayoutDynInitL()
+ {
+ UpdateDialogData();
+ }
+
+void CRamDialog::UpdateDialogData()
+ {
+ CEikLabel *theTotalLabel, *theFreeLabel;
+ theTotalLabel = STATIC_CAST(CEikLabel*, Control(ERamTotal));
+ theFreeLabel = STATIC_CAST(CEikLabel*, Control(ERamFree));
+
+ TMemoryInfoV1Buf memorybuf;
+ UserHal::MemoryInfo(memorybuf);
+ TInt total=memorybuf().iTotalRamInBytes;
+ TInt free=memorybuf().iFreeRamInBytes;
+
+ TBuf<40> totalTxt;
+ totalTxt.Format(_L("Total RAM (bytes) %d"),total);
+ TBuf<40> freeTxt;
+ freeTxt.Format(_L("Free RAM (bytes) %d"),free);
+
+ theTotalLabel->SetTextL(totalTxt);
+ theFreeLabel->SetTextL(freeTxt);
+
+ CXIKOPTIONBUTTONLIST *fillSpaceOpButs;
+ fillSpaceOpButs = STATIC_CAST(CXIKOPTIONBUTTONLIST*, Control(ERamToLeaveButtonCtl));
+
+ // All buttons invisible
+ fillSpaceOpButs->ComponentControl(0)->MakeVisible(ETrue);
+ fillSpaceOpButs->ComponentControl(1)->MakeVisible(ETrue);
+ fillSpaceOpButs->ComponentControl(2)->MakeVisible(ETrue);
+ fillSpaceOpButs->ComponentControl(3)->MakeVisible(ETrue);
+ fillSpaceOpButs->ComponentControl(4)->MakeVisible(ETrue);
+
+ if (free<K4k)
+ {
+ // All buttons visible
+ fillSpaceOpButs->ComponentControl(0)->MakeVisible(EFalse);
+ fillSpaceOpButs->ComponentControl(1)->MakeVisible(EFalse);
+ fillSpaceOpButs->ComponentControl(2)->MakeVisible(EFalse);
+ fillSpaceOpButs->ComponentControl(3)->MakeVisible(EFalse);
+ fillSpaceOpButs->ComponentControl(4)->MakeVisible(EFalse);
+ }
+ else if (free>=K4k && free<K8k)
+ {
+ fillSpaceOpButs->ComponentControl(1)->MakeVisible(EFalse);
+ fillSpaceOpButs->ComponentControl(2)->MakeVisible(EFalse);
+ fillSpaceOpButs->ComponentControl(3)->MakeVisible(EFalse);
+ fillSpaceOpButs->ComponentControl(4)->MakeVisible(EFalse);
+ fillSpaceOpButs->SetButtonById(ERamLeave4K);
+ }
+ else if (free>=K8k && free<K16k)
+ {
+ fillSpaceOpButs->ComponentControl(2)->MakeVisible(EFalse);
+ fillSpaceOpButs->ComponentControl(3)->MakeVisible(EFalse);
+ fillSpaceOpButs->ComponentControl(4)->MakeVisible(EFalse);
+ fillSpaceOpButs->SetButtonById(ERamLeave8K);
+ }
+ else if (free>=K16k && free<K64k)
+ {
+ fillSpaceOpButs->ComponentControl(3)->MakeVisible(EFalse);
+ fillSpaceOpButs->ComponentControl(4)->MakeVisible(EFalse);
+ fillSpaceOpButs->SetButtonById(ERamLeave16K);
+ }
+ else if (free>= K64k && free<K256k)
+ {
+ fillSpaceOpButs->ComponentControl(4)->MakeVisible(EFalse);
+ fillSpaceOpButs->SetButtonById(ERamLeave64K);
+ }
+ else
+ {
+ fillSpaceOpButs->SetButtonById(ERamLeave256K);
+ }
+ }
+
+void CRamDialog::UndoFillRam()
+ {
+ if (noChunks == 0) iEikonEnv->InfoMsg(_L("Undo fill invalid"));
+ else
+ {
+ while (noChunks>0)
+ {
+ chunks[--noChunks].Close();
+ }
+ }
+}
+void CRamDialog::FillRam()
+ {
+ iEikonEnv->BusyMsgL(_L("Filling RAM"));
+
+ CXIKOPTIONBUTTONLIST *opButs;
+ opButs = STATIC_CAST(CXIKOPTIONBUTTONLIST*, Control(ERamToLeaveButtonCtl));
+
+ TUint ramToLeave=K4k;
+ if (opButs->LabeledButtonId()==ERamLeave4K) ramToLeave=K4k;
+ else if (opButs->LabeledButtonId()==ERamLeave8K) ramToLeave=K8k;
+ else if (opButs->LabeledButtonId()==ERamLeave16K) ramToLeave=K16k;
+ else if (opButs->LabeledButtonId()==ERamLeave64K) ramToLeave=K64k;
+ else if (opButs->LabeledButtonId()==ERamLeave256K) ramToLeave=K256k;
+
+
+ TUint chunkSize;
+ TInt err = KErrNone;
+ TBuf<20> aName;
+ TTime time;
+
+ TMemoryInfoV1Buf memorybuf;
+ UserHal::MemoryInfo(memorybuf);
+
+ // Fill the RAM up with various chunks
+ for (chunkSize = K8M; chunkSize>=ramToLeave; chunkSize>>=1)
+ {
+ TUint KMaxChunks = 10000;
+ for (err=KErrNone; err==KErrNone && noChunks<KMaxChunks;)
+ {
+ // create a unique chunk name
+ time.UniversalTime();
+ aName.Format(_L("%S%02d-%08x"),&KFillName, noChunks,*(reinterpret_cast<const TInt32*>(&(time.Int64()))));
+
+ err = chunks[noChunks].CreateGlobal(aName, chunkSize, chunkSize);
+ // ensure RAM is committed by filling it
+ if (err==KErrNone)
+ {
+ Mem::Fill(chunks[noChunks++].Base(),chunkSize,'A');
+ }
+ User::CompressAllHeaps();
+ } ;
+ }
+ iEikonEnv->BusyMsgCancel();
+ if (err == KErrNone) iEikonEnv->InfoMsg(_L("Fill Complete"));
+ }
+
+TBool CRamDialog::OkToExitL(TInt aButtonId)
+ {
+ if (aButtonId == EEikBidCancel)
+ {
+ return ETrue;
+ }
+ else if (aButtonId == ERamSetButtonCtl)
+ {
+ FillRam();
+ UpdateDialogData();
+ DrawNow();
+ return EFalse;
+ }
+ else if (aButtonId == ERamUndoFillButtonCtl)
+ {
+ UndoFillRam();
+ UpdateDialogData();
+ DrawNow();
+ return EFalse;
+ }
+ return ETrue;
+ }
+
+//
+//
+// Drive Dialog
+//
+//
+
+CDriveDialog::CDriveDialog() : iDriveName(NULL), iDriveLetter(NULL)
+ {
+ }
+
+CDriveDialog::~CDriveDialog()
+ {
+ delete iDriveLetter;
+ delete iDriveName;
+ }
+
+void CDriveDialog::PreLayoutDynInitL()
+ {
+ iDriveName = new (ELeave) CDesCArrayFlat(KMaxLocalDrives);
+ iDriveLetter = new CArrayFixFlat<TInt>(KMaxLocalDrives);
+
+ TBuf<40> string; // displayed in choice box
+ RFs rfs;
+ User::LeaveIfError(rfs.Connect());
+ TDriveInfo driveInfo;
+ TVolumeInfo volumeInfo;
+ TDriveUnit driveUnit(EDriveA);
+ TInt err1,err2,drive=0,number=0;
+
+ do {
+
+ driveUnit = drive;
+ err1 = rfs.Volume(volumeInfo,driveUnit);
+ err2 = rfs.Drive(driveInfo, driveUnit);
+ if (err1==KErrNone && err2==KErrNone)
+ {
+
+ // Only interested if not ROM and local
+
+ if (volumeInfo.iDrive.iType != EMediaRom &&
+ (volumeInfo.iDrive.iDriveAtt | KDriveAttLocal))
+ {
+ number++;
+
+ string.Delete(0,string.MaxLength());
+
+ string=driveUnit.Name();
+
+ string.Append(_L(" "));
+ string.Append(volumeInfo.iName);
+
+ iDriveName->AppendL(string);
+ iDriveLetter->AppendL(drive);
+ }
+ }
+
+ drive++;
+
+ } while (drive <= EDriveZ && number < KMaxLocalDrives);
+
+ rfs.Close();
+
+ CEikChoiceList *driveChoice;
+ driveChoice = STATIC_CAST(CEikChoiceList*, Control(EDriveChoiceList));
+ driveChoice->SetArrayL(iDriveName);
+ driveChoice->SetArrayExternalOwnership(ETrue);
+
+
+ CXIKOPTIONBUTTONLIST *fillSpaceOpButs;
+ fillSpaceOpButs = STATIC_CAST(CXIKOPTIONBUTTONLIST*, Control(EDriveToLeaveButtonCtl));
+ fillSpaceOpButs->SetButtonById(EDriveLeave256K);
+ }
+
+
+void UpdateDialogLeaveSpace()
+ {
+ }
+
+TBool CDriveDialog::OkToExitL(TInt aButtonId)
+ {
+ if (aButtonId == EEikBidCancel)
+ {
+ delete iDriveName;
+ delete iDriveLetter;
+ return ETrue;
+ }
+ else
+ {
+ CEikChoiceList *driveChoice;
+ driveChoice = STATIC_CAST(CEikChoiceList*, Control(EDriveChoiceList));
+ TInt choice = driveChoice->CurrentItem();
+ TDriveUnit driveUnit;
+ driveUnit = (*iDriveLetter)[choice];
+
+ RFs aRfs;
+ User::LeaveIfError(aRfs.Connect());
+
+ CXIKOPTIONBUTTONLIST *fillSpaceOpButs;
+ fillSpaceOpButs = STATIC_CAST(CXIKOPTIONBUTTONLIST*, Control(EDriveToLeaveButtonCtl));
+
+ if (aButtonId==EDriveFillButtonCtl)
+ {
+ iEikonEnv->BusyMsgL(_L("Filling Drive"));
+ // need a unique file name
+ TInt i=0,err = KErrNone;
+ TFileName fileName;
+ TTime time;
+
+ TInt fileSize;
+
+ CXIKOPTIONBUTTONLIST *fillSpaceOpButs;
+ fillSpaceOpButs = STATIC_CAST(CXIKOPTIONBUTTONLIST*, Control(EDriveToLeaveButtonCtl));
+
+ TInt spaceToLeave=K4k;
+ if (fillSpaceOpButs->LabeledButtonId()==EDriveLeave4K) spaceToLeave=K4k;
+ else if (fillSpaceOpButs->LabeledButtonId()==EDriveLeave8K) spaceToLeave=K8k;
+ else if (fillSpaceOpButs->LabeledButtonId()==EDriveLeave16K) spaceToLeave=K16k;
+ else if (fillSpaceOpButs->LabeledButtonId()==EDriveLeave64K) spaceToLeave=K64k;
+ else if (fillSpaceOpButs->LabeledButtonId()==EDriveLeave256K) spaceToLeave=K256k;
+
+ for (fileSize = K1M; fileSize>=spaceToLeave; fileSize>>=1)
+ {
+
+ do {
+ time.UniversalTime();
+ TDriveName driveName = driveUnit.Name();
+ fileName.Format(_L("%S\\%S%06d-%08x"),&driveName,&KFillName,++i,*(reinterpret_cast<const TInt32*>(&(time.Int64()))));
+
+ // create a file of this file size
+ RFile file;
+ err=file.Create(aRfs, fileName, EFileRead|EFileWrite);
+ if (err!=KErrNone)
+ {
+ TBuf<70> errorMessage(_L("Cannot complete fill. RFile::Create() failed with error no. "));
+ errorMessage.AppendNum(err);
+ iEikonEnv->InfoWinL(_L("Error"), errorMessage);
+ }
+
+ // fill file up to fileSize
+ if (err==KErrNone)
+ {
+ const TInt MaxBufSize=512;
+ TBuf8<MaxBufSize> buf;
+ buf.SetLength(MaxBufSize);
+ Mem::Fill((void*)buf.Ptr(),MaxBufSize,0xef);
+ TInt rem=fileSize;
+ while(rem)
+ {
+ TInt s=Min(MaxBufSize,rem);
+ err=file.Write(buf,s);
+ if (err!=KErrNone) break;
+ rem-=s;
+ }
+ }
+
+ file.Close();
+ if(err!=KErrNone) aRfs.Delete(fileName);
+ } while (err==KErrNone && i<100);
+ }
+ iEikonEnv->BusyMsgCancel();
+ iEikonEnv->InfoMsg(_L("Drive filled"));
+ }
+ else if (aButtonId==EDriveUndoFillButtonCtl)
+ {
+ iEikonEnv->BusyMsgL(_L("Undo Drive Fill"));
+ TFindFile fileFinder(aRfs);
+ CDir* fileList;
+
+ TBuf<10> name;
+ name=KFillName;
+ name.Append(KAsterisk);
+
+ TBuf<3> driveName;
+ driveName=driveUnit.Name();
+ driveName.Append(_L("\\"));
+
+ TInt findErr = fileFinder.FindWildByPath(name,&driveName,fileList);
+ TInt deleteErr = KErrNone;
+
+ if (findErr == KErrNone)
+ {
+ for (TInt i=0;i<fileList->Count();++i)
+ {
+ TBuf<100> filePath(driveName);
+ filePath.Append((*fileList)[i].iName);
+
+ deleteErr = aRfs.Delete(filePath);
+ }
+ }
+ iEikonEnv->BusyMsgCancel();
+
+ if (deleteErr !=KErrNone)
+ {
+ TBufC<15> function(_L("RFs::Delete()"));
+ DisplayError(function, deleteErr);
+ }
+ if (findErr == KErrNone && deleteErr == KErrNone)
+ {
+ fillSpaceOpButs->ComponentControl(0)->MakeVisible(ETrue);
+ fillSpaceOpButs->ComponentControl(1)->MakeVisible(ETrue);
+ fillSpaceOpButs->ComponentControl(2)->MakeVisible(ETrue);
+ fillSpaceOpButs->ComponentControl(3)->MakeVisible(ETrue);
+ fillSpaceOpButs->ComponentControl(4)->MakeVisible(ETrue);
+ iEikonEnv->InfoMsg(_L("Undo Fill Complete"));
+ }
+
+ else iEikonEnv->InfoMsg(_L("Undo Fill Invalid"));
+ delete fileList;
+ }
+ else if (aButtonId==EDriveFormatButtonCtl)
+ {
+ TInt count;
+ RFormat format;
+ TInt err=format.Open(aRfs,driveUnit.Name(),EHighDensity,count);
+ if (err==KErrNone)
+ {
+ iEikonEnv->BusyMsgL(_L("Formatting Drive"));
+ while (count && err==KErrNone)
+ {
+ err = format.Next(count);
+ if (err != KErrNone)
+ {
+ TBufC<15> function(_L("RFormat::Next()"));
+ DisplayError(function, err);
+ }
+ }
+ iEikonEnv->BusyMsgCancel();
+ }
+ else
+ {
+ TBuf<70> errorMessage(_L("RFormat::Open() failed with system error no."));
+ errorMessage.AppendNum(err);
+ iEikonEnv->InfoWinL(_L("Error"), errorMessage);
+ }
+ format.Close();
+ }
+
+ aRfs.Close();
+ }
+ return EFalse;
+ }
+
+CDialogBase::CDialogBase()
+ {
+ }
+
+void CDialogBase::DisplayError(TDesC& aMessage, TInt aErrorNumber)
+ {
+ //could check doesn't go out of bounds
+ TBuf<250> errorMssge(aMessage);
+ errorMssge.Append(_L(" fails with system error no. "));
+ TBuf<3> errorNum;
+ _LIT(KFormatDec, "%d");
+ errorNum.Format(KFormatDec, aErrorNumber);
+ errorMssge.Append(errorNum);
+ iEikonEnv->InfoWinL(_L("Error"), errorMssge);
+ }
+
+void CDialogBase::DisplayError(TDesC& aMessage)
+ {
+ //could check don't go out of bounds
+ TBuf<250> errorMssge(aMessage);
+ iEikonEnv->InfoWinL(_L("Error"), errorMssge);
+ }
+