зеркало из https://github.com/mozilla/pjs.git
233 строки
7.9 KiB
C
233 строки
7.9 KiB
C
|
/* -*- Mode: C; tab-width: 8; 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.
|
||
|
*/
|
||
|
/*
|
||
|
outline.h --- includes for the outline widget hack.
|
||
|
Created: Terry Weissman <terry@netscape.com>, 24-Jun-95.
|
||
|
*/
|
||
|
|
||
|
|
||
|
#ifndef __xfe_outline_h_
|
||
|
#define __xfe_outline_h_
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
#include "msgcom.h"
|
||
|
#include "icons.h"
|
||
|
#include "dragdrop.h"
|
||
|
|
||
|
typedef int fe_OutlineType;
|
||
|
|
||
|
#define FE_OUTLINE_String 0x01
|
||
|
#define FE_OUTLINE_Chopped 0x02
|
||
|
#define FE_OUTLINE_Icon 0x04
|
||
|
#define FE_OUTLINE_Box 0x08
|
||
|
|
||
|
/* these two tell the outline which columns (note you can have multiple)
|
||
|
are supposed to be indented, and, optional are to show an
|
||
|
additional control to toggle between indented mode
|
||
|
and non indented mode. */
|
||
|
|
||
|
#define FE_OUTLINE_IndentedColumn 0x10
|
||
|
#define FE_OUTLINE_IndentToggle 0x20
|
||
|
#define FE_OUTLINE_IndentLines 0x40
|
||
|
|
||
|
#define FE_OUTLINE_ChoppedString (FE_OUTLINE_String | FE_OUTLINE_Chopped)
|
||
|
#define FE_OUTLINE_IconString (FE_OUTLINE_Icon | FE_OUTLINE_String)
|
||
|
#define FE_OUTLINE_IconChoppedString (FE_OUTLINE_Icon | FE_OUTLINE_ChoppedString)
|
||
|
|
||
|
typedef enum {
|
||
|
FE_OUTLINE_Leaf,
|
||
|
FE_OUTLINE_Folded,
|
||
|
FE_OUTLINE_Expanded
|
||
|
} fe_OutlineFlippyType;
|
||
|
|
||
|
typedef enum {
|
||
|
FE_OUTLINE_Default,
|
||
|
FE_OUTLINE_Bold,
|
||
|
FE_OUTLINE_Italic
|
||
|
} fe_OutlineTextStyle;
|
||
|
|
||
|
typedef struct fe_OutlineDesc {
|
||
|
fe_OutlineFlippyType flippy;
|
||
|
int depth;
|
||
|
fe_OutlineType *type; /* What to draw in this column. */
|
||
|
fe_icon **icons;
|
||
|
const char **str; /* Used only if the corresponding entry in
|
||
|
the type array is FE_OUTLINE_String. */
|
||
|
fe_OutlineTextStyle style; /* What tag to use to paint any strings.
|
||
|
The datafunc *must* fill this in. Choices
|
||
|
are (right now) XmFONTLIST_DEFAULT_TAG,
|
||
|
"BOLD", and "ITALIC". */
|
||
|
const char **column_headers; /* headers for the various columns. */
|
||
|
int numcolumns;
|
||
|
XP_Bool selected;
|
||
|
} fe_OutlineDesc;
|
||
|
|
||
|
typedef struct fe_OutlineHeaderDesc {
|
||
|
fe_OutlineType type[10];
|
||
|
const char **header_strings;
|
||
|
fe_icon *icons[10];
|
||
|
} fe_OutlineHeaderDesc;
|
||
|
|
||
|
typedef Boolean (*fe_OutlineGetDataFunc)(Widget, void* closure, int row,
|
||
|
fe_OutlineDesc* data, int tag);
|
||
|
|
||
|
typedef void (*fe_OutlineClickFunc)(Widget, void* closure, int row, int column,
|
||
|
const char* header, /* Header for this column */
|
||
|
int button, int clicks, Boolean shift,
|
||
|
Boolean ctrl, int tag);
|
||
|
|
||
|
typedef void (*fe_OutlineIconClickFunc)(Widget, void* closure, int row, int tag);
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Be sure to pass fe_OutlineCreate() an ArgList that has at least 5 empty
|
||
|
* slots that you aren't using, as it will. Yick. ###
|
||
|
*/
|
||
|
extern Widget fe_GridCreate(MWContext* context, Widget parent, String name,
|
||
|
ArgList av, Cardinal ac,
|
||
|
int maxindentdepth, /* Make the indentation
|
||
|
icon column deep enough
|
||
|
to initially show this
|
||
|
many levels. If zero,
|
||
|
don't let the user resize
|
||
|
it, and it will be
|
||
|
resized by calls to
|
||
|
fe_OutlineSetMaxDepth().
|
||
|
*/
|
||
|
/* always pass in one less number of actual
|
||
|
number of columns */
|
||
|
int numcolumns,
|
||
|
/* for outline, pass in one less number of actual
|
||
|
columns for widths (ignore first column),
|
||
|
for grid, pass in widths for all columns */
|
||
|
int* columnwidths,
|
||
|
fe_OutlineGetDataFunc datafunc,
|
||
|
fe_OutlineClickFunc clickfunc,
|
||
|
fe_OutlineIconClickFunc iconfunc,
|
||
|
void* closure,
|
||
|
char** posinfo,
|
||
|
int tag /* for multipaned window */,
|
||
|
XP_Bool isOutline);
|
||
|
|
||
|
|
||
|
/* ############### see doc above ################### */
|
||
|
extern Widget fe_OutlineCreate(MWContext* context, Widget parent, String name,
|
||
|
ArgList av, Cardinal ac,
|
||
|
int maxindentdepth,
|
||
|
int numcolumns, int* columnwidths,
|
||
|
fe_OutlineGetDataFunc datafunc,
|
||
|
fe_OutlineClickFunc clickfunc,
|
||
|
fe_OutlineIconClickFunc iconfunc,
|
||
|
void* closure,
|
||
|
char** posinfo,
|
||
|
int tag);
|
||
|
|
||
|
|
||
|
/* Set the header strings for the given widget. The outline code will keep the
|
||
|
pointers you give it, so you'd better never touch them. It will pass these
|
||
|
same pointers back to the clickfunc, so you can write code that compares
|
||
|
strings instead of remembering magic numbers. Note that any column
|
||
|
reordering that may get done by the user is completely hidden from the
|
||
|
caller; the reordering is a display artifact only. */
|
||
|
|
||
|
extern void fe_OutlineSetHeaders(Widget widget, fe_OutlineHeaderDesc *headers);
|
||
|
|
||
|
/* Tell the outline whether draw the given header in a highlighted way
|
||
|
(currently, boldface). */
|
||
|
|
||
|
extern void fe_OutlineSetHeaderHighlight(Widget widget, const char* header,
|
||
|
XP_Bool value);
|
||
|
|
||
|
|
||
|
/* Change the text displayed for the given header. Note the original header
|
||
|
string is still used for calls that want to manipulate that header; this
|
||
|
just changes what string is presented for the user. If the label is
|
||
|
NULL, then the header is reverted back to its original string. */
|
||
|
|
||
|
extern void fe_OutlineChangeHeaderLabel(Widget widget, const char* headername,
|
||
|
const char* label);
|
||
|
|
||
|
|
||
|
|
||
|
/* Tells the outline widget that "length" rows starting at "first"
|
||
|
have been changed. The outline is now to consider itself to have
|
||
|
"newnumrows" rows in it.*/
|
||
|
|
||
|
extern void fe_OutlineChange(Widget outline, int first, int length,
|
||
|
int newnumrows);
|
||
|
|
||
|
extern void fe_OutlineSelect(Widget outline, int row, Boolean exclusive);
|
||
|
|
||
|
extern void fe_OutlineUnselect(Widget outline, int row);
|
||
|
|
||
|
extern void fe_OutlineUnselectAll(Widget outline);
|
||
|
|
||
|
extern void fe_OutlineMakeVisible(Widget outline, int visible);
|
||
|
|
||
|
|
||
|
/* Returns how many items are currently selected. If sellist is not NULL,
|
||
|
it gets set with the indices of the selection (up to sizesellist
|
||
|
entries.) */
|
||
|
|
||
|
extern int fe_OutlineGetSelection(Widget outline, MSG_ViewIndex* sellist,
|
||
|
int sizesellist);
|
||
|
|
||
|
|
||
|
/* Tell the outline widget to set the maximum indentation depth. This should
|
||
|
only be called if the outline widget was created with maxindentdepth set to
|
||
|
zero.*/
|
||
|
extern void fe_OutlineSetMaxDepth(Widget outline, int maxdepth);
|
||
|
|
||
|
|
||
|
/* Given an (x,y) in the root window, return which row it corresponds to in the
|
||
|
outline (-1 if none). If nearbottom is given, then it is set to TRUE if the
|
||
|
(x,y) is very near the bottom of the returned row (used by drag'n'drop to
|
||
|
determine if the cursor should be considered to be between rows.) */
|
||
|
extern int fe_OutlineRootCoordsToRow(Widget outline, int x, int y,
|
||
|
XP_Bool* nearbottom);
|
||
|
|
||
|
|
||
|
/* Enables dragging from this outline widget. */
|
||
|
extern void fe_OutlineEnableDrag(Widget outline, fe_icon *dragicon, fe_dnd_Type dragtype);
|
||
|
|
||
|
/* Disables dragging from this outline widget. */
|
||
|
extern void fe_OutlineDisableDrag(Widget outline);
|
||
|
|
||
|
/* Handles auto-scrolling during a drag operation. If you call this, then
|
||
|
you have to call this for every event on a particular drag. This routine
|
||
|
should be called if the given drag operation could possibly be destined
|
||
|
for this widget. */
|
||
|
extern void fe_OutlineHandleDragEvent(Widget outline, XEvent* event,
|
||
|
fe_dnd_Event type,
|
||
|
fe_dnd_Source* source);
|
||
|
|
||
|
|
||
|
/* Helps provide feedback during drag operation. Up to one row may have a drag
|
||
|
highlight, which is either a box around it or a line under it. Setting row
|
||
|
to a negative value will turn it off entirely. */
|
||
|
extern void fe_OutlineSetDragFeedback(Widget outline, int row, XP_Bool usebox);
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#endif /* __xfe_outline_h_ */
|