public void ActivateTool(BaseTool tool)
        {
            var toolGroupIndex = -1;
            var groupTool      = m_ToolGroups.FirstOrDefault(x =>
            {
                toolGroupIndex = x.tools.FindIndex(y => y.tool == tool);
                return(toolGroupIndex >= 0);
            });

            if (groupTool != null && toolGroupIndex >= 0)
            {
                var previousTool = groupTool.previousToolIndex >= 0 ? groupTool.tools[groupTool.previousToolIndex] : null;
                if (tool.isActive) // we want to deactivate the tool and switch to original
                {
                    tool.Deactivate();
                    if (previousTool != null && previousTool.tool != tool && previousTool.tool != null)
                    {
                        previousTool.tool.Activate();
                        groupTool.previousToolIndex = toolGroupIndex;
                    }
                }
                else
                {
                    for (int i = 0; i < groupTool.tools.Count; ++i)
                    {
                        var gt = groupTool.tools[i];
                        if (gt.tool.isActive)
                        {
                            groupTool.previousToolIndex = i;
                            gt.tool.Deactivate();
                        }
                    }
                    tool.Activate();
                    if (groupTool.tools[toolGroupIndex].activateCallback != null)
                    {
                        groupTool.tools[toolGroupIndex].activateCallback();
                    }
                }
            }
        }