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

📄 dbmsappui.cpp

📁 Symbian S60 DBMS example
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/*
 * ============================================================================
 *  Name     : DBMSAppUi from DBMSAppUi.cpp
 *  Part of  : DBMS
 *  Created  : 04.13.2006 by Forum Nokia
 *  Version  : 2.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 "DBMSAppUi.h"
#include "DBMSAppView.h"
#include "DBMSListboxView.h"
#include "DBMSEditorView.h"
#include "DBMS.hrh"
#include <DBMS.rsg>  // R_MAIN_MENU

#define KEnableSkinFlag 0x1000

// Implementation constants
const TInt KArrayGranularity = 5;

//Text constants
_LIT(KCDrive, "C:");

// ---------------------------------------------------------------------------
// CDBMSAppUi::ConstructL()
//
// Perform second phase construction. This is allowed to leave.
// ---------------------------------------------------------------------------
//
void CDBMSAppUi::ConstructL()
    {
    #ifdef __SERIES60_3X__
	BaseConstructL(EAknEnableSkin);
	#else
	BaseConstructL(KEnableSkinFlag);
	#endif

    iCurrentView = ENone;

    ChangeViewL(EMainView);

	#if defined __SERIES60_3X__
		iDatabaseFile = DatabaseDriveAndPathL();
	#else
    	iDatabaseFile = ApplicationDriveAndPathL();
	#endif

    iDatabaseFile.Append(KDatabaseFile);
    }


// ---------------------------------------------------------------------------
// CDBMSAppUi::CDBMSAppUi()
//
// Constructor of the AppUi. This may not leave.
// ---------------------------------------------------------------------------
//
CDBMSAppUi::CDBMSAppUi() : iAppView(NULL), iListboxView(NULL),
    iBookEditorView(NULL), iBookDb(NULL)
    {
    }


// ---------------------------------------------------------------------------
// CDBMSAppUi::~CDBMSAppUi()
//
// Destructor. Release reserved resources
// ---------------------------------------------------------------------------
//
CDBMSAppUi::~CDBMSAppUi()
    {
    if (iAppView)
        {
        if(iCurrentView == EMainView)
            iEikonEnv->RemoveFromStack(iAppView);
        delete iAppView;
        iAppView = NULL;
        }

    if (iListboxView)
        {
        if(iCurrentView == EListView || iCurrentView == EColumnsView)
            iEikonEnv->RemoveFromStack(iListboxView);
        delete iListboxView;
        iListboxView = NULL;
        }

    if (iBookEditorView)
        {
        if(iCurrentView == EEditorView)
            iEikonEnv->RemoveFromStack(iBookEditorView);
        delete iBookEditorView;
        iBookEditorView = NULL;
        }

    if(iBookDb) // Just in case
        {
        iBookDb->Close();
        delete iBookDb;
        iBookDb = NULL;
        }
    }


// ---------------------------------------------------------------------------
// CDBMSAppUi::ChangeView()
//
// Switch view.
// ---------------------------------------------------------------------------
//
void CDBMSAppUi::ChangeViewL(TViewId aNewView)
    {

    if(aNewView == iCurrentView)
        return;

    // Delete previous view (window owning control)
    switch(iCurrentView)
        {
        case EMainView:
            RemoveFromStack(iAppView);
            delete iAppView;
            iAppView = NULL;
            break;

        case EListView:
            RemoveFromStack(iListboxView);
            delete iListboxView;
            iListboxView = NULL;
            break;

        case EColumnsView:
            RemoveFromStack(iListboxView);
            delete iListboxView;
            iListboxView = NULL;
            break;

        case EEditorView:
            RemoveFromStack(iBookEditorView);
            delete iBookEditorView;
            iBookEditorView = NULL;
            break;

        case ENone:
        default:
            break;
        }
    // Create new view (window owning control)
    switch(aNewView)
        {
        case EMainView:
            iAppView = CDBMSAppView::NewL(ClientRect());
            AddToStackL(iAppView);
            break;

        case EListView:
        case EColumnsView:
            iListboxView = CDBMSListboxView::NewL(ClientRect());
            AddToStackL(iListboxView);
            break;

        case EEditorView:
            iBookEditorView = CDBMSEditorView::NewL(ClientRect());
            AddToStackL(iBookEditorView);
            break;

        case ENone:
        default:
            break;
        }
    iCurrentView = aNewView;
    }


// ---------------------------------------------------------------------------
// CDBMSAppUi::DynInitMenuPaneL(...)
//
// Initialize menu before it is shown. This overrides default implementation
// in base class.
// ---------------------------------------------------------------------------
//
void CDBMSAppUi::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 EListView:
            {
            // DB is open, allow / show db operations
            if(iBookDb && iBookDb->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(iBookDb && iBookDb->IsOpen())
                {
                // Get existence status of date column
                TBool hasDateColumn(EFalse);
                User::LeaveIfError(iBookDb->HasDateColumn(hasDateColumn));

                aMenuPane->SetItemDimmed(EBackCmd, EFalse);
                if(!hasDateColumn)
                    aMenuPane->SetItemDimmed(EAddDateCmd, EFalse);
                else
                    aMenuPane->SetItemDimmed(ERemoveDateCmd, EFalse);
                aMenuPane->SetItemDimmed(ECloseCmd, EFalse);
                }
            break;
            }

        case EEditorView:
            {
            if(iBookDb && iBookDb->IsOpen())
                {
                aMenuPane->SetItemDimmed(EBackCmd, EFalse);
                aMenuPane->SetItemDimmed(EAddBookAPICmd, EFalse);
                aMenuPane->SetItemDimmed(EAddBookSQLCmd, EFalse);
                aMenuPane->SetItemDimmed(ECloseCmd, EFalse);
                }
            break;
            }

        case ENone:
        default:
            break;
        }
    }

// ---------------------------------------------------------------------------
// CDBMSAppUi::HandleCommandL(...)
//
// Handle menu commands.
// ---------------------------------------------------------------------------
//
void CDBMSAppUi::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
        ShowBookEditorViewL();
        break;

    case EAddBookAPICmd:      // Add a Book using Book 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
        AddDateColumnL();
        break;

    case ERemoveDateCmd:      // Remove the date column from Books table
        RemoveDateColumnL();
        break;

    case EColumnNamesCmd:     // Show column names of database
        ShowColumnsL();
        break;

    case ECloseCmd:           // Close database
        CloseDatabaseL();
        break;

    case EAknSoftkeyExit:     // From CBA
    case EEikCmdExit:         // From operating system / framework
        Exit();
        break;

    default:
        break;
        }
    }

// ---------------------------------------------------------------------------
// CDBMSAppUi::OpenDatabaseL()
//
// Create instance of iDBMSDb and open existing database.
// ---------------------------------------------------------------------------
void CDBMSAppUi::OpenDatabaseL()
    {
    iBookDb = CBookDb::NewL();
    iBookDb->OpenDb(iDatabaseFile);
    ShowAllBooksL(); // Change to list view
    }

// ---------------------------------------------------------------------------
// CDBMSAppUi::CreateDatabaseL()
//
// Create instance of iDBMSDb and create a new database.
// ---------------------------------------------------------------------------
//
void CDBMSAppUi::CreateDatabaseL()
    {
    _LIT(KMessage,"Database created.");
    iBookDb = CBookDb::NewL();
    iBookDb->CreateDb(iDatabaseFile); // replaces, if exists
    ShowAllBooksL(); // Change to list view
    ShowNoteL(KMessage);
    }


// ---------------------------------------------------------------------------
// CDBMSAppUi::RemoveDatabaseL()
//
// Remove database file from the system.
// ---------------------------------------------------------------------------
//
void CDBMSAppUi::RemoveDatabaseL()
    {
    _LIT(KMessage,"Database removed.");
    iBookDb = CBookDb::NewL();
    iBookDb->RemoveDb(iDatabaseFile);
    delete iBookDb;
    iBookDb = NULL;
    ShowNoteL(KMessage);
    }


// ---------------------------------------------------------------------------
// CDBMSAppUi::CloseDatabaseL()
//
// Close an open database. Database opened with OpenDatabaseL or
// CreateDatabaseL must be closed, when not used any more.
// ---------------------------------------------------------------------------
//
void CDBMSAppUi::CloseDatabaseL()

⌨️ 快捷键说明

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