home *** CD-ROM | disk | FTP | other *** search
- /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
- *
- * The contents of this file are subject to the Netscape Public License
- * Version 1.0 (the "NPL"); you may not use this file except in
- * compliance with the NPL. You may obtain a copy of the NPL at
- * http://www.mozilla.org/NPL/
- *
- * Software distributed under the NPL is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
- * for the specific language governing rights and limitations under the
- * NPL.
- *
- * The Initial Developer of this code under the NPL is Netscape
- * Communications Corporation. Portions created by Netscape are
- * Copyright (C) 1998 Netscape Communications Corporation. All Rights
- * Reserved.
- */
-
- //
- // Mike Pinkerton, Netscape Communications
- //
- // Contains:
- //
- // Ñ SelectorImage
- // an abstract class for drawing the workspace icon
- //
- // Ñ TitleImage
- // implements above
- //
- // Ñ CNavCenterSelectorPane
- // handles drawing/clicking/tooltips/etc of workspaces and all powerplant interactions
- //
-
- #pragma once
-
- #include <LPane.h>
- #include <LBroadcaster.h>
-
- #include "LString.h"
- #include "htrdf.h"
- #include "CDynamicTooltips.h"
-
-
- #pragma mark -- class SelectorImage and SelectorData --
-
-
- //
- // SelectorImage
- //
- // An abstract base class that knows how to draw itself in the appropriate mode (text/icon/text&icon)
- // as well as selected or not-selected.
- //
- class SelectorImage
- {
- public:
- virtual ~SelectorImage ( ) { } ;
- virtual void DrawInCurrentView( const Rect& bounds, unsigned long mode ) const = 0;
- };
-
-
- //
- // SelectorData
- //
- // an element within the Nav Center workspace list.
- //
- struct SelectorData
- {
- SelectorData ( HT_View inView ) ;
- ~SelectorData();
-
- SelectorImage* workspaceImage; // ptr to object that knows how to draw workspace icon
- };
-
-
- #pragma mark -- class CNavCenterSelectorPane --
-
- //
- // CNavCenterSelectorPane
- //
- // Draws the workspace icons in a vertical table. Handles setting the currently selected
- // workspace when an icon is clicked on and telling the RDFCoordinator to change the open/close
- // state of the shelf if need be.
- //
-
- class CNavCenterSelectorPane
- : public LView, public LDragAndDrop, public LBroadcaster, public LCommander,
- public CDynamicTooltipMixin
- {
- public:
- friend class CNavCenterSelectorContextMenuAttachment;
-
- // modes for drawing icons
- enum {
- kSelected = 1, kIcon = 2, kText = 4
- };
-
- // powerplant stuff (panes and messages)
- enum {
- class_ID = 'NvSl',
- msg_ShelfStateShouldChange = 'shlf', // broadcast when shelf should open/close
- msg_ActiveSelectorChanged = 'selc' // broadcast when selector changes
- };
-
- CNavCenterSelectorPane( LStream* );
- virtual ~CNavCenterSelectorPane();
-
- // Tell view to select the next workspace, wrapping around if we hit the ends
- virtual void CycleCurrentWorkspace ( ) ;
-
- // Tell view if it is in a browser window
- void SetEmbedded ( bool isEmbedded ) { mIsEmbedded = isEmbedded; }
-
- // Get/Set info about the HT_Pane that contains all the workspaces to display
- void SetHTPane ( HT_Pane inPane ) { mHTPane = inPane; }
- HT_Pane GetHTPane ( ) const { return mHTPane; }
-
- // access and change the current workspace.
- void SetActiveWorkspace ( HT_View inNewWorkspace ) ;
- HT_View GetActiveWorkspace ( ) const { return mCachedWorkspace; }
-
- static const RGBColor mBGColor;
-
- protected:
-
- // PowerPlant overrides
- virtual void DrawSelf();
- virtual void ClickSelf( const SMouseDownEvent& );
- virtual void AdjustCursorSelf( Point, const EventRecord& );
- virtual void FindCommandStatus ( CommandT inCommand, Boolean &outEnabled,
- Boolean &outUsesMark, Char16 &outMark, Str255 outName) ;
-
- // redraw when things change and broadcast that they have.
- virtual void NoticeActiveWorkspaceChanged ( HT_View iter ) ;
-
- // click handling
- size_t FindIndexForPoint ( const Point & inMouseLoc ) const;
- HT_View FindSelectorForPoint ( const Point & inMouseLoc ) const;
-
- // stuff for dynamic tooltips
- virtual void FindTooltipForMouseLocation ( const EventRecord& inMacEvent, StringPtr outTip ) ;
- virtual void MouseWithin ( Point inPortPt, const EventRecord& ) ;
- virtual void MouseLeave ( ) ;
-
- // stuff for drag and drop
- virtual Boolean ItemIsAcceptable ( DragReference inDragRef, ItemReference inItemRef ) ;
- virtual void InsideDropArea ( DragReference inDragRef ) ;
- virtual void EnterDropArea ( DragReference inDragRef, Boolean inDragHasLeftSender ) ;
- virtual void LeaveDropArea ( DragReference inDragRef ) ;
-
- bool mIsEmbedded; // is this embedded in chrome or standalone window?
- HT_Pane mHTPane;
- HT_View mCachedWorkspace; // which view is currently active?
- short mTooltipIndex; // which item is mouse hovering over
- bool mMouseIsInsidePane; // is the mouse in the pane?
- Uint32 mDragAndDropTickCount; // used only during d&d as a timer
-
- unsigned long mImageMode;
- size_t mCellHeight;
-
- }; // class CNavCenterSelectorPane
-
-
- #pragma mark -- class TitleImage --
-
- //
- // TitleImage
- //
- // A simple little hack to display the title of the workspace
- //
-
- class TitleImage : public SelectorImage
- {
- public:
- TitleImage ( const LStr255 & inTitle, ResIDT inIconID ) ;
-
- virtual void DrawInCurrentView( const Rect& bounds, unsigned long mode ) const ;
-
- const LStr255 & Title ( ) const { return mTitle; } ;
- ResIDT IconID ( ) const { return mIconID; } ;
- Uint16 TextWidth ( ) const { return mTextWidth; } ;
-
- private:
-
- #if DRAW_SELECTED_AS_TAB
- virtual void DrawOneTab(RgnHandle inBounds) const;
- virtual void DrawTopBevel(RgnHandle inTab) const;
- virtual void DrawBottomBevel(RgnHandle inTab, Boolean inCurrentTab) const;
- virtual void DrawOneTabBackground(
- RgnHandle inRegion,
- Boolean inCurrentTab) const;
- virtual void DrawOneTabFrame(RgnHandle inRegion, Boolean inCurrentTab) const;
- virtual void DrawCurrentTabSideClip(RgnHandle inRegion) const;
- #endif
-
- LStr255 mTitle;
- ResIDT mIconID;
- Uint16 mTextWidth;
-
- }; // classTitleImage
-