std::set<Package> PackagesManager::getLocalPackages() const { std::set<Package> localPackages; //Each packages paths for(const auto& packagesPath : m_packagesPaths) { if(fs::exists(packagesPath)) { //List all packages for(fs::directory_entry& packageEntry : fs::directory_iterator(packagesPath)) { fs::path packagePath = packageEntry.path(); if(fs::is_directory(packagePath)) { //This is a folder, so it is be a package. std::string packageName = fs::relative(packagePath, packagesPath).string(); try { localPackages.insert(getLocalPackage(packageName)); //Note: getLocalPackage will throw if the package is being currently downloaded. } catch(...) {} //Ignore if the package is invalid or downloading ! } } } else { std::cout << "[Packages/Warning] \"" << packagesPath.string() << "\" doesn't exists!" << std::endl; } } return localPackages; }
void ImageValueEditor::sliceImage(const Image& image) { if (!image.Ok()) return; // mask GeneratedImage::Options options((int)style().width, (int)style().height, &viewer.getStylePackage(), &viewer.getLocalPackage()); AlphaMask mask; style().mask.getNoCache(options,mask); // slice ImageSliceWindow s(wxGetTopLevelParent(&editor()), image, style().getSize(), mask); // clicked ok? if (s.ShowModal() == wxID_OK) { // store the image into the set LocalFileName new_image_file = getLocalPackage().newFileName(field().name,_("")); // a new unique name in the package Image img = s.getImage(); img.SaveFile(getLocalPackage().nameOut(new_image_file), wxBITMAP_TYPE_PNG); // always use PNG images, see #69. Disk space is cheap anyway. addAction(value_action(valueP(), script_local_image_file(new_image_file))); } }
bool ImageValueEditor::doCopy() { // load/generate image GeneratedImage::Options opts; opts.package = &getStylePackage(); opts.local_package = &getLocalPackage(); Image image = value().value->toImage()->generate(opts); if (!image.Ok()) return false; // set data if (!wxTheClipboard->Open()) return false; bool ok = wxTheClipboard->SetData(new wxBitmapDataObject(image)); wxTheClipboard->Close(); return ok; }