Switched to time range instead of a fixed point for easier comparisons
This commit is contained in:
		
							parent
							
								
									330eb3a57e
								
							
						
					
					
						commit
						d2ad5ee893
					
				| @ -267,11 +267,15 @@ public: | ||||
| 
 | ||||
|     switch_at_.setTimeSpec(Qt::UTC); | ||||
|     switch_at_.setDisplayFormat("hh:mm"); | ||||
|        | ||||
| 
 | ||||
|     switch_until_.setTimeSpec(Qt::UTC); | ||||
|     switch_until_.setDisplayFormat("hh:mm"); | ||||
| 
 | ||||
|     auto form_layout = new QFormLayout (); | ||||
|     form_layout->addRow (tr ("&Band:"), &band_); | ||||
|     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 ("&Antenna:"), &description_);
 | ||||
| 
 | ||||
|     auto main_layout = new QVBoxLayout (this); | ||||
| @ -286,7 +290,16 @@ public: | ||||
| 
 | ||||
|   StationList::Station station () const | ||||
|   { | ||||
|     return {band_.currentText (), freq_.frequency(), QDateTime(QDate(2000, 1, 1), switch_at_.time(), Qt::UTC), description_.text ()}; | ||||
|     int offset = 0; | ||||
|     if(switch_until_.time() <= switch_at_.time()){ | ||||
|         offset += 1; | ||||
|     } | ||||
|     return { | ||||
|         band_.currentText (), | ||||
|         freq_.frequency(), | ||||
|         QDateTime(QDate(2000, 1, 1), switch_at_.time(), Qt::UTC), | ||||
|         QDateTime(QDate(2000, 1, 1 + offset), switch_until_.time(), Qt::UTC), | ||||
|         description_.text ()}; | ||||
|   } | ||||
| 
 | ||||
|   int exec () override | ||||
| @ -301,6 +314,7 @@ private: | ||||
|   QComboBox band_; | ||||
|   FrequencyLineEdit freq_; | ||||
|   QTimeEdit switch_at_; | ||||
|   QTimeEdit switch_until_; | ||||
|   QLineEdit description_; | ||||
| }; | ||||
| 
 | ||||
| @ -2474,6 +2488,7 @@ void Configuration::impl::delete_stations () | ||||
|   next_stations_.removeDisjointRows (selection_model->selectedRows ()); | ||||
|   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); | ||||
| } | ||||
| 
 | ||||
| void Configuration::impl::insert_station () | ||||
| @ -2491,6 +2506,7 @@ void Configuration::impl::insert_station () | ||||
|       ui_->stations_table_view->setCurrentIndex (next_stations_.add (station)); | ||||
|       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); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -2394,12 +2394,24 @@ Right click for insert and delete options.</string> | ||||
|             <attribute name="horizontalHeaderCascadingSectionResizes"> | ||||
|              <bool>true</bool> | ||||
|             </attribute> | ||||
|             <attribute name="horizontalHeaderDefaultSectionSize"> | ||||
|              <number>120</number> | ||||
|             </attribute> | ||||
|             <attribute name="horizontalHeaderMinimumSectionSize"> | ||||
|              <number>100</number> | ||||
|             </attribute> | ||||
|             <attribute name="horizontalHeaderStretchLastSection"> | ||||
|              <bool>true</bool> | ||||
|             </attribute> | ||||
|             <attribute name="verticalHeaderVisible"> | ||||
|              <bool>false</bool> | ||||
|             </attribute> | ||||
|             <attribute name="verticalHeaderDefaultSectionSize"> | ||||
|              <number>30</number> | ||||
|             </attribute> | ||||
|             <attribute name="verticalHeaderMinimumSectionSize"> | ||||
|              <number>24</number> | ||||
|             </attribute> | ||||
|            </widget> | ||||
|           </item> | ||||
|          </layout> | ||||
|  | ||||
| @ -30,6 +30,7 @@ QDebug operator << (QDebug debug, StationList::Station const& station) | ||||
|                    << station.band_name_ << ", " | ||||
|                    << station.frequency_ << ", " | ||||
|                    << station.switch_at_ << ", " | ||||
|                    << station.switch_until_ << ", " | ||||
|                    << station.antenna_description_ << ')'; | ||||
|   return debug; | ||||
| } | ||||
| @ -40,6 +41,7 @@ QDataStream& operator << (QDataStream& os, StationList::Station const& station) | ||||
|   return os << station.band_name_ | ||||
|             << station.frequency_ | ||||
|             << station.switch_at_ | ||||
|             << station.switch_until_ | ||||
|             << station.antenna_description_; | ||||
| } | ||||
| 
 | ||||
