📄 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(ECreateCmd, ETrue);
aMenuPane->SetItemDimmed(ERemoveDbCmd, ETrue);
aMenuPane->SetItemDimmed(EAddBookCmd, ETrue);
aMenuPane->SetItemDimmed(EBackCmd, ETrue);
aMenuPane->SetItemDimmed(EAddBookAPICmd, ETrue);
aMenuPane->SetItemDimmed(EAddBookSQLCmd, ETrue);
aMenuPane->SetItemDimmed(ERemoveBookCmd, ETrue);
aMenuPane->SetItemDimmed(ERemoveAllBooksCmd, ETrue);
aMenuPane->SetItemDimmed(EChangeTitleCmd, ETrue);
aMenuPane->SetItemDimmed(EGetAllBooksCmd, ETrue);
aMenuPane->SetItemDimmed(ESearchBooksCmd, ETrue);
aMenuPane->SetItemDimmed(EQuickFindCmd, ETrue);
aMenuPane->SetItemDimmed(EAddDateCmd, ETrue);
aMenuPane->SetItemDimmed(ERemoveDateCmd, ETrue);
aMenuPane->SetItemDimmed(EColumnNamesCmd, 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);
aMenuPane->SetItemDimmed(ERemoveDbCmd, EFalse);
}
aMenuPane->SetItemDimmed(ECreateCmd, EFalse);
break;
}
case EBookListView:
{
// DB is open, allow / show db operations
if(iBookstoreDb && iBookstoreDb->IsOpen())
{
aMenuPane->SetItemDimmed(EAddBookCmd, EFalse);
aMenuPane->SetItemDimmed(ERemoveBookCmd, EFalse);
aMenuPane->SetItemDimmed(ERemoveAllBooksCmd, EFalse);
aMenuPane->SetItemDimmed(EChangeTitleCmd, EFalse);
aMenuPane->SetItemDimmed(EGetAllBooksCmd, EFalse);
aMenuPane->SetItemDimmed(ESearchBooksCmd, EFalse);
aMenuPane->SetItemDimmed(EQuickFindCmd, EFalse);
aMenuPane->SetItemDimmed(EColumnNamesCmd, 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);
if(!hasDateColumn)
aMenuPane->SetItemDimmed(EAddDateCmd, EFalse);
else
aMenuPane->SetItemDimmed(ERemoveDateCmd, EFalse);
aMenuPane->SetItemDimmed(ECloseCmd, EFalse);
}
break;
}
case EBookEditorView:
{
if(iBookstoreDb && iBookstoreDb->IsOpen())
{
aMenuPane->SetItemDimmed(EBackCmd, EFalse);
aMenuPane->SetItemDimmed(EAddBookAPICmd, EFalse);
aMenuPane->SetItemDimmed(EAddBookSQLCmd, 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 ECreateCmd: // Create (replace) and open a database
CreateDatabaseL();
break;
case ERemoveDbCmd: // Drop database. Remove the database file
RemoveDatabaseL();
break;
case EBackCmd: // Move back from editor or columns view to
ShowAllBooksL(); // list view
break;
case EAddBookCmd: // Show a book editor for adding a book
ShowBookEditorView();
break;
case EAddBookAPICmd: // Add a book using DBMS API
AddBookL(EFalse);
break;
case EAddBookSQLCmd: // Add a book using SQL
AddBookL(ETrue);
break;
case ERemoveBookCmd: // Remove a named book from database
RemoveBookL();
break;
case ERemoveAllBooksCmd: // Remove all books from database
RemoveAllBooksL();
break;
case EChangeTitleCmd: // Update a book title
UpdateBookTitleL();
break;
case EGetAllBooksCmd: // Read all books from database
ShowAllBooksL();
break;
case ESearchBooksCmd: // Search books with given search pattern
SearchBooksL();
break;
case EQuickFindCmd: // Find a book using index
IndexFindL();
break;
case EAddDateCmd: // Add a date column to books table
AddDateColumn();
break;
case ERemoveDateCmd: // Remove the date column from books table
RemoveDateColumn();
break;
case EColumnNamesCmd: // Show column names of database
ShowColumns();
break;
case ECloseCmd: // Close database
CloseDatabaseL();
break;
case EAknSoftkeyExit: // From CBA
case EEikCmdExit: // From operating system / framework
Exit();
break;
default:
break;
}
}
// ---------------------------------------------------------------------------
// CBookstoreAppUi::OpenDatabaseL()
//
// Create instance of iBookstoreDb and open existing database.
// ---------------------------------------------------------------------------
void CBookstoreAppUi::OpenDatabaseL()
{
iBookstoreDb = CBookstoreDb::NewL();
iBookstoreDb->OpenDbL(iDatabaseFile);
ShowAllBooksL(); // Change to list view
}
// ---------------------------------------------------------------------------
// CBookstoreAppUi::CreateDatabaseL()
//
// Create instance of iBookstoreDb and create a new database.
// ---------------------------------------------------------------------------
//
void CBookstoreAppUi::CreateDatabaseL()
{
_LIT(KMessage,"Database created.");
iBookstoreDb = CBookstoreDb::NewL();
iBookstoreDb->CreateDbL(iDatabaseFile); // replaces, if exists
ShowAllBooksL(); // Change to list view
ShowNoteL(KMessage);
}
// ---------------------------------------------------------------------------
// CBookstoreAppUi::RemoveDatabaseL()
//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -