123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412 |
- /*
- Open Tracker License
- Terms and Conditions
- Copyright (c) 1991-2000, Be Incorporated. All rights reserved.
- Permission is hereby granted, free of charge, to any person obtaining a copy of
- this software and associated documentation files (the "Software"), to deal in
- the Software without restriction, including without limitation the rights to
- use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
- of the Software, and to permit persons to whom the Software is furnished to do
- so, subject to the following conditions:
- The above copyright notice and this permission notice applies to all licensees
- and shall be included in all copies or substantial portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF TITLE, MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- BE INCORPORATED BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF, OR IN CONNECTION
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- Except as contained in this notice, the name of Be Incorporated shall not be
- used in advertising or otherwise to promote the sale, use or other dealings in
- this Software without prior written authorization from Be Incorporated.
- Tracker(TM), Be(R), BeOS(R), and BeIA(TM) are trademarks or registered trademarks
- of Be Incorporated in the United States and other countries. Other brand product
- names are registered trademarks or trademarks of their respective holders.
- All rights reserved.
- */
- /*******************************************************************************
- /
- / File: ColumnListView.h
- /
- / Description: Experimental multi-column list view.
- /
- / Copyright 2000+, Be Incorporated, All Rights Reserved
- /
- *******************************************************************************/
- #ifndef _COLUMN_LIST_VIEW_H
- #define _COLUMN_LIST_VIEW_H
- #include <BeBuild.h>
- #include <View.h>
- #include <List.h>
- #include <Invoker.h>
- #include <ListView.h>
- class BScrollBar;
- namespace BPrivate {
- class OutlineView;
- class TitleView;
- class BRowContainer;
- class RecursiveOutlineIterator;
- } // ns BPrivate
- class BField;
- class BRow;
- class BColumn;
- class BColumnListView;
- enum LatchType {
- B_NO_LATCH = 0,
- B_OPEN_LATCH = 1,
- B_PRESSED_LATCH = 2,
- B_CLOSED_LATCH = 3
- };
- typedef enum {
- B_ALLOW_COLUMN_NONE = 0,
- B_ALLOW_COLUMN_MOVE = 1,
- B_ALLOW_COLUMN_RESIZE = 2,
- B_ALLOW_COLUMN_POPUP = 4,
- B_ALLOW_COLUMN_REMOVE = 8
- } column_flags;
- enum ColumnListViewColor {
- B_COLOR_BACKGROUND = 0,
- B_COLOR_TEXT = 1,
- B_COLOR_ROW_DIVIDER = 2,
- B_COLOR_SELECTION = 3,
- B_COLOR_SELECTION_TEXT = 4,
- B_COLOR_NON_FOCUS_SELECTION = 5,
- B_COLOR_EDIT_BACKGROUND = 6,
- B_COLOR_EDIT_TEXT = 7,
- B_COLOR_HEADER_BACKGROUND = 8,
- B_COLOR_HEADER_TEXT = 9,
- B_COLOR_SEPARATOR_LINE = 10,
- B_COLOR_SEPARATOR_BORDER = 11,
- B_COLOR_TOTAL = 12
- };
- enum ColumnListViewFont {
- B_FONT_ROW = 0,
- B_FONT_HEADER = 1,
- B_FONT_TOTAL = 2
- };
- // A single row/column intersection in the list.
- class BField {
- public:
- BField();
- virtual ~BField();
- };
- // A single line in the list. Each line contains a BField object
- // for each column in the list, associated by their "logical field"
- // index. Hierarchies are formed by adding other BRow objects as
- // a parent of a row, using the AddRow() function in BColumnListView().
- class BRow {
- public:
- BRow(float height = 16.0);
- virtual ~BRow();
- virtual bool HasLatch() const;
- int32 CountFields() const;
- BField* GetField(int32 logicalFieldIndex);
- const BField* GetField(int32 logicalFieldIndex) const;
- void SetField(BField* field,
- int32 logicalFieldIndex);
- float Height() const;
- bool IsExpanded() const;
- bool IsSelected() const;
- private:
- // Blows up into the debugger if the validation fails.
- void ValidateFields() const;
- void ValidateField(const BField* field,
- int32 logicalFieldIndex) const;
- private:
- BList fFields;
- BPrivate::
- BRowContainer* fChildList;
- bool fIsExpanded;
- float fHeight;
- BRow* fNextSelected;
- BRow* fPrevSelected;
- BRow* fParent;
- BColumnListView* fList;
- friend class BColumnListView;
- friend class BPrivate::RecursiveOutlineIterator;
- friend class BPrivate::OutlineView;
- };
- // Information about a single column in the list. A column knows
- // how to display the BField objects that occur at its location in
- // each of the list's rows. See ColumnTypes.h for particular
- // subclasses of BField and BColumn that handle common data types.
- class BColumn {
- public:
- BColumn(float width, float minWidth,
- float maxWidth,
- alignment align = B_ALIGN_LEFT);
- virtual ~BColumn();
- float Width() const;
- void SetWidth(float width);
- float MinWidth() const;
- float MaxWidth() const;
- virtual void DrawTitle(BRect rect, BView* targetView);
- virtual void DrawField(BField* field, BRect rect,
- BView* targetView);
- virtual int CompareFields(BField* field1, BField* field2);
- virtual void MouseMoved(BColumnListView* parent, BRow* row,
- BField* field, BRect fieldRect,
- BPoint point, uint32 buttons, int32 code);
- virtual void MouseDown(BColumnListView* parent, BRow* row,
- BField* field, BRect fieldRect,
- BPoint point, uint32 buttons);
- virtual void MouseUp(BColumnListView* parent, BRow* row,
- BField* field);
- virtual void GetColumnName(BString* into) const;
- virtual float GetPreferredWidth(BField* field,
- BView* parent) const;
- bool IsVisible() const;
- void SetVisible(bool);
- bool WantsEvents() const;
- void SetWantsEvents(bool);
- bool ShowHeading() const;
- void SetShowHeading(bool);
- alignment Alignment() const;
- void SetAlignment(alignment);
- int32 LogicalFieldNum() const;
- /*!
- \param field The BField derivative to validate.
- Implement this function on your BColumn derivatives to validate
- BField derivatives that your BColumn will be drawing/manipulating.
- This function will be called when BFields are added to the Column,
- use dynamic_cast<> to determine if it is of a kind that your
- BColumn know how ot handle. return false if it is not.
- \note The debugger will be called if you return false from here
- with information about what type of BField and BColumn and the
- logical field index where it occured.
- \note Do not call the inherited version of this, it just returns
- true;
- */
- virtual bool AcceptsField(const BField* field) const;
- private:
- float fWidth;
- float fMinWidth;
- float fMaxWidth;
- bool fVisible;
- int32 fFieldID;
- BColumnListView* fList;
- bool fSortAscending;
- bool fWantsEvents;
- bool fShowHeading;
- alignment fAlignment;
- friend class BPrivate::OutlineView;
- friend class BColumnListView;
- friend class BPrivate::TitleView;
- };
- // The column list view class.
- class BColumnListView : public BView, public BInvoker {
- public:
- BColumnListView(BRect rect,
- const char* name, uint32 resizingMode,
- uint32 flags, border_style = B_NO_BORDER,
- bool showHorizontalScrollbar = true);
- BColumnListView(const char* name,
- uint32 flags, border_style = B_NO_BORDER,
- bool showHorizontalScrollbar = true);
- virtual ~BColumnListView();
- // Interaction
- virtual bool InitiateDrag(BPoint, bool wasSelected);
- virtual void MessageDropped(BMessage*, BPoint point);
- virtual void ExpandOrCollapse(BRow* row, bool expand);
- virtual status_t Invoke(BMessage* message = NULL);
- virtual void ItemInvoked();
- virtual void SetInvocationMessage(BMessage* message);
- BMessage* InvocationMessage() const;
- uint32 InvocationCommand() const;
- BRow* FocusRow() const;
- void SetFocusRow(int32 index, bool select = false);
- void SetFocusRow(BRow* row, bool select = false);
- void SetMouseTrackingEnabled(bool);
- // Selection
- list_view_type SelectionMode() const;
- void Deselect(BRow* row);
- void AddToSelection(BRow* row);
- void DeselectAll();
- BRow* CurrentSelection(BRow* lastSelected = 0) const;
- virtual void SelectionChanged();
- virtual void SetSelectionMessage(BMessage* message);
- BMessage* SelectionMessage();
- uint32 SelectionCommand() const;
- void SetSelectionMode(list_view_type type);
- // list_view_type is defined in ListView.h.
- // Sorting
- void SetSortingEnabled(bool);
- bool SortingEnabled() const;
- void SetSortColumn(BColumn* column, bool add,
- bool ascending);
- void ClearSortColumns();
- // The status view is a little area in the lower left hand corner.
- void AddStatusView(BView* view);
- BView* RemoveStatusView();
- // Column Manipulation
- void AddColumn(BColumn* column,
- int32 logicalFieldIndex);
- void MoveColumn(BColumn* column, int32 index);
- void RemoveColumn(BColumn* column);
- int32 CountColumns() const;
- BColumn* ColumnAt(int32 index) const;
- BColumn* ColumnAt(BPoint point) const;
- void SetColumnVisible(BColumn* column,
- bool isVisible);
- void SetColumnVisible(int32, bool);
- bool IsColumnVisible(int32) const;
- void SetColumnFlags(column_flags flags);
- void ResizeColumnToPreferred(int32 index);
- void ResizeAllColumnsToPreferred();
- // Row manipulation
- const BRow* RowAt(int32 index, BRow *parent = 0) const;
- BRow* RowAt(int32 index, BRow *parent = 0);
- const BRow* RowAt(BPoint) const;
- BRow* RowAt(BPoint);
- bool GetRowRect(const BRow* row, BRect* _rect) const;
- bool FindParent(BRow* row, BRow** _parent,
- bool *_isVisible) const;
- int32 IndexOf(BRow* row);
- int32 CountRows(BRow* parent = 0) const;
- void AddRow(BRow* row, BRow* parent = NULL);
- void AddRow(BRow* row, int32 index,
- BRow* parent = NULL);
- void ScrollTo(const BRow* Row);
- void ScrollTo(BPoint point);
- // Does not delete row or children at this time.
- // todo: Make delete row and children
- void RemoveRow(BRow* row);
- void UpdateRow(BRow* row);
- bool SwapRows(int32 index1, int32 index2, BRow*
- parentRow1 = NULL, BRow* parentRow2 = NULL);
- void Clear();
- // Appearance (DEPRECATED)
- void GetFont(BFont* font) const
- { BView::GetFont(font); }
- virtual void SetFont(const BFont* font,
- uint32 mask = B_FONT_ALL);
- virtual void SetHighColor(rgb_color);
- void SetSelectionColor(rgb_color);
- void SetBackgroundColor(rgb_color);
- void SetEditColor(rgb_color);
- const rgb_color SelectionColor() const;
- const rgb_color BackgroundColor() const;
- const rgb_color EditColor() const;
- // Appearance (NEW STYLE)
- void SetColor(ColumnListViewColor colorIndex,
- rgb_color color);
- void SetFont(ColumnListViewFont fontIndex,
- const BFont* font,
- uint32 mask = B_FONT_ALL);
- rgb_color Color(ColumnListViewColor colorIndex) const;
- void GetFont(ColumnListViewFont fontIndex,
- BFont* font) const;
- BPoint SuggestTextPosition(const BRow* row,
- const BColumn* column = NULL) const;
- void SetLatchWidth(float width);
- float LatchWidth() const;
- virtual void DrawLatch(BView* view, BRect frame,
- LatchType type, BRow* row);
- virtual void MakeFocus(bool isfocus = true);
- void SaveState(BMessage* archive);
- void LoadState(BMessage* archive);
- BView* ScrollView() const
- { return (BView*)fOutlineView; }
- void SetEditMode(bool state);
- void Refresh();
- virtual BSize MinSize();
- virtual BSize PreferredSize();
- virtual BSize MaxSize();
- protected:
- virtual void MessageReceived(BMessage* message);
- virtual void KeyDown(const char* bytes, int32 numBytes);
- virtual void AttachedToWindow();
- virtual void WindowActivated(bool active);
- virtual void Draw(BRect updateRect);
- virtual void LayoutInvalidated(bool descendants = false);
- virtual void DoLayout();
- private:
- void _Init();
- void _GetChildViewRects(const BRect& bounds,
- BRect& titleRect, BRect& outlineRect,
- BRect& vScrollBarRect,
- BRect& hScrollBarRect);
- rgb_color fColorList[B_COLOR_TOTAL];
- BPrivate::TitleView* fTitleView;
- BPrivate::OutlineView* fOutlineView;
- BList fColumns;
- BScrollBar* fHorizontalScrollBar;
- BScrollBar* fVerticalScrollBar;
- BList fSortColumns;
- BView* fStatusView;
- BMessage* fSelectionMessage;
- bool fSortingEnabled;
- float fLatchWidth;
- border_style fBorderStyle;
- bool fShowingHorizontalScrollBar;
- };
- #endif // _COLUMN_LIST_VIEW_H
|