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

📄 socketsappview.cpp

📁 Symbian 手机网络通信程序 sockets-vc
💻 CPP
字号:
/* Copyright (c) 2004, Nokia. All rights reserved */


// INCLUDE FILES
#include <eiklabel.h>
#include <eikrted.h>
#include <barsread.h>  // for resource reader
#include <aknglobalnote.h>
#include <stringloader.h>
#include <sockets.rsg>

#include "SocketsAppView.h"
#include "Sockets.pan"

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

// -----------------------------------------------------------------------------
// CSocketsAppView::NewL()
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
CSocketsAppView* CSocketsAppView::NewL( const TRect& aRect )
    {
    CSocketsAppView* self = CSocketsAppView::NewLC( aRect );
    CleanupStack::Pop( self );
    return self;
    }

// -----------------------------------------------------------------------------
// CSocketsAppView::NewLC()
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
CSocketsAppView* CSocketsAppView::NewLC( const TRect& aRect )
    {
    CSocketsAppView* self = new ( ELeave ) CSocketsAppView;
    CleanupStack::PushL( self );
    self->ConstructL( aRect );
    return self;
    }

// -----------------------------------------------------------------------------
// CCSAsyncAppView::ConstructL()
// Symbian 2nd phase constructor can leave.
// -----------------------------------------------------------------------------
//
void CSocketsAppView::ConstructL( const TRect& aRect )
    {

    CreateWindowL();

    iStatusWindow = new ( ELeave ) CEikLabel;
    iStatusWindow->SetContainerWindowL( *this );

    HBufC* uninitialised = StringLoader::LoadLC( R_SOCK_UNINITIALISED );
    iStatusWindow->SetTextL( *uninitialised );
    CleanupStack::PopAndDestroy(); // uninitialised

    iStatusWindow->SetExtent( TPoint( KLabelPositionX, KLabelPositionY ),
                              TSize( KLabelWidth, KLabelHeight ) );

    TResourceReader reader;
    iCoeEnv->CreateResourceReaderLC( reader, R_OUTPUT_VIEW_RTEXTED );
    iOutputWindow = new ( ELeave ) CEikRichTextEditor();

    iOutputWindow->SetContainerWindowL( *this );
    iOutputWindow->ConstructFromResourceL( reader );
    CleanupStack::PopAndDestroy();  // Resource reader
    iOutputWindow->SetFocus( ETrue );

    iOutputWindow->SetExtent( TPoint( KOutputPositionX, KOutputPositionY ),
                              TSize( KOutputWidth, KOutputHeight ) );

    SetRect( aRect );
    ActivateL();

    }

// -----------------------------------------------------------------------------
// CSocketsAppView::CSocketsAppView()
// C++ default constructor can NOT contain any code, that might leave.
// -----------------------------------------------------------------------------
//
CSocketsAppView::CSocketsAppView()
    {
    // No implementation required
    }

// -----------------------------------------------------------------------------
// CSocketsAppView::~CSocketsAppView()
// Destructor.
// -----------------------------------------------------------------------------
//
CSocketsAppView::~CSocketsAppView()
    {
    delete iOutputWindow;
    iOutputWindow = NULL;

    delete iStatusWindow;
    iStatusWindow = NULL;
    }

// -----------------------------------------------------------------------------
// CSocketsAppView::ClearTextL()
// Clear contents of editor window.
// -----------------------------------------------------------------------------
//
void CSocketsAppView::ClearTextL()
    {
    iOutputWindow->Text()->Reset();
    iOutputWindow->HandleTextChangedL();
    iOutputWindow->SetCursorPosL( 0, EFalse );
    iFontStyle = 0;
    }

// -----------------------------------------------------------------------------
// CSocketsAppView::Draw()
// Draws this CSocketsAppView to the screen.
// -----------------------------------------------------------------------------
//
void CSocketsAppView::Draw( const TRect& aRect ) const
    {
    // Clear the screen
    CWindowGc& gc = SystemGc();
    gc.Clear( aRect );
    }

// -----------------------------------------------------------------------------
// CSocketsAppView::CountComponentControls()
// Determines number of component controls.
// -----------------------------------------------------------------------------
//
TInt CSocketsAppView::CountComponentControls() const
    {
    return 2;
    }

// -----------------------------------------------------------------------------
// CSocketsAppView::ComponentControl()
// Gets handle to a component control.
// -----------------------------------------------------------------------------
//
CCoeControl* CSocketsAppView::ComponentControl( TInt aIndex ) const
    {

    switch( aIndex )
        {
            case 0:
                return iStatusWindow;
            case 1:
                return iOutputWindow;

            default:
                User::Panic ( KPanicSockets, ESocketsAppView );
                return 0;
        }
    }

