clock/clockui/clockcityselectionlist/src/clockcityselectionlist_p.cpp
branchRCL_3
changeset 65 12af337248b1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockcityselectionlist/src/clockcityselectionlist_p.cpp	Tue Aug 31 15:13:43 2010 +0300
@@ -0,0 +1,633 @@
+	/*
+* Copyright (c) 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:
+* Definition file for class ClockCitySelectionListPrivate.
+*
+*/
+
+// System includes
+#include <QStandardItemModel>
+#include <QModelIndex>
+#include <QGraphicsScene>
+#include <QTimer>
+#include <HbDocumentLoader>
+#include <HbView>
+#include <HbListView>
+#include <HbListViewItem>
+#include <HbMainWindow>
+#include <HbInstance>
+#include <HbStyleLoader>
+#include <HbAction>
+#include <HbSearchPanel>
+#include <HbLineEdit>
+#include <HbDialog>
+#include <HbLabel>
+#include <HbComboBox>
+#include <HbExtendedLocale>
+#include <HbAbstractItemView>
+#include <HbShrinkingVkbHost>
+
+// User includes
+#include "clockcityselectionlist_p.h"
+#include "clockcityselectionlist.h"
+#include "clockcitylistproxymodel.h"
+#include "clockcityselectionlistcommon.h"
+
+#include "timezoneclient.h"
+#include "clockdatatypes.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "clockcityselectionlist_pTraces.h"
+#endif
+
+
+/*!
+	\class ClockCitySelectionListPrivate
+
+	This is the private implementation class for ClockCitySelectionList class.
+ */
+
+/*!
+	Default constructor.
+
+	\param client The pointer to an object of TimezoneClient.
+	\param parent of type QObject.
+ */
+ClockCitySelectionListPrivate::ClockCitySelectionListPrivate(
+		TimezoneClient *client, QObject *parent)
+:QObject(parent),
+ mLoader(0),
+ mOwnsClient(false)
+{
+	OstTraceFunctionEntry0( CLOCKCITYSELECTIONLISTPRIVATE_CLOCKCITYSELECTIONLISTPRIVATE_ENTRY );
+	// First get the q-pointer.
+	q_ptr = static_cast<ClockCitySelectionList *> (parent);
+
+	mClient = client;
+	if (!mClient) {
+		mClient = TimezoneClient::getInstance();
+		mOwnsClient = true;
+	}
+	OstTraceFunctionExit0( CLOCKCITYSELECTIONLISTPRIVATE_CLOCKCITYSELECTIONLISTPRIVATE_EXIT );
+}
+
+/*!
+	Destructor.
+ */
+ClockCitySelectionListPrivate::~ClockCitySelectionListPrivate()
+{
+	OstTraceFunctionEntry0( DUP1_CLOCKCITYSELECTIONLISTPRIVATE_CLOCKCITYSELECTIONLISTPRIVATE_ENTRY );
+	if (mOwnsClient) {
+		mClient->deleteInstance();
+	}
+	if (mLoader) {
+		mLoader->reset();
+		delete mLoader;
+		mLoader = 0;
+	}
+	if (mListModel) {
+		delete mListModel;
+	}
+	if (mTimeZoneOffsetList.count()) {
+		mTimeZoneOffsetList.clear();
+	}
+	if(mCountryList.count()) {
+		mCountryList.clear();
+	}
+	if (mVirtualKeyboard) {
+	    delete mVirtualKeyboard;
+    }
+
+	OstTraceFunctionExit0( DUP1_CLOCKCITYSELECTIONLISTPRIVATE_CLOCKCITYSELECTIONLISTPRIVATE_EXIT );
+}
+
+/*!
+	Populates the list model by getting the data from timezone client.
+ */
+void ClockCitySelectionListPrivate::populateListModel()
+{
+	OstTraceFunctionEntry0( CLOCKCITYSELECTIONLISTPRIVATE_POPULATELISTMODEL_ENTRY );
+	// First get the data from the timezone client.
+	QList<LocationInfo> &infoList = mClient->getLocations();
+
+	// Sanity check.
+	if (!mListModel) {
+		mListModel = new QStandardItemModel(0, 1, this);
+	}
+	// Clear the model before starting population.
+	mListModel->removeRows(0,infoList.count()-1);
+	mListModel->insertRows(0, infoList.count());
+	mListModel->setColumnCount(1);
+
+	for (int iter = 0; iter < infoList.count(); iter++) {
+		QModelIndex index = mListModel->index(iter, 0);
+
+		// Get the location info and add it to the model.
+		LocationInfo info = infoList.at(iter);
+		QString displayString;
+		displayString += info.cityName;
+		displayString += ", ";
+		displayString += info.countryName;
+		mListModel->setData(index, displayString, Qt::DisplayRole);
+		mListModel->setData(index, displayString, Qt::UserRole + 100);
+
+		// Now save the timezone and city group ids.
+		mListModel->setData(
+				index, QVariant(info.timezoneId), Qt::UserRole + 101);
+		mListModel->setData(
+				index, QVariant(info.cityGroupId), Qt::UserRole + 102);
+		mListModel->setData(
+				index, info.cityName, Qt::UserRole + 103);
+		mListModel->setData(
+				index, info.countryName, Qt::UserRole + 104);
+	}
+
+	// Cleanup.
+	infoList.clear();
+	OstTraceFunctionExit0( CLOCKCITYSELECTIONLISTPRIVATE_POPULATELISTMODEL_EXIT );
+}
+
+/*!
+	Slot to handle the case when a list item is activated. Here we return the
+	city selected by the user. We emit a signal notifying this event and close
+	the editor.
+ */
+void ClockCitySelectionListPrivate::handleItemActivated(
+		const QModelIndex &index)
+{
+	OstTraceFunctionEntry0( CLOCKCITYSELECTIONLISTPRIVATE_HANDLEITEMACTIVATED_ENTRY );
+	LocationInfo selectedInfo;
+	selectedInfo.timezoneId = index.data(Qt::UserRole + 101).value<int>();
+	selectedInfo.cityGroupId = index.data(Qt::UserRole + 102).value<int>();
+	selectedInfo.cityName = index.data(Qt::UserRole + 103).value<QString>();
+	selectedInfo.countryName = index.data(Qt::UserRole + 104).value<QString>();
+	selectedInfo.zoneOffset =
+			mClient->getStandardOffset(selectedInfo.timezoneId);
+	selectedInfo.dstOn = mClient->isDSTOnL(selectedInfo.timezoneId);
+
+	// We have the information. Now emit a signal to notify clients if any.
+	emit q_ptr->citySelected(selectedInfo);
+
+	// Close the list.
+	closeCityList();
+	OstTraceFunctionExit0( CLOCKCITYSELECTIONLISTPRIVATE_HANDLEITEMACTIVATED_EXIT );
+}
+
+/*!
+	Slot to handle back action is pressed.
+ */
+void ClockCitySelectionListPrivate::handleBackAction()
+{
+	OstTraceFunctionEntry0( CLOCKCITYSELECTIONLISTPRIVATE_HANDLEBACKACTION_ENTRY );
+	LocationInfo info;
+	info.timezoneId = -1;
+
+	// Test code...
+	int rowCount = mListModel->rowCount();
+	QStandardItem *item = mListModel->item(0);
+	QString text = item->data(Qt::DisplayRole).value<QString>();
+	int tz = item->data(Qt::UserRole + 100).value<int>();
+	int cg = item->data(Qt::UserRole + 101).value<int>();
+	QString ci = item->data(Qt::UserRole + 102).value<QString>();
+	QString co = item->data(Qt::UserRole + 103).value<QString>();
+
+	// Emit the signal to notify the closure.
+	emit q_ptr->citySelected(info);
+
+	// Close the list.
+	closeCityList();
+	OstTraceFunctionExit0( CLOCKCITYSELECTIONLISTPRIVATE_HANDLEBACKACTION_EXIT );
+}
+
+/*!
+	closes the city selection list.
+ */
+void ClockCitySelectionListPrivate::closeCityList()
+{
+	OstTraceFunctionEntry0( CLOCKCITYSELECTIONLISTPRIVATE_CLOSECITYLIST_ENTRY );
+	// We are done, lets remove the view off the main window.
+	HbMainWindow *window = hbInstance->allMainWindows().at(0);
+	window->removeView(mView);
+
+	if (mLoader) {
+		mLoader->reset();
+		delete mLoader;
+		mLoader = 0;
+	}
+
+	if (mListModel) {
+		delete mListModel;
+	}
+	OstTraceFunctionExit0( CLOCKCITYSELECTIONLISTPRIVATE_CLOSECITYLIST_EXIT );
+}
+
+/*!
+	Updates the search criteria with the proxy model.
+
+	\param criteria The string entered by the user.
+ */
+void ClockCitySelectionListPrivate::updateSearchCriteria(
+		const QString &criteria)
+{
+     OstTraceFunctionEntry0( CLOCKCITYSELECTIONLISTPRIVATE_UPDATESEARCHCRITERIA_ENTRY );
+     int originalMask  = mListView->enabledAnimations();
+     mListView->setEnabledAnimations(HbAbstractItemView::TouchDown);
+
+	// Create the reg ex so that search is performed for match immediately
+	// after word boundary.
+	QString searchPattern("\\b");
+	searchPattern.append(criteria);
+
+	QRegExp searchExp;
+	searchExp.setPattern(searchPattern);
+
+	mProxyModel->setFilterRegExp(searchExp);
+	mProxyModel->setFilterCaseSensitivity(Qt::CaseInsensitive);
+	OstTraceFunctionExit0( CLOCKCITYSELECTIONLISTPRIVATE_UPDATESEARCHCRITERIA_EXIT );
+}
+
+/*!
+	Handles add own city menu action
+ */
+void ClockCitySelectionListPrivate::handleAddOwnCityAction()
+{
+	OstTraceFunctionEntry0( CLOCKCITYSELECTIONLISTPRIVATE_HANDLEADDOWNCITYACTION_ENTRY );
+	if (mAddOwnCityDialog) {
+		delete mAddOwnCityDialog;
+	}
+	
+	HbMainWindow *window = hbInstance->allMainWindows().first();
+
+	connect(
+			window, SIGNAL(orientationChanged(Qt::Orientation)),
+			this, SLOT(loadSection(Qt::Orientation)));
+	
+	mAddCityDocloader = new HbDocumentLoader();
+	bool success = false;
+	mAddCityDocloader->load(":/xml/clockaddcitydialog.docml", &success);
+	if (!success) {
+		qFatal("Unable to load the document.");
+	}
+
+	// Get the dialog.
+	mAddOwnCityDialog = static_cast<HbDialog *> (mAddCityDocloader->findWidget("dialog"));
+	if (!mAddOwnCityDialog) {
+		qFatal("Unable to get the selection view.");
+	}
+	mAddOwnCityDialog->setTimeout(HbDialog::NoTimeout);
+	mAddOwnCityDialog->setDismissPolicy(HbDialog::NoDismiss);
+	mAddOwnCityDialog->setAttribute(Qt::WA_DeleteOnClose, true);
+	
+	// Find the elements from the docml.
+	mCityNameEdit = static_cast<HbLineEdit *> (mAddCityDocloader->findWidget("cityNameLineEdit"));
+	
+	mTimeZoneComboBox = static_cast<HbComboBox *> (mAddCityDocloader->findWidget("timezoneCombobox"));
+	if (mTimeZoneComboBox) {
+		addTimeZoneField();
+	}
+	
+	mCountryComboBox = static_cast<HbComboBox *> (mAddCityDocloader->findWidget("counrtyCombobox"));
+	addCountryListField();
+	
+	mOkAction = static_cast<HbAction *> (mAddCityDocloader->findObject("okAction"));
+	
+	mAddOwnCityDialog->open(this, SLOT(selectedAction(HbAction*)));
+	OstTraceFunctionExit0( CLOCKCITYSELECTIONLISTPRIVATE_HANDLEADDOWNCITYACTION_EXIT );
+}
+
+/*!
+	Hanldes Ok action of add own city dialog
+ */
+void ClockCitySelectionListPrivate::handleOkAction()
+{
+	OstTraceFunctionEntry0( CLOCKCITYSELECTIONLISTPRIVATE_HANDLEOKACTION_ENTRY );
+	QString cityName = mCityNameEdit->text();
+
+	// Add the city if city name is not empty
+	if (!cityName.isEmpty()) {
+		int selectedTZOffset =
+				mTimeZoneOffsetList.at(mTimeZoneComboBox->currentIndex());
+
+		QString selectedCountry = mCountryComboBox->currentText();
+		int selectedCityGroupId(-1);
+		int selectedTimeZoneId(-1);
+		for (int index=0;index<mCountryList.count();index++) {
+			LocationInfo selectedInfo = mCountryList.at(index);
+			if(!(selectedCountry.compare(selectedInfo.countryName))) {
+				selectedCityGroupId = selectedInfo.cityGroupId;
+				selectedTimeZoneId = selectedInfo.timezoneId;
+			}
+		}
+
+		// Add the new city to the city list.
+		LocationInfo addedCity =
+				mClient->addCity(selectedTimeZoneId,cityName,selectedCityGroupId);
+
+		if (!addedCity.cityName.compare(cityName)) {
+			// Refresh the city list.
+			populateListModel();
+		}
+	}
+	OstTraceFunctionExit0( CLOCKCITYSELECTIONLISTPRIVATE_HANDLEOKACTION_EXIT );
+}
+
+/*!
+	Handles the selection of time zone offset.
+	Populates the country list.
+ */
+void ClockCitySelectionListPrivate::handleTimeZoneSelection(int index)
+{
+	OstTraceFunctionEntry0( CLOCKCITYSELECTIONLISTPRIVATE_HANDLETIMEZONESELECTION_ENTRY );
+	// Get the selected time zone offset.
+	int selectedTimeZoneOffset = mTimeZoneOffsetList.at(index);
+
+	if(mCountryList.count()) {
+		mCountryList.clear();
+	}
+
+	// Get country list for the offset selected
+	mCountryList = mClient->getCountriesForUTCOffset(selectedTimeZoneOffset);
+	int countryListCount = mCountryList.count();
+	QStringList countries;
+	for(int index=0;index<countryListCount;index++) {
+		countries.append(mCountryList.at(index).countryName);
+
+	qSort(countries);
+	mCountryComboBox->setItems(countries);
+	}
+	OstTraceFunctionExit0( CLOCKCITYSELECTIONLISTPRIVATE_HANDLETIMEZONESELECTION_EXIT );
+}
+
+/*!
+	Slot to handle the selected action
+ */
+void ClockCitySelectionListPrivate::selectedAction(HbAction *action)
+{
+	OstTraceFunctionEntry0( CLOCKCITYSELECTIONLISTPRIVATE_SELECTEDACTION_ENTRY );
+	if (action==mOkAction) {
+		handleOkAction();
+	}
+	OstTraceFunctionExit0( CLOCKCITYSELECTIONLISTPRIVATE_SELECTEDACTION_EXIT );
+}
+
+/*!
+	Slot to handle the orientation change.
+ */
+void ClockCitySelectionListPrivate::loadSection(Qt::Orientation orientation)
+{
+	OstTraceFunctionEntry0( CLOCKCITYSELECTIONLISTPRIVATE_LOADSECTION_ENTRY );
+	bool loadSuccess;
+	if (mAddOwnCityDialog) {
+		if (Qt::Horizontal == orientation) {
+			mAddCityDocloader->load(":/xml/clockaddcitydialog.docml",
+					"landscape", &loadSuccess);
+		} else if (Qt::Vertical == orientation) {
+			mAddCityDocloader->load(":/xml/clockaddcitydialog.docml",
+					"portrait", &loadSuccess);
+		}
+	}
+	OstTraceFunctionExit0( CLOCKCITYSELECTIONLISTPRIVATE_LOADSECTION_EXIT );
+}
+
+/*!
+	Slot to handle close action of search panel.
+	This slot cancels the search and dismisses the vkb.
+ */
+void ClockCitySelectionListPrivate::cancelSearch()
+{
+	OstTraceFunctionEntry0( CLOCKCITYSELECTIONLISTPRIVATE_CANCELSEARCH_ENTRY );
+	// Clear the search criteria.
+	mSearchBox->setCriteria(QString(""));
+	
+	// Hide the virtual keyborad.	
+	QInputContext *ic = qApp->inputContext();
+	if (ic) {
+		QEvent *event = new QEvent(QEvent::CloseSoftwareInputPanel);
+		ic->filterEvent(event);
+		delete event;
+	}
+	
+	// Set focus to the first city in the list.
+	mListView->scrollTo(mProxyModel->index(0, 0));
+	OstTraceFunctionExit0( CLOCKCITYSELECTIONLISTPRIVATE_CANCELSEARCH_EXIT );
+}
+
+/*!
+    Focuses the line edit when the city selection list is opened.
+ */
+void ClockCitySelectionListPrivate::focusLineEdit()
+{
+	OstTraceFunctionEntry0( CLOCKCITYSELECTIONLISTPRIVATE_FOCUSLINEEDIT_ENTRY );
+	if (mSearchBox) {
+		// mView->scene()->setFocusItem(mSearchBox);
+		HbLineEdit *searchBoxEditor = 0;
+		searchBoxEditor = static_cast<HbLineEdit*>(
+				mSearchBox->primitive("lineedit"));
+
+		if (searchBoxEditor) {
+			searchBoxEditor->setInputMethodHints(Qt::ImhNoPredictiveText);
+/*			HbMainWindow *window = hbInstance->allMainWindows().at(0);
+			window->scene()->setFocusItem(searchBoxEditor);*/
+
+			// searchBoxEditor->setCursorPosition(0);
+			searchBoxEditor->setFocus();
+		}
+		
+		QInputContext *ic = qApp->inputContext();
+		if (ic) {
+			QEvent *event = new QEvent(QEvent::RequestSoftwareInputPanel);
+			ic->filterEvent(event);
+			delete event;
+		}
+	}
+	OstTraceFunctionExit0( CLOCKCITYSELECTIONLISTPRIVATE_FOCUSLINEEDIT_EXIT );
+}
+
+/*!
+	Displays the city selection list.
+ */
+void ClockCitySelectionListPrivate::showCityList()
+{
+	OstTraceFunctionEntry0( CLOCKCITYSELECTIONLISTPRIVATE_SHOWCITYLIST_ENTRY );
+	// Construct the document loader.
+	bool success = false;
+	mLoader = new HbDocumentLoader;
+	mLoader->load(":/xml/clockcityselectionlist.docml", &success);
+	if (!success) {
+		qFatal("Unable to load the document.");
+	}
+
+	// Get the selection view.
+	mView = static_cast<HbView *> (mLoader->findWidget(CITYSELECTIONLISTVIEW));
+	if (!mView) {
+		qFatal("Unable to get the selection view.");
+	}
+	// Set the shrinking vkb host to prevent pushing of the list.
+	mVirtualKeyboard = new HbShrinkingVkbHost(mView);
+	
+	// Get the list view.
+	mListView = static_cast<HbListView *> (mLoader->findWidget(CITYLISTVIEW));
+	if (!mListView) {
+		qFatal("Unable to get the list view.");
+	}
+
+	// Get the searchPanel.
+	mSearchBox = static_cast<HbSearchPanel *> (mLoader->findWidget("lineEdit"));
+	if (!mSearchBox) {
+		qFatal("Unable to get the searchpanel.");
+	}
+	mSearchBox->setProgressive(true);
+	mSearchBox->setSearchOptionsEnabled(false);
+
+	connect(
+			mSearchBox, SIGNAL(criteriaChanged(QString)),
+			this, SLOT(updateSearchCriteria(QString)));
+	connect(mSearchBox, SIGNAL(exitClicked()),
+	        this, SLOT(cancelSearch()));
+	
+	// Construct the source model.
+	if (!mListModel) {
+		mListModel = new QStandardItemModel(0, 1, this);
+	}
+	// Construct the proxy model.
+	mProxyModel = new ClockCityListProxyModel(this);
+	mProxyModel->setDynamicSortFilter(true);
+	mProxyModel->setSourceModel(mListModel);
+	mProxyModel->setFilterRole(Qt::UserRole + 100);
+
+	// Construct the model for the list.
+	QTimer::singleShot(1, this, SLOT(populateListModel()));
+
+	// Set the model to the list.
+	mListView->setModel(mProxyModel);
+
+	// Listen for list item activated signal.
+	connect(
+			mListView, SIGNAL(activated(QModelIndex)),
+			this, SLOT(handleItemActivated(QModelIndex)));
+
+	// Read the actions for menu
+	mAddOwnCityAction = static_cast<HbAction *>(
+			mLoader->findObject(ADDOWNCITYACTION));
+
+	// Listen for menu triggered signal
+	connect(
+			mAddOwnCityAction, SIGNAL(triggered()),
+			this, SLOT(handleAddOwnCityAction()));
+
+	// Add the view to the main window and show it.
+	HbMainWindow *window = hbInstance->allMainWindows().at(0);
+	mBackAction = new HbAction(Hb::BackNaviAction, this);
+	mView->setNavigationAction(mBackAction);
+	connect(
+			mBackAction, SIGNAL(triggered()),
+			this, SLOT(handleBackAction()));
+
+	window->addView(mView);
+	window->setCurrentView(mView);
+	
+	// Focus the search box.
+	focusLineEdit();
+
+	OstTraceFunctionExit0( CLOCKCITYSELECTIONLISTPRIVATE_SHOWCITYLIST_EXIT );
+}
+
+/*!
+	Get all the time zone offset texts.
+ */
+QStringList ClockCitySelectionListPrivate::getOffsetTexts()
+{
+	OstTraceFunctionEntry0( CLOCKCITYSELECTIONLISTPRIVATE_GETOFFSETTEXTS_ENTRY );
+	int offsetCount(mTimeZoneOffsetList.count());
+
+	// Get all the time zone offsets
+	if (!offsetCount) {
+		mTimeZoneOffsetList = mClient->getAllTimeZoneOffsets();
+		offsetCount = mTimeZoneOffsetList.count();
+	}
+
+	QStringList offsetTextList;
+	int offsetvalue;
+	QString offsetText;
+	int hours;
+	int minutes;
+	HbExtendedLocale locale =  HbExtendedLocale::system();
+	for(int index=0;index<offsetCount;index++) {
+		offsetvalue = mTimeZoneOffsetList.at(index);
+		hours = offsetvalue/60;
+		minutes = offsetvalue%60;
+
+		if (hours>0) {
+			offsetText += "+";
+		} else if (hours<0) {
+			offsetText += "-";
+		}
+
+		offsetText += locale.format(
+				QTime(qAbs(hours),qAbs(minutes),0,0),
+				r_qtn_time_durat_short_with_zero);
+
+	offsetTextList.append(offsetText);
+	offsetText.clear();
+	}
+	OstTraceFunctionExit0( CLOCKCITYSELECTIONLISTPRIVATE_GETOFFSETTEXTS_EXIT );
+	return offsetTextList;
+}
+
+/*!
+	Add city name edit field to add own city popup.
+ */
+void ClockCitySelectionListPrivate::addCityNameField()
+{
+	OstTraceFunctionEntry0( CLOCKCITYSELECTIONLISTPRIVATE_ADDCITYNAMEFIELD_ENTRY );
+	mCityNameEdit = new HbLineEdit();
+	mCityNameEdit->setFocus(Qt::MouseFocusReason);
+	OstTraceFunctionExit0( CLOCKCITYSELECTIONLISTPRIVATE_ADDCITYNAMEFIELD_EXIT );
+}
+
+/*!
+	Add timezone field to add own city popup.
+ */
+void ClockCitySelectionListPrivate::addTimeZoneField()
+{
+OstTraceFunctionEntry0( CLOCKCITYSELECTIONLISTPRIVATE_ADDTIMEZONEFIELD_ENTRY );
+//	mTimeZoneComboBox = new HbComboBox();
+
+	QStringList texts = getOffsetTexts();
+	mTimeZoneComboBox->addItems(texts);
+
+	// Get the home city information.
+	LocationInfo homeCityInfo = mClient->getCurrentZoneInfoL();
+	mCurrentTZOffsetIndex = mTimeZoneOffsetList.indexOf(
+			homeCityInfo.zoneOffset);
+	mTimeZoneComboBox->setCurrentIndex(mCurrentTZOffsetIndex);
+
+	connect(
+			mTimeZoneComboBox, SIGNAL(currentIndexChanged(int)),
+			this, SLOT(handleTimeZoneSelection(int)));
+	OstTraceFunctionExit0( CLOCKCITYSELECTIONLISTPRIVATE_ADDTIMEZONEFIELD_EXIT );
+}
+
+/*!
+	Add country list field to add own city popup.
+ */
+void ClockCitySelectionListPrivate::addCountryListField()
+{
+	OstTraceFunctionEntry0( CLOCKCITYSELECTIONLISTPRIVATE_ADDCOUNTRYLISTFIELD_ENTRY );
+	// Populate the country list based on the current TZ offset selected.
+	handleTimeZoneSelection(mCurrentTZOffsetIndex);
+	OstTraceFunctionExit0( CLOCKCITYSELECTIONLISTPRIVATE_ADDCOUNTRYLISTFIELD_EXIT );
+}
+
+// End of file	--Don't remove this.