📄 sman.cpp
字号:
#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 + -