Adding a menu to allow user to change analyzers' framerate
This commit is contained in:
parent
673d44ef72
commit
ea391c2b7d
|
@ -45,6 +45,14 @@ public:
|
|||
|
||||
void set_engine(EngineBase* engine) { m_engine = engine; }
|
||||
|
||||
void changeTimeout( uint newTimeout ) {
|
||||
m_timeout = newTimeout;
|
||||
if (m_timer.isActive()) {
|
||||
m_timer.stop();
|
||||
m_timer.start(m_timeout, this);
|
||||
}
|
||||
}
|
||||
|
||||
protected:
|
||||
Base( QWidget*, uint scopeSize = 7 );
|
||||
|
||||
|
@ -63,14 +71,6 @@ protected:
|
|||
virtual void paused(QPainter& p);
|
||||
virtual void demo(QPainter& p);
|
||||
|
||||
void changeTimeout( uint newTimeout ) {
|
||||
m_timeout = newTimeout;
|
||||
if (m_timer.isActive()) {
|
||||
m_timer.stop();
|
||||
m_timer.start(m_timeout, this);
|
||||
}
|
||||
}
|
||||
|
||||
protected:
|
||||
QBasicTimer m_timer;
|
||||
uint m_timeout;
|
||||
|
|
|
@ -30,11 +30,19 @@
|
|||
|
||||
const char* AnalyzerContainer::kSettingsGroup = "Analyzer";
|
||||
|
||||
// For framerate
|
||||
const int kHighTimeout = 50;
|
||||
const int kNormalTimeout = 40;
|
||||
const int kLowTimeout = 33;
|
||||
|
||||
AnalyzerContainer::AnalyzerContainer(QWidget *parent)
|
||||
: QWidget(parent),
|
||||
context_menu_(new QMenu(this)),
|
||||
context_menu_framerate_(new QMenu(tr("Framerate"), this)),
|
||||
group_(new QActionGroup(this)),
|
||||
group_framerate_(new QActionGroup(this)),
|
||||
mapper_(new QSignalMapper(this)),
|
||||
mapper_framerate_(new QSignalMapper(this)),
|
||||
visualisation_action_(NULL),
|
||||
double_click_timer_(new QTimer(this)),
|
||||
ignore_next_click_(false),
|
||||
|
@ -45,6 +53,15 @@ AnalyzerContainer::AnalyzerContainer(QWidget *parent)
|
|||
setLayout(layout);
|
||||
layout->setContentsMargins(0, 0, 0, 0);
|
||||
|
||||
// Init framerate sub-menu
|
||||
AddFramerate(tr("Low"), kHighTimeout);
|
||||
AddFramerate(tr("Normal"), kNormalTimeout);
|
||||
AddFramerate(tr("High"), kLowTimeout);
|
||||
connect(mapper_framerate_, SIGNAL(mapped(int)), SLOT(ChangeTimeOut(int)));
|
||||
|
||||
context_menu_->addMenu(context_menu_framerate_);
|
||||
context_menu_->addSeparator();
|
||||
|
||||
AddAnalyzerType<BarAnalyzer>();
|
||||
AddAnalyzerType<BlockAnalyzer>();
|
||||
AddAnalyzerType<BoomAnalyzer>();
|
||||
|
@ -128,10 +145,18 @@ void AnalyzerContainer::ChangeAnalyzer(int id) {
|
|||
Save();
|
||||
}
|
||||
|
||||
void AnalyzerContainer::ChangeTimeOut(int new_timeout) {
|
||||
if(current_analyzer_) {
|
||||
current_analyzer_->changeTimeout(new_timeout);
|
||||
}
|
||||
SaveTimeout(new_timeout);
|
||||
}
|
||||
|
||||
void AnalyzerContainer::Load() {
|
||||
QSettings s;
|
||||
s.beginGroup(kSettingsGroup);
|
||||
|
||||
// Analyzer
|
||||
QString type = s.value("type", "BlockAnalyzer").toString();
|
||||
if (type.isEmpty()) {
|
||||
DisableAnalyzer();
|
||||
|
@ -145,6 +170,26 @@ void AnalyzerContainer::Load() {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Framerate
|
||||
int framerate = s.value("framerate_timeout", kNormalTimeout).toInt();
|
||||
QList<QAction*> actions = group_framerate_->actions();
|
||||
for (int i=0 ; i<framerate_timeout_list_.count() ; ++i) {
|
||||
if(framerate == framerate_timeout_list_[i]) {
|
||||
ChangeTimeOut(framerate);
|
||||
group_framerate_->actions()[i]->setChecked(true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void AnalyzerContainer::SaveTimeout(int timeout) {
|
||||
// For now, framerate is common for all analyzers. Maybe each analyzer should
|
||||
// have its own framerate?
|
||||
QSettings s;
|
||||
s.beginGroup(kSettingsGroup);
|
||||
|
||||
s.setValue("framerate_timeout", timeout);
|
||||
}
|
||||
|
||||
void AnalyzerContainer::Save() {
|
||||
|
@ -155,3 +200,11 @@ void AnalyzerContainer::Save() {
|
|||
current_analyzer_->metaObject()->className() :
|
||||
QVariant());
|
||||
}
|
||||
|
||||
void AnalyzerContainer::AddFramerate(const QString& name, int timeout) {
|
||||
QAction *action = context_menu_framerate_->addAction(name, mapper_framerate_, SLOT(map()));
|
||||
mapper_framerate_->setMapping(action, timeout);
|
||||
group_framerate_->addAction(action);
|
||||
framerate_timeout_list_ << timeout;
|
||||
action->setCheckable(true);
|
||||
}
|
||||
|
|
|
@ -42,21 +42,28 @@ protected:
|
|||
|
||||
private slots:
|
||||
void ChangeAnalyzer(int id);
|
||||
void ChangeTimeOut(int new_timeout);
|
||||
void DisableAnalyzer();
|
||||
void ShowPopupMenu();
|
||||
|
||||
private:
|
||||
void Load();
|
||||
void Save();
|
||||
void SaveTimeout(int timeout);
|
||||
template <typename T>
|
||||
void AddAnalyzerType();
|
||||
void AddFramerate(const QString& name, int timeout);
|
||||
|
||||
private:
|
||||
QMenu* context_menu_;
|
||||
QMenu* context_menu_framerate_;
|
||||
QActionGroup* group_;
|
||||
QActionGroup* group_framerate_;
|
||||
QSignalMapper* mapper_;
|
||||
QSignalMapper* mapper_framerate_;
|
||||
|
||||
QList<const QMetaObject*> analyzer_types_;
|
||||
QList<int> framerate_timeout_list_;
|
||||
QList<QAction*> actions_;
|
||||
QAction* disable_action_;
|
||||
|
||||
|
|
Loading…
Reference in New Issue