audacia/src/commands/SetProjectCommand.cpp

94 lines
2.7 KiB
C++

/**********************************************************************
Audacity - A Digital Audio Editor
Copyright 1999-2018 Audacity Team
License: wxwidgets
Dan Horgan
James Crook
******************************************************************//**
\file SetProjectCommand.cpp
\brief Definitions for SetProjectCommand
\class SetProjectCommand
\brief Command that sets project information
*//*******************************************************************/
#include "SetProjectCommand.h"
#include "LoadCommands.h"
#include "../Project.h"
#include "../WaveTrack.h"
#include "../Shuttle.h"
#include "../ShuttleGui.h"
#include "CommandContext.h"
#include "../toolbars/SelectionBar.h"
#include <wx/frame.h>
const ComponentInterfaceSymbol SetProjectCommand::Symbol
{ XO("Set Project") };
namespace{ BuiltinCommandsModule::Registration< SetProjectCommand > reg; }
SetProjectCommand::SetProjectCommand()
{
}
bool SetProjectCommand::DefineParams( ShuttleParams & S ){
S.OptionalN( bHasName ).Define( mName, wxT("Name"), _("Project") );
S.OptionalN( bHasRate ).Define( mRate, wxT("Rate"), 44100.0, 1.0, 1000000.0);
S.OptionalY( bHasSizing ).Define( mPosX, wxT("X"), 10.0, 0.0, 2000.0);
S.OptionalY( bHasSizing ).Define( mPosY, wxT("Y"), 10.0, 0.0, 2000.0);
S.OptionalY( bHasSizing ).Define( mWidth, wxT("Width"), 1000.0, 200.0, 4000.0);
S.OptionalY( bHasSizing ).Define( mHeight, wxT("Height"), 900.0, 200.0, 4000.0);
return true;
};
void SetProjectCommand::PopulateOrExchange(ShuttleGui & S)
{
S.AddSpace(0, 5);
S.StartMultiColumn(3, wxALIGN_CENTER);
{
S.Optional( bHasName ).TieTextBox( XXO("Name:"), mName );
S.Optional( bHasRate ).TieTextBox( XXO("Rate:"), mRate );
S.TieCheckBox( XXO("Resize:"), bHasSizing );
S.AddSpace(0,0);
}
S.EndMultiColumn();
S.StartMultiColumn(2, wxALIGN_CENTER);
{
S.TieNumericTextBox( XXO("X:"), mPosX );
S.TieNumericTextBox( XXO("Y:"), mPosY );
S.TieNumericTextBox( XXO("Width:"), mWidth );
S.TieNumericTextBox( XXO("Height:"), mHeight );
}
S.EndMultiColumn();
}
bool SetProjectCommand::Apply(const CommandContext & context)
{
auto &project = context.project;
auto &window = GetProjectFrame( project );
if( bHasName )
window.SetLabel(mName);
if( bHasRate && mRate >= 1 && mRate <= 1000000 )
{
auto &bar = SelectionBar::Get( project );
bar.SetRate( mRate );
}
if( bHasSizing )
{
window.SetPosition( wxPoint( mPosX, mPosY));
window.SetSize( wxSize( mWidth, mHeight ));
}
return true;
}