networkingutils/ipadministrationtool/src/ipadm.cpp
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:30:50 +0100
branchRCL_3
changeset 20 493058e57c8c
parent 0 9736f095102e
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201035 Kit: 201035

// 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:
// ipadm.cpp - IP administration tool main module
//

#include <techview/eikfnlab.h>
#ifndef CALYPSO
#include <techview/eikfontd.h>
#endif

#if EPOC_SDK < 0x06000000
#include <e32keys.h>
#include <coemain.h>

#include <eikenv.h>
#include <eikdef.h>
#include <eikcmds.hrh>
#include <techview/eikon.rsg>
#include <techview/eiklabel.h>

#include <techview/eiktbar.h>
#include <techview/eikchlst.h>
#include <techview/eikpgsel.h>

#include <techview/eiklabel.h>
#endif

#ifdef MAKE_EXE_APPLICATION
#include <eikstart.h>
#endif

#include "ipadm.h"
#include "engine.h"

// 
// CConsoleControl
//
CConsoleControl::~CConsoleControl()
	{
	delete iConsole;
	}

void CConsoleControl::ConstructL(const TPoint& aTopLeft, const TSize& aSize, TInt aFlags)
	{
	TRect rect(aTopLeft,aTopLeft + aSize.AsPoint());
#if EPOC_SDK >= 0x06000000
	SetRect(rect);
#else
	SetRectL(rect);
#endif
    iConsole= new (ELeave) CEikConsoleScreen;
	iConsole->ConstructL(_L("TEST"),aTopLeft,aSize,aFlags,EEikConsWinInPixels);
	iConsole->SetHistorySizeL(200,0);
	//iConsole->SetAllPrintable(ETrue);
	iHistory=200;
	}

void CConsoleControl::ActivateL()
	{
	CCoeControl::ActivateL();
	iConsole->SetKeepCursorInSight(TRUE);
	iConsole->DrawCursor();
	iConsole->SetAtt(ATT_NORMAL);
	}

void CConsoleControl::HandleCommandL(TInt aCommand)
	{
    switch (aCommand)
		{
	case EConsolFontDialog:
#if EPOC_SDK >= 0x06000000
		{
#ifndef CALYPSO
		TCharFormat charFormat;
		charFormat.iFontSpec = iConsole->Font();
		TCharFormatMask dummy;
		if (CEikFontDialog::RunDlgLD(charFormat, dummy))
			{
			//charFormat.iFontSpec.iTypeface.SetIsProportional(EFalse);
			iConsole->SetFontL(charFormat.iFontSpec);
			}
#endif
		}
#else
		{
		TCharFormat charFormat;
		charFormat.iFontSpec = iConsole->Font();
		TCharFormatMask dummy;
		CEikFontDialog* dialog=new(ELeave) CEikFontDialog(charFormat,dummy);
		if (dialog->ExecuteLD(R_EIK_DIALOG_FONT))
			{
			//charFormat.iFontSpec.iTypeface.SetIsProportional(EFalse);
			iConsole->SetFontL(charFormat.iFontSpec);
			}
		}
#endif
        break;
#if 0
	case EConsolHistory:
		{
		CHistoryDialog* dialog2 = new(ELeave) CHistoryDialog(&iHistory);
		if (dialog2->ExecuteLD(R_KMD_HISTORY_DIALOG))
			iConsole->SetHistorySizeL(iHistory,0);
		}
        break;
#endif
    case EConsolScrollNone:
		iConsole->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff,CEikScrollBarFrame::EOff);
        break;
    case EConsolScrollHor:
		iConsole->SetScrollBarVisibilityL(CEikScrollBarFrame::EAuto,CEikScrollBarFrame::EOff);
        break;
    case EConsolScrollVert:
		iConsole->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff,CEikScrollBarFrame::EAuto);
        break;
   	case EConsolScrollBoth:
		iConsole->SetScrollBarVisibilityL(CEikScrollBarFrame::EAuto,CEikScrollBarFrame::EAuto);
        break;
	default:
		break;
		}
    }

void CConsoleControl::FocusChanged(TDrawNow aDrawNow)
	{
	iConsole->ConsoleControl()->SetFocus(IsFocused(), aDrawNow); 
	}

