Skip to content

Commit

Permalink
Implemented M17 contact handling in GUI. Addresses #251.
Browse files Browse the repository at this point in the history
  • Loading branch information
hmatuschek committed Sep 19, 2022
1 parent 5d6d926 commit c45444d
Show file tree
Hide file tree
Showing 11 changed files with 405 additions and 44 deletions.
7 changes: 4 additions & 3 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ SET(qdmr_SOURCES main.cc
zonelistview.cc scanlistsview.cc positioningsystemlistview.cc roamingzonelistview.cc
collapsablewidget.cc extensionview.cc extensionwrapper.cc propertydelegate.cc errormessageview.cc
deviceselectiondialog.cc radioselectiondialog.cc dmriddialog.cc configobjecttypeselectiondialog.cc
repeaterbookcompleter.cc)
repeaterbookcompleter.cc m17contactdialog.cc)
SET(qdmr_MOC_HEADERS
configitemwrapper.hh
application.hh settings.hh dmrcontactdialog.hh dtmfcontactdialog.hh rxgrouplistdialog.hh
Expand All @@ -23,7 +23,7 @@ SET(qdmr_MOC_HEADERS
zonelistview.hh scanlistsview.hh positioningsystemlistview.hh roamingzonelistview.hh
collapsablewidget.hh extensionview.hh extensionwrapper.hh propertydelegate.hh errormessageview.hh
deviceselectiondialog.hh radioselectiondialog.hh dmriddialog.hh configobjecttypeselectiondialog.hh
repeaterbookcompleter.hh)
repeaterbookcompleter.hh m17contactdialog.hh)
SET(qdmr_HEADERS )
SET(qdmr_UI_FORMS dmrcontactdialog.ui dtmfcontactdialog.ui rxgrouplistdialog.ui analogchanneldialog.ui zonedialog.ui
digitalchanneldialog.ui scanlistdialog.ui configwizardstart.ui verifydialog.ui settingsdialog.ui
Expand All @@ -32,7 +32,8 @@ SET(qdmr_UI_FORMS dmrcontactdialog.ui dtmfcontactdialog.ui rxgrouplistdialog.ui
generalsettingsview.ui radioidlistview.ui contactlistview.ui grouplistsview.ui channellistview.ui
zonelistview.ui scanlistsview.ui positioningsystemlistview.ui roamingzonelistview.ui
errormessageview.ui extensionview.ui
deviceselectiondialog.ui radioselectiondialog.ui dmriddialog.ui configobjecttypeselectiondialog.ui)
deviceselectiondialog.ui radioselectiondialog.ui dmriddialog.ui configobjecttypeselectiondialog.ui
m17contactdialog.ui)

qt5_wrap_cpp(qdmr_MOC_SOURCES ${qdmr_MOC_HEADERS})
qt5_wrap_ui(qdmr_UI_SOURCES ${qdmr_UI_FORMS})
Expand Down
30 changes: 24 additions & 6 deletions src/channellistview.cc
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

#include <QHeaderView>
#include <QMessageBox>

#include <QMenu>

ChannelListView::ChannelListView(Config *config, QWidget *parent)
: QWidget(parent), ui(new Ui::ChannelListView), _config(config)
Expand All @@ -21,9 +21,15 @@ ChannelListView::ChannelListView(Config *config, QWidget *parent)
this, SLOT(storeChannelListSectionState()));

ui->listView->setModel(new ChannelListWrapper(_config->channelList(), ui->listView));

connect(ui->addAnalogChannel, SIGNAL(clicked()), this, SLOT(onAddAnalogChannel()));
connect(ui->addDigitalChannel, SIGNAL(clicked()), this, SLOT(onAddDigitalChannel()));
QMenu *menu = new QMenu();
menu->addAction(ui->actionAdd_FM_Channel);
menu->addAction(ui->actionAdd_DMR_Channel);
menu->addAction(ui->actionAdd_M17_Channel);
ui->addChannel->setMenu(menu);

