File: MultiStateWidget.h

package info (click to toggle)
kwave 25.04.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 23,272 kB
  • sloc: cpp: 56,173; xml: 817; perl: 688; sh: 57; makefile: 11
file content (125 lines) | stat: -rw-r--r-- 3,942 bytes parent folder | download
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
/***************************************************************************
  MultiStateWidget.h  -  provides methods of multistateWidget a Class that
                         switches the image it, displays on clicking, used
                         for the channel enable/disable lamps...
                             -------------------
    begin                : Sun Jun 04 2000
    copyright            : (C) 2000 by Martin Wilz
    email                : martin@wilz.de
 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 ***************************************************************************/
#ifndef MULTI_STATE_WIDGET_H
#define MULTI_STATE_WIDGET_H

#include "config.h"
#include "libkwavegui_export.h"

#include <QtGlobal>
#include <QPixmap>
#include <QVector>
#include <QWidget>

class QPaintEvent;
class QMouseEvent;
class QString;

namespace Kwave
{

    class LIBKWAVEGUI_EXPORT MultiStateWidget: public QWidget
    {
        Q_OBJECT

    public:

        /**
         * Constructor
         * @param parent the parent widget
         * @param id identifier
         */
        MultiStateWidget(QWidget *parent, int id);

        /** Destructor */
        ~MultiStateWidget() override;

        /**
         * Sets the number that will passed as argument to the
         * "clicked" signal.
         * @param id new identifier
         */
        void setID(int id);

        /**
         * Adds a the content of pixmap file as pixmap for the
         * next state. The file is found through the KStandardDirs
         * mechanism. Adding a file for a second or further time
         * is not possible, in this case the pixmap will not be
         * loaded and the return value will be the id of the
         * existing version.
         * @see KStandardDirs
         * @param filename name of the file to be added, without
         *        path.
         */
        void addPixmap(const QString &filename);

    public slots:

        /**
         * Activates a new state, with wrap-around on overflows, limited
         * to [ 0 ... m_pixmaps.count()-1 ].
         * @param newstate index of the new state [0...N]
         */
        void setState(int newstate);

        /**
         * For widgets that have only two states (on and off),
         * this selects state 1 or 0
         * @param on if true, switch on (state 1), otherwise
         *           switch off (state 0)
         */
        void switchState(bool on);

        /** advance to the next state, with wrap-around to zero */
        void nextState();

    signals:

        /**
         * Signals that the widget has changed it's state.
         * @param id identifier of this widget's instance
         */
        void clicked(int id);

    private:

        /** reacts to the mouse release (click) */
        void mouseReleaseEvent(QMouseEvent *) override;

        /** repaints the pixmap */
        void paintEvent(QPaintEvent *) override;

    private:

        /** index of the current state */
        int m_current_index;

        /** identifier used for the clicked() signal */
        int m_identifier;

        /** list of QPixmaps */
        QVector<QPixmap> m_pixmaps;
    };
}

#endif  // _MULTI_STATE_WIDGET_H_

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