File: ExportUtils.cpp

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 (90 lines) | stat: -rw-r--r-- 2,374 bytes parent folder | download | duplicates (2)
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/**********************************************************************

  Audacity: A Digital Audio Editor

  ExportUtils.cpp

  Dominic Mazzoni

  Vitaly Sverchinsky split from ExportPlugin.h

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

#include "ExportUtils.h"

#include <algorithm>
#include <vector>

#include "Track.h"
#include "ViewInfo.h"
#include "WaveTrack.h"

//TODO: used in many places in anticipation that Exporter yields same result, fix that
TrackIterRange<const WaveTrack> ExportUtils::FindExportWaveTracks(const TrackList& tracks, bool selectedOnly)
{
   bool anySolo =
      !(tracks.Any<const WaveTrack>() + &WaveTrack::GetSolo).empty();

   return tracks.Any<const WaveTrack>()
      + (selectedOnly ? &Track::IsSelected : &Track::Any)
      - (anySolo ? &WaveTrack::GetNotSolo : &WaveTrack::GetMute);
}

bool ExportUtils::HasSelectedAudio(const AudacityProject& project)
{
   return !FindExportWaveTracks(TrackList::Get(project), true).empty() &&
      !ViewInfo::Get(project).selectedRegion.isPoint();
}

ExportProcessor::Parameters ExportUtils::ParametersFromEditor(const ExportOptionsEditor& editor)
{
   ExportProcessor::Parameters parameters;
   for(int i = 0, count = editor.GetOptionsCount(); i < count; ++i)
   {
      ExportOption option;
      ExportValue value;
      if(editor.GetOption(i, option) && editor.GetValue(option.id, value))
         parameters.emplace_back(option.id, value);
   }
   return parameters;
}

namespace
{
struct ExportHookElement final
{
   ExportUtils::ExportHook hook;
   ExportUtils::Priority priority;
};

auto& ExportHooks()
{
   static std::vector<ExportHookElement> hooks;
   return hooks;
}
}

void ExportUtils::RegisterExportHook(ExportHook hook, Priority priority)
{
   auto& hooks = ExportHooks();
   hooks.insert(
      std::upper_bound(
         hooks.begin(), hooks.end(), priority,
         [](Priority priority, const ExportHookElement& element)
         { return priority > element.priority; }),
      { hook, priority });
}

void ExportUtils::PerformInteractiveExport(
   AudacityProject& project, const FileExtension& format, AudiocomTrace trace,
   bool selectedOnly)
{
   auto& hooks = ExportHooks();
   for (auto& hook : hooks)
   {
      if (
         hook.hook(project, format, trace, selectedOnly) !=
         ExportHookResult::Continue)
         return;
   }
}