PageRenderTime 48ms CodeModel.GetById 22ms RepoModel.GetById 1ms app.codeStats 0ms

/rekall-2.4.6/libs/kbase/kb_nodereg.cpp

#
C++ | 128 lines | 76 code | 20 blank | 32 comment | 5 complexity | 959a9028407ba9b66998b6a8ef3186fb MD5 | raw file
Possible License(s): GPL-2.0, CC-BY-SA-3.0, LGPL-2.1
  1. /***************************************************************************
  2. file : kb_nodereg.cpp
  3. copyright : (C) 1999,2000,2001,2002,2003,2004,2005
  4. by Mike Richardson
  5. (C) 2001,2002,2003,2004,2005
  6. by John Dean
  7. license : This file is released under the terms of
  8. the GNU General Public License, version 2. The
  9. copyright holders retain the right to release
  10. this code under diffenent non-exclusive licences.
  11. email : mike@quaking.demon.co.uk
  12. ***************************************************************************/
  13. #include <qnamespace.h>
  14. #include <qintdict.h>
  15. #include "kb_classes.h"
  16. #include "kb_nodereg.h"
  17. #include "kb_attr.h"
  18. #include "kb_link.h"
  19. #include "kb_tree.h"
  20. /* registerAllNodes */
  21. /* ---------------- */
  22. /* Register all nodes. This is done here rather than using static */
  23. /* constructors because of cross-platform static constructor support */
  24. /* issues. */
  25. void LIBKBASE_API registerAllNodes ()
  26. {
  27. static bool done ;
  28. if (done) return ;
  29. REGNEWNODE (Button, __TR("New &Button"), 0, KNF_FORM| KNF_BLOCK|KNF_STATIC)
  30. REGNEWNODE (Check, __TR("New Chec&k"), 0, KNF_FORM|KNF_REPORT|KNF_BLOCK|KNF_DATA )
  31. REGNEWNODE (Choice, __TR("New &Choice"), 0, KNF_FORM| KNF_BLOCK|KNF_DATA )
  32. REGNEWNODE (ListBox, __TR("New &ListBox"), 0, KNF_FORM| KNF_BLOCK|KNF_DATA )
  33. REGNEWNODE (CompLink, (cchar *)0, 0, KNF_FORM|KNF_REPORT )
  34. REGNEWNODE (Config, (cchar *)0, 0, KNF_FORM|KNF_REPORT )
  35. REGNEWNODE (Field, __TR("New &Field"), 0, KNF_FORM|KNF_REPORT|KNF_BLOCK|KNF_DATA )
  36. REGNEWNODENAMED (FormBlock, (cchar *)0, 0, KNF_FORM, FormBlock )
  37. REGNEWNODENAMED (FormBlock, (cchar *)0, 0, KNF_FORM, FormSubBlock )
  38. REGNEWNODENAMED (Header, (cchar *)0, 0, KNF_REPORT, BlockHeader )
  39. REGNEWNODENAMED (Footer, (cchar *)0, 0, KNF_REPORT, BlockFooter )
  40. REGNEWNODENAMED (Container, (cchar *)0, 0, KNF_FORM, Container )
  41. REGNEWNODENAMED (TabberPage, (cchar *)0, 0, KNF_FORM, TabberPage )
  42. REGNEWNODENAMED (StackPage, (cchar *)0, 0, KNF_FORM, StackPage )
  43. REGNEWNODE (Graphic, __TR("New &Graphic"), 0, KNF_FORM|KNF_REPORT|KNF_BLOCK|KNF_STATIC)
  44. REGNEWNODE (Grid, (cchar *)0, 0, KNF_FORM|KNF_BLOCK|KNF_STATIC )
  45. REGNEWNODE (Hidden, (cchar *)0, 0, KNF_FORM|KNF_REPORT )
  46. REGNEWNODE (Import, (cchar *)0, 0, KNF_FORM|KNF_REPORT )
  47. REGNEWNODE (Label, __TR("New &Label"), 0, KNF_FORM|KNF_REPORT|KNF_BLOCK|KNF_STATIC)
  48. REGNEWNODE (Link, __TR("New &Link"), KBLink::makeLinkPopup, KNF_FORM|KNF_REPORT|KNF_BLOCK|KNF_DATA )
  49. REGNEWNODE (Tree, __TR("New &Tree"), KBTree::makeTreePopup, KNF_FORM| KNF_BLOCK|KNF_DATA )
  50. REGNEWNODE (Memo, __TR("New &Memo"), 0, KNF_FORM|KNF_REPORT|KNF_BLOCK|KNF_DATA )
  51. REGNEWNODE (Override, (cchar *)0, 0, KNF_FORM|KNF_REPORT )
  52. REGNEWNODE (Param, (cchar *)0, 0, KNF_FORM|KNF_REPORT )
  53. REGNEWNODE (Pixmap, __TR("New &Pixmap"), 0, KNF_FORM|KNF_REPORT|KNF_BLOCK|KNF_DATA)
  54. REGNEWNODE (QryExpr, (cchar *)0, 0, KNF_QUERY )
  55. REGNEWNODE (QryNull, (cchar *)0, 0, KNF_FORM|KNF_REPORT )
  56. REGNEWNODE (QryQuery, (cchar *)0, 0, KNF_FORM|KNF_REPORT )
  57. REGNEWNODE (QrySQL, (cchar *)0, 0, KNF_FORM|KNF_REPORT )
  58. REGNEWNODE (QryTable, (cchar *)0, 0, KNF_FORM|KNF_REPORT )
  59. REGNEWNODENAMED (ReportBlock, (cchar *)0, 0, KNF_REPORT, ReportBlock )
  60. REGNEWNODENAMED (ReportBlock, (cchar *)0, 0, KNF_REPORT, ReportSubBlock )
  61. REGNEWNODE (RichText, __TR("New &Rich Text"), 0, KNF_FORM|KNF_REPORT|KNF_BLOCK|KNF_DATA )
  62. REGNEWNODE (RowMark, __TR("New &Rowmark"), 0, KNF_FORM|KNF_BLOCK|KNF_DATA )
  63. REGNEWNODE (Script, (cchar *)0, 0, KNF_FORM|KNF_REPORT )
  64. REGNEWNODE (SpinBox, __TR("New &Spinbox"), 0, KNF_FORM|KNF_BLOCK|KNF_DATA )
  65. REGNEWNODE (Summary, __TR("New &Summary"), 0, KNF_REPORT|KNF_BLOCK|KNF_FRAMER|KNF_DATA)
  66. REGNEWNODE (Tabber, __TR("New &Tab control"), 0, KNF_FORM|KNF_BLOCK|KNF_STATIC )
  67. REGNEWNODE (Stack, __TR("New &Stack control"), 0, KNF_FORM|KNF_BLOCK|KNF_STATIC )
  68. REGNEWNODE (Table, (cchar *)0, 0, KNF_QUERY )
  69. REGNEWNODE (TestSuite, (cchar *)0, 0, KNF_FORM )
  70. done = true ;
  71. }
  72. /* ------------------------------------------------------------------ */
  73. /* nodeSpecMap */
  74. /* ----------- */
  75. /* Each node specification, when referenced from a menu item, is */
  76. /* allocated a unique ID, which is used as the menu item identifier */
  77. /* (and hence which is passed through the menu activation signal. */
  78. static QIntDict<NodeSpec> *nodeSpecMap ;
  79. static int nextNodeSpecId ;
  80. /* nodeSpecToId: Get identifier for a node specification */
  81. /* spec : NodeSpec * : Specification */
  82. /* (returns) : int : Identifier */
  83. int nodeSpecToId
  84. ( NodeSpec *spec
  85. )
  86. {
  87. /* If the node specifcation does not already have an identifer */
  88. /* then allocate a new one and insert into the mapping */
  89. /* dictionary, which is createwd on demand. */
  90. if (spec->m_id <= 0)
  91. {
  92. if (nodeSpecMap == 0)
  93. nodeSpecMap = new QIntDict<NodeSpec> ;
  94. nodeSpecMap->insert (nextNodeSpecId, spec) ;
  95. spec->m_id = nextNodeSpecId ;
  96. nextNodeSpecId += 1 ;
  97. }
  98. return spec->m_id ;
  99. }
  100. /* idToNodeSpec: Return node specification for specified identifier */
  101. /* id : int : Identifier */
  102. /* (returns) : NodeSpec * : Specification */
  103. NodeSpec*idToNodeSpec
  104. ( int id
  105. )
  106. {
  107. return nodeSpecMap == 0 ? 0 : nodeSpecMap->find (id) ;
  108. }