void CConsoleControl::ToggleFontStyleAndRedrawL(TMessageControlFontStyle aStyleElement)
    {
    switch (aStyleElement)
        {
    case EStyleElementColor:
		if ( iConsole->Att() & ATT_COLORMASK )	// color?
			iConsole->SetAtt(ATT_NORMAL);	// then set normal
		else								// else
			iConsole->SetAtt(4,11);			// set 4 (darkgray) on 11 (lightgray)
        break;
    case EStyleElementBold:
		// clear color flag (just to be sure) and switch bold flag
		iConsole->SetAtt( (iConsole->Att()&(~ATT_COLORMASK)) ^ ATT_BOLD );
        break;
    case EStyleElementItalic:
		// clear color flag (just to be sure) and switch italic flag
		iConsole->SetAtt( (iConsole->Att()&(~ATT_COLORMASK)) ^ ATT_ITALIC );
        break;
    case EStyleElementInverse:
		// clear color flag (just to be sure) and switch inverse flag
		iConsole->SetAtt( (iConsole->Att()&(~ATT_COLORMASK)) ^ ATT_INVERSE );
        break;
    case EStyleElementUnderline:
		// clear color flag (just to be sure) and switch underline flag
		iConsole->SetAtt( (iConsole->Att()&(~ATT_COLORMASK)) ^ ATT_UNDERLINE );
        break;
        }
    }

void CConsoleControl::SetScrollBarVisibilityL(CEikScrollBarFrame::TScrollBarVisibility aHBarVisibility, CEikScrollBarFrame::TScrollBarVisibility aVBarVisibility)
	{
	iConsole->SetScrollBarVisibilityL(aHBarVisibility,aVBarVisibility);
	iConsole->ConsoleControl()->UpdateArea();
	iConsole->UpdateScrollBars();
	iConsole->ConsoleControl()->UpdateArea();
	//TBool b=iConsole->RecalculateSize();
	}


void CConsoleControl::DrawCursor()
	{
	iConsole->DrawCursor();
	}


void CConsoleControl::Write(const TDesC &aMsg)
	{
	iConsole->Write(aMsg);
	iConsole->FlushChars();
	}

CEikConsoleControl *CConsoleControl::ConsoleControl() const
	{
	return iConsole->ConsoleControl();
	}

TBool CConsoleControl::UpdateScrollBars()
	{
	return iConsole->UpdateScrollBars();
	}

void CConsoleControl::ClearScreen()
	{
	iConsole->ClearScreen();
	}


void CConsoleControl::Redraw(const TRect &aRect)
	{
	iConsole->Redraw(aRect);
	}

void CConsoleControl::Lf()
	{
	iConsole->Lf();
	}



// ****************
// APPLICATION VIEW
// ****************
//
void CIpAdmView::ConstructL(const TRect& aRect)
    {
	CreateWindowL();
#if EPOC_SDK >= 0x06000000
    SetRect(aRect);
#else
    SetRectL(aRect);
#endif
    iContext = this;
	iBrushStyle = CGraphicsContext::ESolidBrush;
    iBrushColor = KRgbWhite;
	CreateBigConsoleL(CEikConsoleScreen::ENoInitialCursor);

	StartL();
	
    ActivateL();
    }

void CIpAdmView::CreateBigConsoleL(TInt aFlags)
	{
	iConsole =new(ELeave) CConsoleControl;
//	TRect rect=Rect();
//	rect.Shrink(3,3);
	iConsole->ConstructL(Position(),Rect().Size(),aFlags);
	iConsole->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff,CEikScrollBarFrame::EAuto);
	
	}

CIpAdmView::~CIpAdmView()
	{
	delete iConsole;
	delete iModel;
	}
    
TInt CIpAdmView::CountComponentControls() const
	{
	return 1;
	}

CCoeControl* CIpAdmView::ComponentControl(TInt aIndex) const
	{
	switch (aIndex)
		{
	case 0:
		return iConsole;
	default:
		return 0;
		}
	}

void CIpAdmView::Draw(const TRect& /*aRect*/) const
	{
#if 0
	CWindowGc& gc = SystemGc();
	
	gc.SetPenStyle(CGraphicsContext::ESolidPen);
	TSize penSizeBold(3,3);
	gc.SetPenSize(penSizeBold);
	gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
	
	TRect rect=iConsole->Rect();	//Lines around the Console
	rect.Grow(3,3);
	gc.DrawRect(rect);
#endif
	}

