mirror of
				https://github.com/f4exb/sdrangel.git
				synced 2025-10-31 13:00:26 -04:00 
			
		
		
		
	New channels dock with add channels button replaces add channel from sampling devices control. Implements #628
This commit is contained in:
		
							parent
							
								
									9936a5e2c4
								
							
						
					
					
						commit
						5c1dc1e5a7
					
				| @ -14,6 +14,8 @@ set(sdrgui_SOURCES | |||||||
|     gui/basicchannelsettingsdialog.cpp |     gui/basicchannelsettingsdialog.cpp | ||||||
|     gui/basicdevicesettingsdialog.cpp |     gui/basicdevicesettingsdialog.cpp | ||||||
|     gui/buttonswitch.cpp |     gui/buttonswitch.cpp | ||||||
|  |     gui/channeladddialog.cpp | ||||||
|  |     gui/channelsdock.cpp | ||||||
|     gui/channelwindow.cpp |     gui/channelwindow.cpp | ||||||
|     gui/clickablelabel.cpp |     gui/clickablelabel.cpp | ||||||
|     gui/colormapper.cpp |     gui/colormapper.cpp | ||||||
| @ -86,6 +88,8 @@ set(sdrgui_HEADERS | |||||||
|     gui/basicchannelsettingsdialog.h |     gui/basicchannelsettingsdialog.h | ||||||
|     gui/basicdevicesettingsdialog.h |     gui/basicdevicesettingsdialog.h | ||||||
|     gui/buttonswitch.h |     gui/buttonswitch.h | ||||||
|  |     gui/channeladddialog.h | ||||||
|  |     gui/channelsdock.h | ||||||
|     gui/channelwindow.h |     gui/channelwindow.h | ||||||
|     gui/colormapper.h |     gui/colormapper.h | ||||||
|     gui/commanditem.h |     gui/commanditem.h | ||||||
| @ -154,6 +158,7 @@ set(sdrgui_FORMS | |||||||
|   gui/ambedevicesdialog.ui |   gui/ambedevicesdialog.ui | ||||||
|   gui/basicchannelsettingsdialog.ui |   gui/basicchannelsettingsdialog.ui | ||||||
|   gui/basicdevicesettingsdialog.ui |   gui/basicdevicesettingsdialog.ui | ||||||
|  |   gui/channeladddialog.ui | ||||||
|   gui/commandoutputdialog.ui |   gui/commandoutputdialog.ui | ||||||
|   gui/cwkeyergui.ui |   gui/cwkeyergui.ui | ||||||
|   gui/devicestreamselectiondialog.ui |   gui/devicestreamselectiondialog.ui | ||||||
|  | |||||||
							
								
								
									
										54
									
								
								sdrgui/gui/channeladddialog.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								sdrgui/gui/channeladddialog.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,54 @@ | |||||||
|  | ///////////////////////////////////////////////////////////////////////////////////
 | ||||||
|  | // Copyright (C) 2020 F4EXB                                                      //
 | ||||||
|  | // written by Edouard Griffiths                                                  //
 | ||||||
|  | //                                                                               //
 | ||||||
|  | // This program is free software; you can redistribute it and/or modify          //
 | ||||||
|  | // it under the terms of the GNU General Public License as published by          //
 | ||||||
|  | // the Free Software Foundation as version 3 of the License, or                  //
 | ||||||
|  | // (at your option) any later version.                                           //
 | ||||||
|  | //                                                                               //
 | ||||||
|  | // This program is distributed in the hope that it will be useful,               //
 | ||||||
|  | // but WITHOUT ANY WARRANTY; without even the implied warranty of                //
 | ||||||
|  | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the                  //
 | ||||||
|  | // GNU General Public License V3 for more details.                               //
 | ||||||
|  | //                                                                               //
 | ||||||
|  | // You should have received a copy of the GNU General Public License             //
 | ||||||
|  | // along with this program. If not, see <http://www.gnu.org/licenses/>.          //
 | ||||||
|  | ///////////////////////////////////////////////////////////////////////////////////
 | ||||||
|  | 
 | ||||||
|  | #include <QStringList> | ||||||
|  | 
 | ||||||
|  | #include "channeladddialog.h" | ||||||
|  | #include "ui_channeladddialog.h" | ||||||
|  | 
 | ||||||
|  | ChannelAddDialog::ChannelAddDialog(QWidget* parent) : | ||||||
|  |     QDialog(parent), | ||||||
|  |     ui(new Ui::ChannelAddDialog) | ||||||
|  | { | ||||||
|  |     ui->setupUi(this); | ||||||
|  |     connect(ui->buttonBox, SIGNAL(clicked(QAbstractButton*)), this, SLOT(apply(QAbstractButton*))); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | ChannelAddDialog::~ChannelAddDialog() | ||||||
|  | { | ||||||
|  |     delete ui; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void ChannelAddDialog::resetChannelNames() | ||||||
|  | { | ||||||
|  |     ui->channelSelect->clear(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void ChannelAddDialog::addChannelNames(const QStringList& channelNames) | ||||||
|  | { | ||||||
|  |     ui->channelSelect->addItems(channelNames); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void ChannelAddDialog::apply(QAbstractButton *button) | ||||||
|  | { | ||||||
|  |     if (button == (QAbstractButton*) ui->buttonBox->button(QDialogButtonBox::Apply)) | ||||||
|  |     { | ||||||
|  |         int selectedChannelIndex = ui->channelSelect->currentIndex(); | ||||||
|  |         emit(addChannel(selectedChannelIndex)); | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										54
									
								
								sdrgui/gui/channeladddialog.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								sdrgui/gui/channeladddialog.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,54 @@ | |||||||
|  | ///////////////////////////////////////////////////////////////////////////////////
 | ||||||
|  | // Copyright (C) 2020 F4EXB                                                      //
 | ||||||
|  | // written by Edouard Griffiths                                                  //
 | ||||||
|  | //                                                                               //
 | ||||||
|  | // This program is free software; you can redistribute it and/or modify          //
 | ||||||
|  | // it under the terms of the GNU General Public License as published by          //
 | ||||||
|  | // the Free Software Foundation as version 3 of the License, or                  //
 | ||||||
|  | // (at your option) any later version.                                           //
 | ||||||
|  | //                                                                               //
 | ||||||
|  | // This program is distributed in the hope that it will be useful,               //
 | ||||||
|  | // but WITHOUT ANY WARRANTY; without even the implied warranty of                //
 | ||||||
|  | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the                  //
 | ||||||
|  | // GNU General Public License V3 for more details.                               //
 | ||||||
|  | //                                                                               //
 | ||||||
|  | // You should have received a copy of the GNU General Public License             //
 | ||||||
|  | // along with this program. If not, see <http://www.gnu.org/licenses/>.          //
 | ||||||
|  | ///////////////////////////////////////////////////////////////////////////////////
 | ||||||
|  | 
 | ||||||
|  | #ifndef SDRGUI_GUI_CHANNELADDDIALOG_H_ | ||||||
|  | #define SDRGUI_GUI_CHANNELADDDIALOG_H_ | ||||||
|  | 
 | ||||||
|  | #include <QDialog> | ||||||
|  | #include <vector> | ||||||
|  | 
 | ||||||
|  | #include "export.h" | ||||||
|  | 
 | ||||||
|  | class QStringList; | ||||||
|  | class QAbstractButton; | ||||||
|  | 
 | ||||||
|  | namespace Ui { | ||||||
|  |     class ChannelAddDialog; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | class SDRGUI_API ChannelAddDialog : public QDialog { | ||||||
|  |     Q_OBJECT | ||||||
|  | public: | ||||||
|  |     explicit ChannelAddDialog(QWidget* parent = nullptr); | ||||||
|  |     ~ChannelAddDialog(); | ||||||
|  | 
 | ||||||
|  |     void resetChannelNames(); | ||||||
|  |     void addChannelNames(const QStringList& channelNames); | ||||||
|  | 
 | ||||||
|  | private: | ||||||
|  |     Ui::ChannelAddDialog* ui; | ||||||
|  |     std::vector<int> m_channelIndexes; | ||||||
|  | 
 | ||||||
|  | private slots: | ||||||
|  |     void apply(QAbstractButton*); | ||||||
|  | 
 | ||||||
|  | signals: | ||||||
|  |     void addChannel(int); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | #endif /* SDRGUI_GUI_CHANNELADDDIALOG_H_ */ | ||||||
							
								
								
									
										110
									
								
								sdrgui/gui/channeladddialog.ui
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										110
									
								
								sdrgui/gui/channeladddialog.ui
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,110 @@ | |||||||
|  | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  | <ui version="4.0"> | ||||||
|  |  <class>ChannelAddDialog</class> | ||||||
|  |  <widget class="QDialog" name="ChannelAddDialog"> | ||||||
|  |   <property name="geometry"> | ||||||
|  |    <rect> | ||||||
|  |     <x>0</x> | ||||||
|  |     <y>0</y> | ||||||
|  |     <width>324</width> | ||||||
|  |     <height>139</height> | ||||||
|  |    </rect> | ||||||
|  |   </property> | ||||||
|  |   <property name="font"> | ||||||
|  |    <font> | ||||||
|  |     <family>Liberation Sans</family> | ||||||
|  |     <pointsize>9</pointsize> | ||||||
|  |    </font> | ||||||
|  |   </property> | ||||||
|  |   <property name="windowTitle"> | ||||||
|  |    <string>Add Channels</string> | ||||||
|  |   </property> | ||||||
|  |   <layout class="QVBoxLayout" name="verticalLayout"> | ||||||
|  |    <item> | ||||||
|  |     <widget class="QGroupBox" name="groupBox"> | ||||||
|  |      <property name="maximumSize"> | ||||||
|  |       <size> | ||||||
|  |        <width>16777215</width> | ||||||
|  |        <height>70</height> | ||||||
|  |       </size> | ||||||
|  |      </property> | ||||||
|  |      <property name="font"> | ||||||
|  |       <font> | ||||||
|  |        <family>Liberation Sans</family> | ||||||
|  |        <pointsize>9</pointsize> | ||||||
|  |       </font> | ||||||
|  |      </property> | ||||||
|  |      <property name="title"> | ||||||
|  |       <string>Available channels</string> | ||||||
|  |      </property> | ||||||
|  |      <layout class="QFormLayout" name="formLayout"> | ||||||
|  |       <item row="0" column="1"> | ||||||
|  |        <widget class="QComboBox" name="channelSelect"> | ||||||
|  |         <property name="font"> | ||||||
|  |          <font> | ||||||
|  |           <family>Liberation Sans</family> | ||||||
|  |           <pointsize>9</pointsize> | ||||||
|  |          </font> | ||||||
|  |         </property> | ||||||
|  |        </widget> | ||||||
|  |       </item> | ||||||
|  |      </layout> | ||||||
|  |     </widget> | ||||||
|  |    </item> | ||||||
|  |    <item> | ||||||
|  |     <widget class="QDialogButtonBox" name="buttonBox"> | ||||||
|  |      <property name="font"> | ||||||
|  |       <font> | ||||||
|  |        <family>Liberation Sans</family> | ||||||
|  |        <pointsize>9</pointsize> | ||||||
|  |       </font> | ||||||
|  |      </property> | ||||||
|  |      <property name="orientation"> | ||||||
|  |       <enum>Qt::Horizontal</enum> | ||||||
|  |      </property> | ||||||
|  |      <property name="standardButtons"> | ||||||
|  |       <set>QDialogButtonBox::Apply|QDialogButtonBox::Close</set> | ||||||
|  |      </property> | ||||||
|  |     </widget> | ||||||
|  |    </item> | ||||||
|  |   </layout> | ||||||
|  |  </widget> | ||||||
|  |  <tabstops> | ||||||
|  |   <tabstop>buttonBox</tabstop> | ||||||
|  |  </tabstops> | ||||||
|  |  <resources/> | ||||||
|  |  <connections> | ||||||
|  |   <connection> | ||||||
|  |    <sender>buttonBox</sender> | ||||||
|  |    <signal>accepted()</signal> | ||||||
|  |    <receiver>ChannelAddDialog</receiver> | ||||||
|  |    <slot>accept()</slot> | ||||||
|  |    <hints> | ||||||
|  |     <hint type="sourcelabel"> | ||||||
|  |      <x>257</x> | ||||||
|  |      <y>194</y> | ||||||
|  |     </hint> | ||||||
|  |     <hint type="destinationlabel"> | ||||||
|  |      <x>157</x> | ||||||
|  |      <y>203</y> | ||||||
|  |     </hint> | ||||||
|  |    </hints> | ||||||
|  |   </connection> | ||||||
|  |   <connection> | ||||||
|  |    <sender>buttonBox</sender> | ||||||
|  |    <signal>rejected()</signal> | ||||||
|  |    <receiver>ChannelAddDialog</receiver> | ||||||
|  |    <slot>reject()</slot> | ||||||
|  |    <hints> | ||||||
|  |     <hint type="sourcelabel"> | ||||||
|  |      <x>314</x> | ||||||
|  |      <y>194</y> | ||||||
|  |     </hint> | ||||||
|  |     <hint type="destinationlabel"> | ||||||
|  |      <x>286</x> | ||||||
|  |      <y>203</y> | ||||||
|  |     </hint> | ||||||
|  |    </hints> | ||||||
|  |   </connection> | ||||||
|  |  </connections> | ||||||
|  | </ui> | ||||||
							
								
								
									
										109
									
								
								sdrgui/gui/channelsdock.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										109
									
								
								sdrgui/gui/channelsdock.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,109 @@ | |||||||
|  | ///////////////////////////////////////////////////////////////////////////////////
 | ||||||
|  | // Copyright (C) 2020 F4EXB                                                      //
 | ||||||
|  | // written by Edouard Griffiths                                                  //
 | ||||||
|  | //                                                                               //
 | ||||||
|  | // This program is free software; you can redistribute it and/or modify          //
 | ||||||
|  | // it under the terms of the GNU General Public License as published by          //
 | ||||||
|  | // the Free Software Foundation as version 3 of the License, or                  //
 | ||||||
|  | // (at your option) any later version.                                           //
 | ||||||
|  | //                                                                               //
 | ||||||
|  | // This program is distributed in the hope that it will be useful,               //
 | ||||||
|  | // but WITHOUT ANY WARRANTY; without even the implied warranty of                //
 | ||||||
|  | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the                  //
 | ||||||
|  | // GNU General Public License V3 for more details.                               //
 | ||||||
|  | //                                                                               //
 | ||||||
|  | // You should have received a copy of the GNU General Public License             //
 | ||||||
|  | // along with this program. If not, see <http://www.gnu.org/licenses/>.          //
 | ||||||
|  | ///////////////////////////////////////////////////////////////////////////////////
 | ||||||
|  | 
 | ||||||
|  | #include <QHBoxLayout> | ||||||
|  | #include <QLabel> | ||||||
|  | #include <QPushButton> | ||||||
|  | #include <QStyle> | ||||||
|  | 
 | ||||||
|  | #include "channelsdock.h" | ||||||
|  | 
 | ||||||
|  | ChannelsDock::ChannelsDock(QWidget *parent, Qt::WindowFlags flags) : | ||||||
|  |     QDockWidget(parent, flags), | ||||||
|  |     m_channelAddDialog(this) | ||||||
|  | { | ||||||
|  |     m_titleBar = new QWidget(); | ||||||
|  |     m_titleBarLayout = new QHBoxLayout(); | ||||||
|  |     m_titleBarLayout->setMargin(0); | ||||||
|  |     m_titleBar->setLayout(m_titleBarLayout); | ||||||
|  | 
 | ||||||
|  |     m_titleLabel = new QLabel(); | ||||||
|  |     m_titleLabel->setText(QString("Channels")); | ||||||
|  | 
 | ||||||
|  |     m_addChannelButton = new QPushButton(); | ||||||
|  |     QIcon addIcon(":/create.png"); | ||||||
|  |     m_addChannelButton->setIcon(addIcon); | ||||||
|  |     m_addChannelButton->setToolTip("Add channels"); | ||||||
|  |     m_addChannelButton->setFixedSize(16, 16); | ||||||
|  | 
 | ||||||
|  |     m_normalButton = new QPushButton(); | ||||||
|  |     QIcon normalIcon = style()->standardIcon(QStyle::SP_TitleBarNormalButton, 0, this); | ||||||
|  |     m_normalButton->setIcon(normalIcon); | ||||||
|  |     m_normalButton->setFixedSize(12, 12); | ||||||
|  | 
 | ||||||
|  |     m_closeButton = new QPushButton(); | ||||||
|  |     QIcon closeIcon = style()->standardIcon(QStyle::SP_TitleBarCloseButton, 0, this); | ||||||
|  |     m_closeButton->setIcon(closeIcon); | ||||||
|  |     m_closeButton->setFixedSize(12, 12); | ||||||
|  | 
 | ||||||
|  |     m_titleBarLayout->addWidget(m_addChannelButton); | ||||||
|  |     m_titleBarLayout->addWidget(m_titleLabel); | ||||||
|  |     m_titleBarLayout->addWidget(m_normalButton); | ||||||
|  |     m_titleBarLayout->addWidget(m_closeButton); | ||||||
|  |     setTitleBarWidget(m_titleBar); | ||||||
|  | 
 | ||||||
|  |     QObject::connect( | ||||||
|  |         m_addChannelButton, | ||||||
|  |         &QPushButton::clicked, | ||||||
|  |         this, | ||||||
|  |         &ChannelsDock::addChannelDialog | ||||||
|  |     ); | ||||||
|  | 
 | ||||||
|  |     QObject::connect( | ||||||
|  |         m_normalButton, | ||||||
|  |         &QPushButton::clicked, | ||||||
|  |         this, | ||||||
|  |         &ChannelsDock::toggleFloating | ||||||
|  |     ); | ||||||
|  | 
 | ||||||
|  |     QObject::connect( | ||||||
|  |         &m_channelAddDialog, | ||||||
|  |         &ChannelAddDialog::addChannel, | ||||||
|  |         this, | ||||||
|  |         &ChannelsDock::addChannelEmitted | ||||||
|  |     ); | ||||||
|  | 
 | ||||||
|  |     connect(m_closeButton, SIGNAL(clicked()), this, SLOT(hide())); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | ChannelsDock::~ChannelsDock() | ||||||
|  | { | ||||||
|  |     delete m_closeButton; | ||||||
|  |     delete m_normalButton; | ||||||
|  |     delete m_titleLabel; | ||||||
|  |     delete m_titleBarLayout; | ||||||
|  |     delete m_titleBar; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void ChannelsDock::toggleFloating() | ||||||
|  | { | ||||||
|  |     setFloating(!isFloating()); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void ChannelsDock::addChannelDialog() | ||||||
|  | { | ||||||
|  |     m_channelAddDialog.exec(); | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void ChannelsDock::addChannelEmitted(int channelIndex) | ||||||
|  | { | ||||||
|  |     if (channelIndex >= 0) { | ||||||
|  |         emit addChannel(channelIndex); | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										59
									
								
								sdrgui/gui/channelsdock.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								sdrgui/gui/channelsdock.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,59 @@ | |||||||
|  | ///////////////////////////////////////////////////////////////////////////////////
 | ||||||
|  | // Copyright (C) 2020 F4EXB                                                      //
 | ||||||
|  | // written by Edouard Griffiths                                                  //
 | ||||||
|  | //                                                                               //
 | ||||||
|  | // This program is free software; you can redistribute it and/or modify          //
 | ||||||
|  | // it under the terms of the GNU General Public License as published by          //
 | ||||||
|  | // the Free Software Foundation as version 3 of the License, or                  //
 | ||||||
|  | // (at your option) any later version.                                           //
 | ||||||
|  | //                                                                               //
 | ||||||
|  | // This program is distributed in the hope that it will be useful,               //
 | ||||||
|  | // but WITHOUT ANY WARRANTY; without even the implied warranty of                //
 | ||||||
|  | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the                  //
 | ||||||
|  | // GNU General Public License V3 for more details.                               //
 | ||||||
|  | //                                                                               //
 | ||||||
|  | // You should have received a copy of the GNU General Public License             //
 | ||||||
|  | // along with this program. If not, see <http://www.gnu.org/licenses/>.          //
 | ||||||
|  | ///////////////////////////////////////////////////////////////////////////////////
 | ||||||
|  | 
 | ||||||
|  | #ifndef SDRGUI_GUI_CHANNELDOCK_H_ | ||||||
|  | #define SDRGUI_GUI_CHANNELDOCK_H_ | ||||||
|  | 
 | ||||||
|  | #include <QDockWidget> | ||||||
|  | 
 | ||||||
|  | #include "channeladddialog.h" | ||||||
|  | 
 | ||||||
|  | class QHBoxLayout; | ||||||
|  | class QLabel; | ||||||
|  | class QPushButton; | ||||||
|  | class QStringList; | ||||||
|  | 
 | ||||||
|  | class ChannelsDock : public QDockWidget | ||||||
|  | { | ||||||
|  |     Q_OBJECT | ||||||
|  | public: | ||||||
|  |     ChannelsDock(QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags()); | ||||||
|  |     ~ChannelsDock(); | ||||||
|  | 
 | ||||||
|  |     void resetAvailableChannels() { m_channelAddDialog.resetChannelNames(); } | ||||||
|  |     void addAvailableChannels(const QStringList& channelNames) { m_channelAddDialog.addChannelNames(channelNames); } | ||||||
|  | 
 | ||||||
|  | private: | ||||||
|  |     QPushButton *m_addChannelButton; | ||||||
|  |     QWidget *m_titleBar; | ||||||
|  |     QHBoxLayout *m_titleBarLayout; | ||||||
|  |     QLabel *m_titleLabel; | ||||||
|  |     QPushButton *m_normalButton; | ||||||
|  |     QPushButton *m_closeButton; | ||||||
|  |     ChannelAddDialog m_channelAddDialog; | ||||||
|  | 
 | ||||||
|  | private slots: | ||||||
|  |     void toggleFloating(); | ||||||
|  |     void addChannelDialog(); | ||||||
|  |     void addChannelEmitted(int channelIndex); | ||||||
|  | 
 | ||||||
|  | signals: | ||||||
|  |     void addChannel(int); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | #endif // SDRGUI_GUI_CHANNELDOCK_H_
 | ||||||
| @ -98,13 +98,3 @@ void SamplingDeviceControl::removeSelectedDeviceIndex() | |||||||
| 
 | 
 | ||||||
|     m_selectedDeviceIndex = -1; |     m_selectedDeviceIndex = -1; | ||||||
| } | } | ||||||
| 
 |  | ||||||
| QComboBox *SamplingDeviceControl::getChannelSelector() |  | ||||||
| { |  | ||||||
|     return ui->channelSelect; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| QPushButton *SamplingDeviceControl::getAddChannelButton() |  | ||||||
| { |  | ||||||
|     return ui->addChannel; |  | ||||||
| } |  | ||||||
|  | |||||||
| @ -42,10 +42,7 @@ public: | |||||||
|     int getSelectedDeviceIndex() const { return m_selectedDeviceIndex; } |     int getSelectedDeviceIndex() const { return m_selectedDeviceIndex; } | ||||||
|     void setSelectedDeviceIndex(int index); |     void setSelectedDeviceIndex(int index); | ||||||
|     void removeSelectedDeviceIndex(); |     void removeSelectedDeviceIndex(); | ||||||
| 
 |  | ||||||
|     void setPluginManager(PluginManager *pluginManager) { m_pluginManager = pluginManager; } |     void setPluginManager(PluginManager *pluginManager) { m_pluginManager = pluginManager; } | ||||||
|     QComboBox *getChannelSelector(); |  | ||||||
|     QPushButton *getAddChannelButton(); |  | ||||||
| 
 | 
 | ||||||
| private slots: | private slots: | ||||||
|     void on_deviceChange_clicked(); |     void on_deviceChange_clicked(); | ||||||
|  | |||||||
| @ -7,13 +7,13 @@ | |||||||
|     <x>0</x> |     <x>0</x> | ||||||
|     <y>0</y> |     <y>0</y> | ||||||
|     <width>300</width> |     <width>300</width> | ||||||
|     <height>76</height> |     <height>40</height> | ||||||
|    </rect> |    </rect> | ||||||
|   </property> |   </property> | ||||||
|   <property name="minimumSize"> |   <property name="minimumSize"> | ||||||
|    <size> |    <size> | ||||||
|     <width>300</width> |     <width>300</width> | ||||||
|     <height>76</height> |     <height>40</height> | ||||||
|    </size> |    </size> | ||||||
|   </property> |   </property> | ||||||
|   <property name="maximumSize"> |   <property name="maximumSize"> | ||||||
| @ -104,43 +104,6 @@ | |||||||
|      </item> |      </item> | ||||||
|     </layout> |     </layout> | ||||||
|    </item> |    </item> | ||||||
|    <item> |  | ||||||
|     <layout class="QHBoxLayout" name="horizontalLayout"> |  | ||||||
|      <item> |  | ||||||
|       <widget class="QComboBox" name="channelSelect"> |  | ||||||
|        <property name="toolTip"> |  | ||||||
|         <string>Select channel plugin</string> |  | ||||||
|        </property> |  | ||||||
|       </widget> |  | ||||||
|      </item> |  | ||||||
|      <item> |  | ||||||
|       <widget class="QPushButton" name="addChannel"> |  | ||||||
|        <property name="minimumSize"> |  | ||||||
|         <size> |  | ||||||
|          <width>24</width> |  | ||||||
|          <height>0</height> |  | ||||||
|         </size> |  | ||||||
|        </property> |  | ||||||
|        <property name="maximumSize"> |  | ||||||
|         <size> |  | ||||||
|          <width>24</width> |  | ||||||
|          <height>16777215</height> |  | ||||||
|         </size> |  | ||||||
|        </property> |  | ||||||
|        <property name="toolTip"> |  | ||||||
|         <string>Add a new channel</string> |  | ||||||
|        </property> |  | ||||||
|        <property name="text"> |  | ||||||
|         <string/> |  | ||||||
|        </property> |  | ||||||
|        <property name="icon"> |  | ||||||
|         <iconset resource="../resources/res.qrc"> |  | ||||||
|          <normaloff>:/plusw.png</normaloff>:/plusw.png</iconset> |  | ||||||
|        </property> |  | ||||||
|       </widget> |  | ||||||
|      </item> |  | ||||||
|     </layout> |  | ||||||
|    </item> |  | ||||||
|   </layout> |   </layout> | ||||||
|  </widget> |  </widget> | ||||||
|  <resources> |  <resources> | ||||||
|  | |||||||
| @ -211,6 +211,7 @@ MainWindow::MainWindow(qtwebapp::LoggerWithFile *logger, const MainParser& parse | |||||||
| 	int deviceIndex = DeviceEnumerator::instance()->getRxSamplingDeviceIndex(m_settings.getSourceDeviceId(), m_settings.getSourceIndex()); | 	int deviceIndex = DeviceEnumerator::instance()->getRxSamplingDeviceIndex(m_settings.getSourceDeviceId(), m_settings.getSourceIndex()); | ||||||
| 	addSourceDevice(deviceIndex);  // add the first device set with file input device as default if device in settings is not enumerated
 | 	addSourceDevice(deviceIndex);  // add the first device set with file input device as default if device in settings is not enumerated
 | ||||||
| 	m_deviceUIs.back()->m_deviceAPI->setBuddyLeader(true); // the first device is always the leader
 | 	m_deviceUIs.back()->m_deviceAPI->setBuddyLeader(true); // the first device is always the leader
 | ||||||
|  |     tabChannelsIndexChanged(); // force channel selection list update
 | ||||||
| 
 | 
 | ||||||
|     splash->showStatusMessage("load current preset settings...", Qt::white); |     splash->showStatusMessage("load current preset settings...", Qt::white); | ||||||
| 	qDebug() << "MainWindow::MainWindow: load current preset settings..."; | 	qDebug() << "MainWindow::MainWindow: load current preset settings..."; | ||||||
| @ -224,6 +225,8 @@ MainWindow::MainWindow(qtwebapp::LoggerWithFile *logger, const MainParser& parse | |||||||
| 
 | 
 | ||||||
|     splash->showStatusMessage("finishing...", Qt::white); |     splash->showStatusMessage("finishing...", Qt::white); | ||||||
| 	connect(ui->tabInputsView, SIGNAL(currentChanged(int)), this, SLOT(tabInputViewIndexChanged())); | 	connect(ui->tabInputsView, SIGNAL(currentChanged(int)), this, SLOT(tabInputViewIndexChanged())); | ||||||
|  |     connect(ui->tabChannels, SIGNAL(currentChanged(int)), this, SLOT(tabChannelsIndexChanged())); | ||||||
|  |     connect(ui->channelDock, SIGNAL(addChannel(int)), this, SLOT(channelAddClicked(int))); | ||||||
| 
 | 
 | ||||||
| 	QString applicationDirPath = qApp->applicationDirPath(); | 	QString applicationDirPath = qApp->applicationDirPath(); | ||||||
| 
 | 
 | ||||||
| @ -314,11 +317,7 @@ void MainWindow::addSourceDevice(int deviceIndex) | |||||||
|     m_deviceUIs.back()->m_samplingDeviceControl->setPluginManager(m_pluginManager); |     m_deviceUIs.back()->m_samplingDeviceControl->setPluginManager(m_pluginManager); | ||||||
|     QList<QString> channelNames; |     QList<QString> channelNames; | ||||||
|     m_pluginManager->listRxChannels(channelNames); |     m_pluginManager->listRxChannels(channelNames); | ||||||
|     QStringList channelNamesList(channelNames); |     m_deviceUIs.back()->setNumberOfAvailableRxChannels(channelNames.size()); | ||||||
|     m_deviceUIs.back()->m_samplingDeviceControl->getChannelSelector()->addItems(channelNamesList); |  | ||||||
|     m_deviceUIs.back()->setNumberOfAvailableRxChannels(channelNamesList.size()); |  | ||||||
| 
 |  | ||||||
|     connect(m_deviceUIs.back()->m_samplingDeviceControl->getAddChannelButton(), SIGNAL(clicked(bool)), this, SLOT(channelAddClicked(bool))); |  | ||||||
| 
 | 
 | ||||||
|     dspDeviceSourceEngine->addSink(m_deviceUIs.back()->m_spectrumVis); |     dspDeviceSourceEngine->addSink(m_deviceUIs.back()->m_spectrumVis); | ||||||
|     ui->tabSpectra->addTab(m_deviceUIs.back()->m_spectrum, tabNameCStr); |     ui->tabSpectra->addTab(m_deviceUIs.back()->m_spectrum, tabNameCStr); | ||||||
| @ -396,11 +395,7 @@ void MainWindow::addSinkDevice() | |||||||
|     m_deviceUIs.back()->m_samplingDeviceControl->setPluginManager(m_pluginManager); |     m_deviceUIs.back()->m_samplingDeviceControl->setPluginManager(m_pluginManager); | ||||||
|     QList<QString> channelNames; |     QList<QString> channelNames; | ||||||
|     m_pluginManager->listTxChannels(channelNames); |     m_pluginManager->listTxChannels(channelNames); | ||||||
|     QStringList channelNamesList(channelNames); |     m_deviceUIs.back()->setNumberOfAvailableTxChannels(channelNames.size()); | ||||||
|     m_deviceUIs.back()->m_samplingDeviceControl->getChannelSelector()->addItems(channelNamesList); |  | ||||||
|     m_deviceUIs.back()->setNumberOfAvailableTxChannels(channelNamesList.size()); |  | ||||||
| 
 |  | ||||||
|     connect(m_deviceUIs.back()->m_samplingDeviceControl->getAddChannelButton(), SIGNAL(clicked(bool)), this, SLOT(channelAddClicked(bool))); |  | ||||||
| 
 | 
 | ||||||
|     dspDeviceSinkEngine->addSpectrumSink(m_deviceUIs.back()->m_spectrumVis); |     dspDeviceSinkEngine->addSpectrumSink(m_deviceUIs.back()->m_spectrumVis); | ||||||
|     m_deviceUIs.back()->m_spectrum->setDisplayedStream(false, 0); |     m_deviceUIs.back()->m_spectrum->setDisplayedStream(false, 0); | ||||||
| @ -979,9 +974,7 @@ bool MainWindow::handleMessage(const Message& cmd) | |||||||
|     { |     { | ||||||
|         MsgAddChannel& notif = (MsgAddChannel&) cmd; |         MsgAddChannel& notif = (MsgAddChannel&) cmd; | ||||||
|         ui->tabInputsSelect->setCurrentIndex(notif.getDeviceSetIndex()); |         ui->tabInputsSelect->setCurrentIndex(notif.getDeviceSetIndex()); | ||||||
|         DeviceUISet *deviceUI = m_deviceUIs[notif.getDeviceSetIndex()]; |         channelAddClicked(notif.getChannelRegistrationIndex()); | ||||||
|         deviceUI->m_samplingDeviceControl->getChannelSelector()->setCurrentIndex(notif.getChannelRegistrationIndex()); |  | ||||||
|         channelAddClicked(true); |  | ||||||
| 
 | 
 | ||||||
|         return true; |         return true; | ||||||
|     } |     } | ||||||
| @ -1903,9 +1896,8 @@ void MainWindow::sampleMIMOChanged() | |||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void MainWindow::channelAddClicked(bool checked) | void MainWindow::channelAddClicked(int channelIndex) | ||||||
| { | { | ||||||
|     (void) checked; |  | ||||||
|     // Do it in the currently selected source tab
 |     // Do it in the currently selected source tab
 | ||||||
|     int currentSourceTabIndex = ui->tabInputsSelect->currentIndex(); |     int currentSourceTabIndex = ui->tabInputsSelect->currentIndex(); | ||||||
| 
 | 
 | ||||||
| @ -1916,27 +1908,26 @@ void MainWindow::channelAddClicked(bool checked) | |||||||
|         if (deviceUI->m_deviceSourceEngine) // source device => Rx channels
 |         if (deviceUI->m_deviceSourceEngine) // source device => Rx channels
 | ||||||
|         { |         { | ||||||
|             m_pluginManager->createRxChannelInstance( |             m_pluginManager->createRxChannelInstance( | ||||||
|                 deviceUI->m_samplingDeviceControl->getChannelSelector()->currentIndex(), deviceUI, deviceUI->m_deviceAPI); |                 channelIndex, deviceUI, deviceUI->m_deviceAPI); | ||||||
|         } |         } | ||||||
|         else if (deviceUI->m_deviceSinkEngine) // sink device => Tx channels
 |         else if (deviceUI->m_deviceSinkEngine) // sink device => Tx channels
 | ||||||
|         { |         { | ||||||
|             m_pluginManager->createTxChannelInstance( |             m_pluginManager->createTxChannelInstance( | ||||||
|                 deviceUI->m_samplingDeviceControl->getChannelSelector()->currentIndex(), deviceUI, deviceUI->m_deviceAPI); |                 channelIndex, deviceUI, deviceUI->m_deviceAPI); | ||||||
|         } |         } | ||||||
|         else if (deviceUI->m_deviceMIMOEngine) // MIMO device => all possible channels. Depends on index range
 |         else if (deviceUI->m_deviceMIMOEngine) // MIMO device => all possible channels. Depends on index range
 | ||||||
|         { |         { | ||||||
|             int nbRxChannels = deviceUI->getNumberOfAvailableRxChannels(); |             int nbRxChannels = deviceUI->getNumberOfAvailableRxChannels(); | ||||||
|             int nbTxChannels = deviceUI->getNumberOfAvailableTxChannels(); |             int nbTxChannels = deviceUI->getNumberOfAvailableTxChannels(); | ||||||
|             int selectedIndex = deviceUI->m_samplingDeviceControl->getChannelSelector()->currentIndex(); |  | ||||||
|             qDebug("MainWindow::channelAddClicked: MIMO: tab: %d nbRx: %d nbTx: %d selected: %d", |             qDebug("MainWindow::channelAddClicked: MIMO: tab: %d nbRx: %d nbTx: %d selected: %d", | ||||||
|                 currentSourceTabIndex, nbRxChannels, nbTxChannels, selectedIndex); |                 currentSourceTabIndex, nbRxChannels, nbTxChannels, channelIndex); | ||||||
| 
 | 
 | ||||||
|             if (selectedIndex < nbRxChannels) { |             if (channelIndex < nbRxChannels) { | ||||||
|                 m_pluginManager->createRxChannelInstance( |                 m_pluginManager->createRxChannelInstance( | ||||||
|                     selectedIndex, deviceUI, deviceUI->m_deviceAPI); |                     channelIndex, deviceUI, deviceUI->m_deviceAPI); | ||||||
|             } else if (selectedIndex < nbRxChannels + nbTxChannels) { |             } else if (channelIndex < nbRxChannels + nbTxChannels) { | ||||||
|                 m_pluginManager->createTxChannelInstance( |                 m_pluginManager->createTxChannelInstance( | ||||||
|                     selectedIndex - nbRxChannels, deviceUI, deviceUI->m_deviceAPI); |                     channelIndex - nbRxChannels, deviceUI, deviceUI->m_deviceAPI); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| @ -1990,6 +1981,38 @@ void MainWindow::tabInputViewIndexChanged() | |||||||
|     ui->tabSpectraGUI->setCurrentIndex(inputViewIndex); |     ui->tabSpectraGUI->setCurrentIndex(inputViewIndex); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void MainWindow::tabChannelsIndexChanged() | ||||||
|  | { | ||||||
|  |     int channelsTabIndex = ui->tabChannels->currentIndex(); | ||||||
|  | 
 | ||||||
|  |     if (channelsTabIndex >= 0) | ||||||
|  |     { | ||||||
|  |         DeviceUISet *deviceUI = m_deviceUIs[channelsTabIndex]; | ||||||
|  |         QList<QString> channelNames; | ||||||
|  |         ui->channelDock->resetAvailableChannels(); | ||||||
|  | 
 | ||||||
|  |         if (deviceUI->m_deviceSourceEngine) // source device
 | ||||||
|  |         { | ||||||
|  |             m_pluginManager->listRxChannels(channelNames); | ||||||
|  |             ui->channelDock->addAvailableChannels(channelNames); | ||||||
|  |         } | ||||||
|  |         else if (deviceUI->m_deviceSinkEngine) // sink device
 | ||||||
|  |         { | ||||||
|  |             m_pluginManager->listTxChannels(channelNames); | ||||||
|  |             ui->channelDock->addAvailableChannels(channelNames); | ||||||
|  |         } | ||||||
|  |         else if (deviceUI->m_deviceMIMOEngine) // MIMO device
 | ||||||
|  |         { | ||||||
|  |             m_pluginManager->listMIMOChannels(channelNames); | ||||||
|  |             ui->channelDock->addAvailableChannels(channelNames); | ||||||
|  |             m_pluginManager->listRxChannels(channelNames); | ||||||
|  |             ui->channelDock->addAvailableChannels(channelNames); | ||||||
|  |             m_pluginManager->listTxChannels(channelNames); | ||||||
|  |             ui->channelDock->addAvailableChannels(channelNames); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void MainWindow::updateStatus() | void MainWindow::updateStatus() | ||||||
| { | { | ||||||
|     m_dateTimeWidget->setText(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss t")); |     m_dateTimeWidget->setText(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss t")); | ||||||
|  | |||||||
| @ -400,7 +400,7 @@ private slots: | |||||||
| 	void sampleSourceChanged(); | 	void sampleSourceChanged(); | ||||||
| 	void sampleSinkChanged(); | 	void sampleSinkChanged(); | ||||||
| 	void sampleMIMOChanged(); | 	void sampleMIMOChanged(); | ||||||
|     void channelAddClicked(bool checked); |     void channelAddClicked(int channelIndex); | ||||||
| 	void on_action_Loaded_Plugins_triggered(); | 	void on_action_Loaded_Plugins_triggered(); | ||||||
| 	void on_action_About_triggered(); | 	void on_action_About_triggered(); | ||||||
| 	void on_action_addSourceDevice_triggered(); | 	void on_action_addSourceDevice_triggered(); | ||||||
| @ -408,6 +408,7 @@ private slots: | |||||||
|     void on_action_addMIMODevice_triggered(); |     void on_action_addMIMODevice_triggered(); | ||||||
| 	void on_action_removeLastDevice_triggered(); | 	void on_action_removeLastDevice_triggered(); | ||||||
| 	void tabInputViewIndexChanged(); | 	void tabInputViewIndexChanged(); | ||||||
|  |     void tabChannelsIndexChanged(); | ||||||
| 	void commandKeyPressed(Qt::Key key, Qt::KeyboardModifiers keyModifiers, bool release); | 	void commandKeyPressed(Qt::Key key, Qt::KeyboardModifiers keyModifiers, bool release); | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -7,7 +7,7 @@ | |||||||
|     <x>0</x> |     <x>0</x> | ||||||
|     <y>0</y> |     <y>0</y> | ||||||
|     <width>1012</width> |     <width>1012</width> | ||||||
|     <height>721</height> |     <height>811</height> | ||||||
|    </rect> |    </rect> | ||||||
|   </property> |   </property> | ||||||
|   <property name="font"> |   <property name="font"> | ||||||
| @ -64,7 +64,7 @@ | |||||||
|      <x>0</x> |      <x>0</x> | ||||||
|      <y>0</y> |      <y>0</y> | ||||||
|      <width>1012</width> |      <width>1012</width> | ||||||
|      <height>20</height> |      <height>27</height> | ||||||
|     </rect> |     </rect> | ||||||
|    </property> |    </property> | ||||||
|    <widget class="QMenu" name="menu_File"> |    <widget class="QMenu" name="menu_File"> | ||||||
| @ -500,7 +500,7 @@ | |||||||
|     </layout> |     </layout> | ||||||
|    </widget> |    </widget> | ||||||
|   </widget> |   </widget> | ||||||
|   <widget class="QDockWidget" name="channelDock"> |   <widget class="ChannelsDock" name="channelDock"> | ||||||
|    <property name="windowTitle"> |    <property name="windowTitle"> | ||||||
|     <string>Channels</string> |     <string>Channels</string> | ||||||
|    </property> |    </property> | ||||||
| @ -960,6 +960,12 @@ | |||||||
|    <extends>QToolButton</extends> |    <extends>QToolButton</extends> | ||||||
|    <header>gui/buttonswitch.h</header> |    <header>gui/buttonswitch.h</header> | ||||||
|   </customwidget> |   </customwidget> | ||||||
|  |   <customwidget> | ||||||
|  |    <class>ChannelsDock</class> | ||||||
|  |    <extends>QDockWidget</extends> | ||||||
|  |    <header>gui/channelsdock.h</header> | ||||||
|  |    <container>1</container> | ||||||
|  |   </customwidget> | ||||||
|  </customwidgets> |  </customwidgets> | ||||||
|  <tabstops> |  <tabstops> | ||||||
|   <tabstop>presetTree</tabstop> |   <tabstop>presetTree</tabstop> | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user