📄 tasklistview.cpp
字号:
#include "tasklistview.h"
#include "sman.h"
#include <gulicon.h>
#include <SMan.rsg>
/*************************************************************
*
* Task view object
*
**************************************************************/
CSMan2TaskListView::CSMan2TaskListView(CConfig *cData) : CViewBase(cData)
{
}
TBool CSMan2TaskListView::ViewScreenModeCompatible(TInt aScreenMode)
{
return (aScreenMode == 0);
}
TVwsViewIdAndMessage CSMan2TaskListView::ViewScreenDeviceChangedL()
{
return TVwsViewIdAndMessage(TVwsViewId(KUidSMan2App, KUidFlipclosedView));
}
void CSMan2TaskListView::ViewDeactivated()
{
activateCount--;
if (activateCount <= 0)
{
MakeVisible(EFalse);
static_cast<CEikAppUi*>(iEikonEnv->AppUi())->RemoveFromStack(this);
}
}
void CSMan2TaskListView::ViewActivatedL(const TVwsViewId& /*aPrevViewId*/, TUid /*aCustomMessageId*/, const TDesC8& /*aCustomMessage*/)
{
doViewActivated();
}
TVwsViewId CSMan2TaskListView::ViewId() const
{
return TVwsViewId(KUidSMan2App, KUidTaskView);
}
CSMan2TaskListView::~CSMan2TaskListView()
{
if (taskRefresher->IsActive())
taskRefresher->Cancel();
delete taskRefresher;
delete snapshotTasks;
}
void CSMan2TaskListView::ToggleHotKey(void)
{
if (iCapturedHotkeyHandle != 0)
CEikonEnv::Static()->RootWin().CancelCaptureKey(iCapturedHotkeyHandle);
iCapturedHotkeyHandle = 0;
if (configData->hotkeyEnabled)
{
if ((configData->iHotkeyDialogResult != 0) && (configData->iHotkeyDialogResult != 3)) // 3 = flip open
iCapturedHotkeyHandle = CEikonEnv::Static()->RootWin().CaptureKey(sCaptureKeyCodes[configData->iHotkeyDialogResult],0,0,2);
}
}
int CSMan2TaskListView::loadSnapShot(void)
{
RFile inStream;
int retVal;
retVal = 1;
snapshotTasks->Reset();
if (inStream.Open(iEikonEnv->Static()->FsSession(), snapshotFileName, EFileRead) == KErrNone)
{
TInt fileSize;
inStream.Size(fileSize);
if (fileSize > 1)
{
TFileText snapshotFile;
TBuf<128> buffer;
snapshotFile.Set(inStream);
while (snapshotFile.Read(buffer) == KErrNone)
snapshotTasks->AppendL(buffer);
retVal = 0;
}
inStream.Close();
}
return retVal;
}
int CSMan2TaskListView::saveSnapShot(void)
{
RFile outStream;
int retVal;
retVal = 1;
if (outStream.Replace(iEikonEnv->Static()->FsSession(), snapshotFileName, EFileRead) == KErrNone)
{
TFileText snapshotFile;
snapshotFile.Set(outStream);
for (int i = 0; i < snapshotTasks->Count(); i++)
{
snapshotFile.Write(snapshotTasks->At(i));
}
retVal = 0;
outStream.Close();
}
return retVal;
}
TKeyResponse CSMan2TaskListView::OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType)
{
if (aType == EEventKey)
{
if (aKeyEvent.iCode == EQuartzKeyConfirm)
{
refreshTaskList(TODO_FOCUS);
return EKeyWasConsumed;
}
else if (aKeyEvent.iCode == EQuartzKeyTwoWayDown)
{
cTaskListBox->View()->MoveCursorL(CListBoxView::ECursorNextItem, CListBoxView::ENoSelection);
cTaskListBox->UpdateScrollBarsL();
return EKeyWasConsumed;
}
else if (aKeyEvent.iCode == EQuartzKeyTwoWayUp)
{
cTaskListBox->View()->MoveCursorL(CListBoxView::ECursorPreviousItem, CListBoxView::ENoSelection);
cTaskListBox->UpdateScrollBarsL();
return EKeyWasConsumed;
}
}
return cTaskListBox->OfferKeyEventL(aKeyEvent, aType);
}
void CSMan2TaskListView::InitToolBarButton(CEikBitmapButton **aButton, TPoint aPosition, TFileName *bitmapFile, TInt aBitmapId, TInt aBitmapMaskId)
{
*aButton = new (ELeave) CEikBitmapButton();
(*aButton)->SetPictureFromFileL(*bitmapFile, aBitmapId, aBitmapMaskId, CEikCommandButtonBase::EFirst);
(*aButton)->SetContainerWindowL(*this);
(*aButton)->SetObserver(this);
(*aButton)->SetExtent(aPosition, TSize(40, 26));
controlsArray->AppendL(*aButton);
}
void CSMan2TaskListView::ConstructL(const TRect& aRect)
{
oldItem = -1;
CreateWindowL();
SetExtent(aRect.iTl, aRect.Size());
snapshotTasks = new (ELeave) CArrayFixSeg<TApaAppCaption>(3);
snapshotFileName.Copy(appPathNoExt);
snapshotFileName.Append(_L("snp"));
if (loadSnapShot() == 1)
iEikonEnv->InfoMsgWithAlignment(TGulAlignment(EHRightVCenter), R_TBUF_NOPREVSNAPSHOT);
else
iEikonEnv->InfoMsgWithAlignment(TGulAlignment(EHRightVCenter), R_TBUF_SNAPSHOTLOADED);
// Initialize listbox
cTaskListBox = new(ELeave) CEikColumnListBox;
cTaskListBox->ConstructL(this, CEikColumnListBox::EMultipleSelection);
CColumnListBoxData* listBoxColumns = ((CColumnListBoxItemDrawer*)cTaskListBox->ItemDrawer())->ColumnData();
listBoxColumns->SetGraphicsColumnL(0, ETrue);
listBoxColumns->SetColumnWidthPixelL(0, int(Size().iWidth * 0.10));
listBoxColumns->SetColumnWidthPixelL(1, int(Size().iWidth * 0.45));
listBoxColumns->SetColumnWidthPixelL(2, int(Size().iWidth * 0.32));
listBoxColumns->SetColumnAlignmentL(0, CGraphicsContext::ECenter);
listBoxColumns->SetColumnAlignmentL(1, CGraphicsContext::ELeft);
listBoxColumns->SetColumnAlignmentL(2, CGraphicsContext::ERight);
// This is destroyed on first call to refreshtasklist
CArrayPtr<CGulIcon>* iconArray = new CArrayPtrFlat<CGulIcon>(1);
listBoxColumns->SetIconArray(iconArray);
cTaskListBox->CreateScrollBarFrameL();
cTaskListBox->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EAuto, CEikScrollBarFrame::EAuto);
cTaskListBox->SetExtent(TPoint(0, 0), TSize(Size().iWidth, int(Size().iHeight * 0.84)));
controlsArray->AppendL(cTaskListBox);
TFileName bitmapFile;
TInt horizOffset, vertOffset;
horizOffset = 4;
vertOffset = 0;
bitmapFile.Copy(appPathNoExt);
bitmapFile.Append(_L("MBM"));
// Flush button
InitToolBarButton(&flushButton, TPoint(0 + horizOffset, cTaskListBox->Position().iY +
cTaskListBox->Size().iHeight + vertOffset), &bitmapFile, EMbmMyheaderFlushout, EMbmMyheaderFlushoutmask);
// End task button
InitToolBarButton(&endTaskButton, TPoint(flushButton->Size().iWidth + horizOffset, cTaskListBox->Position().iY +
cTaskListBox->Size().iHeight + vertOffset), &bitmapFile, EMbmMyheaderEndtask, EMbmMyheaderEndtaskmask);
// Refresh button
InitToolBarButton(&refreshButton, TPoint(flushButton->Size().iWidth * 2 + horizOffset, cTaskListBox->Position().iY +
cTaskListBox->Size().iHeight + vertOffset), &bitmapFile, EMbmMyheaderRefresh, EMbmMyheaderRefreshmask);
// Snapshot button
InitToolBarButton(&snapshotButton, TPoint(flushButton->Size().iWidth * 3 + horizOffset, cTaskListBox->Position().iY +
cTaskListBox->Size().iHeight + vertOffset), &bitmapFile, EMbmMyheaderSnapshot, EMbmMyheaderSnapshotmask);
// Compress heap button
InitToolBarButton(&compHeapButton, TPoint(flushButton->Size().iWidth * 4 + horizOffset, cTaskListBox->Position().iY +
cTaskListBox->Size().iHeight + vertOffset), &bitmapFile, EMbmMyheaderCompress, EMbmMyheaderCompressmask);
// Initialize label
memStatus = new (ELeave) CEikLabel;
memStatusText.Format(_L("SMan - Free RAM: 0KB"));
memStatus->SetTextL(memStatusText);
memStatus->SetContainerWindowL(*this);
memStatus->SetExtent(TPoint(25, compHeapButton->Position().iY + compHeapButton->Size().iHeight + 2),
TSize(Size().iWidth, 14));
controlsArray->AppendL(memStatus);
// Bluejack icon.
viewId = CSMan2AppUi::EViewTask;
bjackIconPosition = TPoint(2, compHeapButton->Position().iY + compHeapButton->Size().iHeight + 6);
initBJackIcon();
ToggleHotKey();
taskRefresher = new (ELeave) CRefreshTaskList;
SetZoomLevel(configData->zoomMain);
this->EnableDragEvents();
MakeVisible(EFalse);
ActivateL();
}
void CSMan2TaskListView::SetZoomLevel(TInt zoomLevel)
{
generateZoomFont(zoomLevel);
CTextListItemDrawer* itemDrawer = ((CTextListItemDrawer*)cTaskListBox->View()->ItemDrawer());
itemDrawer->SetFont(font);
cTaskListBox->SetItemHeightL(font->HeightInPixels() + cTaskListBox->VerticalInterItemGap());
configData->zoomMain = zoomLevel;
releaseFont();
}
void CSMan2TaskListView::HandlePointerEventL(const TPointerEvent& aPointerEvent)
{
TBool consumed = EFalse;
TInt theItem;
TBool pointValid = cTaskListBox->View()->XYPosToItemIndex(aPointerEvent.iPosition, theItem);
if (aPointerEvent.iType == TPointerEvent::EDrag)
{
if ((pointValid) && (oldItem != theItem))
{
consumed = ETrue;
cTaskListBox->View()->VerticalMoveToItemL(theItem, CListBoxView::EDisjointSelection);
cTaskListBox->UpdateScrollBarsL();
oldItem = theItem;
}
}
else if (aPointerEvent.iType == TPointerEvent::EButton1Down)
{
if (pointValid)
{
oldItem = theItem;
consumed = ETrue;
if (aPointerEvent.iPosition.iX > cTaskListBox->View()->ItemDrawer()->MarkColumn())
{
cTaskListBox->ClearSelection();
cTaskListBox->SetCurrentItemIndex(theItem);
refreshTaskList(TODO_FOCUS);
}
else
{
cTaskListBox->View()->VerticalMoveToItemL(theItem, CListBoxView::EDisjointSelection);
cTaskListBox->UpdateScrollBarsL();
}
}
}
if (!consumed)
CCoeControl::HandlePointerEventL(aPointerEvent);
}
void CSMan2TaskListView::refreshTaskList(TInt intTodo)
{
RApaLsSession oApaLsSession;
CApaWindowGroupName* oWindowGroupName;
CArrayFixFlat<TInt>* windowGroupList;
TInt currentItemIndex;
CDesCArray *itemArray;
CArrayFixSeg<TApaAppCaption>* markedArrayText;
TPtrC currentTaskCaption, temp;
TApaAppCaption highlightedTask;
RThread currentTaskThread;
TBool taskRemoved;
TThreadId threadId;
TFullName tempCaption;
currentItemIndex = cTaskListBox->CurrentItemIndex();
itemArray = ((CDesCArray *) cTaskListBox->Model()->ItemTextArray());
CArrayPtr<CGulIcon>* iconArray = ((CColumnListBoxItemDrawer*)cTaskListBox->ItemDrawer())->ColumnData()->IconArray();
iconArray->ResetAndDestroy();
delete iconArray;
iconArray = new CArrayPtrFlat<CGulIcon>(3);
((CColumnListBoxItemDrawer*)cTaskListBox->ItemDrawer())->ColumnData()->SetIconArray(iconArray);
// Build the marked array. This is used for TODO_TERMINATE only
if (intTodo == TODO_TERMINATE)
{
markedArrayText = new CArrayFixSeg<TApaAppCaption>(3);
for (int i = 0; i < cTaskListBox->SelectionIndexes()->Count(); i++)
{
temp.Set(cTaskListBox->Model()->ItemText(cTaskListBox->SelectionIndexes()->At(i)));
TextUtils::ColumnText(currentTaskCaption, 1, &temp);
markedArrayText->AppendL(currentTaskCaption);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -