blob: ed2246954fcd04bccab1740165065340b2ce461d (
plain)
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
|
//===========================================
// Lumina-DE source code
// Copyright (c) 2015, Ken Moore
// Available under the 3-clause BSD license
// See the LICENSE file for full details
//===========================================
#include "SSBaseWidget.h"
#define DEBUG 1
static QStringList validPlugs;
// ========
// PUBLIC
// ========
SSBaseWidget::SSBaseWidget(QWidget *parent, QSettings *set) : QWidget(parent){
if(validPlugs.isEmpty()){ validPlugs << "none"; } //add more later
settings = set; //needed to pass along for plugins to read any special options/settings
this->setObjectName("LuminaBaseSSWidget");
ANIM = 0;
this->setMouseTracking(true);
plugType="none";
}
SSBaseWidget::~SSBaseWidget(){
if(ANIM!=0){ this->stopPainting(); }
}
void SSBaseWidget::setPlugin(QString plug){
plug = plug.toLower();
if(validPlugs.contains(plug) || plug=="random"){ plugType = plug; }
else{ plugType = "none"; }
}
// =============
// PUBLIC SLOTS
// =============
void SSBaseWidget::startPainting(){
cplug = plugType;
//free up any old animation instance
if(ANIM!=0){
ANIM->stop(); ANIM->clear();
delete ANIM; ANIM = 0;
}
//If a random plugin - grab one of the known plugins
if(cplug=="random"){
QStringList valid = BaseAnimGroup::KnownAnimations();
valid.removeAll("none"); //they want a screensaver - remove the "none" option from the valid list
if(valid.isEmpty()){ cplug = "none"; } //no known plugins
else{ cplug = valid[ qrand()%valid.length() ]; } //grab a random plugin
}
if(DEBUG){ qDebug() << " - Screen Saver:" << cplug; }
//Now list all the various plugins and start them appropriately
QString style;
if(cplug=="none"){
style = "background: black;"; //show the underlying black parent widget
}else{
style = "background: black;";
}
this->setStyleSheet("QWidget#LuminaBaseSSWidget{ "+style+"}");
this->repaint();
//If not a stylesheet-based plugin - set it here
if(cplug!="none"){
ANIM = BaseAnimGroup::NewAnimation(cplug, this, settings);
connect(ANIM, SIGNAL(finished()), this, SLOT(startPainting()) ); //repeat the plugin as needed
ANIM->LoadAnimations();
}
//Now start the animation(s)
if(ANIM!=0){
if(ANIM->animationCount()>0){
if(DEBUG){ qDebug() << " - Starting SS Plugin:" << cplug << ANIM->animationCount() << ANIM->duration() << ANIM->loopCount(); }
ANIM->start();
}
}
}
void SSBaseWidget::stopPainting(){
if(ANIM!=0){
ANIM->stop();
ANIM->clear();
ANIM->deleteLater();
ANIM = 0;
}
}
|