mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-30 20:40:28 -04:00 
			
		
		
		
	Clang++ detected some warnings that g++ did not. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6409 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
		
			
				
	
	
		
			67 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #ifndef FILE_NODE_HPP__
 | |
| #define FILE_NODE_HPP__
 | |
| 
 | |
| #include <QTreeWidgetItem>
 | |
| 
 | |
| #include "RemoteFile.hpp"
 | |
| 
 | |
| class QNetworkAccessManager;
 | |
| class QString;
 | |
| class QUrl;
 | |
| 
 | |
| //
 | |
| // A holder for a RemoteFile object linked to a QTreeWidget row.
 | |
| //
 | |
| // It  renders  the file  name  in  first  column and  holds  download
 | |
| // progress data in  the second column. The progress  information is a
 | |
| // 64 bit integer number of bytes in the DisplayRole and a total bytes
 | |
| // expected in the UserRole. The first column also renders a check box
 | |
| // that downloads  the file  when checked  and removes  the downloaded
 | |
| // file  when unchecked.  The URL  and  local absolute  file path  are
 | |
| // stored in the UserData and UserData+1 roles of the first column.
 | |
| //
 | |
| class FileNode final
 | |
|   : public QTreeWidgetItem
 | |
|   , protected RemoteFile::ListenerInterface
 | |
| {
 | |
| public:
 | |
|   explicit FileNode (QTreeWidgetItem * parent
 | |
|                      , QNetworkAccessManager * network_manager
 | |
|                      , QString const& local_path
 | |
|                      , QUrl const& url);
 | |
| 
 | |
|   bool local () const {return remote_file_.local ();}
 | |
|   bool sync (bool local);
 | |
|   void abort ();
 | |
| 
 | |
|   static int const Type {UserType + 1};
 | |
| 
 | |
|   //
 | |
|   // Clients may  use this RAII  class to  block nested calls  to sync
 | |
|   // which may be troublesome, e.g. when UI updates cause recursion.
 | |
|   //
 | |
|   struct sync_blocker
 | |
|   {
 | |
|     sync_blocker (FileNode * node) : node_ {node} {node_->block_sync_ = true;}
 | |
|     sync_blocker (sync_blocker const&) = delete;
 | |
|     sync_blocker& operator = (sync_blocker const&) = delete;
 | |
|     ~sync_blocker () {node_->block_sync_ = false;}
 | |
|   private:
 | |
|     FileNode * node_;
 | |
|   };
 | |
| 
 | |
| protected:
 | |
|   void error (QString const& title, QString const& message) override;
 | |
|   bool redirect_request (QUrl const&) override {return true;} // allow
 | |
|   void download_progress (qint64 bytes_received, qint64 total_bytes) override;
 | |
|   void download_finished (bool success) override;
 | |
| 
 | |
| private:
 | |
|   RemoteFile remote_file_;      // active download
 | |
|   bool block_sync_;
 | |
| 
 | |
|   friend struct sync_blocker;
 | |
| };
 | |
| 
 | |
| #endif
 |