📄 symbianosunitappview.cpp
字号:
// CSymbianOSUnitAppView.cpp
// -------------------
/*Copyright (c) Penrillian Ltd 2003-2006. All rights reserved. Web: www.penrillian.com*/
#include "SymbianOSUnit.h"
#include "testdriver.h"
#ifdef UIQ3
#include <QikCommand.h>
#include <SymbianosUnit.rsg>
#include <QikCommandManager.h>
#endif
const TInt KMaxTestOutput = 2048;
_LIT(KSymbianOsUnit,"Symbian OS Unit");
#ifdef UIQ3
CSymbianOSUnitAppView* CSymbianOSUnitAppView::NewLC(CQikAppUi& aAppUi)
{
CSymbianOSUnitAppView* self = new (ELeave) CSymbianOSUnitAppView(aAppUi);
CleanupStack::PushL(self);
self->ConstructL();
return self;
}
CSymbianOSUnitAppView::CSymbianOSUnitAppView(CQikAppUi& aAppUi)
: CQikViewBase(aAppUi, KNullViewId)
{
}
CSymbianOSUnitAppView::~CSymbianOSUnitAppView()
{
delete iTestOutput;
}
void CSymbianOSUnitAppView::ConstructL()
{
CQikViewBase::ConstructL();
iTestOutput = HBufC::NewL(KMaxTestOutput);
}
void CSymbianOSUnitAppView::ViewConstructL()
{
ViewConstructFromResourceL(R_UI_CONFIGURATIONS);
iTestDisplay = LocateControlByUniqueHandle<CEikEdwin>(ESymbianOSUnitEdwinCtrl);
iProgress = LocateControlByUniqueHandle<CEikProgressInfo>(ESymbianOSUnitProgressCtrl);
UpdateCommandsL();
}
void CSymbianOSUnitAppView::HandleCommandL(CQikCommand& aCommand)
{
switch(aCommand.Id())
{
case ECmdRunTest:
RunSuitesL();
break;
case EEikCmdExit:
CQikViewBase::HandleCommandL(aCommand);
break;
default:
RunSuitesL(aCommand.Id() - ECmdRunTest -1);
break;
}
}
void CSymbianOSUnitAppView::UpdateCommandsL()
{
CDesCArray* suitesNames = static_cast<CSymbianOSUnitAppUi&>(iQikAppUi).SuiteNamesLC();
CQikCommandManager& manager = CQikCommandManager::Static();
if(suitesNames->MdcaCount() > 0)
{
manager.SetDimmed(*this, ECmdRunTest, EFalse);
for(TInt i = 0; i < suitesNames->MdcaCount(); i++)
{
CQikCommand* command = CQikCommand::NewLC(ECmdRunTest + i +1);
command->SetHandler(this);
command->SetTextL(suitesNames->MdcaPoint(i));
manager.InsertCommandL(*this, command);
CleanupStack::Pop(command);
}
}
CleanupStack::PopAndDestroy(suitesNames);
}
CQikCommand* CSymbianOSUnitAppView::DynInitOrDeleteCommandL(CQikCommand* aCommand, const CCoeControl& /*aControlAddingCommands*/)
{
switch(aCommand->Id())
{
case EEikEdwinCmdEditCopy:
case EEikEdwinCmdEditSelectAllPenStyle:
{
aCommand->SetInvisible(ETrue);
aCommand->SetAvailable(EFalse);
break;
}
default:
break;
}
return aCommand;
}
#else //------------------ not uiq3 ----------------------------------
CSymbianOSUnitAppView* CSymbianOSUnitAppView::NewL(const TRect& aRect)
{
CSymbianOSUnitAppView* self = new(ELeave) CSymbianOSUnitAppView();
CleanupStack::PushL(self);
self->ConstructL(aRect);
CleanupStack::Pop();
return self;
}
CSymbianOSUnitAppView::~CSymbianOSUnitAppView()
{
delete iTestOutput;
delete iTestDisplay;
delete iProgress;
delete iUnitLabel;
iEikonEnv->EikAppUi()->RemoveFromStack(this);
iEikonEnv->EikAppUi()->DeregisterView(*this);
}
void CSymbianOSUnitAppView::ConstructL(const TRect& aRect)
{
CreateWindowL();
iEikonEnv->EikAppUi()->RegisterViewL(*this);
iEikonEnv->EikAppUi()->AddToStackL(*this, this);
//iEikonEnv->EikAppUi()->AddToStackL(this);
Window().SetBackgroundColor(KRgbGreen);
Window().SetShadowDisabled(ETrue);
SetRect(aRect);
iTestOutput = HBufC::NewL(KMaxTestOutput);
CreateSymbianOsUnitLabelL(aRect);
CreateProgressInfoL(aRect);
CreateTestOutputDisplayL(aRect);
ActivateL();
}
void CSymbianOSUnitAppView::CreateTestOutputDisplayL(const TRect& aRect)
{
iTestDisplay = new (ELeave) CEikEdwin();
#if defined SERIES60 || defined SERIES60_3RD
iTestDisplay->SetMopParent(this);
iTestDisplay->SetAknEditorFlags(EAknEditorFlagEnableScrollBars);
#endif
iTestDisplay->SetContainerWindowL(*this);
iTestDisplay->CEikEdwin::ConstructL(
CEikEdwin::ENoAutoSelection|
CEikEdwin::ENoHorizScrolling|
CEikEdwin::EReadOnly,
0,
0,
0
);
CEikScrollBarFrame* scrollbar;
#if defined SERIES60 || defined SERIES60_3RD
scrollbar = iTestDisplay->ScrollBarFrame();
#else
scrollbar = iTestDisplay->CreateScrollBarFrameL();
#endif
scrollbar->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto);
iTestDisplay->SetPosition(TPoint(0,iProgress->Rect().iBr.iY));
iTestDisplay->SetSize(TSize(aRect.Width(),aRect.Height()-iProgress->Rect().Height()));
}
void CSymbianOSUnitAppView::ViewActivatedL(const TVwsViewId& ,TUid , const TDesC8&)
{
}
void CSymbianOSUnitAppView::ViewDeactivated()
{
}
TKeyResponse CSymbianOSUnitAppView::OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType)
{
if (iTestDisplay)
{
if (iTestDisplay->IsFocused())
{
return iTestDisplay->OfferKeyEventL(aKeyEvent, aType);
}
}
return EKeyWasNotConsumed;
}
void CSymbianOSUnitAppView::CreateProgressInfoL(const TRect& /*aRect*/)
{
CEikProgressInfo::SInfo snf;
snf.iTextType = EEikProgressTextNone;
snf.iSplitsInBlock = 0;
snf.iFinalValue = 1;
snf.iHeight = 100;
snf.iWidth = 120;
iProgress = new (ELeave) CEikProgressInfo(snf);
#if defined SERIES60 || defined SERIES60_3RD
iProgress->ConstructL();
#endif
iProgress->SetPosition(TPoint(0,iUnitLabel->Size().iHeight));
TSize minSize = iProgress->MinimumSize();
iProgress->SetSize(TSize(minSize.iWidth, 20));
iProgress->SetContainerWindowL(*this);
}
void CSymbianOSUnitAppView::CreateSymbianOsUnitLabelL(const TRect& aRect)
{
iUnitLabel = new (ELeave) CEikLabel;
iUnitLabel->SetContainerWindowL(*this);
iUnitLabel->SetTextL(KSymbianOsUnit());
iUnitLabel->SetEmphasis(CEikLabel::ENoEmphasis);
TInt textHeight = iUnitLabel->Font()->HeightInPixels();
iUnitLabel->SetPosition(TPoint(2,0));
iUnitLabel->SetSize(TSize(aRect.Width()/2,textHeight));
}
void CSymbianOSUnitAppView::Draw(const TRect& aRect) const
{
CWindowGc& gc = SystemGc();
gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
gc.SetBrushColor(iEikonEnv->ControlColor(EColorWindowBackground,*this));
gc.SetPenColor(KRgbGray);
gc.DrawRect(aRect);
#if defined SERIES60 || defined SERIES60_3RD
// underwrite bar as red or green to show result of test:
if(iTestDisplay && iTestDisplay->IsFocused())
{
gc.SetBrushColor(iFailedTest ? KRgbRed : KRgbGreen);
TSize size = iSize;
size.iHeight /= 2;
iProgress->SetSize(size);
size.iHeight *= 2;
TPoint point = iProgress->Position();
gc.DrawRect(TRect(point,size));
}
#endif
}
TInt CSymbianOSUnitAppView::CountComponentControls() const
{
return EMaxNumberControls;
}
CCoeControl* CSymbianOSUnitAppView::ComponentControl(TInt aIndex) const
{
switch(aIndex)
{
case ETestDisplay:
{
return iTestDisplay;
break;
}
case EProgress:
{
return iProgress;
break;
}
case EUnitLabel:
{
return iUnitLabel;
break;
}
}
return NULL;
}
#endif
void CSymbianOSUnitAppView::RunSuitesL(TInt aSuite)
{
ClearViewL();
iTestOutput->Des().Zero();
iFailedTest = EFalse;
#ifdef UIQ3
iProgress->SetIndicatorColorL(KRgbGreen);
#else
CEikProgressInfo::SLayout layout = iProgress->Layout();
layout.iFillColor = KRgbGreen;
iProgress->SetLayout(layout);
#endif
TestDriver testDriver(iTestOutput,this);
testDriver.runAllSuitesL(aSuite);
TRAPD( ignore, iTestDisplay->SetTextL(iTestOutput) );
#if defined UIQ3
RequestRelayout(this);
#else
iTestDisplay->SetFocus(ETrue);
DrawNow();
#endif
}
void CSymbianOSUnitAppView::ClearViewL()
{
if(iSize.iHeight == 0)
{
iSize = iProgress->Size();
}
iTestDisplay->SetFocus(EFalse);
iTestDisplay->SetTextL(&(KNullDesC()));
#ifdef UIQ3
iProgress->ResetIndicatorColor();
RequestRelayout(this);
#else
iProgress->SetAndDraw(0);
DrawNow();
#endif
}
void CSymbianOSUnitAppView::DisplayEachTestResult()
{
iProgress->IncrementAndDraw(1);
TRAPD( ignore, iTestDisplay->SetTextL(iTestOutput) );
DrawNow();
}
void CSymbianOSUnitAppView::FailedTest()
{
if(!iFailedTest)
{
iFailedTest = ETrue;
#ifdef UIQ3
iProgress->SetIndicatorColorL(KRgbRed);
RequestRelayout(this);
#else
CEikProgressInfo::SLayout layout = iProgress->Layout();
layout.iFillColor = KRgbRed;
iProgress->SetLayout(layout);
DrawNow();
#endif
}
}
TVwsViewId CSymbianOSUnitAppView::ViewId() const
{
return TVwsViewId(KUidSymbianOSUnit, KUidNonUiTest);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -