dbgsrv/coredumpserver/ui/coredumpui/src/coredumpcdsdialog.cpp
changeset 0 c6b0df440bee
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dbgsrv/coredumpserver/ui/coredumpui/src/coredumpcdsdialog.cpp	Tue Mar 02 10:33:16 2010 +0530
@@ -0,0 +1,330 @@
+// Copyright (c) 2008-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:
+//
+
+
+
+/**
+ @file
+ @internalTechnology
+ @released
+*/
+
+
+#include "coredumpui.h"
+#include "coredumpcdsdialog.h"
+
+// CConfigureCDSDialog //
+
+CConfigureCDSDialog::CConfigureCDSDialog(RCoreDumpSession &aCoreDumpSession)
+    : CCoreDumpDialogBase(aCoreDumpSession)
+    {
+    }
+
+CConfigureCDSDialog::~CConfigureCDSDialog()
+	{
+	iConfs.ResetAndDestroy();
+	}
+
+void CConfigureCDSDialog::PreLayoutDynInitL()
+	{
+	UpdateDialogDataL();
+	}
+
+void CConfigureCDSDialog::PostLayoutDynInitL()
+	{
+	}
+
+void CConfigureCDSDialog::UpdateDialogDataL()
+	{
+	//update dialog
+	RPointerArray<CEikEdwin> edwins;
+	CEikEdwin *edwin = static_cast<CEikEdwin*>(Control(EEdwin1));
+	edwins.Append(edwin);
+	edwin = static_cast<CEikEdwin*>(Control(EEdwin2));
+	edwins.Append(edwin);
+	edwin = static_cast<CEikEdwin*>(Control(EEdwin3));
+	edwins.Append(edwin);
+	edwin = static_cast<CEikEdwin*>(Control(EEdwin4));
+	edwins.Append(edwin);
+	edwin = static_cast<CEikEdwin*>(Control(EEdwin5));
+	edwins.Append(edwin);
+	edwin = static_cast<CEikEdwin*>(Control(EEdwin6));
+	edwins.Append(edwin);
+	edwin = static_cast<CEikEdwin*>(Control(EEdwin7));
+	edwins.Append(edwin);
+	for (TInt i = 0; i < edwins.Count(); i++)
+		{
+		edwins[i]->SetDimmed(ETrue);
+		edwins[i]->SetReadOnly(ETrue);
+		}
+
+	RPointerArray<CEikLabel> labels;
+	CEikLabel *label = static_cast<CEikLabel*>(Control(ELabel1));
+	labels.Append(label);
+	label = static_cast<CEikLabel*>(Control(ELabel2));
+	labels.Append(label);
+	label = static_cast<CEikLabel*>(Control(ELabel3));
+	labels.Append(label);
+	label = static_cast<CEikLabel*>(Control(ELabel4));
+	labels.Append(label);
+	label = static_cast<CEikLabel*>(Control(ELabel5));
+	labels.Append(label);
+	label = static_cast<CEikLabel*>(Control(ELabel6));
+	labels.Append(label);
+	label = static_cast<CEikLabel*>(Control(ELabel7));
+	labels.Append(label);
+
+	// Read config parameters from CDS
+	TInt noConfigParams = 0;
+	iConfs.ResetAndDestroy();
+	
+    TRAPD(err, noConfigParams = iCoreDumpSession.GetNumberConfigParametersL());
+    if(err != KErrNone)
+        {
+		TBuf<23> error;
+		error.Format(_L("Error: %d"), err);
+		CEikonEnv::InfoWinL(_L("Could not get number of config params!"), error);
+        User::Leave(err);
+        }
+	TInt control = 0;
+	//RDebug::Print(_L("CConfigureCDSDialog::UpdateDialogDataL: noConfigParams: %d"), noConfigParams);
+	for (TInt i = 0; i < noConfigParams; i++)
+		{
+		COptionConfig* conf;
+		conf = iCoreDumpSession.GetConfigParameterL(i);
+		if (conf->Source()== COptionConfig::ECoreDumpServer)
+			{
+			iConfs.Append(conf);
+			TBuf<255> buf = conf->Prompt();
+			switch (conf->Type())
+				{
+				case COptionConfig::ETInt:
+					{
+					buf.Append(_L("\n(Signed int)"));
+					TBuf<255> value;
+					value.Format(_L("%d"), iConfs[control]->Value());
+					edwins[control]->SetTextL(&value);
+					}
+					break;
+
+				case COptionConfig::ETUInt:
+					{
+					buf.Append(_L("\n(Unsigned int)"));
+					TBuf<255> value;
+					value.Format(_L("%d"), iConfs[control]->Value());
+					edwins[control]->SetTextL(&value);
+					}
+					break;
+
+				case COptionConfig::ETString:
+					{
+					buf.Append(_L("\n(String)"));
+					edwins[control]->SetTextL(&(iConfs[control]->ValueAsDesc()));
+					}
+					break;
+
+				case COptionConfig::ETFileName:
+					{
+					buf.Append(_L("\n(File name)"));
+					edwins[control]->SetTextL(&(iConfs[control]->ValueAsDesc()));
+					}
+					break;
+
+				case COptionConfig::ETSingleEntryEnum:
+					{
+					buf.Append(_L("\n"));
+					buf.Append(conf->Options());
+					edwins[control]->SetTextL(&(iConfs[control]->ValueAsDesc()));
+					}
+					break;
+
+				case COptionConfig::ETMultiEntryEnum:
+					{
+					buf.Append(_L("\n"));
+					buf.Append(conf->Options());
+					edwins[control]->SetTextL(&(iConfs[control]->ValueAsDesc()));
+					}
+					break;
+
+				case COptionConfig::ETBool:
+					{
+					buf.Append(_L("\n"));
+					buf.Append(conf->Options());
+					TBuf<255> value;
+					iConfs[control]->Value() ? value = _L("True") : value = _L("False");
+					edwins[control]->SetTextL(&value);
+					}
+					break;
+
+				default:
+					break;
+				}
+			labels[control]->SetTextL(buf);
+			edwins[control]->SetDimmed(EFalse);
+			edwins[control++]->SetReadOnly(EFalse);
+			}
+        else
+            {
+            delete conf;
+            }
+		}
+	edwins.Close();
+	labels.Close();
+	}
+
+TBool CConfigureCDSDialog::OkToExitL(TInt aButtonId)
+	{
+	LOG_MSG( "-> CConfigureCDSDialog::OkToExitL" );
+	TBool ret = ETrue;
+	TInt err;
+
+	RPointerArray<CEikEdwin> edwins;
+	CEikEdwin *edwin = static_cast<CEikEdwin*>(Control(EEdwin1));
+	edwins.Append(edwin);
+	edwin = static_cast<CEikEdwin*>(Control(EEdwin2));
+	edwins.Append(edwin);
+	edwin = static_cast<CEikEdwin*>(Control(EEdwin3));
+	edwins.Append(edwin);
+	edwin = static_cast<CEikEdwin*>(Control(EEdwin4));
+	edwins.Append(edwin);
+	edwin = static_cast<CEikEdwin*>(Control(EEdwin5));
+	edwins.Append(edwin);
+	edwin = static_cast<CEikEdwin*>(Control(EEdwin6));
+	edwins.Append(edwin);
+	edwin = static_cast<CEikEdwin*>(Control(EEdwin7));
+	edwins.Append(edwin);
+
+	switch (aButtonId)
+		{
+		case EEikBidCancel:
+			{
+			//RDebug::Print(_L("CConfigureCDSDialog::OkToExitL: Cancel pressed"));
+			}
+			break;
+		case EBidCDSConfigure:
+			{
+			//RDebug::Print(_L("CConfigureCDSDialog::OkToExitL: iConfs.Count() == %d"), iConfs.Count());
+			for (TInt i = 0; ( i < iConfs.Count() ) && ret; i++)
+				{
+				err = KErrNone;
+
+				HBufC *input = NULL;
+				if (edwins[i]->TextLength() > 0)
+					{
+					input = edwins[i]->GetTextInHBufL();
+					}
+				if ( ! input )
+					{
+					LOG_MSG2( "  NULL input for param %d" , i );
+					continue;
+					}
+
+				//RDebug::Print(_L("CConfigureCDSDialog::OkToExitL: iConfs[i]->Type() == %d"), iConfs[i]->Type());
+
+				switch (iConfs[i]->Type())
+					{
+					case COptionConfig::ETInt:
+					case COptionConfig::ETUInt:
+						{
+						TLex opts(*input);
+						TInt32 conf;
+						err = opts.Val(conf);
+						if ( err )
+							{
+							LOG_MSG("  error from opts.Val(conf) -> CConfigureCDSDialog::CEikonEnv::Static()->InfoMsg;" );
+							CEikonEnv::Static()->InfoMsg(_L("Value must be an integer"));
+							break;
+							}
+
+						//RDebug::Print(_L("CConfigureCDSDialog::OkToExitL: conf == %d"), conf);
+						iConfs[i]->Value(conf);
+						TRAP( err, iCoreDumpSession.SetConfigParameterL( *iConfs[i]) );
+						}
+						break;
+
+					case COptionConfig::ETFileName:
+					case COptionConfig::ETString:
+					case COptionConfig::ETSingleEntryEnum:
+					case COptionConfig::ETMultiEntryEnum:
+						{						
+						TRAP( err, iConfs[i]->ValueL(*input) );
+						if ( KErrNone == err )
+							{
+							TRAP( err, iCoreDumpSession.SetConfigParameterL( *iConfs[i]) );
+							}
+						}
+						break;
+
+					case COptionConfig::ETBool:
+						if (input->CompareF(_L("True"))== 0)
+							{
+							iConfs[i]->Value(ETrue);
+							iConfs[i]->ValueL(_L("True"));
+							}
+						else if (input->CompareF(_L("False"))== 0)
+							{
+							iConfs[i]->Value(EFalse);
+							iConfs[i]->ValueL(_L("False"));
+							}
+						else
+							{
+							err = KErrCorrupt;
+							}
+
+						if ( KErrNone == err )
+							{
+							TRAP( err, iCoreDumpSession.SetConfigParameterL( *iConfs[i]) );
+							}
+
+						break;
+
+					default:
+						CEikonEnv::Static()->InfoMsg(_L("Error with parameter type"));
+						LOG_MSG( "CConfigureCDSDialog::OkToExitL: none of the above" );
+						err = KErrCorrupt;
+						break;
+
+					}//switch
+
+				if ( err )
+					{
+					RBuf errorString;
+					CleanupClosePushL( errorString );
+					errorString.CreateL( 128 );
+					errorString.Append( _L("CDS Error ") ); 
+					errorString.AppendNum( err );
+					errorString.Append( _L(" setting parameter number ") );
+					errorString.AppendNum( i );
+					CEikonEnv::InfoWinL( errorString, KNullDesC );
+					CleanupStack::PopAndDestroy( &errorString );
+					ret = EFalse;
+					}
+                if(input)
+                    {
+                    delete input;
+                    input = NULL;
+                    }
+				}
+			}
+			break;
+		default:
+			break;
+		}
+
+    edwins.Close();
+	return ret;
+	}
+
+