/**********************************************************************

   Audacity - A Digital Audio Editor
   Copyright 1999-2009 Audacity Team
   License: wxwidgets

   Dan Horgan

******************************************************************//**

\file CommandType.cpp
\brief Contains definitions for CommandType class

\class OldStyleCommandType
\brief Base class for containing data common to all commands of a given type.
Also acts as a factory.

*//*******************************************************************/

#include "../Audacity.h"
#include "CommandType.h"

#include <wx/string.h>

OldStyleCommandType::OldStyleCommandType()
   : mSymbol{}, mSignature{}
{ }

OldStyleCommandType::~OldStyleCommandType()
{
}

ComponentInterfaceSymbol OldStyleCommandType::GetSymbol()
{
   if (mSymbol.empty())
      mSymbol = BuildName();
   return mSymbol;
}

CommandSignature &OldStyleCommandType::GetSignature()
{
   if (!mSignature)
   {
      mSignature.emplace();
      BuildSignature(*mSignature);
   }
   return *mSignature;
}

wxString OldStyleCommandType::Describe()
{
   // PRL: Is this intended for end-user visibility or just debugging?  It did not
   // use _(""), so I assume it is meant to use internal strings
   wxString desc = GetSymbol().Internal() + wxT("\nParameters:");
   GetSignature();
   ParamValueMap::iterator iter;
   ParamValueMap defaults = mSignature->GetDefaults();
   for (iter = defaults.begin(); iter != defaults.end(); ++iter)
   {
      desc += wxT("\n") + iter->first + wxT(": ")
         + mSignature->GetValidator(iter->first).GetDescription()
         + wxT(" (default: ")
         + iter->second.MakeString() + wxT(")");
   }
   return desc;
}
