home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-09-17 | 22.2 KB | 709 lines | [TEXT/MPS ] |
- //========================================================================================
- //
- // File: ScrollEd.cpp
- // Release Version: $ ODF 2 $
- //
- // Copyright: (c) 1993 - 1996 by Apple Computer, Inc., all rights reserved.
- //
- //========================================================================================
-
- #include "Form.hpp"
-
- #ifndef SCROLLED_H
- #include "ScrollEd.h"
- #endif
-
- #ifndef FRAME_H
- #include "Frame.h"
- #endif
-
- #ifndef EDITCMD_H
- #include "EditCmd.h"
- #endif
-
- #ifndef FWPART_H
- #include "FWPart.h"
- #endif
-
- #ifndef FWEVENT_H
- #include "FWEvent.h"
- #endif
-
- #ifndef FWEVEDEF_H
- #include "FWEveDef.h"
- #endif
-
- #ifndef FWSCLBAR_H
- #include "FWSclBar.h"
- #endif
-
- #ifndef FWSCLNOT_H
- #include "FWSclNot.h"
- #endif
-
- #ifndef FWCONTXT_H
- #include "FWContxt.h"
- #endif
-
- #ifndef FWCONTXT_H
- #include "FWContxt.h"
- #endif
-
- #ifndef FWARDYNA_H
- #include "FWArDyna.h"
- #endif
-
- #ifndef FWMNUBAR_H
- #include "FWMnubar.h"
- #endif
-
- // ----- PPob View Support -----
-
- #if FW_PPOB_VIEWS
- #include "FWPPobRd.h"
- #endif
-
- // ----- MacApp View Support -----
-
- #if FW_MACAPP_VIEWS
- #include "FWMARead.h"
- #endif
-
- #ifndef SOM_Module_OpenDoc_Commands_defined
- #include "CmdDefs.xh"
- #endif
-
- //========================================================================================
- // RunTime Info
- //========================================================================================
-
- #ifdef FW_BUILD_MAC
- #pragma segment odfform
- #endif
-
- FW_DEFINE_CLASS_M3(CScrollEdit, FW_CEditView, FW_MReceiver, FW_MNotifier);
- FW_DEFINE_AUTO(CScrollEdit)
-
- const FW_ClassTypeConstant LScrollEd = FW_TYPE_CONSTANT('S','e','d','v');
- FW_REGISTER_ARCHIVABLE_CLASS(LScrollEd, CScrollEdit, CScrollEdit::Create, FW_CView::Read, CScrollEdit::Destroy, FW_CView::Write)
-
- //========================================================================================
- // CScrollEdit
- //========================================================================================
-
- // Documentation
- // -------------
- // CScrollEdit adds scrolling functionalities to FW_CEditView and adds support for
- // Undo/Redo clipboard commands
- //
- // CScrollEdit inherits from FW_MReceiver in order to respond to scrolling notifications
- //
- // CScrollEdit must disable its clipboard commands when the
- // view is deleted (see discussion in CEditViewCommand::HandleNotification)
- //
- // A CScrollEdit object requires a vertical and/or an horizontal scrollbars.
- // It can be created from resources, see the type RScrollEdit in Form's views.fr
-
- //----------------------------------------------------------------------------------------
- // CScrollEdit::CScrollEdit
- //----------------------------------------------------------------------------------------
-
- CScrollEdit::CScrollEdit (Environment* ev,
- FW_CSuperView* container,
- const FW_CRect& bounds,
- ODID viewID,
- FW_CScrollBar* horzSB,
- FW_CScrollBar* vertSB,
- const FW_CString& str,
- const FW_CFont& font,
- short maxChars,
- unsigned short attributes,
- FW_Fixed textWidth)
- : FW_CEditView(ev, container, bounds, viewID, str, font, maxChars, attributes),
- FW_MReceiver()
- {
- fScrollbars[FW_kHorizontal] = horzSB;
- fScrollbars[FW_kVertical] = vertSB;
-
- // use the view width by default
- fWidth = (textWidth == FW_kFixed0) ? bounds.Size().x : textWidth;
-
- Initialize(ev);
- }
-
- //----------------------------------------------------------------------------------------
- // CScrollEdit::CScrollEdit
- //----------------------------------------------------------------------------------------
- CScrollEdit::CScrollEdit(Environment* ev)
- : FW_CEditView(ev),
- FW_MReceiver()
- {
- }
-
- //----------------------------------------------------------------------------------------
- // CScrollEdit::Initialize
- //----------------------------------------------------------------------------------------
-
- void CScrollEdit::Initialize(Environment* ev)
- {
- // scrolling view responds to scrollbar notifications
- if (fScrollbars[FW_kVertical])
- AddInterest(FW_CInterest(fScrollbars[FW_kVertical], FW_kScrollMsg));
-
- if (fScrollbars[FW_kHorizontal])
- AddInterest(FW_CInterest(fScrollbars[FW_kHorizontal], FW_kScrollMsg));
-
- AdjustTERects(ev);
- UpdateScrollParameters(ev);
- UpdateScrollUnits(ev);
- }
-
- //----------------------------------------------------------------------------------------
- // CScrollEdit::~CScrollEdit
- //----------------------------------------------------------------------------------------
-
- CScrollEdit::~CScrollEdit ()
- {
- // Don't delete the scroll bars, we don't own them!
-
- if (fScrollbars[FW_kHorizontal])
- {
- FW_CInterest interest(fScrollbars[FW_kHorizontal], FW_kScrollMsg);
- RemoveInterest(interest);
- }
- if (fScrollbars[FW_kVertical])
- {
- FW_CInterest interest(fScrollbars[FW_kVertical], FW_kScrollMsg);
- RemoveInterest(interest);
- }
- }
-
- //----------------------------------------------------------------------------------------
- // CScrollEdit::AdjustTERects
- //----------------------------------------------------------------------------------------
-
- void CScrollEdit::AdjustTERects(Environment* ev)
- {
- TEHandle teHdl = (TEHandle)GetPlatformEditHandle(ev);
- TEPtr te = *teHdl;
-
- // Set viewRect height to a multiple of lines to avoid cutting lines
- te->viewRect.bottom = (((te->viewRect.bottom - te->viewRect.top) / te->lineHeight)
- * te->lineHeight) + te->viewRect.top;
-
- // Adjust width of destination rectangle for text scrolling horizontally
- if (fScrollbars[FW_kHorizontal])
- te->destRect.right = te->destRect.left + FW_FixedToInt(fWidth);
- }
-
- //----------------------------------------------------------------------------------------
- // CScrollEdit::SizeChanged
- //----------------------------------------------------------------------------------------
-
- void CScrollEdit::SizeChanged (Environment* ev, const FW_CPoint& oldSize)
- {
- // call base class to update the TEd viewRect
- FW_CEditView::SizeChanged(ev, oldSize);
-
- AdjustTERects(ev);
-
- // We use the fact that the scrollbars have already been resized because they
- // were created before the CScrollEdit object.
- UpdateScrollParameters(ev);
- UpdateScrollUnits(ev);
- }
-
- //----------------------------------------------------------------------------------------
- // CScrollEdit::UpdateScrollUnits
- //----------------------------------------------------------------------------------------
-
- void CScrollEdit::UpdateScrollUnits(Environment* ev)
- {
- TEHandle teHdl = (TEHandle)GetPlatformEditHandle(ev);
- FW_CScrollBar* sb = fScrollbars[FW_kHorizontal];
-
- if (sb)
- {
- short major = (**teHdl).viewRect.right - (**teHdl).viewRect.left;
- short minor = major / 10;
- sb->SetMinorScrollUnits(ev, FW_IntToFixed(minor));
- sb->SetMajorScrollUnits(ev, FW_IntToFixed(major));
- }
-
- sb = fScrollbars[FW_kVertical];
- if (sb)
- {
- short major = ((**teHdl).viewRect.bottom - (**teHdl).viewRect.top) / (**teHdl).lineHeight;
- sb->SetMajorScrollUnits(ev, FW_IntToFixed(major));
- // minor scroll unit is always 1 line.
- }
- }
-
- //----------------------------------------------------------------------------------------
- // CScrollEdit::UpdateScrollParameters
- //----------------------------------------------------------------------------------------
- void CScrollEdit::UpdateScrollParameters(Environment* ev)
- {
- AdjustScrollbar(ev, FW_kVertical);
- AdjustScrollbar(ev, FW_kHorizontal);
-
- // Must also scroll the Ted to match up the new scrollbar values
- // in case a scroll bar became inactive and the Ted was already scrolled
- AdjustTE(ev);
- }
-
- //----------------------------------------------------------------------------------------
- // CScrollEdit::AdjustTE
- //----------------------------------------------------------------------------------------
- void CScrollEdit::AdjustTE(Environment* ev)
- {
- // We must create a graphic context and adjust the Mac text-edit
- // before making any native TE calls
- FW_CViewContext gc (ev, this, GetFrame(ev)->GetActiveFacet(ev));
- MacAdjustRects (ev, gc);
-
- TEHandle teHdl = (TEHandle)GetPlatformEditHandle(ev);
-
- FW_CScrollBar* sb = fScrollbars[FW_kHorizontal];
- short hScroll = 0;
- if (sb)
- hScroll = ((**teHdl).viewRect.left - (**teHdl).destRect.left) - FW_FixedToInt(sb->GetScrollPos(ev));
-
- sb = fScrollbars[FW_kVertical];
- short vScroll = 0;
- if (sb)
- vScroll = ((**teHdl).viewRect.top - (**teHdl).destRect.top) -
- (FW_FixedToInt(sb->GetScrollPos(ev)) * ((**teHdl).lineHeight));
-
- TEScroll(hScroll, vScroll, teHdl);
- }
-
- //----------------------------------------------------------------------------------------
- // CScrollEdit::AdjustScrollbar
- //----------------------------------------------------------------------------------------
- // Code borrowed from the MPW example TEDocument.cp
-
- void CScrollEdit::AdjustScrollbar(Environment* ev, FW_XYSelector direction)
- {
- FW_CScrollBar* sb = fScrollbars[direction];
- if (sb == NULL)
- return;
-
- TEHandle teHdl = (TEHandle)GetPlatformEditHandle(ev);
- TEPtr te = *teHdl;
- int max = 0;
- int oldMax = FW_FixedToInt(sb->GetScrollMax(ev));
-
- if (direction == FW_kVertical)
- {
- short lines = te->nLines;
- // add 1 line if last char is a return
- if ( *(*te->hText + te->teLength - 1) == 13 )
- lines += 1;
- max = lines - (( te->viewRect.bottom - te->viewRect.top ) / te->lineHeight);
- }
- else
- {
- max = FW_FixedToInt(fWidth) - ( te->viewRect.right - te->viewRect.left );
- }
-
- if (max < 0) max = 0;
-
- // Must convert to fixed number for SetScrollMax
- sb->SetScrollMax(ev, FW_IntToFixed(max));
-
- te = *teHdl;
- int value;
- int oldValue = FW_FixedToInt(sb->GetScrollPos(ev));
-
- if (direction == FW_kVertical)
- value = ( te->viewRect.top - te->destRect.top ) / te->lineHeight;
- else
- value = te->viewRect.left - te->destRect.left;
-
- if (value < 0)
- value = 0;
- else if (value > max)
- value = max;
-
- // Must convert to fixed number for SetScrollPos
- sb->SetScrollPos(ev, FW_IntToFixed(value));
-
- if (value == oldValue && max != oldMax)
- sb->RedrawControl(ev);
- }
-
- //----------------------------------------------------------------------------------------
- // CScrollEdit::DoAdjustMenus
- //----------------------------------------------------------------------------------------
-
- FW_Handled CScrollEdit::DoAdjustMenus (Environment *ev, FW_CMenuBar* menuBar,
- FW_Boolean hasMenuFocus, FW_Boolean isRoot)
- {
- // Let base class adjust the Edit menu first
- FW_CEditView::DoAdjustMenus(ev, menuBar, hasMenuFocus, isRoot);
-
- if (hasMenuFocus)
- {
- // update the Paste command
- FW_Boolean hasClipboard = GetFrame(ev)->HasSupportedKindOnClipboard(ev);
- menuBar->EnableCommand (ev, kODCommandPaste, hasClipboard);
- }
- return FW_kNotHandled; // let parent views adjust their menus
- }
-
- //----------------------------------------------------------------------------------------
- // CScrollEdit::DoMenu
- //----------------------------------------------------------------------------------------
-
- FW_Handled CScrollEdit::DoMenu (Environment* ev, const FW_CMenuEvent& event)
- {
- ODCommandID id = event.GetCommandID(ev);
- FW_Handled commandHandled = FW_kHandled;
-
- switch (id)
- {
- case kODCommandCut:
- case kODCommandCopy:
- case kODCommandPaste:
- case kODCommandClear:
- // Ask the frame to create an EditView command:
- // if the command is created, execute it
- // if the frame didn't implement NewClipboardCommand(), revert to default behavior
- CEditViewCommand* cmd = (CEditViewCommand*)GetFrame(ev)->NewClipboardCommand(ev, id);
- if (cmd)
- {
- cmd->SetEditView(this);
- if (cmd->GetSelection(ev) == NULL)
- {
- // The presentation doesn't have any selection, we create one on the fly
- cmd->SetSelection(FW_NEW(CEditViewSelection, (ev, this)));
- }
- cmd->Execute(ev);
- }
- else
- {
- DoTECommand(ev, id, true); // Will use normal scrap
- }
- UpdateScrollParameters(ev);
- break;
-
- default:
- commandHandled = FW_CEditView::DoMenu (ev, event); // call base class
-
- if (id == kODCommandSelectAll)
- UpdateScrollParameters(ev);
- }
- return commandHandled;
- }
-
- //----------------------------------------------------------------------------------------
- // CScrollEdit::HandleNotification
- //----------------------------------------------------------------------------------------
-
- void CScrollEdit::HandleNotification(Environment* ev, const FW_CNotification& notification)
- {
- if (notification.GetMessage() == FW_kScrollMsg)
- {
- const FW_CScrollNotification& scrollNfy = (FW_CScrollNotification&) notification;
-
- FW_XYSelector direction = scrollNfy.GetDirection(ev);
- int amount = FW_FixedToInt(-scrollNfy.GetDelta(ev));
-
- if (amount != 0)
- {
- TEHandle teHdl = (TEHandle)GetPlatformEditHandle(ev);
-
- // We must create a graphic context and adjust the Mac text-edit
- // before making any native TE calls
- FW_CViewContext gc (ev, this, GetFrame(ev)->GetActiveFacet(ev));
- MacAdjustRects (ev, gc);
-
- if (direction == FW_kVertical)
- TEScroll(0, amount * (*teHdl)->lineHeight, teHdl);
- else
- TEScroll(amount, 0, teHdl);
- }
- }
- }
-
- //----------------------------------------------------------------------------------------
- // CScrollEdit::DoVirtualKey
- //----------------------------------------------------------------------------------------
-
- FW_Handled CScrollEdit::DoVirtualKey (Environment* ev, const FW_CVirtualKeyEvent & event)
- {
- // Let base class handle the key first
- FW_Handled keyHandled = FW_CEditView::DoVirtualKey(ev, event);
-
- short keyCode = event.GetKeyCode(ev);
-
- // Handle PageUp and PageDown keys
- if (keyHandled == false && (keyCode == FW_kVKPageUp || keyCode == FW_kVKPageDown))
- {
- TEHandle teHdl = (TEHandle)GetPlatformEditHandle(ev);
- short amount = ((**teHdl).viewRect.bottom - (**teHdl).viewRect.top);
- if (keyCode == FW_kVKPageDown)
- amount = - amount;
-
- FW_CViewContext gc (ev, this, GetFrame(ev)->GetActiveFacet(ev));
- MacAdjustRects (ev, gc);
-
- TEScroll(0, amount, teHdl);
-
- keyHandled = FW_kHandled;
- UpdateScrollParameters(ev);
- }
-
- return keyHandled;
- }
-
- //----------------------------------------------------------------------------------------
- // CScrollEdit::DoCharKey
- //----------------------------------------------------------------------------------------
-
- FW_Handled CScrollEdit::DoCharKey (Environment* ev, const FW_CCharKeyEvent& event)
- {
- // Let base class handle the character first
- FW_Handled handled = FW_CEditView::DoCharKey(ev, event);
-
- // Update scrollbars
- if (handled)
- UpdateScrollParameters(ev);
-
- return handled;
- }
-
- //----------------------------------------------------------------------------------------
- // CScrollEdit::DoMouseDown
- //----------------------------------------------------------------------------------------
-
- FW_Handled CScrollEdit::DoMouseDown (Environment* ev, const FW_CMouseEvent& event)
- {
- FW_Handled handled = FW_CEditView::DoMouseDown(ev, event);
-
- // Adjust the scrollbars here after auto-scrolling may have occured
- UpdateScrollParameters(ev);
-
- return handled;
- }
-
- //----------------------------------------------------------------------------------------
- // CScrollEdit::SetText
- //----------------------------------------------------------------------------------------
-
- void CScrollEdit::SetText (Environment * ev, const FW_CString& str)
- {
- FW_CEditView::SetText(ev, str);
- UpdateScrollParameters(ev);
- }
-
- //========================================================================================
- // Archiving API with ODFRC resources
- //========================================================================================
- #if FW_ODFRC_VIEWS
-
- //----------------------------------------------------------------------------------------
- // CScrollEdit::Create
- //----------------------------------------------------------------------------------------
-
- void* CScrollEdit::Create(FW_CReadableStream& stream, FW_ClassTypeConstant type)
- {
- FW_UNUSED(stream);
- FW_UNUSED(type);
- FW_SOMEnvironment ev;
- return FW_NEW(CScrollEdit, (ev));
- }
-
- //----------------------------------------------------------------------------------------
- // CScrollEdit::Destroy
- //----------------------------------------------------------------------------------------
-
- void CScrollEdit::Destroy(void* object, FW_ClassTypeConstant type)
- {
- FW_UNUSED(type);
- CScrollEdit* self = (CScrollEdit*) object;
- delete self;
- }
-
- //----------------------------------------------------------------------------------------
- // CScrollEdit::Flatten
- //----------------------------------------------------------------------------------------
-
- void CScrollEdit::Flatten(Environment* ev, FW_CWritableStream& stream) const
- {
- FW_CEditView::Flatten(ev, stream);
-
- ODID horizScrollBarID = (fScrollbars[FW_kHorizontal] == NULL) ? kODNULLID :
- fScrollbars[FW_kHorizontal]->GetViewID(ev);
- ODID vertScrollBarID = (fScrollbars[FW_kVertical] == NULL) ? kODNULLID :
- fScrollbars[FW_kVertical]->GetViewID(ev);
-
- stream << horizScrollBarID << vertScrollBarID << fWidth;
- }
-
- //----------------------------------------------------------------------------------------
- // CScrollEdit::InitializeFromStream
- //----------------------------------------------------------------------------------------
-
- void CScrollEdit::InitializeFromStream(Environment* ev, FW_CReadableStream& stream)
- {
- FW_CEditView::InitializeFromStream(ev, stream);
-
- ODID horizScrollBarID;
- ODID vertScrollBarID;
- stream >> horizScrollBarID >> vertScrollBarID >> fWidth;
-
- FW_CSuperView* parentView = GetSuperView(ev);
- FW_ASSERT(parentView);
-
- FW_CView* hScrollBarView = NULL;
- if (horizScrollBarID != kODNULLID)
- hScrollBarView = parentView->FindViewByID(ev, horizScrollBarID);
-
- FW_CView* vScrollBarView = NULL;
- if (vertScrollBarID != kODNULLID)
- vScrollBarView = parentView->FindViewByID(ev, vertScrollBarID);
-
- fScrollbars[FW_kHorizontal] = FW_DYNAMIC_CAST(FW_CScrollBar, hScrollBarView);
- fScrollbars[FW_kVertical] = FW_DYNAMIC_CAST(FW_CScrollBar, vScrollBarView);
-
- Initialize(ev);
- }
-
- #endif // FW_ODFRC_VIEWS
-
- //========================================================================================
- // API for reading PPob view resources
- //========================================================================================
- #if FW_PPOB_VIEWS
-
- // CPPobScrollEdit is an AutoDestruct class because it derives from one
- FW_DEFINE_AUTO(CPPobScrollEdit)
-
- //----------------------------------------------------------------------------------------
- // CPPobScrollEdit::CPPobScrollEdit
- //----------------------------------------------------------------------------------------
-
- CPPobScrollEdit::CPPobScrollEdit(Environment*ev, FW_CReadableStream& stream, long type) :
- FW_CPPobTextEdit(ev, stream)
- {
- }
-
- //----------------------------------------------------------------------------------------
- // CPPobScrollEdit::Create
- //----------------------------------------------------------------------------------------
-
- void* CPPobScrollEdit::Create(Environment*ev, FW_CReadableStream& stream, long type)
- {
- return FW_NEW(CPPobScrollEdit, (ev, stream, type));
- }
-
- //----------------------------------------------------------------------------------------
- // CPPobScrollEdit::CreateODFView
- //----------------------------------------------------------------------------------------
-
- void CPPobScrollEdit::CreateODFView(Environment* ev)
- {
- // We got here because we found a 'ScEd' in the stream, but we also know that this view
- // is inside a scroller, so the scroll bars have already been created.
- FW_ASSERT(FW_CPPobReader::gScroller);
- FW_CScrollBar* horzSB = FW_CPPobReader::gScroller->fODFScroller->GetScrollBar(ev, FW_kHorizontal);
- FW_CScrollBar* vertSB = FW_CPPobReader::gScroller->fODFScroller->GetScrollBar(ev, FW_kVertical);
-
- // note: font & attributes should be kept in FW_CPPobTextEdit object instead
- // of being computed here
- FW_TextBoxOptions options;
- FW_CFont font;
- FW_CColor color;
- FW_CPPobReader::GetTextTraits(fTextTraitsID, font, options, color);
-
- // Make right and bottom edges overlap the scroll-bars
- if (vertSB)
- fBounds.right += FW_kFixedPos1;
- if (horzSB)
- fBounds.bottom += FW_kFixedPos1;
-
- // Create CScrollEdit instance
- CScrollEdit* view = FW_NEW(CScrollEdit, (ev, fSuperView, fViewID, fBounds, horzSB,
- vertSB, fText, font));
-
- view->SetBindings(ev, fBindings);
-
- // Now, since we are not using a real ODF scroller for our ScrollEdit view we must
- // delete the one that was created earlier
- delete FW_CPPobReader::gScroller->fODFScroller;
- delete FW_CPPobReader::gScroller;
- FW_CPPobReader::gScroller = 0;
-
- delete this; // we don't need you anymore...
- }
-
- #endif // FW_PPOB_VIEWS
-
- //========================================================================================
- // API for reading MacApp view resources
- //========================================================================================
- #if FW_MACAPP_VIEWS
-
- //----------------------------------------------------------------------------------------
- // CMAScrollEdit::CMAScrollEdit
- //----------------------------------------------------------------------------------------
-
- CMAScrollEdit::CMAScrollEdit(ResType type) :
- FW_CMATEView(type)
- {
- // A text-edit cannot be the content view
- fIsContentView = false;
- }
-
- //----------------------------------------------------------------------------------------
- // CMAScrollEdit::Create
- //----------------------------------------------------------------------------------------
-
- FW_CMAObject* CMAScrollEdit::Create(ResType type)
- {
- return new CMAScrollEdit(type);
- }
-
-
- //----------------------------------------------------------------------------------------
- // CMAScrollEdit::CreateODFView
- //----------------------------------------------------------------------------------------
-
- FW_CView* CMAScrollEdit::CreateODFView(Environment* ev, FW_CSuperView* superview, FW_MReceiver* receiver)
- {
- // We got here because we found a TTEView in the stream, but we know also that it must
- // have a scroller attached
- FW_ASSERT(FW_CMacAppReader::gScroller);
- FW_CMAScrollBarScroller* scroller = FW_CMacAppReader::gScroller;
-
- // We need to create the vertical scrollbar first
- FW_CRect bounds = scroller->fBounds;
- bounds.top += FW_IntToFixed(scroller->fSBarOffsets.top);
- bounds.bottom += FW_IntToFixed(scroller->fSBarOffsets.bottom);
- bounds.left = bounds.right;
- bounds.right += FW_IntToFixed(16);
- FW_CScrollBar* vertSB = FW_NEW(FW_CScrollBar, (ev, superview, scroller->fVertSbID, bounds));
-
- // Make right and bottom edges overlap the scroll-bars
- if (vertSB)
- fBounds.right += FW_kFixedPos1;
- // if (horzSB)
- // fBounds.bottom += FW_kFixedPos1;
-
- // Create CScrollEdit instance
- CScrollEdit* view = FW_NEW(CScrollEdit, (ev, superview, fIdentifier, fBounds, 0,
- vertSB, FW_CString("")));
-
- // view->SetBindings(ev, fBindings);
-
- // Reset the scroller globale to 0 to show that we used it
- FW_CMacAppReader::gScroller = 0;
-
- return view;
- }
-
- #endif // FW_MACAPP_VIEWS
-
-