void CIpAdmView::StartL()
	{
	TInt err;

	if (!iModel)
		{
		iModel = new CIpAdmEngine(this);
		CEikonEnv::Static()->BusyMsgL(R_BUSY);
		TRAP(err, iModel->ConstructL());
		CEikonEnv::Static()->BusyMsgCancel();
		if (err!=KErrNone)
			{
			TBuf<50> msg;
			msg.Format(_L("Error initializing: %d"), err);
			ShowError(msg);
			StopL();
			}
		}
	else
		CEikonEnv::Static()->InfoMsg(_L("Already Running!"));
	}


void CIpAdmView::Write(const TDesC &aMsg)
	{
	iConsole->Write(aMsg);
	iConsole->Write(_L("\n"));
	}

void CIpAdmView::ShowError(TInt aId)
	{
	iEikonEnv->InfoMsg(aId);
	}

void CIpAdmView::ShowError(const TDes &msg)
	{
	iEikonEnv->InfoMsg(msg);
	}

void CIpAdmView::ShowError(const TDes &msg, TInt aErr)
	{
	TBuf<100> txt;
	TBuf<100> txt2;

	txt.Format(msg);
	iEikonEnv->GetErrorText(txt2,aErr);
	txt.AppendFormat(txt2);
	iEikonEnv->InfoMsg(txt);
	}

void CIpAdmView::StopL()
	{
	if (iModel)
		{
		CEikonEnv::Static()->BusyMsgL(R_BUSY);
		delete iModel;	
		CEikonEnv::Static()->BusyMsgCancel();
		Write(_L("*Stopped*"));
		}
	else
		CEikonEnv::Static()->InfoMsg(_L("Not running!"));
	iModel = NULL;
	}


void CIpAdmView::ClearScreenL()
	{
	delete iConsole;
	iConsole = NULL;
	CreateBigConsoleL(CEikConsoleScreen::ENoInitialCursor);	
	}

void CIpAdmView::HandleCommandL(TInt aCommand)
	{
	switch (aCommand)
		{
	case EIpAdmClearScreen:
		ClearScreenL();
		break;

	default:
		ASSERT(iConsole != NULL);
		iConsole->HandleCommandL(aCommand);
		if (iModel)
			iModel->HandleCommandL(aCommand);
		break;
		}
	}

// **************
// APPLICATION UI
// **************
//
void CIpAdmAppUi::ConstructL()
    {
    BaseConstructL();

    iAppView= new (ELeave) CIpAdmView;
    iAppView->ConstructL(ClientRect());

#if EPOC_SDK < 0x06000000
	CEikFileNameLabel* filenameLabel=STATIC_CAST(CEikFileNameLabel*, iToolBar->ControlById(EIpAdmFilename));
	filenameLabel->UpdateL();
#endif
    }

void CIpAdmAppUi::HandleCommandL(TInt aCommand)
	{
	switch (aCommand)
		{
	case EEikCmdExit:
		Exit();
		return;
	default:
		iAppView->HandleCommandL(aCommand);
		}
	}

CIpAdmAppUi::~CIpAdmAppUi()
	{
#ifndef CALYPSO
	RemoveFromStack(iAppView);
#endif
    delete iAppView;
	}

// ********
// DOCUMENT
// ********
CIpAdmDocument::CIpAdmDocument(CEikApplication& aApp)
		: CEikDocument(aApp)
	{
	}

CEikAppUi* CIpAdmDocument::CreateAppUiL()
	{
    return new (ELeave) CIpAdmAppUi;
	}

// ***********
// APPLICATION
// ***********
//
TUid CIpAdmApplication::AppDllUid() const
	{
	return KUidIpAdmApp;
	}

CApaDocument* CIpAdmApplication::CreateDocumentL()
	{
	return new(ELeave) CIpAdmDocument(*this);
	}

// ****
// MAIN
// ****
//
EXPORT_C CApaApplication* NewApplication()
	{
	return new CIpAdmApplication;
	}


#ifdef MAKE_EXE_APPLICATION

GLDEF_C TInt E32Main()
	{
	return EikStart::RunApplication(NewApplication);
	}

#else

#ifndef EKA2
GLDEF_C TInt E32Dll(TDllReason /*aReason*/)
	{
	return KErrNone;
	}
#endif

#endif // MAKE_EXE_APPLICATION