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

📄 sman.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 页 / 共 5 页
字号:
#include "SMan.h"
#include <SMan.rsg>
#include <cntdb.h>

//#include <etelmm.h>
//#include <etel.h>

/*************************************************************
*
* Application object
*
**************************************************************/

CApaDocument* CSMan2Application::CreateDocumentL()
{
	CSMan2Document* doc = new (ELeave) CSMan2Document(*this);
	CleanupStack::PushL(doc);
	doc->ConstructL();
	CleanupStack::Pop();
	return doc;
}

/*************************************************************
*
* Document object
*
**************************************************************/

CSMan2Document* CSMan2Document::NewL(CEikApplication& aApp)
{
	CSMan2Document* self = new (ELeave) CSMan2Document(aApp);
	CleanupStack::PushL(self);
	self->ConstructL();
	CleanupStack::Pop();
	return self;
}

CSMan2Document::CSMan2Document(CEikApplication& aApp)
		: CQikDocument(aApp)
{
}

CSMan2Document::~CSMan2Document()
{
}

TInt CSMan2Document::loadConfig(void)
{
	RFile inStream;
	TInt retVal;
	
	retVal = KErrGeneral;
	if (inStream.Open(CEikonEnv::Static()->FsSession(), configFileName, EFileRead) == KErrNone)
	{
		TInt fileSize;
		
		inStream.Size(fileSize);
		if (fileSize >= (TInt)sizeof(verData))
		{
			CVerInfo verData;
			
			// Check config version. If correct, load it else ignore it
			
			TPckg<CVerInfo> pkgVerData(verData);
			if (inStream.Read(pkgVerData) == KErrNone)
			{
				if ((verData.majorVersion == VER_MAJOR) && (verData.minorVersion == VER_MINOR))
				{
					TPckg<CConfig> pkgConfigData(configData);
					if (inStream.Read(pkgConfigData) == KErrNone)
						retVal = KErrNone;
				}
			}
		}
		inStream.Close();
	}
	return retVal;
}

void CSMan2Document::saveConfig(void)
{
	RFile outStream;
	TInt retVal;
	
	retVal = KErrGeneral;
	if (outStream.Replace(CEikonEnv::Static()->FsSession(), configFileName, EFileRead) == KErrNone)
	{
		verData.majorVersion = VER_MAJOR;
		verData.minorVersion = VER_MINOR;
		TPckg<CVerInfo> pkgVerData(verData);
		if (outStream.Write(pkgVerData) == KErrNone)
		{
			TPckg<CConfig> pkgConfigData(configData);
			if (outStream.Write(pkgConfigData) == KErrNone)
				retVal = KErrNone;
		}
		outStream.Close();
	}
	if (retVal != KErrNone)
		CEikonEnv::Static()->InfoMsg(R_TBUF_ERRSAVECONFIG);
}