| @ -48,6 +50,7 @@ QDataStream& operator >> (QDataStream& is, StationList::Station& station) | ||||
|   return is >> station.band_name_ | ||||
|             >> station.frequency_ | ||||
|             >> station.switch_at_ | ||||
|             >> station.switch_until_ | ||||
|             >> station.antenna_description_; | ||||
| } | ||||
| 
 | ||||
| @ -93,7 +96,7 @@ public: | ||||
|     return matches.isEmpty () ? QModelIndex {} : matches.first (); | ||||
|   } | ||||
| 
 | ||||
|   static int constexpr num_columns {3}; | ||||
|   static int constexpr num_columns {4}; | ||||
|   static auto constexpr mime_type = "application/wsjt.antenna-descriptions"; | ||||
| 
 | ||||
|   Bands const * bands_; | ||||
| @ -294,7 +297,7 @@ QVariant StationList::impl::data (QModelIndex const& index, int role) const | ||||
|               break; | ||||
| 
 | ||||
|             case Qt::TextAlignmentRole: | ||||
|               item = Qt::AlignHCenter + Qt::AlignVCenter; | ||||
|               item = (int)Qt::AlignHCenter | Qt::AlignVCenter; | ||||
|               break; | ||||
|             } | ||||
|           break; | ||||
| @ -320,20 +323,20 @@ QVariant StationList::impl::data (QModelIndex const& index, int role) const | ||||
|                 break; | ||||
| 
 | ||||
|               case Qt::TextAlignmentRole: | ||||
|                 item = Qt::AlignRight + Qt::AlignVCenter; | ||||
|                 item = (int)Qt::AlignRight | Qt::AlignVCenter; | ||||
|                 break; | ||||
|               } | ||||
|           } | ||||
|           break; | ||||
| 
 | ||||
|       case switch_column: | ||||
|       case switch_at_column: | ||||
|         switch (role) | ||||
|           { | ||||
|           case SortRole: | ||||
|           case Qt::EditRole: | ||||
|           case Qt::DisplayRole: | ||||
|           case Qt::AccessibleTextRole: | ||||
|             item = stations_.at (row).switch_at_.toUTC().time().toString("hh:mm"); | ||||
|             item = stations_.at (row).switch_at_.time().toString(); | ||||
|             break; | ||||
| 
 | ||||
|           case Qt::ToolTipRole: | ||||
| @ -342,7 +345,28 @@ QVariant StationList::impl::data (QModelIndex const& index, int role) const | ||||
|             break; | ||||
| 
 | ||||
|           case Qt::TextAlignmentRole: | ||||
|             item = Qt::AlignCenter + Qt::AlignVCenter; | ||||
|             item = (int)Qt::AlignHCenter | Qt::AlignVCenter; | ||||
|             break; | ||||
|           } | ||||
|         break; | ||||
| 
 | ||||
|       case switch_until_column: | ||||
|         switch (role) | ||||
|           { | ||||
|           case SortRole: | ||||
|           case Qt::EditRole: | ||||
|           case Qt::DisplayRole: | ||||
|           case Qt::AccessibleTextRole: | ||||
|             item = stations_.at (row).switch_until_.time().toString(); | ||||
|             break; | ||||
| 
 | ||||
|           case Qt::ToolTipRole: | ||||
|           case Qt::AccessibleDescriptionRole: | ||||
|             item = tr ("Switch until this time"); | ||||
|             break; | ||||
| 
 | ||||
|           case Qt::TextAlignmentRole: | ||||
|             item = (int)Qt::AlignHCenter | Qt::AlignVCenter; | ||||
|             break; | ||||
|           } | ||||
|         break; | ||||
| @ -363,7 +387,7 @@ QVariant StationList::impl::data (QModelIndex const& index, int role) const | ||||
|             break; | ||||
| 
 | ||||
