📄 bookstoreappui.cpp
字号:
/*
* ============================================================================
* Name : BookstoreAppUi from BookstoreAppUi.cpp
* Part of : Bookstore
* Created : 8.12.2003 by Forum Nokia
* Version : 1.0
* Copyright: Nokia Corporation
* ============================================================================
*/
#include <avkon.hrh>
#include <badesca.h>
#include <bautils.h>
#include <eikmenup.h>
#include <eikapp.h>
#include <aknnotewrappers.h> // CAknInformationNote
#include <aknquerydialog.h>
#include "BookstoreAppUi.h"
#include "BookstoreAppView.h"
#include "BookstoreListboxView.h"
#include "BookEditorView.h"
#include "BookstoreDb.hrh"
#include <BookstoreDb.rsg> // R_MAIN_MENU
// Implementation constants
const TInt KArrayGranularity = 5;
// ---------------------------------------------------------------------------
// CBookstoreAppUi::ConstructL()
//
// Perform second phase construction. This is allowed to leave.
// ---------------------------------------------------------------------------
//
void CBookstoreAppUi::ConstructL()
{
BaseConstructL(EAknEnableSkin);
iCurrentView = ENone;
ChangeView(EMainView);
iDatabaseFile = ApplicationDriveAndPath();
iDatabaseFile.Append(KDatabaseFile);
}
// ---------------------------------------------------------------------------
// CBookstoreAppUi::CBookstoreAppUi()
//
// Constructor of the AppUi. This may not leave.
// ---------------------------------------------------------------------------
//
CBookstoreAppUi::CBookstoreAppUi() : iAppView(NULL), iListboxView(NULL),
iBookEditorView(NULL), iBookstoreDb(NULL)
{
}
// ---------------------------------------------------------------------------
// CBookstoreAppUi::~CBookstoreAppUi()
//
// Destructor. Release reserved resources
// ---------------------------------------------------------------------------
//
CBookstoreAppUi::~CBookstoreAppUi()
{
if (iAppView)
{
if(iCurrentView == EMainView)
iEikonEnv->RemoveFromStack(iAppView);
delete iAppView;
iAppView = NULL;
}
if (iListboxView)
{
if(iCurrentView == EBookListView || iCurrentView == EColumnsView)
iEikonEnv->RemoveFromStack(iListboxView);
delete iListboxView;
iListboxView = NULL;
}
if (iBookEditorView)
{
if(iCurrentView == EBookEditorView)
iEikonEnv->RemoveFromStack(iBookEditorView);
delete iBookEditorView;
iBookEditorView = NULL;
}
if(iBookstoreDb) // Just in case
{
iBookstoreDb->Close();
delete iBookstoreDb;
iBookstoreDb = NULL;
}
}
// ---------------------------------------------------------------------------
// CBookstoreAppUi::ChangeView()
//
// Switch view.
//
// In this example the "views" are just simple window owning controls, but not
// real CAknView objects. In real application CAknViews might be better option.
// ---------------------------------------------------------------------------
//
void CBookstoreAppUi::ChangeView(TViewId aNewView)
{
if(aNewView == iCurrentView)
return;
// Delete previous view (window owning control)
switch(iCurrentView)
{
case EMainView:
RemoveFromStack(iAppView);
delete iAppView;
iAppView = NULL;
break;
case EBookListView:
RemoveFromStack(iListboxView);
delete iListboxView;
iListboxView = NULL;
break;
case EColumnsView:
RemoveFromStack(iListboxView);
delete iListboxView;
iListboxView = NULL;
break;
case EBookEditorView:
RemoveFromStack(iBookEditorView);
delete iBookEditorView;
iBookEditorView = NULL;
break;
case ENone:
default:
break;
}
// Create new view (window owning control)
switch(aNewView)
{
case EMainView:
iAppView = CBookstoreAppView::NewL(ClientRect());
AddToStackL(iAppView);
break;
case EBookListView:
case EColumnsView:
iListboxView = CBookstoreListboxView::NewL(ClientRect());
AddToStackL(iListboxView);
break;
case EBookEditorView:
iBookEditorView = CBookEditorView::NewL(ClientRect());
AddToStackL(iBookEditorView);
break;
case ENone:
default:
break;
}
iCurrentView = aNewView;
}
// ---------------------------------------------------------------------------
// CBookstoreAppUi::DynInitMenuPaneL(...)
//
// Initialize menu before it is shown. This overrides default implementation
// in base class.
// ---------------------------------------------------------------------------
//
void CBookstoreAppUi::DynInitMenuPaneL(TInt aResourceId,
CEikMenuPane* aMenuPane)
{
if (aResourceId != R_MAIN_MENU)
{
return;
}
// First hide all menu items
aMenuPane->SetItemDimmed(EOpenCmd, ETrue);
aMenuPane->SetItemDimmed(EBackCmd, ETrue);
aMenuPane->SetItemDimmed(EChangeTitleCmd, ETrue);
aMenuPane->SetItemDimmed(ESearchBooksCmd, ETrue);
aMenuPane->SetItemDimmed(EQuickFindCmd, ETrue);
aMenuPane->SetItemDimmed(ECloseCmd, ETrue);
// Show appropriate menu items depending on the current view
switch(iCurrentView)
{
case EMainView:
{
// Db is not open. Allow creating, opening or removing the database
if(BaflUtils::FileExists(CCoeEnv::Static()->FsSession(),
iDatabaseFile))
{
aMenuPane->SetItemDimmed(EOpenCmd, EFalse);
}
break;
}
case EBookListView:
{
// DB is open, allow / show db operations
if(iBookstoreDb && iBookstoreDb->IsOpen())
{
aMenuPane->SetItemDimmed(EChangeTitleCmd, EFalse);
aMenuPane->SetItemDimmed(ESearchBooksCmd, EFalse);
aMenuPane->SetItemDimmed(EQuickFindCmd, EFalse);
aMenuPane->SetItemDimmed(ECloseCmd, EFalse);
}
break;
}
case EColumnsView:
{
if(iBookstoreDb && iBookstoreDb->IsOpen())
{
// Get existence status of date column
TBool hasDateColumn(EFalse);
User::LeaveIfError(iBookstoreDb->HasDateColumn(hasDateColumn));
aMenuPane->SetItemDimmed(EBackCmd, EFalse);
aMenuPane->SetItemDimmed(ECloseCmd, EFalse);
}
break;
}
case EBookEditorView:
{
if(iBookstoreDb && iBookstoreDb->IsOpen())
{
aMenuPane->SetItemDimmed(EBackCmd, EFalse);
aMenuPane->SetItemDimmed(ECloseCmd, EFalse);
}
break;
}
case ENone:
default:
break;
}
}
// ---------------------------------------------------------------------------
// CBookstoreAppUi::HandleCommandL(...)
//
// Handle menu commands.
// ---------------------------------------------------------------------------
//
void CBookstoreAppUi::HandleCommandL(TInt aCommand)
{
switch(aCommand)
{
case EOpenCmd: // Open existing database
OpenDatabaseL();
break;
case EBackCmd: // Move back from editor or columns view to
ShowAllBooksL(); // list view
break;
case EChangeTitleCmd: // Update a book title
UpdateBookTitleL();
break;
case ESearchBooksCmd: // Search books with given search pattern
SearchBooksL();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -