mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-29 19:53:44 -06:00 
			
		
		
		
	FIX: crash when delete media file in PrinterFileSystem
Change-Id: I9783bbfc9c9979b6da662b917b6f5cf4db04aa69
This commit is contained in:
		
							parent
							
								
									e325214cb6
								
							
						
					
					
						commit
						633d14e711
					
				
					 2 changed files with 16 additions and 11 deletions
				
			
		|  | @ -188,8 +188,10 @@ void ImageGrid::UpdateLayout() | |||
|     if (!m_file_sys) return; | ||||
|     wxSize size = GetClientSize(); | ||||
|     wxSize mask_size{0, 60 * em_unit(this) / 10}; | ||||
|     if (m_file_sys->GetGroupMode() == PrinterFileSystem::G_NONE) | ||||
|     if (m_file_sys->GetGroupMode() == PrinterFileSystem::G_NONE) { | ||||
|         mask_size.y = 20 * em_unit(this) / 10; | ||||
|         size.y -= mask_size.y; | ||||
|     } | ||||
|     int cell_width = m_cell_size.GetWidth(); | ||||
|     int cell_height = m_cell_size.GetHeight(); | ||||
|     int ncol = (size.GetWidth() - cell_width + m_image_size.GetWidth()) / cell_width; | ||||
|  | @ -365,13 +367,16 @@ void ImageGrid::paintEvent(wxPaintEvent& evt) | |||
| 
 | ||||
| size_t Slic3r::GUI::ImageGrid::firstItem(wxSize const &size, wxPoint &off) | ||||
| { | ||||
|     int size_y = size.y; | ||||
|     if (m_file_sys->GetGroupMode() == PrinterFileSystem::G_NONE) | ||||
|         size_y -= m_mask.GetHeight(); | ||||
|     int offx  = (size.x - (m_col_count - 1) * m_cell_size.GetWidth() - m_image_size.GetWidth()) / 2; | ||||
|     int offy  = (m_row_offset + 1 < m_row_count || m_row_count == 0) ? | ||||
|                     m_cell_size.GetHeight() - m_image_size.GetHeight() - m_row_offset * m_cell_size.GetHeight() / 4 + m_row_offset / 4 * m_cell_size.GetHeight() : | ||||
|                     size.y - (size.y + m_image_size.GetHeight() - 1) / m_cell_size.GetHeight() * m_cell_size.GetHeight(); | ||||
|                     size_y - (size_y + m_image_size.GetHeight() - 1) / m_cell_size.GetHeight() * m_cell_size.GetHeight(); | ||||
|     int index = (m_row_offset + 1 < m_row_count || m_row_count == 0) ? | ||||
|                     m_row_offset / 4 * m_col_count : | ||||
|                     ((m_file_sys->GetCount() + m_col_count - 1) / m_col_count - (size.y + m_image_size.GetHeight() - 1) / m_cell_size.GetHeight()) * m_col_count; | ||||
|                     ((m_file_sys->GetCount() + m_col_count - 1) / m_col_count - (size_y + m_image_size.GetHeight() - 1) / m_cell_size.GetHeight()) * m_col_count; | ||||
|     if (m_file_sys->GetGroupMode() == PrinterFileSystem::G_NONE) | ||||
|         offy += m_mask.GetHeight(); | ||||
|     off = wxPoint{offx, offy}; | ||||
|  |  | |||
|  | @ -320,7 +320,7 @@ void PrinterFileSystem::DeleteFilesContinue() | |||
|     std::vector<size_t> indexes; | ||||
|     std::vector<std::string> names; | ||||
|     for (size_t i = 0; i < m_file_list.size(); ++i) | ||||
|         if ((m_file_list[i].flags & FF_SELECT) && !m_file_list[i].name.empty()) { | ||||
|         if ((m_file_list[i].flags & FF_DELETED) && !m_file_list[i].name.empty()) { | ||||
|             indexes.push_back(i); | ||||
|             names.push_back(m_file_list[i].name); | ||||
|             if (names.size() >= 64) | ||||
|  | @ -338,7 +338,7 @@ void PrinterFileSystem::DeleteFilesContinue() | |||
|         FILE_DEL, req, nullptr, | ||||
|         [indexes, names, this](int, Void const &) { | ||||
|             // TODO:
 | ||||
|             for (size_t i = indexes.size() - 1; i >= 0; --i) | ||||
|             for (size_t i = indexes.size() - 1; i != size_t(-1); --i) | ||||
|                 FileRemoved(indexes[i], names[i]); | ||||
|             SendChangedEvent(EVT_FILE_CHANGED); | ||||
|             DeleteFilesContinue(); | ||||
|  | @ -363,11 +363,11 @@ void PrinterFileSystem::DownloadNextFile(std::string const &path) | |||
|     SendChangedEvent(EVT_DOWNLOAD, index, m_file_list[index].name); | ||||
|     struct Download | ||||
|     { | ||||
|         int                       index; | ||||
|         std::string               name; | ||||
|         std::string               path; | ||||
|         size_t                      index; | ||||
|         std::string                 name; | ||||
|         std::string                 path; | ||||
|         boost::filesystem::ofstream ofs; | ||||
|         boost::uuids::detail::md5 boost_md5; | ||||
|         boost::uuids::detail::md5   boost_md5; | ||||
|     }; | ||||
|     std::shared_ptr<Download> download(new Download); | ||||
|     download->index = index; | ||||
|  | @ -412,9 +412,9 @@ void PrinterFileSystem::DownloadNextFile(std::string const &path) | |||
|             return result; | ||||
|         }, | ||||
|         [this, download](int result, Progress const &data) { | ||||
|             if (download->index >= 0) | ||||
|             if (download->index != size_t(-1)) | ||||
|                 download->index = FindFile(download->index, download->name); | ||||
|             if (download->index >= 0) { | ||||
|             if (download->index != size_t(-1)) { | ||||
|                 int progress = data.size * 100 / data.total; | ||||
|                 if (result > CONTINUE) | ||||
|                     progress = -2; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 chunmao.guo
						chunmao.guo