perfapps/memspyui/ui/hb/src/viewmanager.cpp
author hgs
Fri, 17 Sep 2010 14:22:55 +0300
changeset 52 36d60d12b4af
parent 51 b048e15729d6
permissions -rw-r--r--
201037
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
51
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
hgs
parents:
diff changeset
     3
 * All rights reserved.
hgs
parents:
diff changeset
     4
 * This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
 * under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
 * which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
 *
hgs
parents:
diff changeset
     9
 * Initial Contributors:
hgs
parents:
diff changeset
    10
 * Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
 *
hgs
parents:
diff changeset
    12
 * Contributors:
hgs
parents:
diff changeset
    13
 *
hgs
parents:
diff changeset
    14
 * Description:
hgs
parents:
diff changeset
    15
 *  
hgs
parents:
diff changeset
    16
 */
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
#include <HbMainWindow>
hgs
parents:
diff changeset
    19
#include <HbAction>
hgs
parents:
diff changeset
    20
#include <HbMessageBox>
hgs
parents:
diff changeset
    21
#include <HbLabel>
hgs
parents:
diff changeset
    22
hgs
parents:
diff changeset
    23
#include "viewmanager.h"
hgs
parents:
diff changeset
    24
hgs
parents:
diff changeset
    25
#include "enginewrapper.h"
hgs
parents:
diff changeset
    26
#include "memspyview.h"
hgs
parents:
diff changeset
    27
#include "memspymainview.h"
hgs
parents:
diff changeset
    28
#include "memspyprocessview.h"
hgs
parents:
diff changeset
    29
#include "memspythreadview.h"
hgs
parents:
diff changeset
    30
#include "memspythreaddetailindexview.h"
hgs
parents:
diff changeset
    31
#include "memspythreaddetailview.h"
hgs
parents:
diff changeset
    32
#include "memspykernelobjecttypeview.h"
hgs
parents:
diff changeset
    33
#include "memspykernelobjectview.h"
hgs
parents:
diff changeset
    34
#include "memspykernelobjectdetailview.h"
hgs
parents:
diff changeset
    35
#include "memspytrackingview.h"
hgs
parents:
diff changeset
    36
#include "memspyswmtview.h"
hgs
parents:
diff changeset
    37
#include "memspyheapdumpsview.h"
hgs
parents:
diff changeset
    38
#include "memspyserverview.h"
hgs
parents:
diff changeset
    39
#include "memspyecomcategoryview.h"
hgs
parents:
diff changeset
    40
#include "memspyecominterfaceview.h"
hgs
parents:
diff changeset
    41
#include "memspyecomimplementationview.h"
hgs
parents:
diff changeset
    42
#include "memspyecomimplementationdetailview.h"
52
hgs
parents: 51
diff changeset
    43
#include "memspywindowgroupsview.h"
hgs
parents: 51
diff changeset
    44
#include "memspywindowgroupsdetailview.h"
51
hgs
parents:
diff changeset
    45
hgs
parents:
diff changeset
    46
template <typename T>
hgs
parents:
diff changeset
    47
static MemSpyView* factory(EngineWrapper &engine, ViewManager &viewManager)
hgs
parents:
diff changeset
    48
{
hgs
parents:
diff changeset
    49
	return new T(engine, viewManager);
hgs
parents:
diff changeset
    50
}
hgs
parents:
diff changeset
    51
// This array needs to be in sync with view enum
hgs
parents:
diff changeset
    52
MemSpyView* (*sFactories[])(EngineWrapper&, ViewManager&) = { 
hgs
parents:
diff changeset
    53
	&factory<MemSpyMainView>,
hgs
parents:
diff changeset
    54
	&factory<MemSpyProcessView>,
hgs
parents:
diff changeset
    55
	&factory<MemSpyThreadView>,
hgs
parents:
diff changeset
    56
	&factory<MemSpyThreadDetailIndexView>,
hgs
parents:
diff changeset
    57
	&factory<MemSpyThreadDetailView>,
hgs
parents:
diff changeset
    58
	&factory<MemSpyKernelObjectTypeView>,
hgs
parents:
diff changeset
    59
	&factory<MemSpyKernelObjectView>,
hgs
parents:
diff changeset
    60
	&factory<MemSpyKernelObjectDetailView>,
hgs
parents:
diff changeset
    61
	&factory<MemSpyTrackingView>,
hgs
parents:
diff changeset
    62
	&factory<MemSpySwmtView>,
hgs
parents:
diff changeset
    63
	&factory<MemSpyHeapDumpsView>,
hgs
parents:
diff changeset
    64
	&factory<MemSpyServerView>,
hgs
parents:
diff changeset
    65
	&factory<MemSpyEComCategoryView>,
hgs
parents:
diff changeset
    66
	&factory<MemSpyEComInterfaceView>,
hgs
parents:
diff changeset
    67
	&factory<MemSpyEComImplementationView>,
hgs
parents:
diff changeset
    68
	&factory<MemSpyEComImplementationDetailView>,
52
hgs
parents: 51
diff changeset
    69
	&factory<MemSpyWindowGroupsView>,
hgs
parents: 51
diff changeset
    70
	&factory<MemSpyWindowGroupsDetailView>,
51
hgs
parents:
diff changeset
    71
};
hgs
parents:
diff changeset
    72
