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 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262
|
/*
Q Light Controller Plus
vcbutton.h
Copyright (c) Massimo Callegari
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0.txt
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
#ifndef VCBUTTON_H
#define VCBUTTON_H
#include "vcwidget.h"
#define KXMLQLCVCButton QStringLiteral("Button")
#define KXMLQLCVCButtonFunction QStringLiteral("Function")
#define KXMLQLCVCButtonFunctionID QStringLiteral("ID")
#define KXMLQLCVCButtonAction QStringLiteral("Action")
#define KXMLQLCVCButtonActionFlash QStringLiteral("Flash")
#define KXMLQLCVCButtonActionToggle QStringLiteral("Toggle")
#define KXMLQLCVCButtonActionBlackout QStringLiteral("Blackout")
#define KXMLQLCVCButtonActionStopAll QStringLiteral("StopAll")
#define KXMLQLCVCButtonFlashOverride QStringLiteral("Override")
#define KXMLQLCVCButtonFlashForceLTP QStringLiteral("ForceLTP")
#define KXMLQLCVCButtonStopAllFadeTime QStringLiteral("FadeOut")
#define KXMLQLCVCButtonIntensity QStringLiteral("Intensity")
#define KXMLQLCVCButtonIntensityAdjust QStringLiteral("Adjust")
class FunctionParent;
class VCButton : public VCWidget
{
Q_OBJECT
Q_PROPERTY(ButtonAction actionType READ actionType WRITE setActionType NOTIFY actionTypeChanged)
Q_PROPERTY(ButtonState state READ state WRITE setState NOTIFY stateChanged)
Q_PROPERTY(quint32 functionID READ functionID WRITE setFunctionID NOTIFY functionIDChanged)
Q_PROPERTY(bool startupIntensityEnabled READ startupIntensityEnabled WRITE setStartupIntensityEnabled NOTIFY startupIntensityEnabledChanged)
Q_PROPERTY(qreal startupIntensity READ startupIntensity WRITE setStartupIntensity NOTIFY startupIntensityChanged)
Q_PROPERTY(int stopAllFadeOutTime READ stopAllFadeOutTime WRITE setStopAllFadeOutTime NOTIFY stopAllFadeOutTimeChanged)
Q_PROPERTY(bool flashOverrides READ flashOverrides WRITE setFlashOverride NOTIFY flashOverrideChanged)
Q_PROPERTY(bool flashForceLTP READ flashForceLTP WRITE setFlashForceLTP NOTIFY flashForceLTPChanged)
/*********************************************************************
* Initialization
*********************************************************************/
public:
VCButton(Doc* doc = nullptr, QObject *parent = nullptr);
virtual ~VCButton();
/** @reimp */
QString defaultCaption();
/** @reimp */
void setupLookAndFeel(qreal pixelDensity, int page);
/** @reimp */
void render(QQuickView *view, QQuickItem *parent);
/** @reimp */
QString propertiesResource() const;
/** @reimp */
VCWidget *createCopy(VCWidget *parent);
protected:
/** @reimp */
bool copyFrom(const VCWidget* widget);
/*********************************************************************
* Function attachment
*********************************************************************/
public:
/**
* Attach a function to a VCButton. This function is started when the
* button is pressed down.
*
* @param function An ID of a function to attach
*/
Q_INVOKABLE void setFunctionID(quint32 fid);
/**
* Get the ID of the function attached to a VCButton
*
* @return The ID of the attached function or Function::invalidId()
* if there isn't one
*/
quint32 functionID() const;
/** @reimp */
void adjustFunctionIntensity(Function *f, qreal value);
/** @reimp */
void adjustIntensity(qreal val);
/**
* The actual method used to request a change of state of this
* Button. Depending on the action type this will start/stop
* the attached Function, if any */
Q_INVOKABLE void requestStateChange(bool pressed);
/** @reimp */
void notifyFunctionStarting(VCWidget *widget, quint32 fid, qreal fIntensity);
signals:
void functionIDChanged(quint32 id);
protected slots:
/** Handler for function running signal */
void slotFunctionRunning(quint32 fid);
/** Handler for function stop signal */
void slotFunctionStopped(quint32 fid);
/** Basically the same as slotFunctionStopped() but for flash signal */
void slotFunctionFlashing(quint32 fid, bool state);
private:
FunctionParent functionParent() const;
protected:
/** The ID of the Function that this button is controlling */
quint32 m_functionID;
/*****************************************************************************
* Flash Properties
*****************************************************************************/
public:
/** Gets if flashing overrides newer values */
bool flashOverrides() const;
/** Sets if flashing should override values */
void setFlashOverride(bool shouldOverride);
/** Gets if flash channels should behave like LTP channels */
bool flashForceLTP() const;
/** Sets if the flash channels should behave like LTP channels */
void setFlashForceLTP(bool forceLTP);
private:
bool m_flashOverrides;
bool m_flashForceLTP;
signals:
void flashOverrideChanged(bool shouldOverride);
void flashForceLTPChanged(bool forceLTP);
/*********************************************************************
* Button state
*********************************************************************/
public:
enum ButtonState
{
Inactive,
Monitoring,
Active
};
Q_ENUM(ButtonState)
/** Get/Set the button pressure state */
ButtonState state() const;
void setState(ButtonState state);
signals:
/** Signal emitted when the button has actually changed the graphic state */
void stateChanged(int state);
protected:
ButtonState m_state;
/*********************************************************************
* Button action
*********************************************************************/
public:
/**
* Toggle: Start/stop the assigned function.
* Flash: Keep the function running as long as the button is kept down.
* Blackout: Toggle blackout on/off.
* StopAll: Stop all functions (panic button).
*/
enum ButtonAction { Toggle, Flash, Blackout, StopAll };
Q_ENUM(ButtonAction)
ButtonAction actionType() const;
void setActionType(ButtonAction actionType);
static QString actionToString(ButtonAction action);
static ButtonAction stringToAction(const QString& str);
void setStopAllFadeOutTime(int ms);
int stopAllFadeOutTime() const;
signals:
void actionTypeChanged(ButtonAction actionType);
void stopAllFadeOutTimeChanged();
protected:
ButtonAction m_actionType;
/** if button action is StopAll, this indicates the time
* in milliseconds of fadeout before stopping */
int m_stopAllFadeOutTime;
/*****************************************************************************
* Function startup intensity adjustment
*****************************************************************************/
public:
/** Get/Set if a startup intensity amount should be applied
* when starting the attached Function */
bool startupIntensityEnabled() const;
void setStartupIntensityEnabled(bool enable);
/** Get/Set the amount of intensity adjustment applied
* when starting the attached Function */
qreal startupIntensity() const;
void setStartupIntensity(qreal fraction);
signals:
void startupIntensityEnabledChanged();
void startupIntensityChanged();
protected:
bool m_startupIntensityEnabled;
qreal m_startupIntensity;
/*********************************************************************
* External input
*********************************************************************/
public:
/** @reimp */
void updateFeedback();
public slots:
/** @reimp */
void slotInputValueChanged(quint8 id, uchar value);
/*********************************************************************
* Load & Save
*********************************************************************/
public:
/** @reimp */
bool loadXML(QXmlStreamReader &root);
/** @reimp */
bool saveXML(QXmlStreamWriter *doc);
};
#endif
|