--- /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);
+ }