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

📄 csmsappui.cpp

📁 Symbian 手机发短信程序 smssend-vc
💻 CPP
字号:
/* Copyright (c) 2003, Nokia. All rights reserved */

// INCLUDE FILES
#include <avkon.hrh>
#include <eikedwin.h>
#include <eikdialg.h>
#include <eiklabel.h>
#include <eikmenup.h>
#include <aknnotewrappers.h>
#include <stringloader.h>
#include <vtoken.h>
#include <smssend.rsg>
#include "CSmsAppUi.h"
#include "CSmsHandler.h"
#include "CSmsDialog.h"

// ============================ MEMBER FUNCTIONS ===============================

// -----------------------------------------------------------------------------
// CSmsAppUi::CSmsAppUi()
// C++ default constructor can NOT contain any code, that might leave.
// -----------------------------------------------------------------------------
//
CSmsAppUi::CSmsAppUi()
    {
    // Used for determining which menu elements are shown.
    iUiState = EWrite;
    // We do not have a received message.
    iReceivedMessage = EFalse;
    }

// -----------------------------------------------------------------------------
// CSmsAppUi::ConstructL()
// Symbian 2nd phase constructor can leave.
// -----------------------------------------------------------------------------
//
void CSmsAppUi::ConstructL()
    {
    // Initialise app UI with standard values.
    BaseConstructL();

    iSendDialog = new ( ELeave ) CSmsDialog;

	// This is the enclosing parent control for the dialog.
    iSendDialog->SetMopParent( this );

    // Execute the dialog following the data in the resource file.
    iSendDialog->ExecuteLD( R_SMS_SEND_DIALOG );
    iSendDialog->SetEditableL( ETrue );     // we want to edit the content

     // Add to control stack in order to get key presses.
    AddToStackL( iSendDialog );

    iSmsHandler = CSmsHandler::NewL( this ); // CSmsAppUi creates CSmsHandler
    }

// ----------------------------------------------------------
// CSmsAppUi::~CSmsAppUi()
// Destructor.
// ----------------------------------------------------------
//
CSmsAppUi::~CSmsAppUi()
    {
    if ( iSendDialog )
        {
        RemoveFromStack( iSendDialog );
        delete iSendDialog;
        }

	delete iSmsHandler;
    }

// -----------------------------------------------------------------------------
// CSmsAppUi::DynInitMenuPaneL()
// This function is called by the Symbian framework just before it displays
// a menu pane.
// -----------------------------------------------------------------------------
//
void CSmsAppUi::DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane )
    {
    if ( aResourceId == R_SMS_MENU )
		{
		// Determine the state that the program is currently in.
        switch ( iUiState )
            {
            case ( EWrite ):  // we are writing a new message
                if ( iReceivedMessage )   // there is a received message...
                    {
                    // ...so the Read option is shown
                    aMenuPane->SetItemDimmed( ERead, EFalse );
                    aMenuPane->SetItemDimmed( ENewMsg, ETrue );
                    }
                else
                    {
                    aMenuPane->SetItemDimmed( ERead, ETrue );
                    aMenuPane->SetItemDimmed( ENewMsg, ETrue );
                    }
                break;

            case ( EMsgSent ):    // we have sent a message
                if ( iReceivedMessage )
                    {
                    aMenuPane->SetItemDimmed( ESend, ETrue );
                    aMenuPane->SetItemDimmed( ERead, EFalse );
                    aMenuPane->SetItemDimmed( ENewMsg, EFalse );
                    }
                else
                    {
                    aMenuPane->SetItemDimmed( ESend, ETrue );
                    aMenuPane->SetItemDimmed( ERead, ETrue );
                    aMenuPane->SetItemDimmed( ENewMsg, EFalse );
                    }
                break;

            default:
                break;
            }
        }
    }

