homescreenapp/stateplugins/hsmenuworkerstateplugin/src/hscollectionnamedialog.cpp
branchRCL_3
changeset 82 5f0182e07bfb
--- /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());
+}