2019-11-26 14:19:29 +01:00
#ifndef slic3r_GUI_RemovableDriveManager_hpp_
#define slic3r_GUI_RemovableDriveManager_hpp_
#include <vector>
#include <string>
namespace Slic3r {
namespace GUI {
struct DriveData
{
2019-11-26 15:52:18 +01:00
std :: string name ;
2019-11-26 14:19:29 +01:00
std :: string path ;
2019-11-26 15:52:18 +01:00
DriveData ( std :: string n , std :: string p ) : name ( n ), path ( p ){}
2019-11-26 14:19:29 +01:00
};
class RemovableDriveManager
{
public :
2019-11-28 13:50:58 +01:00
static RemovableDriveManager & get_instance ()
2019-11-26 14:19:29 +01:00
{
static RemovableDriveManager instance ;
return instance ;
}
RemovableDriveManager ( RemovableDriveManager const & ) = delete ;
void operator = ( RemovableDriveManager const & ) = delete ;
//update() searches for removable devices, returns false if empty.
2019-12-05 14:07:02 +01:00
bool update ( long time = 0 ); //time = 0 is forced update, time expects wxGetLocalTime()
2019-11-28 13:50:58 +01:00
bool is_drive_mounted ( const std :: string & path );
void eject_drive ( const std :: string & path );
std :: string get_last_drive_path ();
std :: vector < DriveData > get_all_drives ();
bool is_path_on_removable_drive ( const std :: string & path );
2019-12-05 14:07:02 +01:00
void add_callback ( std :: function < void () > callback ); // callback will notify every drive removal. to see if it was last used drive call is_last_drive_removed()
void set_last_save_path ( const std :: string & path );
bool is_last_drive_removed (); //if we dont need info about this drive, call reset_last_save_path();
void reset_last_save_path ();
2019-11-28 13:50:58 +01:00
void print ();
2019-11-26 14:19:29 +01:00
private :
2019-12-05 14:07:02 +01:00
RemovableDriveManager () : m_drives_count ( 0 ), m_last_update ( 0 ), m_last_save_path ( "" ){}
2019-11-28 13:50:58 +01:00
void search_for_drives ();
void check_and_notify ();
2019-12-05 14:07:02 +01:00
std :: string get_drive_from_path ( const std :: string & path ); //returns drive path (same as path in DriveData) if exists otherwise empty string ""
2019-11-28 13:50:58 +01:00
std :: vector < DriveData > m_current_drives ;
std :: vector < std :: function < void () >> m_callbacks ;
2019-12-03 10:09:53 +01:00
size_t m_drives_count ;
2019-12-04 15:27:33 +01:00
long m_last_update ;
2019-12-05 14:07:02 +01:00
std :: string m_last_save_path ;
2019-11-26 15:52:18 +01:00
#if _WIN32
2019-11-28 13:50:58 +01:00
void register_window ();
2019-12-05 14:07:02 +01:00
//INT_PTR WINAPI WinProcCallback(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
2019-11-26 15:52:18 +01:00
#else
2019-11-28 16:35:22 +01:00
void search_path ( const std :: string & path , const std :: string & parent_path );
bool compare_filesystem_id ( const std :: string & path_a , const std :: string & path_b );
2019-11-26 15:52:18 +01:00
#endif
2019-11-26 14:19:29 +01:00
};
}}
#endif