anchor.diff:  I'm not going to go into details for each functions I used here, search them in Unreal engine and you should find plenty of use cases.
   
   First we add needed member and functions, note this time we are going to use custom widget, so we don't need to change command list. For *AddTag* fucntion, because it is going to be used for a button, return type have to be *FReply*.
  +
  +.MenuTool.h
  +[source,cpp]
  +----
  +FName TagToAdd;
  +
  +FReply AddTag();
  +FText GetTagToAddText() const;
  +void OnTagToAddTextCommited(const FText& InText, ETextCommit::Type CommitInfo);
  +----
  +
  +Then we fill in those functions. If you type in a text, we save it to *TagToAdd*. If you click on the button, we search all selected actors and make the tag change. We wrap it around a transaction so it will support undo. To use transaction we need to include "ScopedTransaction.h".
   
   .MenuTool.cpp
   [source,cpp]
  
positive.code: ----
  
  === ToolExampleEditor.h & ToolExampleEditor.cpp
  Here we define the actual module class, implementing *IExampleModuleInterface* we defined above. We include headers we need for following sections as well. Make sure the module name you use the get module is the same as the one you pass in *IMPLEMENT_GAME_MODULE* macro.
  
  .ToolExampleEditor.h
  [source,cpp]
  
negative.code: 
  image::https://github.com/lxjk/lxjk.github.io/raw/master/images/ue4tools/008.png[,218,align="left"]
  
  Let's look at *TabTool* class first, it is inherited from *ExampleTabToolBase* defined above.
  
  We set tab name, display name and tool tips in *Initialize* function, and prepare the panel in *SpawnTab* function. Note here we send the tool object itself as a parameter when creating the panel. This is not necessary, but as an example how you can pass in an object to the widget.
  
  