javauis/lcdui_akn/lcdui/src/CMIDCommand.cpp
branchRCL_3
changeset 14 04becd199f91
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/lcdui_akn/lcdui/src/CMIDCommand.cpp	Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,199 @@
+/*
+* Copyright (c) 2006 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:  ?Description
+*
+*/
+
+
+// macros definitions for resources
+#include <lcdui.rsg>
+
+#include "CMIDCommand.h"
+//using CEikonEnv API for loading resources to label
+#include "eikenv.h"
+
+
+MMIDCommand* CMIDCommand::NewL(const TDesC& aShortLabel,const TDesC& aLongLabel,
+                               TCommandType aType,TInt aPriority,TInt aCommandID)
+{
+    CMIDCommand* command = new(ELeave) CMIDCommand(aType,aPriority,aCommandID);
+    CleanupStack::PushL(command);
+    command->ConstructL(aShortLabel,aLongLabel);
+    CleanupStack::Pop(command);
+    return command;
+}
+
+CMIDCommand* CMIDCommand::NewBuiltInCommandL(const TDesC& aLabel, TCommandType aType, TInt aId)
+{
+    return static_cast<CMIDCommand*>(CMIDCommand::NewL(aLabel, aLabel, aType, 0, aId));
+}
+
+HBufC* CMIDCommand::AlertDismissLabelL()
+{
+    // This method is static - that's why member variable iEikEnv cannot be used
+    return CEikonEnv::Static()->AllocReadResourceL(R_DISMISS_COMMAND_NAME);
+}
+
+HBufC* CMIDCommand::ListSelectLabelL()
+{
+    // This method is static - that's why member variable iEikEnv cannot be used
+    return CEikonEnv::Static()->AllocReadResourceL(R_SELECT_COMMAND_NAME);
+}
+
+CMIDCommand::CMIDCommand(TCommandType aType,TInt aPriority, TInt aId)
+        :iType(aType)
+        ,iPriority(aPriority)
+        ,iId(aId)
+        ,iEikEnv(*(CEikonEnv::Static()))
+{
+}
+
+CMIDCommand::~CMIDCommand()
+{
+    delete iShortLabel;
+    delete iLongLabel;
+}
+
+void CMIDCommand::ConstructL(const TDesC& aShortLabel,const TDesC& aLongLabel)
+{
+    switch (iId)
+    {
+    case MMIDCommand::EAlertDismissCommand:
+        iShortLabel = AlertDismissLabelL();
+        iLongLabel = AlertDismissLabelL();
+        break;
+
+    case MMIDCommand::EListSelectCommand:
+        iShortLabel = ListSelectLabelL();
+        iLongLabel = ListSelectLabelL();
+        break;
+
+    case MMIDCommand::ENullCommand:
+    default:
+        if (aShortLabel.Length())
+        {
+            iShortLabel = aShortLabel.AllocL();
+        }
+        else
+        {
+            // Use default label only if both short and long labels are empt
+            if (aLongLabel.Length())
+            {
+                iShortLabel= aLongLabel.AllocL();
+            }
+            else
+            {
+                iShortLabel = DefaultLabelL();
+            }
+        }
+        iLongLabel = aLongLabel.AllocL();
+        break;
+    }
+
+    // Finally, in all cases make sure that the long label is not left empty.
+    // If it would be, replace it with the short label.
+    if (!iLongLabel->Length())
+    {
+        delete iLongLabel;
+        iLongLabel = NULL;
+        iLongLabel = iShortLabel->AllocL();
+    }
+}
+
+const TDesC& CMIDCommand::Label() const
+{
+    return iLongLabel->Length() ? *iLongLabel : *iShortLabel;
+}
+
+MMIDCommand::TCommandType CMIDCommand::CommandType() const
+{
+    return iType;
+}
+
+TInt CMIDCommand::Priority() const
+{
+    return iPriority;
+}
+
+TInt CMIDCommand::Id() const
+{
+    return iId;
+}
+
+void CMIDCommand::Dispose()
+{
+    delete this;
+}
+
+const TDesC& CMIDCommand::ShortLabel() const
+{
+    return *iShortLabel;
+}
+
+void CMIDCommand::SetMappedToSoftKey(TBool aMapped) const
+{
+    iIsMappedToSoftKey = aMapped;
+}
+
+TBool CMIDCommand::IsMappedToSoftKey() const
+{
+    return iIsMappedToSoftKey;
+}
+
+HBufC* CMIDCommand::DefaultLabelL()
+{
+    HBufC* label = NULL;
+    switch (iType)
+    {
+    case EScreen:
+        label = iEikEnv.AllocReadResourceL(R_MIDP_SCREEN_COMMAND_TEXT);
+        break;
+    case EBack:
+        label = iEikEnv.AllocReadResourceL(R_MIDP_BACK_COMMAND_TEXT);
+        break;
+    case ECancel:
+        label = iEikEnv.AllocReadResourceL(R_MIDP_CANCEL_COMMAND_TEXT);
+        break;
+    case EOk:
+        label = iEikEnv.AllocReadResourceL(R_MIDP_OK_COMMAND_TEXT);
+        break;
+    case EHelp:
+        label = iEikEnv.AllocReadResourceL(R_MIDP_HELP_COMMAND_TEXT);
+        break;
+    case EStop:
+        label = iEikEnv.AllocReadResourceL(R_MIDP_STOP_COMMAND_TEXT);
+        break;
+    case EItem:
+        label = iEikEnv.AllocReadResourceL(R_MIDP_ITEM_COMMAND_TEXT);
+        break;
+    case EExit:
+        label = iEikEnv.AllocReadResourceL(R_MIDP_EXIT_COMMAND_TEXT);
+        break;
+    }
+    return label;
+}
+
+/** Set the current cmd observer, see MMIDCommandObserver. This can be a NULL
+pointer. Any previous observer is overwritten.*/
+void CMIDCommand::SetObserver(MMIDCommandObserver* aObserver)
+{
+    iObserver = aObserver;
+}
+
+MMIDCommandObserver* CMIDCommand::Observer() const
+{
+    return iObserver;
+}
+
+// End of File