public Rotate3DTool()
            : base(SR.TooltipRotate3D)
        {
            CursorToken = new CursorToken("Icons.Rotate3DToolSmall.png", GetType().Assembly);
            _operation  = new SpatialTransform3DImageOperation(Apply);

            const string graphicName = "Icons.NoSpineLabeling.png";
            var          iconSet     = new UnavailableActionIconSet(new IconSet("Icons.Rotate3DToolSmall.png", "Icons.Rotate3DToolMedium.png", "Icons.Rotate3DToolLarge.png"));
            var          resolver    = new ApplicationThemeResourceResolver(GetType(), false);

            _flashOverlayController = new FlashOverlayController(iconSet, resolver)
            {
                FlashSpeed = 1500
            };
        }
		public AbstractActionModelTreeLeafAction(IAction action)
			: base(action.Path.LastSegment)
		{
			Platform.CheckForNullReference(action, "action");
			Platform.CheckTrue(action.Persistent, "Action must be persistent.");

			// this allows us to keep a "clone" that is independent of the live action objects
			// that might (probably are) in use or cached in some tool or component somewhere.
			_action = AbstractAction.Create(action);

			CheckState = _action.Available ? CheckState.Checked : CheckState.Unchecked;

			IconSet iconSet;
			if (action.IconSet == null || action.ResourceResolver == null)
			{
				iconSet = new IconSet("Icons.ActionModelNullSmall.png", "Icons.ActionModelNullMedium.png", "Icons.ActionModelNullLarge.png");
				ResourceResolver = new ApplicationThemeResourceResolver(typeof(AbstractActionModelTreeLeafAction).Assembly, action.ResourceResolver);
			}
			else
			{
				iconSet = _action.IconSet;
				ResourceResolver = _action.ResourceResolver;
			}

			if (_action.Permissible)
			{
				IconSet = iconSet;
			}
			else
			{
				IconSet = new UnavailableActionIconSet(iconSet);
				Description = SR.TooltipActionNotPermitted;
				Tooltip = String.IsNullOrEmpty(CanonicalLabel) ?
					SR.TooltipActionNotPermitted : String.Format(SR.TooltipFormatActionNotPermitted, CanonicalLabel);
			}
		}