diff -r f345bda72bc4 -r 43e37759235e Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/_backed_up_8cpp-source.html --- a/Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/_backed_up_8cpp-source.html Tue Mar 30 11:56:28 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,318 +0,0 @@ - -
-00001 // Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). -00002 // All rights reserved. -00003 // This component and the accompanying materials are made available -00004 // under the terms of "Eclipse Public License v1.0" -00005 // which accompanies this distribution, and is available -00006 // at the URL "http://www.eclipse.org/legal/epl-v10.html". -00007 // -00008 // Initial Contributors: -00009 // Nokia Corporation - initial contribution. -00010 // -00011 // Contributors: -00012 // -00013 // Description: -00014 // -00015 -00016 #include <w32std.h> -00017 #include "Base.h" -00018 #include "BackedUp.h" -00019 -00020 _LIT(KString1,"1"); -00021 _LIT(KString2,"2"); -00022 _LIT(KString3,"3"); -00023 _LIT(KString4,"4"); -00024 _LIT(KString5,"5"); -00025 -00026 enum TBackedUpPanic -00027 { -00028 EConnectPanicRedrawToBackedUpWindow, -00029 }; -00030 -00031 -00033 // CNumberedWindow implementation -00035 -00036 /****************************************************************************\ -00037 | Function: Constructor/Destructor for CNumberedWindow -00038 | Input: aClient Client application that owns the window -00039 \****************************************************************************/ -00040 CNumberedWindow::CNumberedWindow (CWsClient* aClient) -00041 : CWindow (aClient), iOldPos(0,0) -00042 { -00043 // iNumber is displayed on front of window. -00044 iNumber = iCount; -00045 iCount++; -00046 } -00047 -00048 -00049 CNumberedWindow::~CNumberedWindow () -00050 { -00051 } -00052 -00053 -00054 /****************************************************************************\ -00055 | Function: CNumberedWindow::Draw -00056 | Purpose: Redraws the contents of CNumberedWindow within a given -00057 | rectangle. CNumberedWindow displays a number in the window. -00058 | Input: aRect Rectangle that needs redrawing -00059 | Output: None -00060 \****************************************************************************/ -00061 void CNumberedWindow::Draw(const TRect& aRect) -00062 { -00063 const TBufC<1> strings[5] = { *&KString1, -00064 *&KString2, -00065 *&KString3, -00066 *&KString4, -00067 *&KString5 -00068 }; -00069 -00070 CWindowGc* gc=SystemGc(); // get a graphics context -00071 gc->SetClippingRect(aRect); // clip outside the redraw area -00072 gc->Clear(aRect); // clear the redraw area -00073 TSize size=iWindow.Size(); -00074 TInt height=size.iHeight; // Need window height to calculate vertical text offset -00075 TInt ascent = Font()->AscentInPixels(); -00076 TInt descent = Font()->DescentInPixels(); -00077 TInt offset = (height + (ascent + descent)) / 2; // Calculate vertical text offset -00078 gc->SetPenColor(TRgb(0,0,0)); // Set pen to black -00079 gc->UseFont(Font()); -00080 gc->DrawText(strings[iNumber], TRect(TPoint(0,0), size), offset, CGraphicsContext::ECenter); -00081 gc->DiscardFont(); -00082 } -00083 -00084 /****************************************************************************\ -00085 | Function: CNumberedWindow::HandlePointerEvent -00086 | Purpose: Handles pointer events for CNumberedWindow. -00087 | Input: aPointerEvent The pointer event -00088 | Output: None -00089 \****************************************************************************/ -00090 void CNumberedWindow::HandlePointerEvent (TPointerEvent& aPointerEvent) -00091 { -00092 switch (aPointerEvent.iType) -00093 { -00094 case TPointerEvent::EDrag: -00095 { -00096 TPoint point = aPointerEvent.iParentPosition; -00097 TPoint distToMove = point - iOldPos; -00098 TPoint position = Window().Position(); -00099 Window().SetPosition (position + distToMove); -00100 iOldPos = point; -00101 break; -00102 } -00103 case TPointerEvent::EButton1Down: -00104 { -00105 // Request drag events -00106 Window().PointerFilter (EPointerFilterDrag, 0); -00107 Window().SetOrdinalPosition (0); -00108 iOldPos = aPointerEvent.iParentPosition; -00109 break; -00110 } -00111 case TPointerEvent::EButton1Up: -00112 { -00113 // Cancel the request for drag events. -00114 Window().PointerFilter (EPointerFilterDrag, EPointerFilterDrag); -00115 break; -00116 } -00117 default: -00118 break; -00119 } -00120 } -00121 -00122 -00124 // CMainWindow implementation -00126 -00127 -00128 /****************************************************************************\ -00129 | Function: Constructor/Destructor for CMainWindow -00130 | Input: aClient Client application that owns the window -00131 \****************************************************************************/ -00132 CMainWindow::CMainWindow (CWsClient* aClient) -00133 : CBackedUpWindow (aClient) -00134 { -00135 } -00136 -00137 -00138 CMainWindow::~CMainWindow () -00139 { -00140 iWindow.Close(); -00141 } -00142 -00143 /****************************************************************************\ -00144 | Function: CMainWindow::Draw -00145 | Purpose: Redraws the contents of CMainWindow within a given -00146 | rectangle. -00147 | Input: aRect Rectangle that needs redrawing -00148 | Output: None -00149 \****************************************************************************/ -00150 -00151 void CMainWindow::Draw(const TRect& /*aRect*/) -00152 { -00153 _LIT(KPanicMsg,"BACKEDUP"); -00154 User::Panic(KPanicMsg,EConnectPanicRedrawToBackedUpWindow); -00155 } -00156 -00157 void CMainWindow::HandlePointerMoveBufferReady () -00158 { -00159 TPoint pnts[KPointerMoveBufferSize]; -00160 TPtr8 ptr((TUint8 *)&pnts,sizeof(pnts)); -00161 TInt numPnts=Window().RetrievePointerMoveBuffer(ptr); -00162 CWindowGc* gc=SystemGc(); -00163 gc->Activate(Window()); -00164 for(TInt index=0;index<numPnts;index++) gc->DrawLineTo(pnts[index]); -00165 gc->Deactivate(); -00166 } -00167 -00168 /****************************************************************************\ -00169 | Function: CMainWindow::HandlePointerEvent -00170 | Purpose: Handles pointer events for CMainWindow. -00171 | Input: aPointerEvent The pointer event! -00172 | Output: None -00173 \****************************************************************************/ -00174 -00175 void CMainWindow::HandlePointerEvent (TPointerEvent& aPointerEvent) -00176 { -00177 switch (aPointerEvent.iType) -00178 { -00179 case TPointerEvent::EButton1Down: -00180 { -00181 Window().SetShadowDisabled(EFalse); -00182 Window().EnablePointerMoveBuffer(); -00183 CWindowGc* gc = SystemGc(); -00184 gc->Activate(Window()); -00185 gc->MoveTo(aPointerEvent.iPosition); -00186 gc->Deactivate(); -00187 } -00188 default: -00189 break; -00190 } -00191 } -00192 -00193 -00195 // CExampleWsClient implementation -00197 -00198 CExampleWsClient* CExampleWsClient::NewL(const TRect& aRect) -00199 { -00200 // make new client -00201 CExampleWsClient* client=new (ELeave) CExampleWsClient(aRect); -00202 CleanupStack::PushL(client); // push, just in case -00203 client->ConstructL(); // construct and run -00204 CleanupStack::Pop(); -00205 return client; -00206 } -00207 -00208 /****************************************************************************\ -00209 | Function: Constructor/Destructor for CExampleWsClient -00210 | Destructor deletes everything that was allocated by -00211 | ConstructMainWindowL() -00212 \****************************************************************************/ -00213 -00214 CExampleWsClient::CExampleWsClient(const TRect& aRect) -00215 :iRect(aRect) -00216 { -00217 } -00218 -00219 CExampleWsClient::~CExampleWsClient () -00220 { -00221 delete iMainWindow; -00222 delete iWindow1; -00223 } -00224 -00225 -00226 /****************************************************************************\ -00227 | Function: CExampleWsClient::ConstructMainWindowL() -00228 | Called by base class's ConstructL -00229 | Purpose: Allocates and creates all the windows owned by this client -00230 | (See list of windows in CExampleWsCLient declaration). -00231 \****************************************************************************/ -00232 -00233 void CExampleWsClient::ConstructMainWindowL() -00234 { -00235 // Resources allocated in this function are freed in the CExampleWsClient destructor -00236 -00237 iMainWindow=new (ELeave) CMainWindow(this); -00238 iMainWindow->ConstructL(iRect); -00239 iWindow1 = new (ELeave) CNumberedWindow (this); -00240 iWindow1->ConstructL (TRect (TPoint (100, 100), TSize (100, 100)), TRgb (100, 100, 100), -00241 iMainWindow); -00242 } -00243 -00244 -00245 /****************************************************************************\ -00246 | Function: CExampleWsClient::RunL() -00247 | Called by active scheduler when an even occurs -00248 | Purpose: Processes events according to their type -00249 | For key events: calls HandleKeyEventL() (global to client) -00250 | For pointer event: calls HandlePointerEvent() for window -00251 | event occurred in. -00252 \****************************************************************************/ -00253 void CExampleWsClient::RunL() -00254 { -00255 // get the event -00256 iWs.GetEvent(iWsEvent); -00257 TInt eventType=iWsEvent.Type(); -00258 // take action on it -00259 switch (eventType) -00260 { -00261 // events global within window group -00262 case EEventNull: -00263 break; -00264 case EEventKey: -00265 { -00266 TKeyEvent& keyEvent=*iWsEvent.Key(); // get key event -00267 HandleKeyEventL (keyEvent); -00268 break; -00269 } -00270 case EEventKeyUp: -00271 case EEventModifiersChanged: -00272 case EEventKeyDown: -00273 case EEventFocusLost: -00274 case EEventFocusGained: -00275 case EEventSwitchOn: -00276 case EEventPassword: -00277 case EEventWindowGroupsChanged: -00278 case EEventErrorMessage: -00279 break; -00280 // events local to specific windows -00281 case EEventPointer: -00282 { -00283 CWindow* window=(CWindow*)(iWsEvent.Handle()); // get window -00284 TPointerEvent& pointerEvent=*iWsEvent.Pointer(); -00285 window->HandlePointerEvent (pointerEvent); -00286 break; -00287 } -00288 case EEventPointerExit: -00289 case EEventPointerEnter: -00290 case EEventPointerBufferReady: -00291 { -00292 CWindow* window=(CWindow*)(iWsEvent.Handle()); // get window -00293 window->HandlePointerMoveBufferReady (); -00294 break; -00295 } -00296 case EEventDragDrop: -00297 break; -00298 default: -00299 break; -00300 } -00301 IssueRequest(); // maintain outstanding request -00302 } -00303 -00304 /****************************************************************************\ -00305 | Function: CExampleWsClient::HandleKeyEventL() -00306 | Purpose: Processes key events for CExampleWsClient -00307 \****************************************************************************/ -00308 void CExampleWsClient::HandleKeyEventL (TKeyEvent& /*aKeyEvent*/) -00309 { -00310 } -00311 -00312 -