mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-11-03 21:40:52 -05:00 
			
		
		
		
	Static storage variables that should have been class members are made so. This ensures that if they are used as initialization one time switches then they will operate correctly when their class instantiated more than once. This now happoens for most classes due to the configurations switching facility which destroys all windows and re-instantiates them. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6661 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 constexpr 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
 |