229 lines
7.8 KiB
C
229 lines
7.8 KiB
C
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
|
|
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
|
|
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
|
|
// PARTICULAR PURPOSE.
|
|
//
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
|
|
#ifndef __VIEW_H__
|
|
#define __VIEW_H__
|
|
|
|
/*
|
|
*
|
|
* VIEW
|
|
*
|
|
* provide a map between lines in the displayed table, and items in the
|
|
* COMPLIST associated with this view.
|
|
*
|
|
* a view owns a complist: given the request for the text of a particular
|
|
* line number in the displayed table, it will map it to either the
|
|
* name/result of a CompItem in the COMPLIST (one of the files compared),
|
|
* or to a line in the compare output (a line in one of the sections in
|
|
* the composite section list for the selected CompItem).
|
|
*
|
|
* the view thus maintains a mode: OUTLINE mode is when one row is one COMPITEM,
|
|
* and EXPAND mode is when one row is a line in the selected COMPITEM. Within
|
|
* either of these modes, global option flags can select whether to show all
|
|
* rows or only certain rows (eg only COMPITEMs that have a state other than
|
|
* STATE_SAME, or only lines that are in the LEFT file).
|
|
*
|
|
* The view is given the handle to the table window. It will send messages
|
|
* to the table window as appropriate when the view changes for any reason.
|
|
*
|
|
* The view owns the COMPLIST. When the view is deleted, the complist will
|
|
* also be deleted.
|
|
*
|
|
* The table class is using this view. So to get rid of a view, call
|
|
* view_close. This will notify the table window. Only call view_delete
|
|
* when you have received the TQ_CLOSE notification indicating that the
|
|
* table class has finished with this view.
|
|
*/
|
|
|
|
|
|
|
|
|
|
/* view.h includes the term COMPLIST: complist.h uses the term VIEW.
|
|
* Alas MIPS doesn't allow duplicate definitions, even harmless ones,
|
|
* so we need to play games. Whoever declares it first does
|
|
* the real declares and the second one gets no-ops.
|
|
*/
|
|
#ifndef INC_VIEW_COMPLIST
|
|
#define INC_VIEW_COMPLIST
|
|
typedef struct compitem FAR* COMPITEM; /* handle to a compitem */
|
|
typedef struct view FAR * VIEW; /* handle to a VIEW */
|
|
typedef struct complist FAR * COMPLIST; /* handle to a complist */
|
|
#endif // INC_VIEW_COMPLIST
|
|
|
|
/* create a new view. It is told the handle for the associated
|
|
* table window. We don't know yet the COMPLIST.
|
|
*/
|
|
VIEW view_new(HWND hwndTable);
|
|
|
|
/* tell the view the handle of its COMPLIST. This is an error if this
|
|
* function has already been called for this view. This will init the
|
|
* view to OUTLINE mode. We return FALSE if an error occured.
|
|
*/
|
|
BOOL view_setcomplist(VIEW view, COMPLIST cl);
|
|
|
|
/* get the handle of the COMPLIST for this view */
|
|
COMPLIST view_getcomplist(VIEW view);
|
|
|
|
/*
|
|
* close a view. This causes the table window to be told to close
|
|
* this view. When the table window has finished with the view, it will
|
|
* send a TQ_CLOSE notification to its owner window. On receipt of
|
|
* that, call view_delete
|
|
*/
|
|
void view_close(VIEW view);
|
|
|
|
/* delete a view and all data associated with it, including the COMPLIST.
|
|
*
|
|
* DON'T call this function except on receiving a TQ_CLOSE notification
|
|
* from the table window. In other cases, call view_close to notify the
|
|
* table window.
|
|
*/
|
|
void view_delete(VIEW view);
|
|
|
|
/*
|
|
* each line has three columns - a line number, a tag and the main text.
|
|
* this function returns the text for the given row in the
|
|
* given view. The pointer is to a text string in the
|
|
* view or in the complist somewhere - it should not be changed, and
|
|
* may be overwritten by the next call to gettext.
|
|
*/
|
|
|
|
LPSTR view_gettext(VIEW view, long row, int col);
|
|
LPWSTR view_gettextW(VIEW view, long row, int col);
|
|
|
|
/*
|
|
* return the line number that this line had in the original left or
|
|
* right list. returns 0 if we are not in expanded mode, or if the
|
|
* line was not in the original list. returns -(linenr) if the
|
|
* line is MOVED and this is the other copy
|
|
*/
|
|
int view_getlinenr_left(VIEW view, long row);
|
|
int view_getlinenr_right(VIEW view, long row);
|
|
|
|
|
|
/* find the max width of the given column, in characters */
|
|
int view_getwidth(VIEW view, int col);
|
|
|
|
|
|
/* return the number of visible rows in this view */
|
|
long view_getrowcount(VIEW view);
|
|
|
|
|
|
/* get the state for this row. This is one of the STATE_* properties
|
|
* defined in state.h, and is mapped to colour settings by the caller.
|
|
*/
|
|
int view_getstate(VIEW view, long row);
|
|
|
|
|
|
/* switch to expanded view of the given row. FALSE if row not
|
|
* expandable or no such row. Switch the mapping so that each row
|
|
* maps to one line in the composite section list for the given
|
|
* compitem (the one selected by row in outline mode), and notify
|
|
* the table window to redraw.
|
|
* It is legal (and a no-op) to have rows==-1
|
|
*/
|
|
BOOL view_expand(VIEW view, long row);
|
|
|
|
/* return to outline mode. switch the mapping back so that each
|
|
* row maps to one CompItem, and notify the table window so that it
|
|
* is redrawn
|
|
*/
|
|
void view_outline(VIEW);
|
|
|
|
/* return a handle to the current CompItem. if the view is currently in
|
|
* expand mode, this will return the handle for the CompItem that is
|
|
* being expanded (regardless of the row parameter). If the mapping is
|
|
* currently outline mode, the handle for the CompItem representing row
|
|
* will be returned, or NULL if that is not valid
|
|
*/
|
|
COMPITEM view_getitem(VIEW view, long row);
|
|
|
|
/*
|
|
* return TRUE if the current mapping is expanded mode
|
|
*/
|
|
BOOL view_isexpanded(VIEW view);
|
|
|
|
/* return a text string describing the current compitem. Only valid
|
|
* if in expand mode. This will be normally the file name
|
|
*/
|
|
LPSTR view_getcurrenttag(VIEW view);
|
|
|
|
|
|
/* a CompItem has been added to the list. This will cause the
|
|
* table to be notified of the change.
|
|
*
|
|
* This causes a Poll() to take place, and returns TRUE if an abort
|
|
* has been requested. The caller should arrange to abort the current
|
|
* scan operation.
|
|
*/
|
|
BOOL view_newitem(VIEW view);
|
|
|
|
|
|
/*
|
|
* change view mode. the options affecting view selection have changed -
|
|
* change the mapping if necessary, and redraw if it affects this mode
|
|
*
|
|
* retain current line if possible
|
|
*/
|
|
void view_changeviewoptions(VIEW view);
|
|
|
|
/* the compare options have changed - discard all compares and redo
|
|
* as necessary.
|
|
* retain current line if possible
|
|
*/
|
|
void view_changediffoptions(VIEW view);
|
|
|
|
|
|
/* find the next highlighted line in the given direction: forward if
|
|
* bForward. returns the row number.
|
|
*/
|
|
long view_findchange(VIEW view, long startrow, BOOL bForward);
|
|
|
|
/* return the STATE_ value for the indicated row in the view.
|
|
*/
|
|
int view_getrowstate(VIEW view, long row);
|
|
|
|
/*
|
|
* return the marked state for a given row. Only compitems can be marked,
|
|
* so it will be FALSE unless it is a compitem on which view_setmark or
|
|
* compitem_setmark have previously set the mark state to TRUE.
|
|
*/
|
|
BOOL view_getmarkstate(VIEW view, long row);
|
|
|
|
/*
|
|
* set the mark state for a given row. This is only possible for compitem rows.
|
|
* The mark set can be retrieved by view_getmarkstate or compitem_getmark.
|
|
*
|
|
* We return FALSE if the state could not be set - eg because the
|
|
* row to set is not a compitem row.
|
|
*/
|
|
BOOL view_setmarkstate(VIEW view, long row, BOOL bMark);
|
|
|
|
/*
|
|
* the WIN32 multithread version can try view_expand and view_outline
|
|
* (or view_newitem) at the same time. This is not correctly protected by
|
|
* the critical section, since there are major restrictions about holding
|
|
* critsecs when sending messages from the worker thread.
|
|
*
|
|
* To avoid contention, we call this function to notify that we are
|
|
* starting expanding. view_newitem and ToOutline will return without
|
|
* doing anything if this function has been called and view_expand has not
|
|
* completed.
|
|
*/
|
|
void view_expandstart(VIEW);
|
|
|
|
// are we in the middle of expansion ?
|
|
BOOL view_expanding(VIEW);
|
|
|
|
HWND view_gethwnd(VIEW view);
|
|
|
|
void view_gototableline(VIEW view, LONG iLine);
|
|
|
|
BOOL view_findstring(VIEW view, LONG iCol, LPCSTR pszFind, BOOL fSearchDown, BOOL fMatchCase, BOOL fWholeWord);
|
|
|
|
#endif
|