Fix another issue with station details not being saved

Due to  what appears to be  a Qt bug, any  in progress user edit  to a
table  fields is  not  updated  in the  underlying  data models  until
QDialog::accept() is  called, this means that  model validation before
calling QDialog::accept() is tricky.

git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@5164 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
Bill Somerville 2015-04-06 13:25:51 +00:00
parent f7b0d3904a
commit 177aaef501
5 changed files with 16 additions and 14 deletions

View File

@ -1490,6 +1490,13 @@ void Configuration::impl::accept ()
{ {
return; // not accepting return; // not accepting
} }
QDialog::accept(); // do this before accessing custom
// models so that any changes in
// delegates in views get flushed to
// the underlying models before we
// access them
sync_transceiver (true); // force an update sync_transceiver (true); // force an update
// //
@ -1637,8 +1644,6 @@ void Configuration::impl::accept ()
} }
write_settings (); // make visible to all write_settings (); // make visible to all
QDialog::accept();
} }
void Configuration::impl::reject () void Configuration::impl::reject ()

View File

@ -58,7 +58,6 @@ FrequencyList::FrequencyList (Frequencies frequencies, QObject * parent)
: QSortFilterProxyModel {parent} : QSortFilterProxyModel {parent}
, m_ {frequencies, parent} , m_ {frequencies, parent}
{ {
// setDynamicSortFilter (true);
setSourceModel (&*m_); setSourceModel (&*m_);
setSortRole (SortRole); setSortRole (SortRole);
} }
@ -73,9 +72,8 @@ FrequencyList& FrequencyList::operator = (Frequencies frequencies)
return *this; return *this;
} }
auto FrequencyList::frequencies () -> Frequencies auto FrequencyList::frequencies () const -> Frequencies
{ {
submit ();
return m_->frequencies (); return m_->frequencies ();
} }

View File

@ -41,7 +41,7 @@ public:
// Load and store contents // Load and store contents
FrequencyList& operator = (Frequencies); FrequencyList& operator = (Frequencies);
Frequencies frequencies (); Frequencies frequencies () const;
// Model API // Model API
QModelIndex add (Frequency); QModelIndex add (Frequency);

View File

@ -119,7 +119,6 @@ StationList::StationList (Bands const * bands, Stations stations, QObject * pare
: QSortFilterProxyModel {parent} : QSortFilterProxyModel {parent}
, m_ {bands, stations, parent} , m_ {bands, stations, parent}
{ {
// setDynamicSortFilter (true);
setSourceModel (&*m_); setSourceModel (&*m_);
setSortRole (SortRole); setSortRole (SortRole);
} }
@ -134,9 +133,8 @@ StationList& StationList::operator = (Stations stations)
return *this; return *this;
} }
auto StationList::stations () -> Stations auto StationList::stations () const -> Stations
{ {
submit ();
return m_->stations (); return m_->stations ();
} }
@ -432,6 +430,7 @@ bool StationList::impl::setData (QModelIndex const& model_index, QVariant const&
case 2: case 2:
stations_[row].antenna_description_ = value.toString (); stations_[row].antenna_description_ = value.toString ();
qDebug () << "stations edited:" << stations_;
Q_EMIT dataChanged (model_index, model_index, roles); Q_EMIT dataChanged (model_index, model_index, roles);
changed = true; changed = true;
break; break;

View File

@ -65,7 +65,7 @@ public:
// Load and store contents. // Load and store contents.
StationList& operator = (Stations); StationList& operator = (Stations);
Stations stations (); Stations stations () const;
// //
// Model API // Model API
@ -83,6 +83,10 @@ private:
pimpl<impl> m_; pimpl<impl> m_;
}; };
#if !defined (QT_NO_DEBUG_STREAM)
QDebug operator << (QDebug debug, StationList::Station const&);
#endif
// Station equivalence // Station equivalence
inline inline
bool operator == (StationList::Station const& lhs, StationList::Station const& rhs) bool operator == (StationList::Station const& lhs, StationList::Station const& rhs)
@ -95,8 +99,4 @@ bool operator == (StationList::Station const& lhs, StationList::Station const& r
Q_DECLARE_METATYPE (StationList::Station); Q_DECLARE_METATYPE (StationList::Station);
Q_DECLARE_METATYPE (StationList::Stations); Q_DECLARE_METATYPE (StationList::Stations);
#if !defined (QT_NO_DEBUG_STREAM)
QDebug operator << (QDebug debug, StationList::Station const&);
#endif
#endif #endif