// -----------------------------------------------------------------------------
// CSmsAppUi::HandleKeyEventL()
// Takes care of key event handling.
// -----------------------------------------------------------------------------
//
TKeyResponse CSmsAppUi::HandleKeyEventL( const TKeyEvent& /*aKeyEvent*/,
                                           TEventCode /*aType*/ )
    {
    return EKeyWasNotConsumed;
    }

// -----------------------------------------------------------------------------
// CSmsAppUi::HandleCommandL()
// Takes care of command handling.
// -----------------------------------------------------------------------------
//
void CSmsAppUi::HandleCommandL( TInt aCommand )
    {
    switch ( aCommand )
        {
        case EEikCmdExit:
            Exit();
            break;

        case ESend:      // user has chosen Send from the menu
            {
            TBuf<EMaxTelephoneNumberLength> recipientNumber;
            TBuf<EMaxMessageLength> messageText;

            // Get user input.
            STATIC_CAST( CEikEdwin*, ( iSendDialog->Control( EToId ) ) )
                ->GetText( recipientNumber );
		    if ( recipientNumber.Length() == 0 )    // there is no input
                {
                HBufC* text = StringLoader::LoadLC( R_SMS_NBR_MISSING );
                CAknWarningNote* warningNote = new ( ELeave ) CAknWarningNote;
                warningNote->ExecuteLD( *text );
                CleanupStack::PopAndDestroy( text );
                break;
                }

            STATIC_CAST( CEikEdwin*, ( iSendDialog->Control( EMessageId ) ) )
                ->GetText( messageText );

            // Handler takes care of creating and sending the message.
            TBool returnValue( iSmsHandler->SendL( recipientNumber, messageText ) );
            if ( returnValue )
                {
                // The message can no longer be edited.
                iSendDialog->SetEditableL( EFalse );
                iUiState = EMsgSent;
                }

            break;
            }

		case ERead:     // user wants to read a received message
			iSmsHandler->ViewL();  // display next unread message
            break;

		case ENewMsg:   // user wants to write another message
			{
            // Empty string declared in vtoken.h. The lenght of 1 is
            // sufficient because we got an empty string.
            TBufC<1> emptyTxt( KVersitTokenEmpty );
            TPtrC ptrEmpty( emptyTxt );

            STATIC_CAST( CEikEdwin*, ( iSendDialog->Control( EToId ) ) )
                ->SetTextL( &ptrEmpty );
            STATIC_CAST( CEikEdwin*, ( iSendDialog->Control( EMessageId ) ) )
                ->SetTextL( &ptrEmpty );

            iSendDialog->SetEditableL( ETrue );
  			iUiState = EWrite;

            break;
			}

        default:
            break;
        }
    }

// -----------------------------------------------------------------------------
// CSmsAppUi::MessageReceived()
// Called by the handler class to indicate that there is an unread message.
// -----------------------------------------------------------------------------
//
void CSmsAppUi::MessageReceived()
    {
    iReceivedMessage = ETrue;       // we got an unread message
    }

// -----------------------------------------------------------------------------
// CSmsAppUi::NoMoreUnread()
// Called by the handler class to indicate that no more unread messages exist.
// -----------------------------------------------------------------------------
//
void CSmsAppUi::NoMoreUnread()
    {
    iReceivedMessage = EFalse;       // there are no more unread messages
    }

// ----------------------------------------------------
// CSmsAppUi::ServerDown()
// Prints error code and exits the program.
// ----------------------------------------------------
//
void CSmsAppUi::ServerDown( TInt aReason )
    {
    HBufC16* aText1 = StringLoader::LoadLC( R_SMS_MSV_ERROR, aReason );
    HBufC16* aText2 = StringLoader::LoadLC( R_SMS_EXIT );

    CEikonEnv::Static()->AlertWin( aText1->Des(), aText2->Des() );

    CleanupStack::PopAndDestroy( 2 );

    User::Exit( 0 );
    }

// End of File

⌨️ 快捷键说明

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