• NX二次开发-BlockUI的Tree树控件


    关于BlockUI的Tree树控件只要研究UGOPEN里西门子官方的那个例子在结合去查NXOPEN的帮助基本就可以了。[不过我是看唐工的视频学会的,没办法自己领悟性不太强]

      1 //=============================================================================
      2 //
      3 //                   Copyright (c) 2009 Siemens PLM Solutions
      4 //                     Unpublished - All rights reserved
      5 //===============================================================================
      6 //File description: Sample NX/Open Application for Block Styler
      7 //===============================================================================
      8 //
      9 
     10 //  WARNING!!  This file is overwritten by the Block Styler while generating
     11 //  the automation code. Any modifications to this file will be lost after
     12 //  generating the code again.
     13 
     14 //==============================================================================
     15 
     16 #ifndef TREELISTDEMO_H_INCLUDED
     17 #define TREELISTDEMO_H_INCLUDED
     18 
     19 //------------------------------------------------------------------------------
     20 //These includes are needed for the following template code
     21 //------------------------------------------------------------------------------
     22 #include <uf_defs.h>
     23 #include <string.h>
     24 #include <uf_ui_types.h>
     25 #include <iostream>
     26 #include <NXOpen/Session.hxx>
     27 #include <NXOpen/UI.hxx>
     28 #include <NXOpen/NXMessageBox.hxx>
     29 #include <NXOpen/Callback.hxx>
     30 #include <NXOpen/NXException.hxx>
     31 #include <NXOpen/ListingWindow.hxx>
     32 #include <NXOpen/BlockStyler_UIBlock.hxx>
     33 #include <NXOpen/BlockStyler_BlockDialog.hxx>
     34 #include <NXOpen/BlockStyler_PropertyList.hxx>
     35 #include <NXOpen/BlockStyler_Tree.hxx>
     36 #include <NXOpen/BlockStyler_Node.hxx>
     37 
     38 //------------------------------------------------------------------------------
     39 //Bit Option for Property: SnapPointTypesEnabled
     40 //------------------------------------------------------------------------------
     41 #define              SnapPointTypesEnabled_UserDefined (1 << 0);
     42 #define                 SnapPointTypesEnabled_Inferred (1 << 1);
     43 #define           SnapPointTypesEnabled_ScreenPosition (1 << 2);
     44 #define                 SnapPointTypesEnabled_EndPoint (1 << 3);
     45 #define                 SnapPointTypesEnabled_MidPoint (1 << 4);
     46 #define             SnapPointTypesEnabled_ControlPoint (1 << 5);
     47 #define             SnapPointTypesEnabled_Intersection (1 << 6);
     48 #define                SnapPointTypesEnabled_ArcCenter (1 << 7);
     49 #define            SnapPointTypesEnabled_QuadrantPoint (1 << 8);
     50 #define            SnapPointTypesEnabled_ExistingPoint (1 << 9);
     51 #define             SnapPointTypesEnabled_PointonCurve (1 <<10);
     52 #define           SnapPointTypesEnabled_PointonSurface (1 <<11);
     53 #define         SnapPointTypesEnabled_PointConstructor (1 <<12);
     54 #define     SnapPointTypesEnabled_TwocurveIntersection (1 <<13);
     55 #define             SnapPointTypesEnabled_TangentPoint (1 <<14);
     56 #define                    SnapPointTypesEnabled_Poles (1 <<15);
     57 #define         SnapPointTypesEnabled_BoundedGridPoint (1 <<16);
     58 //------------------------------------------------------------------------------
     59 //Bit Option for Property: SnapPointTypesOnByDefault
     60 //------------------------------------------------------------------------------
     61 #define             SnapPointTypesOnByDefault_EndPoint (1 << 3);
     62 #define             SnapPointTypesOnByDefault_MidPoint (1 << 4);
     63 #define         SnapPointTypesOnByDefault_ControlPoint (1 << 5);
     64 #define         SnapPointTypesOnByDefault_Intersection (1 << 6);
     65 #define            SnapPointTypesOnByDefault_ArcCenter (1 << 7);
     66 #define        SnapPointTypesOnByDefault_QuadrantPoint (1 << 8);
     67 #define        SnapPointTypesOnByDefault_ExistingPoint (1 << 9);
     68 #define         SnapPointTypesOnByDefault_PointonCurve (1 <<10);
     69 #define       SnapPointTypesOnByDefault_PointonSurface (1 <<11);
     70 #define     SnapPointTypesOnByDefault_PointConstructor (1 <<12);
     71 #define     SnapPointTypesOnByDefault_BoundedGridPoint (1 <<16);
     72 //------------------------------------------------------------------------------
     73 // Namespaces needed for following template
     74 //------------------------------------------------------------------------------
     75 using namespace std;
     76 using namespace NXOpen;
     77 using namespace NXOpen::BlockStyler;
     78 
     79 //------------------------------------------------------------------------------
     80 // Forward declaration for Class
     81 //------------------------------------------------------------------------------
     82 class TreeListDemo;
     83 //
     84 //------------------------------------------------------------------------------
     85 // Declaration of global variables
     86 //------------------------------------------------------------------------------
     87 extern TreeListDemo *theTreeListDemo;
     88 
     89 class TreeListDemo
     90 {
     91     // class members
     92 public:
     93     static Session *theSession;
     94     static UI *theUI;
     95     TreeListDemo();
     96     ~TreeListDemo();
     97     int Show();
     98     
     99     //----------------------- BlockStyler Callback Prototypes ---------------------
    100     // The following member function prototypes define the callbacks 
    101     // specified in your BlockStyler dialog.  The empty implementaiton
    102     // of these prototypes is provided in the TreeListDemo.cpp file. 
    103     // You are REQUIRED to write the implementation for these funtions.
    104     //------------------------------------------------------------------------------
    105     void initialize_cb();
    106     void dialogShown_cb();
    107     int apply_cb();
    108     int ok_cb();
    109     int update_cb(NXOpen::BlockStyler::UIBlock* block);
    110     void focusNotify_cb(NXOpen::BlockStyler::UIBlock* block, bool focus);
    111 
    112     
    113     //void OnExpandCallback (NXOpen::BlockStyler::Tree *tree, NXOpen::BlockStyler::Node *node);
    114     //void OnInsertColumnCallback(NXOpen::BlockStyler::Tree *tree, NXOpen::BlockStyler::Node *node, int columnID);
    115     void OnInsertNodeCallback(NXOpen::BlockStyler::Tree *tree, NXOpen::BlockStyler::Node *node);
    116     void OnDeleteNodeCallback(NXOpen::BlockStyler::Tree *tree, NXOpen::BlockStyler::Node *node);
    117     //void OnPreSelectCallback(NXOpen::BlockStyler::Tree *tree, NXOpen::BlockStyler::Node *node, int ID, bool selected);
    118     void OnSelectCallback(NXOpen::BlockStyler::Tree *, NXOpen::BlockStyler::Node *, int columnID, bool selected);
    119     void OnStateChangeCallback(NXOpen::BlockStyler::Tree *tree, NXOpen::BlockStyler::Node *node, int state);
    120     NXString ToolTipTextCallback(NXOpen::BlockStyler::Tree *tree, NXOpen::BlockStyler::Node *node, int columnID);
    121     //int ColumnSortCallback(NXOpen::BlockStyler::Tree *tree, int columnID, NXOpen::BlockStyler::Node *node1, NXOpen::BlockStyler::Node *node2);
    122     NXString StateIconNameCallback(NXOpen::BlockStyler::Tree *tree, NXOpen::BlockStyler::Node *node, int state);
    123     NXOpen::BlockStyler::Tree::BeginLabelEditState OnBeginLabelEditCallback(NXOpen::BlockStyler::Tree *tree, NXOpen::BlockStyler::Node *node, int columnID);
    124     NXOpen::BlockStyler::Tree::EndLabelEditState OnEndLabelEditCallback(NXOpen::BlockStyler::Tree *tree, NXOpen::BlockStyler::Node *node, int, NXString editedText);
    125     NXOpen::BlockStyler::Tree::EditControlOption OnEditOptionSelectedCallback(NXOpen::BlockStyler::Tree *tree, NXOpen::BlockStyler::Node *node, int columnID, int selectedOptionID, NXString selectedOptionText, NXOpen::BlockStyler::Tree::ControlType type);
    126     NXOpen::BlockStyler::Tree::ControlType AskEditControlCallback(NXOpen::BlockStyler::Tree *tree, NXOpen::BlockStyler::Node *node, int columnID);
    127     void OnMenuCallback(NXOpen::BlockStyler::Tree *, NXOpen::BlockStyler::Node *node, int columnID);
    128     void OnMenuSelectionCallback(NXOpen::BlockStyler::Tree *tree, NXOpen::BlockStyler::Node *node, int menuItemID);
    129     NXOpen::BlockStyler::Node::DropType IsDropAllowedCallback(NXOpen::BlockStyler::Tree *tree, NXOpen::BlockStyler::Node *node, int columnID, NXOpen::BlockStyler::Node *targetNode, int targetColumnID);
    130     NXOpen::BlockStyler::Node::DragType IsDragAllowedCallback(NXOpen::BlockStyler::Tree *tree, NXOpen::BlockStyler::Node *node, int columnID);
    131     bool OnDropCallback(NXOpen::BlockStyler::Tree *tree, std::vector<NXOpen::BlockStyler::Node *> node, int columnID, NXOpen::BlockStyler::Node *targetNode, int targetColumnID, NXOpen::BlockStyler::Node::DropType dropType, int dropMenuItemId);
    132     //void OnDropMenuCallback(NXOpen::BlockStyler::Tree *tree, NXOpen::BlockStyler::Node *node, int columnID, NXOpen::BlockStyler::Node *targetNode, int targetColumnID);
    133     void OnDefaultAction(NXOpen::BlockStyler::Tree *tree, NXOpen::BlockStyler::Node *node, int columnID);
    134 private:
    135     std::string theDialogName;
    136     NXOpen::BlockStyler::BlockDialog* theDialog;
    137     NXOpen::BlockStyler::UIBlock* group0;// Block type: Group
    138     NXOpen::BlockStyler::Tree* tree_control0;// Block type: Tree Control
    139     NXOpen::BlockStyler::UIBlock* addDeleteNodeGroup;// Block type: Group
    140     NXOpen::BlockStyler::UIBlock* nodeString;// Block type: String
    141     NXOpen::BlockStyler::UIBlock* addNodeButton;// Block type: Button
    142     NXOpen::BlockStyler::UIBlock* deleteNodeButton;// Block type: Button
    143     NXOpen::BlockStyler::UIBlock* stateIconGroup;// Block type: Group
    144     NXOpen::BlockStyler::UIBlock* stateIconOptions;// Block type: Enumeration
    145     NXOpen::BlockStyler::UIBlock* nodeToolTip;// Block type: String
    146     NXOpen::BlockStyler::UIBlock* NodeEditGroup;// Block type: Group
    147     NXOpen::BlockStyler::UIBlock* nodeEditOptions;// Block type: Enumeration
    148     NXOpen::BlockStyler::UIBlock* menuGroup;// Block type: Group
    149     NXOpen::BlockStyler::UIBlock* showMenuToggle;// Block type: Toggle
    150     NXOpen::BlockStyler::UIBlock* dragDropGroup;// Block type: Group
    151     NXOpen::BlockStyler::UIBlock* disallowDragToggle;// Block type: Toggle
    152     NXOpen::BlockStyler::UIBlock* dropOptions;// Block type: Enumeration
    153     NXOpen::BlockStyler::UIBlock* defaultActionGroup;// Block type: Group
    154     NXOpen::BlockStyler::UIBlock* defaultActionToggle;// Block type: Toggle
    155     NXOpen::BlockStyler::UIBlock* nodeDataGroup;// Block type: Group
    156     NXOpen::BlockStyler::UIBlock* instructions;// Block type: Multiline String
    157     NXOpen::BlockStyler::UIBlock* selection0;// Block type: Selection
    158     NXOpen::BlockStyler::UIBlock* addCrossSelectionNodeButton;// Block type: Button
    159     NXOpen::BlockStyler::UIBlock* redrawGroup;// Block type: Group
    160     NXOpen::BlockStyler::UIBlock* redrawInstruction;// Block type: Multiline String
    161     NXOpen::BlockStyler::UIBlock* redrawToggle;// Block type: Toggle
    162     NXOpen::BlockStyler::UIBlock* listingWindowGroup;// Block type: Group
    163     NXOpen::BlockStyler::UIBlock* listingWindowToggle;// Block type: Toggle
    164     void DeleteSelectedNodes();
    165     BlockStyler::Node* CreateAndAddNode(BlockStyler::Node* afterNode);
    166     void WriteCallbackToListingWindow(NXString);
    167     
    168 };
    169 #endif //TREELISTDEMO_H_INCLUDED
    170 
    171 Caesar卢尚宇
    172 2019年11月23日
       1 //===============================================================================
       2 //
       3 //                   Copyright (c) 2009 Siemens PLM Solutions
       4 //                     Unpublished - All rights reserved
       5 //===============================================================================
       6 //File description: Sample NX/Open Application for Block Styler
       7 //===============================================================================
       8 //
       9 
      10 //  WARNING!!  This file is overwritten by the Block UI Styler while generating
      11 //  the automation code. Any modifications to this file will be lost after
      12 //  generating the code again.
      13 
      14 //================================================================================
      15 
      16 //================================================================================
      17 //  Purpose:  This TEMPLATE file contains C++ source to guide you in the
      18 //  construction of your Block application dialog. The generation of your
      19 //  dialog file (.dlx extension) is the first step towards dialog construction
      20 //  within NX.  You must now create a NX Open application that
      21 //  utilizes this file (.dlx).
      22 //
      23 //  The information in this file provides you with the following:
      24 //
      25 //  1.  Help on how to load and display your Block UI Styler dialog in NX
      26 //      using APIs provided in NXOpen.BlockStyler namespace
      27 //  2.  The empty callback methods (stubs) associated with your dialog items
      28 //      have also been placed in this file. These empty methods have been
      29 //      created simply to start you along with your coding requirements.
      30 //      The method name, argument list and possible return values have already
      31 //      been provided for you.
      32 //================================================================================
      33 
      34 //--------------------------------------------------------------------------------
      35 //These includes are needed for the following template code
      36 //--------------------------------------------------------------------------------
      37 #include "TreeListDemo.hpp"
      38 #include <sstream>
      39 using namespace NXOpen;
      40 using namespace NXOpen::BlockStyler;
      41 
      42 //------------------------------------------------------------------------------
      43 // Initialize static variables
      44 //------------------------------------------------------------------------------
      45 Session *(TreeListDemo::theSession) = NULL;
      46 UI *(TreeListDemo::theUI) = NULL;
      47 
      48 //------------------------------------------------------------------------------
      49 // Declaration of global variables
      50 //------------------------------------------------------------------------------
      51 TreeListDemo *theTreeListDemo;
      52 //------------------------------------------------------------------------------
      53 // Constructor for NX Styler class
      54 //------------------------------------------------------------------------------
      55 TreeListDemo::TreeListDemo()
      56 {
      57     try
      58     {
      59         // Initialize the NX Open C++ API environment
      60         TreeListDemo::theSession = NXOpen::Session::GetSession();
      61         TreeListDemo::theUI = UI::GetUI();
      62         theDialogName = "TreeListDemo.dlx";
      63         theDialog = TreeListDemo::theUI->CreateDialog(theDialogName.c_str());
      64         // Registration of callback functions
      65         theDialog->AddApplyHandler(make_callback(this, &TreeListDemo::apply_cb));
      66         theDialog->AddOkHandler(make_callback(this, &TreeListDemo::ok_cb));
      67         theDialog->AddUpdateHandler(make_callback(this, &TreeListDemo::update_cb));
      68         theDialog->AddInitializeHandler(make_callback(this, &TreeListDemo::initialize_cb));
      69         theDialog->AddFocusNotifyHandler(make_callback(this, &TreeListDemo::focusNotify_cb));
      70         theDialog->AddDialogShownHandler(make_callback(this, &TreeListDemo::dialogShown_cb));
      71     }
      72     catch(exception& ex)
      73     {
      74         //---- Enter your exception handling code here -----
      75         throw;
      76     }
      77 }
      78 
      79 //------------------------------------------------------------------------------
      80 // Destructor for NX Styler class
      81 //------------------------------------------------------------------------------
      82 TreeListDemo::~TreeListDemo()
      83 {
      84     if (theDialog != NULL)
      85     {
      86         delete theDialog;
      87         theDialog = NULL;
      88     }
      89 }
      90 //------------------------------- DIALOG LAUNCHING ---------------------------------
      91 //
      92 //    Before invoking this application one needs to open any part/empty part in NX
      93 //    because of the behavior of the blocks.
      94 //
      95 //    Make sure the dlx file is in one of the following locations:
      96 //        1.) From where NX session is launched
      97 //        2.) $UGII_USER_DIR/application
      98 //        3.) For released applications, using UGII_CUSTOM_DIRECTORY_FILE is highly
      99 //            recommended. This variable is set to a full directory path to a file 
     100 //            containing a list of root directories for all custom applications.
     101 //            e.g., UGII_CUSTOM_DIRECTORY_FILE=$UGII_BASE_DIRugiimenuscustom_dirs.dat
     102 //
     103 //    You can create the dialog using one of the following way:
     104 //
     105 //    1. USER EXIT
     106 //
     107 //        1) Create the Shared Library -- Refer "Block UI Styler programmer's guide"
     108 //        2) Invoke the Shared Library through File->Execute->NX Open menu.
     109 //
     110 //------------------------------------------------------------------------------
     111 extern "C" DllExport void  ufusr(char *param, int *retcod, int param_len)
     112 {
     113     try
     114     {
     115         theTreeListDemo = new TreeListDemo();
     116         // The following method shows the dialog immediately
     117         theTreeListDemo->Show();
     118     }
     119     catch(exception& ex)
     120     {
     121         //---- Enter your exception handling code here -----
     122         TreeListDemo::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
     123     }
     124     delete theTreeListDemo;
     125 }
     126 
     127 //------------------------------------------------------------------------------
     128 // This method specifies how a shared image is unloaded from memory
     129 // within NX. This method gives you the capability to unload an
     130 // internal NX Open application or user  exit from NX. Specify any
     131 // one of the three constants as a return value to determine the type
     132 // of unload to perform:
     133 //
     134 //
     135 //    Immediately : unload the library as soon as the automation program has completed
     136 //    Explicitly  : unload the library from the "Unload Shared Image" dialog
     137 //    AtTermination : unload the library when the NX session terminates
     138 //
     139 //
     140 // NOTE:  A program which associates NX Open applications with the menubar
     141 // MUST NOT use this option since it will UNLOAD your NX Open application image
     142 // from the menubar.
     143 //------------------------------------------------------------------------------
     144 extern "C" DllExport int ufusr_ask_unload()
     145 {
     146     //return (int)Session::LibraryUnloadOptionExplicitly;
     147     return (int)Session::LibraryUnloadOptionImmediately;
     148     //return (int)Session::LibraryUnloadOptionAtTermination;
     149 }
     150 
     151 //------------------------------------------------------------------------------
     152 // Following method cleanup any housekeeping chores that may be needed.
     153 // This method is automatically called by NX.
     154 //------------------------------------------------------------------------------
     155 extern "C" DllExport void ufusr_cleanup(void)
     156 {
     157     try
     158     {
     159         //---- Enter your callback code here -----
     160     }
     161     catch(exception& ex)
     162     {
     163         //---- Enter your exception handling code here -----
     164         TreeListDemo::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
     165     }
     166 }
     167 
     168 int TreeListDemo::Show()
     169 {
     170     try
     171     {
     172         theDialog->Show();
     173     }
     174     catch(exception& ex)
     175     {
     176         //---- Enter your exception handling code here -----
     177         TreeListDemo::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
     178     }
     179     return 0;
     180 }
     181 
     182 //------------------------------------------------------------------------------
     183 //---------------------Block UI Styler Callback Functions--------------------------
     184 //------------------------------------------------------------------------------
     185 
     186 //------------------------------------------------------------------------------
     187 //Callback Name: initialize_cb
     188 
     189 NXOpen::NXString nodeBaseString;
     190 int nodeSuffixNumber = 0;
     191 //------------------------------------------------------------------------------
     192 void TreeListDemo::initialize_cb()
     193 {
     194     try
     195     {
     196         group0 = dynamic_cast<NXOpen::BlockStyler::UIBlock* >(theDialog->TopBlock()->FindBlock("group0"));
     197         tree_control0 = dynamic_cast<NXOpen::BlockStyler::Tree* >(theDialog->TopBlock()->FindBlock("tree_control0"));
     198         addDeleteNodeGroup = dynamic_cast<NXOpen::BlockStyler::UIBlock* >(theDialog->TopBlock()->FindBlock("addDeleteNodeGroup"));
     199         nodeString = dynamic_cast<NXOpen::BlockStyler::UIBlock* >(theDialog->TopBlock()->FindBlock("nodeString"));
     200         addNodeButton = dynamic_cast<NXOpen::BlockStyler::UIBlock* >(theDialog->TopBlock()->FindBlock("addNodeButton"));
     201         deleteNodeButton = dynamic_cast<NXOpen::BlockStyler::UIBlock* >(theDialog->TopBlock()->FindBlock("deleteNodeButton"));
     202         stateIconGroup = dynamic_cast<NXOpen::BlockStyler::UIBlock* >(theDialog->TopBlock()->FindBlock("stateIconGroup"));
     203         stateIconOptions = dynamic_cast<NXOpen::BlockStyler::UIBlock* >(theDialog->TopBlock()->FindBlock("stateIconOptions"));
     204         nodeToolTip = dynamic_cast<NXOpen::BlockStyler::UIBlock* >(theDialog->TopBlock()->FindBlock("nodeToolTip"));
     205         NodeEditGroup = dynamic_cast<NXOpen::BlockStyler::UIBlock* >(theDialog->TopBlock()->FindBlock("NodeEditGroup"));
     206         nodeEditOptions = dynamic_cast<NXOpen::BlockStyler::UIBlock* >(theDialog->TopBlock()->FindBlock("nodeEditOptions"));
     207         menuGroup = dynamic_cast<NXOpen::BlockStyler::UIBlock* >(theDialog->TopBlock()->FindBlock("menuGroup"));
     208         showMenuToggle = dynamic_cast<NXOpen::BlockStyler::UIBlock* >(theDialog->TopBlock()->FindBlock("showMenuToggle"));
     209         dragDropGroup = dynamic_cast<NXOpen::BlockStyler::UIBlock* >(theDialog->TopBlock()->FindBlock("dragDropGroup"));
     210         disallowDragToggle = dynamic_cast<NXOpen::BlockStyler::UIBlock* >(theDialog->TopBlock()->FindBlock("disallowDragToggle"));
     211         dropOptions = dynamic_cast<NXOpen::BlockStyler::UIBlock* >(theDialog->TopBlock()->FindBlock("dropOptions"));
     212         defaultActionGroup = dynamic_cast<NXOpen::BlockStyler::UIBlock* >(theDialog->TopBlock()->FindBlock("defaultActionGroup"));
     213         defaultActionToggle = dynamic_cast<NXOpen::BlockStyler::UIBlock* >(theDialog->TopBlock()->FindBlock("defaultActionToggle"));
     214         nodeDataGroup = dynamic_cast<NXOpen::BlockStyler::UIBlock* >(theDialog->TopBlock()->FindBlock("nodeDataGroup"));
     215         instructions = dynamic_cast<NXOpen::BlockStyler::UIBlock* >(theDialog->TopBlock()->FindBlock("instructions"));
     216         selection0 = dynamic_cast<NXOpen::BlockStyler::UIBlock* >(theDialog->TopBlock()->FindBlock("selection0"));
     217         addCrossSelectionNodeButton = dynamic_cast<NXOpen::BlockStyler::UIBlock* >(theDialog->TopBlock()->FindBlock("addCrossSelectionNodeButton"));
     218         redrawGroup = dynamic_cast<NXOpen::BlockStyler::UIBlock* >(theDialog->TopBlock()->FindBlock("redrawGroup"));
     219         redrawInstruction = dynamic_cast<NXOpen::BlockStyler::UIBlock* >(theDialog->TopBlock()->FindBlock("redrawInstruction"));
     220         redrawToggle = dynamic_cast<NXOpen::BlockStyler::UIBlock* >(theDialog->TopBlock()->FindBlock("redrawToggle"));
     221         listingWindowGroup = dynamic_cast<NXOpen::BlockStyler::UIBlock* >(theDialog->TopBlock()->FindBlock("listingWindowGroup"));
     222         listingWindowToggle = dynamic_cast<NXOpen::BlockStyler::UIBlock* >(theDialog->TopBlock()->FindBlock("listingWindowToggle"));
     223         //------------------------------------------------------------------------------
     224         //Registration of Treelist specific callbacks
     225         //------------------------------------------------------------------------------
     226         //tree_control0->SetOnExpandHandler(make_callback(this, &TreeListDemo::OnExpandCallback));
     227 
     228         //tree_control0->SetOnInsertColumnHandler(make_callback(this, &TreeListDemo::OnInsertColumnCallback));
     229 
     230         tree_control0->SetOnInsertNodeHandler(make_callback(this, &TreeListDemo::OnInsertNodeCallback));
     231 
     232         tree_control0->SetOnDeleteNodeHandler(make_callback(this, &TreeListDemo::OnDeleteNodeCallback));
     233 
     234         //tree_control0->SetOnPreSelectHandler(make_callback(this, &TreeListDemo::OnPreSelectCallback));
     235 
     236         tree_control0->SetOnSelectHandler(make_callback(this, &TreeListDemo::OnSelectCallback));
     237 
     238         tree_control0->SetOnStateChangeHandler(make_callback(this, &TreeListDemo::OnStateChangeCallback));
     239 
     240         tree_control0->SetToolTipTextHandler(make_callback(this, &TreeListDemo::ToolTipTextCallback));
     241 
     242         //tree_control0->SetColumnSortHandler(make_callback(this, &TreeListDemo::ColumnSortCallback));
     243 
     244         tree_control0->SetStateIconNameHandler(make_callback(this, &TreeListDemo::StateIconNameCallback));
     245 
     246         tree_control0->SetOnBeginLabelEditHandler(make_callback(this, &TreeListDemo::OnBeginLabelEditCallback));
     247 
     248         tree_control0->SetOnEndLabelEditHandler(make_callback(this, &TreeListDemo::OnEndLabelEditCallback));        
     249 
     250         tree_control0->SetOnEditOptionSelectedHandler(make_callback(this, &TreeListDemo::OnEditOptionSelectedCallback));
     251 
     252         tree_control0->SetAskEditControlHandler(make_callback(this, &TreeListDemo::AskEditControlCallback));
     253 
     254         tree_control0->SetOnMenuHandler(make_callback(this, &TreeListDemo::OnMenuCallback));
     255 
     256         tree_control0->SetOnMenuSelectionHandler(make_callback(this, &TreeListDemo::OnMenuSelectionCallback));
     257 
     258         tree_control0->SetIsDropAllowedHandler(make_callback(this, &TreeListDemo::IsDropAllowedCallback));
     259 
     260         tree_control0->SetIsDragAllowedHandler(make_callback(this, &TreeListDemo::IsDragAllowedCallback));
     261 
     262         tree_control0->SetOnDropHandler(make_callback(this, &TreeListDemo::OnDropCallback));
     263 
     264         //tree_control0->SetOnDropMenuHandler(make_callback(this, &TreeListDemo::OnDropMenuCallback));
     265 
     266         tree_control0->SetOnDefaultActionHandler(make_callback(this, &TreeListDemo::OnDefaultAction));
     267 
     268         //------------------------------------------------------------------------------
     269 
     270         BlockStyler::PropertyList *stringPropList = nodeString->GetProperties() ;
     271         nodeBaseString = stringPropList->GetString("Value");    
     272         NXOpen::NXString nodeDisplayString = nodeBaseString;
     273         std::stringstream stringBuffer;
     274         stringBuffer << nodeSuffixNumber;            
     275         nodeDisplayString += stringBuffer.str();                
     276         stringPropList->SetString("Value",nodeDisplayString);            
     277         delete stringPropList;
     278     }
     279     catch(exception& ex)
     280     {
     281         //---- Enter your exception handling code here -----
     282         TreeListDemo::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
     283     }
     284 }
     285 
     286 enum Columns
     287 {
     288     ColumnFirst = 0,
     289     ColumnSecond = 1,
     290     ColumnThird = 2
     291 };
     292 BlockStyler::Node *previousAddedNode = NULL;    
     293 int randomIcon = 0;
     294 NXOpen::NXString randomIconString[] = {"extrude", "cone", "block", "blend"};
     295 
     296     
     297 
     298 
     299 //------------------------------------------------------------------------------
     300 //Callback Name: dialogShown_cb
     301 //This callback is executed just before the dialog launch. Thus any value set 
     302 //here will take precedence and dialog will be launched showing that value. 
     303 //------------------------------------------------------------------------------
     304 void TreeListDemo::dialogShown_cb()
     305 {
     306     try
     307     {
     308         //---- Enter your callback code here -----
     309 
     310         //Insert Columns        
     311         tree_control0->InsertColumn(ColumnFirst, "First Column", 80);
     312         tree_control0->InsertColumn(ColumnSecond, "Second Column", 80);
     313         tree_control0->InsertColumn(ColumnThird, "Third Column", 80);
     314 
     315         //Set resize policy for columns
     316         tree_control0->SetColumnResizePolicy(ColumnFirst, Tree::ColumnResizePolicyConstantWidth);
     317         tree_control0->SetColumnResizePolicy(ColumnSecond, Tree::ColumnResizePolicyConstantWidth);
     318         tree_control0->SetColumnResizePolicy(ColumnThird, Tree::ColumnResizePolicyConstantWidth);
     319 
     320         //Let the second column interpret the text as icon
     321         tree_control0->SetColumnDisplayType(ColumnSecond, Tree::ColumnDisplayIcon);        
     322     }
     323     catch(exception& ex)
     324     {
     325         //---- Enter your exception handling code here -----
     326         TreeListDemo::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
     327     }
     328 }
     329 
     330 //------------------------------------------------------------------------------
     331 //Callback Name: apply_cb
     332 //------------------------------------------------------------------------------
     333 int TreeListDemo::apply_cb()
     334 {
     335     int errorCode = 0;
     336     try
     337     {
     338         //---- Enter your callback code here -----
     339     }
     340     catch(exception& ex)
     341     {
     342         //---- Enter your exception handling code here -----
     343         errorCode = 1;
     344         TreeListDemo::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
     345     }
     346     return errorCode;
     347 }
     348 
     349 
     350 BlockStyler::Node* TreeListDemo::CreateAndAddNode(BlockStyler::Node* afterNode)
     351 {
     352     BlockStyler::Node *parentNode = NULL;
     353 
     354     //Get node display string from the block
     355     BlockStyler::PropertyList *stringPropList = nodeString->GetProperties() ;
     356     NXOpen::NXString nodeDisplayString = stringPropList->GetString("Value");
     357     delete stringPropList;
     358 
     359     BlockStyler::Node *node = tree_control0->CreateNode(nodeDisplayString);
     360 
     361     //Set few properties of node
     362     node->SetForegroundColor(198);
     363     node->SetDisplayIcon(randomIconString[randomIcon]);
     364     node->SetSelectedIcon("draft");
     365 
     366     //Take first selected node as parent node    
     367     std::vector<BlockStyler::Node *>selectedNodes=tree_control0->GetSelectedNodes();
     368     if (selectedNodes.size()>0)
     369     {
     370         parentNode = selectedNodes[0];    
     371     }
     372 
     373     //Insert Node
     374     tree_control0->InsertNode(node,parentNode,afterNode,tree_control0->NodeInsertOptionSort);
     375     node->ScrollTo(ColumnFirst,BlockStyler::Node::ScrollCenter);
     376 
     377     //Change the last node color. Making sure that new node color is distinct
     378     if (previousAddedNode != NULL)
     379     {
     380         previousAddedNode->SetForegroundColor(211);
     381     }
     382     previousAddedNode = node;    
     383     
     384     return node;    
     385 }
     386 
     387 
     388 void TreeListDemo::DeleteSelectedNodes()
     389 {
     390     std::vector<BlockStyler::Node *>selectedNodes=tree_control0->GetSelectedNodes();                
     391     if(selectedNodes.size()>0)
     392     {
     393         while(selectedNodes.size()>0)
     394         {
     395             tree_control0->DeleteNode(selectedNodes[0]);
     396             selectedNodes=tree_control0->GetSelectedNodes();
     397         }
     398     }
     399     else
     400     {
     401         theUI->NXMessageBox()->Show("Delete Node", NXOpen::NXMessageBox::DialogTypeInformation, "No Nodes are selected");
     402     } 
     403 }
     404 
     405 //Writes callback name to ListingWindow
     406 void TreeListDemo::WriteCallbackToListingWindow(NXString callbackName)
     407 {
     408     if (!listingWindowToggle)
     409         return;
     410     try
     411     {
     412         //---- Enter your callback code here -----
     413 
     414         NXOpen::BlockStyler::PropertyList *listingWindowToggleProps = listingWindowToggle->GetProperties();
     415         bool listingWindow = listingWindowToggleProps->GetLogical("Value");
     416         delete listingWindowToggleProps;
     417 
     418         if(listingWindow)
     419         {
     420             theSession->ListingWindow()->Open();
     421             NXString nullString = NULL;
     422             theSession->ListingWindow()->WriteLine(nullString);
     423             theSession->ListingWindow()->WriteLine(callbackName);
     424         }
     425     }
     426     catch(exception& ex)
     427     {
     428         //---- Enter your exception handling code here -----
     429         TreeListDemo::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
     430     }
     431 }
     432 
     433 
     434 //------------------------------------------------------------------------------
     435 //Callback Name: update_cb
     436 //------------------------------------------------------------------------------
     437 int TreeListDemo::update_cb(NXOpen::BlockStyler::UIBlock* block)
     438 {
     439     try
     440     {
     441         if(block == nodeString)
     442         {
     443             //---------Enter your code here-----------
     444         }
     445         else if(block == addNodeButton)
     446         {
     447             //---------Enter your code here-----------
     448             BlockStyler::Node *afterNode = NULL;
     449             BlockStyler::Node *node = CreateAndAddNode(afterNode);
     450 
     451             //State Icon
     452 
     453             BlockStyler::PropertyList *prop = stateIconOptions->GetProperties();
     454             int enumValue = prop->GetEnum("Value");
     455             delete prop;
     456 
     457             if(enumValue==0)
     458             {
     459                 //Ignore
     460             }
     461             else if(enumValue==1)
     462             {
     463                 node->SetState(1);
     464             }
     465             else if(enumValue==2)
     466             {
     467                 node->SetState(3);//set value other than 1 or 2
     468             }
     469         }
     470         else if(block == deleteNodeButton)
     471         {
     472             //---------Enter your code here-----------
     473             DeleteSelectedNodes();            
     474         }
     475         else if(block == stateIconOptions)
     476         {
     477             //---------Enter your code here-----------
     478         }
     479         else if(block == nodeToolTip)
     480         {
     481             //---------Enter your code here-----------
     482         }
     483         else if(block == nodeEditOptions)
     484         {
     485             //---------Enter your code here-----------
     486             if (!defaultActionToggle)
     487             {
     488                 return 0;
     489             }
     490 
     491             NXOpen::BlockStyler::PropertyList *nodeEditOptionsProps = nodeEditOptions->GetProperties();
     492             NXString nodeEditOption = nodeEditOptionsProps->GetEnumAsString("Value");
     493             delete nodeEditOptionsProps;
     494 
     495             NXOpen::BlockStyler::PropertyList *defaultActionToggleProps = defaultActionToggle->GetProperties();
     496 
     497             if(!(strcmp(nodeEditOption.GetText(),"Combo Box Edit"))||!(strcmp(nodeEditOption.GetText(),"Listbox Edit")))
     498             {
     499                 defaultActionToggleProps->SetLogical("Enable",false);
     500                 defaultActionToggleProps->SetLogical("Value",false);
     501             }
     502             else
     503             {
     504                 defaultActionToggleProps->SetLogical("Enable",true);
     505             }
     506             delete defaultActionToggleProps;
     507         }
     508         else if(block == showMenuToggle)
     509         {
     510             //---------Enter your code here-----------
     511         }
     512         else if(block == disallowDragToggle)
     513         {
     514             //---------Enter your code here-----------
     515         }
     516         else if(block == dropOptions)
     517         {
     518             //---------Enter your code here-----------
     519         }
     520         else if(block == defaultActionToggle)
     521         {
     522             //---------Enter your code here-----------
     523         }
     524         else if(block == instructions)
     525         {
     526             //---------Enter your code here-----------
     527         }
     528         else if(block == selection0)
     529         {
     530             //---------Enter your code here-----------
     531         }
     532         else if(block == addCrossSelectionNodeButton)
     533         {
     534             //---------Enter your code here-----------
     535             BlockStyler::PropertyList *prop = selection0->GetProperties();
     536             std::vector<NXOpen::TaggedObject *>objects = prop->GetTaggedObjectVector("SelectedObjects");
     537 
     538             if (objects.size()>0)
     539             {
     540                 //Create node and node data
     541                 BlockStyler::Node *node = tree_control0->CreateNode("CrossSelection-NodeData");
     542                 NXOpen::DataContainer *nodeData = node->GetNodeData();
     543                 nodeData->AddTaggedObject("Data",objects[0]);
     544                 delete nodeData;
     545                 tree_control0->InsertNode(node,NULL,NULL,tree_control0->NodeInsertOptionAlwaysLast);
     546 
     547                 //Reset Selection block
     548                 std::vector<TaggedObject *>blank;            
     549                 prop->SetTaggedObjectVector("SelectedObjects",blank);
     550             }
     551             delete prop;                     
     552         }
     553         else if(block == redrawInstruction)
     554         {
     555             //---------Enter your code here-----------
     556         }
     557         else if(block == redrawToggle)
     558         {
     559             //---------Enter your code here-----------
     560             BlockStyler::PropertyList *prop = redrawToggle->GetProperties();
     561             bool isRedraw = prop->GetLogical("Value");
     562             delete prop;
     563             tree_control0->Redraw(isRedraw);            
     564         }
     565         else if(block == listingWindowToggle)
     566         {
     567             //---------Enter your code here-----------
     568         }
     569     }
     570     catch(exception& ex)
     571     {
     572         //---- Enter your exception handling code here -----
     573         TreeListDemo::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
     574     }
     575     return 0;
     576 }
     577 
     578 //------------------------------------------------------------------------------
     579 //Callback Name: ok_cb
     580 //------------------------------------------------------------------------------
     581 int TreeListDemo::ok_cb()
     582 {
     583     int errorCode = 0;
     584     try
     585     {
     586         errorCode = apply_cb();
     587     }
     588     catch(exception& ex)
     589     {
     590         //---- Enter your exception handling code here -----
     591         errorCode = 1;
     592         TreeListDemo::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
     593     }
     594     return errorCode;
     595 }
     596 
     597 //------------------------------------------------------------------------------
     598 //Callback Name: focusNotify_cb
     599 //This callback is executed when any block (except the ones which receive keyboard entry such as Integer block) receives focus.
     600 //------------------------------------------------------------------------------
     601 void TreeListDemo::focusNotify_cb(NXOpen::BlockStyler::UIBlock* block, bool focus)
     602 {
     603     try
     604     {
     605         //---- Enter your callback code here -----
     606     }
     607     catch(exception& ex)
     608     {
     609         //---- Enter your exception handling code here -----
     610         TreeListDemo::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
     611     }
     612 }
     613 //------------------------------------------------------------------------------
     614 //Treelist specific callbacks
     615 //------------------------------------------------------------------------------
     616 //void TreeListDemo::OnExpandCallback (NXOpen::BlockStyler::Tree *tree, NXOpen::BlockStyler::Node *node)
     617 //{
     618 //}
     619 
     620 //void TreeListDemo::OnInsertColumnCallback(NXOpen::BlockStyler::Tree *tree, NXOpen::BlockStyler::Node *node, int columnID)
     621 //{
     622 //}
     623 
     624 void TreeListDemo::OnInsertNodeCallback(NXOpen::BlockStyler::Tree *tree, NXOpen::BlockStyler::Node *node)
     625 {
     626     try
     627     {
     628         //---- Enter your callback code here -----
     629         WriteCallbackToListingWindow("OnInsertNodeCallback Invoked");
     630 
     631         //Setting random icon
     632         if (randomIcon==0)
     633         {
     634             node->SetColumnDisplayText(ColumnSecond,randomIconString[randomIcon]);
     635         }
     636         else if (randomIcon==1)
     637         {
     638             node->SetColumnDisplayText(ColumnSecond,randomIconString[randomIcon]);
     639         }
     640         else if (randomIcon==2)
     641         {
     642             node->SetColumnDisplayText(ColumnSecond,randomIconString[randomIcon]);
     643         }
     644         else if (randomIcon==3)
     645         {
     646             node->SetColumnDisplayText(ColumnSecond,randomIconString[randomIcon]);
     647         }
     648         randomIcon = randomIcon + 1;
     649         if (randomIcon > 3)
     650         {
     651             randomIcon = 0;
     652         }
     653 
     654         std::stringstream stringBuffer;
     655         stringBuffer << "Column Text - "<<randomIcon;
     656         NXOpen::NXString columnText ;
     657         columnText += stringBuffer.str();
     658         node->SetColumnDisplayText(ColumnThird,columnText);
     659 
     660         if (nodeSuffixNumber == 15000)
     661         {
     662             nodeSuffixNumber = 0;
     663         }
     664         else
     665         {
     666             nodeSuffixNumber = nodeSuffixNumber + 1;
     667         }
     668 
     669         //New Node text for the next node
     670         std::stringstream stringBuffer1;
     671         BlockStyler::PropertyList *prop = nodeString->GetProperties();        
     672 
     673         NXOpen::NXString nodeDisplayString = nodeBaseString;
     674         stringBuffer1 << nodeSuffixNumber;
     675         nodeDisplayString += stringBuffer1.str();
     676         prop->SetString("Value",nodeDisplayString);
     677         delete prop;
     678     }
     679     catch(exception& ex)
     680     {
     681         //---- Enter your exception handling code here -----
     682         TreeListDemo::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
     683     }
     684 }
     685 
     686 void TreeListDemo::OnDeleteNodeCallback(NXOpen::BlockStyler::Tree *tree, NXOpen::BlockStyler::Node *node)
     687 {
     688     try
     689     {
     690         //---- Enter your callback code here -----
     691         WriteCallbackToListingWindow("OnDeleteNodeCallback Invoked");
     692 
     693         if(node==previousAddedNode)
     694         {
     695             //Set the previous node to Nothing. Done for safe execution.
     696             previousAddedNode = NULL;
     697         }          
     698     }
     699     catch(exception& ex)
     700     {
     701         //---- Enter your exception handling code here -----
     702         TreeListDemo::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
     703     }
     704 }
     705 
     706 //void TreeListDemo::OnPreSelectCallback(NXOpen::BlockStyler::Tree *tree, NXOpen::BlockStyler::Node *node, int ID, bool selected)
     707 //{
     708 //}
     709 
     710 void TreeListDemo::OnSelectCallback(NXOpen::BlockStyler::Tree *tree, NXOpen::BlockStyler::Node *node, int columnID, bool selected)
     711 {
     712     std::stringstream column;
     713     column << columnID;
     714 
     715     std::string text = std::string("OnSelectCallback Invoked: Node "") + std::string(node->DisplayText().GetText()) + std::string("" ") +  std::string(selected?"Selected":"Deselected") + std::string(selected?" at column ":"") + std::string(selected?column.str():"");
     716     WriteCallbackToListingWindow(text);    
     717 }
     718 
     719 void TreeListDemo::OnStateChangeCallback(NXOpen::BlockStyler::Tree *tree, NXOpen::BlockStyler::Node *node, int state)
     720 {
     721     try
     722     {
     723         //---- Enter your callback code here -----
     724         WriteCallbackToListingWindow("OnStateChangeCallback Invoked");
     725         if (state == 1)
     726         {
     727             node->SetState(2);
     728         }
     729         else if(state == 2)
     730         {
     731             node->SetState(1);
     732         }
     733         else if(state == 3)
     734         {
     735             node->SetState(4);
     736         }
     737         else if(state == 4)
     738         {
     739             node->SetState(3);
     740         }          
     741     }
     742     catch(exception& ex)
     743     {
     744         //---- Enter your exception handling code here -----
     745         TreeListDemo::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
     746     }
     747 }
     748 
     749 NXString TreeListDemo::ToolTipTextCallback(NXOpen::BlockStyler::Tree *tree, NXOpen::BlockStyler::Node *node, int columnID)
     750 {
     751     NXOpen::NXString ToolTipText;
     752     try
     753     {
     754         //---- Enter your callback code here -----
     755 
     756         BlockStyler::PropertyList *prop = nodeToolTip->GetProperties();
     757         ToolTipText = prop->GetString("Value");        
     758         delete prop;
     759     }
     760     catch(exception& ex)
     761     {
     762         //---- Enter your exception handling code here -----
     763         TreeListDemo::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
     764     }
     765     return ToolTipText;    
     766 }
     767 //The possible return values are 0, positive and negative value, suggesting respectively that both nodes are same, first node greater than second, and first node smaller than second.
     768 //int TreeListDemo::ColumnSortCallback(NXOpen::BlockStyler::Tree *tree, int columnID, NXOpen::BlockStyler::Node *node1, NXOpen::BlockStyler::Node *node2)
     769 //{
     770 //}
     771 
     772 NXString TreeListDemo::StateIconNameCallback(NXOpen::BlockStyler::Tree *tree, NXOpen::BlockStyler::Node *node, int state)
     773 {
     774     NXOpen::NXString stateIcon;
     775     try
     776     {
     777         //---- Enter your callback code here -----
     778         WriteCallbackToListingWindow("StateIconNameCallback Invoked");
     779         if(state==3)
     780         {
     781             stateIcon = "hole";
     782         }
     783         else if(state==4)
     784         {
     785             stateIcon = "boss";
     786         }
     787         else if(state==5)
     788         {
     789             stateIcon = "revolve";
     790         }
     791     }
     792     catch(exception& ex)
     793     {
     794         //---- Enter your exception handling code here -----
     795         TreeListDemo::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
     796     }
     797     return stateIcon;
     798 }
     799 
     800 NXOpen::BlockStyler::Tree::BeginLabelEditState TreeListDemo::OnBeginLabelEditCallback(NXOpen::BlockStyler::Tree *tree, NXOpen::BlockStyler::Node *node, int columnID)
     801 {
     802     NXOpen::BlockStyler::Tree::BeginLabelEditState OnBeginLabelEdit = BlockStyler::Tree::BeginLabelEditStateDisallow;
     803     try
     804     {
     805         //---- Enter your callback code here -----
     806         WriteCallbackToListingWindow("OnBeginLabelEditCallback Invoked");
     807         BlockStyler::PropertyList *prop = nodeEditOptions->GetProperties();
     808         int labelEditOption = prop->GetEnum("Value");
     809         delete prop;
     810 
     811         if (labelEditOption==1)
     812         {
     813             OnBeginLabelEdit = BlockStyler::Tree::BeginLabelEditStateAllow;
     814         }
     815         else
     816         {
     817             OnBeginLabelEdit = BlockStyler::Tree::BeginLabelEditStateDisallow;
     818         }
     819     }
     820     catch(exception& ex)
     821     {
     822         //---- Enter your exception handling code here -----
     823         TreeListDemo::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
     824     }
     825 
     826     return OnBeginLabelEdit;
     827 
     828 }
     829 
     830 NXOpen::BlockStyler::Tree::EndLabelEditState TreeListDemo::OnEndLabelEditCallback(NXOpen::BlockStyler::Tree *tree, NXOpen::BlockStyler::Node *node, int, NXString editedText)
     831 {
     832     NXOpen::BlockStyler::Tree::EndLabelEditState OnEndLabelEdit = BlockStyler::Tree::EndLabelEditStateRejectText;
     833     try
     834     {
     835         //---- Enter your callback code here -----
     836         WriteCallbackToListingWindow("OnEndLabelEditCallback Invoked");
     837 
     838         if(0 == strcmp(editedText.GetText(),"Reject") )
     839         {
     840             OnEndLabelEdit = BlockStyler::Tree::EndLabelEditStateRejectText;
     841         }
     842         else
     843         {
     844             OnEndLabelEdit = BlockStyler::Tree::EndLabelEditStateAcceptText;
     845         }
     846     }
     847     catch(exception& ex)
     848     {
     849         //---- Enter your exception handling code here -----
     850         TreeListDemo::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
     851     }
     852 
     853     return OnEndLabelEdit;
     854 
     855 }
     856 
     857 NXOpen::BlockStyler::Tree::EditControlOption TreeListDemo::OnEditOptionSelectedCallback(NXOpen::BlockStyler::Tree *tree, NXOpen::BlockStyler::Node *node, int columnID, int selectedOptionID, NXString selectedOptionText, NXOpen::BlockStyler::Tree::ControlType type)
     858 {
     859     NXOpen::BlockStyler::Tree::EditControlOption OnEditOptionSelected = BlockStyler::Tree::EditControlOptionReject;    
     860     try
     861     {
     862         //---- Enter your callback code here -----
     863 
     864         if (BlockStyler::Tree::ControlTypeComboBox == type)
     865         {
     866             if (0 == strcmp(selectedOptionText.GetText(),"ComboBox-RejectText"))
     867             {
     868                 OnEditOptionSelected = BlockStyler::Tree::EditControlOptionReject;
     869             }
     870             else
     871             {
     872                 OnEditOptionSelected = BlockStyler::Tree::EditControlOptionAccept;
     873             }
     874         }
     875         else if (BlockStyler::Tree::ControlTypeListBox == type)
     876         {
     877             if (0 == strcmp(selectedOptionText.GetText(),"ListBox-RejectText"))
     878             {
     879                 OnEditOptionSelected = BlockStyler::Tree::EditControlOptionReject;
     880             }
     881             else
     882             {
     883                 OnEditOptionSelected = BlockStyler::Tree::EditControlOptionAccept;
     884             }
     885         }                          
     886     }
     887     catch(exception& ex)
     888     {
     889         //---- Enter your exception handling code here -----
     890         TreeListDemo::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
     891     }
     892 
     893     return OnEditOptionSelected;
     894 }
     895 
     896 NXOpen::BlockStyler::Tree::ControlType TreeListDemo::AskEditControlCallback(NXOpen::BlockStyler::Tree *tree, NXOpen::BlockStyler::Node *node, int columnID)
     897 {
     898     NXOpen::BlockStyler::Tree::ControlType AskEditControl = BlockStyler::Tree::ControlTypeNone;;
     899 
     900     try
     901     {
     902         //---- Enter your callback code here -----
     903         BlockStyler::PropertyList *prop = nodeEditOptions->GetProperties();
     904         int labelEditOption = prop->GetEnum("Value");
     905         delete prop;
     906 
     907         if(labelEditOption==2)
     908         {
     909             AskEditControl = BlockStyler::Tree::ControlTypeComboBox;  
     910             std::vector<NXOpen::NXString> options;
     911             options.push_back(NXOpen::NXString("ComboBox-AcceptText"));
     912             options.push_back(NXOpen::NXString("ComboBox-DefaultText"));
     913             options.push_back(NXOpen::NXString("ComboBox-RejectText"));
     914             tree->SetEditOptions(options,1);    
     915         }
     916         else if(labelEditOption==3)
     917         {
     918             AskEditControl = BlockStyler::Tree::ControlTypeListBox;
     919             
     920             std::vector<NXOpen::NXString> options;
     921             options.push_back(NXOpen::NXString("ListBox-AcceptText"));
     922             options.push_back(NXOpen::NXString("ListBox-DefaultText"));
     923             options.push_back(NXOpen::NXString("ListBox-RejectText"));
     924 
     925             tree->SetEditOptions(options,1);        
     926         }                                   
     927     }
     928     catch(exception& ex)
     929     {
     930         //---- Enter your exception handling code here -----
     931         TreeListDemo::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
     932     }
     933     return AskEditControl;
     934 }
     935 
     936 enum MenuID
     937 {
     938     AddNode = 0,
     939     DeleteNode,
     940     CheckedMenuItem,
     941     DefaultMenuItem,
     942     DialogLaunchMenuItem,
     943     DisableMenuItem,
     944     HiddenMenuItem,
     945     IconMenuItem,
     946 
     947     SubMenu1,
     948     SubMenu2,
     949     SubMenuItem1,
     950     SubMenuItem2,
     951     SubMenuItem3,
     952     SubMenuItem4,
     953 
     954     TreeMenuItem,
     955 };
     956 
     957 
     958 void TreeListDemo::OnMenuCallback(NXOpen::BlockStyler::Tree *tree, NXOpen::BlockStyler::Node *node, int columnID)
     959 {
     960     try
     961     {
     962         //---- Enter your callback code here -----
     963         WriteCallbackToListingWindow("OnMenuCallback Invoked");
     964         BlockStyler::PropertyList *prop = showMenuToggle->GetProperties() ;
     965         bool value = prop->GetLogical("Value");
     966         delete prop;
     967 
     968         if(value == false)
     969         {
     970             return;
     971         }
     972 
     973         //Create Menu
     974         BlockStyler::TreeListMenu *menu = tree->CreateMenu();
     975         BlockStyler::TreeListMenu *SubMenu1 = tree->CreateMenu();
     976         BlockStyler::TreeListMenu *SubMenu2 = tree->CreateMenu();
     977 
     978 
     979         if(node==NULL)
     980         {
     981             menu->AddMenuItem(AddNode,"Add Node");
     982             menu->AddSeparator();
     983             menu->AddMenuItem(TreeMenuItem,"Tree menu item");            
     984         }
     985         else //Menu request for Node
     986         {
     987             menu->AddMenuItem(AddNode,"Add Node");
     988             menu->AddMenuItem(MenuID(DeleteNode),"Delete Node");
     989 
     990 
     991             menu->AddSeparator();
     992             menu->AddMenuItem(CheckedMenuItem,"Checked Menu Item");
     993             menu->AddMenuItem(DefaultMenuItem,"Default Menu Item");
     994             menu->AddMenuItem(DialogLaunchMenuItem,"Dialog Launch Menu Item");
     995             menu->AddMenuItem(DisableMenuItem,"Disable Menu Item");
     996             menu->AddMenuItem(HiddenMenuItem,"Hidden Menu Item");
     997             menu->AddMenuItem(IconMenuItem,"Icon Menu Item");
     998 
     999             menu->AddSeparator();
    1000             menu->AddMenuItem(::SubMenu1,"Sub Menu 1");
    1001             menu->AddMenuItem(::SubMenu2,"Sub Menu 2");
    1002 
    1003             //Sub Menu
    1004             SubMenu1->AddMenuItem(SubMenuItem1,"Sub Menu Item 1");
    1005             SubMenu1->AddMenuItem(SubMenuItem2,"Sub Menu Item 2");
    1006 
    1007             SubMenu2->AddMenuItem(SubMenuItem3,"Sub Menu Item 3");
    1008             SubMenu2->AddMenuItem(SubMenuItem4,"Sub Menu Item 4");
    1009 
    1010             //Set Sub Menu
    1011             menu->SetSubMenu(::SubMenu1,SubMenu1);
    1012             menu->SetSubMenu(::SubMenu2,SubMenu2);
    1013 
    1014             //Edit Menu Items
    1015             menu->SetItemChecked(CheckedMenuItem,true);
    1016             menu->SetItemDefault(DefaultMenuItem,true);
    1017             menu->SetItemDialogLaunching(DialogLaunchMenuItem,true);
    1018             menu->SetItemDisable(DisableMenuItem,true);
    1019             menu->SetItemHidden(HiddenMenuItem,true);
    1020             menu->SetItemIcon(IconMenuItem,"sketch");
    1021         }
    1022 
    1023         //Set menu on tree
    1024         tree->SetMenu(menu);
    1025 
    1026         //Dispose the menu only after setting the menu on tree
    1027         delete menu;
    1028         delete SubMenu1;
    1029         delete SubMenu2;            
    1030     }
    1031     catch(exception& ex)
    1032     {
    1033         //---- Enter your exception handling code here -----
    1034         TreeListDemo::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
    1035     }
    1036 }
    1037 
    1038 void TreeListDemo::OnMenuSelectionCallback(NXOpen::BlockStyler::Tree *tree, NXOpen::BlockStyler::Node *node, int menuItemID)
    1039 {
    1040     try
    1041     {
    1042         //---- Enter your callback code here -----
    1043         WriteCallbackToListingWindow("OnMenuSelectionCallback Invoked");
    1044         if(node==NULL)
    1045         {
    1046             if((MenuID)menuItemID == AddNode)
    1047             {
    1048                 CreateAndAddNode(NULL);
    1049             }
    1050         }
    1051         else 
    1052         {
    1053             if((MenuID)menuItemID == AddNode)
    1054             {
    1055                 CreateAndAddNode(NULL);
    1056             }
    1057             else if((MenuID)menuItemID == DeleteNode)
    1058             {
    1059                 std::vector<BlockStyler::Node *>SelectedNodes = tree_control0->GetSelectedNodes();
    1060                 if(SelectedNodes.size()>0)
    1061                 {
    1062                     DeleteSelectedNodes();
    1063                 }
    1064                 else 
    1065                 {                        
    1066                     if(node!=NULL)
    1067                     {
    1068                         tree->DeleteNode(node);
    1069                     }                        
    1070                 }
    1071             }
    1072         }
    1073     }
    1074     catch(exception& ex)
    1075     {
    1076         //---- Enter your exception handling code here -----
    1077         TreeListDemo::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
    1078     }
    1079 }
    1080 
    1081 NXOpen::BlockStyler::Node::DropType TreeListDemo::IsDropAllowedCallback(NXOpen::BlockStyler::Tree *tree, NXOpen::BlockStyler::Node *node, int columnID, NXOpen::BlockStyler::Node *targetNode, int targetColumnID)
    1082 {
    1083     NXOpen::BlockStyler::Node::DropType IsDropAllowed;
    1084     try
    1085     {
    1086         //---- Enter your callback code here -----
    1087         BlockStyler::PropertyList *prop = dropOptions->GetProperties() ;
    1088         int dropOption = prop->GetEnum("Value");
    1089         delete prop;
    1090 
    1091         // This will just show iconic representation that drop is allowed. No default action is performed after drop.
    1092         // OnDropCallback should be implemented for specific drop behaviour
    1093 
    1094         if (dropOption == 0)
    1095         {
    1096             IsDropAllowed = BlockStyler::Node::DropTypeNone;
    1097         }
    1098         else if (dropOption == 1)
    1099         {
    1100             IsDropAllowed = BlockStyler::Node::DropTypeAfter;
    1101         }
    1102         else if (dropOption == 2)
    1103         {
    1104             IsDropAllowed = BlockStyler::Node::DropTypeBefore;
    1105         }
    1106         else if (dropOption == 3)
    1107         {
    1108             IsDropAllowed = BlockStyler::Node::DropTypeBeforeAndAfter;
    1109         }
    1110         else if (dropOption == 4)
    1111         {
    1112             IsDropAllowed = BlockStyler::Node::DropTypeOn;
    1113         }
    1114     }
    1115     catch(exception& ex)
    1116     {
    1117         //---- Enter your exception handling code here -----
    1118         TreeListDemo::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
    1119     }
    1120     return IsDropAllowed;
    1121 }
    1122 
    1123 NXOpen::BlockStyler::Node::DragType TreeListDemo::IsDragAllowedCallback(NXOpen::BlockStyler::Tree *tree, NXOpen::BlockStyler::Node *node, int columnID)
    1124 {
    1125     NXOpen::BlockStyler::Node::DragType IsDragAllowedCallback;
    1126     try
    1127     {
    1128         //---- Enter your callback code here -----
    1129         BlockStyler::PropertyList *prop = disallowDragToggle->GetProperties() ;
    1130         bool isDragDisallowed = prop->GetLogical("Value");
    1131         delete prop;
    1132 
    1133         if(isDragDisallowed == true)
    1134         {
    1135             IsDragAllowedCallback = BlockStyler::Node::DragTypeNone;
    1136         }
    1137         else
    1138         {
    1139             IsDragAllowedCallback = BlockStyler::Node::DragTypeAll;
    1140         }
    1141     }
    1142     catch(exception& ex)
    1143     {
    1144         //---- Enter your exception handling code here -----
    1145         TreeListDemo::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
    1146     }
    1147 
    1148     return IsDragAllowedCallback;
    1149 }
    1150 
    1151 bool TreeListDemo::OnDropCallback(NXOpen::BlockStyler::Tree *tree, std::vector<NXOpen::BlockStyler::Node *> node, int columnID, NXOpen::BlockStyler::Node *targetNode, int targetColumnID, NXOpen::BlockStyler::Node::DropType dropType, int dropMenuItemId)
    1152 {
    1153     try
    1154     {
    1155         //---- Enter your callback code here -----
    1156         WriteCallbackToListingWindow("OnDropCallback Invoked");
    1157     }
    1158     catch(exception& ex)
    1159     {
    1160         //---- Enter your exception handling code here -----
    1161         TreeListDemo::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
    1162     }
    1163     return true;
    1164 }
    1165 
    1166 //void TreeListDemo::OnDropMenuCallback(NXOpen::BlockStyler::Tree *tree, NXOpen::BlockStyler::Node *node, int columnID, NXOpen::BlockStyler::Node *targetNode, int targetColumnID)
    1167 //{
    1168 //}
    1169 
    1170 void TreeListDemo::OnDefaultAction(NXOpen::BlockStyler::Tree *tree, NXOpen::BlockStyler::Node *node, int columnID)
    1171 {
    1172      try
    1173     {
    1174         //---- Enter your callback code here -----
    1175         WriteCallbackToListingWindow("OnDefaultAction Invoked");
    1176 
    1177         if (!defaultActionToggle)
    1178         {
    1179             return;
    1180         }
    1181 
    1182         NXOpen::BlockStyler::PropertyList *defaultActionToggleProps = defaultActionToggle->GetProperties();
    1183         bool defaultActionToggle = defaultActionToggleProps->GetLogical("Value");
    1184         delete defaultActionToggleProps;
    1185 
    1186         if(defaultActionToggle)
    1187         {
    1188             std::vector<BlockStyler::Node *> selectedNode = tree_control0->GetSelectedNodes();
    1189             selectedNode[0]->SetColumnDisplayText(2,"Default Action");                
    1190             TreeListDemo::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeInformation, "Default Action: Third column text is changed");
    1191             selectedNode.clear();
    1192         }
    1193     }
    1194     catch(exception& ex)
    1195     {
    1196         //---- Enter your exception handling code here -----
    1197         TreeListDemo::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
    1198     }
    1199 }
    1200 
    1201 
    1202 Caesar卢尚宇
    1203 2019年11月23日

  • 相关阅读:
    java 利用jsoup 爬取知乎首页问题
    ROIAlign, ROIPooling及ROIWarp对比
    yii2.0 gii
    mysql索引操作
    lbs basic mongodb
    php操作mongodb
    设计模式六大原则
    Java集合
    Java 快速失败( fail-fast ) 安全失败( fail-safe )
    计数数组中值的出现次数
  • 原文地址:https://www.cnblogs.com/nxopen2018/p/11920356.html
Copyright © 2020-2023  润新知