homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hscollectionnamedialog.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hscollectionnamedialog.cpp Tue Aug 31 15:06:34 2010 +0300
@@ -0,0 +1,229 @@
+/*
+ * 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: Menu name collection state
+ *
+ */
+
+#include <hbaction.h>
+#include <hbinputdialog.h>
+#include <hblineedit.h>
+#include <hbvalidator.h>
+#include <hsmenuservice.h>
+#include <QDebug>
+
+#include "hscollectionnamedialog.h"
+
+/*!
+ \class HsCollectionNameDialog
+ \ingroup group_hsworkerstateplugin
+ \brief Rename Collection State.
+ Collection name state
+ */
+
+/*!
+ \var HsCollectionNameDialog::mCollectionsNames
+ Collections names list from data model.
+ */
+
+/*
+ \var HsCollectionNameDialog::mLastCollectionName
+ Last found collection name.
+ */
+
+/*!
+ Maximum length if collection name
+ */
+const int qMaxStrLength = 248;
+
+/*!
+ Constructor
+ \param itemId Collection Id.
+ \retval void
+ */
+HsCollectionNameDialog::HsCollectionNameDialog(const int &itemId)
+{
+ HSMENUTEST_FUNC_ENTRY("HsInputDialog::HsInputDialog");
+ mOtherCollectionsNames = HsMenuService::getCollectionNames();
+
+
+ setInputMode(HbInputDialog::TextInput);
+ setPromptText(hbTrId("txt_applib_title_collection_name"));
+ lineEdit()->setMaxLength(qMaxStrLength);
+ if (itemId) {
+ const QString currentCollectionName(
+ HsMenuService::getName(itemId));
+ setValue(currentCollectionName);
+ mOtherCollectionsNames.removeOne(currentCollectionName);
+ mSuggestedNames << currentCollectionName;
+ } else {
+ setValue(hbTrId("txt_applib_dialog_entry_collection"));
+ }
+
+ HSMENUTEST_FUNC_EXIT("HsInputDialog::HsInputDialog");
+}
+
+/*!
+ Destructor
+ */
+HsCollectionNameDialog::~HsCollectionNameDialog()
+{
+ mOtherCollectionsNames.clear();
+ mSuggestedNames.clear();
+}
+
+/*!
+ Gets new collection's name.
+ \param item_id Item's id.
+ \retval Selected action.
+ */
+void HsCollectionNameDialog::open(QObject* receiver, const char* member)
+{
+ HSMENUTEST_FUNC_ENTRY("HsCollectionNameDialog::open");
+ this->setAttribute(Qt::WA_DeleteOnClose);
+
+ onTextChanged(value().toString());
+ makeConnect();
+
+ HbInputDialog::open(receiver, member);
+
+ HSMENUTEST_FUNC_EXIT("HsCollectionNameDialog::open");
+}
+
+/*!
+ \return User input if it is unique collection name or an unique collection name being
+ a combination of user name and a suffix matching following regular expression:
+ "\([0-9][1-9]\)|\([1-9][0-9]+\)"
+ */
+QString HsCollectionNameDialog::uniqueCollectionName() const
+{
+ return generateUniqueCollectionName(value().toString());
+}
+
+/*!
+ \reimp
+ Disconnects signals and calls base class impl. which emits finished(HbAction*)
+ */
+void HsCollectionNameDialog::closeEvent ( QCloseEvent * event )
+{
+ qDebug("HsCollectionNameDialog::closeEvent");
+ makeDisconnect();
+ HbDialog::closeEvent(event); // emits finished(HbAction*)
+}
+
+/*!
+ \param name Input string which is to be basename
+ of resulting unique collection name.
+ \return Unique collection name.
+ */
+QString HsCollectionNameDialog::generateUniqueCollectionName(
+ const QString &name) const
+{
+ HSMENUTEST_FUNC_ENTRY("HsInputDialog::newName");
+
+ QString newName(name);
+
+ unsigned int numToAppend(1);
+
+ while (mOtherCollectionsNames.contains(newName)) {
+ newName = hbTrId("txt_applib_dialog_entry_collectionl1").arg(
+ numToAppend);
+ numToAppend++;
+ }
+
+ HSMENUTEST_FUNC_EXIT("HsInputDialog::newName");
+ return newName;
+}
+/*!
+ \param name Input string which is to be basename
+ for suggested collection name.
+ \return Unique collection name if it was not yet proposed during lifetime of the dialog
+ or \a name otherwise.
+ */
+QString HsCollectionNameDialog::suggestedCollectionName(const QString &name)
+{
+ HSMENUTEST_FUNC_ENTRY("HsInputDialog::processInput");
+
+ QString newName = generateUniqueCollectionName(name);
+
+ if (mSuggestedNames.contains(newName)) {
+ newName = name;
+ }
+
+ if (newName != name) {
+ mSuggestedNames << newName;
+ }
+
+ HSMENUTEST_FUNC_EXIT("HsInputDialog::validate");
+ return newName;
+}
+
+/*!
+ Connects edit line signals to slots.
+ */
+void HsCollectionNameDialog::makeConnect()
+{
+ /*connect(lineEdit(), SIGNAL(textChanged(QString&text)),
+ SLOT(onTextChanged(QString&text)));*/
+
+ connect(lineEdit(), SIGNAL(contentsChanged()),
+ SLOT(onContentsChanged()));
+}
+
+/*!
+ Disconnects edit line signals from slots.
+ */
+void HsCollectionNameDialog::makeDisconnect()
+{
+ /*disconnect(lineEdit(), SIGNAL(textChanged(QString&text)),
+ this, SLOT(onTextChanged(QString&text)));*/
+ disconnect(lineEdit(), SIGNAL(contentsChanged()),
+ this, SLOT(onContentsChanged()));
+}
+
+/*!
+ This slot is received whenever the text changes.
+ This slot is also received when the text is
+ changed programmatically,
+ for example, by calling setText().
+ \param text the new text.
+ */
+void HsCollectionNameDialog::onTextChanged(const QString &text)
+{
+ qDebug() << QString("HsInputDialog::onTextChanged( %1 )").arg(text);
+ HSMENUTEST_FUNC_ENTRY("HsInputDialog::onTextChanged");
+ if (text.trimmed() == "" ) {
+ actions()[0]->setEnabled(false);
+ } else {
+ actions()[0]->setEnabled(true);
+ }
+
+ QString newText = suggestedCollectionName(text);
+ if (newText != text) {
+ makeDisconnect();
+ lineEdit()->setText(newText);
+ lineEdit()->setSelection(text.length(), newText.length()
+ - text.length());
+ makeConnect();
+ }
+ HSMENUTEST_FUNC_EXIT("HsInputDialog::onTextChanged");
+}
+
+/*!
+ This slot is received whenever the contents changes.
+ */
+void HsCollectionNameDialog::onContentsChanged()
+{
+ qDebug("HsInputDialog::onContentsChanged()");
+ onTextChanged(value().toString());
+}