// -----------------------------------------------------------------------------
// CSocketsAppView::KeyEventL()
// Handles a key event.
// -----------------------------------------------------------------------------
//
void CSocketsAppView::KeyEventL( TInt aCode )
    {
    // Add this 'keypress' to the main output window
    TKeyEvent event;
    event.iCode = aCode;
    event.iScanCode = aCode;
    iOutputWindow->SetFocus( ETrue );
    iOutputWindow->OfferKeyEventL( event, EEventKey );
    }

// -----------------------------------------------------------------------------
// CSocketsAppView::PrintNotify()
// Displays text on console.
// -----------------------------------------------------------------------------
//
void CSocketsAppView::PrintNotify( const TDesC& aDes, TUint aFontStyle )
    {
    // Display these characters in the main output window,
    // in the specified style
    SetFontStyle( aFontStyle );

    for ( TInt i = 0; i < aDes.Length(); i++ )
        {
        TRAPD( error, KeyEventL( aDes[i] ) );
        if( error != KErrNone )
            {
            User::Panic ( KPanicSockets, ESocketsAppView );
            }
        }
    }

// -----------------------------------------------------------------------------
// CSocketsAppView::PrintNotify()
// Displays text on console.
// -----------------------------------------------------------------------------
//
void CSocketsAppView::PrintNotify( const TDesC8& aDes, TUint aFontStyle )
    {
    // Display these characters in the main output window,
    // in the specified style
    SetFontStyle( aFontStyle );

    for ( TInt i = 0; i < aDes.Length(); i++ )
        {
        TRAPD( error, KeyEventL( aDes[i] ) );
        if( error != KErrNone )
            {
            User::Panic ( KPanicSockets, ESocketsAppView );
            }
        }
    }

// -----------------------------------------------------------------------------
// CSocketsAppView::SetFontStyle()
// Changes font style for subsequent text.
// -----------------------------------------------------------------------------
//
void CSocketsAppView::SetFontStyle( TUint aFontStyle )
    {
    // Set current main window style to match that requested
    UpdateFontAttribute( aFontStyle, CEikGlobalTextEditor::EBold );
    UpdateFontAttribute( aFontStyle, CEikGlobalTextEditor::EItalic );
    UpdateFontAttribute( aFontStyle, CEikGlobalTextEditor::EUnderline );
    }

// -----------------------------------------------------------------------------
// CSocketsAppView::UpdateFontAttribute()
// Set or clear an individual font attribute.
// -----------------------------------------------------------------------------
//
void CSocketsAppView::UpdateFontAttribute( TUint aFontStyle, TInt aAttribute )
    {
    // Ensure an individual attribute is on or off as requested
    if ( ( aFontStyle & aAttribute ) != ( iFontStyle & aAttribute ) )
        {
        // Note: This function 'toggles' styles based on the bits set in
        //       supplied mask, i.e. supplying the same bit twice toggles
        //       that style on then off again
        TRAPD( error, iOutputWindow->BoldItalicUnderlineEventL( aAttribute ) );
        if( error != KErrNone )
            {
            User::Panic ( KPanicSockets, ESocketsAppView );
            }
        iFontStyle ^= aAttribute;
        }
    }

// -----------------------------------------------------------------------------
// CSocketsAppView::ErrorNotify()
// Notifies user of an error.
// -----------------------------------------------------------------------------
//
void CSocketsAppView::ErrorNotify( const TDesC& aErrMessage, TInt aErrCode )
    {
    _LIT( KNewLine, "\n" );

    TRAPD( error,

    HBufC* errorTitleCode = HBufC::NewLC( 50 );
    errorTitleCode->Des().Append( aErrMessage );
    errorTitleCode->Des().Append( KNewLine );
    errorTitleCode->Des().AppendNum( aErrCode );

    CAknGlobalNote* globalNote = CAknGlobalNote::NewLC();
    globalNote->ShowNoteL( EAknGlobalErrorNote, *errorTitleCode );
    CleanupStack::PopAndDestroy( globalNote );
    CleanupStack::PopAndDestroy( errorTitleCode );
   )

    if( error != KErrNone )
        {
        User::Panic ( KPanicSockets, ESocketsAppView );
        }
    }

// -----------------------------------------------------------------------------
// CSocketsAppView::SetStatus()
// Changes 'status' display.
// -----------------------------------------------------------------------------
//
void CSocketsAppView::SetStatus( const TDesC& aStatus )
    {
    // Update contents of status window
    TRAPD( error, iStatusWindow->SetTextL( aStatus ) );
    if( error != KErrNone )
        {
        User::Panic ( KPanicSockets, ESocketsAppView );
        }

    iStatusWindow->DrawDeferred();
    }

// End of File

⌨️ 快捷键说明

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