mirror of
				https://github.com/ciphervance/supercell-wx.git
				synced 2025-10-31 00:40:06 +00:00 
			
		
		
		
	Added a basic location marker manager.
This commit is contained in:
		
							parent
							
								
									84233868d6
								
							
						
					
					
						commit
						19415cd0a1
					
				
					 16 changed files with 806 additions and 44 deletions
				
			
		|  | @ -56,7 +56,7 @@ public: | |||
|    { | ||||
|    } | ||||
| 
 | ||||
|    types::MarkerInfo toMarkerInfo() | ||||
|    const types::MarkerInfo& toMarkerInfo() | ||||
|    { | ||||
|       return markerInfo_; | ||||
|    } | ||||
|  | @ -67,9 +67,9 @@ public: | |||
|                           boost::json::value&                  jv, | ||||
|                           const std::shared_ptr<MarkerRecord>& record) | ||||
|    { | ||||
|       jv = {{kNameName_, record->markerInfo_.name_}, | ||||
|             {kLatitudeName_, record->markerInfo_.latitude_}, | ||||
|             {kLongitudeName_, record->markerInfo_.longitude_}}; | ||||
|       jv = {{kNameName_, record->markerInfo_.name}, | ||||
|             {kLatitudeName_, record->markerInfo_.latitude}, | ||||
|             {kLongitudeName_, record->markerInfo_.longitude}}; | ||||
|    } | ||||
| 
 | ||||
|    friend MarkerRecord tag_invoke(boost::json::value_to_tag<MarkerRecord>, | ||||
|  | @ -124,7 +124,7 @@ void MarkerManager::Impl::ReadMarkerSettings() | |||
|             MarkerRecord record = | ||||
|                boost::json::value_to<MarkerRecord>(markerEntry); | ||||
| 
 | ||||
|             if (!record.markerInfo_.name_.empty()) | ||||
|             if (!record.markerInfo_.name.empty()) | ||||
|             { | ||||
|                markerRecords_.emplace_back( | ||||
|                   std::make_shared<MarkerRecord>(record.markerInfo_)); | ||||
|  | @ -138,6 +138,8 @@ void MarkerManager::Impl::ReadMarkerSettings() | |||
| 
 | ||||
|       logger_->debug("{} location marker entries", markerRecords_.size()); | ||||
|    } | ||||
| 
 | ||||
|    Q_EMIT self_->MarkersUpdated(); | ||||
| } | ||||
| 
 | ||||