void CSMan2Document::ConstructL()
{
	for (int i = 0; i < NUM_SHORTCUTS; i++)
		configData.shortCutUid[i] = KNullUid;
	configData.autoSave = CONFIG_AUTOSAVE;
	configData.hotkeyEnabled = CONFIG_HOTKEY_ENABLED;
	configData.resolveName = CONFIG_RESOLVE_HOSTNAME;
	configData.showBluejackSysMsg = CONFIG_SHOW_BLUEJACK_SYSMSG;
	configData.proxSweepOnce = CONFIG_PROX_SWEEP_ONCE;
	configData.flipFlush = CONFIG_FLIPFLUSH;
	configData.forceEndTask = CONFIG_FORCE_ENDTASK;
	configData.noDevicePause = CONFIG_NO_DEVICE_PAUSE;
	configData.noDeviceAttempts = CONFIG_NO_DEVICE_ATTEMPTS;
	configData.showHiddenTasks = CONFIG_SHOW_HIDDEN_TASKS;
	configData.decayTime = CONFIG_DECAY_TIME;
	configData.logFlags = CLogger::logAll;
	configData.obexTimeout = CONFIG_OBEX_TIMEOUT;
	configData.vibraNotify = CONFIG_VIBRA_NOTIFY;
	configData.audioFileName.Copy(_L(""));
	configData.persist = CONFIG_PERSIST;
	configData.beamProtocol = CONFIG_BEAM_PROTOCOL;
	configData.showHiddenFiles = CONFIG_FILEMAN_SHOWHIDDEN;
	configData.zoomMain = CONFIG_ZOOM_MAIN;
	configData.zoomFile = CONFIG_ZOOM_FILE;
	configData.zoomBJack = CONFIG_ZOOM_BJACK;
	configData.zoomDB = CONFIG_ZOOM_DB;
	configData.zoomSysInfo = CONFIG_ZOOM_SYSINFO;
	configData.autoRunApp = CONFIG_AUTO_RUNAPP;
	configData.autoOpenFile = CONFIG_AUTO_OPENFILE;
	configData.fnActivatedMenus = CONFIG_FN_ACTIVATED_MENUS;
	configData.dbSortAscending = CONFIG_DB_SORT_ASCENDING;
	configData.zoomAgenda = CONFIG_ZOOM_AGENDA;
	configData.agendaShowCompleteCalendar = CONFIG_AGENDA_SHOW_COMPLETE_CALENDAR;
	configData.agendaShowCompleteTodo = CONFIG_AGENDA_SHOW_COMPLETE_TODO;
	configData.agendaAutoExpandCalendar = CONFIG_AGENDA_AUTOEXPAND_CALENDAR;
	configData.agendaAutoExpandTodo = CONFIG_AGENDA_AUTOEXPAND_TODO;
	configData.defaultView = CONFIG_FN_DEFAULT_VIEW;

	// Config cannot be loaded now because we need the full path of the application and
	// this is only available after the application is constructed. Therefore, config
	// loading happens in the App class's ConstructL() member
}

CQikAppUi* CSMan2Document::CreateAppUiL()
{
	return new(ELeave) CSMan2AppUi(&configData);
}

/*************************************************************
*
* AppUi object
*
**************************************************************/

CSMan2AppUi::~CSMan2AppUi()
{
	DeregisterView(*iTaskView);
	DeregisterView(*iFileView);
	DeregisterView(*iFlipCloseView);
	DeregisterView(*iBJackView);
	DeregisterView(*iSysInfoView);
	DeregisterView(*iDBView);
	DeregisterView(*iAgendaView);
	
	delete iTaskView;
	delete iFileView;
	delete iFlipCloseView;
	delete iBJackView;
	delete iSysInfoView;
	delete iDBView;
	delete iAgendaView;
	
	delete smanFileMan;
	delete startUidList;
	delete historyUidList;
}

void CSMan2AppUi::HandleForegroundEventL(TBool aForeground)
{
	CQikAppUi::HandleForegroundEventL(aForeground);
	if (aForeground)
	{
		appInForeground = ETrue;
		
		// Flip open mode
		if (CEikonEnv::Static()->ScreenDevice()->CurrentScreenMode() == 0)
		{
			TVwsViewId defaultView;
			if (GetDefaultViewId(defaultView) == KErrNone)
			{
				if (defaultView.iViewUid == KUidTaskView)
					iTaskView->refreshTaskList(TODO_REFRESH);
			}
		}
	
		// Re-activate marquee if we are in file view
		if (!(iFileView->currentPathScroller->IsActive()))
			iFileView->currentPathScroller->startMarquee(iFileView->labelCurrentFolder, &(iFileView->currentPath));
	}
	else
	{
		appInForeground = EFalse;
		
		/*
		if (CEikonEnv::Static()->ScreenDevice()->CurrentScreenMode() == 1)
		{
			iFlipCloseView->popupActive = EFalse;
		}
		*/

		// Stop the marquee to conserve battery power
		if (iFileView->currentPathScroller->IsActive())
			iFileView->currentPathScroller->Cancel();
	}
}

