MCPcopy Create free account
hub / github.com/OpenOrienteering/mapper / copy

Method copy

src/gui/map/map_editor.cpp:1896–1945  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1894}
1895
1896void MapEditorController::copy()
1897{
1898 if (map->getNumSelectedObjects() == 0)
1899 return;
1900
1901 // Create map containing required objects and their symbol and color dependencies
1902 Map copy_map;
1903 copy_map.setScaleDenominator(map->getScaleDenominator());
1904
1905 std::vector<bool> symbol_filter;
1906 symbol_filter.assign(map->getNumSymbols(), false);
1907 for (const auto* object : map->selectedObjects())
1908 {
1909 int symbol_index = map->findSymbolIndex(object->getSymbol());
1910 if (symbol_index >= 0)
1911 symbol_filter[symbol_index] = true;
1912 }
1913
1914 // Copy all colors. This improves preservation of relative order during paste.
1915 copy_map.importMap(*map, Map::ColorImport);
1916
1917 // Export symbols and colors into copy_map
1918 auto symbol_map = copy_map.importMap(*map, Map::MinimalSymbolImport, &symbol_filter, -1, true);
1919
1920 // Duplicate all selected objects into copy map
1921 for (const auto* object : map->selectedObjects())
1922 {
1923 auto* new_object = object->duplicate();
1924 if (symbol_map.contains(new_object->getSymbol()))
1925 new_object->setSymbol(symbol_map.value(new_object->getSymbol()), true);
1926
1927 copy_map.addObject(new_object);
1928 }
1929
1930 // Save map to memory
1931 QBuffer buffer;
1932 if (!copy_map.exportToIODevice(buffer))
1933 {
1934 QMessageBox::warning(nullptr, tr("Error"), tr("An internal error occurred, sorry!"));
1935 return;
1936 }
1937
1938 // Put buffer into clipboard
1939 auto* mime_data = new QMimeData();
1940 mime_data->setData(MimeType::OpenOrienteeringObjects(), buffer.data());
1941 QApplication::clipboard()->setMimeData(mime_data);
1942
1943 // Show message
1944 window->showStatusBarMessage(tr("Copied %n object(s)", nullptr, map->getNumSelectedObjects()), 2000);
1945}
1946
1947
1948void MapEditorController::paste()

Callers

nothing calls this directly

Calls 15

OpenOrienteeringObjectsFunction · 0.85
getNumSelectedObjectsMethod · 0.80
getNumSymbolsMethod · 0.80
findSymbolIndexMethod · 0.80
exportToIODeviceMethod · 0.80
showStatusBarMessageMethod · 0.80
setScaleDenominatorMethod · 0.45
getScaleDenominatorMethod · 0.45
getSymbolMethod · 0.45
importMapMethod · 0.45
duplicateMethod · 0.45
containsMethod · 0.45

Tested by

no test coverage detected