javauis/lcdui_akn/lcdui/src/CMIDChoiceGroupElement.cpp
branchRCL_3
changeset 19 04becd199f91
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/lcdui_akn/lcdui/src/CMIDChoiceGroupElement.cpp	Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,135 @@
+/*
+* Copyright (c) 2003-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:  CMIDChoiceGroupElement encapsulates a ChoiceGroup
+*                listbox entry (text, image, selection state and all)
+*
+*/
+
+
+
+//  INCLUDES
+#include <fbs.h>
+#include <bitdev.h>
+#include <gdi.h>
+
+#include "CMIDChoiceGroupElement.h"
+#include "CMIDUtils.h"
+
+const TInt KSpaceForNumber    = 6;
+const TInt KSpaceForTabulator = 1;
+
+CMIDChoiceGroupElement* CMIDChoiceGroupElement::NewL()
+{
+    return new(ELeave)CMIDChoiceGroupElement();
+}
+
+CMIDChoiceGroupElement::CMIDChoiceGroupElement()
+{
+}
+
+
+// Destructor
+CMIDChoiceGroupElement::~CMIDChoiceGroupElement()
+{
+    delete iText;
+
+    if (Flags() & CGEF_OWNSICON)
+    {
+        delete iIcon;
+    }
+}
+
+
+// Set element text
+void CMIDChoiceGroupElement::SetTextL(const TDesC& aText)
+{
+    // Get rid of old text, set to NULL in case allocation fails
+    if (iText)
+    {
+        delete iText;
+        iText = NULL;
+    }
+
+    // Make a copy of the string
+    iText = aText.AllocL();
+}
+
+
+// Retrieve text for the listbox. This means that the image indeces
+// are also added into the string and separated by tabs
+const TPtrC CMIDChoiceGroupElement::LboxText(TInt aImageIndex)
+{
+    // Construct a new line with the correct image index
+    _LIT(KLboxLineFormat, "%d\t%d\t%S");
+    delete iLboxText;
+
+    // Reserve space for number + tab + number + tab + element text
+    TInt len = 2 * KSpaceForNumber + 2 * KSpaceForTabulator + (iText ? iText->Length() : 0);
+    iLboxText = HBufC::New(len);
+
+    if (!iLboxText)
+    {
+        return TPtrC(KNullDesC);
+    }
+
+    // Write the string into the buffer
+    TPtr ptr = iLboxText->Des();
+    ptr.Format(
+        KLboxLineFormat,
+        IsSelected() ? 0 : 1,
+        aImageIndex,
+        iText);
+
+    return ptr;
+}
+
+
+// Set icon. If owned, an icon is deleted by the element
+void CMIDChoiceGroupElement::SetIcon(
+    CGulIcon* aIcon,
+    TBool aElementOwnsIcon /*= ETrue */)
+{
+    // Get rid of old icon, if any and if owned
+    if ((iIcon) && (Flags() & CGEF_OWNSICON))
+    {
+        delete iIcon;
+    }
+
+    iIcon = aIcon;
+
+    if (aElementOwnsIcon)
+    {
+        iFlags |= CGEF_OWNSICON;
+    }
+    else
+    {
+        iFlags &= ~CGEF_OWNSICON;
+    }
+}
+
+
+// Set icon from bitmaps. If owned, an icon is deleted by the element
+// We expect that the bitmaps have been created for us and are in the correct format
+void CMIDChoiceGroupElement::SetIconL(
+    CFbsBitmap& aBitmap,
+    CFbsBitmap* aMask /* = NULL */,
+    TBool aElementOwnsIcon /* = ETrue */)
+{
+    CGulIcon* icon = CGulIcon::NewL(&aBitmap, aMask);
+    icon->SetBitmapsOwnedExternally(!aElementOwnsIcon);
+
+    SetIcon(icon, aElementOwnsIcon);
+}
+
+// End of File