?? csmsappui.cpp
字號(hào):
/* 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
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -