Updated editing experience for frequency schedule. Fixed some bugs with the data storage
This commit is contained in:
parent
d2ad5ee893
commit
2989c20175
@ -87,13 +87,14 @@ int Bands::find (QString const& band) const
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Bands::findFreq(QString const& band, Radio::Frequency *pFreq) const {
|
bool Bands::findFreq(QString const& band, Radio::Frequency *pFreqLower, Radio::Frequency *pFreqHigher) const {
|
||||||
int row = find(band);
|
int row = find(band);
|
||||||
if(row == -1){
|
if(row == -1){
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(pFreq) *pFreq = ADIF_bands[row].lower_bound_;
|
if(pFreqLower) *pFreqLower = ADIF_bands[row].lower_bound_;
|
||||||
|
if(pFreqHigher) *pFreqHigher = ADIF_bands[row].upper_bound_;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -56,7 +56,7 @@ public:
|
|||||||
//
|
//
|
||||||
QString find (Frequency) const; // find band Frequency is in
|
QString find (Frequency) const; // find band Frequency is in
|
||||||
int find (QString const&) const; // find row of band (-1 if not valid)
|
int find (QString const&) const; // find row of band (-1 if not valid)
|
||||||
bool findFreq(QString const& band, Radio::Frequency *pFreq) const;
|
bool findFreq(QString const& band, Radio::Frequency *pFreqLower, Radio::Frequency *pFreqHigher) const;
|
||||||
|
|
||||||
static QString const& oob ();
|
static QString const& oob ();
|
||||||
|
|
||||||
|
@ -259,6 +259,7 @@ class StationDialog final
|
|||||||
public:
|
public:
|
||||||
explicit StationDialog (StationList const * stations, Bands * bands, QWidget * parent = nullptr)
|
explicit StationDialog (StationList const * stations, Bands * bands, QWidget * parent = nullptr)
|
||||||
: QDialog {parent}
|
: QDialog {parent}
|
||||||
|
, all_bands_ {bands}
|
||||||
, filtered_bands_ {new CandidateKeyFilter {bands, stations, 0, 0}}
|
, filtered_bands_ {new CandidateKeyFilter {bands, stations, 0, 0}}
|
||||||
{
|
{
|
||||||
setWindowTitle (QApplication::applicationName () + " - " + tr ("Add Schedule"));
|
setWindowTitle (QApplication::applicationName () + " - " + tr ("Add Schedule"));
|
||||||
@ -272,11 +273,11 @@ public:
|
|||||||
switch_until_.setDisplayFormat("hh:mm");
|
switch_until_.setDisplayFormat("hh:mm");
|
||||||
|
|
||||||
auto form_layout = new QFormLayout ();
|
auto form_layout = new QFormLayout ();
|
||||||
form_layout->addRow (tr ("&Band:"), &band_);
|
//form_layout->addRow (tr ("&Band:"), &band_);
|
||||||
form_layout->addRow (tr ("&Frequency (MHz):"), &freq_);
|
form_layout->addRow (tr ("&Frequency (MHz):"), &freq_);
|
||||||
form_layout->addRow (tr ("&Switch at (UTC):"), &switch_at_);
|
form_layout->addRow (tr ("&Switch at (UTC):"), &switch_at_);
|
||||||
form_layout->addRow (tr ("&Until (UTC):"), &switch_until_);
|
form_layout->addRow (tr ("&Until (UTC):"), &switch_until_);
|
||||||
//form_layout->addRow (tr ("&Antenna:"), &description_);
|
form_layout->addRow (tr ("&Description:"), &description_);
|
||||||
|
|
||||||
auto main_layout = new QVBoxLayout (this);
|
auto main_layout = new QVBoxLayout (this);
|
||||||
main_layout->addLayout (form_layout);
|
main_layout->addLayout (form_layout);
|
||||||
@ -290,12 +291,16 @@ public:
|
|||||||
|
|
||||||
StationList::Station station () const
|
StationList::Station station () const
|
||||||
{
|
{
|
||||||
|
auto band = all_bands_->find(freq_.frequency());
|
||||||
|
|
||||||
int offset = 0;
|
int offset = 0;
|
||||||
if(switch_until_.time() <= switch_at_.time()){
|
if(switch_until_.time() <= switch_at_.time()){
|
||||||
offset += 1;
|
offset += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
band_.currentText (),
|
//band_.currentText (),
|
||||||
|
band,
|
||||||
freq_.frequency(),
|
freq_.frequency(),
|
||||||
QDateTime(QDate(2000, 1, 1), switch_at_.time(), Qt::UTC),
|
QDateTime(QDate(2000, 1, 1), switch_at_.time(), Qt::UTC),
|
||||||
QDateTime(QDate(2000, 1, 1 + offset), switch_until_.time(), Qt::UTC),
|
QDateTime(QDate(2000, 1, 1 + offset), switch_until_.time(), Qt::UTC),
|
||||||
@ -310,6 +315,7 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
QScopedPointer<CandidateKeyFilter> filtered_bands_;
|
QScopedPointer<CandidateKeyFilter> filtered_bands_;
|
||||||
|
Bands * all_bands_;
|
||||||
|
|
||||||
QComboBox band_;
|
QComboBox band_;
|
||||||
FrequencyLineEdit freq_;
|
FrequencyLineEdit freq_;
|
||||||
@ -1121,17 +1127,23 @@ Configuration::impl::impl (Configuration * self, QDir const& temp_directory,
|
|||||||
//
|
//
|
||||||
// setup stations table model & view
|
// setup stations table model & view
|
||||||
//
|
//
|
||||||
stations_.sort (StationList::band_column);
|
stations_.sort (StationList::switch_at_column);
|
||||||
|
|
||||||
ui_->stations_table_view->setModel (&next_stations_);
|
ui_->stations_table_view->setModel (&next_stations_);
|
||||||
ui_->stations_table_view->sortByColumn (StationList::band_column, Qt::AscendingOrder);
|
ui_->stations_table_view->sortByColumn (StationList::switch_at_column, Qt::AscendingOrder);
|
||||||
connect(ui_->auto_switch_bands_check_box, &QCheckBox::clicked, ui_->stations_table_view, &QTableView::setEnabled);
|
connect(ui_->auto_switch_bands_check_box, &QCheckBox::clicked, ui_->stations_table_view, &QTableView::setEnabled);
|
||||||
|
|
||||||
// delegates
|
// delegates
|
||||||
auto stations_item_delegate = new QStyledItemDelegate {this};
|
auto stations_item_delegate = new QStyledItemDelegate {this};
|
||||||
stations_item_delegate->setItemEditorFactory (item_editor_factory ());
|
stations_item_delegate->setItemEditorFactory (item_editor_factory ());
|
||||||
ui_->stations_table_view->setItemDelegate (stations_item_delegate);
|
ui_->stations_table_view->setItemDelegate (stations_item_delegate);
|
||||||
ui_->stations_table_view->setItemDelegateForColumn (StationList::band_column, new ForeignKeyDelegate {&bands_, &next_stations_, 0, StationList::band_column, this});
|
//ui_->stations_table_view->setItemDelegateForColumn (StationList::band_column, new ForeignKeyDelegate {&bands_, &next_stations_, 0, StationList::band_column, this});
|
||||||
|
|
||||||
|
ui_->stations_table_view->resizeColumnToContents (StationList::band_column);
|
||||||
|
ui_->stations_table_view->resizeColumnToContents (StationList::frequency_column);
|
||||||
|
ui_->stations_table_view->resizeColumnToContents (StationList::switch_at_column);
|
||||||
|
ui_->stations_table_view->resizeColumnToContents (StationList::switch_until_column);
|
||||||
|
ui_->stations_table_view->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
|
||||||
|
|
||||||
// actions
|
// actions
|
||||||
station_delete_action_ = new QAction {tr ("&Delete"), ui_->stations_table_view};
|
station_delete_action_ = new QAction {tr ("&Delete"), ui_->stations_table_view};
|
||||||
@ -2489,6 +2501,7 @@ void Configuration::impl::delete_stations ()
|
|||||||
ui_->stations_table_view->resizeColumnToContents (StationList::band_column);
|
ui_->stations_table_view->resizeColumnToContents (StationList::band_column);
|
||||||
ui_->stations_table_view->resizeColumnToContents (StationList::frequency_column);
|
ui_->stations_table_view->resizeColumnToContents (StationList::frequency_column);
|
||||||
ui_->stations_table_view->resizeColumnToContents (StationList::switch_at_column);
|
ui_->stations_table_view->resizeColumnToContents (StationList::switch_at_column);
|
||||||
|
ui_->stations_table_view->resizeColumnToContents (StationList::switch_until_column);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Configuration::impl::insert_station ()
|
void Configuration::impl::insert_station ()
|
||||||
@ -2497,9 +2510,10 @@ void Configuration::impl::insert_station ()
|
|||||||
{
|
{
|
||||||
auto station = station_dialog_->station ();
|
auto station = station_dialog_->station ();
|
||||||
if(station.frequency_ == 0){
|
if(station.frequency_ == 0){
|
||||||
Frequency f;
|
Frequency l;
|
||||||
if(bands_.findFreq(station.band_name_, &f)){
|
Frequency h;
|
||||||
station.frequency_ = f;
|
if(bands_.findFreq(station.band_name_, &l, &h)){
|
||||||
|
station.frequency_ = l;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2507,6 +2521,7 @@ void Configuration::impl::insert_station ()
|
|||||||
ui_->stations_table_view->resizeColumnToContents (StationList::band_column);
|
ui_->stations_table_view->resizeColumnToContents (StationList::band_column);
|
||||||
ui_->stations_table_view->resizeColumnToContents (StationList::frequency_column);
|
ui_->stations_table_view->resizeColumnToContents (StationList::frequency_column);
|
||||||
ui_->stations_table_view->resizeColumnToContents (StationList::switch_at_column);
|
ui_->stations_table_view->resizeColumnToContents (StationList::switch_at_column);
|
||||||
|
ui_->stations_table_view->resizeColumnToContents (StationList::switch_until_column);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ QDebug operator << (QDebug debug, StationList::Station const& station)
|
|||||||
<< station.frequency_ << ", "
|
<< station.frequency_ << ", "
|
||||||
<< station.switch_at_ << ", "
|
<< station.switch_at_ << ", "
|
||||||
<< station.switch_until_ << ", "
|
<< station.switch_until_ << ", "
|
||||||
<< station.antenna_description_ << ')';
|
<< station.description_ << ')';
|
||||||
return debug;
|
return debug;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -42,7 +42,7 @@ QDataStream& operator << (QDataStream& os, StationList::Station const& station)
|
|||||||
<< station.frequency_
|
<< station.frequency_
|
||||||
<< station.switch_at_
|
<< station.switch_at_
|
||||||
<< station.switch_until_
|
<< station.switch_until_
|
||||||
<< station.antenna_description_;
|
<< station.description_;
|
||||||
}
|
}
|
||||||
|
|
||||||
QDataStream& operator >> (QDataStream& is, StationList::Station& station)
|
QDataStream& operator >> (QDataStream& is, StationList::Station& station)
|
||||||
@ -51,7 +51,7 @@ QDataStream& operator >> (QDataStream& is, StationList::Station& station)
|
|||||||
>> station.frequency_
|
>> station.frequency_
|
||||||
>> station.switch_at_
|
>> station.switch_at_
|
||||||
>> station.switch_until_
|
>> station.switch_until_
|
||||||
>> station.antenna_description_;
|
>> station.description_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -96,7 +96,7 @@ public:
|
|||||||
return matches.isEmpty () ? QModelIndex {} : matches.first ();
|
return matches.isEmpty () ? QModelIndex {} : matches.first ();
|
||||||
}
|
}
|
||||||
|
|
||||||
static int constexpr num_columns {4};
|
static int constexpr num_columns {5};
|
||||||
static auto constexpr mime_type = "application/wsjt.antenna-descriptions";
|
static auto constexpr mime_type = "application/wsjt.antenna-descriptions";
|
||||||
|
|
||||||
Bands const * bands_;
|
Bands const * bands_;
|
||||||
@ -244,7 +244,10 @@ Qt::ItemFlags StationList::impl::flags (QModelIndex const& index) const
|
|||||||
&& row < stations_.size ()
|
&& row < stations_.size ()
|
||||||
&& column < num_columns)
|
&& column < num_columns)
|
||||||
{
|
{
|
||||||
if (description_column == column)
|
if (band_column == column){
|
||||||
|
result |= Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled;
|
||||||
|
|
||||||
|
} else if (description_column == column)
|
||||||
{
|
{
|
||||||
result |= Qt::ItemIsEditable | Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled;
|
result |= Qt::ItemIsEditable | Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled;
|
||||||
}
|
}
|
||||||
@ -336,7 +339,7 @@ QVariant StationList::impl::data (QModelIndex const& index, int role) const
|
|||||||
case Qt::EditRole:
|
case Qt::EditRole:
|
||||||
case Qt::DisplayRole:
|
case Qt::DisplayRole:
|
||||||
case Qt::AccessibleTextRole:
|
case Qt::AccessibleTextRole:
|
||||||
item = stations_.at (row).switch_at_.time().toString();
|
item = stations_.at (row).switch_at_.time().toString("hh:mm");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Qt::ToolTipRole:
|
case Qt::ToolTipRole:
|
||||||
@ -357,7 +360,7 @@ QVariant StationList::impl::data (QModelIndex const& index, int role) const
|
|||||||
case Qt::EditRole:
|
case Qt::EditRole:
|
||||||
case Qt::DisplayRole:
|
case Qt::DisplayRole:
|
||||||
case Qt::AccessibleTextRole:
|
case Qt::AccessibleTextRole:
|
||||||
item = stations_.at (row).switch_until_.time().toString();
|
item = stations_.at (row).switch_until_.time().toString("hh:mm");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Qt::ToolTipRole:
|
case Qt::ToolTipRole:
|
||||||
@ -378,7 +381,7 @@ QVariant StationList::impl::data (QModelIndex const& index, int role) const
|
|||||||
case Qt::EditRole:
|
case Qt::EditRole:
|
||||||
case Qt::DisplayRole:
|
case Qt::DisplayRole:
|
||||||
case Qt::AccessibleTextRole:
|
case Qt::AccessibleTextRole:
|
||||||
item = stations_.at (row).antenna_description_;
|
item = stations_.at (row).description_;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Qt::ToolTipRole:
|
case Qt::ToolTipRole:
|
||||||
@ -409,7 +412,7 @@ QVariant StationList::impl::headerData (int section, Qt::Orientation orientation
|
|||||||
case frequency_column: header = tr ("Freq. (MHz)"); break;
|
case frequency_column: header = tr ("Freq. (MHz)"); break;
|
||||||
case switch_at_column: header = tr ("Switch at (UTC)"); break;
|
case switch_at_column: header = tr ("Switch at (UTC)"); break;
|
||||||
case switch_until_column: header = tr ("Until (UTC)"); break;
|
case switch_until_column: header = tr ("Until (UTC)"); break;
|
||||||
case description_column: header = tr ("Antenna Description"); break;
|
case description_column: header = tr ("Description"); break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -455,14 +458,20 @@ bool StationList::impl::setData (QModelIndex const& model_index, QVariant const&
|
|||||||
Frequency offset {qvariant_cast<Radio::Frequency> (value)};
|
Frequency offset {qvariant_cast<Radio::Frequency> (value)};
|
||||||
|
|
||||||
if(offset == 0){
|
if(offset == 0){
|
||||||
Frequency f;
|
Frequency l;
|
||||||
if(bands_->findFreq(stations_[row].band_name_, &f)){
|
Frequency h;
|
||||||
offset = f;
|
if(bands_->findFreq(stations_[row].band_name_, &l, &h)){
|
||||||
|
offset = l;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (offset != stations_[row].frequency_)
|
if (offset != stations_[row].frequency_)
|
||||||
{
|
{
|
||||||
|
auto band = bands_->find(offset);
|
||||||
|
if(band != stations_[row].band_name_){
|
||||||
|
stations_[row].band_name_ = band;
|
||||||
|
}
|
||||||
|
|
||||||
stations_[row].frequency_ = offset;
|
stations_[row].frequency_ = offset;
|
||||||
Q_EMIT dataChanged (model_index, model_index, roles);
|
Q_EMIT dataChanged (model_index, model_index, roles);
|
||||||
changed = true;
|
changed = true;
|
||||||
@ -471,17 +480,37 @@ bool StationList::impl::setData (QModelIndex const& model_index, QVariant const&
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case switch_at_column:
|
case switch_at_column:
|
||||||
stations_[row].switch_at_ = value.toDateTime();
|
{
|
||||||
|
QString s = value.toString();
|
||||||
|
if(s.length() < 5){
|
||||||
|
s = QString("0").repeated(5-s.length()) + s;
|
||||||
|
}
|
||||||
|
auto t = QTime::fromString(s);
|
||||||
|
auto dt = QDateTime(QDate(2000,1,1), t);
|
||||||
|
stations_[row].switch_at_ = dt;
|
||||||
Q_EMIT dataChanged (model_index, model_index, roles);
|
Q_EMIT dataChanged (model_index, model_index, roles);
|
||||||
changed = true;
|
changed = true;
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case switch_until_column:
|
case switch_until_column:
|
||||||
stations_[row].switch_until_ = value.toDateTime();
|
{
|
||||||
|
int o = 0;
|
||||||
|
QString s = value.toString();
|
||||||
|
if(s.length() < 5){
|
||||||
|
s = QString("0").repeated(5-s.length()) + s;
|
||||||
|
}
|
||||||
|
auto t = QTime::fromString(s);
|
||||||
|
if(t < stations_[row].switch_at_.time()){
|
||||||
|
o += 1;
|
||||||
|
}
|
||||||
|
auto dt = QDateTime(QDate(2000,1,1+o), t);
|
||||||
|
stations_[row].switch_until_ = dt;
|
||||||
Q_EMIT dataChanged (model_index, model_index, roles);
|
Q_EMIT dataChanged (model_index, model_index, roles);
|
||||||
changed = true;
|
changed = true;
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case description_column:
|
case description_column:
|
||||||
stations_[row].antenna_description_ = value.toString ();
|
stations_[row].description_ = value.toString ();
|
||||||
Q_EMIT dataChanged (model_index, model_index, roles);
|
Q_EMIT dataChanged (model_index, model_index, roles);
|
||||||
changed = true;
|
changed = true;
|
||||||
break;
|
break;
|
||||||
|
@ -56,7 +56,7 @@ public:
|
|||||||
Frequency frequency_;
|
Frequency frequency_;
|
||||||
QDateTime switch_at_;
|
QDateTime switch_at_;
|
||||||
QDateTime switch_until_;
|
QDateTime switch_until_;
|
||||||
QString antenna_description_;
|
QString description_;
|
||||||
};
|
};
|
||||||
|
|
||||||
using Stations = QList<Station>;
|
using Stations = QList<Station>;
|
||||||
|
@ -7837,21 +7837,8 @@ bool MainWindow::shortList(QString callsign)
|
|||||||
|
|
||||||
void MainWindow::pskSetLocal ()
|
void MainWindow::pskSetLocal ()
|
||||||
{
|
{
|
||||||
// find the station row, if any, that matches the band we are on
|
|
||||||
auto stations = m_config.stations ();
|
|
||||||
auto matches = stations->match (stations->index (0, StationList::band_column)
|
|
||||||
, Qt::DisplayRole
|
|
||||||
, ui->bandComboBox->currentText ()
|
|
||||||
, 1
|
|
||||||
, Qt::MatchExactly);
|
|
||||||
QString antenna_description;
|
|
||||||
if (!matches.isEmpty ()) {
|
|
||||||
antenna_description = stations->index (matches.first ().row ()
|
|
||||||
, StationList::description_column).data ().toString ();
|
|
||||||
}
|
|
||||||
// qDebug() << "To PSKreporter: local station details";
|
|
||||||
psk_Reporter->setLocalStation(m_config.my_callsign (), m_config.my_grid (),
|
psk_Reporter->setLocalStation(m_config.my_callsign (), m_config.my_grid (),
|
||||||
antenna_description, QString {"FT8Call v" + version() }.simplified ());
|
m_config.my_station(), QString {"FT8Call v" + version() }.simplified ());
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::transmitDisplay (bool transmitting)
|
void MainWindow::transmitDisplay (bool transmitting)
|
||||||
|
Loading…
Reference in New Issue
Block a user