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.
- */
-
- This document describes the following classes:
-
- LTableHeader
- LTableViewHeader
- LTableRowSelector
- LFlexTableGeometry
-
- There is also a description of how they can all be used together at the end.
-
-
- ---- LTableHeader ----
-
- This subclass of LView implements a table header with resizable and movable columns.
- Column headers are individual panes within the view. These panes are always positioned
- appropriately to be in line with their columns. The panes are resized horizontally to
- touch the left and right edges of their columns.
-
- The class also supports special appearance for the sorted column, chosen by clicking
- on a column header.
-
- The header does NOT scroll. Columns are always resized proportionally, though columns
- can be marked as fixed width. The header's image size always matches its frame.
-
-
- Ñ Creation
-
- The view has custom PPob and also requires a 'Cols' resource. The data in the PPob
- specifies the following information:
-
- header flags:
- only 1, kHeaderCanHideColumns
-
- 2 bevel trait resource ids:
- sorted column header, then unsorted
-
- reverse modifiers:
- an event record modifier mask that denotes a reverse-sort selection
-
- 'Cols' resource ID:
- id of 'Cols' resource, with column initialization data, REQUIRED
-
-
- The 'Cols' resource is used to initialize the size and positioning of the header's
- columns. The header of the resource (SavedHeaderState) is defined in LTableHeader.h.
- Following the header is an array of ColumnData (also in LTableHeader.h) records, 1
- for each column.
-
- The header of the resource specifies:
-
- # of columns (1-based)
- index of rightmost visible column (1-based)
- index of sorted column (1-based, 0 if none)
-
-
- Each ColumnData record specifies:
-
- Pane ID of column header, 0 if none
-
- Column Width
- In pixels if fixed size, in % of non-fixed space if resizable
-
- Column Position
- Meaningless in saved state, ignore it.
-
- ColumnFlags
- kColumnDoesNotSort and/or kColumnDoesNotResize
-
-
- Ñ Header and Column Size
-
- If a column is fixed-width, it will always have that width. Widths of resizable
- columns are maintained as percentages of the non-fixed space in the header.
-
- When a column is resized, all columns to its right resize proportionally.
-
-
- Ñ Hiding/Showing Columns
-
- If the kHeaderCanHideColumns flag is set in the header flags, the view will have
- a widget at the right edge for hiding and showing columns.
-
- Ñ Dragging/Resizing Columns
-
- To change the rgn that gets dragged when resizing or moving a column, override
- ComputeResizeDragRect or ComputeColumnDragRect respectively.
-
- Ñ Sorting
-
- When the sorted column changes, LTableHeader broadcasts a msg_SortedColumnChanged
- message, with TableHeaderSortChange parameter.
-
- The method GetSortedColumn returns both the index and the header pane ID of the
- sorted column.
-
-
-
-
-
-
- ---- LTableViewHeader ----
-
- LTableViewHeader is a subclass of LTableHeader that coordinates changes in the header
- with an LTableView.
-
- When columns are hidden or shown in the header, this class removes/adds columns from/to
- the table view.
-
- When the image size of the header changes, the image size of the table is adjusted as well.
-
- When columns are redrawn in the header, they are invalidated for refresh in the table view.
-
- This class also overrides ComputeResizeDragRect and ComputeColumnDragRect to create more
- useful regions when dragging and resizing columns.
-
-
-
-
- ---- LTableRowSelector ----
-
- This subclass of LTableSelector selects entire rows. Individual cells cannot be selected.
- It allows multiple selection and supports that standard shift and command key selection
- extension semantics.
-
-
-
-
- ---- LFlexTableGeometry ----
-
- This subclass of LTableGeometry works in concert with an LTableHeader to compute the position
- of cells in a table. All rows are of uniform height, and column positions and widths
- are determined by querying the associated LTableHeader view.
-
-
-
- ---- Using them together ----
-
- The Dogbert mail window will use these classes all together. A subclass of LTableView
- (CMessageTableView) sets its geometry to LFlexTableGeometry, and its selector to
- LTableRowSelector.
-
- When drawing a cell, CMessageTableView queries its associate LTableViewHeader to find the
- pane ID of the column's header. The pane ID's denote which element of the row is drawn in
- that cell. For instance, a column with header 'subj' contains the message subject. This
- indirection allows the column order to be changed.
-
-
-
-
-