/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
- /***************************************************************************
- file : kb_nodereg.cpp
- copyright : (C) 1999,2000,2001,2002,2003,2004,2005
- by Mike Richardson
- (C) 2001,2002,2003,2004,2005
- by John Dean
- license : This file is released under the terms of
- the GNU General Public License, version 2. The
- copyright holders retain the right to release
- this code under diffenent non-exclusive licences.
- email : mike@quaking.demon.co.uk
- ***************************************************************************/
- #include <qnamespace.h>
- #include <qintdict.h>
- #include "kb_classes.h"
- #include "kb_nodereg.h"
- #include "kb_attr.h"
- #include "kb_link.h"
- #include "kb_tree.h"
- /* registerAllNodes */
- /* ---------------- */
- /* Register all nodes. This is done here rather than using static */
- /* constructors because of cross-platform static constructor support */
- /* issues. */
- void LIBKBASE_API registerAllNodes ()
- {
- static bool done ;
- if (done) return ;
- REGNEWNODE (Button, __TR("New &Button"), 0, KNF_FORM| KNF_BLOCK|KNF_STATIC)
- REGNEWNODE (Check, __TR("New Chec&k"), 0, KNF_FORM|KNF_REPORT|KNF_BLOCK|KNF_DATA )
- REGNEWNODE (Choice, __TR("New &Choice"), 0, KNF_FORM| KNF_BLOCK|KNF_DATA )
- REGNEWNODE (ListBox, __TR("New &ListBox"), 0, KNF_FORM| KNF_BLOCK|KNF_DATA )
- REGNEWNODE (CompLink, (cchar *)0, 0, KNF_FORM|KNF_REPORT )
- REGNEWNODE (Config, (cchar *)0, 0, KNF_FORM|KNF_REPORT )
- REGNEWNODE (Field, __TR("New &Field"), 0, KNF_FORM|KNF_REPORT|KNF_BLOCK|KNF_DATA )
- REGNEWNODENAMED (FormBlock, (cchar *)0, 0, KNF_FORM, FormBlock )
- REGNEWNODENAMED (FormBlock, (cchar *)0, 0, KNF_FORM, FormSubBlock )
- REGNEWNODENAMED (Header, (cchar *)0, 0, KNF_REPORT, BlockHeader )
- REGNEWNODENAMED (Footer, (cchar *)0, 0, KNF_REPORT, BlockFooter )
- REGNEWNODENAMED (Container, (cchar *)0, 0, KNF_FORM, Container )
- REGNEWNODENAMED (TabberPage, (cchar *)0, 0, KNF_FORM, TabberPage )
- REGNEWNODENAMED (StackPage, (cchar *)0, 0, KNF_FORM, StackPage )
- REGNEWNODE (Graphic, __TR("New &Graphic"), 0, KNF_FORM|KNF_REPORT|KNF_BLOCK|KNF_STATIC)
- REGNEWNODE (Grid, (cchar *)0, 0, KNF_FORM|KNF_BLOCK|KNF_STATIC )
- REGNEWNODE (Hidden, (cchar *)0, 0, KNF_FORM|KNF_REPORT )
- REGNEWNODE (Import, (cchar *)0, 0, KNF_FORM|KNF_REPORT )
- REGNEWNODE (Label, __TR("New &Label"), 0, KNF_FORM|KNF_REPORT|KNF_BLOCK|KNF_STATIC)
- REGNEWNODE (Link, __TR("New &Link"), KBLink::makeLinkPopup, KNF_FORM|KNF_REPORT|KNF_BLOCK|KNF_DATA )
- REGNEWNODE (Tree, __TR("New &Tree"), KBTree::makeTreePopup, KNF_FORM| KNF_BLOCK|KNF_DATA )
- REGNEWNODE (Memo, __TR("New &Memo"), 0, KNF_FORM|KNF_REPORT|KNF_BLOCK|KNF_DATA )
- REGNEWNODE (Override, (cchar *)0, 0, KNF_FORM|KNF_REPORT )
- REGNEWNODE (Param, (cchar *)0, 0, KNF_FORM|KNF_REPORT )
- REGNEWNODE (Pixmap, __TR("New &Pixmap"), 0, KNF_FORM|KNF_REPORT|KNF_BLOCK|KNF_DATA)
- REGNEWNODE (QryExpr, (cchar *)0, 0, KNF_QUERY )
- REGNEWNODE (QryNull, (cchar *)0, 0, KNF_FORM|KNF_REPORT )
- REGNEWNODE (QryQuery, (cchar *)0, 0, KNF_FORM|KNF_REPORT )
- REGNEWNODE (QrySQL, (cchar *)0, 0, KNF_FORM|KNF_REPORT )
- REGNEWNODE (QryTable, (cchar *)0, 0, KNF_FORM|KNF_REPORT )
- REGNEWNODENAMED (ReportBlock, (cchar *)0, 0, KNF_REPORT, ReportBlock )
- REGNEWNODENAMED (ReportBlock, (cchar *)0, 0, KNF_REPORT, ReportSubBlock )
- REGNEWNODE (RichText, __TR("New &Rich Text"), 0, KNF_FORM|KNF_REPORT|KNF_BLOCK|KNF_DATA )
- REGNEWNODE (RowMark, __TR("New &Rowmark"), 0, KNF_FORM|KNF_BLOCK|KNF_DATA )
- REGNEWNODE (Script, (cchar *)0, 0, KNF_FORM|KNF_REPORT )
- REGNEWNODE (SpinBox, __TR("New &Spinbox"), 0, KNF_FORM|KNF_BLOCK|KNF_DATA )
- REGNEWNODE (Summary, __TR("New &Summary"), 0, KNF_REPORT|KNF_BLOCK|KNF_FRAMER|KNF_DATA)
- REGNEWNODE (Tabber, __TR("New &Tab control"), 0, KNF_FORM|KNF_BLOCK|KNF_STATIC )
- REGNEWNODE (Stack, __TR("New &Stack control"), 0, KNF_FORM|KNF_BLOCK|KNF_STATIC )
- REGNEWNODE (Table, (cchar *)0, 0, KNF_QUERY )
- REGNEWNODE (TestSuite, (cchar *)0, 0, KNF_FORM )
- done = true ;
- }
- /* ------------------------------------------------------------------ */
- /* nodeSpecMap */
- /* ----------- */
- /* Each node specification, when referenced from a menu item, is */
- /* allocated a unique ID, which is used as the menu item identifier */
- /* (and hence which is passed through the menu activation signal. */
- static QIntDict<NodeSpec> *nodeSpecMap ;
- static int nextNodeSpecId ;
- /* nodeSpecToId: Get identifier for a node specification */
- /* spec : NodeSpec * : Specification */
- /* (returns) : int : Identifier */
- int nodeSpecToId
- ( NodeSpec *spec
- )
- {
- /* If the node specifcation does not already have an identifer */
- /* then allocate a new one and insert into the mapping */
- /* dictionary, which is createwd on demand. */
- if (spec->m_id <= 0)
- {
- if (nodeSpecMap == 0)
- nodeSpecMap = new QIntDict<NodeSpec> ;
- nodeSpecMap->insert (nextNodeSpecId, spec) ;
- spec->m_id = nextNodeSpecId ;
- nextNodeSpecId += 1 ;
- }
- return spec->m_id ;
- }
- /* idToNodeSpec: Return node specification for specified identifier */
- /* id : int : Identifier */
- /* (returns) : NodeSpec * : Specification */
- NodeSpec*idToNodeSpec
- ( int id
- )
- {
- return nodeSpecMap == 0 ? 0 : nodeSpecMap->find (id) ;
- }