|
1 /* |
|
2 * Copyright (c) 2002-2006 Nokia Corporation and/or its subsidiary(-ies). |
|
3 * All rights reserved. |
|
4 * This component and the accompanying materials are made available |
|
5 * under the terms of "Eclipse Public License v1.0" |
|
6 * which accompanies this distribution, and is available |
|
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
8 * |
|
9 * Initial Contributors: |
|
10 * Nokia Corporation - initial contribution. |
|
11 * |
|
12 * Contributors: |
|
13 * |
|
14 * Description: MsgEditorView declaration |
|
15 * |
|
16 */ |
|
17 |
|
18 |
|
19 |
|
20 #ifndef CMSGEDITORVIEW_H |
|
21 #define CMSGEDITORVIEW_H |
|
22 |
|
23 // ========== INCLUDE FILES ================================ |
|
24 |
|
25 #include <coecntrl.h> // for CCoeControl |
|
26 #include <aknenv.h> // for CAknEnv |
|
27 #include <ItemFinder.h> |
|
28 #include <ConeResLoader.h> |
|
29 |
|
30 #include "MsgBaseControlObserver.h" // for MMsgBaseControlObserver |
|
31 #include "MsgEditorObserver.h" // for MMsgEditorObserver |
|
32 #include "MsgEditor.hrh" // for typedefs |
|
33 |
|
34 // ========== CONSTANTS ==================================== |
|
35 |
|
36 // ========== MACROS ======================================= |
|
37 |
|
38 // ========== DATA TYPES =================================== |
|
39 |
|
40 // ========== FUNCTION PROTOTYPES ========================== |
|
41 |
|
42 // ========== FORWARD DECLARATIONS ========================= |
|
43 |
|
44 class MMsgEditorObserver; |
|
45 class CMsgBaseControl; |
|
46 class CMsgHeader; |
|
47 class CMsgBody; |
|
48 class CMsgFormComponent; |
|
49 class CEikScrollBarFrame; |
|
50 class CAknsBasicBackgroundControlContext; |
|
51 |
|
52 // ========== CLASS DECLARATION ============================ |
|
53 |
|
54 /** |
|
55 * Defines an API for message editor/viewer view. |
|
56 * |
|
57 * @lib MsgEditor.lib |
|
58 * @since S60 v2.0 |
|
59 */ |
|
60 class CMsgEditorView : public CCoeControl, |
|
61 public MMsgBaseControlObserver, |
|
62 public MCoeControlObserver, |
|
63 public MEikScrollBarObserver |
|
64 { |
|
65 public: |
|
66 |
|
67 enum TMsgEditorMode |
|
68 { |
|
69 EMsgEditorModeNone = 0x00, |
|
70 EMsgEditorModeNormal = 0x01, |
|
71 EMsgReadOnly = 0x02, |
|
72 EMsgDoNotUseDefaultBodyControl = 0x04 |
|
73 }; |
|
74 |
|
75 public: |
|
76 |
|
77 /** |
|
78 * Factory method. |
|
79 * @param aObserver |
|
80 * @param aEditorModeFlags |
|
81 * @return |
|
82 */ |
|
83 IMPORT_C static CMsgEditorView* NewL( MMsgEditorObserver& aObserver, |
|
84 TUint32 aEditorModeFlags ); |
|
85 |
|
86 /** |
|
87 * from MObjectProvider |
|
88 */ |
|
89 IMPORT_C MObjectProvider* MopNext(); |
|
90 |
|
91 /** |
|
92 * Destructor. |
|
93 */ |
|
94 IMPORT_C ~CMsgEditorView(); |
|
95 |
|
96 /** |
|
97 * Prepares the editor view for showing it on the screen. |
|
98 * @param aRect |
|
99 * @param aControlIdForFocus |
|
100 */ |
|
101 IMPORT_C void ExecuteL( const TRect& aRect, TInt aControlIdForFocus ); |
|
102 |
|
103 /** |
|
104 * Finds a control from the header and the body by id and returns a |
|
105 * pointer to it. If a control cannot be found, returns NULL. |
|
106 * @param aControlId |
|
107 * @return |
|
108 */ |
|
109 IMPORT_C CMsgBaseControl* ControlById( TInt aControlId ) const; |
|
110 |
|
111 /** |
|
112 * Returns a pointer to a focused control. If no control is focused, |
|
113 * returns NULL. |
|
114 * @return |
|
115 */ |
|
116 IMPORT_C CMsgBaseControl* FocusedControl() const; |
|
117 |
|
118 /** |
|
119 * Sets focus to a control aControlId. |
|
120 * @param aControlId |
|
121 */ |
|
122 IMPORT_C void SetFocus( TInt aControlId ); |
|
123 |
|
124 /** |
|
125 * Constructs a control of type aControlType from resource and adds it |
|
126 * to a form component aFormComponent. The control is added to a |
|
127 * position aIndex. |
|
128 * |
|
129 * Leaves with KErrNotFound if aControlType is incorrect. |
|
130 * |
|
131 * @param aResourceId |
|
132 * @param aControlType |
|
133 * @param aIndex |
|
134 * @param aFormComponent |
|
135 * @return |
|
136 */ |
|
137 IMPORT_C TInt AddControlFromResourceL( TInt aResourceId, |
|
138 TInt aControlType, |
|
139 TInt aIndex, |
|
140 TMsgFormComponent aFormComponent ); |
|
141 |
|
142 /** |
|
143 * Adds a control given by aControl to a form component aFormComponent. |
|
144 * The control is added to a position aIndex with control id aControlId. |
|
145 * |
|
146 * @param aControl |
|
147 * @param aControlId |
|
148 * @param aIndex |
|
149 * @param aFormComponent |
|
150 */ |
|
151 IMPORT_C void AddControlL( CMsgBaseControl* aControl, |
|
152 TInt aControlId, |
|
153 TInt aIndex, |
|
154 TMsgFormComponent aFormComponent ); |
|
155 |
|
156 /** |
|
157 * Removes the control aControlId from the header or the body and returns |
|
158 * pointer to it. If a control cannot be found, returns NULL. |
|
159 * |
|
160 * @param aControlId |
|
161 * @return |
|
162 */ |
|
163 IMPORT_C CMsgBaseControl* RemoveControlL( TInt aControlId ); |
|
164 |
|
165 /** |
|
166 * Removes and deletes the control aControlId from the header or the body if found. |
|
167 * |
|
168 * @param aControlId Control ID of the deleted control. |
|
169 */ |
|
170 IMPORT_C void DeleteControlL( TInt aControlId ); |
|
171 |
|
172 /** |
|
173 * Returns a reference to a form component. |
|
174 * @param aFormComponent |
|
175 * @return |
|
176 */ |
|
177 IMPORT_C CCoeControl& FormComponent( TMsgFormComponent aFormComponent ) const; |
|
178 |
|
179 /** |
|
180 * Prepares the editor view for viewing it on the screen after screen |
|
181 * size change. |
|
182 * @param aRect |
|
183 */ |
|
184 IMPORT_C void HandleScreenSizeChangeL( const TRect& aRect ); |
|
185 |
|
186 /** |
|
187 * Resets (= clears) all controls. |
|
188 */ |
|
189 IMPORT_C void ResetControls(); |
|
190 |
|
191 /** |
|
192 * Resets (= clears) controls from header or body. |
|
193 * @param aFormComponent EMsgHeader or EMsgBody |
|
194 */ |
|
195 IMPORT_C void ResetControls( TMsgFormComponent aFormComponent ); |
|
196 |
|
197 /** |
|
198 * Checks if any control owned by view is modified. |
|
199 * @return ETrue if modified, EFalse if not. |
|
200 */ |
|
201 IMPORT_C TBool IsAnyControlModified() const; |
|
202 |
|
203 /** |
|
204 * Updates modified flag of controls owned by view. |
|
205 * Call this with EFalse when you have populated controls to reset the |
|
206 * modifed flag. |
|
207 * @param aFlag ETrue or EFalse |
|
208 */ |
|
209 IMPORT_C void SetControlsModified( TBool aFlag ); |
|
210 |
|
211 inline void SetScrollParts( TInt aScrollParts ); |
|
212 inline void SetCurrentPart( TInt aCurrentPart ); |
|
213 |
|
214 /** |
|
215 * Returns used item finder pointer if any. |
|
216 * |
|
217 * @return CItemFinder pointer if item finder is used. |
|
218 * NULL otherwise |
|
219 */ |
|
220 IMPORT_C CItemFinder* ItemFinder(); |
|
221 |
|
222 /** |
|
223 * Sets edwin observer. |
|
224 * Edwin observer is added to every text editor control that currently exists |
|
225 * or is added after this call to the view. |
|
226 * |
|
227 * aObserver IN Edwin observer. |
|
228 * Setting observer to NULL will remove the edwin observer. |
|
229 */ |
|
230 IMPORT_C void SetEdwinObserverL( MEikEdwinObserver* aObserver ); |
|
231 |
|
232 public: // from CCoeControl |
|
233 |
|
234 /** |
|
235 * Handles key events. |
|
236 * @param aKeyEvent |
|
237 * @param aType |
|
238 * @return |
|
239 */ |
|
240 IMPORT_C TKeyResponse OfferKeyEventL( |
|
241 const TKeyEvent& aKeyEvent, |
|
242 TEventCode aType); |
|
243 |
|
244 /** |
|
245 * For handling dynamic layout switch. |
|
246 */ |
|
247 void HandleResourceChange( TInt aType ); |
|
248 |
|
249 /** |
|
250 * From CCoeControl. See coecntrl.h |
|
251 */ |
|
252 void HandlePointerEventL( const TPointerEvent& aPointerEvent ); |
|
253 |
|
254 public: // from MMsgBaseControlObserver |
|
255 |
|
256 /** |
|
257 * Returns whether view is intialized. |
|
258 */ |
|
259 TBool ViewInitialized() const; |
|
260 |
|
261 /** |
|
262 * Returns the current view rectangle. |
|
263 * @return |
|
264 */ |
|
265 TRect ViewRect() const; |
|
266 |
|
267 /** |
|
268 * Handles an event from a control. |
|
269 * @param aControl |
|
270 * @param aRequest |
|
271 * @param aDelta |
|
272 * @return |
|
273 */ |
|
274 TBool HandleBaseControlEventRequestL( CMsgBaseControl* aControl, |
|
275 TMsgControlEventRequest aRequest, |
|
276 TInt aDelta ); |
|
277 |
|
278 /** |
|
279 * Handles an event from a control. |
|
280 * @param aControl |
|
281 * @param aRequest |
|
282 * @return |
|
283 */ |
|
284 TBool HandleBaseControlEventRequestL( CMsgBaseControl* aControl, |
|
285 TMsgControlEventRequest aRequest ); |
|
286 |
|
287 /** |
|
288 * Handles an event from a control. |
|
289 * @param aControl |
|
290 * @param aRequest |
|
291 * @param aArg1 |
|
292 * @param aArg2 |
|
293 * @param aArg3 |
|
294 * @return |
|
295 */ |
|
296 TInt HandleEditObserverEventRequestL( const CCoeControl* aControl, |
|
297 TMsgControlEventRequest aRequest, |
|
298 TAny* aArg1 = 0, |
|
299 TAny* aArg2 = 0, |
|
300 TAny* aArg3 = 0 ); |
|
301 |
|
302 public: // New methods, from MObjectProvider |
|
303 |
|
304 IMPORT_C TTypeUid::Ptr MopSupplyObject(TTypeUid aId); |
|
305 |
|
306 public: // from MEikScrollBarObserver |
|
307 |
|
308 /** |
|
309 * Handles scroll events |
|
310 * |
|
311 * @param aScrollBar Pointer to the originating scroll bar object. |
|
312 * @param aEventType A scroll event |
|
313 */ |
|
314 void HandleScrollEventL( CEikScrollBar* aScrollBar, TEikScrollEvent aEventType ); |
|
315 |
|
316 protected: // from CCoeControl |
|
317 |
|
318 /** |
|
319 * Returns a number of controls. |
|
320 * @return |
|
321 */ |
|
322 TInt CountComponentControls() const; |
|
323 |
|
324 /** |
|
325 * Returns a control of index aIndex. |
|
326 * @param aIndex |
|
327 * @return |
|
328 */ |
|
329 CCoeControl* ComponentControl( TInt aIndex ) const; |
|
330 |
|
331 /** |
|
332 * Sets new position for all the controls. |
|
333 */ |
|
334 void SizeChanged(); |
|
335 |
|
336 /** |
|
337 * This is called when the focus of the control is changed. |
|
338 * @param aDrawNow |
|
339 */ |
|
340 void FocusChanged( TDrawNow aDrawNow ); |
|
341 |
|
342 /** |
|
343 * Draw |
|
344 */ |
|
345 void Draw( const TRect& aRect ) const; |
|
346 |
|
347 protected: // from MCoeControlObserver |
|
348 |
|
349 /** |
|
350 * Handle control event. |
|
351 * @param aControl |
|
352 * @param aEventType |
|
353 */ |
|
354 void HandleControlEventL( CCoeControl* aControl, TCoeEvent aEventType ); |
|
355 |
|
356 private: |
|
357 |
|
358 enum TMsgFocus |
|
359 { |
|
360 EMsgNoneFocused, |
|
361 EMsgHeaderFocused, |
|
362 EMsgBodyFocused |
|
363 }; |
|
364 |
|
365 private: |
|
366 |
|
367 /** |
|
368 * Constructor. |
|
369 * @param aObserver |
|
370 * @param aEditorModeFlags |
|
371 */ |
|
372 CMsgEditorView( MMsgEditorObserver& aObserver, TUint32 aEditorModeFlags ); |
|
373 |
|
374 /** |
|
375 * 2nd phase constructor. |
|
376 */ |
|
377 void ConstructL(); |
|
378 |
|
379 /** |
|
380 * Creates the header. |
|
381 */ |
|
382 void CreateHeaderL(); |
|
383 |
|
384 /** |
|
385 * Creates the body. Creates also the default body control if requested |
|
386 * in editor mode flags in constructor. |
|
387 */ |
|
388 void CreateBodyL(); |
|
389 |
|
390 /** |
|
391 * Creates the scroll bar. |
|
392 */ |
|
393 void CreateScrollBarL(); |
|
394 |
|
395 /** |
|
396 * Updates the scroll bar. |
|
397 */ |
|
398 void UpdateScrollBarL(); |
|
399 |
|
400 /** |
|
401 * Return virtual height and virtual Y position of the form. |
|
402 * @param aHeight |
|
403 * @param aPos |
|
404 */ |
|
405 void GetVirtualFormHeightAndPos( TInt& aHeight, TInt& aPos ); |
|
406 |
|
407 /** |
|
408 * Sets sizes for the header and the body and returns their total size |
|
409 * aSize as a reference. The function does not set new sizes for the |
|
410 * controls if the aInit argument is EFalse. If aInit == ETrue, this |
|
411 * function sets the size so that only a total height can change. |
|
412 * |
|
413 * @param aSize |
|
414 * @param aInit |
|
415 */ |
|
416 void SetAndGetSizeL( TSize& aSize, TBool aInit ); |
|
417 |
|
418 /** |
|
419 * Sets the positions for the controls and re-draws the view. |
|
420 */ |
|
421 void RefreshViewL(); |
|
422 |
|
423 /** |
|
424 * Prepares controls for viewing. |
|
425 * @param aEvent |
|
426 * @param aParam |
|
427 */ |
|
428 void NotifyControlsForEvent( TMsgViewEvent aEvent, TInt aParam ); |
|
429 |
|
430 /** |
|
431 * Sets focus to a control aControlId. |
|
432 * @param aControlId |
|
433 */ |
|
434 void SetFocusByControlIdL( TInt aControlId, |
|
435 TBool aCorrectFormPosition = ETrue, |
|
436 TBool aSetCursorPos = ETrue ); |
|
437 |
|
438 /** |
|
439 * Does an actual add operation for the control by setting all the |
|
440 * necessary observers etc. |
|
441 * |
|
442 * @param aControl |
|
443 * @param aControlId |
|
444 * @param aIndex |
|
445 * @param aFormComponent |
|
446 */ |
|
447 void DoAddControlL( CMsgBaseControl* aControl, |
|
448 TInt aControlId, |
|
449 TInt aIndex, |
|
450 TMsgFormComponent aFormComponent); |
|
451 |
|
452 /** |
|
453 * Rotates focus up or down depending aDirection argument. |
|
454 * Returns ETrue if operation can be done. |
|
455 * |
|
456 * @param aDirection |
|
457 * @param aFocusEvent |
|
458 * @return |
|
459 */ |
|
460 TBool RotateFocusL( TMsgFocusDirection aDirection, |
|
461 MMsgEditorObserver::TMsgFocusEvent& aFocusEvent ); |
|
462 |
|
463 /** |
|
464 * Ensures that the cursor is visible on the view and that the form |
|
465 * position is correct. |
|
466 * |
|
467 */ |
|
468 TBool EnsureCorrectFormPosition( TBool aScrollDown, TBool aScrollUp = EFalse ); |
|
469 |
|
470 /** |
|
471 * Handles the form's height change. Gets pointer aControl to a control |
|
472 * which height is changing. If aDeltaHeight > 0 the height is increasing. |
|
473 * |
|
474 * @param aControl |
|
475 * @param aDeltaHeight |
|
476 * @return |
|
477 */ |
|
478 TBool HandleHeightChangedL( CMsgBaseControl* aControl, TInt aDeltaHeight ); |
|
479 |
|
480 /** |
|
481 * Scrolls the form up or down depending given amount of pixels. |
|
482 * |
|
483 * @param aDelta Delta of pixels to move. If aDelta > 0, |
|
484 * the form is scrolled downward. |
|
485 * @param aUpdateScrollBarPos Indicates whether scroll bar focus position |
|
486 * should be updated inside this function. |
|
487 * |
|
488 * @return ETrue if requested pixels where scrolled. Otherwise EFalse. |
|
489 */ |
|
490 TBool ScrollForm( TInt aDelta, TBool aUpdateScrollBarPos ); |
|
491 |
|
492 /** |
|
493 * Sets view rect. |
|
494 * @param aRect |
|
495 */ |
|
496 void SetViewRect( const TRect& aRect ); |
|
497 |
|
498 /** |
|
499 * Sets proper distances between controls to obey LAF coordinates. |
|
500 */ |
|
501 void AdjustComponentDistances(); |
|
502 |
|
503 /** |
|
504 * Sets all controls initialized. |
|
505 */ |
|
506 void SetComponentsInitialized(); |
|
507 |
|
508 /** |
|
509 * |
|
510 */ |
|
511 TBool SetAfterFocusL( MMsgEditorObserver::TMsgAfterFocusEventFunc aAfterFocus ); |
|
512 |
|
513 /** |
|
514 * Determines whether given control is fully visible on the screen. |
|
515 * |
|
516 * @return ETrue if fully visible. |
|
517 * EFalse if not fully visible. |
|
518 */ |
|
519 TBool ControlFullyVisible( CMsgBaseControl* aControl ) const; |
|
520 |
|
521 /** |
|
522 * Resolves next focusable control when given form is navigated to |
|
523 * certain direction. |
|
524 * |
|
525 * @param aFormComponent Form component that is navigated |
|
526 * (i.e. either header or body) |
|
527 * @param aStart Control ID of control where search should be started. |
|
528 * @param aDirection Navigation direction. |
|
529 * |
|
530 * @return Control ID of next focusable control. |
|
531 * KErrNotFound if next control is not found. |
|
532 */ |
|
533 TInt NextFocusableFormControl( CMsgFormComponent* aFormComponent, |
|
534 TInt aStart, |
|
535 TMsgFocusDirection aDirection ); |
|
536 |
|
537 /** |
|
538 * |
|
539 */ |
|
540 void ReportFocusMovement( TInt aFocusEvent ); |
|
541 |
|
542 /** |
|
543 * Constructor (not available). |
|
544 */ |
|
545 CMsgEditorView(); |
|
546 |
|
547 /** |
|
548 * Ensures that a Visible-part is completely scrolled. |
|
549 * |
|
550 * @param aFocusPosition . |
|
551 * @param aDirection Scrolling direction. |
|
552 * |
|
553 * @return ETrue/EFalse |
|
554 */ |
|
555 TBool EnsureVisiblePartScrollComplete( TInt aFocusPosition, |
|
556 TMsgScrollDirection aDirection ); |
|
557 |
|
558 /** |
|
559 * Performs view scrolling to given direction. |
|
560 * |
|
561 * @param aPixelsToScroll Amount of pixels wanted to be scrolled. |
|
562 * @param aDirection Scrolling direction. |
|
563 * @param aMoveThumb If ETrue scroll thumb is moved at the end of scrolling. |
|
564 */ |
|
565 void ScrollViewL( TInt aPixelsToScroll, |
|
566 TMsgScrollDirection aDirection, |
|
567 TBool aMoveThumb ); |
|
568 |
|
569 /** |
|
570 * Returns control matching located at given screen position. |
|
571 * |
|
572 * @param aPosition Screen coordinates where control should be returned. |
|
573 * @param aEvaluateHitText If ETrue internal hit test evaluation is performed. |
|
574 * Otherwise hit text evaluation is not performed and control |
|
575 * location is solely based on it's physical coordinates. |
|
576 */ |
|
577 CMsgBaseControl* ControlFromPosition( TPoint aPosition, TBool aEvaluateHitTest ) const; |
|
578 |
|
579 /** |
|
580 * Convenience function for casting the scroll bar model. |
|
581 */ |
|
582 inline const TAknDoubleSpanScrollBarModel* AknScrollBarModel() const; |
|
583 |
|
584 /** |
|
585 * Convenience function for checking whether view is on editor or viewer mode. |
|
586 */ |
|
587 inline TBool IsReadOnly() const; |
|
588 |
|
589 /** |
|
590 * Ensures that cursor are located correctly relative to currently focused control. |
|
591 */ |
|
592 void EnsureCorrectCursorPosition(); |
|
593 |
|
594 /** |
|
595 * Ensures that correct scroll part is shown to the user. |
|
596 */ |
|
597 void EnsureCorrectScrollPartL( TInt aFocusPosition ); |
|
598 |
|
599 /** |
|
600 * Returns the number of currently scrolled scroll part. |
|
601 */ |
|
602 TInt CurrentScrollPart( TInt aFocusPosition ); |
|
603 |
|
604 /** |
|
605 * Determines if control is focusable (i.e. focus should |
|
606 * stop to the control). |
|
607 * |
|
608 * @since 3.2 |
|
609 * |
|
610 * @param aControl Control that is tested. |
|
611 * @param aDirection Navigation direction. |
|
612 * |
|
613 * @return ETrue if focus should stop to this control. |
|
614 * EFalse if focus should not stop to this control. |
|
615 */ |
|
616 TBool IsFocusable( CMsgBaseControl* aControl, TMsgFocusDirection aDirection ) const; |
|
617 |
|
618 /** |
|
619 * Shows scrollbar popup info text. |
|
620 */ |
|
621 void ShowScrollPopupInfoTextL( CAknDoubleSpanScrollBar* aScrollBar, TInt aPartNumber ); |
|
622 |
|
623 /** |
|
624 * Ensures that view position is valid and correctly positioned. |
|
625 */ |
|
626 void EnsureCorrectViewPosition(); |
|
627 |
|
628 /** |
|
629 * Performs view scrolling to given direction. |
|
630 * |
|
631 * @param aPixelsToScroll Amount of pixels wanted to be scrolled. On return contains |
|
632 * the amount of pixels not scrolled. |
|
633 * @param aDirection Scrolling direction. |
|
634 */ |
|
635 void DoScrollViewL( TInt& aPixelsToScroll, |
|
636 TMsgScrollDirection aDirection ); |
|
637 |
|
638 |
|
639 private: |
|
640 |
|
641 MMsgEditorObserver& iEditorObserver; |
|
642 CMsgHeader* iHeader; |
|
643 CMsgBody* iBody; |
|
644 TMsgFocus iCurrentFocus; |
|
645 TInt iFormOffset; // distance from the main window's top y to form's top y |
|
646 TUint32 iEditorModeFlags; |
|
647 TRect iViewRect; |
|
648 TUint32 iStateFlags; |
|
649 CEikScrollBarFrame* iScrollBar; |
|
650 TInt iScrollParts; |
|
651 TInt iVisiblePart; |
|
652 CAknsBasicBackgroundControlContext* iBgContext; // Skin background control context |
|
653 TInt iUniqueHandlePool; |
|
654 TInt iLineHeight; |
|
655 TInt iBaseLineOffset; |
|
656 TInt iViewFocusPosition; |
|
657 |
|
658 CArrayFixFlat<TInt>* iScrollPartArray; |
|
659 HBufC* iScrollPopText; |
|
660 TInt iPopUpPart; |
|
661 TInt iVisiblePartHeight; |
|
662 |
|
663 MEikEdwinObserver* iEdwinObserver; |
|
664 RConeResourceLoader iResourceLoader; |
|
665 }; |
|
666 |
|
667 #include <MsgEditorView.inl> |
|
668 |
|
669 // ========================================================= |
|
670 |
|
671 #endif // CMSGEDITORVIEW_H |
|
672 |
|
673 // End of File |