S60 3rd Edition SDK for Symbian OS
Example Applications Guide

ChatAppui.cpp

00001 /*
00002 * ==============================================================================
00003 *  Name        : ChatAppui.cpp
00004 *  Part of     : Chat
00005 *  Interface   : 
00006 *  Description : 
00007 *  Version     : 
00008 *
00009 *  Copyright (c) 2005-2006 Nokia Corporation.
00010 *  This material, including documentation and any related 
00011 *  computer programs, is protected by copyright controlled by 
00012 *  Nokia Corporation.
00013 * ==============================================================================
00014 */
00015 
00016 // INCLUDE FILES
00017 #include "ChatAppui.h"
00018 #include "ChatContainer.h" 
00019 #include <ChatEx.rsg>
00020 #include "Chat.hrh"
00021 
00022 #include <avkon.hrh>
00023 #include <eikmenup.h>
00024 #include <aknnotewrappers.h>
00025 #include <stringloader.h>
00026 
00027 #include "Chat.pan"
00028 
00029 #include "ChatContainer.h"
00030 #include "ChatInet.h"
00031 #include "ChatBt.h"
00032 
00033 #include "ChatProtocolConstants.h"
00034 
00035 
00036 // ================= MEMBER FUNCTIONS =======================
00037 
00038 // ----------------------------------------------------------
00039 // CChatAppUi::ConstructL()
00040 // 
00041 // ----------------------------------------------------------
00042 //
00043 void CChatAppUi::ConstructL()
00044     {
00045     BaseConstructL( CAknAppUi::EAknEnableSkin );
00046 
00047     iAppContainer = CChatContainer::NewL( ClientRect() );    
00048     
00049     // so view can update scroll bars
00050     iAppContainer->SetMopParent( this ); 
00051 
00052     AddToStackL( iAppContainer );
00053 
00054     iChatBt = CChatBt::NewL( *iAppContainer );
00055     iChatInet = CChatInet::NewL( *iAppContainer );
00056 
00057     // check whether BT is available or not
00058 
00059     RSdp sdpSession;
00060 
00061     if ( sdpSession.Connect() == KErrNone )
00062         {
00063         sdpSession.Close();
00064     
00065         iBtAvailable = ETrue;
00066         }
00067     else
00068         {
00069         iBtAvailable = EFalse;
00070         }
00071     }
00072 
00073 // ----------------------------------------------------
00074 // CChatAppUi::~CChatAppUi()
00075 // Destructor
00076 // Frees reserved resources
00077 // ----------------------------------------------------
00078 //
00079 CChatAppUi::~CChatAppUi()
00080     {
00081     delete iChatBt;
00082     iChatBt = NULL;
00083     
00084     delete iChatInet;
00085     iChatInet= NULL;
00086     
00087     if ( iAppContainer )
00088         {
00089         RemoveFromStack( iAppContainer );
00090         delete iAppContainer;
00091         iAppContainer = NULL;
00092         }
00093    }
00094 
00095 // ------------------------------------------------------------------------------
00096 // CChatAppUi::DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane)
00097 //  This function is called by the EIKON framework just before it displays
00098 //  a menu pane. Its default implementation is empty, and by overriding it,
00099 //  the application can set the state of menu items dynamically according
00100 //  to the state of application data.
00101 // ------------------------------------------------------------------------------
00102 //
00103 void CChatAppUi::DynInitMenuPaneL(
00104     TInt aResourceId,CEikMenuPane* aMenuPane)
00105     {
00106     if ( aResourceId == R_CHAT_MENU )
00107         {
00108         if ( iChatBt->IsConnected() )
00109             {
00110             aMenuPane->SetItemDimmed( EChatBtChat, ETrue );
00111             aMenuPane->SetItemDimmed( EChatIpChat, ETrue );
00112             aMenuPane->SetItemDimmed( EChatStopBtChat, !iChatBt->Server() );
00113             aMenuPane->SetItemDimmed( EChatStopIpChat, ETrue );
00114             aMenuPane->SetItemDimmed( EChatDisconnect, iChatBt->Server() );
00115             aMenuPane->SetItemDimmed( EChatSendMessage, 
00116                 !iChatBt->IsReadyToSendMessage() );
00117             }  
00118               
00119         else if ( iChatInet->IsConnected() )
00120             {
00121             aMenuPane->SetItemDimmed( EChatBtChat, ETrue );
00122             aMenuPane->SetItemDimmed( EChatIpChat, ETrue );
00123             aMenuPane->SetItemDimmed( EChatStopBtChat, ETrue );
00124             aMenuPane->SetItemDimmed( EChatStopIpChat, !iChatInet->Server() );
00125             aMenuPane->SetItemDimmed( EChatDisconnect, iChatInet->Server() );
00126             aMenuPane->SetItemDimmed( EChatSendMessage,
00127                 !iChatInet->IsReadyToSendMessage() );
00128             }    
00129 
00130         else if ( iChatBt->IsConnecting() )
00131             {
00132             aMenuPane->SetItemDimmed( EChatBtChat, ETrue );
00133             aMenuPane->SetItemDimmed( EChatIpChat, ETrue );
00134             aMenuPane->SetItemDimmed( EChatStopIpChat, ETrue );
00135             aMenuPane->SetItemDimmed( EChatStopBtChat, EFalse );
00136             aMenuPane->SetItemDimmed( EChatDisconnect, ETrue );
00137             aMenuPane->SetItemDimmed( EChatSendMessage, ETrue );
00138             }
00139             
00140        else if ( iChatInet->IsConnecting() )
00141             {
00142             aMenuPane->SetItemDimmed( EChatBtChat, ETrue );
00143             aMenuPane->SetItemDimmed( EChatIpChat, ETrue );
00144             aMenuPane->SetItemDimmed( EChatStopBtChat, ETrue );
00145             aMenuPane->SetItemDimmed( EChatStopIpChat, EFalse );
00146             aMenuPane->SetItemDimmed( EChatDisconnect, ETrue );
00147             aMenuPane->SetItemDimmed( EChatSendMessage, ETrue );
00148             }     
00149             
00150         else if ( iChatBt->IsSendingMessage() )
00151             {
00152             aMenuPane->SetItemDimmed( EChatBtChat, ETrue );
00153             aMenuPane->SetItemDimmed( EChatIpChat, ETrue );
00154             aMenuPane->SetItemDimmed( EChatStopBtChat, ETrue );
00155             aMenuPane->SetItemDimmed( EChatStopIpChat, ETrue );
00156             aMenuPane->SetItemDimmed( EChatDisconnect, EFalse );
00157             aMenuPane->SetItemDimmed( EChatSendMessage, ETrue );
00158             }
00159             
00160       else if ( iChatInet->IsSendingMessage() )
00161             {
00162             aMenuPane->SetItemDimmed( EChatBtChat, ETrue );
00163             aMenuPane->SetItemDimmed( EChatIpChat, ETrue );
00164             aMenuPane->SetItemDimmed( EChatStopBtChat, ETrue );
00165             aMenuPane->SetItemDimmed( EChatStopIpChat, ETrue );
00166             aMenuPane->SetItemDimmed( EChatDisconnect, iChatInet->Server() );
00167             aMenuPane->SetItemDimmed( EChatSendMessage, ETrue );
00168             }      
00169             
00170         else // both the server and the client are not connected
00171             {
00172             aMenuPane->SetItemDimmed( EChatBtChat, EFalse );
00173             aMenuPane->SetItemDimmed( EChatIpChat, EFalse );
00174             aMenuPane->SetItemDimmed( EChatStopBtChat, ETrue );
00175             aMenuPane->SetItemDimmed( EChatStopIpChat, ETrue );
00176             aMenuPane->SetItemDimmed( EChatDisconnect, ETrue );
00177             aMenuPane->SetItemDimmed( EChatSendMessage, ETrue );
00178             }
00179         aMenuPane->SetItemDimmed( EChatClearList, 
00180             !iAppContainer->ContainsEntries() );
00181         }
00182     }
00183     
00184 // ----------------------------------------------------
00185 // CChatAppUi::HandleKeyEventL(
00186 //     const TKeyEvent& aKeyEvent,TEventCode /*aType*/)
00187 // takes care of key event handling
00188 // ----------------------------------------------------
00189 //
00190 TKeyResponse CChatAppUi::HandleKeyEventL(
00191     const TKeyEvent& /*aKeyEvent*/,TEventCode /*aType*/)
00192     {
00193     return EKeyWasNotConsumed;
00194     }
00195 
00196 // ----------------------------------------------------
00197 // CChatAppUi::HandleCommandL(TInt aCommand)
00198 // takes care of command handling
00199 // ----------------------------------------------------
00200 //
00201 void CChatAppUi::HandleCommandL(TInt aCommand)
00202     {
00203     TBuf<KChatTextBufLength> text;
00204 
00205       switch ( aCommand )
00206           {
00207           
00208           case EAknSoftkeyExit:
00209           case EEikCmdExit:          
00210               {
00211               if ( iChatInet->IsConnected() || iChatInet->IsConnecting() )
00212                   {
00213                   if ( iChatInet->Server() )
00214                       {
00215                           iChatInet->Stop();
00216                       }
00217                   else
00218                       {
00219                       iChatInet->DisconnectL();
00220                       }           
00221                   }
00222               if ( iChatBt->IsConnected() || iChatBt->IsConnecting()  )
00223                   {
00224                   if ( iChatBt->Server() )
00225                       {
00226                           iChatBt->StopL();
00227                       }
00228                   else
00229                       {
00230                       iChatBt->DisconnectL();
00231                       }
00232                   }
00233  
00234               Exit();
00235               break;
00236               }
00237               
00238           case EChatBtChat:
00239               {
00240               break;
00241               }
00242               
00243           case EChatIpChat:
00244               {
00245               break;
00246               }
00247               
00248           case EChatStartChat:
00249               {
00250               if ( !iBtAvailable  )
00251                   {
00252                   ShowBTNotAvailableNoteL();
00253                   }
00254               else 
00255                   {
00256                   iChatBt->StartL();
00257                   }
00258               break;
00259               }
00260               
00261           case EChatConnect:
00262               {
00263               if ( !iBtAvailable  )
00264                   {
00265                   ShowBTNotAvailableNoteL();
00266                   }
00267               else 
00268                   {
00269                   iChatBt->ConnectL();  
00270                   }
00271               break;
00272               }
00273               
00274           case EChatStartIpChat:
00275               {
00276               iChatInet->StartL();
00277               break;
00278               }
00279               
00280           case EChatIpConnect:
00281               {
00282               iAppContainer->ShowDataQueryL( 
00283                   R_CHAT_SERVERDATA_QUERY, 
00284                   0, 
00285                   0, 
00286                   KChatTextBufLength, 
00287                   EFalse, 
00288                   text );
00289 
00290               if ( text.Length() != 0 )
00291                   {
00292                   iChatInet->ConnectL( text );
00293                   }
00294               break;
00295               }
00296               
00297           case EChatDisconnect:
00298               {
00299               if ( iChatInet->IsConnected() )
00300                   {
00301                   iChatInet->DisconnectL(); 
00302                   }
00303               if ( iChatBt->IsConnected() )
00304                   {
00305                   iChatBt->DisconnectL(); 
00306                   }
00307                 break;
00308               }
00309               
00310           case EChatStopBtChat:
00311               {
00312               if ( !iBtAvailable  )
00313                   {
00314                   ShowBTNotAvailableNoteL();
00315                   }
00316               else 
00317                   {
00318                   iChatBt->StopL(); 
00319                   }
00320               break;
00321               }
00322               
00323           case EChatStopIpChat:
00324               {
00325               iChatInet->Stop();
00326               break;
00327               } 
00328                  
00329           case EChatSendMessage:
00330               {
00331               iAppContainer->ShowDataQueryL( 
00332                   R_CHAT_DATA_QUERY, 
00333                   0, 
00334                   0, 
00335                   KChatTextBufLength, 
00336                   ETrue, 
00337                   text );
00338               
00339               if ( iChatInet->IsConnected() )
00340                   {
00341                   iChatInet->SendMessageL( text );
00342                   }
00343               if( iChatBt->IsConnected() )
00344                   {
00345                   iChatBt->SendMessageL( text );
00346                   }
00347               break;
00348               }
00349               
00350            case EChatClearList:
00351                {
00352                iAppContainer->ClearMessageListL();
00353                break;
00354                } 
00355               
00356           default:
00357               break;      
00358           }
00359     }
00360 
00361 // -----------------------------------------------------------------------------
00362 // CChatAppUi::ShowBTNotAvailableNoteL()
00363 // Show note if BT is not available 
00364 // -----------------------------------------------------------------------------
00365 //
00366 void CChatAppUi::ShowBTNotAvailableNoteL()
00367     {
00368     // Load a string from the resource file and display it
00369     HBufC* textResource = StringLoader::LoadLC( R_CHAT_NO_BT );
00370     CAknErrorNote* errorNote;
00371 
00372     errorNote = new ( ELeave ) CAknErrorNote;
00373 
00374     // Show the information Note with
00375     // textResource loaded with StringLoader.
00376     errorNote->ExecuteLD( *textResource);
00377 
00378     // Pop HBuf from CleanUpStack and Destroy it.
00379     CleanupStack::PopAndDestroy( textResource );
00380     }
00381 
00382 
00383 // -----------------------------------------------------------------------------
00384 // CChatAppUi::HandleResourceChangeL( TInt aType )
00385 // Called by framework when layout is changed.
00386 // -----------------------------------------------------------------------------
00387 //
00388 void CChatAppUi::HandleResourceChangeL( TInt aType )
00389     {
00390     CAknAppUi::HandleResourceChangeL( aType );
00391 
00392     // ADDED FOR SCALABLE UI SUPPORT
00393     // *****************************
00394     if ( aType==KEikDynamicLayoutVariantSwitch )
00395         {
00396         iAppContainer->SetRect( ClientRect() );
00397         }
00398     //Controls derived from CCoeControl, handled in container class
00399     iAppContainer->HandleResourceChange( aType );
00400     }
00401 
00402 
00403 // End of File  

© Nokia 2006

Back to top