File: FileException.h

package info (click to toggle)
audacity 3.7.3%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 125,252 kB
  • sloc: cpp: 358,238; ansic: 75,458; lisp: 7,761; sh: 3,410; python: 1,503; xml: 1,385; perl: 854; makefile: 122
file content (67 lines) | stat: -rw-r--r-- 2,095 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
/*!
  @file FileException.h
  @brief MessageBoxException for failures of file operations
  

  Created by Paul Licameli on 11/22/16.

*/

#ifndef __AUDACITY_FILE_EXCEPTION__
#define __AUDACITY_FILE_EXCEPTION__

#include "AudacityException.h" // to inherit
#include <wx/filename.h> // wxFileName member variable

//! Thrown for failure of file or database operations in deeply nested places
class FILES_API FileException /* not final */
   : public MessageBoxException
{
public:
   //! Identifies file operation that failed
   enum class Cause {
      Open,
      Read,
      Write, //!< most important to detect when storage space is exhausted
      Rename //!< involves two filenames
   };

   explicit FileException(
      Cause cause_, //!< What kind of file operation failed
      const wxFileName &fileName_, //!< Which file suffered a failure
      const TranslatableString &caption = XO("File Error"), //!< Shown in message box frame, not the main message
      const wxFileName &renameTarget_ = {} //!< A second file name, only for renaming failure
   )
   // DV: We consider a FileException to be internal for now.
   // We used to have some odd cases related to the read-only folder in 3.0.0,
   // so it is good to have a full picture here.
   // In case we see too many - we will tweak this behavior in the next release.
   : MessageBoxException{ ExceptionType::Internal, caption }
   , cause{ cause_ }, fileName{ fileName_ }, renameTarget{ renameTarget_ }
   {}

   FileException( const FileException &that )
      : MessageBoxException( that )
      , cause{ that.cause }
      , fileName{ that.fileName }
      , renameTarget{ that.renameTarget }
   {}

   FileException& operator= (FileException&&) = delete;

   ~FileException() override;

   static TranslatableString WriteFailureMessage(const wxFileName &fileName);

protected:
   //! %Format an error message appropriate for the @ref Cause.
   TranslatableString ErrorMessage() const override;
   wxString ErrorHelpUrl() const override;

public:
   Cause cause;
   wxFileName fileName;
   wxFileName renameTarget;
};

#endif