void CSMan2AppUi::switchView(TInt viewId)
{		
	// Save battery
	if (iFileView->currentPathScroller->IsActive())
		iFileView->currentPathScroller->Cancel();

	if (viewId == EViewAgenda)
	{
		CEikonEnv::Static()->AppUiFactory()->MenuBar()->ChangeMenuBarL(0, R_AGENDA_MENUBAR, EFalse);
		CEikonEnv::Static()->AppUiFactory()->MenuBar()->MakeVisible(ETrue);
		CEikonEnv::Static()->AppUiFactory()->MenuBar()->SetPosition(TPoint(0, iOldMenuBarYPos));
		
		SetToolbarL(R_TOOLBAR_AGENDA);
		SetDefaultViewL(*iAgendaView);
	}
	if (viewId == EViewTask)
	{
		CEikonEnv::Static()->AppUiFactory()->MenuBar()->ChangeMenuBarL(0, R_MEMORY_MENUBAR, EFalse);
		CEikonEnv::Static()->AppUiFactory()->MenuBar()->MakeVisible(ETrue);
		CEikonEnv::Static()->AppUiFactory()->MenuBar()->SetPosition(TPoint(0, iOldMenuBarYPos));

		RemoveToolbarL();
		SetDefaultViewL(*iTaskView);
	}
	else if (viewId == EViewBJack)
	{
		CEikonEnv::Static()->AppUiFactory()->MenuBar()->ChangeMenuBarL(0, R_BLUEJACK_MENUBAR, EFalse);
		CEikonEnv::Static()->AppUiFactory()->MenuBar()->MakeVisible(ETrue);
		CEikonEnv::Static()->AppUiFactory()->MenuBar()->SetPosition(TPoint(0, iOldMenuBarYPos));

		SetToolbarL(R_TOOLBAR_BLUEJACK);
		SetDefaultViewL(*iBJackView);

		iBJackView->oScanner->SetToolbarButtonState();
	}
	else if (viewId == EViewDB)
	{
		CEikonEnv::Static()->AppUiFactory()->MenuBar()->ChangeMenuBarL(0, R_DB_MENUBAR, EFalse);
		CEikonEnv::Static()->AppUiFactory()->MenuBar()->MakeVisible(ETrue);
		CEikonEnv::Static()->AppUiFactory()->MenuBar()->SetPosition(TPoint(0, iOldMenuBarYPos));

		if (iDBView->currentDBView == CSMan2DBView::DBView_List)
			SetToolbarL(R_TOOLBAR_DB_LIST);
		else
			SetToolbarL(R_TOOLBAR_DB_SINGLE);
			
		//SetDefaultViewL(*iDBView);
	}
	else if (viewId == EViewSysInfo)
	{
		CEikonEnv::Static()->AppUiFactory()->MenuBar()->ChangeMenuBarL(0, R_SYSINFO_MENUBAR, EFalse);
		CEikonEnv::Static()->AppUiFactory()->MenuBar()->MakeVisible(ETrue);
		CEikonEnv::Static()->AppUiFactory()->MenuBar()->SetPosition(TPoint(0, iOldMenuBarYPos));

		RemoveToolbarL();
		//SetDefaultViewL(*iSysInfoView);
	}
	else if (viewId == EViewFile)
	{
		if (!(iFileView->currentPathScroller->IsActive()))
			iFileView->currentPathScroller->startMarquee(iFileView->labelCurrentFolder, &(iFileView->currentPath));

		CEikonEnv::Static()->AppUiFactory()->MenuBar()->ChangeMenuBarL(0, R_FILE_MENUBAR, EFalse);
		CEikonEnv::Static()->AppUiFactory()->MenuBar()->MakeVisible(ETrue);
		CEikonEnv::Static()->AppUiFactory()->MenuBar()->SetPosition(TPoint(0, iOldMenuBarYPos));
			
		SetToolbarL(R_TOOLBAR_FILEMAN);
		SetDefaultViewL(*iFileView);
	}
	else if (viewId == EViewFlipClosed)
	{
		CEikonEnv::Static()->AppUiFactory()->MenuBar()->MakeVisible(EFalse);
		
/* DEBUG TEST
		CEikonEnv::Static()->AppUiFactory()->MenuBar()->ChangeMenuBarL(0, R_FC_BLUEJACK_MENUBAR, EFalse);
		CEikonEnv::Static()->AppUiFactory()->MenuBar()->MakeVisible(ETrue);
		CEikonEnv::Static()->AppUiFactory()->MenuBar()->SetPosition(TPoint(0, 0));
*/

		RemoveToolbarL();
	}
}

