📄 viewportview.cpp
字号:
/* Copyright (C) 2006 Lucas Gomez All Rights Reserved.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this software; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
* USA.
*/
// INCLUDE FILES
#include <aknquerydialog.h>
#include <aknselectionlist.h>
#include <aknmessagequerydialog.h>
#include "VncViewer.rsg"
#include "ViewportView.h"
#include "VncViewerAppUi.h"
#include "VncViewer.pan"
#include "PreferencesDialog.h"
// ============================ MEMBER FUNCTIONS ===============================
// -----------------------------------------------------------------------------
// CViewportView::NewL()
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
CViewportView* CViewportView::NewL(CConn* aConn)
{
CViewportView* self = CViewportView::NewLC(aConn);
CleanupStack::Pop(self);
return self;
}
// -----------------------------------------------------------------------------
// CViewportView::NewLC()
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
CViewportView* CViewportView::NewLC(CConn* aConn)
{
CViewportView* self = new (ELeave) CViewportView(aConn);
CleanupStack::PushL(self);
self->ConstructL();
return self;
}
// -----------------------------------------------------------------------------
// CViewportView::ConstructL()
// Symbian 2nd phase constructor can leave.
// -----------------------------------------------------------------------------
//
void CViewportView::ConstructL()
{
BaseConstructL(R_VIEWPORTVIEW);
}
// -----------------------------------------------------------------------------
// CViewportView::CViewportView()
// C++ default constructor can NOT contain any code, that might leave.
// -----------------------------------------------------------------------------
//
CViewportView::CViewportView(CConn* aConn) : CAknView()
{
iConn=aConn;
}
// -----------------------------------------------------------------------------
// CViewportView::~CViewportView()
// Destructor.
// -----------------------------------------------------------------------------
//
CViewportView::~CViewportView()
{
if(iContainer)
{
AppUi()->RemoveFromViewStack(*this,iContainer);
delete iContainer;
iContainer=NULL;
}
}
// DoActivateL is called each time when a view is activated
// For example, this occurs when the user starts a new application
// or the active view in the foreground is changed by the system itself
void CViewportView::DoActivateL(const TVwsViewId& /* aPrevViewId */,
TUid /* aCustomMessageId */, const TDesC8& /* aCustomMessage */)
{
if(!iContainer)
{
iContainer=CDesktopWindowContainer::NewL(ClientRect(),iConn);
// Create view container control that will then create
// all child controls
iContainer->SetMopParent(this);
// Add the container to the control stack
// So that it and its children can receive key events
AppUi()->AddToViewStackL(*this,iContainer);
// Complete the initialization
iContainer->ActivateL();
}
}
// DoDeactivate is called whenever a view is deactivated
void CViewportView::DoDeactivate()
{
// The controls are not needed anymore. Remove them to save
// memory.
if(iContainer)
{
AppUi()->RemoveFromViewStack(*this,iContainer);
delete iContainer;
iContainer=NULL;
}
}
/*
* HandleForegroundEvent()
* Foreground event handling function
*
* @parameter aForeground Indicates the required focus state of the control.
*/
void CViewportView::HandleForegroundEventL(TBool aForeground)
{
CAknView::HandleForegroundEventL(aForeground);
}
/*
* HandleCommandL()
* Command handling function
*
* @parameter aCommand ID of the command to respond to.
*/
void CViewportView::HandleCommandL(TInt aCommand)
{
switch(aCommand)
{
case EVncViewerCommand4: // Send text
{
// The descriptor used for the editor
TBuf<128> text;
// create dialog instance
CAknTextQueryDialog* dlg=new (ELeave) CAknTextQueryDialog(text);
// Prepares the dialog, constructing it from the specified resource
dlg->PrepareLC(R_INPUT_TEXT_QUERY);
// Launch the dialog
if(dlg->RunLD())
{
// ok pressed, text is the descriptor containing the entered text
// in the editor.
for(TInt i=0;i<text.Length();i++)
{
TInt keysym=CConnection::TranslateUnicodeToKeysym(text[i]);
if(keysym!=-1)
{
iConn->WriteModifiers(iConn->GetModifiers());
iConn->WriteKeyEvent(keysym,ETrue);
iConn->WriteKeyEvent(keysym,EFalse);
iConn->WriteModifiers(0);
}
}
}
}
break;
case EVncViewerCommand8: // Send Special Key
{
// Do Nothing. It is only a cascade menu...
}
break;
case EVncViewerCommand9: // Select modifiers
{
//CArrayFixFlat<TInt>* indexArray = new(ELeave)CArrayFixFlat<TInt>(4);
//CleanupStack::PushL(indexArray);
CAknListQueryDialog* dlg = new (ELeave) CAknListQueryDialog(iConn->GetModifiersArray());
dlg->PrepareLC(R_SELECT_MODIFIERS_QUERY);
dlg->ListBox()->SetSelectionIndexesL(iConn->GetModifiersArray());
if(dlg->RunLD())
{
// Nothing!!
}
//CleanupStack::PopAndDestroy();// indexArray
}
break;
case EVncViewerCommand6: // Send ctrl-alt-supr
{
iConn->WriteKeyEvent(Keysyms::KKeysymControl_L,ETrue);
iConn->WriteKeyEvent(Keysyms::KKeysymAlt_L,ETrue);
iConn->WriteKeyEvent(Keysyms::KKeysymDelete,ETrue);
iConn->WriteKeyEvent(Keysyms::KKeysymDelete,EFalse);
iConn->WriteKeyEvent(Keysyms::KKeysymAlt_L,EFalse);
iConn->WriteKeyEvent(Keysyms::KKeysymControl_L,EFalse);
}
break;
case EVncViewerCommand7: // Connection info
{
HBufC* infoFormat =iEikonEnv->AllocReadResourceLC(R_CONNECTION_INFO_MESSAGE);
TPtr infoFormatPtr=infoFormat->Des();
HBufC* info=iConn->SetConnectionInfo(infoFormatPtr);
CAknMessageQueryDialog* dlg=new (ELeave) CAknMessageQueryDialog;
dlg->PrepareLC(R_CONNECTION_INFO_DIALOG);
dlg->SetMessageTextL(info->Des());
dlg->RunLD();
delete info;
CleanupStack::PopAndDestroy(infoFormat);
}
break;
case EVncViewerCommand2: // Preferences
{
CPreferencesDialog* dlg = new (ELeave) CPreferencesDialog(ETrue,iConn->iCallback);
dlg->ExecuteLD(R_PREFERENCES_DIALOG);
}
break;
case EVncViewerCommand3: // About
{
CAknMessageQueryDialog* dlg=new (ELeave) CAknMessageQueryDialog;
dlg->ExecuteLD(R_ABOUT_DIALOG);
}
break;
case EKeyPressBACK_SPACE:
{
TInt keysym = Keysyms::KKeysymBackSpace;
iConn->WriteModifiers(iConn->GetModifiers());
iConn->WriteKeyEvent(keysym,ETrue);
iConn->WriteKeyEvent(keysym,EFalse);
iConn->WriteModifiers(0);
}
break;
case EKeyPressTAB:
{
TInt keysym = Keysyms::KKeysymTab;
iConn->WriteModifiers(iConn->GetModifiers());
iConn->WriteKeyEvent(keysym,ETrue);
iConn->WriteKeyEvent(keysym,EFalse);
iConn->WriteModifiers(0);
}
break;
case EKeyPressENTER:
{
TInt keysym = Keysyms::KKeysymReturn;
iConn->WriteModifiers(iConn->GetModifiers());
iConn->WriteKeyEvent(keysym,ETrue);
iConn->WriteKeyEvent(keysym,EFalse);
iConn->WriteModifiers(0);
}
break;
case EKeyPressESCAPE:
{
TInt keysym = Keysyms::KKeysymEscape;
iConn->WriteModifiers(iConn->GetModifiers());
iConn->WriteKeyEvent(keysym,ETrue);
iConn->WriteKeyEvent(keysym,EFalse);
iConn->WriteModifiers(0);
}
break;
case EKeyPressDELETE:
{
TInt keysym = Keysyms::KKeysymDelete;
iConn->WriteModifiers(iConn->GetModifiers());
iConn->WriteKeyEvent(keysym,ETrue);
iConn->WriteKeyEvent(keysym,EFalse);
iConn->WriteModifiers(0);
}
break;
case EKeyPressHOME:
{
TInt keysym = Keysyms::KKeysymHome;
iConn->WriteModifiers(iConn->GetModifiers());
iConn->WriteKeyEvent(keysym,ETrue);
iConn->WriteKeyEvent(keysym,EFalse);
iConn->WriteModifiers(0);
}
break;
case EKeyPressEND:
{
TInt keysym = Keysyms::KKeysymEnd;
iConn->WriteModifiers(iConn->GetModifiers());
iConn->WriteKeyEvent(keysym,ETrue);
iConn->WriteKeyEvent(keysym,EFalse);
iConn->WriteModifiers(0);
}
break;
case EKeyPressPGUP:
{
TInt keysym = Keysyms::KKeysymPage_Up;
iConn->WriteModifiers(iConn->GetModifiers());
iConn->WriteKeyEvent(keysym,ETrue);
iConn->WriteKeyEvent(keysym,EFalse);
iConn->WriteModifiers(0);
}
break;
case EKeyPressPGDN:
{
TInt keysym = Keysyms::KKeysymPage_Down;
iConn->WriteModifiers(iConn->GetModifiers());
iConn->WriteKeyEvent(keysym,ETrue);
iConn->WriteKeyEvent(keysym,EFalse);
iConn->WriteModifiers(0);
}
break;
case EKeyPressUP:
{
TInt keysym = Keysyms::KKeysymUp;
iConn->WriteModifiers(iConn->GetModifiers());
iConn->WriteKeyEvent(keysym,ETrue);
iConn->WriteKeyEvent(keysym,EFalse);
iConn->WriteModifiers(0);
}
break;
case EKeyPressDOWN:
{
TInt keysym = Keysyms::KKeysymDown;
iConn->WriteModifiers(iConn->GetModifiers());
iConn->WriteKeyEvent(keysym,ETrue);
iConn->WriteKeyEvent(keysym,EFalse);
iConn->WriteModifiers(0);
}
break;
case EKeyPressLEFT:
{
TInt keysym = Keysyms::KKeysymLeft;
iConn->WriteModifiers(iConn->GetModifiers());
iConn->WriteKeyEvent(keysym,ETrue);
iConn->WriteKeyEvent(keysym,EFalse);
iConn->WriteModifiers(0);
}
break;
case EKeyPressRIGHT:
{
TInt keysym = Keysyms::KKeysymRight;
iConn->WriteModifiers(iConn->GetModifiers());
iConn->WriteKeyEvent(keysym,ETrue);
iConn->WriteKeyEvent(keysym,EFalse);
iConn->WriteModifiers(0);
}
break;
case EKeyPressF1:
{
TInt keysym = Keysyms::KKeysymF1;
iConn->WriteModifiers(iConn->GetModifiers());
iConn->WriteKeyEvent(keysym,ETrue);
iConn->WriteKeyEvent(keysym,EFalse);
iConn->WriteModifiers(0);
}
break;
case EKeyPressF2:
{
TInt keysym = Keysyms::KKeysymF2;
iConn->WriteModifiers(iConn->GetModifiers());
iConn->WriteKeyEvent(keysym,ETrue);
iConn->WriteKeyEvent(keysym,EFalse);
iConn->WriteModifiers(0);
}
break;
case EKeyPressF3:
{
TInt keysym = Keysyms::KKeysymF3;
iConn->WriteModifiers(iConn->GetModifiers());
iConn->WriteKeyEvent(keysym,ETrue);
iConn->WriteKeyEvent(keysym,EFalse);
iConn->WriteModifiers(0);
}
break;
case EKeyPressF4:
{
TInt keysym = Keysyms::KKeysymF4;
iConn->WriteModifiers(iConn->GetModifiers());
iConn->WriteKeyEvent(keysym,ETrue);
iConn->WriteKeyEvent(keysym,EFalse);
iConn->WriteModifiers(0);
}
break;
case EKeyPressF5:
{
TInt keysym = Keysyms::KKeysymF5;
iConn->WriteModifiers(iConn->GetModifiers());
iConn->WriteKeyEvent(keysym,ETrue);
iConn->WriteKeyEvent(keysym,EFalse);
iConn->WriteModifiers(0);
}
break;
case EKeyPressF6:
{
TInt keysym = Keysyms::KKeysymF6;
iConn->WriteModifiers(iConn->GetModifiers());
iConn->WriteKeyEvent(keysym,ETrue);
iConn->WriteKeyEvent(keysym,EFalse);
iConn->WriteModifiers(0);
}
break;
case EKeyPressF7:
{
TInt keysym = Keysyms::KKeysymF7;
iConn->WriteModifiers(iConn->GetModifiers());
iConn->WriteKeyEvent(keysym,ETrue);
iConn->WriteKeyEvent(keysym,EFalse);
iConn->WriteModifiers(0);
}
break;
case EKeyPressF8:
{
TInt keysym = Keysyms::KKeysymF8;
iConn->WriteModifiers(iConn->GetModifiers());
iConn->WriteKeyEvent(keysym,ETrue);
iConn->WriteKeyEvent(keysym,EFalse);
iConn->WriteModifiers(0);
}
break;
case EKeyPressF9:
{
TInt keysym = Keysyms::KKeysymF9;
iConn->WriteModifiers(iConn->GetModifiers());
iConn->WriteKeyEvent(keysym,ETrue);
iConn->WriteKeyEvent(keysym,EFalse);
iConn->WriteModifiers(0);
}
break;
case EKeyPressF10:
{
TInt keysym = Keysyms::KKeysymF10;
iConn->WriteModifiers(iConn->GetModifiers());
iConn->WriteKeyEvent(keysym,ETrue);
iConn->WriteKeyEvent(keysym,EFalse);
iConn->WriteModifiers(0);
}
break;
case EKeyPressF11:
{
TInt keysym = Keysyms::KKeysymF11;
iConn->WriteModifiers(iConn->GetModifiers());
iConn->WriteKeyEvent(keysym,ETrue);
iConn->WriteKeyEvent(keysym,EFalse);
iConn->WriteModifiers(0);
}
break;
case EKeyPressF12:
{
TInt keysym = Keysyms::KKeysymF12;
iConn->WriteModifiers(iConn->GetModifiers());
iConn->WriteKeyEvent(keysym,ETrue);
iConn->WriteKeyEvent(keysym,EFalse);
iConn->WriteModifiers(0);
}
break;
case EKeyPressPRINT_SCREEN:
{
TInt keysym = Keysyms::KKeysymPrint;
iConn->WriteModifiers(iConn->GetModifiers());
iConn->WriteKeyEvent(keysym,ETrue);
iConn->WriteKeyEvent(keysym,EFalse);
iConn->WriteModifiers(0);
}
break;
case EKeyPressPAUSE:
{
TInt keysym = Keysyms::KKeysymPause;
iConn->WriteModifiers(iConn->GetModifiers());
iConn->WriteKeyEvent(keysym,ETrue);
iConn->WriteKeyEvent(keysym,EFalse);
iConn->WriteModifiers(0);
}
break;
case EKeyPressINSERT:
{
TInt keysym = Keysyms::KKeysymInsert;
iConn->WriteModifiers(iConn->GetModifiers());
iConn->WriteKeyEvent(keysym,ETrue);
iConn->WriteKeyEvent(keysym,EFalse);
iConn->WriteModifiers(0);
}
break;
default:
{
AppUi()->HandleCommandL(aCommand);
}
}
}
/*
* HandleStatusPaneSizeChange()
* Event handler for status pane size changes.
*
*/
void CViewportView::HandleStatusPaneSizeChange()
{
if (iContainer)
iContainer->SetRect(ClientRect());
}
// End of File
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -