1 /* $XConsortium: NodeWindowAgentMotif.hh /main/24 1996/11/23 14:13:00 cde-hal $ */
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.
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
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
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.
30 * HAL COMPUTER SYSTEMS INTERNATIONAL, LTD.
43 class WXmToggleButton;
45 class WXmPulldownMenu;
47 class WXmScrolledWindow;
50 class WXmCascadeButton;
54 class SelectionChanged;
57 class MarkSelectionChanged;
65 // class DetachGraphic;
66 // class ReAttachGraphic;
67 // class DisplayGraphic;
69 class GraphicsHandler ;
70 // self is used by some MACROS somewhere, but the X include files use
71 // it as something different
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
80 #include <DtI/DisplayAreaP.h>
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>,
97 friend class Ancestor;
99 NodeWindowAgent(u_int serial_no = 0);
102 void display (UAS_Pointer<UAS_Common> &n);
104 unsigned long last_access_time ()
105 { return (f_last_access_time); }
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); }
112 { return (f_locked); }
114 void update_fonts(unsigned int serial_number = 0);
116 // if graphic is visible, refresh screen
117 void refresh(const UAS_Pointer<Graphic> &);
119 // re-display node via display() functions...when style sheet changes
122 void selection_changed ();
123 bool selection_contains_graphic();
125 // only for use by the Canvas Help Display Area hypertext callback
126 void link_to (const char *locator);
128 // when the canvas sends us a resize callback
129 void canvas_resize ();
131 void vscroll (unsigned int value);
132 void hscroll (unsigned int value);
137 void detach( UAS_Pointer<Graphic> &);
138 void reattach( UAS_Pointer<Graphic> &);
140 NodeViewInfo *node_view_info() { return f_node_view_info; }
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
147 void open_new_node();
150 public: // Motif-version functions (usable by other Motif agents only)
152 void close_set_sensitive(Boolean set) {
153 f_close_sensitive = set; if (f_close) XtSetSensitive(f_close, set); }
155 private: // functions
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);
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();
190 void title_menu_activate (WCallback *);
193 static void detach_graphicCB(Widget, XtPointer, XtPointer);
194 void detach_graphic();
195 _DtCvSegment *xy_to_seg(int, int, _DtCvElemType*);
197 void static dialog_mapped (Widget, XtPointer, XEvent *, Boolean *);
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);
205 void text_callback(WCallback *wcb);
207 void add_quick_help (Widget, const char*);
208 static void quick_helpEH (Widget, XtPointer, XEvent *, Boolean *);
210 void receive (MarkSelectionChanged &, void *client_data);
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);
217 static void delete_markCB(Widget, XtPointer, XtPointer);
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();
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);
234 void layout_mark_icons() ;
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);
242 void replace(UAS_Pointer<Graphic> &gr);
246 void document_id_display();
249 static void show_locatorCB(Widget, XtPointer closure, XtPointer);
252 #ifdef MOSAIC_SUPPORT
253 void import_mosaic_hotlist();
258 void monitor(WCallback *);
262 void SetTopic(_DtCvTopicPtr);
267 private: // variables
268 NodeViewInfo *f_node_view_info; // Display specific view info.
270 // NOTE: Maybe these losers should be references?!
271 WTopLevelShell *f_shell;
273 DtHelpDispAreaStruct *f_help_dsp_area ;
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;
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;
310 xList<Ancestor *> f_ancestor_list;
311 Ancestor *f_current_ancestor;
314 u_int f_move_mark_sensitive;
315 u_int f_last_access_time;
317 WCallback *f_wm_delete_callback;
319 xList<BookTab *> f_tab_btn_list;
321 UAS_Pointer<UAS_Common> f_preview_document;
322 WTimeOut *f_preview_timeout;
324 u_int f_serial_number;
326 LocalHistoryMgr f_history_list;
327 bool f_history_display;
329 // Marks (from ViewportAgent - brad 12/20/95)
330 xList<MarkCanvas *> f_mark_list ;
331 xList<MarkIcon *> f_mark_icon_list ;
333 unsigned int f_vscrollbar_offset ;
334 unsigned int f_hscrollbar_offset ;
335 _DtCvSegment *f_graphic_segment;
337 GraphicsHandler *f_graphics_handler ;
339 bool f_close_sensitive;
341 static unsigned long g_black;
342 static unsigned long g_grey;
344 UAS_List<UAS_String> f_textstore;
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>
356 GraphicsHandler(NodeWindowAgent *agent);
359 void receive(DetachGraphic &, void *client_data);
360 void receive(ReAttachGraphic &, void *client_data);
362 void display_graphic(UAS_Pointer<Graphic> &);
366 NodeWindowAgent *f_agent;