dtinfo subtree dtinfo
[oweals/cde.git] / cde / programs / dtinfo / dtinfo / src / Agents / NodeWindowAgentMotif.hh
1 /* $XConsortium: NodeWindowAgentMotif.hh /main/24 1996/11/23 14:13:00 cde-hal $ */
2 /*
3  * (c) Copyright 1996 Digital Equipment Corporation.
4  * (c) Copyright 1996 Hewlett-Packard Company.
5  * (c) Copyright 1996 International Business Machines Corp.
6  * (c) Copyright 1996 Sun Microsystems, Inc.
7  * (c) Copyright 1996 Novell, Inc. 
8  * (c) Copyright 1994, 1995, 1996 FUJITSU LIMITED.
9  * (c) Copyright 1996 Hitachi.
10  */
11 /*
12  * Copyright (c) 1992 HAL Computer Systems International, Ltd.
13  * All rights reserved.  Unpublished -- rights reserved under
14  * the Copyright Laws of the United States.  USE OF A COPYRIGHT
15  * NOTICE IS PRECAUTIONARY ONLY AND DOES NOT IMPLY PUBLICATION
16  * OR DISCLOSURE.
17  * 
18  * THIS SOFTWARE CONTAINS CONFIDENTIAL INFORMATION AND TRADE
19  * SECRETS OF HAL COMPUTER SYSTEMS INTERNATIONAL, LTD.  USE,
20  * DISCLOSURE, OR REPRODUCTION IS PROHIBITED WITHOUT THE
21  * PRIOR EXPRESS WRITTEN PERMISSION OF HAL COMPUTER SYSTEMS
22  * INTERNATIONAL, LTD.
23  * 
24  *                         RESTRICTED RIGHTS LEGEND
25  * Use, duplication, or disclosure by the Government is subject
26  * to the restrictions as set forth in subparagraph (c)(l)(ii)
27  * of the Rights in Technical Data and Computer Software clause
28  * at DFARS 252.227-7013.
29  *
30  *          HAL COMPUTER SYSTEMS INTERNATIONAL, LTD.
31  *                  1315 Dell Avenue
32  *                  Campbell, CA  95008
33  * 
34  */
35
36 #include "UAS.hh"
37
38 class NodeViewInfo;
39 class NodeHandle;
40 class WTopLevelShell;
41 class WXmPushButton;
42 class Manager;
43 class WXmToggleButton;
44 class WXmOptionMenu;
45 class WXmPulldownMenu;
46 class WXmRowColumn;
47 class WXmScrolledWindow;
48 class WXmFrame;
49 class WXmTextField;
50 class WXmCascadeButton;
51 class WXmForm;
52 class HitList;
53 class Ancestor;
54 class SelectionChanged;
55 class BookTab;
56 class PixmapGraphic;
57 class MarkSelectionChanged;
58 class ScopeMenu;
59 class Graphic;
60 class Mark;
61 class MarkCreated;
62 class MarkDeleted;
63 class MarkCanvas ;
64 class MarkIcon ;
65 // class DetachGraphic;
66 // class ReAttachGraphic;
67 // class DisplayGraphic;
68
69 class GraphicsHandler ;
70 // self is used by some MACROS somewhere, but the X include files use
71 // it as something different
72
73 // we require #undef XtIsManaged, XtWindow and XtDisplay because they are defined
74 // as a macros in the Private Xm Header files, but we rely on the
75 // Function definitions to cause automatic casts to Widgets in our .C
76 // file - (brad) 
77
78
79 #undef self
80 #include <DtI/DisplayAreaP.h>
81 #define self *this
82 #undef XtIsManaged
83 #undef XtWindow
84 #undef XtDisplay
85
86 class NodeWindowAgent : public Agent,
87                         public UAS_Receiver<SelectionChanged>,
88                         public UAS_Receiver<MarkSelectionChanged>,
89                         public UAS_Sender<SelectionChanged>,
90                         public UAS_Receiver<MarkCreated>,
91                         public UAS_Receiver<MarkDeleted>,
92                         public UAS_Receiver<UAS_LibraryDestroyedMsg>,
93                         public IcccmAgent
94 {
95 public: // functions
96
97 friend class Ancestor;
98
99   NodeWindowAgent(u_int serial_no = 0);
100   ~NodeWindowAgent();
101
102   void display (UAS_Pointer<UAS_Common> &n);
103
104   unsigned long last_access_time ()
105     { return (f_last_access_time); }
106
107   // NOTE: check re_display() before changing operation of these routines - jbm
108   // Returns TRUE if willing to display the specified node.
109   bool can_display (NodeHandle &)
110     { return (!f_locked); }
111   bool locked()
112     { return (f_locked); }
113
114   void update_fonts(unsigned int serial_number = 0);
115
116   // if graphic is visible, refresh screen 
117   void refresh(const UAS_Pointer<Graphic> &);
118
119   // re-display node via display() functions...when style sheet changes
120   void re_display();
121
122   void selection_changed ();
123   bool selection_contains_graphic();
124
125   // only for use by the Canvas Help Display Area hypertext callback
126   void link_to (const char *locator);
127
128   // when the canvas sends us a resize callback
129   void canvas_resize ();
130
131   void vscroll (unsigned int value);
132   void hscroll (unsigned int value);
133
134   void arm ();
135   void disarm() ;
136
137   void detach( UAS_Pointer<Graphic> &);
138   void reattach( UAS_Pointer<Graphic> &);
139
140   NodeViewInfo *node_view_info() { return f_node_view_info; }
141
142   void popup_menu(XButtonPressedEvent*);  // popup detach graphic menu
143   void detach_gr(); // for detach popup menu
144   void attach_gr(); // for detach popup menu
145   void raise_gr(); // for detach popup menu
146   void go_to_link();
147   void open_new_node();
148   void exit_cb();
149
150 public: // Motif-version functions (usable by other Motif agents only)
151
152   void close_set_sensitive(Boolean set) {
153       f_close_sensitive = set; if (f_close) XtSetSensitive(f_close, set); }
154
155 private: // functions
156   void create_ui();
157
158   // Callbacks
159   static void printCB(Widget, XtPointer, XtPointer);
160   static void print_asCB(Widget, XtPointer, XtPointer);
161   void print_panel_activate();
162   static void dismissCB(Widget, XtPointer, XtPointer);
163   void dismiss ();              // close the window, blow away the node
164   static void cloneCB(Widget, XtPointer, XtPointer);
165   static void lock_toggleCB(Widget, XtPointer, XtPointer);
166   static void node_nextCB(Widget, XtPointer, XtPointer);
167   static void node_previousCB(Widget, XtPointer, XtPointer);
168   static void preview_nextCB(Widget, XtPointer, XtPointer);
169   static void preview_previousCB(Widget, XtPointer, XtPointer);
170   static void preview_history_nextCB(Widget, XtPointer, XtPointer);
171   static void preview_history_prevCB(Widget, XtPointer, XtPointer);
172   void history_display();
173   static void history_nextCB(Widget, XtPointer, XtPointer);
174   static void history_prevCB(Widget, XtPointer, XtPointer);
175   static void search_previousCB(Widget, XtPointer, XtPointer);
176   void search_previous();
177   static void search_nextCB(Widget, XtPointer, XtPointer);
178   void search_next();
179   static void search_help (Widget w, XtPointer client_data,
180                            XEvent *event, Boolean *);
181   void display_version();
182   void initialize_controls();
183   void initialize_hierarchy();
184   void initialize_history();
185   void record_history_position();
186   void reset_hierarchy();
187   void initialize_path();
188   void initialize_tabs();
189   void select_tab();
190   void title_menu_activate (WCallback *);
191   void map_activate();
192
193   static void detach_graphicCB(Widget, XtPointer, XtPointer);
194   void detach_graphic();
195   _DtCvSegment *xy_to_seg(int, int, _DtCvElemType*); 
196
197   void static dialog_mapped (Widget, XtPointer, XEvent *, Boolean *);
198
199
200   void receive (SelectionChanged &, void *client_data);
201   void preview_init (UAS_Pointer<UAS_Common> &doc_ptr);
202   void preview (WTimeOut *);
203   static void unpreviewCB(Widget, XtPointer, XtPointer);
204   void unpreview();
205   void text_callback(WCallback *wcb);
206
207   void add_quick_help (Widget, const char*);
208   static void quick_helpEH (Widget, XtPointer, XEvent *, Boolean *);
209
210   void receive (MarkSelectionChanged &, void *client_data);
211
212   static void create_annotationCB(Widget, XtPointer, XtPointer);
213   static void create_bookmarkCB(Widget, XtPointer, XtPointer);
214   static void edit_markCB(Widget, XtPointer, XtPointer);
215   static void move_markCB(Widget, XtPointer, XtPointer);
216   void move_mark();
217   static void delete_markCB(Widget, XtPointer, XtPointer);
218   void delete_mark();
219   void set_min_size();
220
221   static void search_on_selectionCB(Widget, XtPointer, XtPointer);
222   void do_search_selection(const char*, unsigned long);
223   static void clear_searchCB(Widget, XtPointer, XtPointer);
224   void clear_search_hits_activate();
225
226   int make_bookmark(Boolean edit, MarkCanvas* refmark = NULL);
227   void do_bookmarks(bool move_to_mark = TRUE);
228   MarkCanvas *add_mark (UAS_Pointer<Mark> &);
229   void cleanup_marks();
230   void show_mark (MarkCanvas *, bool move_to_mark = TRUE);
231   void receive (MarkCreated &message, void *client_data);
232   void receive (MarkDeleted &message, void *client_data);
233
234   void layout_mark_icons() ;
235
236   void delete_mark_visuals (UAS_Pointer<Mark> &mark_ptr);
237   MarkCanvas *create_canvas_mark (_DtCvHandle canvas, NodeViewInfo*, UAS_Pointer<Mark>&);
238   void select_mark_in_canvas (MarkCanvas *, bool show_it);
239   void deselect_mark_in_canvas (MarkCanvas *);
240   void receive (UAS_LibraryDestroyedMsg &msg, void *client_data);
241
242   void replace(UAS_Pointer<Graphic> &gr);
243
244 #ifdef DEBUG
245   // debugging stuff 
246   void document_id_display();
247 #endif
248
249   static void show_locatorCB(Widget, XtPointer closure, XtPointer);
250   void show_locator();
251
252 #ifdef MOSAIC_SUPPORT
253   void import_mosaic_hotlist();
254 #endif
255
256 #ifdef DEBUG
257 #ifdef MONITOR
258   void monitor(WCallback *);
259 #endif
260 #endif
261
262   void SetTopic(_DtCvTopicPtr);
263
264
265 private: // class
266
267 private: // variables
268   NodeViewInfo          *f_node_view_info;   // Display specific view info. 
269   
270   // NOTE: Maybe these losers should be references?!
271   WTopLevelShell        *f_shell;
272
273   DtHelpDispAreaStruct *f_help_dsp_area ;
274
275   Widget        f_close;
276   Widget        f_node_prev, f_node_prev2, f_node_prev3;
277   Widget        f_node_next, f_node_next2, f_node_next3;
278   Widget        f_history_prev, f_history_prev2;
279   Widget        f_history_next, f_history_next2;
280   Widget        f_search_prev, f_search_prev2;
281   Widget        f_search_next, f_search_next2;
282   WXmOptionMenu         *f_title_option;
283   WXmPulldownMenu       *f_title_menu;
284   Widget        f_status_text;
285   WXmTextField          *f_search_text;
286   ScopeMenu            *f_scope_menu;
287   WXmRowColumn          *f_tab_area;
288   WXmFrame              *f_frame;    // 94/10/21 haya for get nodeview height.
289   Widget         f_create_bmrk;
290   Widget         f_create_anno;
291   Widget         f_create_link;
292   Widget         f_move_mark;
293   Widget         f_edit_mark;
294   Widget         f_delete_mark;
295   Widget         f_detach_graphic;
296   Widget         f_detach_menu; // popup detach graphic menu
297   Widget         f_detach_button;
298   Widget         f_attach_button;
299   Widget         f_raise_button;
300   Widget         f_preview_menu; // popup link preview
301   Widget         f_preview_label;
302   Widget         f_default_menu; // popup default menu
303   UAS_String     f_link_spec;
304   Widget         f_clear_search_hits;
305   WXmPushButton         *f_graphical_map;
306   WXmForm               *f_search_form;
307   Widget        f_search_menu_button;
308   Widget        f_print, f_print2;
309   Widget        f_print_as;
310   xList<Ancestor *>      f_ancestor_list;
311   Ancestor              *f_current_ancestor;
312   Widget                f_form;
313
314   u_int                 f_move_mark_sensitive;
315   u_int                 f_last_access_time;
316   bool                  f_locked;
317   WCallback            *f_wm_delete_callback;
318
319   xList<BookTab *>      f_tab_btn_list;
320
321   UAS_Pointer<UAS_Common>     f_preview_document;
322   WTimeOut             *f_preview_timeout;
323
324   u_int                 f_serial_number;
325
326   LocalHistoryMgr       f_history_list;
327   bool                  f_history_display;
328
329   // Marks (from ViewportAgent - brad 12/20/95)
330   xList<MarkCanvas *>   f_mark_list ;
331   xList<MarkIcon   *>   f_mark_icon_list ;
332
333   unsigned int          f_vscrollbar_offset ;
334   unsigned int          f_hscrollbar_offset ;
335   _DtCvSegment         *f_graphic_segment;
336
337   GraphicsHandler      *f_graphics_handler ;
338
339   bool                    f_close_sensitive;
340
341   static unsigned long g_black;
342   static unsigned long g_grey;
343
344   UAS_List<UAS_String> f_textstore;
345 };
346
347 // use a new GraphicsHandler for each new node displayed
348 // GraphicsHandler will get/send graphics type messages and by deleting it
349 // each time, we get automagic cleanup of Sender/Receiver stuff
350 class GraphicsHandler : public UAS_Receiver<DetachGraphic>,
351                         public UAS_Sender<DetachGraphic>,
352                         public UAS_Receiver<ReAttachGraphic>,
353                         public UAS_Sender<DisplayGraphic>
354 {
355 public:
356   GraphicsHandler(NodeWindowAgent *agent);
357   ~GraphicsHandler();
358
359   void receive(DetachGraphic &, void *client_data);
360   void receive(ReAttachGraphic &, void *client_data);
361
362   void display_graphic(UAS_Pointer<Graphic> &);
363   
364
365 private:
366   NodeWindowAgent       *f_agent;
367 };
368