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