audacia/src/commands/ScreenshotCommand.h

153 lines
4.1 KiB
C++

/**********************************************************************
Audacity - A Digital Audio Editor
Copyright 1999-2018 Audacity Team
License: GPL v2 - see LICENSE.txt
Dominic Mazzoni
Dan Horgan
James Crook
**********************************************************************/
#ifndef __SCREENSHOT_COMMAND__
#define __SCREENSHOT_COMMAND__
#include "Command.h"
#include <wx/colour.h> // member variable
class wxWindow;
class wxTopLevelWindow;
class wxCommandEvent;
class wxRect;
class ToolManager;
class CommandOutputTargets;
class TrackPanel;
class AdornedRulerPanel;
class AudacityProject;
class CommandContext;
class AUDACITY_DLL_API ScreenshotCommand : public AudacityCommand
{
public:
enum kBackgrounds
{
kBlue,
kWhite,
kNone,
nBackgrounds
};
enum kCaptureTypes
{
kwindow,
kfullwindow,
kwindowplus,
kfullscreen,
ktoolbars,
keffects,
kscriptables,
kpreferences,
kselectionbar,
kspectralselection,
ktimer,
ktools,
ktransport,
kmixer,
kmeter,
kplaymeter,
krecordmeter,
kedit,
kdevice,
kscrub,
ktranscription,
ktrackpanel,
kruler,
ktracks,
kfirsttrack,
kfirsttwotracks,
kfirstthreetracks,
kfirstfourtracks,
ksecondtrack,
ktracksplus,
kfirsttrackplus,
kalltracks,
kalltracksplus,
nCaptureWhats
};
static const ComponentInterfaceSymbol Symbol;
ScreenshotCommand();
// ComponentInterface overrides
ComponentInterfaceSymbol GetSymbol() override {return Symbol;};
TranslatableString GetDescription() override {return XO("Takes screenshots.");};
bool DefineParams( ShuttleParams & S ) override;
void PopulateOrExchange(ShuttleGui & S) override;
// AudacityCommand overrides
ManualPageID ManualPage() override {return L"Extra_Menu:_Scriptables_II#screenshot_short_format";}
private:
int mWhat;
int mBack;
wxString mPath;
bool mbBringToTop;
bool bHasBackground;
bool bHasBringToTop;
friend class ScreenshotBigDialog;
public:
bool Apply(const CommandContext & context) override;
void GetDerivedParams();
private:
// May need to ignore the screenshot dialog
// Appears not to be used anymore.
wxWindow *mIgnore;
bool mBackground;
wxColour mBackColor;
wxString mDirToWriteTo;
wxString mFilePath;
wxString mFileName;
int mCaptureMode;
wxString MakeFileName(const wxString &path, const wxString &basename);
wxRect GetBackgroundRect();
bool CaptureToolbar(const CommandContext & Context, ToolManager *man, int type, const wxString &name);
bool CaptureDock(const CommandContext & Context, wxWindow *win, const wxString &fileName);
void CaptureCommands(const CommandContext & Context, const wxArrayStringEx &Commands );
void CaptureEffects(const CommandContext & Context, AudacityProject * pProject, const wxString &fileName );
void CaptureScriptables(const CommandContext & Context, AudacityProject * pProject, const wxString &fileName );
void CapturePreferences(const CommandContext & Context, AudacityProject * pProject, const wxString &fileName );
bool Capture(
const CommandContext & Context,
const wxString &basename,
wxWindow *window, wxRect rect,
bool bg = false);
wxRect GetWindowRect(wxTopLevelWindow *w);
wxRect GetFullWindowRect(wxTopLevelWindow *w);
wxRect GetScreenRect();
wxRect GetPanelRect(TrackPanel * panel);
wxRect GetRulerRect(AdornedRulerPanel *ruler);
wxRect GetTracksRect(TrackPanel * panel);
wxRect GetTrackRect( AudacityProject * pProj, TrackPanel * panel,int n);
wxString WindowFileName(AudacityProject * proj, wxTopLevelWindow *w);
public:
static ScreenshotCommand * mpShooter;
static void (*mIdleHandler)(wxIdleEvent& event);
static void SetIdleHandler( AudacityProject &project );
static bool MayCapture( wxDialog * pDlg );
void CaptureWindowOnIdle( const CommandContext & context, wxWindow * pWin );
wxTopLevelWindow *GetFrontWindow(AudacityProject *project);
};
#endif /* End of include guard: __SCREENSHOT_COMMAND__ */