Sayonara Player
Dragable.h
1 /* Dragable.h */
2 
3 /* Copyright (C) 2011-2019 Lucio Carreras
4  *
5  * This file is part of sayonara player
6  *
7  * This program is free software: you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation, either version 3 of the License, or
10  * (at your option) any later version.
11 
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16 
17  * You should have received a copy of the GNU General Public License
18  * along with this program. If not, see <http://www.gnu.org/licenses/>.
19  */
20 
21 #ifndef DRAGGABLE_H
22 #define DRAGGABLE_H
23 
24 #include "Utils/Pimpl.h"
25 
26 class QPoint;
27 class QPixmap;
28 class QMimeData;
29 class QWidget;
30 class QDrag;
31 
37 class Dragable
38 {
39 public:
40  explicit Dragable(QWidget* parent);
41  virtual ~Dragable();
42 
43  enum class ReleaseReason : char
44  {
45  Dropped,
46  Destroyed
47  };
48 
49 private:
50  PIMPL(Dragable)
51 
52 protected:
53  virtual void drag_pressed(const QPoint& p) final;
54  virtual QDrag* drag_moving(const QPoint& p) final;
55  virtual void drag_released(ReleaseReason reason);
56 
57  virtual QMimeData* dragable_mimedata() const=0;
58  virtual bool is_valid_drag_position(const QPoint& p) const;
59  virtual QPixmap drag_pixmap() const;
60  virtual bool has_drag_label() const;
61  virtual QString drag_label() const;
62 };
63 
64 
65 
66 #endif // DRAGGABLE_H
The Dragable class.
Definition: Dragable.h:37