⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tasklistview.cpp

📁 手机文件浏览器 Here are the sources to SMan v1.2c 1.2 is a major jump from v1.1. You will see this from the
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#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 + -