| void MarkerManager::Impl::WriteMarkerSettings() | ||||
|  | @ -153,7 +155,7 @@ MarkerManager::Impl::GetMarkerByName(const std::string& name) | |||
| { | ||||
|    for (auto& markerRecord : markerRecords_) | ||||
|    { | ||||
|       if (markerRecord->markerInfo_.name_ == name) | ||||
|       if (markerRecord->markerInfo_.name == name) | ||||
|       { | ||||
|          return markerRecord; | ||||
|       } | ||||
|  | @ -190,38 +192,44 @@ size_t MarkerManager::marker_count() | |||
| } | ||||
| 
 | ||||
| // TODO deal with out of range/not found
 | ||||
| types::MarkerInfo MarkerManager::get_marker(size_t index) | ||||
| const types::MarkerInfo& MarkerManager::get_marker(size_t index) | ||||
| { | ||||
|    std::shared_ptr<MarkerManager::Impl::MarkerRecord> markerRecord = | ||||
|       p->markerRecords_[index]; | ||||
|    return markerRecord->toMarkerInfo(); | ||||
| } | ||||
| 
 | ||||
| types::MarkerInfo MarkerManager::get_marker(const std::string& name) | ||||
| { | ||||
|    std::shared_ptr<MarkerManager::Impl::MarkerRecord> markerRecord = | ||||
|       p->GetMarkerByName(name); | ||||
|    return markerRecord->toMarkerInfo(); | ||||
| } | ||||
| 
 | ||||
| void MarkerManager::set_marker(size_t index, const types::MarkerInfo& marker) | ||||
| { | ||||
|    std::shared_ptr<MarkerManager::Impl::MarkerRecord> markerRecord = | ||||
|       p->markerRecords_[index]; | ||||
|    markerRecord->markerInfo_ = marker; | ||||
| } | ||||
| 
 | ||||
| void MarkerManager::set_marker(const std::string&       name, | ||||
|                                const types::MarkerInfo& marker) | ||||
| { | ||||
|    std::shared_ptr<MarkerManager::Impl::MarkerRecord> markerRecord = | ||||
|       p->GetMarkerByName(name); | ||||
|    markerRecord->markerInfo_ = marker; | ||||
|    Q_EMIT MarkersUpdated(); | ||||
| } | ||||
| 
 | ||||
| void MarkerManager::add_marker(const types::MarkerInfo& marker) | ||||
| { | ||||
|    p->markerRecords_.emplace_back(std::make_shared<Impl::MarkerRecord>(marker)); | ||||
|    Q_EMIT MarkerAdded(); | ||||
|    Q_EMIT MarkersUpdated(); | ||||
| } | ||||
| 
 | ||||
| void MarkerManager::remove_marker(size_t index) | ||||
| { | ||||
|    if (index >= p->markerRecords_.size()) | ||||
|    { | ||||
|       return; | ||||
|    } | ||||
| 
 | ||||
|    for (size_t i = index; i < p->markerRecords_.size() - 1; i++) | ||||
|    { | ||||
|       p->markerRecords_[i] = p->markerRecords_[i + 1]; | ||||
|    } | ||||
| 
 | ||||
|    p->markerRecords_.pop_back(); | ||||
| 
 | ||||
|    Q_EMIT MarkerRemoved(index); | ||||
|    Q_EMIT MarkersUpdated(); | ||||
| } | ||||
| 
 | ||||
| void MarkerManager::move_marker(size_t from, size_t to) | ||||
|  | @ -250,6 +258,7 @@ void MarkerManager::move_marker(size_t from, size_t to) | |||
|       } | ||||
|       p->markerRecords_[to] = markerRecord; | ||||
|    } | ||||
|    Q_EMIT MarkersUpdated(); | ||||
| } | ||||
| 
 | ||||
| std::shared_ptr<MarkerManager> MarkerManager::Instance() | ||||
|  |  | |||
|  | @ -2,8 +2,6 @@ | |||
| 
 | ||||
| #include <scwx/qt/types/marker_types.hpp> | ||||
| 
 | ||||
| #include <string> | ||||
| 
 | ||||
| #include <QObject> | ||||
| 
 | ||||
| namespace scwx | ||||
|  | @ -21,16 +19,20 @@ public: | |||
|    explicit MarkerManager(); | ||||
|    ~MarkerManager(); | ||||
| 
 | ||||
|    size_t            marker_count(); | ||||
|    types::MarkerInfo get_marker(size_t index); | ||||
|    types::MarkerInfo get_marker(const std::string& name); | ||||
|    void              set_marker(size_t index, const types::MarkerInfo& marker); | ||||
|    void set_marker(const std::string& name, const types::MarkerInfo& marker); | ||||
|    size_t                   marker_count(); | ||||
|    const types::MarkerInfo& get_marker(size_t index); | ||||
|    void set_marker(size_t index, const types::MarkerInfo& marker); | ||||
|    void add_marker(const types::MarkerInfo& marker); | ||||
|    void remove_marker(size_t index); | ||||
|    void move_marker(size_t from, size_t to); | ||||
| 
 | ||||
|    static std::shared_ptr<MarkerManager> Instance(); | ||||
| 
 | ||||
| signals: | ||||
|    void MarkersUpdated(); | ||||
|    void MarkerAdded(); | ||||
|    void MarkerRemoved(size_t index); | ||||
| 
 | ||||
| private: | ||||
|    class Impl; | ||||
|    std::unique_ptr<Impl> p; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 AdenKoperczak
						AdenKoperczak