cdesktopenv/cde/programs/dtfile/FileMgr.h

491 lines
14 KiB
C

/*
* CDE - Common Desktop Environment
*
* Copyright (c) 1993-2012, The Open Group. All rights reserved.
*
* These libraries and programs are free software; you can
* redistribute them and/or modify them under the terms of the GNU
* Lesser General Public License as published by the Free Software
* Foundation; either version 2 of the License, or (at your option)
* any later version.
*
* These libraries and programs are distributed in the hope that
* they will be useful, but WITHOUT ANY WARRANTY; without even the
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU Lesser General Public License for more
* details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with these libraries and programs; if not, write
* to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
* Floor, Boston, MA 02110-1301 USA
*/
/* $XConsortium: FileMgr.h /main/6 1996/10/07 13:45:03 mustafa $ */
/************************************<+>*************************************
****************************************************************************
*
* FILE: FileMgr.h
*
* COMPONENT_NAME: Desktop File Manager
*
* DESCRIPTION: Public include file for the main window of the
* File Manager.
*
* (c) Copyright 1993, 1994, 1995 Hewlett-Packard Company
* (c) Copyright 1993, 1994, 1995 International Business Machines Corp.
* (c) Copyright 1993, 1994, 1995 Sun Microsystems, Inc.
* (c) Copyright 1993, 1994, 1995 Novell, Inc.
*
****************************************************************************
************************************<+>*************************************/
#ifndef _FileMgr_h
#define _FileMgr_h
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
/* Resource names */
#define SELECTION_LIST "selectionList"
#define BRANCH_LIST "branchList"
/* Used in all the dialogs as its userData value for OK and Cancel buttons */
#define FLAG_SET 0x22
#define FLAG_RESET 0x33
/* Menu button sensitivity defines */
#define RENAME (1 << 1)
#define MOVE (1 << 2)
#define DUPLICATE (1 << 3)
#define LINK (1 << 4)
#define TRASH (1 << 5)
#define MODIFY (1 << 6)
#define CHANGEDIR (1 << 7)
#define PREFERENCES (1 << 8)
#define FILTER (1 << 9)
#define FIND (1 << 10)
#define CREATE_DIR (1 << 11)
#define CREATE_FILE (1 << 12)
#define SETTINGS (1 << 13)
#define PUTBACK (1 << 14)
#define PUT_ON_DESKTOP (1 << 15)
#define CLEAN_UP (1 << 16)
#define MOVE_UP (1 << 17)
#define HOME (1 << 18)
#define CHANGE_DIR (1 << 19)
#define TERMINAL (1 << 20)
/* CLEAN_UP_OP is not really a menu state.
It's a flag to let GetFileData in FileMgr.c (call when the directory
is being reread) not to reload icon positions from the .!dt<userid> file.
*/
#define CLEAN_UP_OP (1 << 21)
#define NOT_DESKTOP 0
#define DESKTOP 1
#define NOT_DESKTOP_DIR 2
#define FM_POPUP 3
#define TRASH_DIRECTORY 4
/* the number of columns standard in the fast change to text widget */
#define FAST_CHANGE_COLUMNS 35
/* Forward structure pointer declaration */
typedef struct _ObjectPosition * ObjectPtr;
/* Structure for containing the data for 1 file */
typedef struct _FileData
{
struct _FileData * next;
char * file_name; /* name of the file */
char * action_name; /* if it is an Action, the LABEL name */
unsigned char physical_type; /* file, directory, device, pipe, ... */
char * logical_type; /* data type from data typing db */
int errnum; /* error code */
struct stat stat; /* file status */
char * link; /* value of symbolic link */
char * final_link; /* last of a chain of symbolic links */
Boolean is_subdir; /* directory other than "." or ".." */
Boolean is_broken; /* broken link */
} FileData;
typedef struct _FileData2
{
struct _FileData2 * next;
short file_name; /* name of the file */
short action_name; /* if it is an Action, the LABEL name */
unsigned char physical_type; /* file, directory, device, pipe, ... */
short logical_type; /* data type from data typing db */
int errnum; /* error code */
struct stat stat; /* file status */
short link; /* value of symbolic link */
short final_link; /* last of a chain of symbolic links */
Boolean is_subdir; /* directory other than "." or ".." */
Boolean is_broken; /* broken link */
char text[BUFSIZ];
} FileData2;
/* position info read from the position info file */
typedef struct
{
char *name;
Position x;
Position y;
int stacking_order;
} PositionInfo;
/* tree branch expansion states */
typedef enum {
tsNotRead, /* directory not yet read */
tsError, /* error reading directory */
tsReading, /* directory currently being read for the first time */
tsNone, /* no contents shown */
tsDirs, /* only sub directories shown */
tsAll /* all contents shown */
} TreeShow;
typedef struct _FileViewData
{
XtPointer directory_set;
FileData * file_data;
struct _FileViewData *parent; /* ptr to dir containing this entry */
struct _FileViewData *next; /* ptr to next entry in the same dir */
struct _FileViewData *desc; /* if this is a dir: list of entries */
Boolean filtered; /* True if file is filtered */
Boolean selected; /* True if file is selected */
Boolean displayed; /* False if filtered or collapsed tree branch*/
TreeShow ts; /* how much to show in tree mode */
int ndir; /* no of sub directories */
int nfile; /* no of non-dir files */
int nnew; /* no of new files */
Widget widget; /* icon gadget for this entry */
Widget treebtn; /* button gadget for tree branch expand */
Boolean need_update; /* False until widget created and up-to-date */
Boolean registered; /* True if drop zone registered */
Position x, y; /* bottom left corner of icon gadget */
char *label; /* icon label string */
long icon_mtime; /* modified time of instance icon */
ObjectPtr position_info;
} FileViewData;
/* Structure for containing a set of directories */
typedef struct
{
char * name;
FileViewData * sub_root; /* root of the sub-tree */
int file_count;
FileViewData ** file_view_data;
FileViewData ** order_list;
int filtered_file_count;
int invisible_file_count;
XtPointer file_mgr_data;
} DirectorySet;
/* Structure for containing desktop object position information */
typedef struct _ObjectPosition {
char * name;
Position x;
Position y;
Boolean in_use;
Boolean late_bind;
int stacking_order;
FileViewData * file_view_data;
ObjectPtr next;
ObjectPtr prev;
} ObjectPosition;
/* External definitions for the file manager dialog class */
extern DialogClass * fileMgrClass;
typedef enum
{
not_busy = 0, /* not busy */
busy_readdir, /* busy reading directory */
initiating_readdir /* inside call to ReadDir */
} BusyStatus;
typedef struct
{
/* first 5 fields must be identical to DialogInstanceData struct */
Boolean displayed;
Position x;
Position y;
Dimension width;
Dimension height;
Boolean mapped;
short busy_status;
int busy_detail;
unsigned char show_type; /* single directory or directory tree? */
unsigned char tree_files; /* show only subdirs or files as well? */
short tree_preread_level; /* how many levels to pre-read */
short tree_show_level; /* how many levels to show initially */
int restoreKind;
char * host;
char * current_directory;
char ** branch_list;
unsigned char view; /* current view */
unsigned char view_single; /* view for singlge directory */
unsigned char view_tree; /* view for tree mode */
unsigned char order; /* sort order */
unsigned char direction; /* sort direction */
unsigned char positionEnabled; /* random positioning vs sorted grid */
Boolean newSize;
char * restricted_directory;
char * title;
char * helpVol;
Boolean toolbox;
Boolean dropSite;
Boolean IsTrashCan;
int directory_count;
DirectorySet ** directory_set;
FileViewData * tree_root; /* root of the tree */
FileViewData * renaming;
FileViewData ** selection_list;
char ** selection_table;
int selected_file_count;
Boolean show_iconic_path;
Boolean show_current_dir;
Boolean show_status_line;
Boolean fast_cd_enabled;
Boolean show_hid_enabled;
char *special_msg;
XtIntervalId msg_timer_id;
Boolean cd_inited;
XFontStruct * cd_font;
XFontSet cd_fontset;
XmFontType cd_fonttype;
GC cd_normal_gc;
GC cd_select_gc;
char *cd_select;
GC tree_solid_thin_gc;
GC tree_solid_thick_gc;
GC tree_dash_thin_gc;
GC tree_dash_thick_gc;
XtPointer file_mgr_rec;
FileViewData * popup_menu_icon;
FileViewData * drag_file_view_data;
DialogData * find;
DialogData * attribute;
DialogData * change_dir;
DialogData * preferences;
DialogData * filter_active;
DialogData * filter_edit;
DialogData ** attr_dialog_list;
int attr_dialog_count;
DialogData ** secondaryHelpDialogList;
int secondaryHelpDialogCount;
DialogData * primaryHelpDialog;
ObjectPosition ** object_positions;
int num_objects;
Dimension grid_height;
Dimension grid_width;
/* When user creates new file or directory, we want to store
away the new file info so we can scroll to it later.
*/
char * scrollToThisFile;
char * scrollToThisDirectory;
XtPointer layout_data;
char * desktop_file;
} FileMgrData, * FileMgrDataPtr;
typedef struct
{
Widget shell;
Widget main;
Widget menu;
Widget header_frame;
Widget header_separator;
Widget iconic_path_da;
Widget current_directory_frame;
Widget current_directory_drop;
Widget current_directory_icon;
Widget current_directory;
Widget current_directory_text;
Widget status_line;
Widget scroll_window;
Widget horizontal_scroll_bar;
Widget vertical_scroll_bar;
Widget file_window;
Widget actions;
Widget action_pane;
Widget directoryBarBtn;
Dimension iconic_path_width;
char * action_pane_file_type;
unsigned int menuStates;
Widget focus_widget;
Widget create_directoryBtn_child;
Widget create_dataBtn_child;
Widget findBtn_child;
Widget change_directoryBtn_child;
Widget preferencesBtn_child;
Widget defaultEnvBtn_child;
Widget filterBtn_child;
} FileMgrRec;
typedef struct
{
char * action_pane_file_type;
Widget menu;
Widget title;
Widget wsPopup[6];
Widget objPopup[6];
Widget trash_objPopup[2];
Widget action_separator;
} FileMgrPopup;
typedef struct
{
Widget dialog_widget;
Widget menu_widget;
Widget dir_text_widget;
Widget file_text_widget;
Widget file_type_widget;
Widget Ok;
Widget Cancel;
Widget Apply;
Widget Help;
Widget Misc;
int original_physical_type;
char * original_logical_type;
char * file_name;
char * directory_name;
char * host_name;
int mode;
FileMgrRec * file_mgr_rec;
char * previous_file_type;
FileMgrData * file_mgr_data;
} DialogCallbackStruct;
/* Local structure used for passing callback data */
typedef struct
{
Widget w;
DialogCallbackStruct *call_struct;
unsigned char type;
unsigned int btnMask;
char *new_name;
} MakeFileDoneData;
typedef struct
{
Widget w;
DialogCallbackStruct *call_struct;
int mode;
unsigned int btnMask;
} RenameDoneData;
/* data for doing icon update and layout */
typedef struct
{
/* ordered list of all files */
FileViewData ** order_list;
int order_count;
/* icon layout parameters */
Dimension width;
Dimension height;
Dimension pixmap_width;
Dimension pixmap_height;
Dimension char_width;
Dimension margin;
Dimension spacing;
Dimension highlight;
unsigned char alignment;
unsigned char pixmap_position;
Boolean icon_top;
int treebtn_size;
/* colors to use */
Pixel background;
Pixel foreground;
Pixel pixmap_back;
Pixel pixmap_fore;
#ifdef _SHOW_LINK
Pixel topshadow;
#endif
/* widgets to be re-used */
Widget *reuse_icons;
Widget *reuse_btns;
Widget *next_icon_to_use;
Widget *next_btn_to_use;
Widget dup_icon_widget;
Widget *manage;
int manage_count;
/* DisplayWorkProc */
XtWorkProcId work_id;
Widget drop_site_w;
int ex, ey;
Boolean focus_done;
Boolean visible_done;
Boolean all_done;
int i_do_next_vis;
int i_do_next_all;
} IconLayoutData;
#define FM_POPUP_CHILDREN 17
#define FM_POPUP_CHILDREN_NA 15
#define WS_BTNS 6
#define OBJ_BTNS 6
#define OBJ_BTNS_NA 4
#define TRASH_OBJ_BTNS 2
#define BTN_PROPERTIES 0
/* white space buttons */
#define BTN_FIND 1
#define BTN_CLEANUP 2
#define BTN_SELECTALL 3
#define BTN_UNSELECTALL 4
#define BTN_SHOWHIDDEN 5
/* object buttons */
#define BTN_PUTON 1
#define BTN_TRASH 2
#define BTN_HELP 3
/* trash object buttons */
#define BTN_RESTORE 0
#define BTN_REMOVE 1
#endif /* _FileMgr_h */
/* DON'T ADD ANYTHING AFTER THIS #endif */