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

📄 bookstoreappui.cpp

📁 图书项目管理
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/*
 * ============================================================================
 *  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 + -