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

📄 puttyappview.cpp

📁 大名鼎鼎的远程登录软件putty的Symbian版源码
💻 CPP
字号:
/*    puttyappview.cpp * * Putty UI View class * * Copyright 2002 Petteri Kangaslampi * * See license.txt for full copyright and license information.*/#include <e32std.h>#include <gdi.h>#include <eikenv.h>#include <apgtask.h>#include <eikspane.h>#include <eikbtgpc.h>#include "puttyappui.h"#include "puttyappview.h"#include "puttyui.hrh"_LIT(KAssertPanic, "puttyappview.cpp");#define assert(x) __ASSERT_ALWAYS(x, User::Panic(KAssertPanic, __LINE__))static const TInt KSmallFontWidth = 6;static const TInt KSmallFontHeight = 8;static const TInt KLargeFontWidth = 7;static const TInt KLargeFontHeight = 14;static const TInt KDefaultTermWidth = 80;static const TInt KDefaultTermHeight = 24;CPuttyAppView::CPuttyAppView(MTerminalObserver *anObserver,                             CPuttyAppUi *aAppUi) {    iTerminalObserver = anObserver;    iAppUi = aAppUi;}CPuttyAppView::~CPuttyAppView() {    delete iTerminal;}void CPuttyAppView::ConstructL(const TRect &aRect) {    CreateWindowL();    SetRect(aRect);    // Determine the correct size and position for the terminal. We'll aim    // at a default size initially, instead of making it as big as possible    TInt termWidth = Rect().Width();    TInt termHeight = Rect().Height();    if ( termWidth > (KDefaultTermWidth * KSmallFontWidth) ) {        termWidth = KDefaultTermWidth * KSmallFontWidth;    }    if ( termHeight > (KDefaultTermHeight * KSmallFontHeight) ) {        termHeight = KDefaultTermHeight * KSmallFontHeight;    }    TInt termX = Rect().iTl.iX + (Rect().Width() - termWidth) / 2;    TInt termY = Rect().iTl.iY + (Rect().Height() - termHeight) / 2;    iTermRect = TRect(TPoint(termX, termY), TSize(termWidth, termHeight));        iTerminal = CTerminalControlSystemFont::NewL(        *iTerminalObserver, iTermRect, Window());    ActivateL();    iTerminal->SetFocus(ETrue);}void CPuttyAppView::Draw(const TRect & /*aRect*/) const {    CWindowGc &gc = SystemGc();    gc.Reset();    gc.SetClippingRect(Rect());    // Determine terminal window borders and draw a rectangle around it    TRect borderRect = iTermRect;    borderRect.Grow(1, 1);    gc.DrawRect(borderRect);    // Clear everything outside the terminal    TRegionFix<5> clearReg(Rect());    clearReg.SubRect(borderRect);    assert(!clearReg.CheckError());    const TRect *rects = clearReg.RectangleList();    TInt numRects = clearReg.Count();        gc.SetBrushStyle(CGraphicsContext::ESolidBrush);    gc.SetBrushColor(KRgbWhite);    gc.SetPenStyle(CGraphicsContext::ENullPen);    while ( numRects-- ) {        gc.DrawRect(*(rects++));    }}TInt CPuttyAppView::CountComponentControls() const {    return 1;}CCoeControl *CPuttyAppView::ComponentControl(TInt aIndex) const {        switch ( aIndex ) {        case 0:            return iTerminal;        default:            assert(EFalse);    }    return NULL;}TKeyResponse CPuttyAppView::OfferKeyEventL(const TKeyEvent &aKeyEvent,                                          TEventCode aType) {    // Normally we'll just let the terminal control handle the event, but    // there are some exceptions:    // - We'll offer the select key on a 9300/9500 first to the application UI    //   so that it can be used to mark/copy in select mode. Normally it acts    //   as Enter.    // (The system FEP will handle Chr and open the character selection dialog)    // Selection key    if ( (aType == EEventKey) && (aKeyEvent.iScanCode == EStdKeyDeviceA) ) {        if ( iAppUi->OfferSelectKeyL() ) {            return EKeyWasConsumed;        }    }    // Default -- let the terminal control handle it    return iTerminal->OfferKeyEventL(aKeyEvent, aType);}CTerminalControl *CPuttyAppView::Terminal() {    return iTerminal;}void CPuttyAppView::SetFontL(TBool aLargeFont) {    // Set font to the terminal control    iLargeFont = aLargeFont;    iTerminal->SetFontL(iLargeFont);    ResizeTerminal();}void CPuttyAppView::ResizeTerminal() {    if ( !iTerminal ) {        return;    }        // Determine the terminal window size    TInt fontWidth = KSmallFontWidth;    TInt fontHeight = KSmallFontHeight;    if ( iLargeFont ) {        fontWidth = KLargeFontWidth;        fontHeight = KLargeFontHeight;    }    TInt termWidth = Rect().Width();    TInt termHeight = Rect().Height();    if ( (!iFullScreen) && (!iLargeFont) ) {        // Small font and non-fullscreen: use default size        if ( termWidth > (KDefaultTermWidth * fontWidth) ) {            termWidth = KDefaultTermWidth * fontWidth;        }        if ( termHeight > (KDefaultTermHeight * fontHeight) ) {            termHeight = KDefaultTermHeight * fontHeight;        }            }    // Round size down to the largest possible terminal that contains whole    // characters    termWidth = fontWidth * (termWidth / fontWidth);    termHeight = fontHeight * (termHeight / fontHeight);    assert((termWidth > 0) && (termHeight > 0));    // Set terminal size and position    TInt termX = Rect().iTl.iX + (Rect().Width() - termWidth) / 2;    TInt termY = Rect().iTl.iY + (Rect().Height() - termHeight) / 2;    iTermRect = TRect(TPoint(termX, termY), TSize(termWidth, termHeight));    iTerminal->SetRect(iTermRect);    DrawDeferred();}void CPuttyAppView::SetFullScreenL(TBool aFullScreen) {    CEikonEnv *eikonEnv = CEikonEnv::Static();    iFullScreen = aFullScreen;        if ( iFullScreen ) {        // Hide indicator bar and CBA:        eikonEnv->AppUiFactory()->StatusPane()->MakeVisible(EFalse);        eikonEnv->AppUiFactory()->ToolBar()->MakeVisible(EFalse);        // Set view to cover full screen        SetRect(iAppUi->ClientRect());            } else {        // Show indicator bar and CBA:        eikonEnv->AppUiFactory()->StatusPane()->MakeVisible(ETrue);        eikonEnv->AppUiFactory()->ToolBar()->MakeVisible(ETrue);        // Set view to cover the remaining area        SetRect(iAppUi->ClientRect());    }    DrawDeferred();}void CPuttyAppView::SizeChanged() {    ResizeTerminal();}TCoeInputCapabilities CPuttyAppView::InputCapabilities() const {    return TCoeInputCapabilities(TCoeInputCapabilities::EAllText |                                 TCoeInputCapabilities::ENavigation);}

⌨️ 快捷键说明

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