void CSMan2AppUi::updateBJackIcon(TBool draw)
{
	// To be sure we get this right, update ALL views.
	iTaskView->drawBJackIcon(draw);
	iFileView->drawBJackIcon(draw);
	iFlipCloseView->drawBJackIcon(draw);
	iBJackView->drawBJackIcon(draw);
	iDBView->drawBJackIcon(draw);
	iSysInfoView->drawBJackIcon(draw);
	iAgendaView->drawBJackIcon(draw);	
}

void CSMan2AppUi::ConstructL()
{
	BaseConstructL();

	appInForeground = EFalse;
	
	// Note: You need to load this first because some of the views created rely on the
	// loaded values for initialization
	static_cast<CSMan2Document*>(Document())->configFileName.Copy(CEikonEnv::Static()->EikAppUi()->Application()->AppFullName());
	static_cast<CSMan2Document*>(Document())->configFileName.SetLength(static_cast<CSMan2Document*>(Document())->configFileName.Length() - 3);
	static_cast<CSMan2Document*>(Document())->configFileName.Append(_L("cfg"));
	
	// Load config and initialize vars based on config
	static_cast<CSMan2Document*>(Document())->loadConfig();
	//CEikonEnv::Static()->InfoMsg(R_TBUF_ERRLOADCONFIG);

	oldScreenMode = iCoeEnv->ScreenDevice()->CurrentScreenMode();
	bjackIconLabelCurrentImage = 0;

	iTaskView = new (ELeave) CSMan2TaskListView(configData);
	iTaskView->ConstructL(ClientRect());

	iFlipCloseView = new (ELeave) CSMan2FlipCloseView(configData);
	iFlipCloseView->ConstructL(ClientRect());

	iFileView = new (ELeave) CSMan2FileListView(configData);
	iFileView->ConstructL(ClientRect());

	iBJackView = new (ELeave) CSMan2BJackView(configData);
	iBJackView->ConstructL(ClientRect());

	iSysInfoView = new (ELeave) CSMan2SysInfoView(configData);
	iSysInfoView->ConstructL(ClientRect());

	iDBView = new (ELeave) CSMan2DBView(configData);
	iDBView->ConstructL(ClientRect());
	
	iAgendaView = new (ELeave) CSMan2AgendaView(configData);
	iAgendaView->ConstructL(ClientRect());
	
	RegisterViewL(*iFileView);
	RegisterViewL(*iFlipCloseView);
	RegisterViewL(*iTaskView);
	RegisterViewL(*iBJackView);
	RegisterViewL(*iSysInfoView);
	RegisterViewL(*iDBView);
	RegisterViewL(*iAgendaView);
	
	smanFileMan = new (ELeave) CSManFileMan(configData);
	startUidList = new (ELeave) CArrayFixFlat<TUid>(3);
	historyUidList = new (ELeave) CArrayFixFlat<TUid>(NUM_LASTRUN_HISTORY);
	historyUidList->AppendL(KNullUid);
	historyUidList->AppendL(KNullUid);
	historyUidList->AppendL(KNullUid);

	// This variable shouldn't be initialized here. It gets initialized in base class of each view
	//iViewId = configData->defaultView;

	// This is needed because in FC mode we reposition the menubar to the top of the screen
	iOldMenuBarYPos = CEikonEnv::Static()->AppUiFactory()->MenuBar()->Position().iY;
	
	switch (configData->defaultView)
	{
		case EViewTask : 
			{
				SetDefaultViewL(*iTaskView);
				iTaskView->refreshTaskList(TODO_REFRESH);
				break;
			}
		case EViewFile :
			{
				SetDefaultViewL(*iFileView);
				iFileView->fillListBox(_L("C:\\"));
				break;
			}
		case EViewBJack :
			{
				SetDefaultViewL(*iBJackView);
				break;
			}
		case EViewDB :
			{
				SetDefaultViewL(*iDBView);
				break;
			}
		case EViewSysInfo :
			{
				SetDefaultViewL(*iSysInfoView);
				// The ViewActivatedL member of this view already calls refreshSysInfo
				//iSysInfoView->refreshSysInfo();
				break;
			}
		case EViewAgenda :
			{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -