tcpiputils/dnd/src/dnd.cpp
changeset 0 af10295192d8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tcpiputils/dnd/src/dnd.cpp	Tue Jan 26 15:23:49 2010 +0200
@@ -0,0 +1,562 @@
+// 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:
+// dnd.cpp - name resolver daemon main module
+//
+
+#include <eikfnlab.h>
+#include <eikfontd.h>
+
+#include <eikenv.h>
+
+
+#include <coeccntx.h>
+
+#include <eikappui.h>
+#include <eikapp.h>
+#include <eikdoc.h>
+#include <eikconso.h>
+
+#include "dnd.hrh"
+#include "demon.h"
+#include <dndapp.rsg>
+
+const TUid KUidDndApp = {0x10000882};
+// 
+// CSimpleConsole
+//
+enum TMessageControlFontStyle
+    {
+    EStyleElementBold=EMenuCommandBold,
+    EStyleElementItalic=EMenuCommandItalic,
+    EStyleElementInverse=EMenuCommandInverse,
+    EStyleElementUnderline=EMenuCommandUnderline,
+    EStyleElementColor=EMenuCommandColor
+    };
+
+class CConsoleControl : public CCoeControl
+	{
+public:
+	CConsoleControl() {}
+	~CConsoleControl();
+	void ConstructL(const TPoint& aLeftTop, const TSize& aSize, TInt aFlags);
+    void HandleCommandL(TInt aCommand);
+    void ActivateL();
+	void SetScrollBarVisibilityL(CEikScrollBarFrame::TScrollBarVisibility aHBarVisibility, CEikScrollBarFrame::TScrollBarVisibility aVBarVisibility);
+	void DrawCursor();
+	void Write(const TDesC &aDes);
+	CEikConsoleControl *ConsoleControl();
+	TBool UpdateScrollBars();
+	void ClearScreen();
+	void Redraw(const TRect &aRect);
+	void Lf();
+protected:
+    void FocusChanged(TDrawNow aDrawNow);
+private:
+    void ToggleFontStyleAndRedrawL(TMessageControlFontStyle aStyleElement);
+	
+private:
+	CEikConsoleScreen* iConsole;
+	TInt iHistory;
+	};
+
+
+//
+// class CDndView
+//
+class CDndEngine;
+class CDndView : public CCoeControl, public MCoeControlBrushContext, public MDemonMain
+    {
+public:
+	~CDndView();
+    void ConstructL(const TRect& aRect);
+	
+	void Start();
+	void Stop();
+	void Dump();
+	TInt CountComponentControls() const;
+	CCoeControl* ComponentControl(TInt aIndex) const;
+	void Write(const TDesC &aDes);
+	void WriteList(const TDesC &aFmt, VA_LIST aList);
+	void ClearScreen();
+	void ShowError(TInt aId);
+	TInt CheckResult(const TDesC &aText, TInt aResult);
+
+	void HandleCommandL(TInt aCommand);
+private: 
+	void Draw(const TRect& /*aRect*/) const;
+
+	//Component Controls
+	void CreateBigConsoleL(TInt aFlags);
+
+	void ShowError(TDes &msg);
+	void ShowError(TDes &msg, TInt aErr);
+
+private:
+	CConsoleControl* iConsole;
+	
+	MDemonEngine *iModel;
+	TBool iRunning;
+	TBuf<1024> iBuf;	//< A work buffer for formatting messsages (Writef)
+    };
+
+
+//
+//	CDndAppUi
+//
+class CDndAppUi : public CEikAppUi
+    {
+public:
+    void ConstructL();
+	~CDndAppUi();
+
+private:
+	void HandleCommandL(TInt aCommand);
+	//	TBool LaunchOptionsDialog(CUDPSendEngine* aModel);
+	// void LaunchAboutDialog();
+private:
+    CDndView* iAppView;
+//	CHelpTask *iHelp;
+    };
+
+//
+// CDndDocument
+//
+class CDndDocument : public CEikDocument
+	{
+public:
+	CDndDocument(CEikApplication& aApp);
+private:
+	CEikAppUi* CreateAppUiL();
+	};
+
+//
+// CDndAppUi
+//
+class CDndApplication : public CEikApplication
+	{
+private: // from CApaApplication
+	CApaDocument* CreateDocumentL();
+	TUid AppDllUid() const;
+	};
+
+// 
+// CConsoleControl
+//
+CConsoleControl::~CConsoleControl()
+	{
+	delete iConsole;
+	}
+
+void CConsoleControl::ConstructL(const TPoint& aTopLeft,const TSize& aSize,TInt aFlags)
+	{
+	TRect rect(aTopLeft,aTopLeft + aSize.AsPoint());
+	SetRect(rect);	
+    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:
+		{
+		TCharFormat charFormat;
+		charFormat.iFontSpec = iConsole->Font();
+		TCharFormatMask dummy;
+		if (CEikFontDialog::RunDlgLD(charFormat, dummy))
+			{
+			//charFormat.iFontSpec.iTypeface.SetIsProportional(EFalse);
+			iConsole->SetFontL(charFormat.iFontSpec);
+			}
+		}
+        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()
+	{
+	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 CDndView::ConstructL(const TRect& aRect)
+    {
+	CreateWindowL();
+    SetRect(aRect);
+ 
+    iContext = this;
+	iBrushStyle = CGraphicsContext::ESolidBrush;
+    iBrushColor = KRgbWhite;
+	CreateBigConsoleL(CEikConsoleScreen::ENoInitialCursor);
+	
+    ActivateL();
+    }
+
+void CDndView::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);
+	}
+
+CDndView::~CDndView()
+	{
+	delete iConsole;
+	delete iModel;
+	}
+    
+TInt CDndView::CountComponentControls() const
+	{
+	return 1;
+	}
+
+CCoeControl* CDndView::ComponentControl(TInt aIndex) const
+	{
+	switch (aIndex)
+		{
+	case 0:
+		return iConsole;
+	default:
+		return 0;
+		}
+	}
+
+void CDndView::Draw(const TRect& /*aRect*/) const
+	{
+	}
+
+void CDndView::Start()
+	{
+	TInt err;
+
+	if (!iModel)
+		{
+
+		TRAP(err, iModel = MDemonEngine::NewL(*this));
+		if (err == KErrNone && iModel)
+			{
+			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);
+				Stop();
+				}
+			}
+		}
+	else
+		CEikonEnv::Static()->InfoMsg(_L("Already started!"));
+	}
+
+void CDndView::Write(const TDesC &aMsg)
+	{
+	iConsole->Write(aMsg);
+	iConsole->Write(_L("\n"));
+	}
+
+void CDndView::WriteList(const TDesC &aFmt, VA_LIST aList)
+	{
+	iBuf.FormatList(aFmt, aList);
+	iConsole->Write(iBuf);
+	iConsole->Write(_L("\n"));
+	}
+
+
+void CDndView::ShowError(TInt aId)
+	{
+	iEikonEnv->InfoMsg(aId);
+	}
+
+void CDndView::ShowError(TDes &msg)
+	{
+	iEikonEnv->InfoMsg(msg);
+	}
+
+void CDndView::ShowError(TDes &msg, TInt aErr)
+	{
+	TBuf<100> txt;
+	TBuf<100> txt2;
+
+	txt.Format(msg);
+	iEikonEnv->GetErrorText(txt2,aErr);
+	txt.AppendFormat(txt2);
+	iEikonEnv->InfoMsg(txt);
+	}
+
+TInt CDndView::CheckResult(const TDesC &aText, TInt aResult)
+	{
+	if (aResult == KErrNone)
+		return KErrNone;
+
+	TBuf<100> err;
+	iEikonEnv->GetErrorText(err, aResult);
+
+	TBuf<200> str(aText);
+	str.AppendFormat(_L(" returned with [%d: %s] "), aResult,err.PtrZ());
+	Write(str);
+	return aResult;
+	}
+
+
+void CDndView::Stop()
+	{
+	TInt err;
+	if (iModel)
+		{
+		TRAP(err, CEikonEnv::Static()->BusyMsgL(R_BUSY));
+		delete iModel;	
+		iModel = NULL;
+		CEikonEnv::Static()->BusyMsgCancel();
+		Write(_L("*Stopped*"));
+		}
+	else
+		{
+		CEikonEnv::Static()->InfoMsg(_L("Not started!"));
+		}
+	}
+
+void CDndView::ClearScreen()
+	{
+	TInt err;
+	delete iConsole;
+	iConsole = NULL;
+	TRAP(err, CreateBigConsoleL(CEikConsoleScreen::ENoInitialCursor));	
+	}
+
+void CDndView::HandleCommandL(TInt aCommand)
+	{
+	switch (aCommand)
+		{
+	case EDndStart:
+		Start();
+		break;
+	case EDndStop:
+		Stop();
+		break;
+	case EDndClearScreen:
+		ClearScreen();
+		break;
+	case EDndDump:
+		if (iModel)
+			{
+			CEikonEnv::Static()->BusyMsgL(R_BUSY);
+			iModel->HandleCommandL(aCommand);
+			CEikonEnv::Static()->BusyMsgCancel();
+			}
+		else
+			CEikonEnv::Static()->InfoMsg(_L("Not started!"));
+		break;
+
+	default:
+		ASSERT(iConsole != NULL);
+		iConsole->HandleCommandL(aCommand);
+		if (iModel)
+			iModel->HandleCommandL(aCommand);
+		}
+	}
+
+// **************
+// APPLICATION UI
+// **************
+//
+void CDndAppUi::ConstructL()
+    {
+    BaseConstructL();
+
+    iAppView= new (ELeave) CDndView;
+    iAppView->ConstructL(ClientRect());
+    }
+
+void CDndAppUi::HandleCommandL(TInt aCommand)
+	{
+	switch (aCommand)
+		{
+	case EEikCmdExit:
+		Exit();
+		return;
+	default:
+		iAppView->HandleCommandL(aCommand);
+		}
+	}
+
+CDndAppUi::~CDndAppUi()
+	{
+    delete iAppView;
+	}
+
+// ********
+// DOCUMENT
+// ********
+CDndDocument::CDndDocument(CEikApplication& aApp)
+		: CEikDocument(aApp)
+	{
+	}
+
+CEikAppUi* CDndDocument::CreateAppUiL()
+	{
+    return new (ELeave) CDndAppUi;
+	}
+
+// ***********
+// APPLICATION
+// ***********
+//
+
+TUid CDndApplication::AppDllUid() const
+	{
+	return KUidDndApp;
+	}
+
+CApaDocument* CDndApplication::CreateDocumentL()
+	{
+	return new(ELeave) CDndDocument(*this);
+	}
+
+// ****
+// MAIN
+// ****
+//
+EXPORT_C CApaApplication* NewApplication()
+	{
+	return new CDndApplication;
+	}
+
+
+GLDEF_C TInt E32Dll()
+	{
+	return KErrNone;
+	}