00001
00056 #ifndef INC_MGUI_SMLHELP_H
00057 #define INC_MGUI_SMLHELP_H
00058
00059 #ifndef INC_MGUI_EDIT_H
00060 #include <mgui/edit.h>
00061 #endif
00062
00063 #ifndef INC_MGUI_DLGSHELL_H
00064 #include <mgui/dlgshell.h>
00065 #endif
00066
00067 #ifndef INC_MGUI_SASH_H
00068 #include <mgui/sash.h>
00069 #endif
00070
00071 #ifndef INC_MGUI_TREE_H
00072 #include <mgui/tree.h>
00073 #endif
00074
00075 #ifndef INC_MGUI_TOOLBAR_H
00076 #include <mgui/toolbar.h>
00077 #endif
00078
00079 #ifndef INC_MGUI_TIMER_H
00080 #include <mgui/timer.h>
00081 #endif
00082
00083 #ifndef INC_MI32_MISTRING_H
00084 #include <mi32/mistring.h>
00085 #endif
00086
00087 #ifndef INC_MI32_XML_H
00088 #include <mi32/xml.h>
00089 #endif
00090
00091 #ifndef INC_MI32_MISTRINGLIST_H
00092 #include <mi32/mistringlist.h>
00093 #endif
00094
00095 #ifndef INC_MGUI_HTML_H
00096 #include <mgui/html.h>
00097 #endif
00098
00099 #ifndef GENERATING_DOXYGEN_OUTPUT
00100 namespace SML {
00101 class CONTEXT;
00102 class DOCCODES;
00103 }
00104 class SMLDOCCODES;
00105 class MISTATUSCONTEXT;
00106 namespace MITHREAD {
00107 class CRITICALSECTION;
00108 }
00109 #endif
00110
00111 namespace MGUI {
00112
00114 class DLG_SML_HELP : public MGUI::DLGSHELL {
00115 public:
00116
00117 enum SECTION {
00118 SECTION_Constants,
00119 SECTION_Fields,
00120 SECTION_Variables,
00121 SECTION_Functions,
00122 SECTION_Classes,
00123 SECTION_Keywords,
00124 SECTION_Operators,
00125 SECTION_Examples
00126 };
00127
00128 class SEARCHRESULT {
00129 public:
00130 SEARCHRESULT (
00131 ) :
00132 score(0)
00133 { }
00134
00135 SEARCHRESULT (
00136 const SEARCHRESULT& rhs
00137 ) :
00138 name(rhs.name),
00139 score(rhs.score)
00140 { }
00141
00142 ~SEARCHRESULT() {}
00143
00144 bool operator<(const SEARCHRESULT&rhs);
00145
00146 MISTRING name;
00147 INT32 score;
00148 };
00149
00150 DLG_SML_HELP (
00151 SML::CONTEXT* context,
00152 int segment
00153 );
00154
00155 virtual ~DLG_SML_HELP ();
00156
00157 void SetDelegateOnInsert (
00158 DELEGATE_VOID_MISTRING delegate
00159 ) { m_DelegateInsert = delegate; }
00160
00161 void JumpToSection (
00162 SECTION section
00163 );
00164
00165 bool SearchItem (
00166 INT32 id,
00167 SEARCHRESULT& result,
00168 const MISTRING& SearchString
00169 ) const;
00170
00171 #ifndef GENERATING_DOXYGEN_OUTPUT
00172 #ifdef WIN32 // A work in progress...
00173 void SearchProc (
00174 int start,
00175 int end,
00176 int interval,
00177 const MISTRING& SearchStr,
00178 MILIST<SEARCHRESULT>& Results,
00179 MITHREAD::CRITICALSECTION& cs,
00180 MISTATUSCONTEXT* StatusContext
00181 );
00182 #endif
00183 #endif
00184
00185 private:
00186 #ifndef GENERATING_DOXYGEN_OUTPUT
00187 enum BUTTON {
00188 BUTTON_NavigateBack,
00189 BUTTON_NavigateForward,
00190 BUTTON_Insert,
00191 BUTTON_InsertExample,
00192 BUTTON_Close
00193 };
00194
00195 class MYTREE : public MGUI::CTRL_TREE {
00196 public:
00197 MYTREE (
00198 ) :
00199 m_dlg(0)
00200 {}
00201
00202 void SetDlg (
00203 DLG_SML_HELP* dlg
00204 ) { m_dlg = dlg; }
00205
00206 private:
00207
00208 virtual bool v_OnChildVisibilityChanging (
00209 ITEMHND itemHnd,
00210 CHILDVISIBILITY visibility
00211 );
00212
00213 virtual void v_OnItemSelected (
00214 ITEMHND hdnItem
00215 );
00216
00217 virtual bool v_OnToolTipRequest (
00218 ITEMHND hndItem,
00219 HITRESULT,
00220 const LPOINT2D&,
00221 MGUI::CTRL_TOOLTIP&
00222 );
00223
00224 virtual MGUI::CUSTOMDRAW::RETVALUE v_OnCustomDraw (
00225 MGUI::CUSTOMDRAW_TREE& CustomDraw
00226 );
00227
00228 DLG_SML_HELP* m_dlg;
00229 };
00230
00231 enum ITEMTYPE {
00232 ITEMTYPE_ConstFolder,
00233 ITEMTYPE_Const,
00234 ITEMTYPE_VariableFolder,
00235 ITEMTYPE_Variable,
00236 ITEMTYPE_FieldFolder,
00237 ITEMTYPE_Field,
00238 ITEMTYPE_FuncFolder,
00239 ITEMTYPE_FuncGroup,
00240 ITEMTYPE_Func,
00241 ITEMTYPE_ClassFolder,
00242 ITEMTYPE_Class,
00243 ITEMTYPE_OperatorFolder,
00244 ITEMTYPE_Operator,
00245 ITEMTYPE_KeywordFolder,
00246 ITEMTYPE_Keyword,
00247 ITEMTYPE_SearchResult,
00248 ITEMTYPE_ExamplesFolder,
00249 ITEMTYPE_Example
00250 };
00251
00252 struct MYITEM {
00253 ITEMTYPE type;
00254 int num;
00255 const void* ptr;
00256 MGUI::CTRL_TREE::ITEMHND hnd;
00257
00258 static int CompareChar(MYITEM*, MYITEM*, void*);
00259 };
00260
00261 #ifdef X_NATIVE
00262 MGUI::CTRL_TOOLBAR m_ToolBar;
00263 #else
00264 MGUI::CTRL_PUSHBUTTON m_BtnNavigateBack;
00265 MGUI::CTRL_PUSHBUTTON m_BtnNavigateForward;
00266 MGUI::CTRL_PUSHBUTTON m_BtnInsert;
00267 MGUI::CTRL_PUSHBUTTON m_BtnInsertExample;
00268 #endif
00269 MYTREE m_Tree;
00270 MGUI::CTRL_SASH m_Sash;
00271 MGUI::CTRL_EDIT_TEXT m_Text;
00272 MGUI::FORM_HTML m_HTMLCtrl;
00273 SML::CONTEXT* m_context;
00274 int m_segment;
00275 DELEGATE_VOID_MISTRING m_DelegateInsert;
00276 MGUI::CTRL_EDIT_STRING m_EditSearch;
00277 #ifdef X_NATIVE
00278 MGUI::CTRL_TOOLBAR m_SearchToolBar;
00279 #else
00280 MGUI::CTRL_PUSHBUTTON m_BtnSearch;
00281 #endif
00282 MGUI::TIMER m_Timer;
00283 MISTRING m_QuickSearchValue;
00284 MGUI::CTRL_LABEL m_FindLabel;
00285
00286 virtual ERRVALUE v_CreateContent();
00287 SIMPLE_ARRAY<MYITEM> m_Items;
00288 SIMPLE_ARRAY<INT32> m_NavStack;
00289 INT32 m_NavIndex;
00290 MISTRINGLIST m_SearchResults;
00291 MGUI::CTRL_TREE::ITEMHND m_ItemHndExamplesFolder;
00292 bool m_bExamplesAdded;
00293 XMLDOC m_ClassGroupsDoc;
00294 SIMPLE_ARRAY<INT32> m_ClassGroupItems;
00295
00296 MGUI::CTRL_TREE::ITEMHND AddItem (
00297 MGUI::CTRL_TREE::ITEMHND parent,
00298 ITEMTYPE type,
00299 const MISTRING& name,
00300 MGUI::CTRL_TREE::CHILDPRESENCE = MGUI::CTRL_TREE::CHILDPRESENCE_No,
00301 int num = 0,
00302 const void* ptr = 0,
00303 MGUI::CTRL_TREE::ITEMHND after = MGUI::CTRL_TREE::ITEMHND_Last
00304 );
00305
00306 INT32 FindItemID (
00307 const MISTRING& name,
00308 MGUI::CTRL_TREE::ITEMHND parent = MGUI::CTRL_TREE::ITEMHND_Root
00309 );
00310
00311 #ifdef X_NATIVE
00312 void OnNavigateBack(MGUI::ID, bool);
00313 void OnNavigateForward(MGUI::ID, bool);
00314 void OnBtnInsert(MGUI::ID, bool);
00315 void OnBtnInsertExample(MGUI::ID, bool);
00316 #else
00317 void OnNavigateBack();
00318 void OnNavigateForward();
00319 void OnBtnInsert();
00320 void OnBtnInsertExample();
00321 #endif
00322
00323 void OnBtnClose(MGUI::ID, bool) { Close(); }
00324 void OnHyperLink(const MISTRING& href);
00325 void OnBtnSearch(MGUI::ID, bool);
00326 void OnSearch();
00327 void OnQuickSearch();
00328 void OnEditSearch();
00329
00330 void ShowItemHelp (INT32 id, bool push);
00331 ERRVALUE GenerateItemHelp (INT32 id, SML::DOCCODES& doc, bool bFull=true) const;
00332 void UpdateVariableList();
00333 void AddExampleNodes();
00334
00335 void UpdateTreeList (
00336 MGUI::CTRL_TREE::ITEMHND folder,
00337 const MISTRINGLIST& names,
00338 ITEMTYPE type
00339 );
00340
00341 friend class MYTREE;
00342 #endif
00343 };
00344
00345
00346 }
00347
00348
00349 #endif // INC_MGUI_SMLHELP_H
00350