diff options
| author | Adrian Boguszewski <adrbogus1@student.pg.gda.pl> | 2016-06-16 22:52:06 +0000 |
|---|---|---|
| committer | Adrian Boguszewski <adrbogus1@student.pg.gda.pl> | 2016-06-16 22:52:06 +0000 |
| commit | c3b5e15737dc84cb2dafbdfb8d735e2dd7c8b08c (patch) | |
| tree | adc28ff36e9d801c626f01f994447931d2685ff8 | |
| parent | Replaced old selection containers (diff) | |
| parent | Merging lp:~inkscape+alexander/inkscape/comments into lp:inkscape. (diff) | |
| download | inkscape-c3b5e15737dc84cb2dafbdfb8d735e2dd7c8b08c.tar.gz inkscape-c3b5e15737dc84cb2dafbdfb8d735e2dd7c8b08c.zip | |
Moved most functions from Selection to ObjectSet
(bzr r14954.1.7)
| -rw-r--r-- | po/uk.po | 1460 | ||||
| -rw-r--r-- | src/document.cpp | 22 | ||||
| -rw-r--r-- | src/document.h | 2 | ||||
| -rw-r--r-- | src/live_effects/lpe-transform_2pts.cpp | 2 | ||||
| -rw-r--r-- | src/main-cmdlineact.cpp | 2 | ||||
| -rw-r--r-- | src/object-set.cpp | 259 | ||||
| -rw-r--r-- | src/object-set.h | 148 | ||||
| -rw-r--r-- | src/selection.cpp | 300 | ||||
| -rw-r--r-- | src/selection.h | 158 | ||||
| -rw-r--r-- | src/sp-object.cpp | 15 | ||||
| -rw-r--r-- | src/ui/tools/eraser-tool.cpp | 1 | ||||
| -rw-r--r-- | src/ui/widget/style-subject.cpp | 2 | ||||
| -rw-r--r-- | testfiles/src/object-set-test.cpp | 163 |
13 files changed, 1310 insertions, 1224 deletions
@@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: uk\n" "Report-Msgid-Bugs-To: inkscape-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2016-06-02 12:12+0200\n" -"PO-Revision-Date: 2016-05-29 11:47+0300\n" +"POT-Creation-Date: 2016-06-13 13:39+0300\n" +"PO-Revision-Date: 2016-06-13 13:50+0300\n" "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n" "Language-Team: Ukrainian <translation@linux.org.ua>\n" "Language: uk\n" @@ -706,7 +706,8 @@ msgstr "Чорна діра" #: ../share/filters/filters.svg.h:279 ../share/filters/filters.svg.h:835 #: ../share/filters/filters.svg.h:839 ../share/filters/filters.svg.h:843 #: ../src/extension/internal/filter/morphology.h:76 -#: ../src/extension/internal/filter/morphology.h:203 ../src/filter-enums.cpp:32 +#: ../src/extension/internal/filter/morphology.h:203 +#: ../src/filter-enums.cpp:32 msgid "Morphology" msgstr "Морфологія" @@ -3418,1033 +3419,1033 @@ msgstr "Сукно (растр)" msgid "Old paint (bitmap)" msgstr "Стара картина (растр)" -#. Symbols: ./AigaSymbols.svg +#. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:2 msgctxt "Symbol" -msgid "AIGA Symbol Signs" -msgstr "Знаки-символи AIGA" +msgid "United States National Park Service Map Symbols" +msgstr "Символи карт служб національних парків США" -#. Symbols: ./AigaSymbols.svg #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:3 ../share/symbols/symbols.h:4 -#: ../share/symbols/symbols.h:281 ../share/symbols/symbols.h:282 msgctxt "Symbol" -msgid "Telephone" -msgstr "Телефон" +msgid "Airport" +msgstr "Аеропорт" -#. Symbols: ./AigaSymbols.svg +#. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:5 ../share/symbols/symbols.h:6 msgctxt "Symbol" -msgid "Mail" -msgstr "Пошта" +msgid "Amphitheatre" +msgstr "Амфітеатр" -#. Symbols: ./AigaSymbols.svg +#. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:7 ../share/symbols/symbols.h:8 msgctxt "Symbol" -msgid "Currency Exchange" -msgstr "Обмін валют" +msgid "Bicycle Trail" +msgstr "Велосипедна траса" -#. Symbols: ./AigaSymbols.svg +#. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:9 ../share/symbols/symbols.h:10 msgctxt "Symbol" -msgid "Currency Exchange - Euro" -msgstr "Обмін валют — євро" +msgid "Boat Launch" +msgstr "Місце спуску човнів" -#. Symbols: ./AigaSymbols.svg +#. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:11 ../share/symbols/symbols.h:12 msgctxt "Symbol" -msgid "Cashier" -msgstr "Каса" +msgid "Boat Tour" +msgstr "Човновий маршрут" -#. Symbols: ./AigaSymbols.svg #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:13 ../share/symbols/symbols.h:14 -#: ../share/symbols/symbols.h:213 ../share/symbols/symbols.h:214 msgctxt "Symbol" -msgid "First Aid" -msgstr "Перша допомога" +msgid "Bus Stop" +msgstr "Автобусна зупинка" -#. Symbols: ./AigaSymbols.svg +#. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:15 ../share/symbols/symbols.h:16 msgctxt "Symbol" -msgid "Lost and Found" -msgstr "Втрачено і знайдено" +msgid "Campfire" +msgstr "Місце для багаття" -#. Symbols: ./AigaSymbols.svg +#. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:17 ../share/symbols/symbols.h:18 msgctxt "Symbol" -msgid "Coat Check" -msgstr "Гардероб" +msgid "Campground" +msgstr "Майданчик для табору" -#. Symbols: ./AigaSymbols.svg +#. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:19 ../share/symbols/symbols.h:20 msgctxt "Symbol" -msgid "Baggage Lockers" -msgstr "Шафи для зберігання речей" +msgid "CanoeAccess" +msgstr "Доступ до каное" -#. Symbols: ./AigaSymbols.svg +#. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:21 ../share/symbols/symbols.h:22 msgctxt "Symbol" -msgid "Escalator" -msgstr "Ескалатор" +msgid "Crosscountry Ski Trail" +msgstr "Траса для лижного кросу" -#. Symbols: ./AigaSymbols.svg +#. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:23 ../share/symbols/symbols.h:24 msgctxt "Symbol" -msgid "Escalator Down" -msgstr "Ескалатор вниз" +msgid "Downhill Skiing" +msgstr "Лижний спуск" -#. Symbols: ./AigaSymbols.svg +#. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:25 ../share/symbols/symbols.h:26 msgctxt "Symbol" -msgid "Escalator Up" -msgstr "Ескалатор вгору" +msgid "Drinking Water" +msgstr "Питна вода" +#. Symbols: ./MapSymbolsNPS.svg #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:27 ../share/symbols/symbols.h:28 +#: ../share/symbols/symbols.h:172 ../share/symbols/symbols.h:173 msgctxt "Symbol" -msgid "Stairs" -msgstr "Сходи" +msgid "First Aid" +msgstr "Перша допомога" -#. Symbols: ./AigaSymbols.svg +#. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:29 ../share/symbols/symbols.h:30 msgctxt "Symbol" -msgid "Stairs Down" -msgstr "Сходи вниз" +msgid "Fishing" +msgstr "Риболовля" -#. Symbols: ./AigaSymbols.svg +#. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:31 ../share/symbols/symbols.h:32 msgctxt "Symbol" -msgid "Stairs Up" -msgstr "Сходи вгору" +msgid "Food Service" +msgstr "Служба харчування" -#. Symbols: ./AigaSymbols.svg +#. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:33 ../share/symbols/symbols.h:34 msgctxt "Symbol" -msgid "Elevator" -msgstr "Ліфт" +msgid "Four Wheel Drive Road" +msgstr "Дорога для чотириколісних машин" -#. Symbols: ./AigaSymbols.svg +#. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:35 ../share/symbols/symbols.h:36 msgctxt "Symbol" -msgid "Toilets - Men" -msgstr "Чоловічий туалет" +msgid "Gas Station" +msgstr "Автозаправка" -#. Symbols: ./AigaSymbols.svg +#. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:37 ../share/symbols/symbols.h:38 msgctxt "Symbol" -msgid "Toilets - Women" -msgstr "Жіночий туалет" +msgid "Golfing" +msgstr "Гольф" -#. Symbols: ./AigaSymbols.svg +#. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:39 ../share/symbols/symbols.h:40 msgctxt "Symbol" -msgid "Toilets" -msgstr "Туалети" +msgid "Horseback Riding" +msgstr "Траса для кінської їзди" -#. Symbols: ./AigaSymbols.svg +#. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:41 ../share/symbols/symbols.h:42 msgctxt "Symbol" -msgid "Nursery" -msgstr "Ясла" +msgid "Hospital" +msgstr "Лікарня" -#. Symbols: ./AigaSymbols.svg +#. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:43 ../share/symbols/symbols.h:44 msgctxt "Symbol" -msgid "Drinking Fountain" -msgstr "Питний фонтанчик" +msgid "Ice Skating" +msgstr "Катання на ковзанах" +#. Symbols: ./MapSymbolsNPS.svg #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:45 ../share/symbols/symbols.h:46 +#: ../share/symbols/symbols.h:206 ../share/symbols/symbols.h:207 msgctxt "Symbol" -msgid "Waiting Room" -msgstr "Зала очікування" +msgid "Information" +msgstr "Довідкова служба" -#. Symbols: ./AigaSymbols.svg #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:47 ../share/symbols/symbols.h:48 -#: ../share/symbols/symbols.h:231 ../share/symbols/symbols.h:232 msgctxt "Symbol" -msgid "Information" -msgstr "Довідкова служба" +msgid "Litter Receptacle" +msgstr "Сховище нош" -#. Symbols: ./AigaSymbols.svg +#. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:49 ../share/symbols/symbols.h:50 msgctxt "Symbol" -msgid "Hotel Information" -msgstr "Інформація щодо готелів" +msgid "Lodging" +msgstr "Кімнати" -#. Symbols: ./AigaSymbols.svg +#. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:51 ../share/symbols/symbols.h:52 msgctxt "Symbol" -msgid "Air Transportation" -msgstr "Повітряний транспорт" +msgid "Marina" +msgstr "Пристань" -#. Symbols: ./AigaSymbols.svg +#. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:53 ../share/symbols/symbols.h:54 msgctxt "Symbol" -msgid "Heliport" -msgstr "Вертодром" +msgid "Motorbike Trail" +msgstr "Траса для мотоциклів" -#. Symbols: ./AigaSymbols.svg +#. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:55 ../share/symbols/symbols.h:56 msgctxt "Symbol" -msgid "Taxi" -msgstr "Таксі" +msgid "Radiator Water" +msgstr "Вода для опалювання" -#. Symbols: ./AigaSymbols.svg +#. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:57 ../share/symbols/symbols.h:58 msgctxt "Symbol" -msgid "Bus" -msgstr "Автобус" +msgid "Recycling" +msgstr "Пункт переробки" +#. Symbols: ./MapSymbolsNPS.svg #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:59 ../share/symbols/symbols.h:60 +#: ../share/symbols/symbols.h:258 ../share/symbols/symbols.h:259 msgctxt "Symbol" -msgid "Ground Transportation" -msgstr "Наземний транспорт" +msgid "Parking" +msgstr "Паркувальний майданчик" -#. Symbols: ./AigaSymbols.svg +#. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:61 ../share/symbols/symbols.h:62 msgctxt "Symbol" -msgid "Rail Transportation" -msgstr "Залізничний транспорт" +msgid "Pets On Leash" +msgstr "Домашні тварини на повідді" -#. Symbols: ./AigaSymbols.svg +#. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:63 ../share/symbols/symbols.h:64 msgctxt "Symbol" -msgid "Water Transportation" -msgstr "Водний транспорт" +msgid "Picnic Area" +msgstr "Місце для пікніків" -#. Symbols: ./AigaSymbols.svg +#. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:65 ../share/symbols/symbols.h:66 msgctxt "Symbol" -msgid "Car Rental" -msgstr "Оренда автомобілів" +msgid "Post Office" +msgstr "Поштове відділення" -#. Symbols: ./AigaSymbols.svg +#. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:67 ../share/symbols/symbols.h:68 msgctxt "Symbol" -msgid "Restaurant" -msgstr "Ресторан" +msgid "Ranger Station" +msgstr "Станція рейнджерів" -#. Symbols: ./AigaSymbols.svg +#. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:69 ../share/symbols/symbols.h:70 msgctxt "Symbol" -msgid "Coffeeshop" -msgstr "Кав’ярня" +msgid "RV Campground" +msgstr "Майданчик для трейлерів" -#. Symbols: ./AigaSymbols.svg +#. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:71 ../share/symbols/symbols.h:72 msgctxt "Symbol" -msgid "Bar" -msgstr "Бар" +msgid "Restrooms" +msgstr "Туалети" -#. Symbols: ./AigaSymbols.svg +#. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:73 ../share/symbols/symbols.h:74 msgctxt "Symbol" -msgid "Shops" -msgstr "Крамниці" +msgid "Sailing" +msgstr "Парусний спорт" -#. Symbols: ./AigaSymbols.svg +#. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:75 ../share/symbols/symbols.h:76 msgctxt "Symbol" -msgid "Barber Shop - Beauty Salon" -msgstr "Перукарня і салон краси" +msgid "Sanitary Disposal Station" +msgstr "Станція утилізації відходів" -#. Symbols: ./AigaSymbols.svg +#. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:77 ../share/symbols/symbols.h:78 msgctxt "Symbol" -msgid "Barber Shop" -msgstr "Перукарня" +msgid "Scuba Diving" +msgstr "Пірнання з аквалангом" -#. Symbols: ./AigaSymbols.svg +#. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:79 ../share/symbols/symbols.h:80 msgctxt "Symbol" -msgid "Beauty Salon" -msgstr "Салон краси" +msgid "Self Guided Trail" +msgstr "Стежка для самостійного огляду" -#. Symbols: ./AigaSymbols.svg +#. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:81 ../share/symbols/symbols.h:82 msgctxt "Symbol" -msgid "Ticket Purchase" -msgstr "Придбання квитків" +msgid "Shelter" +msgstr "Притулок" -#. Symbols: ./AigaSymbols.svg +#. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:83 ../share/symbols/symbols.h:84 msgctxt "Symbol" -msgid "Baggage Check In" -msgstr "Приймання багажу" +msgid "Showers" +msgstr "Душові" -#. Symbols: ./AigaSymbols.svg +#. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:85 ../share/symbols/symbols.h:86 msgctxt "Symbol" -msgid "Baggage Claim" -msgstr "Видача багажу" +msgid "Sledding" +msgstr "Катання на санях" -#. Symbols: ./AigaSymbols.svg +#. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:87 ../share/symbols/symbols.h:88 msgctxt "Symbol" -msgid "Customs" -msgstr "Митні послуги" +msgid "SnowmobileTrail" +msgstr "Траса для снігоходів" -#. Symbols: ./AigaSymbols.svg +#. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:89 ../share/symbols/symbols.h:90 msgctxt "Symbol" -msgid "Immigration" -msgstr "Міграційна служба" +msgid "Stable" +msgstr "Стайня" -#. Symbols: ./AigaSymbols.svg +#. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:91 ../share/symbols/symbols.h:92 msgctxt "Symbol" -msgid "Departing Flights" -msgstr "Відправлення" +msgid "Store" +msgstr "Склад" -#. Symbols: ./AigaSymbols.svg +#. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:93 ../share/symbols/symbols.h:94 msgctxt "Symbol" -msgid "Arriving Flights" -msgstr "Прибуття" +msgid "Swimming" +msgstr "Плавання" +#. Symbols: ./MapSymbolsNPS.svg #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:95 ../share/symbols/symbols.h:96 +#: ../share/symbols/symbols.h:162 ../share/symbols/symbols.h:163 msgctxt "Symbol" -msgid "Smoking" -msgstr "Місце для куріння" +msgid "Telephone" +msgstr "Телефон" -#. Symbols: ./AigaSymbols.svg +#. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:97 ../share/symbols/symbols.h:98 msgctxt "Symbol" -msgid "No Smoking" -msgstr "Куріння заборонено" +msgid "Emergency Telephone" +msgstr "Телефон виклику служб надзвичайних ситуацій" -#. Symbols: ./AigaSymbols.svg #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:99 ../share/symbols/symbols.h:100 -#: ../share/symbols/symbols.h:245 ../share/symbols/symbols.h:246 msgctxt "Symbol" -msgid "Parking" -msgstr "Паркувальний майданчик" +msgid "Trailhead" +msgstr "Початок маршруту" -#. Symbols: ./AigaSymbols.svg +#. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:101 ../share/symbols/symbols.h:102 msgctxt "Symbol" -msgid "No Parking" -msgstr "Паркування заборонено" +msgid "Wheelchair Accessible" +msgstr "Візок" -#. Symbols: ./AigaSymbols.svg +#. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:103 ../share/symbols/symbols.h:104 msgctxt "Symbol" -msgid "No Dogs" -msgstr "Вигулювання собак заборонено" - -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:105 ../share/symbols/symbols.h:106 -msgctxt "Symbol" -msgid "No Entry" -msgstr "Вхід заборонено" - -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:107 ../share/symbols/symbols.h:108 -msgctxt "Symbol" -msgid "Exit" -msgstr "Вихід" - -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:109 ../share/symbols/symbols.h:110 -msgctxt "Symbol" -msgid "Fire Extinguisher" -msgstr "Вогнегасник" - -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:111 ../share/symbols/symbols.h:112 -msgctxt "Symbol" -msgid "Right Arrow" -msgstr "Стрілка праворуч" - -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:113 ../share/symbols/symbols.h:114 -msgctxt "Symbol" -msgid "Forward and Right Arrow" -msgstr "Стрілка вперед і праворуч" - -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:115 ../share/symbols/symbols.h:116 -msgctxt "Symbol" -msgid "Up Arrow" -msgstr "Стрілка вгору" - -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:117 ../share/symbols/symbols.h:118 -msgctxt "Symbol" -msgid "Forward and Left Arrow" -msgstr "Стрілка вперед і ліворуч" - -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:119 ../share/symbols/symbols.h:120 -msgctxt "Symbol" -msgid "Left Arrow" -msgstr "Стрілка ліворуч" - -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:121 ../share/symbols/symbols.h:122 -msgctxt "Symbol" -msgid "Left and Down Arrow" -msgstr "Стрілка ліворуч і вниз" - -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:123 ../share/symbols/symbols.h:124 -msgctxt "Symbol" -msgid "Down Arrow" -msgstr "Стрілка вниз" - -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:125 ../share/symbols/symbols.h:126 -msgctxt "Symbol" -msgid "Right and Down Arrow" -msgstr "Стрілка праворуч і вниз" - -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:127 ../share/symbols/symbols.h:128 -msgctxt "Symbol" -msgid "NPS Wheelchair Accessible - 1996" -msgstr "Візок NPS — 1996" - -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:129 ../share/symbols/symbols.h:130 -msgctxt "Symbol" -msgid "NPS Wheelchair Accessible" -msgstr "Візок NPS" - -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:131 ../share/symbols/symbols.h:132 -msgctxt "Symbol" -msgid "New Wheelchair Accessible" -msgstr "Новий візок" - -#. Symbols: ./BalloonSymbols.svg -#: ../share/symbols/symbols.h:133 -msgctxt "Symbol" -msgid "Word Balloons" -msgstr "Мовні бульки" - -#. Symbols: ./BalloonSymbols.svg -#: ../share/symbols/symbols.h:134 -msgctxt "Symbol" -msgid "Thought Balloon" -msgstr "Булька думок" - -#. Symbols: ./BalloonSymbols.svg -#: ../share/symbols/symbols.h:135 -msgctxt "Symbol" -msgid "Dream Speaking" -msgstr "Висловлення мрій" - -#. Symbols: ./BalloonSymbols.svg -#: ../share/symbols/symbols.h:136 -msgctxt "Symbol" -msgid "Rounded Balloon" -msgstr "Заокруглена булька" - -#. Symbols: ./BalloonSymbols.svg -#: ../share/symbols/symbols.h:137 -msgctxt "Symbol" -msgid "Squared Balloon" -msgstr "Квадрата булька" - -#. Symbols: ./BalloonSymbols.svg -#: ../share/symbols/symbols.h:138 -msgctxt "Symbol" -msgid "Over the Phone" -msgstr "Телефоном" - -#. Symbols: ./BalloonSymbols.svg -#: ../share/symbols/symbols.h:139 -msgctxt "Symbol" -msgid "Hip Balloon" -msgstr "Булька смутку" - -#. Symbols: ./BalloonSymbols.svg -#: ../share/symbols/symbols.h:140 -msgctxt "Symbol" -msgid "Circle Balloon" -msgstr "Кругова булька" +msgid "Wind Surfing" +msgstr "Віндсерфінг" -#. Symbols: ./BalloonSymbols.svg -#: ../share/symbols/symbols.h:141 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:105 msgctxt "Symbol" -msgid "Exclaim Balloon" -msgstr "Булька вигуку" +msgid "Blank" +msgstr "Порожньо" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:142 +#: ../share/symbols/symbols.h:106 msgctxt "Symbol" msgid "Flow Chart Shapes" msgstr "Форми блок-схем" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:143 +#: ../share/symbols/symbols.h:107 msgctxt "Symbol" msgid "Process" msgstr "Обробляти" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:144 +#: ../share/symbols/symbols.h:108 msgctxt "Symbol" msgid "Input/Output" msgstr "Вхід/Вихід" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:145 +#: ../share/symbols/symbols.h:109 msgctxt "Symbol" msgid "Document" msgstr "Документ" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:146 +#: ../share/symbols/symbols.h:110 msgctxt "Symbol" msgid "Manual Operation" msgstr "Ручна дія" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:147 +#: ../share/symbols/symbols.h:111 msgctxt "Symbol" msgid "Preparation" msgstr "Підготовка" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:148 +#: ../share/symbols/symbols.h:112 msgctxt "Symbol" msgid "Merge" msgstr "Об’єднання" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:149 +#: ../share/symbols/symbols.h:113 msgctxt "Symbol" msgid "Decision" msgstr "Рішення" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:150 +#: ../share/symbols/symbols.h:114 msgctxt "Symbol" msgid "Magnetic Tape" msgstr "Магнітна стрічка" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:151 +#: ../share/symbols/symbols.h:115 msgctxt "Symbol" msgid "Display" msgstr "Показ" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:152 +#: ../share/symbols/symbols.h:116 msgctxt "Symbol" msgid "Auxiliary Operation" msgstr "Допоміжна операція" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:153 +#: ../share/symbols/symbols.h:117 msgctxt "Symbol" msgid "Manual Input" msgstr "Ручний ввід" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:154 +#: ../share/symbols/symbols.h:118 msgctxt "Symbol" msgid "Extract" msgstr "Видобування" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:155 +#: ../share/symbols/symbols.h:119 msgctxt "Symbol" msgid "Terminal/Interrupt" msgstr "Завершення/Переривання" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:156 +#: ../share/symbols/symbols.h:120 msgctxt "Symbol" msgid "Punched Card" msgstr "Перфокартка" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:157 +#: ../share/symbols/symbols.h:121 msgctxt "Symbol" msgid "Punch Tape" msgstr "Перфострічка" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:158 +#: ../share/symbols/symbols.h:122 msgctxt "Symbol" msgid "Online Storage" msgstr "Сховище даних у мережі" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:159 +#: ../share/symbols/symbols.h:123 msgctxt "Symbol" msgid "Keying" msgstr "Набір" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:160 +#: ../share/symbols/symbols.h:124 msgctxt "Symbol" msgid "Sort" msgstr "Упорядкування" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:161 +#: ../share/symbols/symbols.h:125 msgctxt "Symbol" msgid "Connector" msgstr "З’єднання" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:162 +#: ../share/symbols/symbols.h:126 msgctxt "Symbol" msgid "Off-Page Connector" msgstr "З'єднання поза сторінкою" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:163 +#: ../share/symbols/symbols.h:127 msgctxt "Symbol" msgid "Transmittal Tape" msgstr "Передавальна стрічка" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:164 +#: ../share/symbols/symbols.h:128 msgctxt "Symbol" msgid "Communication Link" msgstr "З’єднання для обміну даними" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:165 +#: ../share/symbols/symbols.h:129 msgctxt "Symbol" msgid "Collate" msgstr "Об’єднання" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:166 +#: ../share/symbols/symbols.h:130 msgctxt "Symbol" msgid "Comment/Annotation" msgstr "Коментар/Анотація" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:167 +#: ../share/symbols/symbols.h:131 msgctxt "Symbol" msgid "Core" msgstr "Ядро" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:168 +#: ../share/symbols/symbols.h:132 msgctxt "Symbol" msgid "Predefined Process" msgstr "Наперед визначений процес" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:169 +#: ../share/symbols/symbols.h:133 msgctxt "Symbol" msgid "Magnetic Disk (Database)" msgstr "Магнітний диск (база даних)" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:170 +#: ../share/symbols/symbols.h:134 msgctxt "Symbol" msgid "Magnetic Drum (Direct Access)" msgstr "Магнітний барабан (безпосередній доступ)" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:171 +#: ../share/symbols/symbols.h:135 msgctxt "Symbol" msgid "Offline Storage" msgstr "Автономне сховище даних" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:172 +#: ../share/symbols/symbols.h:136 msgctxt "Symbol" msgid "Logical Or" msgstr "Логічне «АБО»" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:173 +#: ../share/symbols/symbols.h:137 msgctxt "Symbol" msgid "Logical And" msgstr "Логічне «ТА»" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:174 +#: ../share/symbols/symbols.h:138 msgctxt "Symbol" msgid "Delay" msgstr "Затримка" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:175 +#: ../share/symbols/symbols.h:139 msgctxt "Symbol" msgid "Loop Limit Begin" msgstr "Початок циклу" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:176 +#: ../share/symbols/symbols.h:140 msgctxt "Symbol" msgid "Loop Limit End" msgstr "Кінець циклу" +#. Symbols: ./BalloonSymbols.svg +#: ../share/symbols/symbols.h:141 +msgctxt "Symbol" +msgid "Word Balloons" +msgstr "Мовні бульки" + +#. Symbols: ./BalloonSymbols.svg +#: ../share/symbols/symbols.h:142 +msgctxt "Symbol" +msgid "Thought Balloon" +msgstr "Булька думок" + +#. Symbols: ./BalloonSymbols.svg +#: ../share/symbols/symbols.h:143 +msgctxt "Symbol" +msgid "Dream Speaking" +msgstr "Висловлення мрій" + +#. Symbols: ./BalloonSymbols.svg +#: ../share/symbols/symbols.h:144 +msgctxt "Symbol" +msgid "Rounded Balloon" +msgstr "Заокруглена булька" + +#. Symbols: ./BalloonSymbols.svg +#: ../share/symbols/symbols.h:145 +msgctxt "Symbol" +msgid "Squared Balloon" +msgstr "Квадрата булька" + +#. Symbols: ./BalloonSymbols.svg +#: ../share/symbols/symbols.h:146 +msgctxt "Symbol" +msgid "Over the Phone" +msgstr "Телефоном" + +#. Symbols: ./BalloonSymbols.svg +#: ../share/symbols/symbols.h:147 +msgctxt "Symbol" +msgid "Hip Balloon" +msgstr "Булька смутку" + +#. Symbols: ./BalloonSymbols.svg +#: ../share/symbols/symbols.h:148 +msgctxt "Symbol" +msgid "Circle Balloon" +msgstr "Кругова булька" + +#. Symbols: ./BalloonSymbols.svg +#: ../share/symbols/symbols.h:149 +msgctxt "Symbol" +msgid "Exclaim Balloon" +msgstr "Булька вигуку" + #. Symbols: ./LogicSymbols.svg -#: ../share/symbols/symbols.h:177 +#: ../share/symbols/symbols.h:150 msgctxt "Symbol" msgid "Logic Symbols" msgstr "Символи логіки" #. Symbols: ./LogicSymbols.svg -#: ../share/symbols/symbols.h:178 +#: ../share/symbols/symbols.h:151 msgctxt "Symbol" msgid "Xnor Gate" msgstr "Ключ виключне заперечувальне АБО»" #. Symbols: ./LogicSymbols.svg -#: ../share/symbols/symbols.h:179 +#: ../share/symbols/symbols.h:152 msgctxt "Symbol" msgid "Xor Gate" msgstr "Ключ виключне І" #. Symbols: ./LogicSymbols.svg -#: ../share/symbols/symbols.h:180 +#: ../share/symbols/symbols.h:153 msgctxt "Symbol" msgid "Nor Gate" msgstr "Ключ АБО-НІ" #. Symbols: ./LogicSymbols.svg -#: ../share/symbols/symbols.h:181 +#: ../share/symbols/symbols.h:154 msgctxt "Symbol" msgid "Or Gate" msgstr "Ключ АБО" #. Symbols: ./LogicSymbols.svg -#: ../share/symbols/symbols.h:182 +#: ../share/symbols/symbols.h:155 msgctxt "Symbol" msgid "Nand Gate" msgstr "Ключ І-НІ" #. Symbols: ./LogicSymbols.svg -#: ../share/symbols/symbols.h:183 +#: ../share/symbols/symbols.h:156 msgctxt "Symbol" msgid "And Gate" msgstr "Ключ І" #. Symbols: ./LogicSymbols.svg -#: ../share/symbols/symbols.h:184 +#: ../share/symbols/symbols.h:157 msgctxt "Symbol" msgid "Buffer" msgstr "Буфер" #. Symbols: ./LogicSymbols.svg -#: ../share/symbols/symbols.h:185 +#: ../share/symbols/symbols.h:158 msgctxt "Symbol" msgid "Not Gate" msgstr "Ключ НІ" #. Symbols: ./LogicSymbols.svg -#: ../share/symbols/symbols.h:186 +#: ../share/symbols/symbols.h:159 msgctxt "Symbol" msgid "Buffer Small" msgstr "Малий буфер" #. Symbols: ./LogicSymbols.svg -#: ../share/symbols/symbols.h:187 +#: ../share/symbols/symbols.h:160 msgctxt "Symbol" msgid "Not Gate Small" msgstr "Малий ключ НІ" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:188 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:161 msgctxt "Symbol" -msgid "United States National Park Service Map Symbols" -msgstr "Символи карт служб національних парків США" +msgid "AIGA Symbol Signs" +msgstr "Знаки-символи AIGA" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:189 ../share/symbols/symbols.h:190 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:164 ../share/symbols/symbols.h:165 msgctxt "Symbol" -msgid "Airport" -msgstr "Аеропорт" +msgid "Mail" +msgstr "Пошта" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:191 ../share/symbols/symbols.h:192 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:166 ../share/symbols/symbols.h:167 msgctxt "Symbol" -msgid "Amphitheatre" -msgstr "Амфітеатр" +msgid "Currency Exchange" +msgstr "Обмін валют" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:193 ../share/symbols/symbols.h:194 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:168 ../share/symbols/symbols.h:169 msgctxt "Symbol" -msgid "Bicycle Trail" -msgstr "Велосипедна траса" +msgid "Currency Exchange - Euro" +msgstr "Обмін валют — євро" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:195 ../share/symbols/symbols.h:196 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:170 ../share/symbols/symbols.h:171 msgctxt "Symbol" -msgid "Boat Launch" -msgstr "Місце спуску човнів" +msgid "Cashier" +msgstr "Каса" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:197 ../share/symbols/symbols.h:198 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:174 ../share/symbols/symbols.h:175 msgctxt "Symbol" -msgid "Boat Tour" -msgstr "Човновий маршрут" +msgid "Lost and Found" +msgstr "Втрачено і знайдено" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:199 ../share/symbols/symbols.h:200 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:176 ../share/symbols/symbols.h:177 msgctxt "Symbol" -msgid "Bus Stop" -msgstr "Автобусна зупинка" +msgid "Coat Check" +msgstr "Гардероб" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:201 ../share/symbols/symbols.h:202 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:178 ../share/symbols/symbols.h:179 msgctxt "Symbol" -msgid "Campfire" -msgstr "Місце для багаття" +msgid "Baggage Lockers" +msgstr "Шафи для зберігання речей" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:203 ../share/symbols/symbols.h:204 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:180 ../share/symbols/symbols.h:181 msgctxt "Symbol" -msgid "Campground" -msgstr "Майданчик для табору" +msgid "Escalator" +msgstr "Ескалатор" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:205 ../share/symbols/symbols.h:206 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:182 ../share/symbols/symbols.h:183 msgctxt "Symbol" -msgid "CanoeAccess" -msgstr "Доступ до каное" +msgid "Escalator Down" +msgstr "Ескалатор вниз" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:207 ../share/symbols/symbols.h:208 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:184 ../share/symbols/symbols.h:185 msgctxt "Symbol" -msgid "Crosscountry Ski Trail" -msgstr "Траса для лижного кросу" +msgid "Escalator Up" +msgstr "Ескалатор вгору" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:209 ../share/symbols/symbols.h:210 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:186 ../share/symbols/symbols.h:187 msgctxt "Symbol" -msgid "Downhill Skiing" -msgstr "Лижний спуск" +msgid "Stairs" +msgstr "Сходи" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:211 ../share/symbols/symbols.h:212 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:188 ../share/symbols/symbols.h:189 msgctxt "Symbol" -msgid "Drinking Water" -msgstr "Питна вода" +msgid "Stairs Down" +msgstr "Сходи вниз" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:215 ../share/symbols/symbols.h:216 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:190 ../share/symbols/symbols.h:191 msgctxt "Symbol" -msgid "Fishing" -msgstr "Риболовля" +msgid "Stairs Up" +msgstr "Сходи вгору" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:217 ../share/symbols/symbols.h:218 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:192 ../share/symbols/symbols.h:193 msgctxt "Symbol" -msgid "Food Service" -msgstr "Служба харчування" +msgid "Elevator" +msgstr "Ліфт" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:219 ../share/symbols/symbols.h:220 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:194 ../share/symbols/symbols.h:195 msgctxt "Symbol" -msgid "Four Wheel Drive Road" -msgstr "Дорога для чотириколісних машин" +msgid "Toilets - Men" +msgstr "Чоловічий туалет" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:221 ../share/symbols/symbols.h:222 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:196 ../share/symbols/symbols.h:197 msgctxt "Symbol" -msgid "Gas Station" -msgstr "Автозаправка" +msgid "Toilets - Women" +msgstr "Жіночий туалет" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:223 ../share/symbols/symbols.h:224 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:198 ../share/symbols/symbols.h:199 msgctxt "Symbol" -msgid "Golfing" -msgstr "Гольф" +msgid "Toilets" +msgstr "Туалети" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:225 ../share/symbols/symbols.h:226 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:200 ../share/symbols/symbols.h:201 msgctxt "Symbol" -msgid "Horseback Riding" -msgstr "Траса для кінської їзди" +msgid "Nursery" +msgstr "Ясла" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:227 ../share/symbols/symbols.h:228 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:202 ../share/symbols/symbols.h:203 msgctxt "Symbol" -msgid "Hospital" -msgstr "Лікарня" +msgid "Drinking Fountain" +msgstr "Питний фонтанчик" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:229 ../share/symbols/symbols.h:230 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:204 ../share/symbols/symbols.h:205 msgctxt "Symbol" -msgid "Ice Skating" -msgstr "Катання на ковзанах" +msgid "Waiting Room" +msgstr "Зала очікування" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:233 ../share/symbols/symbols.h:234 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:208 ../share/symbols/symbols.h:209 msgctxt "Symbol" -msgid "Litter Receptacle" -msgstr "Сховище нош" +msgid "Hotel Information" +msgstr "Інформація щодо готелів" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:235 ../share/symbols/symbols.h:236 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:210 ../share/symbols/symbols.h:211 msgctxt "Symbol" -msgid "Lodging" -msgstr "Кімнати" +msgid "Air Transportation" +msgstr "Повітряний транспорт" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:237 ../share/symbols/symbols.h:238 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:212 ../share/symbols/symbols.h:213 msgctxt "Symbol" -msgid "Marina" -msgstr "Пристань" +msgid "Heliport" +msgstr "Вертодром" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:239 ../share/symbols/symbols.h:240 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:214 ../share/symbols/symbols.h:215 msgctxt "Symbol" -msgid "Motorbike Trail" -msgstr "Траса для мотоциклів" +msgid "Taxi" +msgstr "Таксі" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:241 ../share/symbols/symbols.h:242 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:216 ../share/symbols/symbols.h:217 msgctxt "Symbol" -msgid "Radiator Water" -msgstr "Вода для опалювання" +msgid "Bus" +msgstr "Автобус" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:243 ../share/symbols/symbols.h:244 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:218 ../share/symbols/symbols.h:219 msgctxt "Symbol" -msgid "Recycling" -msgstr "Пункт переробки" +msgid "Ground Transportation" +msgstr "Наземний транспорт" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:247 ../share/symbols/symbols.h:248 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:220 ../share/symbols/symbols.h:221 msgctxt "Symbol" -msgid "Pets On Leash" -msgstr "Домашні тварини на повідді" +msgid "Rail Transportation" +msgstr "Залізничний транспорт" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:249 ../share/symbols/symbols.h:250 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:222 ../share/symbols/symbols.h:223 msgctxt "Symbol" -msgid "Picnic Area" -msgstr "Місце для пікніків" +msgid "Water Transportation" +msgstr "Водний транспорт" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:251 ../share/symbols/symbols.h:252 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:224 ../share/symbols/symbols.h:225 msgctxt "Symbol" -msgid "Post Office" -msgstr "Поштове відділення" +msgid "Car Rental" +msgstr "Оренда автомобілів" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:253 ../share/symbols/symbols.h:254 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:226 ../share/symbols/symbols.h:227 msgctxt "Symbol" -msgid "Ranger Station" -msgstr "Станція рейнджерів" +msgid "Restaurant" +msgstr "Ресторан" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:255 ../share/symbols/symbols.h:256 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:228 ../share/symbols/symbols.h:229 msgctxt "Symbol" -msgid "RV Campground" -msgstr "Майданчик для трейлерів" +msgid "Coffeeshop" +msgstr "Кав’ярня" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:257 ../share/symbols/symbols.h:258 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:230 ../share/symbols/symbols.h:231 msgctxt "Symbol" -msgid "Restrooms" -msgstr "Туалети" +msgid "Bar" +msgstr "Бар" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:259 ../share/symbols/symbols.h:260 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:232 ../share/symbols/symbols.h:233 msgctxt "Symbol" -msgid "Sailing" -msgstr "Парусний спорт" +msgid "Shops" +msgstr "Крамниці" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:261 ../share/symbols/symbols.h:262 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:234 ../share/symbols/symbols.h:235 msgctxt "Symbol" -msgid "Sanitary Disposal Station" -msgstr "Станція утилізації відходів" +msgid "Barber Shop - Beauty Salon" +msgstr "Перукарня і салон краси" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:263 ../share/symbols/symbols.h:264 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:236 ../share/symbols/symbols.h:237 msgctxt "Symbol" -msgid "Scuba Diving" -msgstr "Пірнання з аквалангом" +msgid "Barber Shop" +msgstr "Перукарня" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:265 ../share/symbols/symbols.h:266 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:238 ../share/symbols/symbols.h:239 msgctxt "Symbol" -msgid "Self Guided Trail" -msgstr "Стежка для самостійного огляду" +msgid "Beauty Salon" +msgstr "Салон краси" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:267 ../share/symbols/symbols.h:268 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:240 ../share/symbols/symbols.h:241 msgctxt "Symbol" -msgid "Shelter" -msgstr "Притулок" +msgid "Ticket Purchase" +msgstr "Придбання квитків" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:269 ../share/symbols/symbols.h:270 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:242 ../share/symbols/symbols.h:243 msgctxt "Symbol" -msgid "Showers" -msgstr "Душові" +msgid "Baggage Check In" +msgstr "Приймання багажу" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:271 ../share/symbols/symbols.h:272 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:244 ../share/symbols/symbols.h:245 msgctxt "Symbol" -msgid "Sledding" -msgstr "Катання на санях" +msgid "Baggage Claim" +msgstr "Видача багажу" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:273 ../share/symbols/symbols.h:274 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:246 ../share/symbols/symbols.h:247 msgctxt "Symbol" -msgid "SnowmobileTrail" -msgstr "Траса для снігоходів" +msgid "Customs" +msgstr "Митні послуги" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:275 ../share/symbols/symbols.h:276 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:248 ../share/symbols/symbols.h:249 msgctxt "Symbol" -msgid "Stable" -msgstr "Стайня" +msgid "Immigration" +msgstr "Міграційна служба" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:277 ../share/symbols/symbols.h:278 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:250 ../share/symbols/symbols.h:251 msgctxt "Symbol" -msgid "Store" -msgstr "Склад" +msgid "Departing Flights" +msgstr "Відправлення" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:279 ../share/symbols/symbols.h:280 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:252 ../share/symbols/symbols.h:253 msgctxt "Symbol" -msgid "Swimming" -msgstr "Плавання" +msgid "Arriving Flights" +msgstr "Прибуття" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:283 ../share/symbols/symbols.h:284 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:254 ../share/symbols/symbols.h:255 msgctxt "Symbol" -msgid "Emergency Telephone" -msgstr "Телефон виклику служб надзвичайних ситуацій" +msgid "Smoking" +msgstr "Місце для куріння" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:285 ../share/symbols/symbols.h:286 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:256 ../share/symbols/symbols.h:257 msgctxt "Symbol" -msgid "Trailhead" -msgstr "Початок маршруту" +msgid "No Smoking" +msgstr "Куріння заборонено" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:287 ../share/symbols/symbols.h:288 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:260 ../share/symbols/symbols.h:261 msgctxt "Symbol" -msgid "Wheelchair Accessible" -msgstr "Візок" +msgid "No Parking" +msgstr "Паркування заборонено" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:289 ../share/symbols/symbols.h:290 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:262 ../share/symbols/symbols.h:263 msgctxt "Symbol" -msgid "Wind Surfing" -msgstr "Віндсерфінг" +msgid "No Dogs" +msgstr "Вигулювання собак заборонено" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:291 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:264 ../share/symbols/symbols.h:265 msgctxt "Symbol" -msgid "Blank" -msgstr "Порожньо" +msgid "No Entry" +msgstr "Вхід заборонено" + +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:266 ../share/symbols/symbols.h:267 +msgctxt "Symbol" +msgid "Exit" +msgstr "Вихід" + +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:268 ../share/symbols/symbols.h:269 +msgctxt "Symbol" +msgid "Fire Extinguisher" +msgstr "Вогнегасник" + +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:270 ../share/symbols/symbols.h:271 +msgctxt "Symbol" +msgid "Right Arrow" +msgstr "Стрілка праворуч" + +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:272 ../share/symbols/symbols.h:273 +msgctxt "Symbol" +msgid "Forward and Right Arrow" +msgstr "Стрілка вперед і праворуч" + +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:274 ../share/symbols/symbols.h:275 +msgctxt "Symbol" +msgid "Up Arrow" +msgstr "Стрілка вгору" + +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:276 ../share/symbols/symbols.h:277 +msgctxt "Symbol" +msgid "Forward and Left Arrow" +msgstr "Стрілка вперед і ліворуч" + +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:278 ../share/symbols/symbols.h:279 +msgctxt "Symbol" +msgid "Left Arrow" +msgstr "Стрілка ліворуч" + +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:280 ../share/symbols/symbols.h:281 +msgctxt "Symbol" +msgid "Left and Down Arrow" +msgstr "Стрілка ліворуч і вниз" + +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:282 ../share/symbols/symbols.h:283 +msgctxt "Symbol" +msgid "Down Arrow" +msgstr "Стрілка вниз" + +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:284 ../share/symbols/symbols.h:285 +msgctxt "Symbol" +msgid "Right and Down Arrow" +msgstr "Стрілка праворуч і вниз" + +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:286 ../share/symbols/symbols.h:287 +msgctxt "Symbol" +msgid "NPS Wheelchair Accessible - 1996" +msgstr "Візок NPS — 1996" + +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:288 ../share/symbols/symbols.h:289 +msgctxt "Symbol" +msgid "NPS Wheelchair Accessible" +msgstr "Візок NPS" + +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:290 ../share/symbols/symbols.h:291 +msgctxt "Symbol" +msgid "New Wheelchair Accessible" +msgstr "Новий візок" #: ../share/templates/templates.h:1 msgid "CD Label 120mmx120mm " @@ -4500,16 +4501,16 @@ msgstr "типографічне полотно з напрямними" msgid "3D Box" msgstr "Просторовий об'єкт" -#: ../src/color-profile.cpp:842 +#: ../src/color-profile.cpp:856 #, c-format msgid "Color profiles directory (%s) is unavailable." msgstr "Каталог з профілями кольорів (%s) недоступний." -#: ../src/color-profile.cpp:901 ../src/color-profile.cpp:918 +#: ../src/color-profile.cpp:928 ../src/color-profile.cpp:945 msgid "(invalid UTF-8 string)" msgstr "(некоректний рядок UTF-8)" -#: ../src/color-profile.cpp:903 +#: ../src/color-profile.cpp:930 msgctxt "Profile name" msgid "None" msgstr "Немає" @@ -4917,21 +4918,21 @@ msgstr "Кратність проміжку між лініями сітки" msgid " to " msgstr " у " -#: ../src/document.cpp:531 +#: ../src/document.cpp:526 #, c-format msgid "New document %d" msgstr "Новий документ %d" -#: ../src/document.cpp:536 +#: ../src/document.cpp:531 #, c-format msgid "Memory document %d" msgstr "Документ у пам'яті %d" -#: ../src/document.cpp:565 +#: ../src/document.cpp:560 msgid "Memory document %1" msgstr "Документ у пам'яті %1" -#: ../src/document.cpp:864 +#: ../src/document.cpp:859 #, c-format msgid "Unnamed document %d" msgstr "Документ без назви %d" @@ -5087,7 +5088,7 @@ msgstr "" "відвідайте сайт Inkscape або запитайте у списках листування, якщо у вас " "виникли питання, що стосуються цього додатка." -#: ../src/extension/implementation/script.cpp:1108 +#: ../src/extension/implementation/script.cpp:1111 msgid "" "Inkscape has received additional data from the script executed. The script " "did not return an error, but this may indicate the results will not be as " @@ -5127,7 +5128,8 @@ msgstr "Адаптивна постеризація" #: ../src/ui/widget/page-sizer.cpp:249 #: ../src/widgets/calligraphy-toolbar.cpp:430 #: ../src/widgets/eraser-toolbar.cpp:154 ../src/widgets/spray-toolbar.cpp:297 -#: ../src/widgets/tweak-toolbar.cpp:128 ../share/extensions/foldablebox.inx.h:2 +#: ../src/widgets/tweak-toolbar.cpp:128 +#: ../share/extensions/foldablebox.inx.h:2 msgid "Width:" msgstr "Ширина:" @@ -6590,13 +6592,15 @@ msgid "Transparency type:" msgstr "Тип прозорості:" #: ../src/extension/internal/filter/bumps.h:353 -#: ../src/extension/internal/filter/morphology.h:176 ../src/filter-enums.cpp:91 +#: ../src/extension/internal/filter/morphology.h:176 +#: ../src/filter-enums.cpp:91 msgid "Atop" msgstr "Згори (Atop)" #: ../src/extension/internal/filter/bumps.h:354 #: ../src/extension/internal/filter/distort.h:70 -#: ../src/extension/internal/filter/morphology.h:174 ../src/filter-enums.cpp:89 +#: ../src/extension/internal/filter/morphology.h:174 +#: ../src/filter-enums.cpp:89 msgid "In" msgstr "Вхід" @@ -7110,7 +7114,8 @@ msgid "Felt Feather" msgstr "Фетрове розтушування" #: ../src/extension/internal/filter/distort.h:71 -#: ../src/extension/internal/filter/morphology.h:175 ../src/filter-enums.cpp:90 +#: ../src/extension/internal/filter/morphology.h:175 +#: ../src/filter-enums.cpp:90 msgid "Out" msgstr "Вихід" @@ -7306,11 +7311,13 @@ msgstr "Приховати зображення" msgid "Composite type:" msgstr "Тип суміщення:" -#: ../src/extension/internal/filter/morphology.h:173 ../src/filter-enums.cpp:88 +#: ../src/extension/internal/filter/morphology.h:173 +#: ../src/filter-enums.cpp:88 msgid "Over" msgstr "Накладання" -#: ../src/extension/internal/filter/morphology.h:177 ../src/filter-enums.cpp:92 +#: ../src/extension/internal/filter/morphology.h:177 +#: ../src/filter-enums.cpp:92 msgid "XOR" msgstr "Виключне АБО (XOR)" @@ -7384,8 +7391,8 @@ msgstr "Заливання шумом" #: ../src/ui/dialog/tracedialog.cpp:747 #: ../share/extensions/color_HSL_adjust.inx.h:2 #: ../share/extensions/color_custom.inx.h:2 -#: ../share/extensions/color_randomize.inx.h:2 ../share/extensions/dots.inx.h:2 -#: ../share/extensions/dxf_input.inx.h:2 +#: ../share/extensions/color_randomize.inx.h:2 +#: ../share/extensions/dots.inx.h:2 ../share/extensions/dxf_input.inx.h:2 #: ../share/extensions/dxf_outlines.inx.h:2 #: ../share/extensions/gcodetools_area.inx.h:29 #: ../share/extensions/gcodetools_engraving.inx.h:7 @@ -7988,13 +7995,15 @@ msgstr "Вертикальний зсув:" #: ../src/extension/internal/grid.cpp:209 #: ../src/ui/dialog/inkscape-preferences.cpp:1532 #: ../share/extensions/draw_from_triangle.inx.h:58 -#: ../share/extensions/eqtexsvg.inx.h:4 ../share/extensions/foldablebox.inx.h:9 +#: ../share/extensions/eqtexsvg.inx.h:4 +#: ../share/extensions/foldablebox.inx.h:9 #: ../share/extensions/funcplot.inx.h:38 #: ../share/extensions/grid_cartesian.inx.h:23 #: ../share/extensions/grid_isometric.inx.h:11 #: ../share/extensions/grid_polar.inx.h:22 #: ../share/extensions/guides_creator.inx.h:25 -#: ../share/extensions/hershey.inx.h:52 ../share/extensions/layout_nup.inx.h:35 +#: ../share/extensions/hershey.inx.h:52 +#: ../share/extensions/layout_nup.inx.h:35 #: ../share/extensions/lindenmayer.inx.h:34 #: ../share/extensions/nicechart.inx.h:45 #: ../share/extensions/param_curves.inx.h:30 @@ -8354,7 +8363,8 @@ msgid "Map all fill patterns to standard WMF hatches" msgstr "Пов’язати усі заповнення візерунками зі стандартними шаблонами WMF" #: ../src/extension/internal/wmf-inout.cpp:3208 -#: ../share/extensions/wmf_input.inx.h:2 ../share/extensions/wmf_output.inx.h:2 +#: ../share/extensions/wmf_input.inx.h:2 +#: ../share/extensions/wmf_output.inx.h:2 msgid "Windows Metafile (*.wmf)" msgstr "Метафайл Windows (*.wmf)" @@ -8390,42 +8400,42 @@ msgstr "Не вдається визначити формат файла. Фай msgid "default.svg" msgstr "типовий.svg" -#: ../src/file.cpp:332 +#: ../src/file.cpp:338 msgid "Broken links have been changed to point to existing files." msgstr "Помилкові посилання змінено так, щоб вони вказували на поточні файли." -#: ../src/file.cpp:343 ../src/file.cpp:1278 +#: ../src/file.cpp:349 ../src/file.cpp:1292 #, c-format msgid "Failed to load the requested file %s" msgstr "Не вдається завантажити потрібний файл %s" -#: ../src/file.cpp:369 +#: ../src/file.cpp:375 msgid "Document not saved yet. Cannot revert." msgstr "" "Документ ще не був збережений. Неможливо повернутись до попереднього стану." -#: ../src/file.cpp:375 +#: ../src/file.cpp:381 msgid "Changes will be lost! Are you sure you want to reload document %1?" msgstr "" "Зміни буде втрачено! Ви впевнені, що бажаєте перезавантажити документ %1?" -#: ../src/file.cpp:401 +#: ../src/file.cpp:407 msgid "Document reverted." msgstr "Документ повернутий до попереднього стану." -#: ../src/file.cpp:403 +#: ../src/file.cpp:409 msgid "Document not reverted." msgstr "Документ не повернутий до попереднього стану." -#: ../src/file.cpp:553 +#: ../src/file.cpp:559 msgid "Select file to open" msgstr "Виберіть файл" -#: ../src/file.cpp:635 +#: ../src/file.cpp:641 msgid "Clean up document" msgstr "Очистити документ" -#: ../src/file.cpp:642 +#: ../src/file.cpp:648 #, c-format msgid "Removed <b>%i</b> unused definition in <defs>." msgid_plural "Removed <b>%i</b> unused definitions in <defs>." @@ -8433,11 +8443,11 @@ msgstr[0] "Вилучено <b>%i</b> непотрібний елемент у & msgstr[1] "Вилучено <b>%i</b> непотрібні елементи у <defs>." msgstr[2] "Вилучено <b>%i</b> непотрібних елементів у <defs>." -#: ../src/file.cpp:647 +#: ../src/file.cpp:653 msgid "No unused definitions in <defs>." msgstr "Немає непотрібних елементів у <defs>." -#: ../src/file.cpp:679 +#: ../src/file.cpp:687 #, c-format msgid "" "No Inkscape extension found to save document (%s). This may have been " @@ -8446,12 +8456,12 @@ msgstr "" "Не знайдено модуль збереження документа (%s). Можливо, невідомий суфікс " "назви файла." -#: ../src/file.cpp:680 ../src/file.cpp:688 ../src/file.cpp:696 -#: ../src/file.cpp:702 ../src/file.cpp:707 +#: ../src/file.cpp:688 ../src/file.cpp:698 ../src/file.cpp:707 +#: ../src/file.cpp:714 ../src/file.cpp:720 msgid "Document not saved." msgstr "Документ не збережено." -#: ../src/file.cpp:687 +#: ../src/file.cpp:697 #, c-format msgid "" "File %s is write protected. Please remove write protection and try again." @@ -8459,54 +8469,54 @@ msgstr "" "Файл %s захищено від запису. Будь ласка, зніміть захист від запису і " "повторіть спробу." -#: ../src/file.cpp:695 +#: ../src/file.cpp:706 #, c-format msgid "File %s could not be saved." msgstr "Файл %s неможливо зберегти." -#: ../src/file.cpp:725 ../src/file.cpp:727 +#: ../src/file.cpp:739 ../src/file.cpp:741 msgid "Document saved." msgstr "Документ збережено." #. We are saving for the first time; create a unique default filename -#: ../src/file.cpp:870 ../src/file.cpp:1437 +#: ../src/file.cpp:884 ../src/file.cpp:1451 msgid "drawing" msgstr "рисунок" -#: ../src/file.cpp:875 +#: ../src/file.cpp:889 msgid "drawing-%1" msgstr "рисунок-%1" -#: ../src/file.cpp:892 +#: ../src/file.cpp:906 msgid "Select file to save a copy to" msgstr "Оберіть файл для збереження копії" -#: ../src/file.cpp:894 +#: ../src/file.cpp:908 msgid "Select file to save to" msgstr "Виберіть файл для збереження" -#: ../src/file.cpp:999 ../src/file.cpp:1001 +#: ../src/file.cpp:1013 ../src/file.cpp:1015 msgid "No changes need to be saved." msgstr "Файл не було змінено. Збереження непотрібне." -#: ../src/file.cpp:1020 +#: ../src/file.cpp:1034 msgid "Saving document..." msgstr "Збереження документа…" -#: ../src/file.cpp:1275 ../src/ui/dialog/inkscape-preferences.cpp:1505 +#: ../src/file.cpp:1289 ../src/ui/dialog/inkscape-preferences.cpp:1505 #: ../src/ui/dialog/ocaldialogs.cpp:1244 msgid "Import" msgstr "Імпорт" -#: ../src/file.cpp:1325 +#: ../src/file.cpp:1339 msgid "Select file to import" msgstr "Виберіть файл для імпорту" -#: ../src/file.cpp:1458 +#: ../src/file.cpp:1472 msgid "Select file to export to" msgstr "Оберіть файл для експорту" -#: ../src/file.cpp:1711 +#: ../src/file.cpp:1725 msgid "Import Clip Art" msgstr "Імпортування шаблонів" @@ -8627,7 +8637,8 @@ msgstr "Обертання відтінку" msgid "Luminance to Alpha" msgstr "Освітленість до прозорості" -#: ../src/filter-enums.cpp:87 ../share/extensions/jessyInk_mouseHandler.inx.h:3 +#: ../src/filter-enums.cpp:87 +#: ../share/extensions/jessyInk_mouseHandler.inx.h:3 #: ../share/extensions/jessyInk_transitions.inx.h:7 #: ../share/extensions/measure.inx.h:20 ../share/extensions/nicechart.inx.h:33 msgid "Default" @@ -8944,7 +8955,8 @@ msgstr "Згорнути цю панель" msgid "Close this dock" msgstr "Закрити цю панель" -#: ../src/libgdl/gdl-dock-item-grip.c:723 ../src/libgdl/gdl-dock-tablabel.c:125 +#: ../src/libgdl/gdl-dock-item-grip.c:723 +#: ../src/libgdl/gdl-dock-tablabel.c:125 msgid "Controlling dock item" msgstr "Контролюючий елемент панелі" @@ -9114,7 +9126,8 @@ msgstr "Індекс поточної сторінки" #: ../src/libgdl/gdl-dock-object.c:125 #: ../src/live_effects/parameter/originalpatharray.cpp:82 #: ../src/ui/dialog/inkscape-preferences.cpp:1566 -#: ../src/ui/widget/page-sizer.cpp:285 ../src/widgets/gradient-selector.cpp:150 +#: ../src/ui/widget/page-sizer.cpp:285 +#: ../src/widgets/gradient-selector.cpp:150 #: ../src/widgets/sp-xmlview-attr-list.cpp:49 msgid "Name" msgstr "Назва" @@ -9542,12 +9555,12 @@ msgstr "" "Будь ласка, вкажіть параметр контуру для геометричних побудов «%s» за " "допомогою %d клацань мишею" -#: ../src/live_effects/effect.cpp:765 +#: ../src/live_effects/effect.cpp:766 #, c-format msgid "Editing parameter <b>%s</b>." msgstr "Редагування параметра <b>%s</b>." -#: ../src/live_effects/effect.cpp:770 +#: ../src/live_effects/effect.cpp:771 msgid "None of the applied path effect's parameters can be edited on-canvas." msgstr "" "Жоден із застосованих параметрів ефекту контуру не можна редагувати на " @@ -11099,13 +11112,13 @@ msgstr "Немає" #: ../src/live_effects/lpe-ruler.cpp:33 #: ../src/live_effects/lpe-transform_2pts.cpp:37 -#: ../src/ui/tools/measure-tool.cpp:756 ../src/widgets/arc-toolbar.cpp:319 +#: ../src/ui/tools/measure-tool.cpp:755 ../src/widgets/arc-toolbar.cpp:319 msgid "Start" msgstr "Початок" #: ../src/live_effects/lpe-ruler.cpp:34 #: ../src/live_effects/lpe-transform_2pts.cpp:38 -#: ../src/ui/tools/measure-tool.cpp:757 ../src/widgets/arc-toolbar.cpp:332 +#: ../src/ui/tools/measure-tool.cpp:756 ../src/widgets/arc-toolbar.cpp:332 msgid "End" msgstr "Кінець" @@ -11117,7 +11130,8 @@ msgstr "Ві_дстань між позначками:" msgid "Distance between successive ruler marks" msgstr "Відстань між послідовними позначками на лінійці" -#: ../src/live_effects/lpe-ruler.cpp:42 ../share/extensions/foldablebox.inx.h:7 +#: ../src/live_effects/lpe-ruler.cpp:42 +#: ../share/extensions/foldablebox.inx.h:7 #: ../share/extensions/interp_att_g.inx.h:9 #: ../share/extensions/layout_nup.inx.h:3 #: ../share/extensions/printing_marks.inx.h:11 @@ -11642,7 +11656,7 @@ msgstr "Обернути" #: ../src/live_effects/parameter/originalpatharray.cpp:130 #: ../src/live_effects/parameter/originalpatharray.cpp:315 -#: ../src/live_effects/parameter/path.cpp:486 +#: ../src/live_effects/parameter/path.cpp:510 msgid "Link path parameter to path" msgstr "Пов'язати параметр контуру з контуром" @@ -11672,23 +11686,23 @@ msgstr "Пересунути контур нижче" msgid "Remove path" msgstr "Вилучити контур" -#: ../src/live_effects/parameter/path.cpp:170 +#: ../src/live_effects/parameter/path.cpp:184 msgid "Edit on-canvas" msgstr "Редагувати на полотні" -#: ../src/live_effects/parameter/path.cpp:180 +#: ../src/live_effects/parameter/path.cpp:194 msgid "Copy path" msgstr "Копіювати контур" -#: ../src/live_effects/parameter/path.cpp:190 +#: ../src/live_effects/parameter/path.cpp:204 msgid "Paste path" msgstr "Вставити контур" -#: ../src/live_effects/parameter/path.cpp:200 +#: ../src/live_effects/parameter/path.cpp:214 msgid "Link to path on clipboard" msgstr "Пов’язати з контуром у буфері обміну" -#: ../src/live_effects/parameter/path.cpp:454 +#: ../src/live_effects/parameter/path.cpp:478 msgid "Paste path parameter" msgstr "Вставити параметр контуру" @@ -12493,7 +12507,8 @@ msgstr "<b>Нічого</b> не було вилучено." #: ../src/widgets/eraser-toolbar.cpp:120 #: ../src/widgets/gradient-toolbar.cpp:1181 #: ../src/widgets/gradient-toolbar.cpp:1195 -#: ../src/widgets/gradient-toolbar.cpp:1209 ../src/widgets/node-toolbar.cpp:401 +#: ../src/widgets/gradient-toolbar.cpp:1209 +#: ../src/widgets/node-toolbar.cpp:401 msgid "Delete" msgstr "Вилучити" @@ -13180,20 +13195,20 @@ msgstr[0] "(%d символ%s)" msgstr[1] "(%d символи%s)" msgstr[2] "(%d символів%s)" -#: ../src/sp-guide.cpp:261 +#: ../src/sp-guide.cpp:262 msgid "Create Guides Around the Page" msgstr "Створити напрямні навколо сторінки" -#: ../src/sp-guide.cpp:274 ../src/verbs.cpp:2544 +#: ../src/sp-guide.cpp:275 ../src/verbs.cpp:2544 msgid "Delete All Guides" msgstr "Вилучити всі напрямні" #. Guide has probably been deleted and no longer has an attached namedview. -#: ../src/sp-guide.cpp:485 +#: ../src/sp-guide.cpp:486 msgid "Deleted" msgstr "Вилучено" -#: ../src/sp-guide.cpp:494 +#: ../src/sp-guide.cpp:495 msgid "" "<b>Shift+drag</b> to rotate, <b>Ctrl+drag</b> to move origin, <b>Del</b> to " "delete" @@ -13201,17 +13216,17 @@ msgstr "" "<b>Shift+Перетягування</b> починає обертання. <b>Ctrl+Перетягування</b> " "пересуває центр обертання. <b>Del</b> вилучає." -#: ../src/sp-guide.cpp:498 +#: ../src/sp-guide.cpp:499 #, c-format msgid "vertical, at %s" msgstr "вертикальна, на %s" -#: ../src/sp-guide.cpp:501 +#: ../src/sp-guide.cpp:502 #, c-format msgid "horizontal, at %s" msgstr "горизонтальна, на %s" -#: ../src/sp-guide.cpp:506 +#: ../src/sp-guide.cpp:507 #, c-format msgid "at %d degrees, through (%s,%s)" msgstr "на %d градусів, через (%s,%s)" @@ -13244,26 +13259,26 @@ msgstr "з <b>%d</b> об'єкта" msgid "of <b>%d</b> objects" msgstr "з <b>%d</b> об'єкта" -#: ../src/sp-item.cpp:1031 ../src/verbs.cpp:213 +#: ../src/sp-item.cpp:1030 ../src/verbs.cpp:213 msgid "Object" msgstr "Об'єкт" -#: ../src/sp-item.cpp:1043 +#: ../src/sp-item.cpp:1042 #, c-format msgid "%s; <i>clipped</i>" msgstr "%s; <i>закріплено</i>" -#: ../src/sp-item.cpp:1049 +#: ../src/sp-item.cpp:1048 #, c-format msgid "%s; <i>masked</i>" msgstr "%s; <i>масковано</i>" -#: ../src/sp-item.cpp:1059 +#: ../src/sp-item.cpp:1058 #, c-format msgid "%s; <i>filtered (%s)</i>" msgstr "%s; <i>відфільтровано (%s)</i>" -#: ../src/sp-item.cpp:1061 +#: ../src/sp-item.cpp:1060 #, c-format msgid "%s; <i>filtered</i>" msgstr "%s; <i>відфільтровано</i>" @@ -13372,8 +13387,8 @@ msgstr "Умовна група" #: ../src/sp-text.cpp:361 ../src/verbs.cpp:347 #: ../share/extensions/lorem_ipsum.inx.h:8 -#: ../share/extensions/replace_font.inx.h:11 ../share/extensions/split.inx.h:10 -#: ../share/extensions/text_braille.inx.h:2 +#: ../share/extensions/replace_font.inx.h:11 +#: ../share/extensions/split.inx.h:10 ../share/extensions/text_braille.inx.h:2 #: ../share/extensions/text_extract.inx.h:14 #: ../share/extensions/text_flipcase.inx.h:2 #: ../share/extensions/text_lowercase.inx.h:2 @@ -14841,12 +14856,12 @@ msgid "License" msgstr "Ліцензія" #: ../src/ui/dialog/document-metadata.cpp:126 -#: ../src/ui/dialog/document-properties.cpp:994 +#: ../src/ui/dialog/document-properties.cpp:1037 msgid "<b>Dublin Core Entities</b>" msgstr "<b>Пункти Dublin Core</b>" #: ../src/ui/dialog/document-metadata.cpp:168 -#: ../src/ui/dialog/document-properties.cpp:1056 +#: ../src/ui/dialog/document-properties.cpp:1099 msgid "<b>License</b>" msgstr "<b>Ліцензія</b>" @@ -15099,7 +15114,8 @@ msgstr "Ви_лучити" msgid "Remove selected grid." msgstr "Вилучити вибрану сітку." -#: ../src/ui/dialog/document-properties.cpp:162 ../src/widgets/toolbox.cpp:1903 +#: ../src/ui/dialog/document-properties.cpp:162 +#: ../src/widgets/toolbox.cpp:1903 msgid "Guides" msgstr "Напрямні" @@ -15155,136 +15171,136 @@ msgstr "<b>Інше</b>" #. Inkscape::GC::release(defsRepr); #. inform the document, so we can undo #. Color Management -#: ../src/ui/dialog/document-properties.cpp:526 ../src/verbs.cpp:3020 +#: ../src/ui/dialog/document-properties.cpp:542 ../src/verbs.cpp:3020 msgid "Link Color Profile" msgstr "Пов'язати профіль кольорів" -#: ../src/ui/dialog/document-properties.cpp:623 +#: ../src/ui/dialog/document-properties.cpp:654 msgid "Remove linked color profile" msgstr "Вилучити пов'язаний профіль кольорів" -#: ../src/ui/dialog/document-properties.cpp:636 +#: ../src/ui/dialog/document-properties.cpp:673 msgid "<b>Linked Color Profiles:</b>" msgstr "<b>Пов'язані профілі кольорів:</b>" -#: ../src/ui/dialog/document-properties.cpp:638 +#: ../src/ui/dialog/document-properties.cpp:675 msgid "<b>Available Color Profiles:</b>" msgstr "<b>Доступні профілі кольорів:</b>" -#: ../src/ui/dialog/document-properties.cpp:640 +#: ../src/ui/dialog/document-properties.cpp:677 msgid "Link Profile" msgstr "Пов'язати з профілем" -#: ../src/ui/dialog/document-properties.cpp:643 +#: ../src/ui/dialog/document-properties.cpp:680 msgid "Unlink Profile" msgstr "Від'єднати від профілю" -#: ../src/ui/dialog/document-properties.cpp:721 +#: ../src/ui/dialog/document-properties.cpp:764 msgid "Profile Name" msgstr "Назва профілю" -#: ../src/ui/dialog/document-properties.cpp:757 +#: ../src/ui/dialog/document-properties.cpp:800 msgid "External scripts" msgstr "Зовнішні скрипти" -#: ../src/ui/dialog/document-properties.cpp:758 +#: ../src/ui/dialog/document-properties.cpp:801 msgid "Embedded scripts" msgstr "Вбудовані скрипти" -#: ../src/ui/dialog/document-properties.cpp:763 +#: ../src/ui/dialog/document-properties.cpp:806 msgid "<b>External script files:</b>" msgstr "<b>Файли зовнішніх скриптів:</b>" -#: ../src/ui/dialog/document-properties.cpp:765 +#: ../src/ui/dialog/document-properties.cpp:808 msgid "Add the current file name or browse for a file" msgstr "Додайте назву поточного файла або вкажіть якийсь файл" -#: ../src/ui/dialog/document-properties.cpp:768 -#: ../src/ui/dialog/document-properties.cpp:845 +#: ../src/ui/dialog/document-properties.cpp:811 +#: ../src/ui/dialog/document-properties.cpp:888 #: ../src/ui/widget/selected-style.cpp:357 msgid "Remove" msgstr "Вилучити" -#: ../src/ui/dialog/document-properties.cpp:832 +#: ../src/ui/dialog/document-properties.cpp:875 msgid "Filename" msgstr "Назва файла" -#: ../src/ui/dialog/document-properties.cpp:840 +#: ../src/ui/dialog/document-properties.cpp:883 msgid "<b>Embedded script files:</b>" msgstr "<b>Файли вбудованих скриптів:</b>" -#: ../src/ui/dialog/document-properties.cpp:842 +#: ../src/ui/dialog/document-properties.cpp:885 #: ../src/ui/dialog/objects.cpp:1894 msgid "New" msgstr "Створити" -#: ../src/ui/dialog/document-properties.cpp:909 +#: ../src/ui/dialog/document-properties.cpp:952 msgid "Script id" msgstr "Ід. скрипту" -#: ../src/ui/dialog/document-properties.cpp:915 +#: ../src/ui/dialog/document-properties.cpp:958 msgid "<b>Content:</b>" msgstr "<b>Вміст:</b>" -#: ../src/ui/dialog/document-properties.cpp:1032 +#: ../src/ui/dialog/document-properties.cpp:1075 msgid "_Save as default" msgstr "З_берегти як типові" -#: ../src/ui/dialog/document-properties.cpp:1033 +#: ../src/ui/dialog/document-properties.cpp:1076 msgid "Save this metadata as the default metadata" msgstr "Зберегти ці метадані як типові метадані" -#: ../src/ui/dialog/document-properties.cpp:1034 +#: ../src/ui/dialog/document-properties.cpp:1077 msgid "Use _default" msgstr "Використовувати _типові" -#: ../src/ui/dialog/document-properties.cpp:1035 +#: ../src/ui/dialog/document-properties.cpp:1078 msgid "Use the previously saved default metadata here" msgstr "Скористатися тут раніше збереженими типовими метаданими" #. inform the document, so we can undo -#: ../src/ui/dialog/document-properties.cpp:1108 +#: ../src/ui/dialog/document-properties.cpp:1151 msgid "Add external script..." msgstr "Додати зовнішній скрипт…" -#: ../src/ui/dialog/document-properties.cpp:1147 +#: ../src/ui/dialog/document-properties.cpp:1190 msgid "Select a script to load" msgstr "Виберіть скрипт для завантаження" #. inform the document, so we can undo -#: ../src/ui/dialog/document-properties.cpp:1175 +#: ../src/ui/dialog/document-properties.cpp:1218 msgid "Add embedded script..." msgstr "Додати вбудований скрипт…" #. inform the document, so we can undo -#: ../src/ui/dialog/document-properties.cpp:1206 +#: ../src/ui/dialog/document-properties.cpp:1249 msgid "Remove external script" msgstr "Вилучити зовнішній скрипт" #. inform the document, so we can undo -#: ../src/ui/dialog/document-properties.cpp:1235 +#: ../src/ui/dialog/document-properties.cpp:1278 msgid "Remove embedded script" msgstr "Вилучити вбудований скрипт" #. TODO repr->set_content(_EmbeddedContent.get_buffer()->get_text()); #. inform the document, so we can undo -#: ../src/ui/dialog/document-properties.cpp:1331 +#: ../src/ui/dialog/document-properties.cpp:1374 msgid "Edit embedded script" msgstr "Редагувати вбудований скрипт" -#: ../src/ui/dialog/document-properties.cpp:1415 +#: ../src/ui/dialog/document-properties.cpp:1458 msgid "<b>Creation</b>" msgstr "<b>Створення</b>" -#: ../src/ui/dialog/document-properties.cpp:1416 +#: ../src/ui/dialog/document-properties.cpp:1459 msgid "<b>Defined grids</b>" msgstr "<b>Визначені сітки</b>" -#: ../src/ui/dialog/document-properties.cpp:1660 +#: ../src/ui/dialog/document-properties.cpp:1703 msgid "Remove grid" msgstr "Вилучити сітку" -#: ../src/ui/dialog/document-properties.cpp:1752 +#: ../src/ui/dialog/document-properties.cpp:1795 msgid "Changed default display unit" msgstr "Змінено типову одиницю виміру" @@ -15539,7 +15555,8 @@ msgstr "Інформація" #: ../share/extensions/jitternodes.inx.h:12 #: ../share/extensions/layout_nup.inx.h:24 #: ../share/extensions/lindenmayer.inx.h:13 -#: ../share/extensions/lorem_ipsum.inx.h:6 ../share/extensions/measure.inx.h:33 +#: ../share/extensions/lorem_ipsum.inx.h:6 +#: ../share/extensions/measure.inx.h:33 #: ../share/extensions/pathalongpath.inx.h:16 #: ../share/extensions/pathscatter.inx.h:18 #: ../share/extensions/restack.inx.h:25 ../share/extensions/split.inx.h:8 @@ -19518,7 +19535,7 @@ msgstr "Зберігати канал K під час перетворень CMY #: ../src/ui/dialog/inkscape-preferences.cpp:1091 #: ../src/ui/widget/color-icc-selector.cpp:394 -#: ../src/ui/widget/color-icc-selector.cpp:685 +#: ../src/ui/widget/color-icc-selector.cpp:699 msgid "<none>" msgstr "<немає>" @@ -20778,7 +20795,8 @@ msgstr "Нахил за X" msgid "Y tilt" msgstr "Нахил за Y" -#: ../src/ui/dialog/input.cpp:1616 ../src/ui/widget/color-wheel-selector.cpp:29 +#: ../src/ui/dialog/input.cpp:1616 +#: ../src/ui/widget/color-wheel-selector.cpp:29 msgid "Wheel" msgstr "Колесо" @@ -21585,15 +21603,18 @@ msgstr "Алгоритм Копфа-Ліщинського" msgid "Output" msgstr "Вивід" -#: ../src/ui/dialog/pixelartdialog.cpp:297 ../src/ui/dialog/tracedialog.cpp:814 +#: ../src/ui/dialog/pixelartdialog.cpp:297 +#: ../src/ui/dialog/tracedialog.cpp:814 msgid "Reset all settings to defaults" msgstr "Скинути значення всіх параметрів до типових" -#: ../src/ui/dialog/pixelartdialog.cpp:302 ../src/ui/dialog/tracedialog.cpp:819 +#: ../src/ui/dialog/pixelartdialog.cpp:302 +#: ../src/ui/dialog/tracedialog.cpp:819 msgid "Abort a trace in progress" msgstr "Перервати векторизацію" -#: ../src/ui/dialog/pixelartdialog.cpp:306 ../src/ui/dialog/tracedialog.cpp:823 +#: ../src/ui/dialog/pixelartdialog.cpp:306 +#: ../src/ui/dialog/tracedialog.cpp:823 msgid "Execute the trace" msgstr "Провести векторизацію" @@ -21964,7 +21985,8 @@ msgid "Preview Text:" msgstr "Перегляд тексту:" #: ../src/ui/dialog/swatches.cpp:202 ../src/ui/tools/gradient-tool.cpp:360 -#: ../src/ui/tools/gradient-tool.cpp:458 ../src/widgets/gradient-vector.cpp:801 +#: ../src/ui/tools/gradient-tool.cpp:458 +#: ../src/widgets/gradient-vector.cpp:801 msgid "Add gradient stop" msgstr "Додавання опорної точки градієнта" @@ -23245,12 +23267,11 @@ msgstr "" "елементи керування" #: ../src/ui/tool/node.cpp:529 -#, fuzzy msgctxt "Path handle tip" msgid "<b>Ctrl</b>: Snap handle to steps defined in BSpline Live Path Effect" msgstr "" -"<b>Ctrl</b>: пересунути вус за його справжніми кроками у інтерактивному " -"ефекті B-сплайнів" +"<b>Ctrl</b>: приліпити елемент керування за кроками, визначеним у " +"інтерактивному ефекті B-сплайнів" #: ../src/ui/tool/node.cpp:532 #, c-format @@ -23398,7 +23419,8 @@ msgid "Rotate handle" msgstr "Обертати вус" #. We need to call MPM's method because it could have been our last node -#: ../src/ui/tool/path-manipulator.cpp:1555 ../src/widgets/node-toolbar.cpp:397 +#: ../src/ui/tool/path-manipulator.cpp:1555 +#: ../src/widgets/node-toolbar.cpp:397 msgid "Delete node" msgstr "Вилучити вузол" @@ -24058,31 +24080,31 @@ msgstr "Початкова точка вимірювання, <b>Shift+клац msgid "Measure end, <b>Shift+Click</b> for position dialog" msgstr "Кінцева точка вимірювання, <b>Shift+клацання</b> — вікно позиції" -#: ../src/ui/tools/measure-tool.cpp:747 ../share/extensions/measure.inx.h:2 +#: ../src/ui/tools/measure-tool.cpp:746 ../share/extensions/measure.inx.h:2 msgid "Measure" msgstr "Міра" -#: ../src/ui/tools/measure-tool.cpp:752 +#: ../src/ui/tools/measure-tool.cpp:751 msgid "Base" msgstr "Основа" -#: ../src/ui/tools/measure-tool.cpp:761 +#: ../src/ui/tools/measure-tool.cpp:760 msgid "Add guides from measure tool" msgstr "Додати напрямні з інструмента вимірювання" -#: ../src/ui/tools/measure-tool.cpp:781 -msgid "Add Stored to measure tool" -msgstr "Додати збережене до інструмента вимірювання" +#: ../src/ui/tools/measure-tool.cpp:780 +msgid "Keep last measure on the canvas, for reference" +msgstr "Зберігати останнє вимірювання на полотні для порівняння" -#: ../src/ui/tools/measure-tool.cpp:801 +#: ../src/ui/tools/measure-tool.cpp:800 msgid "Convert measure to items" msgstr "Перетворити вимірювання на об’єкти" -#: ../src/ui/tools/measure-tool.cpp:839 +#: ../src/ui/tools/measure-tool.cpp:838 msgid "Add global measure line" msgstr "Додати загальну лінію вимірювання" -#: ../src/ui/tools/measure-tool.cpp:1290 ../src/ui/tools/measure-tool.cpp:1292 +#: ../src/ui/tools/measure-tool.cpp:1289 ../src/ui/tools/measure-tool.cpp:1291 #, c-format msgid "Crossing %lu" msgstr "Перетин %lu" @@ -24721,7 +24743,7 @@ msgstr[2] "" msgid "Type text" msgstr "Друк тексту" -#: ../src/ui/tools/tool-base.cpp:700 +#: ../src/ui/tools/tool-base.cpp:705 msgid "<b>Space+mouse move</b> to pan canvas" msgstr "<b>Пробіл+пересування миші</b> для переміщення полотна" @@ -29262,27 +29284,33 @@ msgstr "радіальний" msgid "Create radial (elliptic or circular) gradient" msgstr "Створити радіальний (еліптичний чи круговий) градієнт" -#: ../src/widgets/gradient-toolbar.cpp:1044 ../src/widgets/mesh-toolbar.cpp:387 +#: ../src/widgets/gradient-toolbar.cpp:1044 +#: ../src/widgets/mesh-toolbar.cpp:387 msgid "New:" msgstr "Створити:" -#: ../src/widgets/gradient-toolbar.cpp:1067 ../src/widgets/mesh-toolbar.cpp:410 +#: ../src/widgets/gradient-toolbar.cpp:1067 +#: ../src/widgets/mesh-toolbar.cpp:410 msgid "fill" msgstr "заповнення" -#: ../src/widgets/gradient-toolbar.cpp:1067 ../src/widgets/mesh-toolbar.cpp:410 +#: ../src/widgets/gradient-toolbar.cpp:1067 +#: ../src/widgets/mesh-toolbar.cpp:410 msgid "Create gradient in the fill" msgstr "Створити градієнт у заповненні" -#: ../src/widgets/gradient-toolbar.cpp:1071 ../src/widgets/mesh-toolbar.cpp:414 +#: ../src/widgets/gradient-toolbar.cpp:1071 +#: ../src/widgets/mesh-toolbar.cpp:414 msgid "stroke" msgstr "штрих" -#: ../src/widgets/gradient-toolbar.cpp:1071 ../src/widgets/mesh-toolbar.cpp:414 +#: ../src/widgets/gradient-toolbar.cpp:1071 +#: ../src/widgets/mesh-toolbar.cpp:414 msgid "Create gradient in the stroke" msgstr "Створити градієнт у штриху" -#: ../src/widgets/gradient-toolbar.cpp:1074 ../src/widgets/mesh-toolbar.cpp:417 +#: ../src/widgets/gradient-toolbar.cpp:1074 +#: ../src/widgets/mesh-toolbar.cpp:417 msgid "on:" msgstr "на:" @@ -29381,7 +29409,8 @@ msgstr "Зв'язати градієнти" msgid "Link gradients to change all related gradients" msgstr "Зв'язати градієнти, щоб вони змінювалися у всіх пов'язаних градієнтів" -#: ../src/widgets/gradient-vector.cpp:317 ../src/widgets/paint-selector.cpp:965 +#: ../src/widgets/gradient-vector.cpp:317 +#: ../src/widgets/paint-selector.cpp:965 #: ../src/widgets/stroke-marker-selector.cpp:154 msgid "No document selected" msgstr "Документ не вибрано" @@ -31790,7 +31819,7 @@ msgstr "" #: ../share/extensions/convert2dashes.py:56 msgid "Total number of objects not converted: {}\n" -msgstr "" +msgstr "Загальна кількість неперетворених об’єктів: {}\n" #: ../share/extensions/dimension.py:108 msgid "Please select an object." @@ -32531,7 +32560,8 @@ msgid "Area is zero, cannot calculate Center of Mass" msgstr "Площа дорівнює нулю. Визначення центра мас позбавлене сенсу." #: ../share/extensions/pathalongpath.py:207 -#: ../share/extensions/pathscatter.py:226 ../share/extensions/perspective.py:50 +#: ../share/extensions/pathscatter.py:226 +#: ../share/extensions/perspective.py:50 msgid "This extension requires two selected paths." msgstr "Для роботи цього додатка потрібно вибрати два контури." @@ -32569,7 +32599,8 @@ msgstr "" "системах, заснованих на Debian, цю операцію можна виконати командою sudo apt-" "get install python-numpy." -#: ../share/extensions/perspective.py:58 ../share/extensions/summersnight.py:49 +#: ../share/extensions/perspective.py:58 +#: ../share/extensions/summersnight.py:49 #, python-format msgid "" "The first selected object is of type '%s'.\n" @@ -32578,14 +32609,16 @@ msgstr "" "Перший вибраний об'єкт належить до типу «%s».\n" "Спробуйте скористатися пунктом меню Контур -> Об'єкт у контур." -#: ../share/extensions/perspective.py:65 ../share/extensions/summersnight.py:57 +#: ../share/extensions/perspective.py:65 +#: ../share/extensions/summersnight.py:57 msgid "" "This extension requires that the second selected path be four nodes long." msgstr "" "Для роботи цього додатка потрібно, щоб другий вибраний контур складався " "принаймні з чотирьох вузлів." -#: ../share/extensions/perspective.py:91 ../share/extensions/summersnight.py:90 +#: ../share/extensions/perspective.py:91 +#: ../share/extensions/summersnight.py:90 msgid "" "The second selected object is a group, not a path.\n" "Try using the procedure Object->Ungroup." @@ -32593,7 +32626,8 @@ msgstr "" "Другий з вибраних об'єктів є групою, а не контуром.\n" "Спробуйте скористатися пунктом меню Контур -> Розділити." -#: ../share/extensions/perspective.py:93 ../share/extensions/summersnight.py:92 +#: ../share/extensions/perspective.py:93 +#: ../share/extensions/summersnight.py:92 msgid "" "The second selected object is not a path.\n" "Try using the procedure Path->Object to Path." @@ -32601,7 +32635,8 @@ msgstr "" "Другий з вибраних об'єктів не є контуром.\n" "Спробуйте скористатися пунктом меню Контур -> Об'єкт у контур." -#: ../share/extensions/perspective.py:96 ../share/extensions/summersnight.py:95 +#: ../share/extensions/perspective.py:96 +#: ../share/extensions/summersnight.py:95 msgid "" "The first selected object is not a path.\n" "Try using the procedure Path->Object to Path." @@ -35448,12 +35483,14 @@ msgstr "" "спробу відкриття." #: ../share/extensions/hpgl_input.inx.h:3 -#: ../share/extensions/hpgl_output.inx.h:4 ../share/extensions/plotter.inx.h:32 +#: ../share/extensions/hpgl_output.inx.h:4 +#: ../share/extensions/plotter.inx.h:32 msgid "Resolution X (dpi):" msgstr "Роздільна здатність за X (у т/дюйм):" #: ../share/extensions/hpgl_input.inx.h:4 -#: ../share/extensions/hpgl_output.inx.h:5 ../share/extensions/plotter.inx.h:33 +#: ../share/extensions/hpgl_output.inx.h:5 +#: ../share/extensions/plotter.inx.h:33 msgid "" "The amount of steps the plotter moves if it moves for 1 inch on the X axis " "(Default: 1016.0)" @@ -35461,12 +35498,14 @@ msgstr "" "Кількість кроків різця у одному дюймі за віссю X (типове значення — 1016.0)" #: ../share/extensions/hpgl_input.inx.h:5 -#: ../share/extensions/hpgl_output.inx.h:6 ../share/extensions/plotter.inx.h:34 +#: ../share/extensions/hpgl_output.inx.h:6 +#: ../share/extensions/plotter.inx.h:34 msgid "Resolution Y (dpi):" msgstr "Роздільна здатність за Y (у т/дюйм):" #: ../share/extensions/hpgl_input.inx.h:6 -#: ../share/extensions/hpgl_output.inx.h:7 ../share/extensions/plotter.inx.h:35 +#: ../share/extensions/hpgl_output.inx.h:7 +#: ../share/extensions/plotter.inx.h:35 msgid "" "The amount of steps the plotter moves if it moves for 1 inch on the Y axis " "(Default: 1016.0)" @@ -35506,15 +35545,18 @@ msgstr "" "контури. Скористайтеся додатком плотера (меню «Додатки»), щоб виконати " "вирізання безпосередньо за допомогою послідовного з’єднання." -#: ../share/extensions/hpgl_output.inx.h:3 ../share/extensions/plotter.inx.h:31 +#: ../share/extensions/hpgl_output.inx.h:3 +#: ../share/extensions/plotter.inx.h:31 msgid "Plotter Settings " msgstr "Параметри вирізання " -#: ../share/extensions/hpgl_output.inx.h:8 ../share/extensions/plotter.inx.h:36 +#: ../share/extensions/hpgl_output.inx.h:8 +#: ../share/extensions/plotter.inx.h:36 msgid "Pen number:" msgstr "Номер різця:" -#: ../share/extensions/hpgl_output.inx.h:9 ../share/extensions/plotter.inx.h:37 +#: ../share/extensions/hpgl_output.inx.h:9 +#: ../share/extensions/plotter.inx.h:37 msgid "The number of the pen (tool) to use (Standard: '1')" msgstr "" "Номер різця (інструмента), яким слід скористатися. (Типове значення: 1)" @@ -35822,9 +35864,8 @@ msgstr "Довідка з використання клавіатури та м #. i18n. Please don't translate it unless a page exists in your language #: ../share/extensions/inkscape_help_keys.inx.h:3 -#, fuzzy msgid "http://inkscape.org/doc/keys092.html" -msgstr "http://inkscape.org/doc/keys091.html" +msgstr "http://inkscape.org/doc/keys092.html" #: ../share/extensions/inkscape_help_manual.inx.h:1 msgid "Inkscape Manual" @@ -35841,9 +35882,8 @@ msgstr "Нове у поточній версії" #. i18n. Please don't translate it unless a page exists in your language #: ../share/extensions/inkscape_help_relnotes.inx.h:3 -#, fuzzy msgid "http://wiki.inkscape.org/wiki/index.php/Release_notes/0.92" -msgstr "http://wiki.inkscape.org/wiki/index.php/Release_notes/0.91" +msgstr "http://wiki.inkscape.org/wiki/index.php/Release_notes/0.92" #: ../share/extensions/inkscape_help_reportabug.inx.h:1 msgid "Report a Bug" @@ -35873,11 +35913,13 @@ msgstr "Дублювати кінцеві контури" msgid "Interpolate style" msgstr "Інтерполяція стилю" -#: ../share/extensions/interp.inx.h:7 ../share/extensions/interp_att_g.inx.h:10 +#: ../share/extensions/interp.inx.h:7 +#: ../share/extensions/interp_att_g.inx.h:10 msgid "Use Z-order" msgstr "Використати порядок за Z" -#: ../share/extensions/interp.inx.h:8 ../share/extensions/interp_att_g.inx.h:11 +#: ../share/extensions/interp.inx.h:8 +#: ../share/extensions/interp_att_g.inx.h:11 msgid "Workaround for reversed selection order in Live Preview cycles" msgstr "" "Обхідний захід для зворотного порядку позначення у циклах інтерактивного " @@ -37534,7 +37576,8 @@ msgstr "" msgid "AutoCAD Plot Input" msgstr "Імпорт з креслення AutoCAD" -#: ../share/extensions/plt_input.inx.h:2 ../share/extensions/plt_output.inx.h:2 +#: ../share/extensions/plt_input.inx.h:2 +#: ../share/extensions/plt_output.inx.h:2 msgid "HP Graphics Language Plot file [AutoCAD] (*.plt)" msgstr "Файл креслення графічною мовою HP [AutoCAD] (*.plt)" @@ -38460,7 +38503,6 @@ msgid "Custom Height (px):" msgstr "Нетипова висота (у пк):" #: ../share/extensions/seamless_pattern.inx.h:4 -#, fuzzy msgid "This extension overwrites the current document" msgstr "Це розширення перезапише поточний документ" @@ -38496,7 +38538,8 @@ msgstr "Нижній елемент:" msgid "sK1 vector graphics files input" msgstr "Імпорт файлів векторної графіки sK1" -#: ../share/extensions/sk1_input.inx.h:2 ../share/extensions/sk1_output.inx.h:2 +#: ../share/extensions/sk1_input.inx.h:2 +#: ../share/extensions/sk1_output.inx.h:2 msgid "sK1 vector graphics files (*.sk1)" msgstr "Файли векторної графіки sK1 (*.sk1)" @@ -38969,28 +39012,24 @@ msgid "From Side c and Angles a, b" msgstr "За стороною c і кутами a, b" #: ../share/extensions/ungroup_deep.inx.h:1 -#, fuzzy msgid "Deep Ungroup" -msgstr "Розгрупувати" +msgstr "Глибинне розгрупування" #: ../share/extensions/ungroup_deep.inx.h:2 -#, fuzzy msgid "Ungroup all groups in the selected object." -msgstr "Створити групу-обгортку на основі позначених об’єктів" +msgstr "Розгрупувати усі групи у позначеному об’єкті." #: ../share/extensions/ungroup_deep.inx.h:3 -#, fuzzy msgid "Starting Depth" -msgstr "Початковий контур:" +msgstr "Початкова глибина" #: ../share/extensions/ungroup_deep.inx.h:4 -#, fuzzy msgid "Stopping Depth (from top)" -msgstr "Вилучити контур-обгортку з позначених об'єктів'" +msgstr "Кінцева глибина (згори)" #: ../share/extensions/ungroup_deep.inx.h:5 msgid "Depth to Keep (from bottom)" -msgstr "" +msgstr "Глибина зберігання (знизу)" #: ../share/extensions/voronoi2svg.inx.h:1 msgid "Voronoi Diagram" @@ -39472,11 +39511,13 @@ msgstr "Нахил (у градусах):" msgid "Hide lines behind the sphere" msgstr "Ховати лінії за сферою" -#: ../share/extensions/wmf_input.inx.h:1 ../share/extensions/wmf_output.inx.h:1 +#: ../share/extensions/wmf_input.inx.h:1 +#: ../share/extensions/wmf_output.inx.h:1 msgid "Windows Metafile Input" msgstr "Імпорт метафайла Windows" -#: ../share/extensions/wmf_input.inx.h:3 ../share/extensions/wmf_output.inx.h:3 +#: ../share/extensions/wmf_input.inx.h:3 +#: ../share/extensions/wmf_output.inx.h:3 msgid "A popular graphics file format for clipart" msgstr "Популярний графічний формат для кліпарту" @@ -39484,6 +39525,9 @@ msgstr "Популярний графічний формат для кліпар msgid "XAML Input" msgstr "Імпорт з XAML" +#~ msgid "Add Stored to measure tool" +#~ msgstr "Додати збережене до інструмента вимірювання" + #~ msgid "Vertical Page Center" #~ msgstr "Центр сторінки за вертикаллю" diff --git a/src/document.cpp b/src/document.cpp index d8c3f1269..902dabbc3 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -1602,11 +1602,22 @@ static unsigned int count_objects_recursive(SPObject *obj, unsigned int count) return count; } +/** + * Count the number of objects in a given document recursively using the count_objects_recursive helper function + * + * @param[in] document Pointer to the document for counting objects + * @return Numer of objects in the document + */ static unsigned int objects_in_document(SPDocument *document) { return count_objects_recursive(document->getRoot(), 0); } +/** + * Remove unused definitions etc. recursively from an object and its siblings + * + * @param[inout] obj Object which shall be "cleaned" + */ static void vacuum_document_recursive(SPObject *obj) { if (SP_IS_DEFS(obj)) { @@ -1621,6 +1632,11 @@ static void vacuum_document_recursive(SPObject *obj) } } +/** + * Remove unused definitions etc. recursively from an entire document. + * + * @return Number of removed objects + */ unsigned int SPDocument::vacuumDocument() { unsigned int start = objects_in_document(this); @@ -1639,6 +1655,7 @@ unsigned int SPDocument::vacuumDocument() newend = objects_in_document(this); } while (iterations < 100 && newend < end); + // We stop if vacuum_document_recursive doesn't remove any more objects or after 100 iterations, whichever occurs first. return start - newend; } @@ -1647,6 +1664,11 @@ bool SPDocument::isSeeking() const { return priv->seeking; } +/** + * Indicate to the user if the document has been modified since the last save by displaying a "*" in front of the name of the file in the window title. + * + * @param[in] modified True if the document has been modified. + */ void SPDocument::setModifiedSinceSave(bool modified) { this->modified_since_save = modified; if (SP_ACTIVE_DESKTOP) { diff --git a/src/document.h b/src/document.h index e95042155..813d4ae49 100644 --- a/src/document.h +++ b/src/document.h @@ -198,7 +198,7 @@ public: bool isSeeking() const; bool isModifiedSinceSave() const { return modified_since_save; } - void setModifiedSinceSave(bool modified = true); + void setModifiedSinceSave(bool const modified = true); private: SPDocument(SPDocument const &); // no copy diff --git a/src/live_effects/lpe-transform_2pts.cpp b/src/live_effects/lpe-transform_2pts.cpp index 1cd59b7fa..3c4ce0708 100644 --- a/src/live_effects/lpe-transform_2pts.cpp +++ b/src/live_effects/lpe-transform_2pts.cpp @@ -434,7 +434,7 @@ LPETransform2Pts::addCanvasIndicators(SPLPEItem const */*lpeitem*/, std::vector< } if(!lock_angle && lock_lenght) { char const * svgd; - svgd = "m 7.07,7.07 c -3.9,3.91 -10.24,3.91 -14.14,0 -3.91,-3.9 -3.91,-10.24 0,-14.14 3.9,-3.91 10.24,-3.91 14.14,0 l -2.83,-4.24 -0.7,2.12"; + svgd = "M 0,9.94 C -2.56,9.91 -5.17,8.98 -7.07,7.07 c -3.91,-3.9 -3.91,-10.24 0,-14.14 1.97,-1.97 4.51,-3.02 7.07,-3.04 2.56,0.02 5.1,1.07 7.07,3.04 3.91,3.9 3.91,10.24 0,14.14 C 5.17,8.98 2.56,9.91 0,9.94 Z"; PathVector pathv_turn = sp_svg_read_pathv(svgd); pathv_turn *= Geom::Rotate(previous_angle); pathv_turn *= Affine(r,0,0,r,0,0) * Translate(Geom::Point(end)); diff --git a/src/main-cmdlineact.cpp b/src/main-cmdlineact.cpp index 496c16d5d..76d707131 100644 --- a/src/main-cmdlineact.cpp +++ b/src/main-cmdlineact.cpp @@ -62,7 +62,7 @@ CmdLineAction::doIt (ActionContext const & context) { } Inkscape::Selection * selection = context.getSelection(); - selection->add(obj, false); + selection->add(obj); } return; } diff --git a/src/object-set.cpp b/src/object-set.cpp index 8aaa68e70..46c932505 100644 --- a/src/object-set.cpp +++ b/src/object-set.cpp @@ -10,15 +10,23 @@ */ #include <sigc++/sigc++.h> +#include <glib.h> #include "object-set.h" +#include "box3d.h" +#include "persp3d.h" +#include "preferences.h" bool ObjectSet::add(SPObject* object) { + g_return_val_if_fail(object != NULL, false); + g_return_val_if_fail(SP_IS_OBJECT(object), false); + + // any ancestor is in the set - do nothing if (_anyAncestorIsInSet(object)) { return false; } - // very nice function, but needs refinement + // very nice function, but changes selection behavior (probably needs new selection option to deal with it) // check if there is mutual ancestor for some elements, which can replace all of them in the set // object = _getMutualAncestor(object); @@ -26,19 +34,25 @@ bool ObjectSet::add(SPObject* object) { _removeDescendantsFromSet(object); _add(object); + _emitSignals(); return true; } bool ObjectSet::remove(SPObject* object) { + g_return_val_if_fail(object != NULL, false); + g_return_val_if_fail(SP_IS_OBJECT(object), false); + // object is the top of subtree - if (contains(object)) { + if (includes(object)) { _remove(object); + _emitSignals(); return true; } // any ancestor of object is in the set if (_anyAncestorIsInSet(object)) { _removeAncestorsFromSet(object); + _emitSignals(); return true; } @@ -46,7 +60,10 @@ bool ObjectSet::remove(SPObject* object) { return false; } -bool ObjectSet::contains(SPObject* object) { +bool ObjectSet::includes(SPObject *object) { + g_return_val_if_fail(object != NULL, false); + g_return_val_if_fail(SP_IS_OBJECT(object), false); + return container.get<hashed>().find(object) != container.get<hashed>().end(); } @@ -54,6 +71,7 @@ void ObjectSet::clear() { for (auto object: container) { _remove(object); } + _emitSignals(); } int ObjectSet::size() { @@ -63,7 +81,7 @@ int ObjectSet::size() { bool ObjectSet::_anyAncestorIsInSet(SPObject *object) { SPObject* o = object; while (o != nullptr) { - if (contains(o)) { + if (includes(o)) { return true; } o = o->parent; @@ -74,7 +92,7 @@ bool ObjectSet::_anyAncestorIsInSet(SPObject *object) { void ObjectSet::_removeDescendantsFromSet(SPObject *object) { for (auto& child: object->childList(false)) { - if (contains(child)) { + if (includes(child)) { _remove(child); // there is certainly no children of this child in the set continue; @@ -88,11 +106,15 @@ void ObjectSet::_remove(SPObject *object) { releaseConnections[object].disconnect(); releaseConnections.erase(object); container.get<hashed>().erase(object); + _remove_3D_boxes_recursively(object); + _releaseSignals(object); } void ObjectSet::_add(SPObject *object) { releaseConnections[object] = object->connectRelease(sigc::hide_return(sigc::mem_fun(*this, &ObjectSet::remove))); container.push_back(object); + _add_3D_boxes_recursively(object); + _connectSignals(object); } SPObject *ObjectSet::_getMutualAncestor(SPObject *object) { @@ -101,7 +123,7 @@ SPObject *ObjectSet::_getMutualAncestor(SPObject *object) { bool flag = true; while (o->parent != nullptr) { for (auto &child: o->parent->childList(false)) { - if(child != o && !contains(child)) { + if(child != o && !includes(child)) { flag = false; break; } @@ -122,7 +144,7 @@ void ObjectSet::_removeAncestorsFromSet(SPObject *object) { _add(child); } } - if (contains(o->parent)) { + if (includes(o->parent)) { _remove(o->parent); break; } @@ -141,3 +163,226 @@ multi_index_container::iterator ObjectSet::begin() { multi_index_container::iterator ObjectSet::end() { return container.end(); } + +void ObjectSet::toggle(SPObject *obj) { + if (includes(obj)) { + remove(obj); + } else { + add(obj); + } +} + +bool ObjectSet::isEmpty() { + return container.size() == 0; +} + + +SPObject *ObjectSet::single() { + if (container.size() == 1) { + return *container.begin(); + } + + return nullptr; +} + +SPItem *ObjectSet::singleItem() { + if (container.size() == 1) { + SPObject* obj = *container.begin(); + if (SP_IS_ITEM(obj)) { + return SP_ITEM(obj); + } + } + + return nullptr; +} + +SPItem *ObjectSet::smallestItem(CompareSize compare) { + return _sizeistItem(true, compare); +} + +SPItem *ObjectSet::largestItem(CompareSize compare) { + return _sizeistItem(false, compare); +} + +SPItem *ObjectSet::_sizeistItem(bool sml, CompareSize compare) { + std::vector<SPItem*> const items = itemList(); + gdouble max = sml ? 1e18 : 0; + SPItem *ist = NULL; + + for ( std::vector<SPItem*>::const_iterator i=items.begin();i!=items.end(); ++i) { + Geom::OptRect obox = SP_ITEM(*i)->desktopPreferredBounds(); + if (!obox || obox.empty()) { + continue; + } + + Geom::Rect bbox = *obox; + + gdouble size = compare == AREA ? bbox.area() : + (compare == VERTICAL ? bbox.width() : bbox.height()); + size = sml ? size : size * -1; + if (size < max) { + max = size; + ist = SP_ITEM(*i); + } + } + + return ist; +} + +std::vector<SPObject*> ObjectSet::list() { + return std::vector<SPObject*>(container.begin(), container.end()); +} + +std::vector<SPItem*> ObjectSet::itemList() { + std::vector<SPObject *> tmp = list(); + std::vector<SPItem*> result; + std::remove_if(tmp.begin(), tmp.end(), [](SPObject* o){return !SP_IS_ITEM(o);}); + std::transform(tmp.begin(), tmp.end(), std::back_inserter(result), [](SPObject* o){return SP_ITEM(o);}); + return result; +} + +void ObjectSet::set(SPObject *object) { + clear(); + _add(object); + // can't emit signal here due to boolean argument in Selection +// _emitSignals(); +} + +void ObjectSet::setList(const std::vector<SPItem *> &objs) { + clear(); + addList(objs); +} + +void ObjectSet::addList(const std::vector<SPItem *> &objs) { + for (std::vector<SPItem*>::const_iterator iter = objs.begin(); iter != objs.end(); ++iter) { + SPObject *obj = *iter; + if (!includes(obj)) { + add(obj); + } + } +} + +void ObjectSet::add(const std::vector<SPItem*>::iterator& from, const std::vector<SPItem*>::iterator& to) { + for(auto it = from; it != to; ++it) { + _add(*it); + } +} + + +Geom::OptRect ObjectSet::bounds(SPItem::BBoxType type) const +{ + return (type == SPItem::GEOMETRIC_BBOX) ? + geometricBounds() : visualBounds(); +} + +Geom::OptRect ObjectSet::geometricBounds() const +{ + std::vector<SPItem*> const items = const_cast<ObjectSet *>(this)->itemList(); + + Geom::OptRect bbox; + for ( std::vector<SPItem*>::const_iterator iter=items.begin();iter!=items.end(); ++iter) { + bbox.unionWith(SP_ITEM(*iter)->desktopGeometricBounds()); + } + return bbox; +} + +Geom::OptRect ObjectSet::visualBounds() const +{ + std::vector<SPItem*> const items = const_cast<ObjectSet *>(this)->itemList(); + + Geom::OptRect bbox; + for ( std::vector<SPItem*>::const_iterator iter=items.begin();iter!=items.end(); ++iter) { + bbox.unionWith(SP_ITEM(*iter)->desktopVisualBounds()); + } + return bbox; +} + +Geom::OptRect ObjectSet::preferredBounds() const +{ + if (Inkscape::Preferences::get()->getInt("/tools/bounding_box") == 0) { + return bounds(SPItem::VISUAL_BBOX); + } else { + return bounds(SPItem::GEOMETRIC_BBOX); + } +} + +Geom::OptRect ObjectSet::documentBounds(SPItem::BBoxType type) const +{ + Geom::OptRect bbox; + std::vector<SPItem*> const items = const_cast<ObjectSet *>(this)->itemList(); + if (items.empty()) return bbox; + + for ( std::vector<SPItem*>::const_iterator iter=items.begin();iter!=items.end(); ++iter) { + SPItem *item = SP_ITEM(*iter); + bbox |= item->documentBounds(type); + } + + return bbox; +} + +// If we have a selection of multiple items, then the center of the first item +// will be returned; this is also the case in SelTrans::centerRequest() +boost::optional<Geom::Point> ObjectSet::center() const { + std::vector<SPItem*> const items = const_cast<ObjectSet *>(this)->itemList(); + if (!items.empty()) { + SPItem *first = items.back(); // from the first item in selection + if (first->isCenterSet()) { // only if set explicitly + return first->getCenter(); + } + } + Geom::OptRect bbox = preferredBounds(); + if (bbox) { + return bbox->midpoint(); + } else { + return boost::optional<Geom::Point>(); + } +} + + +std::list<Persp3D *> const ObjectSet::perspList() { + std::list<Persp3D *> pl; + for (std::list<SPBox3D *>::iterator i = _3dboxes.begin(); i != _3dboxes.end(); ++i) { + Persp3D *persp = box3d_get_perspective(*i); + if (std::find(pl.begin(), pl.end(), persp) == pl.end()) + pl.push_back(persp); + } + return pl; +} + +std::list<SPBox3D *> const ObjectSet::box3DList(Persp3D *persp) { + std::list<SPBox3D *> boxes; + if (persp) { + for (std::list<SPBox3D *>::iterator i = _3dboxes.begin(); i != _3dboxes.end(); ++i) { + SPBox3D *box = *i; + if (persp == box3d_get_perspective(box)) { + boxes.push_back(box); + } + } + } else { + boxes = _3dboxes; + } + return boxes; +} + +void ObjectSet::_add_3D_boxes_recursively(SPObject *obj) { + std::list<SPBox3D *> boxes = box3d_extract_boxes(obj); + + for (std::list<SPBox3D *>::iterator i = boxes.begin(); i != boxes.end(); ++i) { + SPBox3D *box = *i; + _3dboxes.push_back(box); + } +} + +void ObjectSet::_remove_3D_boxes_recursively(SPObject *obj) { + std::list<SPBox3D *> boxes = box3d_extract_boxes(obj); + + for (std::list<SPBox3D *>::iterator i = boxes.begin(); i != boxes.end(); ++i) { + SPBox3D *box = *i; + std::list<SPBox3D *>::iterator b = std::find(_3dboxes.begin(), _3dboxes.end(), box); + if (b == _3dboxes.end()) { + g_print ("Warning! Trying to remove unselected box from selection.\n"); + return; + } + _3dboxes.erase(b); + } +}
\ No newline at end of file diff --git a/src/object-set.h b/src/object-set.h index 7a52788f3..391046ab8 100644 --- a/src/object-set.h +++ b/src/object-set.h @@ -20,6 +20,10 @@ #include <boost/multi_index/hashed_index.hpp> #include <sigc++/connection.h> #include "sp-object.h" +#include "sp-item.h" + +class SPBox3D; +class Persp3D; struct hashed{}; @@ -34,26 +38,164 @@ typedef boost::multi_index_container< class ObjectSet { public: + enum CompareSize {HORIZONTAL, VERTICAL, AREA}; + ObjectSet() {}; - ~ObjectSet(); + virtual ~ObjectSet(); + + /** + * Add an SPObject to the set of selected objects. + * + * @param obj the SPObject to add + */ bool add(SPObject* object); + + /** Add items from an STL iterator range to the selection. + * \param from the begin iterator + * \param to the end iterator + */ + void add(const std::vector<SPItem*>::iterator& from, const std::vector<SPItem*>::iterator& to); + + /** + * Removes an item from the set of selected objects. + * + * It is ok to call this method for an unselected item. + * + * @param item the item to unselect + * + * @return is success + */ bool remove(SPObject* object); - bool contains(SPObject* object); + + /** + * Returns true if the given object is selected. + */ + bool includes(SPObject *object); + + /** + * Set the selection to a single specific object. + * + * @param obj the object to select + */ + void set(SPObject *object); + + /** + * Unselects all selected objects. + */ void clear(); + + /** + * Returns size of the selection. + */ int size(); + + /** + * Returns true if no items are selected. + */ + bool isEmpty(); + + /** + * Removes an item if selected, adds otherwise. + * + * @param item the item to unselect + */ + void toggle(SPObject *obj); + + /** + * Returns a single selected object. + * + * @return NULL unless exactly one object is selected + */ + SPObject *single(); + + /** + * Returns a single selected item. + * + * @return NULL unless exactly one object is selected + */ + SPItem *singleItem(); + + /** + * Returns the smallest item from this selection. + */ + SPItem *smallestItem(CompareSize compare); + + /** + * Returns the largest item from this selection. + */ + SPItem *largestItem(CompareSize compare); + + /** Returns the list of selected objects. */ + std::vector<SPObject*> list(); + + /** Returns the list of selected SPItems. */ + std::vector<SPItem*> itemList(); + + /** + * Selects exactly the specified objects. + * + * @param objs the objects to select + */ + void setList(const std::vector<SPItem *> &objs); + + /** + * Adds the specified objects to selection, without deselecting first. + * + * @param objs the objects to select + */ + void addList(std::vector<SPItem*> const &objs); + + /** Returns the bounding rectangle of the selection. */ + Geom::OptRect bounds(SPItem::BBoxType type) const; + Geom::OptRect visualBounds() const; + Geom::OptRect geometricBounds() const; + + /** + * Returns either the visual or geometric bounding rectangle of the selection, based on the + * preferences specified for the selector tool + */ + Geom::OptRect preferredBounds() const; + + /* Returns the bounding rectangle of the selectionin document coordinates.*/ + Geom::OptRect documentBounds(SPItem::BBoxType type) const; + + /** + * Returns the rotation/skew center of the selection. + */ + boost::optional<Geom::Point> center() const; + + /** Returns a list of all perspectives which have a 3D box in the current selection. + (these may also be nested in groups) */ + std::list<Persp3D *> const perspList(); + + /** + * Returns a list of all 3D boxes in the current selection which are associated to @c + * persp. If @c pers is @c NULL, return all selected boxes. + */ + std::list<SPBox3D *> const box3DList(Persp3D *persp = NULL); + + multi_index_container::iterator begin(); multi_index_container::iterator end(); -private: +protected: + virtual void _connectSignals(SPObject* object) {}; + virtual void _releaseSignals(SPObject* object) {}; + virtual void _emitSignals() {}; void _add(SPObject* object); void _remove(SPObject* object); bool _anyAncestorIsInSet(SPObject *object); void _removeDescendantsFromSet(SPObject *object); void _removeAncestorsFromSet(SPObject *object); + SPItem *_sizeistItem(bool sml, CompareSize compare); SPObject *_getMutualAncestor(SPObject *object); + virtual void _add_3D_boxes_recursively(SPObject *obj); + virtual void _remove_3D_boxes_recursively(SPObject *obj); multi_index_container container; + std::list<SPBox3D *> _3dboxes; std::unordered_map<SPObject*, sigc::connection> releaseConnections; + }; diff --git a/src/selection.cpp b/src/selection.cpp index 146d07a9d..32e27f2d4 100644 --- a/src/selection.cpp +++ b/src/selection.cpp @@ -7,8 +7,10 @@ * bulia byak <buliabyak@users.sf.net> * Andrius R. <knutux@gmail.com> * Abhishek Sharma + * Adrian Boguszewski * - * Copyright (C) 2006 Andrius R. + * Copyright (C) 2016 Adrian Boguszewski + * Copyright (C) 2006 Andrius R. * Copyright (C) 2004-2005 MenTaLguY * Copyright (C) 1999-2002 Lauris Kaplinski * Copyright (C) 2001-2002 Ximian, Inc. @@ -20,17 +22,12 @@ #endif #include "inkscape.h" -#include "document.h" #include "xml/repr.h" #include "preferences.h" #include "sp-shape.h" #include "sp-path.h" -#include "sp-item-group.h" -#include "box3d.h" -#include "persp3d.h" -#include <boost/lambda/lambda.hpp> -#include <boost/lambda/casts.hpp> +#include "document.h" #define SP_SELECTION_UPDATE_PRIORITY (G_PRIORITY_HIGH_IDLE + 1) @@ -46,7 +43,6 @@ Selection::Selection(LayerModel *layers, SPDesktop *desktop) : } Selection::~Selection() { - _clear(); _layers = NULL; if (_idle) { g_source_remove(_idle); @@ -66,8 +62,7 @@ void Selection::_schedule_modified(SPObject */*obj*/, guint flags) { this->_flags |= flags; } -gboolean -Selection::_emit_modified(Selection *selection) +gboolean Selection::_emit_modified(Selection *selection) { /* force new handler to be created if requested before we return */ selection->_idle = 0; @@ -100,8 +95,7 @@ void Selection::_emitChanged(bool persist_selection_context/* = false */) { _changed_signal.emit(this); } -void -Selection::_releaseContext(SPObject *obj) +void Selection::_releaseContext(SPObject *obj) { if (NULL == _selection_context || _selection_context != obj) return; @@ -112,148 +106,30 @@ Selection::_releaseContext(SPObject *obj) _selection_context = NULL; } -void Selection::_clear() { - _selectionSet.clear(); -} - SPObject *Selection::activeContext() { if (NULL != _selection_context) return _selection_context; return _layers->currentLayer(); - } - -bool Selection::includes(SPObject *obj) { - g_return_val_if_fail(obj != NULL, false); - g_return_val_if_fail(SP_IS_OBJECT(obj), false); - - return _selectionSet.contains(obj); -} - -void Selection::add(SPObject *obj, bool persist_selection_context/* = false */) { - g_return_if_fail(obj != NULL); - g_return_if_fail(SP_IS_OBJECT(obj)); - g_return_if_fail(obj->document != NULL); - - _add(obj); - _emitChanged(persist_selection_context); -} - -void Selection::add_3D_boxes_recursively(SPObject *obj) { - std::list<SPBox3D *> boxes = box3d_extract_boxes(obj); - - for (std::list<SPBox3D *>::iterator i = boxes.begin(); i != boxes.end(); ++i) { - SPBox3D *box = *i; - _3dboxes.push_back(box); - } -} - -void Selection::_add(SPObject *obj) { - _selectionSet.add(obj); - add_3D_boxes_recursively(obj); - _modified_connections[obj] = obj->connectModified(sigc::mem_fun(*this, &Selection::_schedule_modified)); } void Selection::set(SPObject *object, bool persist_selection_context) { - _clear(); - add(object, persist_selection_context); -} - -void Selection::toggle(SPObject *obj) { - if (includes(obj)) { - remove(obj); - } else { - add(obj); - } -} - -void Selection::remove(SPObject *obj) { - g_return_if_fail(obj != NULL); - g_return_if_fail(SP_IS_OBJECT(obj)); - - _remove(obj); - _emitChanged(); -} - -void Selection::remove_3D_boxes_recursively(SPObject *obj) { - std::list<SPBox3D *> boxes = box3d_extract_boxes(obj); - - for (std::list<SPBox3D *>::iterator i = boxes.begin(); i != boxes.end(); ++i) { - SPBox3D *box = *i; - std::list<SPBox3D *>::iterator b = std::find(_3dboxes.begin(), _3dboxes.end(), box); - if (b == _3dboxes.end()) { - g_print ("Warning! Trying to remove unselected box from selection.\n"); - return; - } - _3dboxes.erase(b); - } -} - -void Selection::_remove(SPObject *obj) { - _modified_connections[obj].disconnect(); - _modified_connections.erase(obj); - - _selectionSet.remove(obj); - remove_3D_boxes_recursively(obj); -} - -void Selection::setList(std::vector<SPItem*> const &list) { - // Clear and add, or just clear with emit. - if (!list.empty()) { - _clear(); - addList(list); - } else { - clear(); - } -} - -void Selection::addList(std::vector<SPItem*> const &list) { - if (list.empty()) - return; - - for (std::vector<SPItem*>::const_iterator iter = list.begin(); iter != list.end(); ++iter) { - SPObject *obj = *iter; - if (!includes(obj)) { - _add(obj); - } - } - - _emitChanged(); + ObjectSet::set(object); + _emitChanged(persist_selection_context); } void Selection::setReprList(std::vector<XML::Node*> const &list) { - _clear(); + clear(); for (std::vector<XML::Node*>::const_reverse_iterator iter = list.rbegin(); iter != list.rend(); ++iter) { SPObject *obj = _objectForXMLNode(*iter); if (obj) { - _add(obj); + add(obj); } } _emitChanged(); } -void Selection::clear() { - _clear(); - _emitChanged(); -} - -bool Selection::isEmpty() { - return _selectionSet.size() == 0; -} - -std::vector<SPObject*> Selection::list() { - return std::vector<SPObject*>(_selectionSet.begin(), _selectionSet.end()); -} - -std::vector<SPItem*> Selection::itemList() { - std::vector<SPObject *> tmp = list(); - std::vector<SPItem*> result; - std::remove_if(tmp.begin(), tmp.end(), [](SPObject* o){return !SP_IS_ITEM(o);}); - std::transform(tmp.begin(), tmp.end(), std::back_inserter(result), [](SPObject* o){return SP_ITEM(o);}); - return result; -} - std::vector<XML::Node*> Selection::reprList() { std::vector<SPItem*> list = itemList(); std::vector<XML::Node*> result; @@ -261,154 +137,11 @@ std::vector<XML::Node*> Selection::reprList() { return result; } -std::list<Persp3D *> const Selection::perspList() { - std::list<Persp3D *> pl; - for (std::list<SPBox3D *>::iterator i = _3dboxes.begin(); i != _3dboxes.end(); ++i) { - Persp3D *persp = box3d_get_perspective(*i); - if (std::find(pl.begin(), pl.end(), persp) == pl.end()) - pl.push_back(persp); - } - return pl; -} - -std::list<SPBox3D *> const Selection::box3DList(Persp3D *persp) { - std::list<SPBox3D *> boxes; - if (persp) { - for (std::list<SPBox3D *>::iterator i = _3dboxes.begin(); i != _3dboxes.end(); ++i) { - SPBox3D *box = *i; - if (persp == box3d_get_perspective(box)) { - boxes.push_back(box); - } - } - } else { - boxes = _3dboxes; - } - return boxes; -} - -SPObject *Selection::single() { - if (_selectionSet.size() == 1) { - return *_selectionSet.begin(); - } - - return nullptr; -} - -SPItem *Selection::singleItem() { - if (_selectionSet.size() == 1) { - SPObject* obj = *_selectionSet.begin(); - if (SP_IS_ITEM(obj)) { - return SP_ITEM(obj); - } - } - - return nullptr; -} - -SPItem *Selection::smallestItem(Selection::CompareSize compare) { - return _sizeistItem(true, compare); -} - -SPItem *Selection::largestItem(Selection::CompareSize compare) { - return _sizeistItem(false, compare); -} - -SPItem *Selection::_sizeistItem(bool sml, Selection::CompareSize compare) { - std::vector<SPItem*> const items = const_cast<Selection *>(this)->itemList(); - gdouble max = sml ? 1e18 : 0; - SPItem *ist = NULL; - - for ( std::vector<SPItem*>::const_iterator i=items.begin();i!=items.end(); ++i) { - Geom::OptRect obox = SP_ITEM(*i)->desktopPreferredBounds(); - if (!obox || obox.empty()) continue; - Geom::Rect bbox = *obox; - - gdouble size = compare == 2 ? bbox.area() : - (compare == 1 ? bbox.width() : bbox.height()); - size = sml ? size : size * -1; - if (size < max) { - max = size; - ist = SP_ITEM(*i); - } - } - - return ist; -} - Inkscape::XML::Node *Selection::singleRepr() { SPObject *obj = single(); return obj ? obj->getRepr() : nullptr; } -Geom::OptRect Selection::bounds(SPItem::BBoxType type) const -{ - return (type == SPItem::GEOMETRIC_BBOX) ? - geometricBounds() : visualBounds(); -} - -Geom::OptRect Selection::geometricBounds() const -{ - std::vector<SPItem*> const items = const_cast<Selection *>(this)->itemList(); - - Geom::OptRect bbox; - for ( std::vector<SPItem*>::const_iterator iter=items.begin();iter!=items.end(); ++iter) { - bbox.unionWith(SP_ITEM(*iter)->desktopGeometricBounds()); - } - return bbox; -} - -Geom::OptRect Selection::visualBounds() const -{ - std::vector<SPItem*> const items = const_cast<Selection *>(this)->itemList(); - - Geom::OptRect bbox; - for ( std::vector<SPItem*>::const_iterator iter=items.begin();iter!=items.end(); ++iter) { - bbox.unionWith(SP_ITEM(*iter)->desktopVisualBounds()); - } - return bbox; -} - -Geom::OptRect Selection::preferredBounds() const -{ - if (Inkscape::Preferences::get()->getInt("/tools/bounding_box") == 0) { - return bounds(SPItem::VISUAL_BBOX); - } else { - return bounds(SPItem::GEOMETRIC_BBOX); - } -} - -Geom::OptRect Selection::documentBounds(SPItem::BBoxType type) const -{ - Geom::OptRect bbox; - std::vector<SPItem*> const items = const_cast<Selection *>(this)->itemList(); - if (items.empty()) return bbox; - - for ( std::vector<SPItem*>::const_iterator iter=items.begin();iter!=items.end(); ++iter) { - SPItem *item = SP_ITEM(*iter); - bbox |= item->documentBounds(type); - } - - return bbox; -} - -// If we have a selection of multiple items, then the center of the first item -// will be returned; this is also the case in SelTrans::centerRequest() -boost::optional<Geom::Point> Selection::center() const { - std::vector<SPItem*> const items = const_cast<Selection *>(this)->itemList(); - if (!items.empty()) { - SPItem *first = items.back(); // from the first item in selection - if (first->isCenterSet()) { // only if set explicitly - return first->getCenter(); - } - } - Geom::OptRect bbox = preferredBounds(); - if (bbox) { - return bbox->midpoint(); - } else { - return boost::optional<Geom::Point>(); - } -} - std::vector<Inkscape::SnapCandidatePoint> Selection::getSnapPoints(SnapPreferences const *snapprefs) const { std::vector<Inkscape::SnapCandidatePoint> p; @@ -461,6 +194,19 @@ size_t Selection::numberOfParents() { return parents.size(); } +void Selection::_emitSignals() { + _emitChanged(); +} + +void Selection::_connectSignals(SPObject *object) { + _modified_connections[object] = object->connectModified(sigc::mem_fun(*this, &Selection::_schedule_modified)); +} + +void Selection::_releaseSignals(SPObject *object) { + _modified_connections[object].disconnect(); + _modified_connections.erase(object); +} + } /* diff --git a/src/selection.h b/src/selection.h index 91d033d58..8f43d51e7 100644 --- a/src/selection.h +++ b/src/selection.h @@ -5,7 +5,9 @@ * Lauris Kaplinski <lauris@kaplinski.com> * MenTaLguY <mental@rydia.net> * bulia byak <buliabyak@users.sf.net> + * Adrian Boguszewski * + * Copyright (C) 2016 Adrian Boguszewski * Copyright (C) 2004-2005 MenTaLguY * Copyright (C) 1999-2002 Lauris Kaplinski * Copyright (C) 2001-2002 Ximian, Inc. @@ -15,8 +17,6 @@ #include <vector> #include <map> -#include <list> -#include <set> #include <stddef.h> #include <sigc++/sigc++.h> @@ -27,11 +27,8 @@ #include "sp-item.h" #include "object-set.h" - class SPDesktop; class SPItem; -class SPBox3D; -class Persp3D; namespace Inkscape { class LayerModel; @@ -62,10 +59,10 @@ namespace Inkscape { */ class Selection : public Inkscape::GC::Managed<>, public Inkscape::GC::Finalized, - public Inkscape::GC::Anchored + public Inkscape::GC::Anchored, + public ObjectSet { public: - enum CompareSize { HORIZONTAL, VERTICAL, AREA }; /** * Constructs an selection object, bound to a particular * layer model @@ -98,12 +95,7 @@ public: */ SPObject *activeContext(); - /** - * Add an SPObject to the set of selected objects. - * - * @param obj the SPObject to add - */ - void add(SPObject *obj, bool persist_selection_context = false); + using ObjectSet::add; /** * Add an XML node's SPObject to the set of selected objects. @@ -130,21 +122,7 @@ public: set(_objectForXMLNode(repr)); } - /** - * Removes an item from the set of selected objects. - * - * It is ok to call this method for an unselected item. - * - * @param item the item to unselect - */ - void remove(SPObject *obj); - - /** - * Removes an item if selected, adds otherwise. - * - * @param item the item to unselect - */ - void toggle(SPObject *obj); + using ObjectSet::remove; /** * Removes an item from the set of selected objects. @@ -153,21 +131,9 @@ public: * * @param repr the xml node of the item to remove */ - void remove(XML::Node *repr) { remove(_objectForXMLNode(repr)); } - - /** - * Selects exactly the specified objects. - * - * @param objs the objects to select - */ - void setList(std::vector<SPItem*> const &objs); - - /** - * Adds the specified objects to selection, without deselecting first. - * - * @param objs the objects to select - */ - void addList(std::vector<SPItem*> const &objs); + void remove(XML::Node *repr) { + remove(_objectForXMLNode(repr)); + } /** * Clears the selection and selects the specified objects. @@ -176,33 +142,7 @@ public: */ void setReprList(std::vector<XML::Node*> const &reprs); - /** Add items from an STL iterator range to the selection. - * \param from the begin iterator - * \param to the end iterator - */ - template <typename InputIterator> - void add(InputIterator from, InputIterator to) { - while (from != to) { - _add(*from); - ++from; - } - _emitChanged(); - } - - /** - * Unselects all selected objects.. - */ - void clear(); - - /** - * Returns true if no items are selected. - */ - bool isEmpty(); - - /** - * Returns true if the given object is selected. - */ - bool includes(SPObject *obj); + using ObjectSet::includes; /** * Returns true if the given item is selected. @@ -212,80 +152,21 @@ public: } /** - * Returns a single selected object. - * - * @return NULL unless exactly one object is selected - */ - SPObject *single(); - - /** - * Returns a single selected item. - * - * @return NULL unless exactly one object is selected - */ - SPItem *singleItem(); - - /** - * Returns the smallest item from this selection. - */ - SPItem *smallestItem(CompareSize compare); - - /** - * Returns the largest item from this selection. - */ - SPItem *largestItem(CompareSize compare); - - /** * Returns a single selected object's xml node. * * @return NULL unless exactly one object is selected */ XML::Node *singleRepr(); - /** Returns the list of selected objects. */ - std::vector<SPObject*> list(); - /** Returns the list of selected SPItems. */ - std::vector<SPItem*> itemList(); /** Returns a list of the xml nodes of all selected objects. */ - /// \todo only returns reprs of SPItems currently; need a separate - /// method for that std::vector<XML::Node*> reprList(); - /** Returns a list of all perspectives which have a 3D box in the current selection. - (these may also be nested in groups) */ - std::list<Persp3D *> const perspList(); - - /** - * Returns a list of all 3D boxes in the current selection which are associated to @c - * persp. If @c pers is @c NULL, return all selected boxes. - */ - std::list<SPBox3D *> const box3DList(Persp3D *persp = NULL); - /** Returns the number of layers in which there are selected objects. */ size_t numberOfLayers(); /** Returns the number of parents to which the selected objects belong. */ size_t numberOfParents(); - /** Returns the bounding rectangle of the selection. */ - Geom::OptRect bounds(SPItem::BBoxType type) const; - Geom::OptRect visualBounds() const; - Geom::OptRect geometricBounds() const; - - /** - * Returns either the visual or geometric bounding rectangle of the selection, based on the - * preferences specified for the selector tool - */ - Geom::OptRect preferredBounds() const; - - /// Returns the bounding rectangle of the selectionin document coordinates. - Geom::OptRect documentBounds(SPItem::BBoxType type) const; - - /** - * Returns the rotation/skew center of the selection. - */ - boost::optional<Geom::Point> center() const; - /** * Compute the list of points in the selection that are to be considered for snapping from. * @@ -332,6 +213,11 @@ public: return _modified_signal.slots().insert(_modified_signal.slots().begin(), slot); } +protected: + void _emitSignals(); + void _connectSignals(SPObject* object); + void _releaseSignals(SPObject* object); + private: /** no copy. */ Selection(Selection const &); @@ -347,25 +233,11 @@ private: void _emitModified(unsigned int flags); /** Issues changed selection signal. */ void _emitChanged(bool persist_selection_context = false); - /** clears the selection (without issuing a notification). */ - void _clear(); - /** adds an object (without issuing a notification). */ - void _add(SPObject *obj); - /** removes an object (without issuing a notification). */ - void _remove(SPObject *obj); /** returns the SPObject corresponding to an xml node (if any). */ SPObject *_objectForXMLNode(XML::Node *repr) const; /** Releases an active layer object that is being removed. */ void _releaseContext(SPObject *obj); - ObjectSet _selectionSet; - - void add_3D_boxes_recursively(SPObject *obj); - void remove_3D_boxes_recursively(SPObject *obj); - SPItem *_sizeistItem(bool sml, CompareSize compare); - - std::list<SPBox3D *> _3dboxes; - LayerModel *_layers; GC::soft_ptr<SPDesktop> _desktop; SPObject* _selection_context; diff --git a/src/sp-object.cpp b/src/sp-object.cpp index db66eb3e6..d1659eedc 100644 --- a/src/sp-object.cpp +++ b/src/sp-object.cpp @@ -71,13 +71,17 @@ Inkscape::XML::NodeEventVector object_event_vector = { SPObject::repr_order_changed }; -// A friend class used to set internal members on SPObject so as to not expose settors in SPObject's public API +/** + * A friend class used to set internal members on SPObject so as to not expose settors in SPObject's public API + */ class SPObjectImpl { public: /** * Null's the id member of an SPObject without attempting to free prior contents. + * + * @param[inout] obj Pointer to the object which's id shall be nulled. */ static void setIdNull( SPObject* obj ) { if (obj) { @@ -87,6 +91,9 @@ public: /** * Sets the id member of an object, freeing any prior content. + * + * @param[inout] obj Pointer to the object which's id shall be set. + * @param[in] id New id */ static void setId( SPObject* obj, gchar const* id ) { if (obj && (id != obj->id) ) { @@ -104,6 +111,9 @@ public: static gchar *sp_object_get_unique_id(SPObject *object, gchar const *defid); +/** + * Constructor, sets all attributes to default values. + */ SPObject::SPObject() : cloned(0), uflags(0), mflags(0), hrefcount(0), _total_hrefcount(0), document(NULL), parent(NULL), children(NULL), _last_child(NULL), @@ -126,6 +136,9 @@ SPObject::SPObject() this->context_style = NULL; } +/** + * Destructor, frees the used memory and unreferences a potential successor of the object. + */ SPObject::~SPObject() { g_free(this->_label); g_free(this->_default_label); diff --git a/src/ui/tools/eraser-tool.cpp b/src/ui/tools/eraser-tool.cpp index 6b32b5901..cb7747b2b 100644 --- a/src/ui/tools/eraser-tool.cpp +++ b/src/ui/tools/eraser-tool.cpp @@ -708,7 +708,6 @@ void EraserTool::set_to_accumulated() { item->deleteObject(true); sp_object_unref(item); workDone = true; - workDone = true; } else if (SP_IS_GROUP(item) || use ) { /*Do nothing*/ } else { diff --git a/src/ui/widget/style-subject.cpp b/src/ui/widget/style-subject.cpp index da3bbcd20..47a899c0f 100644 --- a/src/ui/widget/style-subject.cpp +++ b/src/ui/widget/style-subject.cpp @@ -55,7 +55,7 @@ Inkscape::Selection *StyleSubject::Selection::_getSelection() const { } } -std::vector<SPObject*> StyleSubject::Selection::list(){ +std::vector<SPObject*> StyleSubject::Selection::list() { Inkscape::Selection *selection = _getSelection(); if(selection) return selection->list(); diff --git a/testfiles/src/object-set-test.cpp b/testfiles/src/object-set-test.cpp index 124740495..5c564c0dc 100644 --- a/testfiles/src/object-set-test.cpp +++ b/testfiles/src/object-set-test.cpp @@ -24,8 +24,12 @@ public: G = new SPObject(); H = new SPObject(); X = new SPObject(); + set = new ObjectSet(); + set2 = new ObjectSet(); } ~ObjectSetTest() { + delete set; + delete set2; delete X; delete H; delete G; @@ -45,57 +49,57 @@ public: SPObject* G; SPObject* H; SPObject* X; - ObjectSet set; - ObjectSet set2; + ObjectSet* set; + ObjectSet* set2; }; TEST_F(ObjectSetTest, Basics) { - EXPECT_EQ(0, set.size()); - set.add(A); - EXPECT_EQ(1, set.size()); - EXPECT_TRUE(set.contains(A)); - set.add(B); - set.add(C); - EXPECT_EQ(3, set.size()); - EXPECT_TRUE(set.contains(B)); - EXPECT_TRUE(set.contains(C)); - EXPECT_FALSE(set.contains(D)); - EXPECT_FALSE(set.contains(X)); - set.remove(A); - EXPECT_EQ(2, set.size()); - EXPECT_FALSE(set.contains(A)); - set.clear(); - EXPECT_EQ(0, set.size()); + EXPECT_EQ(0, set->size()); + set->add(A); + EXPECT_EQ(1, set->size()); + EXPECT_TRUE(set->includes(A)); + set->add(B); + set->add(C); + EXPECT_EQ(3, set->size()); + EXPECT_TRUE(set->includes(B)); + EXPECT_TRUE(set->includes(C)); + EXPECT_FALSE(set->includes(D)); + EXPECT_FALSE(set->includes(X)); + set->remove(A); + EXPECT_EQ(2, set->size()); + EXPECT_FALSE(set->includes(A)); + set->clear(); + EXPECT_EQ(0, set->size()); } TEST_F(ObjectSetTest, Autoremoving) { SPObject* Q = new SPObject(); Q->invoke_build(_doc, _doc->rroot, 1); - set.add(Q); - EXPECT_TRUE(set.contains(Q)); - EXPECT_EQ(1, set.size()); + set->add(Q); + EXPECT_TRUE(set->includes(Q)); + EXPECT_EQ(1, set->size()); Q->releaseReferences(); - EXPECT_EQ(0, set.size()); + EXPECT_EQ(0, set->size()); } TEST_F(ObjectSetTest, BasicDescendants) { A->attach(B, nullptr); B->attach(C, nullptr); A->attach(D, nullptr); - bool resultB = set.add(B); - bool resultB2 = set.add(B); + bool resultB = set->add(B); + bool resultB2 = set->add(B); EXPECT_TRUE(resultB); EXPECT_FALSE(resultB2); - EXPECT_TRUE(set.contains(B)); - bool resultC = set.add(C); + EXPECT_TRUE(set->includes(B)); + bool resultC = set->add(C); EXPECT_FALSE(resultC); - EXPECT_FALSE(set.contains(C)); - EXPECT_EQ(1, set.size()); - bool resultA = set.add(A); + EXPECT_FALSE(set->includes(C)); + EXPECT_EQ(1, set->size()); + bool resultA = set->add(A); EXPECT_TRUE(resultA); - EXPECT_EQ(1, set.size()); - EXPECT_TRUE(set.contains(A)); - EXPECT_FALSE(set.contains(B)); + EXPECT_EQ(1, set->size()); + EXPECT_TRUE(set->includes(A)); + EXPECT_FALSE(set->includes(B)); } TEST_F(ObjectSetTest, AdvancedDescendants) { @@ -107,19 +111,19 @@ TEST_F(ObjectSetTest, AdvancedDescendants) { C->attach(F, nullptr); C->attach(G, nullptr); C->attach(H, nullptr); - set.add(A); - bool resultF = set.remove(F); + set->add(A); + bool resultF = set->remove(F); EXPECT_TRUE(resultF); - EXPECT_EQ(4, set.size()); - EXPECT_FALSE(set.contains(F)); - EXPECT_TRUE(set.contains(B)); - EXPECT_TRUE(set.contains(G)); - EXPECT_TRUE(set.contains(H)); - EXPECT_TRUE(set.contains(X)); - bool resultF2 = set.add(F); + EXPECT_EQ(4, set->size()); + EXPECT_FALSE(set->includes(F)); + EXPECT_TRUE(set->includes(B)); + EXPECT_TRUE(set->includes(G)); + EXPECT_TRUE(set->includes(H)); + EXPECT_TRUE(set->includes(X)); + bool resultF2 = set->add(F); EXPECT_TRUE(resultF2); - EXPECT_EQ(5, set.size()); - EXPECT_TRUE(set.contains(F)); + EXPECT_EQ(5, set->size()); + EXPECT_TRUE(set->includes(F)); } TEST_F(ObjectSetTest, Removing) { @@ -131,27 +135,27 @@ TEST_F(ObjectSetTest, Removing) { C->attach(F, nullptr); C->attach(G, nullptr); C->attach(H, nullptr); - bool removeH = set.remove(H); + bool removeH = set->remove(H); EXPECT_FALSE(removeH); - set.add(A); - bool removeX = set.remove(X); + set->add(A); + bool removeX = set->remove(X); EXPECT_TRUE(removeX); - EXPECT_EQ(2, set.size()); - EXPECT_TRUE(set.contains(B)); - EXPECT_TRUE(set.contains(C)); - EXPECT_FALSE(set.contains(X)); - EXPECT_FALSE(set.contains(A)); - bool removeX2 = set.remove(X); + EXPECT_EQ(2, set->size()); + EXPECT_TRUE(set->includes(B)); + EXPECT_TRUE(set->includes(C)); + EXPECT_FALSE(set->includes(X)); + EXPECT_FALSE(set->includes(A)); + bool removeX2 = set->remove(X); EXPECT_FALSE(removeX2); - EXPECT_EQ(2, set.size()); - bool removeA = set.remove(A); + EXPECT_EQ(2, set->size()); + bool removeA = set->remove(A); EXPECT_FALSE(removeA); - EXPECT_EQ(2, set.size()); - bool removeC = set.remove(C); + EXPECT_EQ(2, set->size()); + bool removeC = set->remove(C); EXPECT_TRUE(removeC); - EXPECT_EQ(1, set.size()); - EXPECT_TRUE(set.contains(B)); - EXPECT_FALSE(set.contains(C)); + EXPECT_EQ(1, set->size()); + EXPECT_TRUE(set->includes(B)); + EXPECT_FALSE(set->includes(C)); } TEST_F(ObjectSetTest, TwoSets) { @@ -159,19 +163,19 @@ TEST_F(ObjectSetTest, TwoSets) { Q->invoke_build(_doc, _doc->rroot, 1); A->attach(B, nullptr); A->attach(Q, nullptr); - set.add(A); - set2.add(A); - EXPECT_EQ(1, set.size()); - EXPECT_EQ(1, set2.size()); - set.remove(B); - EXPECT_EQ(1, set.size()); - EXPECT_TRUE(set.contains(Q)); - EXPECT_EQ(1, set2.size()); - EXPECT_TRUE(set2.contains(A)); + set->add(A); + set2->add(A); + EXPECT_EQ(1, set->size()); + EXPECT_EQ(1, set2->size()); + set->remove(B); + EXPECT_EQ(1, set->size()); + EXPECT_TRUE(set->includes(Q)); + EXPECT_EQ(1, set2->size()); + EXPECT_TRUE(set2->includes(A)); Q->releaseReferences(); - EXPECT_EQ(0, set.size()); - EXPECT_EQ(1, set2.size()); - EXPECT_TRUE(set2.contains(A)); + EXPECT_EQ(0, set->size()); + EXPECT_EQ(1, set2->size()); + EXPECT_TRUE(set2->includes(A)); } TEST_F(ObjectSetTest, SetRemoving) { @@ -186,18 +190,17 @@ TEST_F(ObjectSetTest, SetRemoving) { } TEST_F(ObjectSetTest, SetOrder) { - set.add(A); - set.add(D); - set.add(B); - set.add(E); - set.add(C); - EXPECT_EQ(5, set.size()); - auto it = set.begin(); + set->add(A); + set->add(D); + set->add(B); + set->add(E); + set->add(C); + EXPECT_EQ(5, set->size()); + auto it = set->begin(); EXPECT_EQ(A, *it++); EXPECT_EQ(D, *it++); EXPECT_EQ(B, *it++); EXPECT_EQ(E, *it++); EXPECT_EQ(C, *it++); - EXPECT_EQ(set.end(), it); - + EXPECT_EQ(set->end(), it); }
\ No newline at end of file |
