kwave  18.07.70
SelectRangePlugin.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  SelectRangePlugin.cpp - Plugin for selecting a range of samples
3  -------------------
4  begin : Sat Jun 15 2002
5  copyright : (C) 2002 by Thomas Eschenbacher
6  email : Thomas.Eschenbacher@gmx.de
7  ***************************************************************************/
8 
9 /***************************************************************************
10  * *
11  * This program is free software; you can redistribute it and/or modify *
12  * it under the terms of the GNU General Public License as published by *
13  * the Free Software Foundation; either version 2 of the License, or *
14  * (at your option) any later version. *
15  * *
16  ***************************************************************************/
17 
18 #include "config.h"
19 #include <errno.h>
20 #include <math.h>
21 
22 #include <KLocalizedString>
23 #include <QString>
24 
25 #include "libkwave/Plugin.h"
26 #include "libkwave/PluginManager.h"
27 #include "libkwave/SignalManager.h"
28 #include "libkwave/String.h"
30 
31 #include "SelectRangeDialog.h"
32 #include "SelectRangePlugin.h"
33 
34 KWAVE_PLUGIN(selectrange, SelectRangePlugin)
35 
36 //***************************************************************************
38  const QVariantList &args)
39  :Kwave::Plugin(parent, args),
40  m_start_mode(Kwave::SelectTimeWidget::bySamples),
41  m_range_mode(Kwave::SelectTimeWidget::bySamples),
42  m_start(0), m_range(0)
43 {
44 }
45 
46 //***************************************************************************
48 {
49 }
50 
51 //***************************************************************************
52 QStringList *Kwave::SelectRangePlugin::setup(QStringList &previous_params)
53 {
54  // try to interpret the previous parameters
55  interpreteParameters(previous_params);
56 
57  // create the setup dialog
58  double rate = signalRate();
60  sample_index_t length = signalLength();
61 
62  Kwave::SelectRangeDialog *dialog =
64  m_start_mode, m_range_mode, m_range, rate, offset, length);
65  Q_ASSERT(dialog);
66  if (!dialog) return Q_NULLPTR;
67 
68  QStringList *list = new QStringList();
69  Q_ASSERT(list);
70  if (list && dialog->exec()) {
71  // user has pressed "OK"
72  *list << QString::number(dialog->startMode());
73  *list << QString::number(dialog->rangeMode());
74  *list << QString::number(dialog->start());
75  *list << QString::number(dialog->range());
76 
77  emitCommand(_("plugin:execute(selectrange,") +
78  QString::number(dialog->startMode()) + _(",") +
79  QString::number(dialog->rangeMode()) + _(",") +
80  QString::number(dialog->start()) + _(",") +
81  QString::number(dialog->range())+
82  _(")")
83  );
84  } else {
85  // user pressed "Cancel"
86  if (list) delete list;
87  list = Q_NULLPTR;
88  }
89 
90  if (dialog) delete dialog;
91  return list;
92 }
93 
94 //***************************************************************************
95 int Kwave::SelectRangePlugin::start(QStringList &params)
96 {
97  // interprete the parameters
98  int result = interpreteParameters(params);
99  if (result) return result;
100 
101  const sample_index_t signal_length = signalLength();
102 
103  // get current offset of the signal
105  m_start_mode, m_start, signalRate(), signal_length);
106 
107  // transform into offset and length [samples]
109  m_range_mode, m_range, signalRate(), signal_length);
110 
111  // limit selection to end of signal
112  if (length > signal_length)
113  length = signal_length;
114  if ((offset + length) >= signal_length)
115  length = signal_length - offset;
116 
117  // change the selection through the signal manager
118  {
119  Kwave::UndoTransactionGuard undo_guard(*this, i18n("Select Range"));
120  selectRange(offset, length);
121  }
122 
123  return result;
124 }
125 
126 //***************************************************************************
128 {
129  bool ok;
130  QString param;
131  int mode;
132 
133  // evaluate the parameter list
134  if (params.count() != 4) {
135  return -EINVAL;
136  }
137 
138  // selection mode for start
139  param = params[0];
140  mode = param.toInt(&ok);
141  Q_ASSERT(ok);
142  if (!ok) return -EINVAL;
143  Q_ASSERT(
144  (mode == static_cast<int>(Kwave::SelectTimeWidget::byTime)) ||
145  (mode == static_cast<int>(Kwave::SelectTimeWidget::bySamples)) ||
146  (mode == static_cast<int>(Kwave::SelectTimeWidget::byPercents))
147  );
148  if ((mode != static_cast<int>(Kwave::SelectTimeWidget::byTime)) &&
149  (mode != static_cast<int>(Kwave::SelectTimeWidget::bySamples)) &&
150  (mode != static_cast<int>(Kwave::SelectTimeWidget::byPercents)))
151  {
152  return -EINVAL;
153  }
154  m_start_mode = static_cast<Kwave::SelectTimeWidget::Mode>(mode);
155 
156 
157  // selection mode
158  param = params[1];
159  mode = param.toInt(&ok);
160  Q_ASSERT(ok);
161  if (!ok) return -EINVAL;
162  Q_ASSERT(
163  (mode == static_cast<int>(Kwave::SelectTimeWidget::byTime)) ||
164  (mode == static_cast<int>(Kwave::SelectTimeWidget::bySamples)) ||
165  (mode == static_cast<int>(Kwave::SelectTimeWidget::byPercents))
166  );
167  if ((mode != static_cast<int>(Kwave::SelectTimeWidget::byTime)) &&
168  (mode != static_cast<int>(Kwave::SelectTimeWidget::bySamples)) &&
169  (mode != static_cast<int>(Kwave::SelectTimeWidget::byPercents)))
170  {
171  return -EINVAL;
172  }
173  m_range_mode = static_cast<Kwave::SelectTimeWidget::Mode>(mode);
174 
175  // offset in ms, samples or percent
176  param = params[2];
177  m_start = param.toUInt(&ok);
178  if (!ok) return -EINVAL;
179 
180  // range in ms, samples or percent
181  param = params[3];
182  m_range = param.toUInt(&ok);
183  if (!ok) return -EINVAL;
184 
185  return 0;
186 }
187 
188 //***************************************************************************
189 #include "SelectRangePlugin.moc"
190 //***************************************************************************
191 //***************************************************************************
void emitCommand(const QString &command)
Definition: Plugin.cpp:510
int interpreteParameters(QStringList &params)
Definition: App.h:33
Kwave::SelectTimeWidget::Mode m_start_mode
virtual ~SelectRangePlugin() Q_DECL_OVERRIDE
QWidget * parentWidget() const
Definition: Plugin.cpp:450
quint64 sample_index_t
Definition: Sample.h:28
virtual QStringList * setup(QStringList &previous_params) Q_DECL_OVERRIDE
Kwave::PluginManager & manager() const
Definition: Plugin.cpp:437
static sample_index_t timeToSamples(Mode mode, quint64 time, double rate, sample_index_t length)
virtual sample_index_t signalLength()
Definition: Plugin.cpp:462
sample_index_t selectionStart()
virtual double signalRate()
Definition: Plugin.cpp:468
virtual void selectRange(sample_index_t offset, sample_index_t length)
Definition: Plugin.cpp:504
#define KWAVE_PLUGIN(name, class)
Definition: Plugin.h:54
#define _(m)
Definition: memcpy.c:66
virtual int start(QStringList &params) Q_DECL_OVERRIDE
Kwave::SelectTimeWidget::Mode m_range_mode