connect(ui->actionAdd_FM_Channel, SIGNAL(triggered(bool)), this, SLOT(onAddFMChannel()));
connect(ui->actionAdd_DMR_Channel, SIGNAL(triggered(bool)), this, SLOT(onAddDMRChannel()));
connect(ui->actionAdd_M17_Channel, SIGNAL(triggered(bool)), this, SLOT(onAddM17Channel()));
connect(ui->cloneChannel, SIGNAL(clicked()), this, SLOT(onCloneChannel()));
connect(ui->remChannel, SIGNAL(clicked()), this, SLOT(onRemChannel()));
connect(ui->listView, SIGNAL(doubleClicked(unsigned)), this, SLOT(onEditChannel(unsigned)));
Expand All @@ -35,7 +41,7 @@ ChannelListView::~ChannelListView() {


void
ChannelListView::onAddAnalogChannel() {
ChannelListView::onAddFMChannel() {
AnalogChannelDialog dialog(_config);
if (QDialog::Accepted != dialog.exec())
return;
Expand All @@ -47,7 +53,19 @@ ChannelListView::onAddAnalogChannel() {
}

void
ChannelListView::onAddDigitalChannel() {
ChannelListView::onAddDMRChannel() {
DigitalChannelDialog dialog(_config);
if (QDialog::Accepted != dialog.exec())
return;

int row=-1;
if (ui->listView->hasSelection())
row = ui->listView->selection().second+1;
_config->channelList()->add(dialog.channel(), row);
}

void
ChannelListView::onAddM17Channel() {
DigitalChannelDialog dialog(_config);
if (QDialog::Accepted != dialog.exec())
return;
Expand Down
5 changes: 3 additions & 2 deletions src/channellistview.hh
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,9 @@ public:
~ChannelListView();

protected slots:
void onAddAnalogChannel();
void onAddDigitalChannel();
void onAddFMChannel();
void onAddDMRChannel();
void onAddM17Channel();
void onCloneChannel();
void onRemChannel();
void onEditChannel(unsigned row);
Expand Down
42 changes: 28 additions & 14 deletions src/channellistview.ui
Original file line number Diff line number Diff line change
Expand Up @@ -27,22 +27,12 @@
<item>
<layout class="QHBoxLayout" name="horizontalLayout_6">
<item>
<widget class="QPushButton" name="addAnalogChannel">
<property name="text">
<string>Add Analog Channel</string>
</property>
<property name="shortcut">
<string>Alt+A</string>
<widget class="QPushButton" name="addChannel">
<property name="contextMenuPolicy">
<enum>Qt::ActionsContextMenu</enum>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="addDigitalChannel">
<property name="text">
<string>Add Digital Channel</string>
</property>
<property name="shortcut">
<string>Alt+D</string>
<string>Add Channel</string>
</property>
</widget>
</item>
Expand All @@ -69,6 +59,30 @@
</layout>
</item>
</layout>
<action name="actionAdd_FM_Channel">
<property name="text">
<string>Add FM Channel</string>
</property>
<property name="toolTip">
<string>Adds an FM channel to the list.</string>
</property>
</action>
<action name="actionAdd_DMR_Channel">
<property name="text">
<string>Add DMR Channel</string>
</property>
<property name="toolTip">
<string>Adds a new DMR channel to the list.</string>
</property>
</action>
<action name="actionAdd_M17_Channel">
<property name="text">
<string>Add M17 Channel</string>
</property>
<property name="toolTip">
<string>Adds an M17 channel to the list.</string>
</property>
</action>
</widget>
<customwidgets>
<customwidget>
Expand Down
27 changes: 22 additions & 5 deletions src/configitemwrapper.cc
Original file line number Diff line number Diff line change
Expand Up @@ -520,25 +520,42 @@ ContactListWrapper::data(const QModelIndex &index, int role) const {
return QVariant();
}
} else if (contact->is<DMRContact>()) {
DMRContact *digi = contact->as<DMRContact>();
DMRContact *dmr = contact->as<DMRContact>();
switch (index.column()) {
case 0:
switch (digi->type()) {
switch (dmr->type()) {
case DMRContact::PrivateCall: return tr("Private Call");
case DMRContact::GroupCall: return tr("Group Call");
case DMRContact::AllCall: return tr("All Call");
}
case 1:
return digi->name();
return dmr->name();
case 2:
return digi->number();
return dmr->number();
case 3:
return (digi->ring() ? tr("On") : tr("Off"));
return (dmr->ring() ? tr("On") : tr("Off"));
default:
return QVariant();
}
} else if (contact->is<M17Contact>()) {
M17Contact *m17 = contact->as<M17Contact>();
switch (index.column()) {
case 0:
return tr("M17");
case 1:
return m17->name();
case 2:
if (m17->isBroadcast())
return tr("[Broadcast]");
return m17->call();
case 3:
return (m17->ring() ? tr("On") : tr("Off"));
default:
return QVariant();
}
}
}

return QVariant();
}

Expand Down
35 changes: 30 additions & 5 deletions src/contactlistview.cc
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
#include "contactlistview.hh"
#include "ui_contactlistview.h"
#include "dmrcontactdialog.hh"
#include "m17contactdialog.hh"
#include "dtmfcontactdialog.hh"
#include "application.hh"
#include "settings.hh"
#include <QMessageBox>
#include <QHeaderView>

#include <QMenu>

ContactListView::ContactListView(Config *config, QWidget *parent)
: QWidget(parent), ui(new Ui::ContactListView), _config(config)
Expand All @@ -20,8 +21,15 @@ ContactListView::ContactListView(Config *config, QWidget *parent)

ui->listView->setModel(new ContactListWrapper(_config->contacts(), ui->listView));

connect(ui->addDMRContact, SIGNAL(clicked()), this, SLOT(onAddDMRContact()));
connect(ui->addDTMFContact, SIGNAL(clicked()), this, SLOT(onAddDTMFContact()));
QMenu *menu = new QMenu();
menu->addAction(ui->actionAdd_DMR_Contact);
menu->addAction(ui->actionAdd_M17_Contact);
menu->addAction(ui->actionAdd_DTMF_Contact);
ui->addContact->setMenu(menu);

connect(ui->actionAdd_DMR_Contact, SIGNAL(triggered(bool)), this, SLOT(onAddDMRContact()));
connect(ui->actionAdd_M17_Contact, SIGNAL(triggered(bool)), this, SLOT(onAddM17Contact()));
connect(ui->actionAdd_DTMF_Contact, SIGNAL(triggered(bool)), this, SLOT(onAddDTMFContact()));
connect(ui->remContact, SIGNAL(clicked()), this, SLOT(onRemContact()));
connect(ui->listView, SIGNAL(doubleClicked(unsigned)), this, SLOT(onEditContact(unsigned)));
}
Expand All @@ -43,6 +51,18 @@ ContactListView::onAddDMRContact() {
_config->contacts()->add(dialog.contact(), row);
}

void
ContactListView::onAddM17Contact() {
M17ContactDialog dialog(_config);
if (QDialog::Accepted != dialog.exec())
return;

int row=-1;
if (ui->listView->hasSelection())
row = ui->listView->selection().second+1;
_config->contacts()->add(dialog.contact(), row);
}

void
ContactListView::onAddDTMFContact() {
DTMFContactDialog dialog(_config);
Expand Down Expand Up @@ -94,8 +114,13 @@ ContactListView::onEditContact(unsigned row) {
Application *app = qobject_cast<Application *>(QApplication::instance());
Contact *contact = _config->contacts()->contact(row);

if (DMRContact *digi = contact->as<DMRContact>()) {
DMRContactDialog dialog(digi, app->user(), app->talkgroup(), _config);
if (DMRContact *dmr = contact->as<DMRContact>()) {
DMRContactDialog dialog(dmr, app->user(), app->talkgroup(), _config);
if (QDialog::Accepted != dialog.exec())
return;
dialog.contact();
} else if (M17Contact *m17 = contact->as<M17Contact>()) {
M17ContactDialog dialog(_config, m17);
if (QDialog::Accepted != dialog.exec())
return;
dialog.contact();
Expand Down
1 change: 1 addition & 0 deletions src/contactlistview.hh
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ public:

protected slots:
void onAddDMRContact();
void onAddM17Contact();
void onAddDTMFContact();
void onRemContact();
void onEditContact(unsigned row);
Expand Down
35 changes: 26 additions & 9 deletions src/contactlistview.ui
Original file line number Diff line number Diff line change
Expand Up @@ -27,28 +27,21 @@
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QPushButton" name="addDMRContact">
<widget class="QPushButton" name="addContact">
<property name="toolTip">
<string>Adds a contact to the list.</string>
</property>
<property name="accessibleName">
<string>Add contact button</string>
</property>
<property name="text">
<string>Add Digital Contact</string>
<string>Add Contact</string>
</property>
<property name="shortcut">
<string>Alt++</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="addDTMFContact">
<property name="text">
<string>Add DTMF Contact</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="remContact">
<property name="accessibleName">
Expand All @@ -65,6 +58,30 @@
</layout>
</item>
</layout>
<action name="actionAdd_M17_Contact">
<property name="text">
<string>Add M17 Contact</string>
</property>
<property name="toolTip">
<string>Adds an M17 contact to the list.</string>
</property>
</action>
<action name="actionAdd_DTMF_Contact">
<property name="text">
<string>Add DTMF Contact</string>
</property>
<property name="toolTip">
<string>Adds an DTMF (analog) contact to the list.</string>
</property>
</action>
<action name="actionAdd_DMR_Contact">
<property name="text">
<string>Add DMR Contact</string>
</property>
<property name="toolTip">
<string>Adds an DMR contact to the list.</string>
</property>
</action>
</widget>
<customwidgets>
<customwidget>
Expand Down
Loading

0 comments on commit c45444d

Please sign in to comment.