tstaskmonitor/utils/src/tsentry.cpp
changeset 104 9b022b1f357c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tstaskmonitor/utils/src/tsentry.cpp	Tue Jul 06 14:37:10 2010 +0300
@@ -0,0 +1,409 @@
+/*
+ * Copyright (c) 2008 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:  Task list entry
+ *
+ */
+
+#define __E32SVR_H__
+#include <s32strm.h>
+#include <fbs.h>
+#include "tsentry.h"
+#include "tsdataobserver.h"
+
+
+// --------------------------------------------------------------------------
+// CTsFswEntry::NewL
+// --------------------------------------------------------------------------
+//
+CTsEntry* CTsEntry::NewL()
+{
+    CTsEntry* self = NewLC();
+    CleanupStack::Pop(self);
+    return self;
+}
+
+// --------------------------------------------------------------------------
+// CTsFswEntry::NewLC
+// --------------------------------------------------------------------------
+//
+CTsEntry* CTsEntry::NewLC()
+{
+    CTsEntry* self = new (ELeave) CTsEntry;
+    CleanupStack::PushL(self);
+    return self;
+}
+
+// --------------------------------------------------------------------------
+// CTsFswEntry::NewL
+// --------------------------------------------------------------------------
+//
+CTsEntry* CTsEntry::NewL(const TTsEntryKey& key, MHsDataObserver *observer)
+{
+    CTsEntry* self = NewLC(key, observer);
+    CleanupStack::Pop(self);
+    return self;
+}
+
+// --------------------------------------------------------------------------
+// CTsFswEntry::NewLC
+// --------------------------------------------------------------------------
+//
+CTsEntry* CTsEntry::NewLC(const TTsEntryKey& key, MHsDataObserver* observer)
+{
+    CTsEntry* self = new (ELeave) CTsEntry(key, observer);
+    CleanupStack::PushL(self);
+    return self;
+}
+
+// --------------------------------------------------------------------------
+// CTsFswEntry::~CTsFswEntry
+// --------------------------------------------------------------------------
+//
+CTsEntry::~CTsEntry()
+{
+    delete mAppName;
+    delete mAppIconBitmap;
+    delete mAppIconMask;
+    delete mScreenshot;
+    delete mImgTool;
+}
+
+// --------------------------------------------------------------------------
+// CTsFswEntry::CTsFswEntry
+// --------------------------------------------------------------------------
+//
+CTsEntry::CTsEntry() :
+    mVisibility(Visible),
+    mPriority(Low)
+{
+    mKey = TTsEntryKey();
+}
+
+// --------------------------------------------------------------------------
+// CTsFswEntry::CTsFswEntry
+// --------------------------------------------------------------------------
+//
+CTsEntry::CTsEntry(const TTsEntryKey& key, MHsDataObserver *observer) 
+:
+    mVisibility(Visible),
+    mKey(key), 
+    mPriority(Low), 
+    mObserver(observer)
+{
+}
+
+// --------------------------------------------------------------------------
+// CTsFswEntry::SetAppUid
+// --------------------------------------------------------------------------
+//
+void CTsEntry::SetAppUid(const TUid& uid)
+{
+    mAppUid = uid;
+}
+
+// --------------------------------------------------------------------------
+// CTsFswEntry::SetAppNameL
+// --------------------------------------------------------------------------
+//
+void CTsEntry::SetAppNameL(const TDesC& appName)
+{
+    delete mAppName;
+    mAppName = 0;
+    mAppName = appName.AllocL();
+}
+
+// --------------------------------------------------------------------------
+// CTsFswEntry::SetSystemApp
+// --------------------------------------------------------------------------
+//
+void CTsEntry::SetCloseableApp(TBool value)
+{
+    mCloseableApp = value;
+}
+
+// --------------------------------------------------------------------------
+// CTsFswEntry::SetAppIconHandles
+// --------------------------------------------------------------------------
+//
+void CTsEntry::SetAppIcon(CFbsBitmap* bitmap, CFbsBitmap* mask)
+{
+    mAppIconBitmap = bitmap;
+    mAppIconMask = mask;
+}
+
+// --------------------------------------------------------------------------
+/**
+ * Application uid.
+ */
+TUid CTsEntry::AppUid() const
+{
+    return mAppUid;
+}
+
+// --------------------------------------------------------------------------
+/**
+ * Application name.
+ */
+const TDesC& CTsEntry::AppName() const
+{
+    return mAppName ? *mAppName : KNullDesC();
+}
+
+// --------------------------------------------------------------------------
+/**
+ * Retrieve entry visibilit status
+ */
+Visibility CTsEntry::GetVisibility() const
+{
+    return mVisibility;
+}
+
+// --------------------------------------------------------------------------
+/**
+ * Change entry visibility status
+ * @param visibility - new visibility status
+ */
+void CTsEntry::SetVisibility(Visibility visibility)
+{
+    mVisibility = visibility;
+}
+
+// --------------------------------------------------------------------------
+/**
+ * ETrue if the application is closeable
+ */
+TBool CTsEntry::CloseableApp() const
+{
+    return mCloseableApp;
+}
+
+// --------------------------------------------------------------------------
+/**
+ * Application icon bitmap
+ */
+CFbsBitmap* CTsEntry::AppIconBitmap() const
+{
+    return mAppIconBitmap;
+}
+
+// --------------------------------------------------------------------------
+/**
+ * Application icon mask.
+ */
+CFbsBitmap* CTsEntry::AppIconMask() const
+{
+    return mAppIconMask;
+}
+
+// --------------------------------------------------------------------------
+/**
+ * Entry's key
+ */
+const TTsEntryKey& CTsEntry::Key() const
+{
+    return mKey;
+}
+// --------------------------------------------------------------------------
+// CTsFswEntry::ExternalizeL
+// --------------------------------------------------------------------------
+//
+void CTsEntry::ExternalizeL(RWriteStream& stream) const
+{
+    stream.WriteInt32L(mAppUid.iUid);
+    stream << AppName();
+    stream.WriteInt32L(mCloseableApp);
+    if (mAppIconBitmap) {
+        stream.WriteInt32L(mAppIconBitmap->Handle());
+    }
+    else {
+        stream.WriteInt32L(KErrNotFound);
+    }
+
+    if (mAppIconMask) {
+        stream.WriteInt32L(mAppIconMask->Handle());
+    }
+    else {
+        stream.WriteInt32L(KErrNotFound);
+    }
+
+    if (mScreenshot) {
+        stream.WriteInt32L(mScreenshot->Handle());
+    }
+    else {
+        stream.WriteInt32L(KErrNotFound);
+    }
+
+    mKey.ExternalizeL(stream);
+    TInt currentPriority = static_cast<TInt> (mPriority);
+    stream.WriteInt32L(currentPriority);
+}
+
+// --------------------------------------------------------------------------
+// CTsFswEntry::InternalizeL
+// --------------------------------------------------------------------------
+//
+void CTsEntry::InternalizeL(RReadStream& stream)
+{
+    
+    mAppUid = TUid::Uid(stream.ReadInt32L());
+    delete mAppName;
+    mAppName = NULL;
+    mAppName = HBufC::NewL(stream, KMaxTInt);
+    mCloseableApp = stream.ReadInt32L();
+    TInt appIconBitmapHandle = stream.ReadInt32L();
+    TInt appIconMaskHandle = stream.ReadInt32L();
+    TInt screenshotHandle = stream.ReadInt32L();
+    if (appIconBitmapHandle != KErrNotFound) {
+        mAppIconBitmap = new (ELeave) CFbsBitmap;
+        mAppIconBitmap->Duplicate(appIconBitmapHandle);
+    }
+    if (appIconMaskHandle != KErrNotFound) {
+        mAppIconMask = new (ELeave) CFbsBitmap;
+        mAppIconMask->Duplicate(appIconMaskHandle);
+    }
+    if (screenshotHandle != KErrNotFound) {
+        mScreenshot = new (ELeave) CFbsBitmap;
+        mScreenshot->Duplicate(screenshotHandle);
+    }
+    mKey.InternalizeL(stream);
+    TInt currentPriority = stream.ReadInt32L();
+    mPriority = static_cast<UpdatePriority> (currentPriority);
+}
+
+// --------------------------------------------------------------------------
+// CTsFswEntry::ExternalizeArrayL
+// --------------------------------------------------------------------------
+//
+void CTsEntry::ExternalizeArrayL(RWriteStream& stream, const RTsFswArray& array)
+{
+    TInt iter(0);
+    RArray<TInt> visibleItems(array.Count() ? array.Count() : 1);
+    CleanupClosePushL(visibleItems);
+    for (iter = 0; iter < array.Count(); ++iter) {
+        if (Visible == array[iter]->GetVisibility()) {
+            visibleItems.AppendL(iter);
+        }
+    }
+    stream.WriteInt32L(visibleItems.Count());
+    for (iter = 0; iter < visibleItems.Count(); ++iter) {
+        array[visibleItems[iter]]->ExternalizeL(stream);
+    }
+    CleanupStack::PopAndDestroy(&visibleItems);
+}
+
+// --------------------------------------------------------------------------
+// CTsFswEntry::InternalizeArrayL
+// --------------------------------------------------------------------------
+//
+void CTsEntry::InternalizeArrayL(RReadStream& stream, RTsFswArray& array)
+{
+    array.ResetAndDestroy();
+    TInt count = stream.ReadInt32L();
+    for (TInt i = 0; i < count; ++i) {
+        CTsEntry* entry = CTsEntry::NewLC();
+        entry->InternalizeL(stream);
+        array.AppendL(entry);
+        CleanupStack::Pop(entry);
+    }
+}
+
+// --------------------------------------------------------------------------
+/**
+ * Application type.
+ */
+TAppType CTsEntry::Type() const
+{
+    return EApp;
+}
+
+// --------------------------------------------------------------------------
+// CTsFswEntry::SetScreenshot
+// --------------------------------------------------------------------------
+//
+void CTsEntry::SetScreenshotL(const CFbsBitmap& bitmapArg, UpdatePriority priority)
+{
+    TInt currentPriority = static_cast<TInt> (mPriority);
+    TInt newPriority = static_cast<TInt> (priority);
+    if(newPriority <currentPriority) {
+        User::Leave(KErrAccessDenied);
+    }
+    
+    CFbsBitmap* bitmap = new (ELeave) CFbsBitmap;
+    CleanupStack::PushL(bitmap);
+    User::LeaveIfError(bitmap->Duplicate(bitmapArg.Handle()));
+    CleanupStack::Pop(bitmap);
+
+    mPriority = priority;
+    delete mScreenshot;
+    mScreenshot = bitmap;
+
+    delete mImgTool;
+    mImgTool = 0;
+
+    mImgTool = CTsGraphicFileScalingHandler::NewL(*this, *mScreenshot, TSize(128, 128),
+    CTsGraphicFileScalingHandler::EKeepAspectRatioByExpanding);
+}
+
+// --------------------------------------------------------------------------
+// CTsFswEntry::RemoveScreenshot
+// --------------------------------------------------------------------------
+//
+void CTsEntry::RemoveScreenshotL()
+{
+    if (!mScreenshot) {
+        User::Leave(KErrNotFound);
+    }
+    delete mScreenshot;
+    mScreenshot = NULL;
+    mPriority = Low;
+    if (mObserver) {
+        mObserver->DataChanged();
+    }
+}
+
+// --------------------------------------------------------------------------
+/**
+ * Application screenshot.
+ */
+CFbsBitmap* CTsEntry::Screenshot() const
+{
+    return mScreenshot;
+}
+
+// --------------------------------------------------------------------------
+/**
+ * Priority.
+ */
+UpdatePriority CTsEntry::Priority() const
+{
+    return mPriority;
+}
+
+// --------------------------------------------------------------------------
+// CTsFswEntry::Priority
+// --------------------------------------------------------------------------
+//
+void CTsEntry::ImageReadyCallBack(TInt error, const CFbsBitmap *bitmap)
+{
+    if (KErrNone == error && 0 != bitmap) {
+        mScreenshot->Reset();
+        mScreenshot->Duplicate(bitmap->Handle());
+
+        if (mObserver) {
+            mObserver->DataChanged();
+        }
+    }
+}
+
+// end of file