Adding a menu to allow user to change analyzers' framerate

This commit is contained in:
Arnaud Bienner 2011-03-04 00:38:15 +00:00
parent 673d44ef72
commit ea391c2b7d
3 changed files with 68 additions and 8 deletions

View File

@ -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;

View File

@ -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);
}

View File

@ -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_;