|           case Qt::TextAlignmentRole: | ||||
|             item = Qt::AlignLeft + Qt::AlignVCenter; | ||||
|             item = (int)Qt::AlignLeft | Qt::AlignVCenter; | ||||
|             break; | ||||
|           } | ||||
|         break; | ||||
| @ -383,7 +407,8 @@ QVariant StationList::impl::headerData (int section, Qt::Orientation orientation | ||||
|         { | ||||
|         case band_column: header = tr ("Band"); break; | ||||
|         case frequency_column: header = tr ("Freq. (MHz)"); break; | ||||
|         case switch_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 description_column: header = tr ("Antenna Description"); break; | ||||
|         } | ||||
|     } | ||||
| @ -445,11 +470,16 @@ bool StationList::impl::setData (QModelIndex const& model_index, QVariant const& | ||||
|               } | ||||
|           } | ||||
|           break; | ||||
|         case switch_column: | ||||
|         case switch_at_column: | ||||
|           stations_[row].switch_at_ = value.toDateTime(); | ||||
|           Q_EMIT dataChanged (model_index, model_index, roles); | ||||
|           changed = true; | ||||
|           break; | ||||
|         case switch_until_column: | ||||
|           stations_[row].switch_until_ = value.toDateTime(); | ||||
|           Q_EMIT dataChanged (model_index, model_index, roles); | ||||
|           changed = true; | ||||
|           break; | ||||
|         case description_column: | ||||
|           stations_[row].antenna_description_ = value.toString (); | ||||
|           Q_EMIT dataChanged (model_index, model_index, roles); | ||||
| @ -560,7 +590,7 @@ bool StationList::impl::dropMimeData (QMimeData const * data, Qt::DropAction act | ||||
|                                                  , [&band] (Station const& s) {return s.band_name_ == band;})) | ||||
|             { | ||||
|               // not found so add it
 | ||||
|               add (Station {band, 0, QDateTime::currentDateTimeUtc(), QString {}}); | ||||
|               add (Station {band, 0, QDateTime::currentDateTimeUtc(), QDateTime::currentDateTimeUtc(), QString {}}); | ||||
|             } | ||||
|         } | ||||
|       return true; | ||||
|  | ||||
| @ -55,12 +55,13 @@ public: | ||||
|     QString band_name_; | ||||
|     Frequency frequency_; | ||||
|     QDateTime switch_at_; | ||||
|     QDateTime switch_until_; | ||||
|     QString antenna_description_; | ||||
|   }; | ||||
| 
 | ||||
|   using Stations = QList<Station>; | ||||
| 
 | ||||
|   enum Column {band_column, frequency_column, switch_column, description_column}; | ||||
|   enum Column {band_column, frequency_column, switch_at_column, switch_until_column, description_column}; | ||||
| 
 | ||||
|   explicit StationList (Bands const * bands, QObject * parent = nullptr); | ||||
|   explicit StationList (Bands const * bands, Stations, QObject * parent = nullptr); | ||||
|  | ||||
| @ -1350,30 +1350,21 @@ void MainWindow::on_the_minute () | ||||
|     } | ||||
| 
 | ||||
|   // see if we need to hop bands...
 | ||||
|   auto now = QDateTime::currentDateTimeUtc().time(); | ||||
|   Frequency dial_frequency {m_rigState.ptt () && m_rigState.split () ? | ||||
|       m_rigState.tx_frequency () : m_rigState.frequency ()}; | ||||
|   auto const& band_name = m_config.bands ()->find (dial_frequency); | ||||
|   auto const& band_name = ui->bandComboBox->currentText(); | ||||
|   auto stations = m_config.stations()->station_list(); | ||||
|   qSort(stations.begin(), stations.end(), [](StationList::Station const &a, StationList::Station const &b){ | ||||
|     return a.switch_at_ < b.switch_at_; | ||||
|     return (a.switch_at_ < b.switch_at_) || (a.switch_at_ == b.switch_at_ && a.switch_until_ < b.switch_until_); | ||||
|   }); | ||||
| 
 | ||||
|   StationList::Station prev; | ||||
|   foreach(auto station, stations){ | ||||
|       if(station == stations.first()){ | ||||
|           prev = station; | ||||
|           continue; | ||||
|       } | ||||
|       // we just set it to a known date to make the comparisons easier ;)
 | ||||
|       QDateTime d = QDateTime::currentDateTimeUtc(); | ||||
|       d.setDate(QDate(2000, 1, 1)); | ||||
| 
 | ||||
|       if(prev.switch_at_.time() <= now && now < station.switch_at_.time()){ | ||||
|           qDebug() << "switch to" << station.band_name_ << station.frequency_; | ||||
|       bool canSwitch = station.switch_at_ <= d && d < station.switch_until_; | ||||
|       if(canSwitch && station.band_name_ != band_name){ | ||||
|           qDebug() << "should switch to" << station.band_name_ << station.frequency_; | ||||
|       } | ||||
| 
 | ||||
|       prev = station; | ||||
|   } | ||||
|   if(prev.switch_at_.time() <= now && now < QTime(11, 59)){ | ||||
|       qDebug() << "switch to" << prev.band_name_ << prev.frequency_; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Jordan Sherer
						Jordan Sherer