hgs
parents:
diff changeset
    73
hgs
parents:
diff changeset
    74
ViewManager::ViewManager(HbMainWindow &window, EngineWrapper &engine, QObject *parent) :
hgs
parents:
diff changeset
    75
	QObject(parent),
hgs
parents:
diff changeset
    76
	mWindow(window),
hgs
parents:
diff changeset
    77
	mEngine(engine)
hgs
parents:
diff changeset
    78
{
hgs
parents:
diff changeset
    79
	connect(&mWindow, SIGNAL(currentViewChanged(HbView *)), this, SLOT(viewChanged(HbView *)));
hgs
parents:
diff changeset
    80
}
hgs
parents:
diff changeset
    81
hgs
parents:
diff changeset
    82
void ViewManager::showView(ViewIndex viewIndex, const QVariantMap &params)
hgs
parents:
diff changeset
    83
{
hgs
parents:
diff changeset
    84
    MemSpyView* view;
hgs
parents:
diff changeset
    85
    try {
hgs
parents:
diff changeset
    86
        view = sFactories[viewIndex](mEngine, *this);
hgs
parents:
diff changeset
    87
        view->initialize(params);
hgs
parents:
diff changeset
    88
    }
hgs
parents:
diff changeset
    89
    catch (std::exception& ex)
hgs
parents:
diff changeset
    90
    {
hgs
parents:
diff changeset
    91
        // show message box with exception
hgs
parents:
diff changeset
    92
        // TODO: qt_symbian_exception2Error shouldn't probably be here
hgs
parents:
diff changeset
    93
        QString error = tr("An error occured during the operation. Error code: %1").arg(
hgs
parents:
diff changeset
    94
                qt_symbian_exception2Error(ex));
hgs
parents:
diff changeset
    95
        
hgs
parents:
diff changeset
    96
        HbMessageBox *messageBox = new HbMessageBox(HbMessageBox::MessageTypeWarning);
hgs
parents:
diff changeset
    97
        messageBox->setText(error);
hgs
parents:
diff changeset
    98
        HbLabel *header = new HbLabel(tr("Error"), messageBox);
hgs
parents:
diff changeset
    99
        messageBox->setHeadingWidget(header);
hgs
parents:
diff changeset
   100
        messageBox->setAttribute(Qt::WA_DeleteOnClose);
hgs
parents:
diff changeset
   101
        messageBox->setTimeout(HbPopup::StandardTimeout);
hgs
parents:
diff changeset
   102
        messageBox->open();
hgs
parents:
diff changeset
   103
        
hgs
parents:
diff changeset
   104
        delete view;
hgs
parents:
diff changeset
   105
        return;
hgs
parents:
diff changeset
   106
    }
hgs
parents:
diff changeset
   107
    
hgs
parents:
diff changeset
   108
	if (viewIndex != MainView) {
hgs
parents:
diff changeset
   109
		HbAction* action = new HbAction(Hb::BackNaviAction, this);
hgs
parents:
diff changeset
   110
		connect(action, SIGNAL(triggered()), this, SLOT(goBack()));
hgs
parents:
diff changeset
   111
		view->setNavigationAction(action);
hgs
parents:
diff changeset
   112
	}
hgs
parents:
diff changeset
   113
		
hgs
parents:
diff changeset
   114
	mWindow.addView(view);
hgs
parents:
diff changeset
   115
	mWindow.setCurrentView(view);
hgs
parents:
diff changeset
   116
}
hgs
parents:
diff changeset
   117
hgs
parents:
diff changeset
   118
void ViewManager::showView(ViewIndex viewIndex)
hgs
parents:
diff changeset
   119
{
hgs
parents:
diff changeset
   120
	showView(viewIndex, QVariantMap());
hgs
parents:
diff changeset
   121
}
hgs
parents:
diff changeset
   122
hgs
parents:
diff changeset
   123
void ViewManager::goBack()
hgs
parents:
diff changeset
   124
{
hgs
parents:
diff changeset
   125
	const QList<HbView*> views = mWindow.views();
hgs
parents:
diff changeset
   126
	int index = views.indexOf(mWindow.currentView());
hgs
parents:
diff changeset
   127
	mWindow.setCurrentView(views.at(index-1), true, Hb::ViewSwitchUseBackAnim);
hgs
parents:
diff changeset
   128
}
hgs
parents:
diff changeset
   129
hgs
parents:
diff changeset
   130
void ViewManager::viewChanged(HbView *view)
hgs
parents:
diff changeset
   131
{
hgs
parents:
diff changeset
   132
	const QList<HbView*> views = mWindow.views();
hgs
parents:
diff changeset
   133
	int index = views.indexOf(view);
hgs
parents:
diff changeset
   134
	for (int i=views.count()-1; i>index; i--)
hgs
parents:
diff changeset
   135
		mWindow.removeView(views.at(i));
hgs
parents:
diff changeset
   136
}