pjs/lib/mac/UserInterface/CSimpleDividedView.h

122 строки
3.8 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 1998
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
#pragma once
enum
{
kHorizontalResizeCursor = 1120,
kVerticalResizeCursor = 1136
};
/*****************************************************************************
class CSimpleDividedView
Simplest divided view.
### Standard usage:
In Constructor, create the CSimpleDividedView from a template,
set the IDs and min size of subviews
It should be in the same level of hierarchy as the views it manages.
It does not do any drawing
It broadcasts msg_SubviewChangedSize after a successful drag. Hook it up
to your window manually (outside the RidL resource), because it is not a
LControl subclass. Do this only if you need to do something in response to
resize. For example, recalc the GrayBevelView.
timm has a more sophisticated class, divview.cp, which takes car of resizing
*****************************************************************************/
#include <LPane.h>
#include <LBroadcaster.h>
const MessageT msg_SubviewChangedSize = 32400; // ioParam is CSimpleDividedView
class CSimpleDividedView : public LPane,
public LBroadcaster
{
public:
// constructors
enum { class_ID = 'SDIV' };
CSimpleDividedView(LStream *inStream);
virtual ~CSimpleDividedView();
virtual void FinishCreateSelf();
// access
void SetMinSize(Int16 topLeft, Int16 botRight)
{
fTopLeftMinSize = topLeft;
fBottomRightMinSize = botRight;
RepositionView();
}
// event handling
virtual void AdaptToSuperFrameSize(Int32 inSurrWidthDelta,
Int32 inSurrHeightDelta,
Boolean inRefresh);
virtual void ClickSelf(const SMouseDownEvent &inMouseDown);
virtual void AdjustCursorSelf(Point inPortPt, const EventRecord& inMacEvent );
#ifdef DEBUG
virtual void DrawSelf();
#endif
private:
void ReadjustConstraints();
void RepositionView();
Boolean GetViewRects(Rect& r1, Rect& r2);
PaneIDT fTopLeftViewID;
PaneIDT fBottomRightViewID;
Int16 fTopLeftMinSize;
Int16 fBottomRightMinSize;
Int16 fIsVertical; // Are views stacked vertically?. -1 means uninitialized, true and false
};