1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-05-04 17:49:45 +02:00

Some more factory functions return smart pointers

* factories:
  MakeCursor returns smart pointer; TrackPanel stores smart pointers to cursors
  AudacityApp::ParseCommandLine returns smart pointer
This commit is contained in:
Paul Licameli 2016-04-09 23:19:35 -04:00
commit a655545a1e
5 changed files with 42 additions and 96 deletions

View File

@ -57,4 +57,4 @@
#endif
wxCursor * MakeCursor(int WXUNUSED(CursorId), const char * pXpm[36], int HotX, int HotY);
std::unique_ptr<wxCursor> MakeCursor(int WXUNUSED(CursorId), const char * pXpm[36], int HotX, int HotY);

View File

@ -640,7 +640,7 @@ public:
return NULL;
}
// Trust wxWidgets framework to delete it
// Trust wxWidgets framework to DELETE it
return safenew IPCConn();
};
};
@ -1143,6 +1143,10 @@ AudacityApp::AudacityApp()
#endif
}
AudacityApp::~AudacityApp()
{
}
// The `main program' equivalent, creating the windows and returning the
// main frame
bool AudacityApp::OnInit()
@ -1323,19 +1327,15 @@ bool AudacityApp::OnInit()
// Parse command line and handle options that might require
// immediate exit...no need to initialize all of the audio
// stuff to display the version string.
wxCmdLineParser *parser = ParseCommandLine();
auto parser = ParseCommandLine();
if (!parser)
{
delete parser;
// Either user requested help or a parsing error occured
exit(1);
}
if (parser->Found(wxT("v")))
{
delete parser;
wxFprintf(stderr, wxT("Audacity v%s\n"), AUDACITY_VERSION_STRING);
exit(0);
}
@ -1345,8 +1345,6 @@ bool AudacityApp::OnInit()
{
if (lval < 256 || lval > 100000000)
{
delete parser;
wxPrintf(_("Block size must be within 256 to 100000000\n"));
exit(1);
}
@ -1463,7 +1461,6 @@ bool AudacityApp::OnInit()
{
// Important: Prevent deleting any temporary files!
DirManager::SetDontDeleteTempFiles();
delete parser;
QuitAudacity(true);
return false;
}
@ -1475,8 +1472,6 @@ bool AudacityApp::OnInit()
{
if (parser->Found(wxT("t")))
{
delete parser;
RunBenchmark(NULL);
return false;
}
@ -1491,8 +1486,6 @@ bool AudacityApp::OnInit()
#endif
}
delete parser;
gInited = true;
ModuleManager::Get().Dispatch(AppInitialized);
@ -1664,7 +1657,7 @@ bool AudacityApp::CreateSingleInstanceChecker(const wxString &dir)
else if ( mChecker->IsAnotherRunning() ) {
// Parse the command line to ensure correct syntax, but
// ignore options and only use the filenames, if any.
wxCmdLineParser *parser = ParseCommandLine();
auto parser = ParseCommandLine();
if (!parser)
{
// Complaints have already been made
@ -1703,10 +1696,7 @@ bool AudacityApp::CreateSingleInstanceChecker(const wxString &dir)
delete conn;
if (ok)
{
delete parser;
return false;
}
}
wxMilliSleep(10);
@ -1738,7 +1728,6 @@ bool AudacityApp::CreateSingleInstanceChecker(const wxString &dir)
}
sock->Destroy();
delete parser;
return false;
}
@ -1755,7 +1744,6 @@ bool AudacityApp::CreateSingleInstanceChecker(const wxString &dir)
_("Use the New or Open commands in the currently running Audacity\nprocess to open multiple projects simultaneously.\n");
wxMessageBox(prompt, _("Audacity is already running"),
wxOK | wxICON_ERROR);
delete parser;
delete mChecker;
return false;
}
@ -1826,9 +1814,9 @@ void AudacityApp::OnSocketEvent(wxSocketEvent & evt)
#endif
wxCmdLineParser *AudacityApp::ParseCommandLine()
std::unique_ptr<wxCmdLineParser> AudacityApp::ParseCommandLine()
{
wxCmdLineParser *parser = new wxCmdLineParser(argc, argv);
auto parser = std::make_unique<wxCmdLineParser>(argc, argv);
if (!parser)
{
return NULL;
@ -1861,13 +1849,9 @@ wxCmdLineParser *AudacityApp::ParseCommandLine()
// Run the parser
if (parser->Parse() == 0)
{
return parser;
}
return std::move(parser);
delete parser;
return NULL;
return{};
}
// static

View File

@ -16,6 +16,7 @@
#include "Audacity.h"
#include "MemoryX.h"
#include <wx/app.h>
#include <wx/cmdline.h>
#include <wx/dir.h>
@ -100,6 +101,7 @@ class BlockFile;
class AudacityApp final : public wxApp {
public:
AudacityApp();
~AudacityApp();
bool OnInit(void) override;
int OnExit(void) override;
void OnFatalException() override;
@ -217,7 +219,7 @@ class AudacityApp final : public wxApp {
bool InitTempDir();
bool CreateSingleInstanceChecker(const wxString &dir);
wxCmdLineParser *ParseCommandLine();
std::unique_ptr<wxCmdLineParser> ParseCommandLine();
bool mWindowRectAlreadySaved;

View File

@ -418,10 +418,8 @@ END_EVENT_TABLE()
/// Makes a cursor from an XPM, uses CursorId as a fallback.
/// TODO: Move this function to some other source file for reuse elsewhere.
wxCursor * MakeCursor( int WXUNUSED(CursorId), const char * pXpm[36], int HotX, int HotY )
std::unique_ptr<wxCursor> MakeCursor( int WXUNUSED(CursorId), const char * pXpm[36], int HotX, int HotY )
{
wxCursor * pCursor;
#ifdef CURSORS_SIZE32
const int HotAdjust =0;
#else
@ -434,9 +432,7 @@ wxCursor * MakeCursor( int WXUNUSED(CursorId), const char * pXpm[36], int HotX,
Image.SetOption( wxIMAGE_OPTION_CUR_HOTSPOT_X, HotX-HotAdjust );
Image.SetOption( wxIMAGE_OPTION_CUR_HOTSPOT_Y, HotY-HotAdjust );
pCursor = new wxCursor( Image );
return pCursor;
return std::make_unique<wxCursor>( Image );
}
@ -523,12 +519,12 @@ TrackPanel::TrackPanel(wxWindow * parent, wxWindowID id,
StretchRightCursorXpm, 16, 16);
#endif
mArrowCursor = new wxCursor(wxCURSOR_ARROW);
mSmoothCursor = new wxCursor(wxCURSOR_SPRAYCAN);
mResizeCursor = new wxCursor(wxCURSOR_SIZENS);
mRearrangeCursor = new wxCursor(wxCURSOR_HAND);
mAdjustLeftSelectionCursor = new wxCursor(wxCURSOR_POINT_LEFT);
mAdjustRightSelectionCursor = new wxCursor(wxCURSOR_POINT_RIGHT);
mArrowCursor = std::make_unique<wxCursor>(wxCURSOR_ARROW);
mSmoothCursor = std::make_unique<wxCursor>(wxCURSOR_SPRAYCAN);
mResizeCursor = std::make_unique<wxCursor>(wxCURSOR_SIZENS);
mRearrangeCursor = std::make_unique<wxCursor>(wxCURSOR_HAND);
mAdjustLeftSelectionCursor = std::make_unique<wxCursor>(wxCURSOR_POINT_LEFT);
mAdjustRightSelectionCursor = std::make_unique<wxCursor>(wxCURSOR_POINT_RIGHT);
mWaveTrackMenu = NULL;
mChannelItemsInsertionPoint = 0;
@ -651,31 +647,6 @@ TrackPanel::~TrackPanel()
}
delete mTrackArtist;
delete mArrowCursor;
delete mPencilCursor;
delete mSelectCursor;
delete mEnvelopeCursor;
delete mDisabledCursor;
delete mSlideCursor;
delete mResizeCursor;
delete mSmoothCursor;
delete mZoomInCursor;
delete mZoomOutCursor;
delete mLabelCursorLeft;
delete mLabelCursorRight;
delete mRearrangeCursor;
delete mAdjustLeftSelectionCursor;
delete mAdjustRightSelectionCursor;
#ifdef EXPERIMENTAL_SPECTRAL_EDITING
delete mBottomFrequencyCursor;
delete mTopFrequencyCursor;
delete mBandWidthCursor;
#endif
#if USE_MIDI
delete mStretchCursor;
delete mStretchLeftCursor;
delete mStretchRightCursor;
#endif
delete mSnapManager;
@ -1796,7 +1767,7 @@ void TrackPanel::HandleCenterFrequencyCursor
#endif
*ppCursor = mEnvelopeCursor;
*ppCursor = mEnvelopeCursor.get();
}
void TrackPanel::HandleCenterFrequencyClick
@ -1832,7 +1803,7 @@ void TrackPanel::SetCursorAndTipWhenSelectTool( Track * t,
{
// Do not set the default cursor here and re-set later, that causes
// flashing.
*ppCursor = mSelectCursor;
*ppCursor = mSelectCursor.get();
//In Multi-tool mode, give multitool prompt if no-special-hit.
if( bMultiToolMode ) {
@ -1880,7 +1851,7 @@ void TrackPanel::SetCursorAndTipWhenSelectTool( Track * t,
isSpectralSelectionTrack(t)) {
// Not shift-down, but center frequency snapping toggle is on
tip = _("Click and drag to set frequency bandwidth.");
*ppCursor = mEnvelopeCursor;
*ppCursor = mEnvelopeCursor.get();
return;
}
#endif
@ -1906,7 +1877,7 @@ void TrackPanel::SetCursorAndTipWhenSelectTool( Track * t,
case SBRight:
if ( HitTestStretch(t, rect, event)) {
tip = _("Click and drag to stretch within selected region.");
*ppCursor = mStretchCursor;
*ppCursor = mStretchCursor.get();
return;
}
break;
@ -1927,27 +1898,27 @@ void TrackPanel::SetCursorAndTipWhenSelectTool( Track * t,
break;
case SBLeft:
tip = _("Click and drag to move left selection boundary.");
*ppCursor = mAdjustLeftSelectionCursor;
*ppCursor = mAdjustLeftSelectionCursor.get();
return;
case SBRight:
tip = _("Click and drag to move right selection boundary.");
*ppCursor = mAdjustRightSelectionCursor;
*ppCursor = mAdjustRightSelectionCursor.get();
return;
#ifdef EXPERIMENTAL_SPECTRAL_EDITING
case SBBottom:
tip = _("Click and drag to move bottom selection frequency.");
*ppCursor = mBottomFrequencyCursor;
*ppCursor = mBottomFrequencyCursor.get();
return;
case SBTop:
tip = _("Click and drag to move top selection frequency.");
*ppCursor = mTopFrequencyCursor;
*ppCursor = mTopFrequencyCursor.get();
return;
case SBCenter:
HandleCenterFrequencyCursor(bShiftDown, tip, ppCursor);
return;
case SBWidth:
tip = _("Click and drag to adjust frequency bandwidth.");
*ppCursor = mBandWidthCursor;
*ppCursor = mBandWidthCursor.get();
return;
#endif
default:

View File

@ -819,31 +819,20 @@ protected:
int mLogMaxScrubSpeed;
#endif
wxCursor *mArrowCursor;
wxCursor *mPencilCursor;
wxCursor *mSelectCursor;
wxCursor *mResizeCursor;
wxCursor *mSlideCursor;
wxCursor *mEnvelopeCursor; // doubles as the center frequency cursor
std::unique_ptr<wxCursor>
mArrowCursor, mPencilCursor, mSelectCursor,
mResizeCursor, mSlideCursor, mEnvelopeCursor, // doubles as the center frequency cursor
// for spectral selection
wxCursor *mSmoothCursor;
wxCursor *mZoomInCursor;
wxCursor *mZoomOutCursor;
wxCursor *mLabelCursorLeft;
wxCursor *mLabelCursorRight;
wxCursor *mRearrangeCursor;
wxCursor *mDisabledCursor;
wxCursor *mAdjustLeftSelectionCursor;
wxCursor *mAdjustRightSelectionCursor;
mSmoothCursor, mZoomInCursor, mZoomOutCursor,
mLabelCursorLeft, mLabelCursorRight, mRearrangeCursor,
mDisabledCursor, mAdjustLeftSelectionCursor, mAdjustRightSelectionCursor;
#ifdef EXPERIMENTAL_SPECTRAL_EDITING
wxCursor *mBottomFrequencyCursor;
wxCursor *mTopFrequencyCursor;
wxCursor *mBandWidthCursor;
std::unique_ptr<wxCursor>
mBottomFrequencyCursor, mTopFrequencyCursor, mBandWidthCursor;
#endif
#if USE_MIDI
wxCursor *mStretchCursor;
wxCursor *mStretchLeftCursor;
wxCursor *mStretchRightCursor;
std::unique_ptr<wxCursor>
mStretchCursor, mStretchLeftCursor, mStretchRightCursor;
#endif
wxMenu *mWaveTrackMenu;