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.
- */
-
- #pragma once
-
- #include "divview.h"
-
- //-----------------------------------
- class CExpansionData
- // persistent data about both states of a CExpandable.
- //-----------------------------------
- {
- public:
- virtual void ReadStatus(LStream* inStream) = 0;
- virtual void WriteStatus(LStream* inStream) = 0;
- }; // class CExpansionData
-
- enum { closed_state = false, open_state = true };
- typedef Boolean ExpandStateT;
-
- //======================================
- class CExpandable
- //======================================
- {
- public:
- virtual void ReadStatus(LStream* inStream);
- virtual void WriteStatus(LStream* inStream);
- ExpandStateT GetExpandState() const { return mExpandState; }
- void NoteExpandState(ExpandStateT inExpanded) { mExpandState = inExpanded; }
- protected:
- virtual void SetExpandState(ExpandStateT inExpanded) = 0;
- private:
- virtual void StoreDimensions(CExpansionData& outState) = 0;
- virtual void RecallDimensions(const CExpansionData& inState) = 0;
- protected:
- CExpandable(CExpansionData* closedState, CExpansionData* openState);
- // clients that mix this class in should have two members that are
- // CExpansionData, and pass the references in here.
- protected:
- void StoreCurrentDimensions();
- void RecallCurrentDimensions();
- void RecallOtherDimensions();
- protected:
- ExpandStateT mExpandState;
- CExpansionData* mStates[2];
- }; // class CExpandable
-
- //======================================
- class CExpandoListener : public LListener, public CExpandable
- //======================================
- {
- public:
- enum { msg_TwistieMessage = 'Twst' }; // Broadcast by twistie control
- CExpandoListener(
- CExpansionData* closedState, CExpansionData* openState)
- : CExpandable(closedState, openState) {}
- virtual void ListenToMessage(MessageT inMessage, void *ioParam);
- // Listen to the twistie
- }; // class CExpandoListener
-
- //======================================
- class CDividerData : public CExpansionData
- //======================================
- {
- public:
- CDividerData();
- // default is set for the open state, because the closed state is in the PPOb.
- // Overrides
- virtual void ReadStatus(LStream* inStream);
- virtual void WriteStatus(LStream* inStream);
- // Data
- SInt32 mDividerPosition;
- }; // class CDividerData
-
- //======================================
- class CExpandoDivider : public LDividedView, public CExpandable
- // This class acts like a divider between two panes, one above the other.
- // In addition to the LDividedView behavior, it also has an "expando" twistie, that
- // hides/shows the bottom pane.
- //======================================
- {
- private:
- typedef LDividedView Inherited;
- public:
- enum { class_ID = 'Expo' };
- CExpandoDivider(LStream* inStream);
- virtual ~CExpandoDivider();
-
- // PowerPlant overrides
- protected:
- virtual void FinishCreateSelf();
- virtual void ClickSelf(const SMouseDownEvent& inMouseDown);
- virtual void AdjustCursorSelf(Point inPortPt, const EventRecord& inMacEvent);
- public:
- virtual void ResizeFrameBy(
- Int16 inWidthDelta,
- Int16 inHeightDelta,
- Boolean inRefresh);
- // CExpandable overrides
- public:
- virtual void SetExpandState(ExpandStateT inExpanded);
- virtual void StoreDimensions(CExpansionData& outState);
- virtual void RecallDimensions(const CExpansionData& inState);
- // Special interfaces
- public:
- Int16 GetCorrectDistanceFromBottom() const { return mDistanceFromWindowBottom; }
- Int16 GetCorrectDividerDistanceFromBottom() const
- { return mDividerDistanceFromWindowBottom; }
- // Down to business:
- protected:
- virtual void ChangeDividerPosition(Int16 delta); // also changes the twistie+caption
- virtual void ChangeTwistiePosition(Int16 delta); // only changes the twistie+caption
- void SetStickToBottom(LPane* inPane, Boolean inStick);
- void SetStickToBottom(Boolean inStick);
- // Data:
- protected:
- Int16 mDistanceFromWindowBottom;
- Int16 mDividerDistanceFromWindowBottom;
- LPane *mTwistie, *mCaption;
- CDividerData mClosedData, mOpenData;
- }; // class CExpandoDivider
-