dbgsrv/coredumpserver/ui/coredumpui/src/coredumpuiresourceview.cpp
changeset 0 c6b0df440bee
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dbgsrv/coredumpserver/ui/coredumpui/src/coredumpuiresourceview.cpp	Tue Mar 02 10:33:16 2010 +0530
@@ -0,0 +1,313 @@
+// Copyright (c) 2007-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:
+// Source file for the implementation of the 
+// application view class - CResourceView
+//
+
+#include "coredumpui.h"
+
+CResourceView::CResourceView()
+	{
+	}
+
+CResourceView* CResourceView::NewL(const TRect& aRect, CResourceAppUi *aAppUi)
+	{
+	CResourceView* self = new(ELeave) CResourceView();
+	CleanupStack::PushL(self);
+	self->ConstructL(aRect, aAppUi);
+	CleanupStack::Pop();
+	return self;
+	}
+
+CResourceView::~CResourceView()
+	{
+    delete iCommandButton;
+    delete iObserveButton;
+    delete iLoadButton;
+	}
+
+void CResourceView::ConstructL(const TRect& aRect, CResourceAppUi* aAppUi)
+    {
+	// Initialisation
+	iAppUi = aAppUi;
+	iObjectsViewed = EObjectProcess;
+
+	CreateWindowL();
+	           
+	// Whole extent of view
+	SetRect(aRect);
+
+	// Border around components in pixels
+	iBorder = 1;
+
+	// Place the refresh button	
+	iCommandButton = new(ELeave) CEikCommandButton;
+	iCommandButton->SetTextL(_L("Refresh"));
+	iCommandButton->SetSize(iCommandButton->MinimumSize());
+	iCommandButton->SetPosition(TPoint(Rect().Width() - iCommandButton->Size().iWidth - iBorder, iBorder));
+	iCommandButton->SetContainerWindowL(*this);
+	iCommandButton->SetObserver(this);
+
+	// Place the observe button	
+	iObserveButton = new(ELeave) CEikCommandButton;
+	iObserveButton->SetTextL(_L("Observe"));
+	iObserveButton->SetSize(iObserveButton->MinimumSize());
+	TInt x = Rect().Width() - iObserveButton->Size().iWidth - iCommandButton->Size().iWidth - iBorder;
+	iObserveButton->SetPosition(TPoint(x , iBorder));
+	iObserveButton->SetContainerWindowL(*this);
+	iObserveButton->SetObserver(this);
+
+	// Place the load button
+	iLoadButton = new(ELeave) CEikCommandButton;
+	iLoadButton->SetTextL(_L("Load"));
+	iLoadButton->SetSize(iLoadButton->MinimumSize());
+	x -= iLoadButton->Size().iWidth;
+	iLoadButton->SetPosition(TPoint(x , iBorder));
+	iLoadButton->SetContainerWindowL(*this);
+	iLoadButton->SetObserver(this);
+	iLoadButton->SetDimmed(ETrue);
+
+	TInt buttonHeight = iCommandButton->Size().iHeight;	
+
+	// Get the title font height
+	TInt titleHeight = iEikonEnv->TitleFont()->HeightInPixels();
+	TInt tablePosition = 0;
+	if (titleHeight>=buttonHeight) 
+		tablePosition=titleHeight;
+	else
+		tablePosition=buttonHeight;
+
+	CResourceList::ConstructL(tablePosition);// Activate the main window control - this will also activate the contained controls
+	
+	ActivateL();
+	DrawNow();
+	
+	}
+
+TDes& CResourceView::CrashProgress()
+	{
+    return iCrashProgress;
+	}
+
+void CResourceView::Draw(const TRect& /*aRect*/) const
+	{
+	CWindowGc& gc = SystemGc();                     
+
+	gc.Clear();
+		
+	// Put title on view
+	const CFont* fontUsed = iEikonEnv->TitleFont();
+	gc.UseFont(fontUsed);
+	gc.SetPenColor(KRgbBlack);
+	TPoint pos(iBorder,fontUsed->AscentInPixels()+iBorder);
+	gc.DrawText(iTitle, pos);
+
+	gc.DiscardFont();
+	}
+
+TInt CResourceView::CountComponentControls() const
+	{
+	return 4;
+	}
+
+CCoeControl* CResourceView::ComponentControl(TInt aIndex) const
+	{
+	CCoeControl* cmd = NULL;
+	switch (aIndex)
+		{
+		case 0:
+			{
+			cmd = iCommandButton;
+			break;
+			}		
+		case 1:
+			{
+			cmd = iObserveButton;
+			break;
+			}		
+		case 2:
+			{
+			cmd = iLoadButton;
+			break;
+			}		
+		default:
+			{
+			cmd = CResourceList::GetListBox();
+			}
+		}
+	return cmd;
+	}
+
+// for use by refresh button control
+void CResourceView::HandleControlEventL(CCoeControl* aControl,TCoeEvent /*aEventType*/)
+	{	
+	// This code is not nice. A better solution is to extend the CEikCommandButton class to have an enumerator 
+	// that distinguishes the buttons purpose in a given context. This avoids relying on the text of the label. I dont
+	// have the time to do it now. Also, the button names make no sense. They were named originally in the context of 
+	// 1 function, now they serve many
+	
+	LOG_MSG("->[UI]CResourceView::HandleControlEventL()");
+	if (aControl == iCommandButton)
+		{
+		if(iCommandButton->Label()->Text()->Compare(_L("Refresh")) == 0)
+			{
+			UpdateViewL();
+			}
+		else if(iCommandButton->Label()->Text()->Compare(_L("Bind")) == 0)
+			{
+			BindPluginsL();
+			}
+		UpdateViewL();
+		}
+	else if (aControl == iObserveButton)
+		{
+		if (iObserveButton->Label()->Text()->Compare(_L("Configure"))==0)
+			{
+			ConfigurePluginL();
+			}
+		else if(iObserveButton->Label()->Text()->Compare(_L("Observe"))==0)
+			{
+			SetObservedL();
+			}
+		else if(iObserveButton->Label()->Text()->Compare(_L("Process"))==0)
+			{
+			ProcessCrashL();
+			}
+		UpdateViewL();
+		}
+	else if (aControl == iLoadButton)
+		{
+		if(iLoadButton->Label()->Text()->Compare(_L("Load")) == 0)
+			{
+			LoadPluginL(); 
+			}
+		else if(iLoadButton->Label()->Text()->Compare(_L("Unload")) == 0)
+			{
+			UnloadPluginL(); 
+			}
+		else if(iLoadButton->Label()->Text()->Compare(_L("Delete")) == 0)
+			{
+			DeleteEntireCrashPartitionL();
+			}
+		UpdateViewL();
+		}
+	}
+
+void CResourceView::InvalidateView(void) const
+	{
+	Window().Invalidate(Rect()); //calls Draw()
+	}
+
+void CResourceView::UpdateViewL(void)
+	{
+	LOG_MSG("->[UI]CResourceView::UpdateView(void)");
+	UpdateListDataL();	
+	InvalidateView();
+	UpdateTitleL();
+	}
+
+void CResourceView::UpdateCrashProgressL()
+{    
+    InvalidateView();
+    UpdateTitleL();
+}
+
+void CResourceView::UpdateTitleL(void)
+	{
+	// assume the table data, iResourceCount and iObjectViewed data are up to date
+	TBufC<20> title;
+
+	// Set the title appropriately
+	switch (iObjectsViewed)
+		{
+		case EObjectProcess: 
+			{
+			iLoadButton->SetDimmed(ETrue);
+			iObserveButton->SetTextL(_L("Observe"));
+			title = _L("Processes");
+			iCommandButton->SetTextL(_L("Refresh"));
+			break;
+			}
+		case EObjectThread:
+			{
+			iLoadButton->SetDimmed(ETrue);
+			iObserveButton->SetTextL(_L("Observe"));
+			title = _L("Threads");
+			iCommandButton->SetTextL(_L("Refresh"));
+			break;
+			}
+		case EObjectPlugin:
+			{
+			iLoadButton->SetDimmed(EFalse);
+			title = _L("Plugins");
+			// for plugins, also change the label of the observe button to Configure
+			iObserveButton->SetDimmed(ETrue);
+			iLoadButton->SetTextL(_L("Load"));
+			iLoadButton->SetDimmed(EFalse);
+			iCommandButton->SetTextL(_L("Refresh"));
+			break;
+			}
+		case EObjectExecutable:
+			{
+			iLoadButton->SetDimmed(ETrue);
+			title = _L("Executables");
+			iObserveButton->SetTextL(_L("Observe"));
+			iObserveButton->SetDimmed(EFalse);
+			iCommandButton->SetTextL(_L("Refresh"));
+			break;
+			}
+		case EObjectPluginInstance:
+			{
+			title = _L("Plugin Instances");
+			iObserveButton->SetTextL(_L("Configure"));
+			iObserveButton->SetDimmed(EFalse);
+			iLoadButton->SetTextL(_L("Unload"));
+			iLoadButton->SetDimmed(EFalse);
+			iCommandButton->SetTextL(_L("Bind"));
+			break;
+			}
+		case EObjectCrashList:
+			{
+			title = _L("Crash List in Flash");
+			iObserveButton->SetTextL(_L("Process"));
+			iObserveButton->SetDimmed(EFalse);
+			iLoadButton->SetTextL(_L("Delete"));
+			iLoadButton->SetDimmed(EFalse);
+			iCommandButton->SetTextL(_L(""));
+			iCommandButton->SetDimmed(ETrue);
+			break;
+			}
+		default:
+			{
+			break;
+			}
+		}
+		
+	iObserveButton->SetSize(iObserveButton->MinimumSize());
+	TInt x = Rect().Width() - iObserveButton->Size().iWidth - iCommandButton->Size().iWidth - iBorder;
+	iObserveButton->SetPosition(TPoint(x, iBorder));
+	iObserveButton->SetContainerWindowL(*this);
+	iObserveButton->SetObserver(this);
+    
+	iLoadButton->SetSize(iLoadButton->MinimumSize());
+	x -= iLoadButton->Size().iWidth;
+	iLoadButton->SetPosition(TPoint(x, iBorder));
+	iLoadButton->SetContainerWindowL(*this);
+	iLoadButton->SetObserver(this);
+
+	//set title and resource count
+	TBuf<2> openingBracket(_L(" ("));
+	TBuf<1> closingBracket(_L(")"));
+	iTitle.Format(_L("%S%S%u%S %S"), &title, &openingBracket, iResourceCount, &closingBracket, &iCrashProgress);
+	}