1 /***********************************************************************/
2 /* Open Visualization Data Explorer                                    */
3 /* (C) Copyright IBM Corp. 1989,1999                                   */
4 /* ALL RIGHTS RESERVED                                                 */
5 /* This code licensed under the                                        */
6 /*    "IBM PUBLIC LICENSE - Open Visualization Data Explorer"          */
7 /***********************************************************************/
8 
9 #include <dxconfig.h>
10 
11 
12 #ifndef _TextSelector_h
13 #define _TextSelector_h
14 
15 #include <X11/Intrinsic.h>
16 
17 #include "UIComponent.h"
18 #include "List.h"
19 
20 #define ClassTextSelector "TextSelector"
21 
22 extern "C" void TextSelector_GrabReleaseTO(XtPointer , XtIntervalId* );
23 extern "C" void TextSelector_PopupListAH
24     (Widget , XtPointer , String, XEvent*, String*, Cardinal*);
25 extern "C" void TextSelector_EllipsisEH(Widget, XtPointer, XEvent*, Boolean*);
26 extern "C" void TextSelector_UngrabAP (Widget, XEvent*, String*, Cardinal* );
27 extern "C" void TextSelector_KeepingAP (Widget, XEvent*, String*, Cardinal* );
28 extern "C" void TextSelector_LosingAP (Widget, XEvent*, String*, Cardinal* );
29 extern "C" void TextSelector_MonitoringAP (Widget, XEvent*, String*, Cardinal* );
30 extern "C" Boolean TextSelector_RemoveHookWP (XtPointer clientData);
31 extern "C" void TextSelector_SelectCB(Widget, XtPointer, XtPointer);
32 extern "C" void TextSelector_ModifyCB(Widget, XtPointer, XtPointer);
33 extern "C" void TextSelector_ResolveCB(Widget, XtPointer, XtPointer);
34 extern "C" void TextSelector_ProcessOldEventEH(Widget , XtPointer , XEvent *, Boolean *);
35 extern "C" Boolean TextSelector_FillWP (XtPointer clientData);
36 extern "C" void TextSelector_RemoveGrabEH(Widget, XtPointer, XEvent*, Boolean*);
37 
38 //
39 // Class TextSelector:
40 // Used in Moved Nodes to Page... dialog
41 // and SelectorPulldownInteractor
42 // Just a pulldown menu.
43 //
44 class TextSelector: public UIComponent {
45 
46   private:
47 
48     Widget		parent;
49     XtIntervalId	button_release_timer;
50     Widget		diag_button;
51     Widget		popupMenu;
52     Widget		popupList;
53     boolean		is_grabbed;
54     XtActionHookId	action_hook;
55     int			starting_button;
56     Widget		vsb, hsb;
57     Widget		textField;
58     boolean		is_button_release_grabbed;
59     XEvent*		old_event;
60     XtWorkProcId	remove_hook_wpid;
61     XtWorkProcId	auto_fill_wpid;
62 
63     static 	String		DefaultResources[];
64     static	boolean		ClassInitialized;
65     static	TextSelector*	GrabOwner;
66 
67     List	item_list;
68     int*	selected_items;
69     int		selected_cnt;
70 
71 
72     //
73     // The the special menu-style list under the ... button (diag_button)
74     //
75     void grab(XEvent*);
76     void ungrab();
77 
78   protected:
79 
80     friend  void TextSelector_EllipsisEH(Widget, XtPointer, XEvent*, Boolean*);
81     friend  void TextSelector_GrabReleaseTO(XtPointer , XtIntervalId* );
82     friend  void TextSelector_PopupListAH
83 	(Widget , XtPointer , String, XEvent*, String*, Cardinal*);
84     friend void TextSelector_UngrabAP (Widget, XEvent*, String*, Cardinal* );
85     friend void TextSelector_KeepingAP (Widget, XEvent*, String*, Cardinal* );
86     friend void TextSelector_LosingAP (Widget, XEvent*, String*, Cardinal* );
87     friend void TextSelector_MonitoringAP (Widget, XEvent*, String*, Cardinal* );
88     friend void TextSelector_SelectCB(Widget, XtPointer, XtPointer);
89     friend void TextSelector_ModifyCB(Widget, XtPointer, XtPointer);
90     friend void TextSelector_ResolveCB(Widget, XtPointer, XtPointer);
91     friend void TextSelector_RemoveGrabEH(Widget, XtPointer, XEvent*, Boolean*);
92     friend void TextSelector_ProcessOldEventEH(Widget , XtPointer , XEvent *, Boolean *);
93     friend Boolean TextSelector_RemoveHookWP (XtPointer clientData);
94     friend Boolean TextSelector_FillWP (XtPointer clientData);
95 
96     virtual void updateList();
97 
98     static Cursor GrabCursor;
99 
100     //
101     // Get the text from a text widget and clip off the leading and
102     // trailing white space.
103     // The return string must be deleted by the caller.
104     //
105     static char *GetTextWidgetToken(Widget textWidget);
106 
107     void enableModifyCB(boolean enab = TRUE);
108     virtual boolean autoFill(boolean any_match=FALSE);
109     virtual boolean autoFill(boolean any_match, boolean& unique_match);
110 
getTextField()111     Widget getTextField() { return this->textField; }
112 
113     boolean case_sensitive;
114     boolean equalString(const char*, const char*);
115     boolean equalSubstring(const char*, const char*, int n);
116 
117   public:
118 
119     TextSelector ();
120 
121     ~TextSelector();
122 
123     void createTextSelector (Widget,XtCallbackProc,XtPointer,boolean use_button=TRUE);
124     void setItems (char* items[], int nitems);
125     void setSelectedItem (int );
126     int  getSelectedItem(char* item = NUL(char*));
127 
128     //
129     // Needed in order to implement WorkSpaceComponent::setAppearance.
130     // Normally menu panes in the Motif can be accessed thru subMenuId in a
131     // a CascadeButtonWidget, but not in this case.
132     //
133     void setMenuColors (Arg[], int);
134 
135     void setCaseSensitive(boolean cs=TRUE) { this->case_sensitive = cs; }
136 
137     //
138     // Returns a pointer to the class name.
139     //
getClassName()140     const char* getClassName() { return ClassTextSelector; }
141 };
142 
143 #endif
144 
145