1 /***************************************************************************
2                  Drag.h  -  Drag&Drop container for Kwave's audio data
3 			     -------------------
4     begin                : Jan 24 2002
5     copyright            : (C) 2002 by Thomas Eschenbacher
6     email                : Thomas Eschenbacher <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 #ifndef DRAG_H
19 #define DRAG_H
20 
21 #include "config.h"
22 
23 #include <QtGlobal>
24 #include <QByteArray>
25 #include <QDrag>
26 #include <QObject>
27 #include <QString>
28 
29 #include "libkwave/Sample.h"
30 
31 class QMimeData;
32 class QWidget;
33 
34 namespace Kwave
35 {
36 
37     class MetaDataList;
38     class MultiTrackReader;
39     class SignalManager;
40 
41     /**
42      * Simple class for drag & drop of wav data.
43      * @todo the current storage mechanism is straight-forward and stupid, it
44      *       should be extended to use virtual memory
45      */
46     class Q_DECL_EXPORT Drag: public QDrag
47     {
48 	Q_OBJECT
49 
50     public:
51 	/**
52 	 * Constructor
53 	 * @see QDragObject
54 	 */
55         explicit Drag(QWidget *dragSource = Q_NULLPTR);
56 
57 	/** Destructor */
58 	virtual ~Drag();
59 
60 	/**
61 	 * Encodes wave data received from a MultiTrackReader into a byte
62 	 * array that is compatible with the format of a wav file.
63 	 * @param widget the widget used for displaying error messages
64 	 * @param src source of the samples
65 	 * @param meta_data information about the signal, sample rate,
66 	 *                  resolution and other meta data
67 	 * @return true if successful
68 	 */
69 	bool encode(QWidget *widget, Kwave::MultiTrackReader &src,
70 	            const Kwave::MetaDataList &meta_data);
71 
72 	/** Returns true if the mime type of the given source can be decoded */
73 	static bool canDecode(const QMimeData *data);
74 
75 	/**
76 	 * Decodes the encoded byte data of the given mime source and
77 	 * initializes a MultiTrackReader.
78 	 * @param widget the widget used for displaying error messages
79 	 * @param e mime source
80 	 * @param sig signal that receives the mime data
81 	 * @param pos position within the signal where to insert the data
82 	 * @return number of decoded samples if successful, zero if failed
83 	 */
84 	static sample_index_t decode(QWidget *widget, const QMimeData *e,
85 	                             Kwave::SignalManager &sig,
86 	                             sample_index_t pos);
87 
88     };
89 }
90 
91 #endif /* DRAG_H */
92 
93 //***************************************************************************
94 //***************************************************************************
95