#include "devicemanager.h"
#include "dialogs/about.h"
#include "dialogs/connect.h"
-#include "dialogs/decoder.h"
#include "toolbars/samplingbar.h"
+#include "view/logicsignal.h"
#include "view/view.h"
+#include "widgets/decodermenu.h"
/* __STDC_FORMAT_MACROS is required for PRIu64 and friends (in C++). */
#define __STDC_FORMAT_MACROS
QWidget *parent) :
QMainWindow(parent),
_device_manager(device_manager),
- _session(device_manager),
- _decoders_add_mapper(this)
+ _session(device_manager)
{
setup_ui();
if (open_file_name) {
_menu_decoders->setTitle(QApplication::translate(
"MainWindow", "&Decoders", 0, QApplication::UnicodeUTF8));
- _menu_decoders_add = new QMenu(_menu_decoders);
+ _menu_decoders_add = new pv::widgets::DecoderMenu(_menu_decoders);
_menu_decoders_add->setTitle(QApplication::translate(
"MainWindow", "&Add", 0, QApplication::UnicodeUTF8));
- setup_add_decoders(_menu_decoders_add);
+ connect(_menu_decoders_add, SIGNAL(decoder_selected(srd_decoder*)),
+ this, SLOT(add_decoder(srd_decoder*)));
_menu_decoders->addMenu(_menu_decoders_add);
- connect(&_decoders_add_mapper, SIGNAL(mapped(QObject*)),
- this, SLOT(add_decoder(QObject*)));
// Help Menu
_menu_help = new QMenu(_menu_bar);
addToolBar(_toolbar);
// Setup the sampling bar
- _sampling_bar = new toolbars::SamplingBar(this);
+ _sampling_bar = new toolbars::SamplingBar(_session, this);
// Populate the device list and select the initially selected device
update_device_list();
- connect(_sampling_bar, SIGNAL(device_selected()), this,
- SLOT(device_selected()));
connect(_sampling_bar, SIGNAL(run_stop()), this,
SLOT(run_stop()));
addToolBar(_sampling_bar);
msg.exec();
}
-gint MainWindow::decoder_name_cmp(gconstpointer a, gconstpointer b)
-{
- return strcmp(((const srd_decoder*)a)->name,
- ((const srd_decoder*)b)->name);
-}
-
-void MainWindow::setup_add_decoders(QMenu *parent)
-{
- GSList *l = g_slist_sort(g_slist_copy(
- (GSList*)srd_decoder_list()), decoder_name_cmp);
- for(; l; l = l->next)
- {
- QAction *const action = parent->addAction(QString(
- ((srd_decoder*)l->data)->name));
- action->setData(qVariantFromValue(l->data));
- _decoders_add_mapper.setMapping(action, action);
- connect(action, SIGNAL(triggered()),
- &_decoders_add_mapper, SLOT(map()));
- }
- g_slist_free(l);
-}
-
void MainWindow::on_actionOpen_triggered()
{
// Enumerate the file formats
dlg.exec();
}
-void MainWindow::device_selected()
+void MainWindow::add_decoder(srd_decoder *decoder)
{
- _session.set_device(_sampling_bar->get_selected_device());
-}
-
-void MainWindow::add_decoder(QObject *action)
-{
- assert(action);
- srd_decoder *const dec =
- (srd_decoder*)((QAction*)action)->data().value<void*>();
- assert(dec);
-
- const std::vector< boost::shared_ptr<view::Signal> > &sigs =
- _session.get_signals();
-
- GHashTable *const options = g_hash_table_new_full(g_str_hash,
- g_str_equal, g_free, (GDestroyNotify)g_variant_unref);
-
- dialogs::Decoder dlg(this, dec, sigs, options);
- if(dlg.exec() != QDialog::Accepted) {
- g_hash_table_destroy(options);
- return;
- }
-
- _session.add_decoder(dec, dlg.get_probes(), options);
+ assert(decoder);
+ _session.add_decoder(decoder);
}
void MainWindow::run_stop()