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 
32 namespace Gui
33 {
38  class Dragable
39  {
40  public:
41  explicit Dragable(QWidget* parent);
42  virtual ~Dragable();
43 
44  enum class ReleaseReason : char
45  {
46  Dropped,
47  Destroyed
48  };
49 
50  private:
51  PIMPL(Dragable)
52 
53  protected:
54  virtual void drag_pressed(const QPoint& p) final;
55  virtual QDrag* drag_moving(const QPoint& p) final;
56  virtual void drag_released(ReleaseReason reason);
57 
58  virtual QMimeData* dragable_mimedata() const=0;
59  virtual bool is_valid_drag_position(const QPoint& p) const;
60  virtual QPixmap drag_pixmap() const;
61  virtual bool has_drag_label() const;
62  virtual QString drag_label() const;
63  };
64 }
65 
66 #endif // DRAGGABLE_H
Definition: AbstractLibrary.h:36
The Dragable class.
Definition: Dragable.h:38