gecko-dev/cmd/macfe/central/mfinder.h

296 строки
10 KiB
C++
Исходник Ответственный История

/* -*- 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.
*/
// mfinder.h
#pragma once
#include "PascalString.h"
#include "prtypes.h"
#define WIGLY_LEFT_OFFSET 0
#define ICON_WIDTH 16
#define ICON_HEIGHT 16
#define LEVEL_OFFSET 10
#define NO_COLUMN -1
#define HEADER_ROW -2
#define NO_CELL 0
#define LAST_CELL 0xFFFF
#define HIER_COLUMN 0
#define WIGLY_CLOSED_ICON 3060
#define WIGLY_OPEN_ICON 3061
#define WIGLY_INBETWEEN_ICON 3062
#define FOLDER_ICON 3064
#define SETFLAG( x, f ) ((x)|=(f))
#define CLEARFLAG( x, f ) ((x)&=~(f))
#define NUM_COLUMNS 10
#define DRAG_NONE 0
#define DRAG_INSIDE 1
#define DRAG_AFTER 2
#define DRAG_BEFORE 3
// Gets around horrible bug in Apple's ::TruncText call
// that manifests itself in certain cases if you try to
// truncate in the middle
#define CUSTOM_MIDDLE_TRUNCATION 666
void MiddleTruncationThatWorks(char *s, Int16 &ioLength, Int16 availableSpace);
void MiddleTruncationThatWorks(StringPtr s, SInt16 availableSpace);
class LFinderView;
typedef Point Cell;
#include <LView.h>
#include <LDragAndDrop.h>
#include <LCommander.h>
class LFinderHeader: public LView
{
public:
enum { class_ID = 'FNHD' };
LFinderHeader();
LFinderHeader( LStream* inStream );
virtual void SetFinderView( LFinderView* finder ) { fFinder = finder; }
virtual void DrawSelf();
virtual void ClickSelf( const SMouseDownEvent& where );
virtual void AdjustCursorSelf( Point inPortPt, const EventRecord& inMacEvent );
virtual void DrawColumn( UInt16 column );
virtual void TrackReorderColumns( const SMouseDownEvent& where, UInt16 column );
protected:
LFinderView* fFinder;
ResIDT fTextTraits;
};
class LFinderView: public LView,
public LDragAndDrop,
public LCommander
{
public:
friend class LFinderHeader;
enum { class_ID = 'FDTA' };
LFinderView( LStream* inStream );
virtual void FinishCreateSelf();
virtual void CaculateFontRect();
virtual Boolean IsCellSelected( Int32 /* cell */ ) { return FALSE; }
virtual UInt32 CellIndentLevel( Int32 /* cell */ ) { return 0; }
virtual ResIDT CellIcon( Int32 /* cell */ ) { return 0; }
virtual Boolean IsCellHeader( Int32 /* cell */ ) { return FALSE; }
virtual Boolean IsHeaderFolded( Int32 /* cell */ ) { return FALSE; }
virtual void CellText( Int32 /* cell */, CStr255& text )
{ text = CStr255::sEmptyString; }
virtual Style CellTextStyle( Int32 /* cell */ ) { return normal; }
virtual Style ColumnTextStyle( UInt16 /* column */ ) { return normal; }
virtual TruncCode ColumnTruncationStyle( UInt16 /* column */ ) { return smTruncEnd; }
// <20><><EFBFBD>override
virtual void* GetCellData( UInt32 /* cell */ ) { return NULL; }
virtual Boolean SyncDisplay( UInt32 /* visCells */ ) { return FALSE; } // Resize the view to the number of bookmarks
virtual void SelectItem( const EventRecord& /* rec */, UInt32 /* cell */, Boolean /* refresh */ ) { }
virtual void FoldHeader( UInt32 /* cell */, Boolean /* fold */, Boolean /* refresh */, Boolean /* foldAll */ ) { }
virtual void DoDoubleClick( UInt32 cell, const EventRecord &event );
virtual void ClearSelection() { }
virtual UInt32 GetVisibleCount() { return 0; }
virtual UInt32 FirstSelectedCell() { return 0; }
virtual void GetCellRect( UInt32 cell, Rect& rect );
virtual void GetColumnRect( UInt32 cell, UInt16 columnID, Rect& r );
virtual void RevealCell( UInt32 cell );
virtual UInt16 GetNumberOfColumns() { return fNumberColumns; }
virtual void GetColumnTitle( UInt16 column, CStr255& title );
virtual UInt16 GetColumnHeight() { return fCellHeight; }
virtual void RefreshCells( Int32 first, Int32 last,
Boolean rightAway ); // Using refresh, or right away?
virtual void SwapColumns( UInt16 columnA, UInt16 columnB );
virtual void SortByColumnNumber( UInt16 column, Boolean switchOrder );
virtual Int16 InResizableColumnBar( const Point where );
virtual Int16 InColumn( const Point where );
virtual void TrackResizeColumn( const SMouseDownEvent& where, UInt32 cell, Int16 column );
// <20><> PowerPlant overrides
virtual void ActivateSelf();
virtual void DeactivateSelf();
virtual void DrawSelf();
virtual Boolean FocusDraw(LPane* inSubPane = nil);
virtual Boolean HandleKeyPress( const EventRecord& inEvent );
virtual Boolean ObeyCommand( CommandT inCommand, void* ioParam );
virtual void ClickSelf( const SMouseDownEvent& where );
virtual void ResizeFrameBy( Int16 inWidthDelta, Int16 inHeightDelta, Boolean inRefresh );
virtual void PutOnDuty(LCommander* inNewTarget);
virtual void TakeOffDuty();
// <20><><EFBFBD>drag & drop
virtual void AddFlavors( DragReference inDragRef );
virtual void MakeDragRegion( DragReference inDragRef, RgnHandle dragRegion );
virtual void InsideDropArea( DragReference inDragRef );
virtual void LeaveDropArea( DragReference inDragRef );
virtual void DoDragSendData( FlavorType /* flavor */, ItemReference /* itemRef */, DragReference /* dragRef */ ) { }
virtual Boolean ItemIsAcceptable( DragReference /* inDragRef */, ItemReference /* inItemRef */ ) { return FALSE; }
virtual void ReceiveDragItem( DragReference /* inDragRef */, DragAttributes /* inDragAttrs */,
ItemReference /* inItemRef */, Rect& /* inItemBounds */ ) { }
virtual void HiliteDropArea( DragReference /* inDragRef */ ) { }
void SetForeColor( const RGBColor& fore );
void SetBackColor( const RGBColor& back );
virtual void DrawIcon( Handle iconSuite,
Boolean selected,
const Rect& where );
virtual void DrawText( const Style& style,
const CStr255& text,
const Rect& where,
const TruncCode& trunc );
virtual void SavePlace( LStream* inStream );
virtual void RestorePlace( LStream* inStream );
virtual void RefreshHeader();
virtual void DragScroll(DragReference /* theDragRef */) { }
protected:
struct DropLocation
{
UInt32 cell;
UInt32 where;
};
// <20><> cell drawing
// override
virtual UInt32 FetchCellAt( SPoint32& imagePt ); // Cell at this coordinate
virtual void KeyUp( const EventRecord& event );
virtual void KeyDown( const EventRecord& event );
virtual void KeyEnter( const EventRecord& event );
virtual void KeyHome( const EventRecord& event );
virtual void KeyEnd( const EventRecord& event );
virtual void KeyPageUp( const EventRecord& event );
virtual void KeyPageDown( const EventRecord& event );
virtual void RefreshSelectedCells();
// <20><> access
virtual void GetVisibleCells( UInt32& top, UInt32& bottom ); // Get visible cells
virtual void DrawCellAt( UInt32 cell ); // Draw the cell
virtual void DrawCellColumn( UInt32 cell, UInt16 column );
virtual Int16 GetClickKind( const SMouseDownEvent& where, UInt32 cell,
Boolean& inBar ); // Where did we click?
virtual void DoResizeColumn( Int16 column, Int16 delta, Boolean inRefresh );
virtual Boolean DispatchClick( const SMouseDownEvent& where, UInt32 cell, Int16 column );
virtual Boolean TrackHeader( const SMouseDownEvent& where, UInt16 column );
void LocalToGlobalRect( Rect& r );
Boolean SectCellRect( UInt32 cell, Rect r ); // Does cell intersect this local rect?
virtual void HighlightDropLocation( Boolean show ); // TRUE to show highlight, FALSE to hide
virtual void MakeDragTask( const SMouseDownEvent & /* where */ ) { }
virtual Boolean ResizeTo( UInt32 newHeight, UInt32 newWidth );
virtual void DrawHierarchy( UInt32 cell );
virtual Boolean CanDrawHierarchy( UInt32 cell );
virtual void TrackWigly( const SMouseDownEvent& where, UInt32 cell );
virtual void TrackCell( const SMouseDownEvent& where, UInt32 cell );
virtual void TrackSpace( const SMouseDownEvent& where, UInt32 cell );
virtual Boolean TrackMark( UInt16 columnID, const SMouseDownEvent& where, UInt32 cell,
UInt16 drawIconID, UInt16 notDrawIconID );
virtual void GetWiglyRect( UInt32 cell, Rect& rect );
virtual void GetIconRect( UInt32 cell, Rect& rect );
virtual void GetTextRect( UInt32 cell, Rect& rect );
virtual void HighlightCell( UInt32 cell );
virtual Boolean ColumnText( UInt32 cell, UInt16 column, CStr255& text );
virtual void AdjustCursorSelf( Point inPortPt, const EventRecord& inMacEvent );
virtual void RemoveColumn( UInt16 column );
virtual void InsertColumn( UInt16 before, UInt16 columnID, UInt16 width );
virtual void DrawText( const Style& style,
const CStr255& text,
const Rect& where,
const TruncCode& trunc,
ResIDT inTextTraits,
Int16 baseline );
Boolean fClipImage;
Boolean fAllowsRectSelection;
Boolean fAllowsKeyNavigation;
Boolean fHighlightRow;
UInt16 fCellHeight;
UInt16 fBaseline;
ResIDT fTextTraits; // Font
RGBColor fForeColor;
RGBColor fBackColor;
Int16 fNumberColumns;
Int16 fColumnOffsets[ NUM_COLUMNS ];
Int16 fColumnIDs[ NUM_COLUMNS ];
LFinderHeader* fHeader;
DropLocation fDragTarget;
SBooleanRect fDragLeaveDirection;
};
class LDragFinderTask: public LDragTask
{
public:
LDragFinderTask( const EventRecord& inEventRecord, LFinderView* view );
virtual ~LDragFinderTask();
virtual void AddFlavors( DragReference inDragRef );
virtual void MakeDragRegion( DragReference inDragRef, RgnHandle inDragRegion );
protected:
static pascal OSErr ScrollingTracker( DragTrackingMessage message,
WindowPtr theWindow,
void * handlerRefCon,
DragReference theDragRef );
DragTrackingHandlerUPP fTrackerProc;
LFinderView* fView;
};