Add the "visualisations" action to the analyzer menu, and make double clicking the analyzer open it. Fixes issue #421

This commit is contained in:
David Sansome 2010-06-23 15:52:56 +00:00
parent f0d043d19f
commit 79f283f34d
3 changed files with 53 additions and 9 deletions

View File

@ -24,6 +24,7 @@
#include <QMouseEvent>
#include <QHBoxLayout>
#include <QSettings>
#include <QTimer>
#include <QtDebug>
const char* AnalyzerContainer::kSettingsGroup = "Analyzer";
@ -33,6 +34,9 @@ AnalyzerContainer::AnalyzerContainer(QWidget *parent)
context_menu_(new QMenu(this)),
group_(new QActionGroup(this)),
mapper_(new QSignalMapper(this)),
visualisation_action_(NULL),
double_click_timer_(new QTimer(this)),
ignore_next_click_(false),
current_analyzer_(NULL),
engine_(NULL)
{
@ -46,23 +50,54 @@ AnalyzerContainer::AnalyzerContainer(QWidget *parent)
AddAnalyzerType<Sonogram>();
AddAnalyzerType<TurbineAnalyzer>();
connect(mapper_, SIGNAL(mapped(int)), SLOT(ChangeAnalyzer(int)));
context_menu_->addSeparator();
disable_action_ =
context_menu_->addAction(tr("No analyzer"), this, SLOT(DisableAnalyzer()));
disable_action_->setCheckable(true);
group_->addAction(disable_action_);
context_menu_->addSeparator();
// Visualisation action gets added in SetActions
double_click_timer_->setSingleShot(true);
double_click_timer_->setInterval(250);
connect(double_click_timer_, SIGNAL(timeout()), SLOT(ShowPopupMenu()));
Load();
}
void AnalyzerContainer::mouseReleaseEvent(QMouseEvent* e) {
if (e->button() == Qt::LeftButton || e->button() == Qt::RightButton)
context_menu_->popup(e->globalPos());
void AnalyzerContainer::SetActions(QAction* visualisation) {
visualisation_action_ = visualisation;
context_menu_->addAction(visualisation_action_);
}
void AnalyzerContainer::set_engine(EngineBase *engine) {
void AnalyzerContainer::mouseReleaseEvent(QMouseEvent* e) {
if (e->button() == Qt::LeftButton) {
if (ignore_next_click_) {
ignore_next_click_ = false;
} else {
// Might be the first click in a double click, so wait a while before
// actually doing anything
double_click_timer_->start();
last_click_pos_ = e->globalPos();
}
} else if (e->button() == Qt::RightButton) {
context_menu_->popup(e->globalPos());
}
}
void AnalyzerContainer::ShowPopupMenu() {
context_menu_->popup(last_click_pos_);
}
void AnalyzerContainer::mouseDoubleClickEvent(QMouseEvent *) {
double_click_timer_->stop();
ignore_next_click_ = true;
if (visualisation_action_)
visualisation_action_->trigger();
}
void AnalyzerContainer::SetEngine(EngineBase *engine) {
if (current_analyzer_)
current_analyzer_->set_engine(engine);
engine_ = engine;

View File

@ -30,16 +30,19 @@ class AnalyzerContainer : public QWidget {
public:
AnalyzerContainer(QWidget* parent);
void set_engine(EngineBase* engine);
void SetEngine(EngineBase* engine);
void SetActions(QAction* visualisation);
static const char* kSettingsGroup;
protected:
void mouseReleaseEvent(QMouseEvent *);
void mouseDoubleClickEvent(QMouseEvent *);
private slots:
void ChangeAnalyzer(int id);
void DisableAnalyzer();
void ShowPopupMenu();
private:
void Load();
@ -56,6 +59,11 @@ private:
QList<QAction*> actions_;
QAction* disable_action_;
QAction* visualisation_action_;
QTimer* double_click_timer_;
QPoint last_click_pos_;
bool ignore_next_click_;
Analyzer::Base* current_analyzer_;
EngineBase* engine_;
};

View File

@ -444,7 +444,8 @@ MainWindow::MainWindow(NetworkAccessManager* network, Engine::Type engine, QWidg
connect(add_stream_dialog_.get(), SIGNAL(accepted()), SLOT(AddStreamAccepted()));
// Analyzer
ui_->analyzer->set_engine(player_->GetEngine());
ui_->analyzer->SetEngine(player_->GetEngine());
ui_->analyzer->SetActions(ui_->action_visualisations);
// Equalizer
connect(equalizer_.get(), SIGNAL(ParametersChanged(int,QList<int>)),