Compare commits

..

1 Commits

Author SHA1 Message Date
Konstantin Pastbin
36dc41b102 [fdroid] Release version 2025.11.07-2
Signed-off-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
2025-11-08 01:26:43 +07:00
90 changed files with 633 additions and 1094 deletions

View File

@@ -1 +1 @@
version: 2025.03.02-7-FDroid+25030207
version: 2025.11.07-2-FDroid+25110702

View File

@@ -1,13 +1,11 @@
package app.organicmaps.background;
import android.content.Context;
import android.os.Build;
import androidx.annotation.NonNull;
import androidx.work.Constraints;
import androidx.work.ExistingWorkPolicy;
import androidx.work.NetworkType;
import androidx.work.OneTimeWorkRequest;
import androidx.work.OutOfQuotaPolicy;
import androidx.work.WorkManager;
import androidx.work.Worker;
import androidx.work.WorkerParameters;
@@ -37,11 +35,7 @@ public class OsmUploadWork extends Worker
if (Editor.nativeHasSomethingToUpload() && OsmOAuth.isAuthorized())
{
final Constraints c = new Constraints.Builder().setRequiredNetworkType(NetworkType.CONNECTED).build();
OneTimeWorkRequest.Builder builder = new OneTimeWorkRequest.Builder(OsmUploadWork.class).setConstraints(c);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
builder.setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST);
}
final OneTimeWorkRequest wr = builder.build();
final OneTimeWorkRequest wr = new OneTimeWorkRequest.Builder(OsmUploadWork.class).setConstraints(c).build();
WorkManager.getInstance(context).beginUniqueWork("UploadOsmChanges", ExistingWorkPolicy.KEEP, wr).enqueue();
}
}

View File

@@ -27,7 +27,6 @@
<string name="type.amenity.bench">Sitzbank</string>
<string name="type.amenity.bench.backless">Sitzbank ohne Rückenlehne</string>
<string name="type.amenity.bicycle_parking">Fahrradständer</string>
<string name="type.amenity.boat_rental">Bootsverleih</string>
<string name="type.amenity.bicycle_rental">Fahrradverleih</string>
<string name="type.amenity.bicycle_repair_station">Fahrrad-Reparaturstation</string>
<string name="type.amenity.brothel">Bordell</string>

View File

@@ -30,7 +30,6 @@
<string name="type.amenity.bench.backless">Backless Bench</string>
<string name="type.amenity.bicycle_parking">Bicycle Parking</string>
<string name="type.amenity.bicycle_parking.covered">Covered Bicycle Parking</string>
<string name="type.amenity.boat_rental">Boat Rental</string>
<string name="type.amenity.bicycle_rental">Bicycle Rental</string>
<string name="type.amenity.bicycle_repair_station">Bicycle Repair Station</string>
<string name="type.amenity.biergarten">Biergarten</string>
@@ -93,7 +92,6 @@
<string name="type.amenity.loading_dock">Loading Dock</string>
<string name="type.amenity.lounger">Lounger</string>
<string name="type.amenity.luggage_locker">Luggage Locker</string>
<string name="type.amenity.mobile_money_agent">Mobile Money Agent</string>
<string name="type.amenity.marketplace">Marketplace</string>
<string name="type.amenity.motorcycle_parking">Motorcycle Parking</string>
<string name="type.amenity.nightclub">Nightclub</string>
@@ -123,7 +121,6 @@
<string name="type.amenity.parking_space.private">Parking Space</string>
<string name="type.amenity.parking_space.underground">Parking Space</string>
<string name="type.amenity.parking_space.disabled">Disabled Parking Space</string>
<string name="type.amenity.payment_centre">Payment Centre</string>
<string name="type.amenity.payment_terminal">Payment Terminal</string>
<string name="type.amenity.pharmacy">Pharmacy</string>
<string name="type.amenity.place_of_worship">Place of Worship</string>
@@ -660,7 +657,6 @@
<string name="type.leisure.miniature_golf">Minigolf</string>
<string name="type.leisure.hackerspace">Hackerspace</string>
<string name="type.leisure.ice_rink">Ice Rink</string>
<string name="type.leisure.indoor_play">Indoor Play Centre</string>
<string name="type.leisure.marina">Marina</string>
<string name="type.leisure.nature_reserve">Nature Reserve</string>
<string name="type.leisure.outdoor_seating">Outdoor Seating</string>
@@ -1255,7 +1251,6 @@
<string name="type.shop.supermarket">Supermarket</string>
<string name="type.shop.tattoo">Tattoo Parlour</string>
<string name="type.shop.tea">Tea Shop</string>
<string name="type.shop.telecommunication">Telecommunication Shop</string>
<string name="type.shop.ticket">Ticket Shop</string>
<string name="type.shop.toys">Toy Store</string>
<string name="type.shop.travel_agency">Travel Agency</string>

View File

@@ -62,7 +62,6 @@
"shop-laundry": "4Laundry|Laundrette|laundromat",
"shop-toys|@category_children|@shop": "Toy|toyshop|kids|toys|kids toys",
"amenity-marketplace|@category_food": "3Marketplace|market",
"amenity-mobile_money_agent": "Mobile Money Agent|mobile money",
"amenity-money_transfer": "Money Transfer",
"shop-clothes|@category_shopping|@shop": "3Clothes|U+1F45A|U+1F457|U+1F456|U+1F455|clothing|wear",
"shop-caravan|@category_rv|@shop": "2RV dealership|4Caravan dealership|Motorhome dealership",
@@ -129,7 +128,6 @@
"leisure-garden": "3Garden",
"leisure-firepit": "5Firepit",
"amenity-bench|amenity-bench-backless": "Bench",
"amenity-boat_rental": "4Boat Rental|boat|3rental",
"amenity-bicycle_rental": "4Bicycle Rental|cycle|bike|3rental|U+1F6B2|U+1F6B4|U+1F6B5|bicycle hire|bike rental",
"amenity-bicycle_repair_station": "4Bicycle Repair Station|cycle|bike|4repair of bicycles",
"amenity-car_sharing": "Car Share|3carsharing|car|sharing|U+1F697|U+1F698|U+1F699|carpool|carsharing services|car sharing|4rideshare",
@@ -421,7 +419,6 @@
"amenity-parking_space-disabled|@category_parking": "Disabled Parking Space",
"amenity-nursing_home": "4Nursing Home",
"amenity-payment_terminal": "Payment Terminal",
"amenity-payment_centre": "Payment Centre",
"amenity-public_bath": "Public Bath",
"amenity-shower": "Shower",
"emergency-assembly_point": "Emergency Assembly Point",
@@ -453,7 +450,6 @@
"natural-glacier|@category_tourism": "Glacier",
"highway-ford": "Ford",
"leisure-marina": "3Marina",
"leisure-indoor_play": "3Indoor Play Centre|indoor play|indoor playground",
"piste:type-downhill|piste:type-nordic": "Skiing|3Ski run|4Piste",
"amenity-events_venue": "Events Venue",
"shop-chocolate|@category_food|@shop": "Chocolate",
@@ -463,7 +459,6 @@
"shop-music|@shop": "Record|vinyl|Music",
"shop-musical_instrument|@shop": "Musical instruments",
"shop-tea|@shop": "Tea",
"shop-telecommunication|@shop": "Telecommunication",
"shop-antiques|@category_shopping|@shop|@category_secondhand": "Antiques",
"shop-art|@category_shopping|@shop": "3Artwork|Arts",
"shop-baby_goods|@category_children|@shop": "Baby Goods",

View File

@@ -258,10 +258,6 @@
<include field="outdoor_seating" />
<include field="website_menu" />
</type>
<type id="amenity-boat_rental">
<include group="poi_internet" />
<include field="operator" />
</type>
<type id="amenity-bicycle_rental">
<include field="website" />
<include field="opening_hours" />
@@ -1062,9 +1058,6 @@
<type id="shop-tea" group="shop">
<include group="poi_internet" />
</type>
<type id="shop-telecommunication" group="shop">
<include group="poi_internet" />
</type>
<type id="shop-trade" group="shop">
<include group="poi_internet" />
</type>
@@ -1133,7 +1126,6 @@
<type id="amenity-bench" />
<type id="amenity-compressed_air" />
<type id="amenity-bbq" />
<type id="leisure-slipway" />
<type id="amenity-shelter">
<include field="name" />
</type>
@@ -1205,9 +1197,6 @@
<type id="amenity-social_facility">
<include group="poi_internet" />
</type>
<type id="amenity-payment_centre">
<include group="poi_internet" />
</type>
<type id="amenity-payment_terminal">
<include field="operator" />
<include field="level" />
@@ -1237,9 +1226,6 @@
<type id="amenity-money_transfer">
<include group="poi_internet" />
</type>
<type id="amenity-mobile_money_agent">
<include group="poi_internet" />
</type>
<type id="amenity-vehicle_inspection">
<include group="poi_internet" />
</type>
@@ -1302,9 +1288,6 @@
<include group="poi" />
<include field="operator" />
</type>
<type id="leisure-indoor_play">
<include group="poi_internet" />
</type>
<type id="leisure-fitness_centre">
<include group="poi_internet" />
</type>

View File

@@ -642,7 +642,7 @@ deprecated|deprecated;519;x
sport|diving;520;
#~270k uses.
man_made|utility_pole;521;
amenity|payment_centre;522;
deprecated:boundary|administrative|suburb:04.2024;[boundary=administrative][border_type=suburb];x;name;int_name;522;
# Generic unspecified barrier, could be node (50k) or way (100k)
barrier|yes;523;
railway|monorail|tunnel;[railway=monorail][tunnel?];;name;int_name;524;
@@ -663,7 +663,7 @@ deprecated|deprecated;538;x
railway|funicular|tunnel;[railway=funicular][tunnel?];;name;int_name;539;
barrier|cycle_barrier;540;
addr:interpolation;[addr:interpolation];;addr:housenumber;name;541;
leisure|indoor_play;542;
deprecated:amenity|speed_trap:10.2021;542;highway|speed_camera
area:highway|track;543;
area:highway|primary;544;
deprecated|deprecated;545;x
@@ -857,7 +857,7 @@ sport|skiing;732;
tourism|museum;733;
tourism|guest_house;734;
tourism|motel;735;
shop|telecommunication;736;
deprecated:boundary|administrative|4|state:01.2022;[boundary=administrative][admin_level=4][border_type=state];x;name;int_name;736;boundary|administrative|4
place|state|USA;[place=state][addr:country=US],[place=state][is_in=USA],[place=state][is_in:country=USA],[place=state][is_in:country_code=us];;name;int_name;737;
building|address;[addr:housenumber][addr:street];;addr:housenumber;name;738;
amenity|parking|no-access;[amenity=parking][access=not],[amenity=parking][access=no];;name;int_name;739;
@@ -980,7 +980,8 @@ railway|rail|tourism|bridge;[railway=rail][usage=tourism][!service][bridge?];;na
railway|rail|highspeed|tunnel;[railway=rail][highspeed?][!service][tunnel?];;name;int_name;854;
railway|rail|tourism|tunnel;[railway=rail][usage=tourism][!service][tunnel?];;name;int_name;855;
mapswithme|grid;856;
amenity|mobile_money_agent;857;
# service=bus/busway is deprecated in OSM
deprecated:highway|service|busway:10.2023;[highway=service][service=busway];x;name;int_name;857;highway|busway
highway|busway;[highway=busway],[highway=service][service=busway],[highway=service][service=bus];;name;int_name;858;
highway|busway|bridge;[highway=busway][bridge?];;name;int_name;859;
highway|busway|tunnel;[highway=busway][tunnel?];;name;int_name;860;
@@ -988,7 +989,7 @@ natural|salt_pond;861;landuse|salt_pond
amenity|conference_centre;862;
amenity|exhibition_centre;863;
deprecated:railway|siding|tunnel:06.2023;864;x
amenity|boat_rental;865;
deprecated:railway|yard|tunnel:06.2023;865;x
area:highway|footway;866;
junction|circular;867;
area:highway|residential;868;
Can't render this file because it contains an unexpected character in line 7 and column 16.

View File

@@ -1 +0,0 @@
<svg height="19" viewBox="0 0 19 19" width="19" xmlns="http://www.w3.org/2000/svg"><g fill="none" transform="translate(.3312 .9588)"><circle cx="9" cy="9" fill="#000" opacity=".6" r="9"/><circle cx="9" cy="9" fill="#6B425C" r="8.25"/><path d="m7.44735 6.64155c.6266775 0 1.16175-.4049325 1.36425-.964125h2.49225v.4820625c0 .2651325.21693.4820625.4820625.4820625s.4820625-.21693.4820625-.4820625v-.4820625c.2651325 0 .4820625-.21693.4820625-.4820625s-.21693-.4820625-.4820625-.4820625h-3.456375c-.23139-.6507825-.9063-1.07985-1.65345-.935175-.5640075.1108725-1.02195.5736525-1.132875 1.137675-.16872.9159.530265 1.72575 1.422075 1.72575zm0-1.92825c.2651325 0 .4820625.21693.4820625.4820625s-.21693.4820625-.4820625.4820625-.4820625-.21693-.4820625-.4820625.21693-.4820625.4820625-.4820625zm-1.71484793 7.891702h7.01753543c-.3091683 1-.9781318 1.5-2.0068907 1.5h-3.48081229c-.71478849 0-1.3302781-.5043681-1.47074931-1.2052179zm3.18749793-4.99999999c.89379424.94861026 1.4893498 1.67776089 1.7866668 2.18745192.297317.50969107.6428103 1.28054037 1.03648 2.31254807h-2.62497531c.12331455-.8424798.18497182-1.538368.18497182-2.0876646 0-.54929651-.12771443-1.35340832-.38314331-2.41233539zm-.17685315 1.00499799-2.12 3.495002h2.12z" fill="#000"/></g></svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -1 +0,0 @@
<svg height="18" viewBox="0 0 18 18" width="18" xmlns="http://www.w3.org/2000/svg"><g fill="none"><circle cx="9" cy="9" fill="#000" opacity=".6" r="9"/><circle cx="9" cy="9" fill="#802D19" r="8.25"/><path d="m4.33219182 13.4602521c-.56625353-.145147-1.05995548-.6661354-1.19210692-1.258018-.08901014-.3987537-.02672993-.8612893.16530454-1.2277241.12702014-.2423618.39770557-.5208347.63150605-.6497263.3295444-.1816314.40961456-.1970143 1.12899472-.2169742.63145117-.0175177.6551594-.0202617.79691486-.0920999.08035554-.04072105.70197217-.49045301 1.3813886-.99942263.67941643-.50894766 1.24429795-.91666337 1.25538374-.90596174.01106385.01065224.01704578.81354355.01328649 1.78426388l-.00683807 1.76489119-1.06258973.792744c-.58441886.4360174-1.1343181.827044-1.22196172.8689725-.32774983.1566993-.47121206.1788709-1.14046468.1762641-.38992905-.0015367-.66223894-.0150646-.74883983-.0372582zm4.82934464-.0252997-.05776137-.0649397v-8.76545977l2.19822491-1.10462793 2.198225 1.11900654v8.77369176l-.0627116.0536399c-.0527947.0451499-.1065663.0536618-.3399057.0536618-.2588862 0-.2815024-.004577-.3423974-.0688966l-.0652031-.0688746v-1.9666855h-2.78928433v1.9824361l-.06148224.0610103c-.05507774.0546497-.09057971.0610103-.34071252.0610103-.25752517 0-.28371947-.005049-.33698616-.0649452zm3.52846524-6.90776623v-1.05221738h-2.78928432v2.10443476h2.78928432z" fill="#000"/></g></svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -1 +1 @@
<svg height="19" viewBox="0 0 18 19" width="18" xmlns="http://www.w3.org/2000/svg"><g fill="none" transform="translate(0 .9588)"><circle cx="9" cy="9" fill="#000" opacity=".6" r="9"/><circle cx="9" cy="9" fill="#0a6074" r="8.25"/><path d="m14.3284836 9.91216592c-.3125594 1.01096838-.8687086 1.68342498-1.6684475 2.01736998-.1656091-.072627-.3256156-.1651861-.4807525-.2805759-.950475.675-2.27887502.675-3.23467502 0-.950475.675-2.284275.675-3.223875 0-.27744671.2030098-.56714237.3353526-.8659383.4186755-.45689288-.1859843-.80641259-.5898173-.90791437-1.0962377l-.21230169-1.05923188zm-5.78195173-7.54816592.48488347.52149022.44267432.49043051c.84313944.94980132 1.43302404 1.71324441 1.76965374 2.29032927.4488396.76944648.9704078 1.93314626 1.5647046 3.49109933h-3.96274987c.18615974-1.27183553.27923961-2.32237144.27923961-3.15160773s-.19280196-2.04315016-.57840587-3.6417416zm-.26698338 1.51717831v5.27617102h-3.20042235zm5.55269401 9.95882169c-.5724075 0-1.1124-.13-1.62-.4-.9936.54-2.241.54-3.234675 0-.9936.54-2.241.54-3.223875 0-.6642075.3726-1.4256.427-2.16.4v-.88c.7614.027 1.4958-.054 2.16-.54.9396.675 2.2734.675 3.223875 0 .9558.675 2.2842.675 3.234675 0 .6534075.486 1.3932.567 2.1492.54v.88z" fill="#000" fill-rule="evenodd"/></g></svg>
<svg height="18" viewBox="0 0 24 24" width="18" xmlns="http://www.w3.org/2000/svg"><g fill="none"><circle cx="12" cy="12" fill="#000" opacity=".6" r="12"/><circle cx="12" cy="12" fill="#0a6074" r="11"/><path d="m5.5116 12.152 5.7601-8.2584v8.2584zm6.8401 0c.97201-2.7.84241-6.3288 0-9 3.4272 1.1088 6.0481 5.328 6.0913 9zm6.1921 2.5776c-.2952.4608-.64081.8568-1.044 1.1952-.46801-.2088-.88561-.5328-1.2168-.8928-1.0728 1.3896-3.24 1.3896-4.3129 0-1.0584 1.3896-3.24 1.3896-4.2985 0-.36.36-.75601.684-1.224.8928-.82081-.6768-1.44-1.6416-1.656-2.6928h14.357c-.1152.54-.3168 1.0368-.60481 1.4976m-.1008 4.2624c-.76321 0-1.4832-.18-2.16-.54-1.3248.72-2.988.72-4.3129 0-1.3248.72-2.988.72-4.2985 0-.88561.4968-1.9008.576-2.88.54v-1.44c1.0152.036 1.9944-.072 2.88-.72 1.2528.9 3.0312.9 4.2985 0 1.2744.9 3.0456.9 4.3129 0 .87121.648 1.8576.756 2.8656.72v1.44z" fill="#000"/></g></svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 878 B

View File

@@ -1 +0,0 @@
<svg height="26" viewBox="0 0 42 26" width="42" xmlns="http://www.w3.org/2000/svg"><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#999" transform="matrix(.80255481 0 0 .44010193 .471493 3.853665)"/><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#294c88" transform="matrix(.73067099 0 0 .36912143 2.310205 5.333047)"/></svg>

Before

Width:  |  Height:  |  Size: 917 B

View File

@@ -1 +0,0 @@
<svg height="19" viewBox="0 0 30 19" width="30" xmlns="http://www.w3.org/2000/svg"><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#999" transform="matrix(.57716453 0 0 .31650328 .236739 2.944845)"/><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#294c88" transform="matrix(.52546863 0 0 .26545702 1.559066 4.008757)"/></svg>

Before

Width:  |  Height:  |  Size: 917 B

View File

@@ -1 +0,0 @@
<svg height="26" viewBox="0 0 42 26" width="42" xmlns="http://www.w3.org/2000/svg"><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#999" transform="matrix(.80255481 0 0 .44010193 .471493 3.853665)"/><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#136c30" transform="matrix(.73067099 0 0 .36912143 2.310205 5.333047)"/></svg>

Before

Width:  |  Height:  |  Size: 917 B

View File

@@ -1 +0,0 @@
<svg height="19" viewBox="0 0 30 19" width="30" xmlns="http://www.w3.org/2000/svg"><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#999" transform="matrix(.57716453 0 0 .31650328 .236739 2.944845)"/><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#136c30" transform="matrix(.52546863 0 0 .26545702 1.559066 4.008757)"/></svg>

Before

Width:  |  Height:  |  Size: 917 B

View File

@@ -1 +0,0 @@
<svg height="26" viewBox="0 0 42 26" width="42" xmlns="http://www.w3.org/2000/svg"><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#999" transform="matrix(.80255481 0 0 .44010193 .471493 3.853665)"/><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#9f1a17" transform="matrix(.73067099 0 0 .36912143 2.310205 5.333047)"/></svg>

Before

Width:  |  Height:  |  Size: 917 B

View File

@@ -1 +0,0 @@
<svg height="19" viewBox="0 0 30 19" width="30" xmlns="http://www.w3.org/2000/svg"><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#999" transform="matrix(.57716453 0 0 .31650328 .236739 2.944845)"/><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#9f1a17" transform="matrix(.52546863 0 0 .26545702 1.559066 4.008757)"/></svg>

Before

Width:  |  Height:  |  Size: 917 B

View File

@@ -1 +0,0 @@
<svg height="26" viewBox="0 0 42 26" width="42" xmlns="http://www.w3.org/2000/svg"><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#212121" transform="matrix(.80255481 0 0 .44010193 .471493 3.853665)"/><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#9f5a17" transform="matrix(.73067099 0 0 .36912143 2.310205 5.333047)"/></svg>

Before

Width:  |  Height:  |  Size: 920 B

View File

@@ -1 +0,0 @@
<svg height="19" viewBox="0 0 30 19" width="30" xmlns="http://www.w3.org/2000/svg"><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#212121" transform="matrix(.57716453 0 0 .31650328 .236739 2.944845)"/><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#9f5a17" transform="matrix(.52546863 0 0 .26545702 1.559066 4.008757)"/></svg>

Before

Width:  |  Height:  |  Size: 920 B

View File

@@ -1 +0,0 @@
<svg height="19" viewBox="0 0 19 19" width="19" xmlns="http://www.w3.org/2000/svg"><path d="m2.885 12.0615528 12.23 3.2475375h-12.23zm1.11669573-3.0534098 10.69279887 2.8651268c-.8793687 1.3974981-2.1028262 1.8862358-3.6703724 1.4662131l-5.30380311-1.4211498c-1.08914156-.2918346-1.82105491-1.311646-1.74895082-2.43690057zm6.89827777-6.31723332.3483726.65749533c.7729657 1.48426312 1.2666065 2.61927763 1.4809223 3.40504355.2449323.89801819.4566462 2.21363954.6351416 3.94686404l-3.99974232-1.07172772c.53186611-1.23336117.90993282-2.26853038 1.13420022-3.10550762.2242674-.83697725.3579692-2.11436644.4011056-3.83216758zm-.6797974 1.45913545-1.4269431 5.32542429-3.23029843-.86555585z" fill="#777" transform="translate(.6688 .9588)"/></svg>

Before

Width:  |  Height:  |  Size: 741 B

View File

@@ -1 +0,0 @@
<svg height="18" viewBox="0 0 19 18" width="19" xmlns="http://www.w3.org/2000/svg"><path d="m7.33124024 14.0849349.37500187-.5625h-.95625l-1.125 1.6875h.35416688c.37614937 0 .727425-.1879875.93605625-.5009625l.04102537-.0615375h4.08751879l.0410253.0615375c.2086482.312975.5599069.5009625.9360563.5009625h.3541669l-1.125-1.6875h-.95625l.3750018.5625zm.19884375-7.87500002h2.93979371c.90675 0 1.6513875.71656875 1.6862625 1.62264375l.1739082 4.52159997c.0222862.5794951-.3977995 1.073387-.9587146 1.1561005l-.1438562.0119417-4.43342261.0002141c-.579915 0-1.057322-.4387607-1.11839886-1.0024188l-.00576993-.1658206.17390813-4.52160017c.03291306-.8557375.69896291-1.542455 1.53673222-1.61611578zm-.2607975 1.40623031c-.293265 0-.5373225.22532907-.56071125.51766032l-.13678875 1.73235656c0 .31065753.2518425.56250003.5625.56250003l3.75384621-.0004472.0224103-.0013416c.3096732-.0247736.5406244-.2958919.5158519-.60558748l-.135-1.6875c-.0233887-.29233125-.2674406-.51764063-.5607112-.51764063zm.04320281 4.78126971c.3106575 0 .5625-.2518425.5625-.5625s-.2518425-.5625-.5625-.5625-.5625.2518425-.5625.5625.2518425.5625.5625.5625zm3.375 0c.3106575 0 .5625-.2518425.5625-.5625s-.2518425-.5625-.5625-.5625-.5625.2518425-.5625.5625.2518425.5625.5625.5625zm-2.671875-5.62500002c-.07766437 0-.140625.06296062-.140625.140625s.06296063.140625.140625.140625h1.96875003c.07766437 0 .14062497-.06296062.14062497-.140625s-.0629606-.140625-.14062497-.140625zm-4.2392211-1.60024446 5.2236068-2.6118034 5.2236068 2.6118034c.2469892.12349462.3471014.42383114.2236068.67082039s-.4238311.34710142-.6708204.2236068l-4.7763932-2.3882136-4.7763932 2.3882136c-.219546.109773-.48124293.04286902-.62342158-.1468222l-.04739882-.0767846c-.12349462-.24698925-.02338245-.54732577.2236068-.67082039z" fill="#777" transform="translate(.6869)"/></svg>

Before

Width:  |  Height:  |  Size: 1.8 KiB

View File

@@ -844,7 +844,6 @@ node|z17-[amenity=casino],
node|z17-[amenity=gambling],
node|z17-[leisure=adult_gaming_centre],
node|z17-[leisure=amusement_arcade],
node|z17-[leisure=indoor_play],
node|z17-[amenity=courthouse],
node|z17-[amenity=nursing_home],
node|z17-[amenity=social_facility],
@@ -866,11 +865,9 @@ node|z17-[amenity=vending_machine][vending=parking_tickets],
node|z17-[amenity=vending_machine][vending=public_transport_tickets],
node|z17-[amenity=payment_terminal],
node|z17-[amenity=shower],
node|z17-[amenity=slipway],
node|z17-[amenity=motorcycle_rental],
node|z17-[amenity=bicycle_rental],
node|z17-[amenity=bicycle_repair_station],
node|z17-[amenity=boat_rental],
node|z17-[amenity=post_office],
node|z17-[amenity=library],
node|z18-[post_office=post_partner],
@@ -924,8 +921,6 @@ node|z18-[amenity=toilets],
node|z18-[amenity=atm],
node|z18-[amenity=bureau_de_change],
node|z18-[amenity=money_transfer],
node|z18-[amenity=mobile_money_agent],
node|z18-[amenity=payment_centre],
node|z18-[amenity=waste_disposal],
node|z18-[amenity=recycling],
node|z16-[amenity=recycling][recycling_type=centre],
@@ -1424,9 +1419,6 @@ node|z17-[leisure=amusement_arcade],
node|z18-[shop=lottery],
{icon-image: lottery-m.svg;}
node|z17-[leisure=indoor_play],
{icon-image: indoor_play-m.svg;icon-min-distance: 20;}
node|z17-[amenity=courthouse],
{icon-image: public-building-m.svg;}
@@ -1460,9 +1452,6 @@ node|z16-17[building=guardhouse],
node|z16-[building=guardhouse]::int_name,
{text: none;}
node|z17-[building=train_station],
{icon-image: train_building-m.svg; font-size: 11; text-offset: 1;}
node|z17-[amenity=prison],
{icon-image: prison-m.svg;}
node|z18-[amenity=prison],
@@ -1481,11 +1470,6 @@ node|z17-[amenity=motorcycle_rental],
node|z18-[amenity=motorcycle_rental],
{font-size: 11;}
node|z17-[amenity=boat_rental],
{icon-image: boat-rental.svg;}
node|z18-[amenity=boat_rental],
{font-size: 11;}
node|z17-[amenity=bicycle_rental],
{icon-image: bicycle-rental.svg;}
node|z18-[amenity=bicycle_rental],
@@ -1554,9 +1538,6 @@ node|z15-[power=plant][plant:source=wind],
node|z16-[power=plant][plant:source=wind],
{text: name;text-color: @neutral_label;text-halo-radius: 1;text-halo-opacity: 0.9;text-halo-color: @label_halo_light; text-offset: 1; font-size: 10;}
node|z17-[leisure=slipway],
{icon-image: slipway-m.svg;}
node|z17-[amenity=shower],
{icon-image: shower-m.svg;}
@@ -1581,8 +1562,6 @@ node|z17-[aeroway=gate],
node|z17-[amenity=bureau_de_change],
node|z17-[amenity=money_transfer],
node|z17-[amenity=mobile_money_agent],
node|z17-[amenity=payment_centre],
{icon-image: banknote-m.svg;font-size: 11;}
node|z16-[amenity=fire_station],
@@ -1729,7 +1708,6 @@ node|z16-[shop=laundry],
node|z16-[shop=lighting],
node|z16-[shop=dry_cleaning],
node|z16-[shop=mobile_phone],
node|z16-[shop=telecommunication],
node|z16-[shop=optician],
node|z16-[shop=outdoor],
node|z16-[shop=rental],
@@ -1896,7 +1874,6 @@ node|z16[shop=laundry],
node|z16[shop=dry_cleaning],
{icon-image:dry_cleaning-m.svg;}
node|z16[shop=mobile_phone],
node|z16[shop=telecommunication],
{icon-image: mobile_phone-m.svg;}
node|z16[shop=optician],
{icon-image: optician-m.svg;}
@@ -2043,7 +2020,6 @@ node|z17-[shop=laundry],
node|z17-[shop=dry_cleaning],
{icon-image:dry_cleaning-m.svg;icon-min-distance: 24;}
node|z17-[shop=mobile_phone],
node|z17-[shop=telecommunication],
{icon-image: mobile_phone-m.svg;icon-min-distance: 24;}
node|z17-[shop=optician],
{icon-image: optician-m.svg;icon-min-distance: 24;}

View File

@@ -1,7 +1,6 @@
/* Setting the colors for all POI icons */
/* Please add new items so that they fit in the existing alphabetical order */
node[amenity=boat_rental],
node[amenity=car_rental],
node[amenity=car_sharing],
node[amenity=internet_cafe],
@@ -57,7 +56,6 @@ node[leisure=adult_gaming_centre],
node[leisure=amusement_arcade],
node[leisure=bowling_alley],
node[leisure=escape_game],
node[leisure=indoor_play],
node[shop=bookmaker],
node[shop=lottery],
node[tourism=aquarium],
@@ -120,11 +118,9 @@ node[amenity=fire_station],
node[amenity=kindergarten],
node[amenity=language_school],
node[amenity=library],
node[amenity=mobile_money_agent],
node[amenity=money_transfer],
node[amenity=music_school],
node[amenity=nursing_home],
node[amenity=payment_centre],
node[amenity=police],
node[amenity=post_office],
node[amenity=prison],

View File

@@ -400,7 +400,7 @@ building # area z14- (also has captio
building-garage # area z14- (also has caption z17-)
building-guardhouse # area z14- (also has icon z18-, caption(optional) z18-)
building-has_parts # area z14- (also has caption z17-)
building-train_station # area z14- (also has icon z17-, caption(optional) z17-)
building-train_station # area z14- (also has caption z17-)
=== 130
piste:type-connection # line z15-

View File

@@ -773,7 +773,6 @@ shop-health_food # icon z16- (also has captio
=== 2700
amenity-bicycle_rental # icon z17- (also has caption(optional) z17-)
amenity-boat_rental # icon z17- (also has caption(optional) z17-)
amenity-car_sharing # icon z18- (also has caption(optional) z18-)
amenity-taxi # icon z16- (also has caption(optional) z16-)
=== 2600
@@ -867,7 +866,6 @@ shop-shoes # icon z16- (also has captio
shop-sports # icon z16- (also has caption(optional) z16-)
shop-stationery # icon z16- (also has caption(optional) z16-)
shop-tea # icon z18- (also has caption(optional) z18-)
shop-telecommunication # icon z16- (also has caption(optional) z16-)
shop-toys # icon z16- (also has caption(optional) z16-)
shop-travel_agency # icon z18- (also has caption(optional) z18-)
shop-wine # icon z16- (also has caption(optional) z16-)
@@ -918,7 +916,7 @@ natural-wetland-tidalflat # caption z16- (also has are
tourism-picnic_site # icon z16- (also has caption(optional) z16-)
=== 1800
building-train_station # icon z17- (also has caption(optional) z17-, area z14-)
building-train_station # caption z17- (also has area z14-)
railway-level_crossing # icon z17-
=== 1700
@@ -968,10 +966,8 @@ amenity-childcare # icon z17- (also has captio
amenity-doctors # icon z17- (also has caption(optional) z17-, area z15-)
amenity-driving_school # icon z17- (also has caption(optional) z17-)
amenity-language_school # icon z17- (also has caption(optional) z17-)
amenity-mobile_money_agent # icon z17- (also has caption(optional) z18-)
amenity-money_transfer # icon z17- (also has caption(optional) z18-)
amenity-music_school # icon z17- (also has caption(optional) z17-)
amenity-payment_centre # icon z17- (also has caption(optional) z18-)
amenity-recycling-centre # icon z16- (also has caption(optional) z16-, area z15-)
amenity-veterinary # icon z16- (also has caption(optional) z16-)
craft-electrician # icon z17- (also has caption(optional) z18-)
@@ -1204,7 +1200,6 @@ healthcare-psychotherapist # icon z17- (also has captio
healthcare-speech_therapist # icon z17- (also has caption(optional) z17-)
leisure-adult_gaming_centre # icon z17- (also has caption(optional) z17-)
leisure-amusement_arcade # icon z17- (also has caption(optional) z17-)
leisure-indoor_play # icon z17- (also has caption(optional) z17-)
office-company # icon z18- (also has caption(optional) z18-)
office-ngo # icon z18- (also has caption(optional) z18-)
office-telecommunication # icon z18- (also has caption(optional) z18-)
@@ -1321,7 +1316,7 @@ landuse-railway # caption z15- (also has are
landuse-residential # caption z17-
landuse-retail # caption z16- (also has area z13-)
leisure-common # caption z17-
leisure-slipway # icon z17- (also has caption(optional) z17-)
leisure-slipway # caption z17-
leisure-track # caption z16- (also has line z15-)
leisure-track-area # caption z16- (also has area z15-)
man_made-petroleum_well # icon z17- (also has caption(optional) z18-)
@@ -1815,7 +1810,6 @@ leisure-swimming_pool-private # icon z17- (also has captio
# === -7300
# amenity-bicycle_rental # caption(optional) z17- (also has icon z17-)
# amenity-boat_rental # caption(optional) z17- (also has icon z17-)
# amenity-car_sharing # caption(optional) z18- (also has icon z18-)
# amenity-taxi # caption(optional) z16- (also has icon z16-)
# === -7400
@@ -1905,7 +1899,6 @@ leisure-swimming_pool-private # icon z17- (also has captio
# shop-sports # caption(optional) z16- (also has icon z16-)
# shop-stationery # caption(optional) z16- (also has icon z16-)
# shop-tea # caption(optional) z18- (also has icon z18-)
# shop-telecommunication # caption(optional) z16- (also has icon z16-)
# shop-toys # caption(optional) z16- (also has icon z16-)
# shop-travel_agency # caption(optional) z18- (also has icon z18-)
# shop-wine # caption(optional) z16- (also has icon z16-)
@@ -1941,9 +1934,6 @@ leisure-swimming_pool-private # icon z17- (also has captio
# tourism-picnic_site # caption(optional) z16- (also has icon z16-)
# === -8200
# building-train_station # caption(optional) z17- (also has icon z17-, area z14-)
# === -8300
# leisure-sports_centre-sport-swimming # caption(optional) z15- (also has icon z15-, area z13-)
# === -8380
@@ -1987,10 +1977,8 @@ leisure-swimming_pool-private # icon z17- (also has captio
# amenity-doctors # caption(optional) z17- (also has icon z17-, area z15-)
# amenity-driving_school # caption(optional) z17- (also has icon z17-)
# amenity-language_school # caption(optional) z17- (also has icon z17-)
# amenity-mobile_money_agent # caption(optional) z18- (also has icon z17-)
# amenity-money_transfer # caption(optional) z18- (also has icon z17-)
# amenity-music_school # caption(optional) z17- (also has icon z17-)
# amenity-payment_centre # caption(optional) z18- (also has icon z17-)
# amenity-recycling-centre # caption(optional) z16- (also has icon z16-, area z15-)
# amenity-veterinary # caption(optional) z16- (also has icon z16-)
# craft-electrician # caption(optional) z18- (also has icon z17-)
@@ -2200,7 +2188,6 @@ leisure-swimming_pool-private # icon z17- (also has captio
# healthcare-speech_therapist # caption(optional) z17- (also has icon z17-)
# leisure-adult_gaming_centre # caption(optional) z17- (also has icon z17-)
# leisure-amusement_arcade # caption(optional) z17- (also has icon z17-)
# leisure-indoor_play # caption(optional) z17- (also has icon z17-)
# office-company # caption(optional) z18- (also has icon z18-)
# office-ngo # caption(optional) z18- (also has icon z18-)
# office-telecommunication # caption(optional) z18- (also has icon z18-)
@@ -2291,7 +2278,6 @@ leisure-swimming_pool-private # icon z17- (also has captio
# landuse-industrial-mine # caption(optional) z15- (also has icon z15-, area z13-)
# landuse-landfill # caption(optional) z15- (also has icon z15-, area z13-)
# landuse-quarry # caption(optional) z15- (also has icon z15-, area z13-)
# leisure-slipway # caption(optional) z17- (also has icon z17-)
# man_made-petroleum_well # caption(optional) z18- (also has icon z17-)
# power-generator-wind # caption(optional) z18- (also has icon z15-, area z13-)
# === -9880

View File

@@ -1 +0,0 @@
<svg height="19" viewBox="0 0 19 19" width="19" xmlns="http://www.w3.org/2000/svg"><g fill="none" transform="translate(.3312 .9588)"><circle cx="9" cy="9" fill="#fff" opacity=".6" r="9"/><circle cx="9" cy="9" fill="#be75a3" r="8.25"/><path d="m7.44735 6.64155c.6266775 0 1.16175-.4049325 1.36425-.964125h2.49225v.4820625c0 .2651325.21693.4820625.4820625.4820625s.4820625-.21693.4820625-.4820625v-.4820625c.2651325 0 .4820625-.21693.4820625-.4820625s-.21693-.4820625-.4820625-.4820625h-3.456375c-.23139-.6507825-.9063-1.07985-1.65345-.935175-.5640075.1108725-1.02195.5736525-1.132875 1.137675-.16872.9159.530265 1.72575 1.422075 1.72575zm0-1.92825c.2651325 0 .4820625.21693.4820625.4820625s-.21693.4820625-.4820625.4820625-.4820625-.21693-.4820625-.4820625.21693-.4820625.4820625-.4820625zm-1.71484793 7.891702h7.01753543c-.3091683 1-.9781318 1.5-2.0068907 1.5h-3.48081229c-.71478849 0-1.3302781-.5043681-1.47074931-1.2052179zm3.18749793-4.99999999c.89379424.94861026 1.4893498 1.67776089 1.7866668 2.18745192.297317.50969107.6428103 1.28054037 1.03648 2.31254807h-2.62497531c.12331455-.8424798.18497182-1.538368.18497182-2.0876646 0-.54929651-.12771443-1.35340832-.38314331-2.41233539zm-.17685315 1.00499799-2.12 3.495002h2.12z" fill="#fff"/></g></svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -1 +0,0 @@
<svg height="18" viewBox="0 0 18 18" width="18" xmlns="http://www.w3.org/2000/svg"><g fill="none"><circle cx="9" cy="9" fill="#fff" opacity=".6" r="9"/><circle cx="9" cy="9" fill="#eb785d" r="8.25"/><path d="m4.33219182 13.4602521c-.56625353-.145147-1.05995548-.6661354-1.19210692-1.258018-.08901014-.3987537-.02672993-.8612893.16530454-1.2277241.12702014-.2423618.39770557-.5208347.63150605-.6497263.3295444-.1816314.40961456-.1970143 1.12899472-.2169742.63145117-.0175177.6551594-.0202617.79691486-.0920999.08035554-.04072105.70197217-.49045301 1.3813886-.99942263.67941643-.50894766 1.24429795-.91666337 1.25538374-.90596174.01106385.01065224.01704578.81354355.01328649 1.78426388l-.00683807 1.76489119-1.06258973.792744c-.58441886.4360174-1.1343181.827044-1.22196172.8689725-.32774983.1566993-.47121206.1788709-1.14046468.1762641-.38992905-.0015367-.66223894-.0150646-.74883983-.0372582zm4.82934464-.0252997-.05776137-.0649397v-8.76545977l2.19822491-1.10462793 2.198225 1.11900654v8.77369176l-.0627116.0536399c-.0527947.0451499-.1065663.0536618-.3399057.0536618-.2588862 0-.2815024-.004577-.3423974-.0688966l-.0652031-.0688746v-1.9666855h-2.78928433v1.9824361l-.06148224.0610103c-.05507774.0546497-.09057971.0610103-.34071252.0610103-.25752517 0-.28371947-.005049-.33698616-.0649452zm3.52846524-6.90776623v-1.05221738h-2.78928432v2.10443476h2.78928432z" fill="#fff"/></g></svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -1 +1 @@
<svg height="19" viewBox="0 0 18 19" width="18" xmlns="http://www.w3.org/2000/svg"><g fill="none" transform="translate(0 .9588)"><circle cx="9" cy="9" fill="#fff" opacity=".6" r="9"/><circle cx="9" cy="9" fill="#0797b8" r="8.25"/><path d="m14.3284836 9.91216592c-.3125594 1.01096838-.8687086 1.68342498-1.6684475 2.01736998-.1656091-.072627-.3256156-.1651861-.4807525-.2805759-.950475.675-2.27887502.675-3.23467502 0-.950475.675-2.284275.675-3.223875 0-.27744671.2030098-.56714237.3353526-.8659383.4186755-.45689288-.1859843-.80641259-.5898173-.90791437-1.0962377l-.21230169-1.05923188zm-5.78195173-7.54816592.48488347.52149022.44267432.49043051c.84313944.94980132 1.43302404 1.71324441 1.76965374 2.29032927.4488396.76944648.9704078 1.93314626 1.5647046 3.49109933h-3.96274987c.18615974-1.27183553.27923961-2.32237144.27923961-3.15160773s-.19280196-2.04315016-.57840587-3.6417416zm-.26698338 1.51717831v5.27617102h-3.20042235zm5.55269401 9.95882169c-.5724075 0-1.1124-.13-1.62-.4-.9936.54-2.241.54-3.234675 0-.9936.54-2.241.54-3.223875 0-.6642075.3726-1.4256.427-2.16.4v-.88c.7614.027 1.4958-.054 2.16-.54.9396.675 2.2734.675 3.223875 0 .9558.675 2.2842.675 3.234675 0 .6534075.486 1.3932.567 2.1492.54v.88z" fill="#fff" fill-rule="evenodd"/></g></svg>
<svg height="18" viewBox="0 0 24 24" width="18" xmlns="http://www.w3.org/2000/svg"><g fill="none"><circle cx="12" cy="12" fill="#fff" opacity=".6" r="12"/><circle cx="12" cy="12" fill="#0797b8" r="11"/><path d="m5.5116 12.152 5.7601-8.2584v8.2584zm6.8401 0c.97201-2.7.84241-6.3288 0-9 3.4272 1.1088 6.0481 5.328 6.0913 9zm6.1921 2.5776c-.2952.4608-.64081.8568-1.044 1.1952-.46801-.2088-.88561-.5328-1.2168-.8928-1.0728 1.3896-3.24 1.3896-4.3129 0-1.0584 1.3896-3.24 1.3896-4.2985 0-.36.36-.75601.684-1.224.8928-.82081-.6768-1.44-1.6416-1.656-2.6928h14.357c-.1152.54-.3168 1.0368-.60481 1.4976m-.1008 4.2624c-.76321 0-1.4832-.18-2.16-.54-1.3248.72-2.988.72-4.3129 0-1.3248.72-2.988.72-4.2985 0-.88561.4968-1.9008.576-2.88.54v-1.44c1.0152.036 1.9944-.072 2.88-.72 1.2528.9 3.0312.9 4.2985 0 1.2744.9 3.0456.9 4.3129 0 .87121.648 1.8576.756 2.8656.72v1.44z" fill="#fff"/></g></svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 878 B

View File

@@ -1 +0,0 @@
<svg height="26" viewBox="0 0 42 26" width="42" xmlns="http://www.w3.org/2000/svg"><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#fff" transform="matrix(.80255481 0 0 .44010193 .471493 3.853665)"/><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#1a5ec1" transform="matrix(.73067099 0 0 .36912143 2.310205 5.333047)"/></svg>

Before

Width:  |  Height:  |  Size: 917 B

View File

@@ -1 +0,0 @@
<svg height="19" viewBox="0 0 30 19" width="30" xmlns="http://www.w3.org/2000/svg"><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#fff" transform="matrix(.57716453 0 0 .31650328 .236739 2.944845)"/><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#1a5ec1" transform="matrix(.52546863 0 0 .26545702 1.559066 4.008757)"/></svg>

Before

Width:  |  Height:  |  Size: 917 B

View File

@@ -1 +0,0 @@
<svg height="26" viewBox="0 0 42 26" width="42" xmlns="http://www.w3.org/2000/svg"><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#fff" transform="matrix(.80255481 0 0 .44010193 .471493 3.853665)"/><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#309302" transform="matrix(.73067099 0 0 .36912143 2.310205 5.333047)"/></svg>

Before

Width:  |  Height:  |  Size: 917 B

View File

@@ -1 +0,0 @@
<svg height="19" viewBox="0 0 30 19" width="30" xmlns="http://www.w3.org/2000/svg"><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#fff" transform="matrix(.57716453 0 0 .31650328 .236739 2.944845)"/><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#309302" transform="matrix(.52546863 0 0 .26545702 1.559066 4.008757)"/></svg>

Before

Width:  |  Height:  |  Size: 917 B

View File

@@ -1 +0,0 @@
<svg height="26" viewBox="0 0 42 26" width="42" xmlns="http://www.w3.org/2000/svg"><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#fff" transform="matrix(.80255481 0 0 .44010193 .471493 3.853665)"/><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#e63534" transform="matrix(.73067099 0 0 .36912143 2.310205 5.333047)"/></svg>

Before

Width:  |  Height:  |  Size: 917 B

View File

@@ -1 +0,0 @@
<svg height="19" viewBox="0 0 30 19" width="30" xmlns="http://www.w3.org/2000/svg"><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#fff" transform="matrix(.57716453 0 0 .31650328 .236739 2.944845)"/><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#e63534" transform="matrix(.52546863 0 0 .26545702 1.559066 4.008757)"/></svg>

Before

Width:  |  Height:  |  Size: 917 B

View File

@@ -1 +0,0 @@
<svg height="26" viewBox="0 0 42 26" width="42" xmlns="http://www.w3.org/2000/svg"><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" transform="matrix(.80255481 0 0 .44010193 .471493 3.853665)"/><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#c97600" transform="matrix(.73067099 0 0 .36912143 2.310205 5.333047)"/></svg>

Before

Width:  |  Height:  |  Size: 905 B

View File

@@ -1 +0,0 @@
<svg height="19" viewBox="0 0 30 19" width="30" xmlns="http://www.w3.org/2000/svg"><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" transform="matrix(.57716453 0 0 .31650328 .236739 2.944845)"/><path d="m49.367237 34.576282c-.82405 1.427297-22.140189 13.734175-23.78829 13.734175s-22.9642395-12.306878-23.7882901-13.734176c-.82405051-1.427297-.8240504-26.0410535.0000001-27.4683509.8240506-1.4272974 22.140189-13.7341756 23.78829-13.7341756s22.96424 12.3068784 23.78829 13.7341758c.824051 1.4272974.824051 26.0410537 0 27.4683517z" fill="#c97600" transform="matrix(.52546863 0 0 .26545702 1.559066 4.008757)"/></svg>

Before

Width:  |  Height:  |  Size: 905 B

View File

@@ -1 +0,0 @@
<svg height="19" viewBox="0 0 19 19" width="19" xmlns="http://www.w3.org/2000/svg"><path d="m2.885 12.0615528 12.23 3.2475375h-12.23zm1.11669573-3.0534098 10.69279887 2.8651268c-.8793687 1.3974981-2.1028262 1.8862358-3.6703724 1.4662131l-5.30380311-1.4211498c-1.08914156-.2918346-1.82105491-1.311646-1.74895082-2.43690057zm6.89827777-6.31723332.3483726.65749533c.7729657 1.48426312 1.2666065 2.61927763 1.4809223 3.40504355.2449323.89801819.4566462 2.21363954.6351416 3.94686404l-3.99974232-1.07172772c.53186611-1.23336117.90993282-2.26853038 1.13420022-3.10550762.2242674-.83697725.3579692-2.11436644.4011056-3.83216758zm-.6797974 1.45913545-1.4269431 5.32542429-3.23029843-.86555585z" fill="#747e86" transform="translate(.6688 .9588)"/></svg>

Before

Width:  |  Height:  |  Size: 744 B

View File

@@ -1 +0,0 @@
<svg height="18" viewBox="0 0 19 18" width="19" xmlns="http://www.w3.org/2000/svg"><path d="m7.33124024 14.0849349.37500187-.5625h-.95625l-1.125 1.6875h.35416688c.37614937 0 .727425-.1879875.93605625-.5009625l.04102537-.0615375h4.08751879l.0410253.0615375c.2086482.312975.5599069.5009625.9360563.5009625h.3541669l-1.125-1.6875h-.95625l.3750018.5625zm.19884375-7.87500002h2.93979371c.90675 0 1.6513875.71656875 1.6862625 1.62264375l.1739082 4.52159997c.0222862.5794951-.3977995 1.073387-.9587146 1.1561005l-.1438562.0119417-4.43342261.0002141c-.579915 0-1.057322-.4387607-1.11839886-1.0024188l-.00576993-.1658206.17390813-4.52160017c.03291306-.8557375.69896291-1.542455 1.53673222-1.61611578zm-.2607975 1.40623031c-.293265 0-.5373225.22532907-.56071125.51766032l-.13678875 1.73235656c0 .31065753.2518425.56250003.5625.56250003l3.75384621-.0004472.0224103-.0013416c.3096732-.0247736.5406244-.2958919.5158519-.60558748l-.135-1.6875c-.0233887-.29233125-.2674406-.51764063-.5607112-.51764063zm.04320281 4.78126971c.3106575 0 .5625-.2518425.5625-.5625s-.2518425-.5625-.5625-.5625-.5625.2518425-.5625.5625.2518425.5625.5625.5625zm3.375 0c.3106575 0 .5625-.2518425.5625-.5625s-.2518425-.5625-.5625-.5625-.5625.2518425-.5625.5625.2518425.5625.5625.5625zm-2.671875-5.62500002c-.07766437 0-.140625.06296062-.140625.140625s.06296063.140625.140625.140625h1.96875003c.07766437 0 .14062497-.06296062.14062497-.140625s-.0629606-.140625-.14062497-.140625zm-4.2392211-1.60024446 5.2236068-2.6118034 5.2236068 2.6118034c.2469892.12349462.3471014.42383114.2236068.67082039s-.4238311.34710142-.6708204.2236068l-4.7763932-2.3882136-4.7763932 2.3882136c-.219546.109773-.48124293.04286902-.62342158-.1468222l-.04739882-.0767846c-.12349462-.24698925-.02338245-.54732577.2236068-.67082039z" fill="#747e86" transform="translate(.6869)"/></svg>

Before

Width:  |  Height:  |  Size: 1.8 KiB

View File

@@ -402,7 +402,7 @@ building # area z14- (also has captio
building-garage # area z14- (also has caption z17-)
building-guardhouse # area z14- (also has icon z16-, caption(optional) z18-)
building-has_parts # area z14- (also has caption z17-)
building-train_station # area z14- (also has icon z17-, caption(optional) z17-)
building-train_station # area z14- (also has caption z17-)
=== 130
piste:type-connection # line z15-

View File

@@ -773,7 +773,6 @@ shop-health_food # icon z16- (also has captio
=== 2700
amenity-bicycle_rental # icon z17- (also has caption(optional) z17-)
amenity-boat_rental # icon z17- (also has caption(optional) z17-)
amenity-car_sharing # icon z18- (also has caption(optional) z18-)
amenity-taxi # icon z16- (also has caption(optional) z16-)
=== 2600
@@ -867,7 +866,6 @@ shop-shoes # icon z16- (also has captio
shop-sports # icon z16- (also has caption(optional) z16-)
shop-stationery # icon z16- (also has caption(optional) z16-)
shop-tea # icon z18- (also has caption(optional) z18-)
shop-telecommunication # icon z16- (also has caption(optional) z16-)
shop-toys # icon z16- (also has caption(optional) z16-)
shop-travel_agency # icon z18- (also has caption(optional) z18-)
shop-wine # icon z16- (also has caption(optional) z16-)
@@ -918,7 +916,7 @@ natural-wetland-tidalflat # caption z16- (also has are
tourism-picnic_site # icon z14- (also has caption(optional) z14-)
=== 1800
building-train_station # icon z17- (also has caption(optional) z17-, area z14-)
building-train_station # caption z17- (also has area z14-)
railway-level_crossing # icon z17-
=== 1700
@@ -968,10 +966,8 @@ amenity-childcare # icon z17- (also has captio
amenity-doctors # icon z17- (also has caption(optional) z17-, area z15-)
amenity-driving_school # icon z17- (also has caption(optional) z17-)
amenity-language_school # icon z17- (also has caption(optional) z17-)
amenity-mobile_money_agent # icon z17- (also has caption(optional) z18-)
amenity-money_transfer # icon z17- (also has caption(optional) z18-)
amenity-music_school # icon z17- (also has caption(optional) z17-)
amenity-payment_centre # icon z17- (also has caption(optional) z18-)
amenity-recycling-centre # icon z16- (also has caption(optional) z16-, area z15-)
amenity-veterinary # icon z16- (also has caption(optional) z16-)
craft-electrician # icon z17- (also has caption(optional) z18-)
@@ -1205,7 +1201,6 @@ healthcare-psychotherapist # icon z17- (also has captio
healthcare-speech_therapist # icon z17- (also has caption(optional) z17-)
leisure-adult_gaming_centre # icon z17- (also has caption(optional) z17-)
leisure-amusement_arcade # icon z17- (also has caption(optional) z17-)
leisure-indoor_play # icon z17- (also has caption(optional) z17-)
office-company # icon z18- (also has caption(optional) z18-)
office-ngo # icon z18- (also has caption(optional) z18-)
office-telecommunication # icon z18- (also has caption(optional) z18-)
@@ -1324,7 +1319,7 @@ landuse-railway # caption z15- (also has are
landuse-residential # caption z17-
landuse-retail # caption z16- (also has area z13-)
leisure-common # caption z17-
leisure-slipway # icon z17- (also has caption(optional) z17-)
leisure-slipway # caption z17-
leisure-track # caption z16- (also has line z15-)
leisure-track-area # caption z16- (also has area z15-)
man_made-petroleum_well # icon z14- (also has caption(optional) z18-)
@@ -1818,7 +1813,6 @@ leisure-swimming_pool-private # icon z17- (also has captio
# === -7300
# amenity-bicycle_rental # caption(optional) z17- (also has icon z17-)
# amenity-boat_rental # caption(optional) z17- (also has icon z17-)
# amenity-car_sharing # caption(optional) z18- (also has icon z18-)
# amenity-taxi # caption(optional) z16- (also has icon z16-)
# === -7400
@@ -1908,7 +1902,6 @@ leisure-swimming_pool-private # icon z17- (also has captio
# shop-sports # caption(optional) z16- (also has icon z16-)
# shop-stationery # caption(optional) z16- (also has icon z16-)
# shop-tea # caption(optional) z18- (also has icon z18-)
# shop-telecommunication # caption(optional) z16- (also has icon z16-)
# shop-toys # caption(optional) z16- (also has icon z16-)
# shop-travel_agency # caption(optional) z18- (also has icon z18-)
# shop-wine # caption(optional) z16- (also has icon z16-)
@@ -1944,9 +1937,6 @@ leisure-swimming_pool-private # icon z17- (also has captio
# tourism-picnic_site # caption(optional) z14- (also has icon z14-)
# === -8200
# building-train_station # caption(optional) z17- (also has icon z17-, area z14-)
# === -8300
# leisure-sports_centre-sport-swimming # caption(optional) z15- (also has icon z15-, area z13-)
# === -8380
@@ -1990,10 +1980,8 @@ leisure-swimming_pool-private # icon z17- (also has captio
# amenity-doctors # caption(optional) z17- (also has icon z17-, area z15-)
# amenity-driving_school # caption(optional) z17- (also has icon z17-)
# amenity-language_school # caption(optional) z17- (also has icon z17-)
# amenity-mobile_money_agent # caption(optional) z18- (also has icon z17-)
# amenity-money_transfer # caption(optional) z18- (also has icon z17-)
# amenity-music_school # caption(optional) z17- (also has icon z17-)
# amenity-payment_centre # caption(optional) z18- (also has icon z17-)
# amenity-recycling-centre # caption(optional) z16- (also has icon z16-, area z15-)
# amenity-veterinary # caption(optional) z16- (also has icon z16-)
# craft-electrician # caption(optional) z18- (also has icon z17-)
@@ -2205,7 +2193,6 @@ leisure-swimming_pool-private # icon z17- (also has captio
# healthcare-speech_therapist # caption(optional) z17- (also has icon z17-)
# leisure-adult_gaming_centre # caption(optional) z17- (also has icon z17-)
# leisure-amusement_arcade # caption(optional) z17- (also has icon z17-)
# leisure-indoor_play # caption(optional) z17- (also has icon z17-)
# office-company # caption(optional) z18- (also has icon z18-)
# office-ngo # caption(optional) z18- (also has icon z18-)
# office-telecommunication # caption(optional) z18- (also has icon z18-)
@@ -2297,7 +2284,6 @@ leisure-swimming_pool-private # icon z17- (also has captio
# landuse-industrial-mine # caption(optional) z15- (also has icon z15-, area z13-)
# landuse-landfill # caption(optional) z15- (also has icon z15-, area z13-)
# landuse-quarry # caption(optional) z15- (also has icon z15-, area z13-)
# leisure-slipway # caption(optional) z17- (also has icon z17-)
# man_made-petroleum_well # caption(optional) z18- (also has icon z14-)
# power-generator-wind # caption(optional) z16- (also has icon z13-, area z13-)
# === -9880

View File

@@ -29,7 +29,6 @@ static NSString *didChangeOutdoorMapStyle = @"didChangeOutdoorMapStyle";
if (self) {
_observers = [NSHashTable weakObjectsHashTable];
GetFramework().GetTrafficManager().SetStateListener([self](TrafficManager::TrafficState state) {
[NSNotificationCenter.defaultCenter postNotificationName:@"LayersChanged" object:nil];
for (id<MWMMapOverlayManagerObserver> observer in self.observers) {
if ([observer respondsToSelector:@selector(onTrafficStateUpdated)]) {
[observer onTrafficStateUpdated];
@@ -37,7 +36,6 @@ static NSString *didChangeOutdoorMapStyle = @"didChangeOutdoorMapStyle";
}
});
GetFramework().GetTransitManager().SetStateListener([self](TransitReadManager::TransitSchemeState state) {
[NSNotificationCenter.defaultCenter postNotificationName:@"LayersChanged" object:nil];
for (id<MWMMapOverlayManagerObserver> observer in self.observers) {
if ([observer respondsToSelector:@selector(onTransitStateUpdated)]) {
[observer onTransitStateUpdated];
@@ -45,7 +43,6 @@ static NSString *didChangeOutdoorMapStyle = @"didChangeOutdoorMapStyle";
}
});
GetFramework().GetIsolinesManager().SetStateListener([self](IsolinesManager::IsolinesState state) {
[NSNotificationCenter.defaultCenter postNotificationName:@"LayersChanged" object:nil];
for (id<MWMMapOverlayManagerObserver> observer in self.observers) {
if ([observer respondsToSelector:@selector(onIsoLinesStateUpdated)]) {
[observer onIsoLinesStateUpdated];
@@ -53,7 +50,6 @@ static NSString *didChangeOutdoorMapStyle = @"didChangeOutdoorMapStyle";
}
});
[NSNotificationCenter.defaultCenter addObserverForName:didChangeOutdoorMapStyle object:nil queue:nil usingBlock:^(NSNotification * _Nonnull notification) {
[NSNotificationCenter.defaultCenter postNotificationName:@"LayersChanged" object:nil];
for (id<MWMMapOverlayManagerObserver> observer in self.observers) {
if ([observer respondsToSelector:@selector(onOutdoorStateUpdated)]) {
[observer onOutdoorStateUpdated];

View File

@@ -10,7 +10,6 @@
#import <CoreApi/CoreApi.h>
#import "Controls.h"
#import "DeepLinkRouteStrategyAdapter.h"
#import "EAGLView.h"
#import "FirstSession.h"

View File

@@ -16,13 +16,6 @@ import UIKit
routinOptionsBridgeController.view.backgroundColor = .systemGroupedBackground
return routinOptionsBridgeController
}
/// The `ControlsView` for presentation in an alert
@objc static func mapControls() -> UIViewController {
let controlsBridgeController = UIHostingController(rootView: ControlsView())
controlsBridgeController.view.backgroundColor = .clear
return controlsBridgeController
}
}

View File

@@ -1,11 +0,0 @@
NS_SWIFT_NAME(Controls)
@interface Controls : NSObject
+ (void)zoomIn;
+ (void)zoomOut;
+ (void)switchToNextPositionMode;
+ (NSString *)positionModeRawValue;
+ (Controls *)shared;
- (bool)hasMainButtons;
@end

View File

@@ -1,75 +0,0 @@
#import "Controls.h"
#import "SwiftBridge.h"
#include <CoreApi/Framework.h>
@implementation Controls
static Controls *shared = nil;
+ (Controls *)shared
{
if (shared == nil)
{
shared = [[super allocWithZone:NULL] init];
}
return shared;
}
+ (id)allocWithZone:(NSZone *)zone
{
return [self shared];
}
- (id)copyWithZone:(NSZone *)zone
{
return self;
}
- (id)init
{
self = [super init];
if (self != nil)
{
// Initialize instance variables here
}
return self;
}
+ (void)zoomIn;
{
GetFramework().Scale(Framework::SCALE_MAG, true);
}
+ (void)zoomOut;
{
GetFramework().Scale(Framework::SCALE_MIN, true);
}
+ (NSString *)positionModeRawValue;
{
location::EMyPositionMode mode = GetFramework().GetMyPositionMode();
switch (mode)
{
case location::EMyPositionMode::NotFollowNoPosition: return @"Locate";
case location::EMyPositionMode::NotFollow: return @"Locate";
case location::EMyPositionMode::PendingPosition: return @"Locating";
case location::EMyPositionMode::Follow: return @"Following";
case location::EMyPositionMode::FollowAndRotate: return @"FollowingAndRotated";
}
return @"Locate";
}
+ (void)switchToNextPositionMode;
{
[MWMLocationManager enableLocationAlert];
GetFramework().SwitchMyPositionNextMode();
}
- (bool)hasMainButtons;
{
return true;
}
@end

View File

@@ -1,12 +0,0 @@
extension Controls {
@objc static let changeChangeTrackRecordingNotificationName: Notification.Name = Notification.Name(rawValue: "ChangeTrackRecording")
/// The notification name for switching position mode
@objc static let switchPositionModeNotificationName: Notification.Name = Notification.Name(rawValue: "SwitchPositionMode")
@objc static let changeVisibilityMainButtonsNotificationName: Notification.Name = Notification.Name(rawValue: "ChangeVisibilityMainButtons")
static var positionMode: MapPositionButton.Mode {
return MapPositionButton.Mode(rawValue: Controls.positionModeRawValue()) ?? .locate
}
}

View File

@@ -3,6 +3,7 @@
#import "MWMNavigationDashboardManager.h"
@class MapViewController;
@class BottomTabBarViewController;
@class TrackRecordingButtonViewController;
@class SearchQuery;
@@ -25,7 +26,7 @@ typedef NS_ENUM(NSUInteger, TrackRecordingButtonState) {
@property(nonatomic) MWMBottomMenuState menuState;
@property(nonatomic) MWMBottomMenuState menuRestoreState;
@property(nonatomic) BOOL isDirectionViewHidden;
@property(nonatomic) UIViewController * tabBarController;
@property(nonatomic) BottomTabBarViewController * tabBarController;
@property(nonatomic) TrackRecordingButtonViewController * trackRecordingButton;
- (instancetype)init __attribute__((unavailable("init is not available")));

View File

@@ -64,9 +64,6 @@ NSString *const kMapToCategorySelectorSegue = @"MapToCategorySelectorSegue";
self.menuRestoreState = MWMBottomMenuStateInactive;
self.isAddingPlace = NO;
self.searchManager = controller.searchManager;
[self tabBarController];
return self;
}
@@ -223,20 +220,13 @@ NSString *const kMapToCategorySelectorSegue = @"MapToCategorySelectorSegue";
return _trafficButton;
}
- (UIViewController *)tabBarController {
- (BottomTabBarViewController *)tabBarController {
if (!_tabBarController) {
MapViewController * ownerController = _ownerController;
_tabBarController = [BridgeControllers mapControls];
_tabBarController = [BottomTabBarBuilder buildWithMapViewController:ownerController controlsManager:self];
[ownerController addChildViewController:_tabBarController];
UIView * tabBarViewSuperView = ownerController.controlsView;
[tabBarViewSuperView addSubview:_tabBarController.view];
_tabBarController.view.translatesAutoresizingMaskIntoConstraints = NO;
[NSLayoutConstraint activateConstraints:@[
[tabBarViewSuperView.topAnchor constraintEqualToAnchor:_tabBarController.view.topAnchor],
[tabBarViewSuperView.leadingAnchor constraintEqualToAnchor:_tabBarController.view.leadingAnchor],
[tabBarViewSuperView.bottomAnchor constraintEqualToAnchor:_tabBarController.view.bottomAnchor],
[tabBarViewSuperView.trailingAnchor constraintEqualToAnchor:_tabBarController.view.trailingAnchor]
]];
}
return _tabBarController;
@@ -299,7 +289,7 @@ NSString *const kMapToCategorySelectorSegue = @"MapToCategorySelectorSegue";
MapViewController * ownerController = _ownerController;
switch (_menuState) {
case MWMBottomMenuStateActive:
_tabBarController.view.hidden = NO;
_tabBarController.isHidden = NO;
if (_menuController == nil) {
_menuController = [BottomMenuBuilder buildMenuWithMapViewController:ownerController
controlsManager:self
@@ -308,7 +298,7 @@ NSString *const kMapToCategorySelectorSegue = @"MapToCategorySelectorSegue";
}
break;
case MWMBottomMenuStateLayers:
_tabBarController.view.hidden = NO;
_tabBarController.isHidden = NO;
if (_menuController == nil) {
_menuController = [BottomMenuBuilder buildLayersWithMapViewController:ownerController
controlsManager:self
@@ -317,14 +307,14 @@ NSString *const kMapToCategorySelectorSegue = @"MapToCategorySelectorSegue";
}
break;
case MWMBottomMenuStateInactive:
_tabBarController.view.hidden = NO;
_tabBarController.isHidden = NO;
if (_menuController != nil) {
[_menuController dismissViewControllerAnimated:YES completion:nil];
_menuController = nil;
}
break;
case MWMBottomMenuStateHidden:
_tabBarController.view.hidden = YES;
_tabBarController.isHidden = YES;
if (_menuController != nil) {
[_menuController dismissViewControllerAnimated:YES completion:nil];
_menuController = nil;

View File

@@ -1,9 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23727" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<device id="retina4_7" orientation="portrait" appearance="light"/>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="13771" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<device id="retina4_7" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23721"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13772"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
@@ -16,12 +18,12 @@
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="WVx-0E-RoH" customClass="MWMButton" propertyAccessControl="all">
<rect key="frame" x="0.0" y="0.0" width="56" height="56"/>
<viewLayoutGuide key="safeArea" id="iUc-A7-STp"/>
<accessibility key="accessibilityConfiguration" identifier="layers_button"/>
<constraints>
<constraint firstAttribute="height" constant="56" id="24f-V4-Vuf"/>
<constraint firstAttribute="width" constant="56" id="hko-xz-hRz"/>
</constraints>
<viewLayoutGuide key="safeArea" id="iUc-A7-STp"/>
<state key="normal" image="btn_traffic_on_light"/>
<connections>
<action selector="buttonTouchUpInside" destination="-1" eventType="touchUpInside" id="fKZ-g8-4ML"/>

View File

@@ -314,7 +314,7 @@ NSString *const kNavigationControlViewXibName = @"NavigationControlView";
[[MapViewController sharedController] updateStatusBarStyle];
// Restore bottom buttons only if they were not already hidden by tapping anywhere on an empty map.
if (!MWMMapViewControlsManager.manager.hidden)
MWMMapViewControlsManager.manager.tabBarController.view.hidden = state != MWMNavigationDashboardStateHidden;
BottomTabBarViewController.controller.isHidden = state != MWMNavigationDashboardStateHidden;
}
@synthesize routePreview = _routePreview;

View File

@@ -28,6 +28,7 @@
- (void)performAction:(NSString *_Nonnull)action;
- (void)openMenu;
- (void)openSettings;
- (void)openAbout;
- (void)openMapsDownloader:(MWMMapDownloaderMode)mode;

View File

@@ -574,6 +574,10 @@ NSString *const kAboutSegue = @"Map2About";
}
#pragma mark - Open controllers
- (void)openMenu {
[self.controlsManager.tabBarController onMenuButtonPressed:self];
}
- (void)openSettings {
[self performSegueWithIdentifier:kSettingsSegue sender:nil];
}
@@ -632,7 +636,6 @@ NSString *const kAboutSegue = @"Map2About";
self.disableStandbyOnLocationStateMode = YES;
break;
}
[NSNotificationCenter.defaultCenter postNotificationName:Controls.switchPositionModeNotificationName object:nil];
}
#pragma mark - MWMFrameworkDrapeObserver

View File

@@ -299,8 +299,10 @@ void InitLocalizedStrings() {
- (void)updateApplicationIconBadgeNumber {
auto const number = [self badgeNumber];
// Delay init because BottomTabBarViewController.controller is null here.
dispatch_async(dispatch_get_main_queue(), ^{
[UIApplication.sharedApplication setApplicationIconBadgeNumber:number];
BottomTabBarViewController.controller.isApplicationBadgeHidden = (number == 0);
});
}

View File

@@ -121,8 +121,8 @@
}
return true
case .menu:
// Not supported on iOS.
return false
MapsAppDelegate.theApp().mapViewController.openMenu()
return true
case .settings:
MapsAppDelegate.theApp().mapViewController.openSettings()
return true

View File

@@ -228,7 +228,6 @@ extension TrackRecordingManager: TrackRecordingObservable {
@objc
private func notifyObservers() {
NotificationCenter.default.post(name: Controls.changeChangeTrackRecordingNotificationName, object: nil)
observations.removeAll { $0.observer == nil }
observations.forEach {
$0.recordingStateDidChangeHandler?(recordingState, trackRecordingInfo, { self.trackRecordingElevationProfileData })

View File

@@ -26,7 +26,6 @@
"type.amenity.bench" = "Sitzbank";
"type.amenity.bench.backless" = "Sitzbank ohne Rückenlehne";
"type.amenity.bicycle_parking" = "Fahrradständer";
"type.amenity.boat_rental" = "Bootsverleih";
"type.amenity.bicycle_rental" = "Fahrradverleih";
"type.amenity.bicycle_repair_station" = "Fahrrad-Reparaturstation";
"type.amenity.biergarten" = "Biergarten";

View File

@@ -26,7 +26,6 @@
"type.amenity.bench" = "Bench";
"type.amenity.bench.backless" = "Backless Bench";
"type.amenity.bicycle_parking" = "Bicycle Parking";
"type.amenity.boat_rental" = "Boat Rental";
"type.amenity.bicycle_rental" = "Bicycle Rental";
"type.amenity.bicycle_repair_station" = "Bicycle Repair Station";
"type.amenity.biergarten" = "Biergarten";
@@ -85,7 +84,6 @@
"type.amenity.library" = "Library";
"type.amenity.loading_dock" = "Loading Bay";
"type.amenity.lounger" = "Lounger";
"type.amenity.mobile_money_agent" = "Mobile Money Agent";
"type.amenity.marketplace" = "Marketplace";
"type.amenity.motorcycle_parking" = "Motorcycle Parking";
"type.amenity.nightclub" = "Nightclub";
@@ -115,7 +113,6 @@
"type.amenity.parking_space.private" = "Parking Space";
"type.amenity.parking_space.underground" = "Parking Space";
"type.amenity.parking_space.disabled" = "Disabled Parking Space";
"type.amenity.payment_centre" = "Payment Centre";
"type.amenity.payment_terminal" = "Payment Terminal";
"type.amenity.pharmacy" = "Pharmacy";
"type.amenity.place_of_worship" = "Place of Worship";
@@ -709,7 +706,6 @@
"type.leisure.miniature_golf" = "Minigolf";
"type.leisure.hackerspace" = "Hackerspace";
"type.leisure.ice_rink" = "Ice Rink";
"type.leisure.indoor_play" = "Indoor Play Centre";
"type.leisure.marina" = "Marina";
"type.leisure.nature_reserve" = "Nature Reserve";
"type.leisure.outdoor_seating" = "Outdoor Seating";
@@ -1310,7 +1306,6 @@
"type.shop.supermarket" = "Supermarket";
"type.shop.tattoo" = "Tattoo Parlour";
"type.shop.tea" = "Tea Shop";
"type.shop.telecommunication" = "Telecommunication Shop";
"type.shop.ticket" = "Ticket Shop";
"type.shop.toys" = "Toy Shop";
"type.shop.travel_agency" = "Travel Agency";

View File

@@ -288,10 +288,6 @@
"placepage_distance" = "Distance";
"search_show_on_map" = "View on map";
/* Button title */
"zoom_in" = "Zoom In";
"zoom_out" = "Zoom Out";
/* Text in menu */
"website" = "Website";

View File

@@ -31,7 +31,6 @@
"type.amenity.bench.backless" = "Backless Bench";
"type.amenity.bicycle_parking" = "Bicycle Parking";
"type.amenity.bicycle_parking.covered" = "Covered Bicycle Parking";
"type.amenity.boat_rental" = "Boat Rental";
"type.amenity.bicycle_rental" = "Bicycle Rental";
"type.amenity.bicycle_repair_station" = "Bicycle Repair Station";
"type.amenity.biergarten" = "Biergarten";
@@ -97,7 +96,6 @@
"type.amenity.lounger" = "Lounger";
"type.amenity.luggage_locker" = "Luggage Locker";
"type.amenity.marketplace" = "Marketplace";
"type.amenity.mobile_money_agent" = "Mobile Money Agent";
"type.amenity.motorcycle_parking" = "Motorcycle Parking";
"type.amenity.nightclub" = "Nightclub";
"type.amenity.nursing_home" = "Nursing Home";
@@ -127,7 +125,6 @@
"type.amenity.parking_space.underground" = "Parking Space";
"type.amenity.parking_space.disabled" = "Disabled Parking Space";
"type.amenity.payment_terminal" = "Payment Terminal";
"type.amenity.payment_centre" = "Payment Centre";
"type.amenity.pharmacy" = "Pharmacy";
"type.amenity.place_of_worship" = "Place of Worship";
"type.amenity.place_of_worship.buddhist" = "Buddhist Temple";
@@ -739,7 +736,6 @@
"type.leisure.miniature_golf" = "Minigolf";
"type.leisure.hackerspace" = "Hackerspace";
"type.leisure.ice_rink" = "Ice Rink";
"type.leisure.indoor_play" = "Indoor Play Centre";
"type.leisure.marina" = "Marina";
"type.leisure.nature_reserve" = "Nature Reserve";
"type.leisure.outdoor_seating" = "Outdoor Seating";
@@ -1350,7 +1346,6 @@
"type.shop.supermarket" = "Supermarket";
"type.shop.tattoo" = "Tattoo Parlour";
"type.shop.tea" = "Tea Shop";
"type.shop.telecommunication" = "Telecommunication Shop";
"type.shop.ticket" = "Ticket Shop";
"type.shop.toys" = "Toy Store";
"type.shop.travel_agency" = "Travel Agency";

View File

@@ -30,10 +30,9 @@
27697F902E257EDA00FBD913 /* AboutCoMapsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27697F8F2E257ED800FBD913 /* AboutCoMapsView.swift */; };
27697F922E257EED00FBD913 /* ApoutOpenStreetMapView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27697F912E257EE600FBD913 /* ApoutOpenStreetMapView.swift */; };
27768FDB2E20199A0086784A /* RoutingOptionsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27768FD92E20199A0086784A /* RoutingOptionsView.swift */; };
27768FE02E201BE60086784A /* LeftButtonType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27768FDF2E201BE60086784A /* LeftButtonType.swift */; };
279367562E1BE16300AA5C3D /* Settings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 279367552E1BE16300AA5C3D /* Settings.swift */; };
2793675A2E1BE17300AA5C3D /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 279367592E1BE17300AA5C3D /* SettingsView.swift */; };
279387C42E4C8EB7009FDF8B /* MapPositionButtonMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 279387C12E4C8EB6009FDF8B /* MapPositionButtonMode.swift */; };
279387C62E4C918A009FDF8B /* Controls.swift in Sources */ = {isa = PBXBuildFile; fileRef = 279387C52E4C9187009FDF8B /* Controls.swift */; };
27AF184C2E1D5B2D00CD41E2 /* SettingsNavigationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27AF184B2E1D5A2700CD41E2 /* SettingsNavigationView.swift */; };
27AF18502E1DB61600CD41E2 /* VoiceRoutingLanguage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27AF184F2E1DB61500CD41E2 /* VoiceRoutingLanguage.swift */; };
27AF18522E1DB62000CD41E2 /* DistanceUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27AF18512E1DB61F00CD41E2 /* DistanceUnit.swift */; };
@@ -41,18 +40,6 @@
27AF18562E1DB63000CD41E2 /* PowerSavingMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27AF18552E1DB62F00CD41E2 /* PowerSavingMode.swift */; };
27AF18582E1DB63A00CD41E2 /* Appearance.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27AF18572E1DB63900CD41E2 /* Appearance.swift */; };
27AF185A2E1DB64500CD41E2 /* AnnouncingSpeedTrapsWhileVoiceRouting.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27AF18592E1DB64400CD41E2 /* AnnouncingSpeedTrapsWhileVoiceRouting.swift */; };
27BDA4862E4366AC00C478B8 /* MapLayerButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27BDA4852E4366A600C478B8 /* MapLayerButton.swift */; };
27BDA4882E4366C600C478B8 /* MapPositionButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27BDA4872E4366B600C478B8 /* MapPositionButton.swift */; };
27BDA48A2E4366F400C478B8 /* MainButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27BDA4892E4366EC00C478B8 /* MainButton.swift */; };
27BDA48C2E43670300C478B8 /* MapZoomButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27BDA48B2E4366FB00C478B8 /* MapZoomButton.swift */; };
27BDA4902E436A1B00C478B8 /* MapZoomButtonKind.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27BDA48F2E436A1600C478B8 /* MapZoomButtonKind.swift */; };
27BDA4A22E436D1900C478B8 /* MainButtonType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27BDA4A12E436D1100C478B8 /* MainButtonType.swift */; };
27BDA4A62E437B5200C478B8 /* BottomTabBarButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27BDA4A52E437B5200C478B8 /* BottomTabBarButton.swift */; };
27BDA4A82E437F9800C478B8 /* ControlsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27BDA4A72E437F8E00C478B8 /* ControlsView.swift */; };
27BDA4AA2E437FEF00C478B8 /* MapTrackRecordingButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27BDA4A92E437FE400C478B8 /* MapTrackRecordingButton.swift */; };
27E5CAAD2E4B644100FA3597 /* FloatingButtonStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27E5CAAA2E4B643A00FA3597 /* FloatingButtonStyle.swift */; };
27E5CAAF2E4B6CBC00FA3597 /* Controls.h in Sources */ = {isa = PBXBuildFile; fileRef = 27E5CAAE2E4B6CB800FA3597 /* Controls.h */; };
27E5CAB12E4B6D0300FA3597 /* Controls.mm in Sources */ = {isa = PBXBuildFile; fileRef = 27E5CAB02E4B6CFC00FA3597 /* Controls.mm */; };
3304306D21D4EAFB00317CA3 /* SearchCategoryCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3304306C21D4EAFB00317CA3 /* SearchCategoryCell.swift */; };
33046832219C57180041F3A8 /* CategorySettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33046831219C57180041F3A8 /* CategorySettingsViewController.swift */; };
337F98A621D37B7400C8AC27 /* SearchTabViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 337F98A521D37B7400C8AC27 /* SearchTabViewController.swift */; };
@@ -128,6 +115,7 @@
349A13831DEC138C00C7DB60 /* MWMMobileInternetAlert.m in Sources */ = {isa = PBXBuildFile; fileRef = 349A13801DEC138C00C7DB60 /* MWMMobileInternetAlert.m */; };
349A13851DEC138C00C7DB60 /* MWMMobileInternetAlert.xib in Resources */ = {isa = PBXBuildFile; fileRef = 349A13811DEC138C00C7DB60 /* MWMMobileInternetAlert.xib */; };
349D1AD51E2E325B004A2006 /* BottomMenuItemCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 349D1AC61E2E325B004A2006 /* BottomMenuItemCell.xib */; };
349D1AE11E2E325C004A2006 /* BottomTabBarViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 349D1ACD1E2E325B004A2006 /* BottomTabBarViewController.xib */; };
349D1CE41E3F836900A878FD /* UIViewController+Hierarchy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 349D1CE21E3F836900A878FD /* UIViewController+Hierarchy.swift */; };
34AB39C21D2BD8310021857D /* MWMStopButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 34AB39C01D2BD8310021857D /* MWMStopButton.m */; };
34AB66051FC5AA320078E451 /* MWMNavigationDashboardManager+Entity.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34AB65C51FC5AA320078E451 /* MWMNavigationDashboardManager+Entity.mm */; };
@@ -338,6 +326,11 @@
8C4FB9C72BEFEFF400D44877 /* CarPlayWindowScaleAdjuster.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C4FB9C62BEFEFF400D44877 /* CarPlayWindowScaleAdjuster.swift */; };
8CB13C3B2BF1276A004288F2 /* CarplayPlaceholderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8CB13C3A2BF1276A004288F2 /* CarplayPlaceholderView.swift */; };
99012847243F0D6900C72B10 /* UIViewController+alternative.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99012846243F0D6900C72B10 /* UIViewController+alternative.swift */; };
9901284F244732DB00C72B10 /* BottomTabBarPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99012849244732DB00C72B10 /* BottomTabBarPresenter.swift */; };
99012851244732DB00C72B10 /* BottomTabBarViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9901284B244732DB00C72B10 /* BottomTabBarViewController.swift */; };
99012852244732DB00C72B10 /* BottomTabBarBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9901284C244732DB00C72B10 /* BottomTabBarBuilder.swift */; };
99012853244732DB00C72B10 /* BottomTabBarInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9901284D244732DB00C72B10 /* BottomTabBarInteractor.swift */; };
990128562449A82500C72B10 /* BottomTabBarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 990128552449A82400C72B10 /* BottomTabBarView.swift */; };
9917D17F2397B1D600A7E06E /* IPadModalPresentationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9917D17E2397B1D600A7E06E /* IPadModalPresentationController.swift */; };
991FCA2423B11E61009AD684 /* BookmarksStyleSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 991FCA2323B11E61009AD684 /* BookmarksStyleSheet.swift */; };
993DF0B523F6B2EF00AC231A /* PlacePageTrackLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 993DF0B423F6B2EF00AC231A /* PlacePageTrackLayout.swift */; };
@@ -486,6 +479,7 @@
ED2D74662D1435A600660FBF /* LiveActivityManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED2D742D2D14337500660FBF /* LiveActivityManager.swift */; };
ED2E328E2D10500900807A08 /* TrackRecordingButtonArea.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED46DD922D06F804007CACD6 /* TrackRecordingButtonArea.swift */; };
ED2E32912D10501700807A08 /* TrackRecordingButtonViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED49D76F2CF0E3A8004AF27E /* TrackRecordingButtonViewController.swift */; };
ED3EAC202B03C88100220A4A /* BottomTabBarButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED3EAC1F2B03C88100220A4A /* BottomTabBarButton.swift */; };
ED43B8BD2C12063500D07BAA /* DocumentPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED43B8BC2C12063500D07BAA /* DocumentPicker.swift */; };
ED46DDCE2D098A0B007CACD6 /* WidgetKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED46DDCD2D098A0B007CACD6 /* WidgetKit.framework */; };
ED46DDD02D098A0B007CACD6 /* SwiftUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED46DDCF2D098A0B007CACD6 /* SwiftUI.framework */; };
@@ -785,10 +779,9 @@
27697F8F2E257ED800FBD913 /* AboutCoMapsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AboutCoMapsView.swift; sourceTree = "<group>"; };
27697F912E257EE600FBD913 /* ApoutOpenStreetMapView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApoutOpenStreetMapView.swift; sourceTree = "<group>"; };
27768FD92E20199A0086784A /* RoutingOptionsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoutingOptionsView.swift; sourceTree = "<group>"; };
27768FDF2E201BE60086784A /* LeftButtonType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LeftButtonType.swift; sourceTree = "<group>"; };
279367552E1BE16300AA5C3D /* Settings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Settings.swift; sourceTree = "<group>"; };
279367592E1BE17300AA5C3D /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = SettingsView.swift; path = UI/Settings/SettingsView.swift; sourceTree = SOURCE_ROOT; };
279387C12E4C8EB6009FDF8B /* MapPositionButtonMode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapPositionButtonMode.swift; sourceTree = "<group>"; };
279387C52E4C9187009FDF8B /* Controls.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Controls.swift; sourceTree = "<group>"; };
27AF184B2E1D5A2700CD41E2 /* SettingsNavigationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsNavigationView.swift; sourceTree = "<group>"; };
27AF184F2E1DB61500CD41E2 /* VoiceRoutingLanguage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VoiceRoutingLanguage.swift; sourceTree = "<group>"; };
27AF18512E1DB61F00CD41E2 /* DistanceUnit.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DistanceUnit.swift; sourceTree = "<group>"; };
@@ -796,18 +789,6 @@
27AF18552E1DB62F00CD41E2 /* PowerSavingMode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PowerSavingMode.swift; sourceTree = "<group>"; };
27AF18572E1DB63900CD41E2 /* Appearance.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Appearance.swift; sourceTree = "<group>"; };
27AF18592E1DB64400CD41E2 /* AnnouncingSpeedTrapsWhileVoiceRouting.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnnouncingSpeedTrapsWhileVoiceRouting.swift; sourceTree = "<group>"; };
27BDA4852E4366A600C478B8 /* MapLayerButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapLayerButton.swift; sourceTree = "<group>"; };
27BDA4872E4366B600C478B8 /* MapPositionButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapPositionButton.swift; sourceTree = "<group>"; };
27BDA4892E4366EC00C478B8 /* MainButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainButton.swift; sourceTree = "<group>"; };
27BDA48B2E4366FB00C478B8 /* MapZoomButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapZoomButton.swift; sourceTree = "<group>"; };
27BDA48F2E436A1600C478B8 /* MapZoomButtonKind.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapZoomButtonKind.swift; sourceTree = "<group>"; };
27BDA4A12E436D1100C478B8 /* MainButtonType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainButtonType.swift; sourceTree = "<group>"; };
27BDA4A52E437B5200C478B8 /* BottomTabBarButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BottomTabBarButton.swift; sourceTree = "<group>"; };
27BDA4A72E437F8E00C478B8 /* ControlsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ControlsView.swift; sourceTree = "<group>"; };
27BDA4A92E437FE400C478B8 /* MapTrackRecordingButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapTrackRecordingButton.swift; sourceTree = "<group>"; };
27E5CAAA2E4B643A00FA3597 /* FloatingButtonStyle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FloatingButtonStyle.swift; sourceTree = "<group>"; };
27E5CAAE2E4B6CB800FA3597 /* Controls.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Controls.h; sourceTree = "<group>"; };
27E5CAB02E4B6CFC00FA3597 /* Controls.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = Controls.mm; sourceTree = "<group>"; };
28A0AB4B0D9B1048005BE974 /* Maps_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 2; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = Maps_Prefix.pch; sourceTree = "<group>"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
29B97316FDCFA39411CA2CEA /* main.mm */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; indentWidth = 2; path = main.mm; sourceTree = "<group>"; tabWidth = 2; };
30034C5C2B3F0B74005D961A /* az */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = az; path = az.lproj/Localizable.strings; sourceTree = "<group>"; };
@@ -948,6 +929,7 @@
349A35781B53D4C9009677EE /* MWMCircularProgressView.h */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 2; lastKnownFileType = sourcecode.c.h; path = MWMCircularProgressView.h; sourceTree = "<group>"; tabWidth = 2; };
349A35791B53D4C9009677EE /* MWMCircularProgressView.m */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 2; lastKnownFileType = sourcecode.c.objc; path = MWMCircularProgressView.m; sourceTree = "<group>"; tabWidth = 2; };
349D1AC61E2E325B004A2006 /* BottomMenuItemCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = BottomMenuItemCell.xib; sourceTree = "<group>"; };
349D1ACD1E2E325B004A2006 /* BottomTabBarViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = BottomTabBarViewController.xib; sourceTree = "<group>"; };
349D1CE21E3F836900A878FD /* UIViewController+Hierarchy.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIViewController+Hierarchy.swift"; sourceTree = "<group>"; };
34AB39BF1D2BD8310021857D /* MWMStopButton.h */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 2; lastKnownFileType = sourcecode.c.h; path = MWMStopButton.h; sourceTree = "<group>"; tabWidth = 2; };
34AB39C01D2BD8310021857D /* MWMStopButton.m */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 2; lastKnownFileType = sourcecode.c.objc; path = MWMStopButton.m; sourceTree = "<group>"; tabWidth = 2; };
@@ -1236,6 +1218,11 @@
978D4A30199A11E600D72CA7 /* faq.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = faq.html; path = ../../data/faq.html; sourceTree = "<group>"; };
97A5967E19B9CD47007A963F /* copyright.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = copyright.html; path = ../../data/copyright.html; sourceTree = "<group>"; };
99012846243F0D6900C72B10 /* UIViewController+alternative.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIViewController+alternative.swift"; sourceTree = "<group>"; };
99012849244732DB00C72B10 /* BottomTabBarPresenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BottomTabBarPresenter.swift; sourceTree = "<group>"; };
9901284B244732DB00C72B10 /* BottomTabBarViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BottomTabBarViewController.swift; sourceTree = "<group>"; };
9901284C244732DB00C72B10 /* BottomTabBarBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BottomTabBarBuilder.swift; sourceTree = "<group>"; };
9901284D244732DB00C72B10 /* BottomTabBarInteractor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BottomTabBarInteractor.swift; sourceTree = "<group>"; };
990128552449A82400C72B10 /* BottomTabBarView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BottomTabBarView.swift; sourceTree = "<group>"; };
9917D17E2397B1D600A7E06E /* IPadModalPresentationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IPadModalPresentationController.swift; sourceTree = "<group>"; };
991FCA2323B11E61009AD684 /* BookmarksStyleSheet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarksStyleSheet.swift; sourceTree = "<group>"; };
993DF0B423F6B2EF00AC231A /* PlacePageTrackLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlacePageTrackLayout.swift; sourceTree = "<group>"; };
@@ -1434,6 +1421,7 @@
ED2D74352D14337500660FBF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
ED2D74362D14337500660FBF /* CoMapsWidgetExtensionBundle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoMapsWidgetExtensionBundle.swift; sourceTree = "<group>"; };
ED2D745D2D1433DE00660FBF /* TrackRecordingActivityManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrackRecordingActivityManager.swift; sourceTree = "<group>"; };
ED3EAC1F2B03C88100220A4A /* BottomTabBarButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BottomTabBarButton.swift; sourceTree = "<group>"; };
ED43B8BC2C12063500D07BAA /* DocumentPicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DocumentPicker.swift; sourceTree = "<group>"; };
ED46DD922D06F804007CACD6 /* TrackRecordingButtonArea.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrackRecordingButtonArea.swift; sourceTree = "<group>"; };
ED46DDCC2D098A0B007CACD6 /* CoMapsWidgetExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = CoMapsWidgetExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -1916,9 +1904,6 @@
27697F822E254A9900FBD913 /* EmbeddedSafariView.swift */,
27697F842E255B6300FBD913 /* EmbeddedSafariViewCoordinator.swift */,
27697F862E255B7C00FBD913 /* EmbeddedSafariViewContent.swift */,
27E5CAAE2E4B6CB800FA3597 /* Controls.h */,
27E5CAB02E4B6CFC00FA3597 /* Controls.mm */,
279387C52E4C9187009FDF8B /* Controls.swift */,
);
path = Bridging;
sourceTree = "<group>";
@@ -1978,6 +1963,7 @@
2752B6CD2E3121D800887CC4 /* Language.swift */,
2752B6C92E31197000887CC4 /* MapLanguage.swift */,
27AF184F2E1DB61500CD41E2 /* VoiceRoutingLanguage.swift */,
27768FDF2E201BE60086784A /* LeftButtonType.swift */,
27AF18512E1DB61F00CD41E2 /* DistanceUnit.swift */,
27AF18532E1DB62600CD41E2 /* MobileDataPolicy.swift */,
27AF18552E1DB62F00CD41E2 /* PowerSavingMode.swift */,
@@ -1987,19 +1973,6 @@
path = "Settings Types";
sourceTree = "<group>";
};
27BDA4952E436C2D00C478B8 /* New Group */ = {
isa = PBXGroup;
children = (
27BDA4852E4366A600C478B8 /* MapLayerButton.swift */,
27BDA4A92E437FE400C478B8 /* MapTrackRecordingButton.swift */,
27BDA4872E4366B600C478B8 /* MapPositionButton.swift */,
279387C12E4C8EB6009FDF8B /* MapPositionButtonMode.swift */,
27BDA48B2E4366FB00C478B8 /* MapZoomButton.swift */,
27BDA48F2E436A1600C478B8 /* MapZoomButtonKind.swift */,
);
path = "New Group";
sourceTree = "<group>";
};
29B97314FDCFA39411CA2CEA /* Maps */ = {
isa = PBXGroup;
children = (
@@ -2532,8 +2505,8 @@
children = (
99AAEA72244DA59E0039D110 /* Presentation */,
998927312449E5ED00260CE2 /* Menu */,
99012848244732C200C72B10 /* TabBar */,
995F1610244F07F90060631D /* MWMBottomMenuState.h */,
27BDA4A52E437B5200C478B8 /* BottomTabBarButton.swift */,
);
path = BottomMenu;
sourceTree = "<group>";
@@ -2874,6 +2847,20 @@
name = "Custom Views";
sourceTree = "<group>";
};
99012848244732C200C72B10 /* TabBar */ = {
isa = PBXGroup;
children = (
99012849244732DB00C72B10 /* BottomTabBarPresenter.swift */,
9901284B244732DB00C72B10 /* BottomTabBarViewController.swift */,
9901284C244732DB00C72B10 /* BottomTabBarBuilder.swift */,
9901284D244732DB00C72B10 /* BottomTabBarInteractor.swift */,
349D1ACD1E2E325B004A2006 /* BottomTabBarViewController.xib */,
990128552449A82400C72B10 /* BottomTabBarView.swift */,
ED3EAC1F2B03C88100220A4A /* BottomTabBarButton.swift */,
);
path = TabBar;
sourceTree = "<group>";
};
993DF0C223F6BD0600AC231A /* ElevationDetails */ = {
isa = PBXGroup;
children = (
@@ -3596,11 +3583,6 @@
F6E2FBFB1E097B9F0083EBEC /* UI */ = {
isa = PBXGroup;
children = (
27BDA4A72E437F8E00C478B8 /* ControlsView.swift */,
27BDA4892E4366EC00C478B8 /* MainButton.swift */,
27BDA4A12E436D1100C478B8 /* MainButtonType.swift */,
27BDA4952E436C2D00C478B8 /* New Group */,
27E5CAAA2E4B643A00FA3597 /* FloatingButtonStyle.swift */,
27768FDA2E20199A0086784A /* Routing */,
ED9857022C4ECFFC00694F6C /* MailComposer */,
ED43B8B92C12061600D07BAA /* DocumentPicker */,
@@ -4227,6 +4209,7 @@
4761BE2B252D3DB900EE2DE4 /* SubgroupCell.xib in Resources */,
99F9A0E72462CA1700AE21E0 /* DownloadAllView.xib in Resources */,
349D1AD51E2E325B004A2006 /* BottomMenuItemCell.xib in Resources */,
349D1AE11E2E325C004A2006 /* BottomTabBarViewController.xib in Resources */,
34D3B01E1E389D05004100F9 /* MWMButtonCell.xib in Resources */,
9959C75624582DA2008FD4FD /* DirectionView.xib in Resources */,
6741A98B1BF340DE002C974C /* MWMCircularProgress.xib in Resources */,
@@ -4365,6 +4348,7 @@
34845DB71E166084003D55B9 /* Common.swift in Sources */,
47F4F21323A6EC420022FD56 /* DownloadMapsViewController.swift in Sources */,
99A906F623FA9C010005872B /* InsetsLabelRenderer.swift in Sources */,
99012853244732DB00C72B10 /* BottomTabBarInteractor.swift in Sources */,
6741A9A31BF340DE002C974C /* main.mm in Sources */,
34D3B04F1E38A20C004100F9 /* Bundle+Init.swift in Sources */,
34AB666E1FC5AA330078E451 /* TransportTransitStepsCollectionView.swift in Sources */,
@@ -4438,8 +4422,6 @@
3D15ACEE2155117000F725D5 /* MWMObjectsCategorySelectorDataSource.mm in Sources */,
9977E6A32480F9BF0073780C /* BottomMenuLayerButtonRenderer.swift in Sources */,
272F1F392E0EE09000FA52EF /* ExistingProfileView.swift in Sources */,
27E5CAAD2E4B644100FA3597 /* FloatingButtonStyle.swift in Sources */,
27BDA4862E4366AC00C478B8 /* MapLayerButton.swift in Sources */,
3454D7D11E07F045004AF2AD /* UIImage+RGBAData.m in Sources */,
6741A9B71BF340DE002C974C /* EAGLView.mm in Sources */,
6741A9B81BF340DE002C974C /* MapViewController.mm in Sources */,
@@ -4467,7 +4449,6 @@
F6E2FEE51E097BA00083EBEC /* MWMSearchNoResults.m in Sources */,
ED5E02142D8B17B600A5CC7B /* ModalPresentationStepsController.swift in Sources */,
4715273524907F8200E91BBA /* BookmarkColorViewController.swift in Sources */,
279387C62E4C918A009FDF8B /* Controls.swift in Sources */,
47E3C7292111E614008B3B27 /* FadeInAnimatedTransitioning.swift in Sources */,
ED79A5D42BDF8D6100952D1F /* MetadataItem.swift in Sources */,
34AB667D1FC5AA330078E451 /* MWMRoutePreview.mm in Sources */,
@@ -4491,7 +4472,6 @@
F6E2FDA11E097BA00083EBEC /* MWMEditorAdditionalNamesTableViewController.mm in Sources */,
4767CDA620AB1F6200BD8166 /* LeftAlignedIconButton.swift in Sources */,
3454D7D41E07F045004AF2AD /* UIImageView+Coloring.m in Sources */,
27BDA4882E4366C600C478B8 /* MapPositionButton.swift in Sources */,
993DF11D23F6BDB100AC231A /* UIToolbarRenderer.swift in Sources */,
99A906E923F6F7030005872B /* WikiDescriptionViewController.swift in Sources */,
ED79A5D62BDF8D6100952D1F /* CloudDirectoryMonitor.swift in Sources */,
@@ -4525,7 +4505,6 @@
99C9642B2428C0F700E41723 /* PlacePageHeaderViewController.swift in Sources */,
F6FE3C391CC50FFD00A73196 /* MWMPlaceDoesntExistAlert.m in Sources */,
F6E2FDFE1E097BA00083EBEC /* MWMOpeningHoursClosedSpanTableViewCell.mm in Sources */,
27BDA4A62E437B5200C478B8 /* BottomTabBarButton.swift in Sources */,
34B846A12029DCC10081ECCD /* BMCCategoriesHeader.swift in Sources */,
99A906F123FA946E0005872B /* DifficultyViewRenderer.swift in Sources */,
F6E2FD5F1E097BA00083EBEC /* MWMMapDownloaderLargeCountryTableViewCell.m in Sources */,
@@ -4546,6 +4525,7 @@
EDB71E002D8B0338004A6A7F /* ModalPresentationAnimator.swift in Sources */,
F6E2FD8C1E097BA00083EBEC /* MWMNoMapsView.m in Sources */,
34D3B0361E389D05004100F9 /* MWMEditorSelectTableViewCell.m in Sources */,
990128562449A82500C72B10 /* BottomTabBarView.swift in Sources */,
F6E2FD711E097BA00083EBEC /* MWMMapDownloaderTableViewCell.m in Sources */,
F6E2FE4F1E097BA00083EBEC /* MWMActionBarButton.m in Sources */,
47F86CFF20C936FC00FEE291 /* TabView.swift in Sources */,
@@ -4574,9 +4554,9 @@
34AB66081FC5AA320078E451 /* MWMNavigationDashboardManager.mm in Sources */,
3404F490202898CC0090E401 /* BMCModels.swift in Sources */,
F6E2FD561E097BA00083EBEC /* MWMMapDownloaderButtonTableViewCell.m in Sources */,
9901284F244732DB00C72B10 /* BottomTabBarPresenter.swift in Sources */,
CDB4D5002231412900104869 /* MapTemplateBuilder.swift in Sources */,
34AB66171FC5AA320078E451 /* MWMiPhoneRoutePreview.m in Sources */,
27BDA4A82E437F9800C478B8 /* ControlsView.swift in Sources */,
99A906EA23F6F7030005872B /* PlacePageInfoViewController.swift in Sources */,
993DF11723F6BDB100AC231A /* UINavigationBarRenderer.swift in Sources */,
6741A9E71BF340DE002C974C /* MWMCircularProgressView.m in Sources */,
@@ -4627,9 +4607,8 @@
34AB66111FC5AA320078E451 /* NavigationTurnsView.swift in Sources */,
475ED78624C7C7300063ADC7 /* ValueStepperViewRenderer.swift in Sources */,
3490D2E11CE9DD2500D0B838 /* MWMSideButtonsView.mm in Sources */,
27BDA4AA2E437FEF00C478B8 /* MapTrackRecordingButton.swift in Sources */,
279387C42E4C8EB7009FDF8B /* MapPositionButtonMode.swift in Sources */,
47F4F21523A6F06F0022FD56 /* AvailableMapsDataSource.swift in Sources */,
99012852244732DB00C72B10 /* BottomTabBarBuilder.swift in Sources */,
99012847243F0D6900C72B10 /* UIViewController+alternative.swift in Sources */,
995739062355CAC40019AEE7 /* ImageViewCrossDisolve.swift in Sources */,
ED83880F2D54DEB3002A0536 /* UIImage+FilledWithColor.swift in Sources */,
@@ -4637,7 +4616,6 @@
47A13CAD24BE9AA500027D4F /* DatePickerViewRenderer.swift in Sources */,
ED2E328E2D10500900807A08 /* TrackRecordingButtonArea.swift in Sources */,
F6E2FE7C1E097BA00083EBEC /* MWMPlacePageOpeningHoursCell.mm in Sources */,
27BDA48C2E43670300C478B8 /* MapZoomButton.swift in Sources */,
340E1EFB1E2F614400CE49BF /* Storyboard.swift in Sources */,
34E776331F15FAC2003040B3 /* MWMPlacePageManagerHelper.mm in Sources */,
462452E92BD052C0004C85E1 /* MWMEditorSegmentedTableViewCell.mm in Sources */,
@@ -4669,7 +4647,6 @@
F6E2FE821E097BA00083EBEC /* MWMPlacePageOpeningHoursDayView.m in Sources */,
F6E2FD6B1E097BA00083EBEC /* MWMMapDownloaderSubplaceTableViewCell.m in Sources */,
CDCA27842245090900167D87 /* ListenerContainer.swift in Sources */,
27E5CAAF2E4B6CBC00FA3597 /* Controls.h in Sources */,
27AF18582E1DB63A00CD41E2 /* Appearance.swift in Sources */,
47E3C7252111E41B008B3B27 /* DimmedModalPresentationController.swift in Sources */,
3472B5CB200F43EF00DC6CD5 /* BackgroundFetchScheduler.swift in Sources */,
@@ -4748,12 +4725,12 @@
270C9C282E16AB6F00ABA688 /* Profile.swift in Sources */,
ED9857082C4ED02D00694F6C /* MailComposer.swift in Sources */,
99F8B4C623B644A6009FF0B4 /* MapStyleSheet.swift in Sources */,
99012851244732DB00C72B10 /* BottomTabBarViewController.swift in Sources */,
993DF10623F6BDB100AC231A /* UIColor+rgba.swift in Sources */,
EDC3573B2B7B5029001AE9CA /* CALayer+SetCorner.swift in Sources */,
ED914AB22D35063A00973C45 /* TextColorStyleSheet.swift in Sources */,
47E3C7332111F4D8008B3B27 /* CoverVerticalDismissalAnimator.swift in Sources */,
471AB99423ABA3BD00F56D49 /* SearchMapsDataSource.swift in Sources */,
27BDA4A22E436D1900C478B8 /* MainButtonType.swift in Sources */,
47CA68F1250B54AF00671019 /* BookmarksListCell.swift in Sources */,
471A7BC02481C82500A0D4C1 /* BookmarkTitleCell.swift in Sources */,
47F67D1521CAB21B0069754E /* MWMImageCoder.m in Sources */,
@@ -4786,6 +4763,7 @@
471A7BBE2481A3D000A0D4C1 /* EditBookmarkViewController.swift in Sources */,
993DF0C923F6BD0600AC231A /* ElevationDetailsBuilder.swift in Sources */,
674A7E301C0DB10B003D48E1 /* MWMMapWidgets.mm in Sources */,
27768FE02E201BE60086784A /* LeftButtonType.swift in Sources */,
34AB66291FC5AA330078E451 /* RouteManagerViewController.swift in Sources */,
3404754D1E081A4600C92850 /* MWMKeyboard.m in Sources */,
993DF10C23F6BDB100AC231A /* MWMTableViewCellRenderer.swift in Sources */,
@@ -4795,12 +4773,11 @@
47E3C7312111F4C2008B3B27 /* CoverVerticalPresentationAnimator.swift in Sources */,
99E2B0122368A8C700FFABC5 /* MWMCategory+PlacesCountTitle.swift in Sources */,
F6D67CDC2062B9C00032FD38 /* BCCreateCategoryAlert.swift in Sources */,
27E5CAB12E4B6D0300FA3597 /* Controls.mm in Sources */,
F6E2FE2B1E097BA00083EBEC /* MWMStreetEditorEditTableViewCell.m in Sources */,
34AB66891FC5AA330078E451 /* NavigationControlView.swift in Sources */,
27BDA48A2E4366F400C478B8 /* MainButton.swift in Sources */,
479EE94A2292FB03009DEBA6 /* ActivityIndicator.swift in Sources */,
27697F872E255B8500FBD913 /* EmbeddedSafariViewContent.swift in Sources */,
ED3EAC202B03C88100220A4A /* BottomTabBarButton.swift in Sources */,
47B9065321C7FA400079C85E /* MWMImageCache.m in Sources */,
F6FEA82E1C58F108007223CC /* MWMButton.m in Sources */,
34B924431DC8A29C0008D971 /* MWMMailViewController.m in Sources */,
@@ -4830,7 +4807,6 @@
F6A2184A1CA3F26800BE2CC6 /* MWMEditorViralActivityItem.mm in Sources */,
993DF10923F6BDB100AC231A /* IFonts.swift in Sources */,
47699A0821F08E37009E6585 /* NSDate+TimeDistance.m in Sources */,
27BDA4902E436A1B00C478B8 /* MapZoomButtonKind.swift in Sources */,
34845DB31E165E24003D55B9 /* SearchNoResultsViewController.swift in Sources */,
47E3C72B2111E62A008B3B27 /* FadeOutAnimatedTransitioning.swift in Sources */,
471A7BC4248471BE00A0D4C1 /* BookmarkUIUtils.swift in Sources */,

View File

@@ -0,0 +1,52 @@
extension Settings {
/// The type of the left bottom bar button
enum LeftButtonType: String, Codable, CaseIterable, Identifiable {
case hidden = "Hidden"
case addPlace = "AddPlace"
case recordTrack = "RecordTrack"
case settings = "Settings"
case help = "Help"
// MARK: Properties
/// The id
var id: Self { self }
/// The description text
var description: String {
switch self {
case .hidden:
return String(localized: "disabled")
case .addPlace:
return String(localized: "placepage_add_place_button")
case .recordTrack:
return String(localized: "start_track_recording")
case .settings:
return String(localized: "settings")
case .help:
return String(localized: "help")
}
}
/// The image
var image: UIImage {
let configuration = UIImage.SymbolConfiguration(pointSize: 24, weight: .semibold)
switch self {
case .addPlace:
return UIImage(systemName: "plus", withConfiguration: configuration)!
case .recordTrack:
return UIImage(named: "track", in: nil, with: configuration)!
case .settings:
return UIImage(systemName: "gearshape.fill", withConfiguration: UIImage.SymbolConfiguration(pointSize: 22, weight: .semibold))!
case .help:
return UIImage(systemName: "info.circle", withConfiguration: configuration)!
default:
return UIImage()
}
}
}
}

View File

@@ -14,7 +14,7 @@ import AVFoundation
/// Key for storing the type of action used for the bottom left main interface button in the user defaults
static private let userDefaultsKeyLeftMainButtonKind = "LeftMainButtonKind"
static private let userDefaultsKeyLeftButtonType = "LeftButtonType"
/// Key for storing the map appearance in the user defaults
@@ -52,16 +52,16 @@ import AVFoundation
/// The type of action used for the bottom left main interface button
static var leftMainButtonKind: MainButton.Kind {
static var leftButtonType: LeftButtonType {
get {
if let leftMainButtonKindRawValue = UserDefaults.standard.string(forKey: userDefaultsKeyLeftMainButtonKind), let leftMainButtonKind = MainButton.Kind(rawValue: leftMainButtonKindRawValue) {
return leftMainButtonKind
if let leftButtonTypeRawValue = UserDefaults.standard.string(forKey: userDefaultsKeyLeftButtonType), let leftButtonType = LeftButtonType(rawValue: leftButtonTypeRawValue) {
return leftButtonType
}
return .help
}
set {
UserDefaults.standard.set(newValue.rawValue, forKey: userDefaultsKeyLeftMainButtonKind)
UserDefaults.standard.set(newValue.rawValue, forKey: userDefaultsKeyLeftButtonType)
}
}

View File

@@ -16,6 +16,10 @@ final class TabBarArea: AvailableArea {
let directions = ov.tabBarAreaAffectDirections
addConstraints(otherView: ov, directions: directions)
}
override func notifyObserver() {
BottomTabBarViewController.updateAvailableArea(areaFrame)
}
}
extension UIView {

View File

@@ -78,17 +78,17 @@ extension BottomMenuPresenter {
case .layers:
return 1
case .items:
let leftMainButtonKind = Settings.leftMainButtonKind
let leftButtonType = Settings.leftButtonType
menuCells = CellType.allCases.filter { cell in
if cell == .donate {
return false
} else if leftMainButtonKind == .addPlace, cell == .addPlace {
} else if leftButtonType == .addPlace, cell == .addPlace {
return false
} else if leftMainButtonKind == .recordTrack, cell == .recordTrack {
} else if leftButtonType == .recordTrack, cell == .recordTrack {
return false
} else if leftMainButtonKind == .help, cell == .help {
} else if leftButtonType == .help, cell == .help {
return false
} else if leftMainButtonKind == .settings, cell == .settings {
} else if leftButtonType == .settings, cell == .settings {
return false
}

View File

@@ -0,0 +1,14 @@
@objc class BottomTabBarBuilder: NSObject {
@objc static func build(mapViewController: MapViewController, controlsManager: MWMMapViewControlsManager) -> BottomTabBarViewController {
let viewController = BottomTabBarViewController(nibName: nil, bundle: nil)
let interactor = BottomTabBarInteractor(viewController: viewController,
mapViewController: mapViewController,
controlsManager: controlsManager)
let presenter = BottomTabBarPresenter(interactor: interactor)
interactor.presenter = presenter
viewController.presenter = presenter
return viewController
}
}

View File

@@ -1,8 +1,6 @@
import UIKit
class BottomTabBarButton: MWMButton {
let kExtendedTabBarTappableMargin: CGFloat = -15
@objc override func applyTheme() {
if styleName.isEmpty {
setStyle(.bottomTabBarButton)

View File

@@ -0,0 +1,75 @@
protocol BottomTabBarInteractorProtocol: AnyObject {
func openSearch()
func openLeftButton()
func openBookmarks()
func openMenu()
}
class BottomTabBarInteractor {
weak var presenter: BottomTabBarPresenterProtocol?
private weak var viewController: UIViewController?
private weak var mapViewController: MapViewController?
private weak var controlsManager: MWMMapViewControlsManager?
private let searchManager: SearchOnMapManager
init(viewController: UIViewController, mapViewController: MapViewController, controlsManager: MWMMapViewControlsManager) {
self.viewController = viewController
self.mapViewController = mapViewController
self.controlsManager = controlsManager
self.searchManager = mapViewController.searchManager
}
}
extension BottomTabBarInteractor: BottomTabBarInteractorProtocol {
func openSearch() {
searchManager.isSearching ? searchManager.close() : searchManager.startSearching(isRouting: false)
}
func openLeftButton() {
switch Settings.leftButtonType {
case .addPlace:
if let delegate = controlsManager as? BottomMenuDelegate {
delegate.addPlace()
}
case .settings:
mapViewController?.openSettings()
case .recordTrack:
let mapViewController = MapViewController.shared()!
let trackRecorder: TrackRecordingManager = .shared
switch trackRecorder.recordingState {
case .active:
mapViewController.showTrackRecordingPlacePage()
case .inactive:
trackRecorder.start { result in
switch result {
case .success:
mapViewController.showTrackRecordingPlacePage()
case .failure:
break
}
}
}
default:
mapViewController?.openAbout()
}
}
func openBookmarks() {
mapViewController?.bookmarksCoordinator.open()
}
func openMenu() {
guard let state = controlsManager?.menuState else {
fatalError("ERROR: Failed to retrieve the current MapViewControlsManager's state.")
}
switch state {
case .inactive: controlsManager?.menuState = .active
case .active: controlsManager?.menuState = .inactive
case .hidden:
// When the current controls manager's state is hidden, accidental taps on the menu button during the hiding animation should be skipped.
break;
case .layers: fallthrough
@unknown default: fatalError("ERROR: Unexpected MapViewControlsManager's state: \(state)")
}
}
}

View File

@@ -0,0 +1,37 @@
protocol BottomTabBarPresenterProtocol: AnyObject {
func configure()
func onLeftButtonPressed()
func onSearchButtonPressed()
func onBookmarksButtonPressed()
func onMenuButtonPressed()
}
class BottomTabBarPresenter: NSObject {
private let interactor: BottomTabBarInteractorProtocol
init(interactor: BottomTabBarInteractorProtocol) {
self.interactor = interactor
}
}
extension BottomTabBarPresenter: BottomTabBarPresenterProtocol {
func configure() {
}
func onLeftButtonPressed() {
interactor.openLeftButton()
}
func onSearchButtonPressed() {
interactor.openSearch()
}
func onBookmarksButtonPressed() {
interactor.openBookmarks()
}
func onMenuButtonPressed() {
interactor.openMenu()
}
}

View File

@@ -0,0 +1,28 @@
let kExtendedTabBarTappableMargin: CGFloat = -15
final class BottomTabBarView: SolidTouchView {
@IBOutlet var mainButtonsView: ExtendedBottomTabBarContainerView!
override var placePageAreaAffectDirections: MWMAvailableAreaAffectDirections {
return alternative(iPhone: [], iPad: [.bottom])
}
override var widgetsAreaAffectDirections: MWMAvailableAreaAffectDirections {
return [.bottom]
}
override var sideButtonsAreaAffectDirections: MWMAvailableAreaAffectDirections {
return [.bottom]
}
override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
return bounds.insetBy(dx: kExtendedTabBarTappableMargin, dy: kExtendedTabBarTappableMargin).contains(point)
}
}
final class ExtendedBottomTabBarContainerView: UIView {
override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
return bounds.insetBy(dx: kExtendedTabBarTappableMargin, dy: kExtendedTabBarTappableMargin).contains(point)
}
}

View File

@@ -0,0 +1,131 @@
class BottomTabBarViewController: UIViewController {
var presenter: BottomTabBarPresenterProtocol!
@IBOutlet var leftButton: MWMButton?
@IBOutlet var searchButton: MWMButton?
@IBOutlet var searchConstraintWithLeftButton: NSLayoutConstraint?
@IBOutlet var searchConstraintWithoutLeftButton: NSLayoutConstraint?
@IBOutlet var bookmarksButton: MWMButton?
@IBOutlet var bookmarksConstraintWithLeftButton: NSLayoutConstraint?
@IBOutlet var bookmarksConstraintWithoutLeftButton: NSLayoutConstraint?
@IBOutlet var moreButton: MWMButton?
@IBOutlet var downloadBadge: UIView?
private var avaliableArea = CGRect.zero
@objc var isHidden: Bool = false {
didSet {
updateFrame(animated: true)
}
}
@objc var isApplicationBadgeHidden: Bool = true {
didSet {
updateBadge()
}
}
var tabBarView: BottomTabBarView {
return view as! BottomTabBarView
}
@objc static var controller: BottomTabBarViewController? {
return MWMMapViewControlsManager.manager()?.tabBarController
}
override func viewDidLoad() {
super.viewDidLoad()
presenter.configure()
NotificationCenter.default.addObserver(forName: UserDefaults.didChangeNotification, object: nil, queue: nil) { _ in
DispatchQueue.main.async {
self.updateLeftButton()
}
}
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
leftButton?.imageView?.contentMode = .scaleAspectFit
updateBadge()
}
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
updateLeftButton()
}
static func updateAvailableArea(_ frame: CGRect) {
BottomTabBarViewController.controller?.updateAvailableArea(frame)
}
@IBAction func onSearchButtonPressed(_ sender: Any) {
presenter.onSearchButtonPressed()
}
@IBAction func onLeftButtonPressed(_ sender: Any) {
presenter.onLeftButtonPressed()
}
@IBAction func onBookmarksButtonPressed(_ sender: Any) {
presenter.onBookmarksButtonPressed()
}
@IBAction func onMenuButtonPressed(_ sender: Any) {
presenter.onMenuButtonPressed()
}
private func updateAvailableArea(_ frame:CGRect) {
avaliableArea = frame
updateFrame(animated: false)
self.view.layoutIfNeeded()
}
private func updateFrame(animated: Bool) {
if avaliableArea == .zero {
return
}
let newFrame = CGRect(x: avaliableArea.minX,
y: isHidden ? avaliableArea.minY + avaliableArea.height : avaliableArea.minY,
width: avaliableArea.width,
height: avaliableArea.height)
let alpha:CGFloat = isHidden ? 0 : 1
if animated {
UIView.animate(withDuration: kDefaultAnimationDuration,
delay: 0,
options: [.beginFromCurrentState],
animations: {
self.view.frame = newFrame
self.view.alpha = alpha
}, completion: nil)
} else {
self.view.frame = newFrame
self.view.alpha = alpha
}
}
private func updateLeftButton() {
let leftButtonType = Settings.leftButtonType
if leftButtonType == .hidden {
leftButton?.isHidden = true
if let searchConstraintWithLeftButton, let searchConstraintWithoutLeftButton, let bookmarksConstraintWithLeftButton, let bookmarksConstraintWithoutLeftButton {
NSLayoutConstraint.activate([searchConstraintWithoutLeftButton, bookmarksConstraintWithoutLeftButton])
NSLayoutConstraint.deactivate([searchConstraintWithLeftButton, bookmarksConstraintWithLeftButton])
}
} else {
leftButton?.isHidden = false
leftButton?.setTitle(nil, for: .normal)
leftButton?.setImage(leftButtonType.image, for: .normal)
leftButton?.accessibilityLabel = leftButtonType.description;
if let searchConstraintWithLeftButton, let searchConstraintWithoutLeftButton, let bookmarksConstraintWithLeftButton, let bookmarksConstraintWithoutLeftButton {
NSLayoutConstraint.activate([searchConstraintWithLeftButton, bookmarksConstraintWithLeftButton])
NSLayoutConstraint.deactivate([searchConstraintWithoutLeftButton, bookmarksConstraintWithoutLeftButton])
}
}
}
private func updateBadge() {
downloadBadge?.isHidden = isApplicationBadgeHidden
}
}

View File

@@ -0,0 +1,148 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="24128" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<device id="retina6_1" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="24063"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="BottomTabBarViewController" customModule="CoMaps" customModuleProvider="target">
<connections>
<outlet property="bookmarksButton" destination="dgG-ki-3tB" id="md5-3T-9tb"/>
<outlet property="bookmarksConstraintWithLeftButton" destination="Jc7-nc-elY" id="gW7-8e-E6m"/>
<outlet property="bookmarksConstraintWithoutLeftButton" destination="NRb-vj-MFg" id="C3Z-Ia-D6i"/>
<outlet property="downloadBadge" destination="uDI-ZC-4wx" id="fAf-cy-Ozn"/>
<outlet property="leftButton" destination="dzf-7Z-N6a" id="LMZ-H7-ftQ"/>
<outlet property="moreButton" destination="svD-yi-GrZ" id="kjk-ZW-nZN"/>
<outlet property="searchButton" destination="No0-ld-JX3" id="m5F-UT-j94"/>
<outlet property="searchConstraintWithLeftButton" destination="tDb-w1-ueQ" id="WaI-Xb-1bu"/>
<outlet property="searchConstraintWithoutLeftButton" destination="cQg-jW-uSD" id="cMy-EC-G07"/>
<outlet property="view" destination="zuH-WU-hiP" id="eoa-4I-wKs"/>
</connections>
</placeholder>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="zuH-WU-hiP" customClass="BottomTabBarView" customModule="CoMaps" customModuleProvider="target" propertyAccessControl="none">
<rect key="frame" x="0.0" y="0.0" width="373" height="84"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<view opaque="NO" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="vum-s3-PHx" userLabel="MainButtons" customClass="ExtendedBottomTabBarContainerView" customModule="CoMaps" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="373" height="48"/>
<subviews>
<button opaque="NO" contentMode="scaleAspectFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="dzf-7Z-N6a" userLabel="LeftButton" customClass="BottomTabBarButton" customModule="CoMaps" customModuleProvider="target">
<rect key="frame" x="22.5" y="0.0" width="48" height="48"/>
<accessibility key="accessibilityConfiguration" identifier="helpButton"/>
<constraints>
<constraint firstAttribute="width" secondItem="dzf-7Z-N6a" secondAttribute="height" id="qNJ-0K-sK0"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="30"/>
<inset key="imageEdgeInsets" minX="9" minY="9" maxX="9" maxY="9"/>
<state key="normal" image="info.circle" catalog="system"/>
<connections>
<action selector="onLeftButtonPressed:" destination="-1" eventType="touchUpInside" id="1gx-P2-sRJ"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="249" horizontalCompressionResistancePriority="751" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="No0-ld-JX3" userLabel="Search" customClass="BottomTabBarButton" customModule="CoMaps" customModuleProvider="target">
<rect key="frame" x="116" y="0.0" width="48" height="48"/>
<accessibility key="accessibilityConfiguration" identifier="searchButton"/>
<constraints>
<constraint firstAttribute="width" secondItem="No0-ld-JX3" secondAttribute="height" id="2bW-fc-Hsh"/>
</constraints>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" image="ic_menu_search"/>
<connections>
<action selector="onSearchButtonPressed:" destination="-1" eventType="touchUpInside" id="0D5-RB-HBQ"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleAspectFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="dgG-ki-3tB" userLabel="Bookmarks" customClass="BottomTabBarButton" customModule="CoMaps" customModuleProvider="target">
<rect key="frame" x="209" y="0.0" width="48" height="48"/>
<accessibility key="accessibilityConfiguration" identifier="bookmarksButton"/>
<constraints>
<constraint firstAttribute="width" secondItem="dgG-ki-3tB" secondAttribute="height" id="o3b-it-lrV"/>
</constraints>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" image="ic_menu_bookmark_list"/>
<connections>
<action selector="onBookmarksButtonPressed:" destination="-1" eventType="touchUpInside" id="9Z1-eg-xth"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleAspectFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="svD-yi-GrZ" userLabel="Menu" customClass="BottomTabBarButton" customModule="CoMaps" customModuleProvider="target">
<rect key="frame" x="302.5" y="0.0" width="48" height="48"/>
<accessibility key="accessibilityConfiguration" identifier="menuButton"/>
<constraints>
<constraint firstAttribute="width" secondItem="svD-yi-GrZ" secondAttribute="height" id="gmG-3a-Mqe"/>
</constraints>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<state key="normal" image="ic_menu"/>
<connections>
<action selector="onMenuButtonPressed:" destination="-1" eventType="touchUpInside" id="rzb-y4-nR1"/>
</connections>
</button>
<view userInteractionEnabled="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="uDI-ZC-4wx" userLabel="DownloadBadge">
<rect key="frame" x="329.5" y="11" width="10" height="10"/>
<color key="backgroundColor" red="1" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<accessibility key="accessibilityConfiguration">
<accessibilityTraits key="traits" notEnabled="YES"/>
</accessibility>
<constraints>
<constraint firstAttribute="width" constant="10" id="tEP-Xi-qnU"/>
<constraint firstAttribute="height" constant="10" id="wNg-5Z-7AO"/>
</constraints>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="styleName" value="Badge"/>
</userDefinedRuntimeAttributes>
</view>
</subviews>
<accessibility key="accessibilityConfiguration" identifier="MainButtons"/>
<constraints>
<constraint firstAttribute="height" constant="48" id="69A-eu-uLp"/>
<constraint firstItem="No0-ld-JX3" firstAttribute="centerY" secondItem="vum-s3-PHx" secondAttribute="centerY" id="8nL-zT-Y7b"/>
<constraint firstItem="No0-ld-JX3" firstAttribute="height" secondItem="vum-s3-PHx" secondAttribute="height" id="9eR-I7-7at"/>
<constraint firstItem="svD-yi-GrZ" firstAttribute="height" secondItem="vum-s3-PHx" secondAttribute="height" id="Fde-um-JL6"/>
<constraint firstItem="dgG-ki-3tB" firstAttribute="centerX" secondItem="vum-s3-PHx" secondAttribute="centerX" multiplier="1.25" id="Jc7-nc-elY"/>
<constraint firstItem="dgG-ki-3tB" firstAttribute="centerY" secondItem="vum-s3-PHx" secondAttribute="centerY" id="JjT-sc-hIY"/>
<constraint firstItem="dgG-ki-3tB" firstAttribute="centerX" secondItem="vum-s3-PHx" secondAttribute="centerX" priority="900" id="NRb-vj-MFg"/>
<constraint firstItem="svD-yi-GrZ" firstAttribute="centerX" secondItem="vum-s3-PHx" secondAttribute="centerX" multiplier="1.75" id="Q0b-gd-HwS"/>
<constraint firstItem="dgG-ki-3tB" firstAttribute="height" secondItem="vum-s3-PHx" secondAttribute="height" id="Rs8-Hl-CAc"/>
<constraint firstItem="uDI-ZC-4wx" firstAttribute="centerX" secondItem="svD-yi-GrZ" secondAttribute="centerX" constant="8" id="XNb-Ba-Hn7"/>
<constraint firstItem="dzf-7Z-N6a" firstAttribute="centerY" secondItem="vum-s3-PHx" secondAttribute="centerY" id="Zug-zY-KIX"/>
<constraint firstItem="No0-ld-JX3" firstAttribute="centerX" secondItem="vum-s3-PHx" secondAttribute="centerX" multiplier="0.25" priority="900" id="cQg-jW-uSD"/>
<constraint firstItem="svD-yi-GrZ" firstAttribute="centerY" secondItem="vum-s3-PHx" secondAttribute="centerY" id="sja-hO-YY3"/>
<constraint firstItem="No0-ld-JX3" firstAttribute="centerX" secondItem="vum-s3-PHx" secondAttribute="centerX" multiplier="0.75" id="tDb-w1-ueQ"/>
<constraint firstItem="dzf-7Z-N6a" firstAttribute="centerX" secondItem="vum-s3-PHx" secondAttribute="centerX" multiplier="0.25" id="u3G-gY-98J"/>
<constraint firstItem="dzf-7Z-N6a" firstAttribute="height" secondItem="vum-s3-PHx" secondAttribute="height" id="yTg-8g-H1p"/>
<constraint firstItem="uDI-ZC-4wx" firstAttribute="centerY" secondItem="svD-yi-GrZ" secondAttribute="centerY" constant="-8" id="yq3-ui-IaL"/>
</constraints>
<variation key="default">
<mask key="constraints">
<exclude reference="cQg-jW-uSD"/>
<exclude reference="NRb-vj-MFg"/>
</mask>
</variation>
</view>
</subviews>
<viewLayoutGuide key="safeArea" id="aaw-Hz-zma"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstItem="vum-s3-PHx" firstAttribute="top" secondItem="zuH-WU-hiP" secondAttribute="top" id="PQS-ro-25e"/>
<constraint firstItem="vum-s3-PHx" firstAttribute="leading" secondItem="zuH-WU-hiP" secondAttribute="leading" id="kza-JN-Dul"/>
<constraint firstAttribute="trailing" secondItem="vum-s3-PHx" secondAttribute="trailing" id="sM6-P2-rN9"/>
</constraints>
<nil key="simulatedStatusBarMetrics"/>
<nil key="simulatedTopBarMetrics"/>
<nil key="simulatedBottomBarMetrics"/>
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
<connections>
<outlet property="mainButtonsView" destination="vum-s3-PHx" id="fBi-DA-orA"/>
</connections>
<point key="canvasLocation" x="72" y="254"/>
</view>
</objects>
<resources>
<image name="ic_menu" width="48" height="48"/>
<image name="ic_menu_bookmark_list" width="48" height="48"/>
<image name="ic_menu_search" width="48" height="48"/>
<image name="info.circle" catalog="system" width="128" height="123"/>
</resources>
</document>

View File

@@ -1,144 +0,0 @@
import SwiftUI
/// View for the interface button
struct ControlsView: View {
// MARK: Properties
/// The dismiss action of the environment
@Environment(\.verticalSizeClass) private var verticalSizeClass
@State private var hasZoomButtons: Bool = true
@State private var leftMainButtonKind: MainButton.Kind = .hidden
@State private var hasMainButtons: Bool = true
/// The publisher to know when settings changed
private let settingsPublisher = NotificationCenter.default.publisher(for: UserDefaults.didChangeNotification)
/// The publisher to know when settings changed
private let changeVisibilityMainButtonsPublisher = NotificationCenter.default.publisher(for: Controls.changeVisibilityMainButtonsNotificationName)
/// The actual view
var body: some View {
ZStack {
if verticalSizeClass != .compact {
VStack(alignment: .trailing) {
HStack {
MapLayerButton()
Spacer(minLength: 0)
VStack {
MapTrackRecordingButton()
}
}
Spacer(minLength: 0)
VStack(spacing: 72) {
if hasZoomButtons {
VStack(spacing: 36) {
MapZoomButton(kind: .in)
MapZoomButton(kind: .out)
}
}
MapPositionButton()
}
Spacer(minLength: 0)
if hasMainButtons {
HStack {
if leftMainButtonKind != .hidden {
MainButton(kind: leftMainButtonKind)
Spacer(minLength: 0)
}
MainButton(kind: .search)
Spacer(minLength: 0)
MainButton(kind: .bookmarks)
Spacer(minLength: 0)
MainButton(kind: .more)
}
.frame(maxWidth: .infinity)
}
}
.padding([.leading, .trailing], 10)
} else {
HStack {
VStack(alignment: .leading) {
MapLayerButton()
Spacer(minLength: 0)
if hasMainButtons {
HStack(spacing: 32) {
if leftMainButtonKind != .hidden {
MainButton(kind: leftMainButtonKind)
}
MainButton(kind: .search)
MainButton(kind: .bookmarks)
MainButton(kind: .more)
}
}
}
Spacer(minLength: 0)
VStack(alignment: .trailing) {
VStack {
MapTrackRecordingButton()
}
Spacer(minLength: 0)
if hasZoomButtons {
VStack(spacing: 36) {
MapZoomButton(kind: .in)
MapZoomButton(kind: .out)
}
}
Spacer(minLength: 0)
MapPositionButton()
}
}
}
}
.padding(.top, 14)
.padding(.bottom, 2)
.frame(maxWidth: .infinity, maxHeight: .infinity)
.onAppear {
hasZoomButtons = Settings.hasZoomButtons
leftMainButtonKind = Settings.leftMainButtonKind
hasMainButtons = Controls.shared().hasMainButtons()
}
.onReceive(settingsPublisher) { _ in
hasZoomButtons = Settings.hasZoomButtons
leftMainButtonKind = Settings.leftMainButtonKind
}
.onReceive(changeVisibilityMainButtonsPublisher) { _ in
hasMainButtons = Controls.shared().hasMainButtons()
}
}
}

View File

@@ -1,39 +0,0 @@
import SwiftUI
struct FloatingButtonStyle: ButtonStyle {
/// If the button is round
var isRound: Bool = true
func makeBody(configuration: Configuration) -> some View {
configuration.label
.labelStyle(.iconOnly)
.padding(10)
.aspectRatio(1, contentMode: .fill)
.background {
if isRound {
Circle()
.stroke(Color.white.opacity(0.7), lineWidth: 1)
.background {
Color.white.opacity(configuration.isPressed ? 0.7 : 0.8)
.clipShape(Circle())
}
.aspectRatio(1, contentMode: .fill)
.shadow(radius: 2)
} else {
RoundedRectangle(cornerRadius: 8)
.stroke(Color.white.opacity(0.7), lineWidth: 1)
.background {
Color.white.opacity(configuration.isPressed ? 0.7 : 0.8)
.clipShape(RoundedRectangle(cornerRadius: 8))
}
.aspectRatio(1, contentMode: .fill)
.shadow(radius: 3)
}
}
.font(.title2)
.foregroundStyle(configuration.role == .destructive ? Color(.BaseColors.red) : Color.secondary)
.scaleEffect(configuration.isPressed ? (isRound ? 0.96 : 0.98) : 1)
.animation(.smooth, value: configuration.isPressed)
}
}

View File

@@ -1,79 +0,0 @@
import SwiftUI
/// View for a main button
struct MainButton: View {
// MARK: Properties
/// The kind
var kind: MainButton.Kind
/// The actual view
var body: some View {
if kind != .hidden {
Button {
if kind == .addPlace {
if let controlsManager = MWMMapViewControlsManager.manager() as? BottomMenuDelegate {
controlsManager.addPlace()
}
} else if kind == .recordTrack {
let trackRecorder: TrackRecordingManager = .shared
switch trackRecorder.recordingState {
case .active:
MapViewController.shared()?.showTrackRecordingPlacePage()
case .inactive:
trackRecorder.start { result in
switch result {
case .success:
MapViewController.shared()?.showTrackRecordingPlacePage()
case .failure:
break
}
}
}
} else if kind == .search {
if let searchManager = MapViewController.shared()?.searchManager {
if searchManager.isSearching {
searchManager.close()
} else {
searchManager.startSearching(isRouting: false)
}
}
} else if kind == .bookmarks {
MapViewController.shared()?.bookmarksCoordinator.open()
} else if kind == .settings {
MapViewController.shared()?.openSettings()
} else if kind == .help {
MapViewController.shared()?.openAbout()
} else if kind == .more {
if let controlsManager = MWMMapViewControlsManager.manager() {
if controlsManager.menuState == .active {
controlsManager.menuState = .inactive
} else if controlsManager.menuState == .inactive {
controlsManager.menuState = .active
}
}
} else if kind == .layers {
if MapOverlayManager.trafficEnabled() || MapOverlayManager.transitEnabled() || MapOverlayManager.isoLinesEnabled() || MapOverlayManager.outdoorEnabled() {
MapOverlayManager.setTrafficEnabled(false)
MapOverlayManager.setTransitEnabled(false)
MapOverlayManager.setIsoLinesEnabled(false)
MapOverlayManager.setOutdoorEnabled(false)
} else {
MWMMapViewControlsManager.manager()?.menuState = .layers
}
}
} label: {
Label {
Text(kind.description)
} icon: {
if kind != .layers, let image = kind.image {
image
}
}
}
.buttonStyle(FloatingButtonStyle(isRound: false))
.frame(minWidth: 44, idealWidth: 44, minHeight: 44, idealHeight: 44)
}
}
}

View File

@@ -1,81 +0,0 @@
import SwiftUI
extension MainButton {
/// The type of the left bottom bar button
enum Kind: String, Codable, CaseIterable, Identifiable {
case hidden = "Hidden"
case addPlace = "AddPlace"
case recordTrack = "RecordTrack"
case search = "Search"
case bookmarks = "Bookmarks"
case settings = "Settings"
case help = "Help"
case more = "More"
case layers = "Layers"
// MARK: Properties
/// The configurable cases
static var configurableCases: [MainButton.Kind] {
allCases.filter { kind in
return kind != .more && kind != .bookmarks && kind != .search
}
}
/// The id
var id: Self { self }
/// The description text
var description: String {
switch self {
case .hidden:
return String(localized: "disabled")
case .addPlace:
return String(localized: "placepage_add_place_button")
case .recordTrack:
return String(localized: "start_track_recording")
case .search:
return String(localized: "search")
case .bookmarks:
return String(localized: "bookmarks")
case .settings:
return String(localized: "settings")
case .help:
return String(localized: "help")
case .more:
return String(localized: "placepage_more_button")
case .layers:
return String(localized: "layers_title")
}
}
/// The image
var image: Image? {
switch self {
case .addPlace:
return Image(systemName: "plus")
case .recordTrack:
return Image(.MainButtons.LeftButton.recordTrack)
case .search:
return Image(systemName: "magnifyingglass")
case .bookmarks:
return Image(systemName: "list.star")
case .settings:
return Image(systemName: "gearshape.fill")
case .help:
return Image(systemName: "info.circle")
case .layers:
return Image(systemName: "square.stack.3d.up.fill")
case .more:
return Image(systemName: "ellipsis.circle")
default:
return nil
}
}
}
}

View File

@@ -1,27 +0,0 @@
import SwiftUI
/// View for a map layer button
struct MapLayerButton: View {
// MARK: Properties
/// The actual view
var body: some View {
Group {
if Settings.leftMainButtonKind != .layers {
Button {
if MapOverlayManager.trafficEnabled() || MapOverlayManager.transitEnabled() || MapOverlayManager.isoLinesEnabled() || MapOverlayManager.outdoorEnabled() {
MapOverlayManager.setTrafficEnabled(false)
MapOverlayManager.setTransitEnabled(false)
MapOverlayManager.setIsoLinesEnabled(false)
MapOverlayManager.setOutdoorEnabled(false)
} else {
MWMMapViewControlsManager.manager()?.menuState = .layers
}
} label: {
Label("Show Layers", systemImage: "square.stack.3d.up.fill")
}
.buttonStyle(FloatingButtonStyle())
}
}
}
}

View File

@@ -1,39 +0,0 @@
import SwiftUI
/// View for a map position mode button
struct MapPositionButton: View {
// MARK: Properties
/// The mode
@State private var mode: MapPositionButton.Mode = .locate
/// The publisher to know when to stop showing the Safari view for the login form
private let switchPositionModePublisher = NotificationCenter.default.publisher(for: Controls.switchPositionModeNotificationName)
/// The actual view
var body: some View {
Button {
Controls.switchToNextPositionMode()
} label: {
Label {
Text(mode.description)
} icon: {
if mode == .following || mode == .followingAndRotated {
mode.image
.foregroundStyle(Color.BaseColors.blue)
} else {
mode.image
}
}
}
.buttonStyle(FloatingButtonStyle())
.onAppear {
mode = Controls.positionMode
}
.onReceive(switchPositionModePublisher) { _ in
mode = Controls.positionMode
}
}
}

View File

@@ -1,48 +0,0 @@
import SwiftUI
extension MapPositionButton {
/// The mode of the map position button
enum Mode: String, Codable, CaseIterable, Identifiable {
case locate = "Locate"
case locating = "Locating"
case following = "Following"
case followingAndRotated = "FollowingAndRotated"
// MARK: Properties
/// The id
var id: Self { self }
/// The description text
var description: String {
switch self {
case .locate:
return String(localized: "Find own location")
case .locating:
return String(localized: "Finding own location...")
case .following:
return String(localized: "Rotate map towards own direction")
case .followingAndRotated:
return String(localized: "Rotate map towards North")
}
}
/// The image
var image: Image {
switch self {
case .locate:
return Image(systemName: "location")
case .locating:
return Image(systemName: "progress.indicator")
case .following:
return Image(systemName: "location.fill")
case .followingAndRotated:
return Image(systemName: "location.north.line.fill")
}
}
}
}

View File

@@ -1,45 +0,0 @@
import SwiftUI
/// View for a map track recording button
struct MapTrackRecordingButton: View {
// MARK: Properties
/// The mode
@State private var isRecording: Bool = false
/// The publisher to know when to stop showing the Safari view for the login form
private let changeChangeTrackRecordingPublisher = NotificationCenter.default.publisher(for: Controls.changeChangeTrackRecordingNotificationName)
/// The actual view
var body: some View {
ZStack {
if isRecording {
Button(role: .destructive) {
if isRecording {
MapViewController.shared()?.showTrackRecordingPlacePage()
} else {
TrackRecordingManager.shared.start { result in
switch result {
case .success:
MapViewController.shared()?.showTrackRecordingPlacePage()
case .failure:
break
}
}
}
} label: {
Label("Show Track Recording", systemImage: "record.circle")
}
.buttonStyle(FloatingButtonStyle())
}
}
.onAppear {
isRecording = (TrackRecordingManager.shared.recordingState == .active)
}
.onReceive(changeChangeTrackRecordingPublisher) { _ in
isRecording = (TrackRecordingManager.shared.recordingState == .active)
}
}
}

View File

@@ -1,28 +0,0 @@
import SwiftUI
/// View for a map zoom button
struct MapZoomButton: View {
// MARK: Properties
/// The kind
var kind: MapZoomButton.Kind
/// The actual view
var body: some View {
Button {
if kind == .in {
Controls.zoomIn()
} else if kind == .out {
Controls.zoomOut()
}
} label: {
Label {
Text(kind.description)
} icon: {
kind.image
}
}
.buttonStyle(FloatingButtonStyle())
}
}

View File

@@ -1,38 +0,0 @@
import SwiftUI
extension MapZoomButton {
/// The type of the map zoom button
enum Kind: String, Codable, CaseIterable, Identifiable {
case `in` = "In"
case out = "Out"
// MARK: Properties
/// The id
var id: Self { self }
/// The description text
var description: String {
switch self {
case .in:
return String(localized: "zoom_in")
case .out:
return String(localized: "zoom_out")
}
}
/// The image
var image: Image {
switch self {
case .in:
return Image(systemName: "plus")
case .out:
return Image(systemName: "minus")
}
}
}
}

View File

@@ -17,7 +17,7 @@ struct SettingsView: View {
/// The selected left button type
@State private var selectedLeftMainButtonKind: MainButton.Kind = .help
@State private var selectedLeftButtonType: Settings.LeftButtonType = .help
/// If 3D buildings should be displayed
@@ -112,9 +112,9 @@ struct SettingsView: View {
Toggle("pref_zoom_title", isOn: $hasZoomButtons)
.tint(.accent)
Picker(selection: $selectedLeftMainButtonKind) {
ForEach(MainButton.Kind.configurableCases) { leftMainButtonKind in
Text(leftMainButtonKind.description)
Picker(selection: $selectedLeftButtonType) {
ForEach(Settings.LeftButtonType.allCases) { leftButtonType in
Text(leftButtonType.description)
}
} label: {
Text("pref_left_button_type")
@@ -291,7 +291,7 @@ struct SettingsView: View {
.onAppear {
selectedDistanceUnit = Settings.distanceUnit
hasZoomButtons = Settings.hasZoomButtons
selectedLeftMainButtonKind = Settings.leftMainButtonKind
selectedLeftButtonType = Settings.leftButtonType
has3dBuildings = Settings.has3dBuildings
hasAutomaticDownload = Settings.hasAutomaticDownload
hasIncreasedFontsize = Settings.hasIncreasedFontsize
@@ -311,8 +311,8 @@ struct SettingsView: View {
.onChange(of: hasZoomButtons) { changedHasZoomButtons in
Settings.hasZoomButtons = changedHasZoomButtons
}
.onChange(of: selectedLeftMainButtonKind) { changedSelectedLeftMainButtonKind in
Settings.leftMainButtonKind = changedSelectedLeftMainButtonKind
.onChange(of: selectedLeftButtonType) { changedSelectedLeftButtonType in
Settings.leftButtonType = changedSelectedLeftButtonType
}
.onChange(of: has3dBuildings) { changedHas3dBuildings in
Settings.has3dBuildings = changedHas3dBuildings

View File

@@ -196,22 +196,14 @@ m2::PointF GetOffset(int offsetX, int offsetY)
bool IsSymbolRoadShield(ftypes::RoadShield const & shield)
{
return shield.m_type == ftypes::RoadShieldType::Highway_Hexagon_Green || shield.m_type == ftypes::RoadShieldType::Highway_Hexagon_Blue || shield.m_type == ftypes::RoadShieldType::Highway_Hexagon_Red || shield.m_type == ftypes::RoadShieldType::Highway_Hexagon_Turkey || shield.m_type == ftypes::RoadShieldType::US_Interstate || shield.m_type == ftypes::RoadShieldType::US_Highway || shield.m_type == ftypes::RoadShieldType::Italy_Autostrada;
return shield.m_type == ftypes::RoadShieldType::US_Interstate || shield.m_type == ftypes::RoadShieldType::US_Highway || shield.m_type == ftypes::RoadShieldType::Italy_Autostrada;
}
std::string GetRoadShieldSymbolName(ftypes::RoadShield const & shield, double fontScale)
{
ASSERT(IsSymbolRoadShield(shield), ());
std::string result = "";
if (shield.m_type == ftypes::RoadShieldType::Highway_Hexagon_Green)
result = "shield-highway_hexagon_green";
else if (shield.m_type == ftypes::RoadShieldType::Highway_Hexagon_Blue)
result = "shield-highway_hexagon_blue";
else if (shield.m_type == ftypes::RoadShieldType::Highway_Hexagon_Red)
result = "shield-highway_hexagon_red";
else if (shield.m_type == ftypes::RoadShieldType::Highway_Hexagon_Turkey)
result = "shield-highway_hexagon_turkey";
else if (shield.m_type == ftypes::RoadShieldType::US_Interstate)
if (shield.m_type == ftypes::RoadShieldType::US_Interstate)
result = shield.m_name.size() <= 2 ? "shield-us-i-thin" : "shield-us-i-wide";
else if (shield.m_type == ftypes::RoadShieldType::US_Highway)
result = shield.m_name.size() <= 2 ? "shield-us-hw-thin" : "shield-us-hw-wide";
@@ -314,10 +306,6 @@ dp::Color GetRoadShieldTextColor(dp::Color const & baseColor, ftypes::RoadShield
{RoadShieldType::Generic_Pill_Blue_Bordered, kRoadShieldWhiteTextColor},
{RoadShieldType::Generic_Pill_Red_Bordered, kRoadShieldWhiteTextColor},
{RoadShieldType::Generic_Pill_Orange_Bordered, kRoadShieldBlackTextColor},
{RoadShieldType::Highway_Hexagon_Green, kRoadShieldWhiteTextColor},
{RoadShieldType::Highway_Hexagon_Blue, kRoadShieldWhiteTextColor},
{RoadShieldType::Highway_Hexagon_Red, kRoadShieldWhiteTextColor},
{RoadShieldType::Highway_Hexagon_Turkey, kRoadShieldBlackTextColor},
{RoadShieldType::US_Interstate, kRoadShieldWhiteTextColor},
{RoadShieldType::US_Highway, kRoadShieldBlackTextColor},
{RoadShieldType::UK_Highway, kRoadShieldUKYellowTextColor},

View File

@@ -353,7 +353,7 @@ void RuleDrawer::ProcessLineStyle(FeatureType & f, Stylist const & s, TInsertSha
df::RoadClass m_roadClass;
};
static Checker const checkers[] = {
{{HighwayClass::Motorway, HighwayClass::Trunk, HighwayClass::Primary}, kRoadClass0ZoomLevel, df::RoadClass::Class0},
{{HighwayClass::Trunk, HighwayClass::Primary}, kRoadClass0ZoomLevel, df::RoadClass::Class0},
{{HighwayClass::Secondary, HighwayClass::Tertiary}, kRoadClass1ZoomLevel, df::RoadClass::Class1},
{{HighwayClass::LivingStreet, HighwayClass::Service, HighwayClass::ServiceMinor},
kRoadClass2ZoomLevel,

View File

@@ -30,8 +30,8 @@ public:
m_map[c.GetTypeByPath({"route", "ferry"})] = HighwayClass::Transported;
m_map[c.GetTypeByPath({"route", "shuttle_train"})] = HighwayClass::Transported;
m_map[c.GetTypeByPath({"highway", "motorway"})] = HighwayClass::Motorway;
m_map[c.GetTypeByPath({"highway", "motorway_link"})] = HighwayClass::Motorway;
m_map[c.GetTypeByPath({"highway", "motorway"})] = HighwayClass::Trunk;
m_map[c.GetTypeByPath({"highway", "motorway_link"})] = HighwayClass::Trunk;
m_map[c.GetTypeByPath({"highway", "trunk"})] = HighwayClass::Trunk;
m_map[c.GetTypeByPath({"highway", "trunk_link"})] = HighwayClass::Trunk;
@@ -83,7 +83,6 @@ char const * HighwayClassToString(HighwayClass const cls)
{
case HighwayClass::Undefined: return "Undefined";
case HighwayClass::Transported: return "Transported";
case HighwayClass::Motorway: return "Motorway";
case HighwayClass::Trunk: return "Trunk";
case HighwayClass::Primary: return "Primary";
case HighwayClass::Secondary: return "Secondary";

View File

@@ -674,7 +674,6 @@ uint64_t GetPopulationByRadius(double r);
enum class HighwayClass
{
Undefined = 0, // There has not been any attempt of calculating HighwayClass.
Motorway,
Trunk,
Primary,
Secondary,

View File

@@ -107,7 +107,7 @@ UNIT_TEST(GetHighwayClassTest)
feature::TypesHolder types2;
types2.Add(c.GetTypeByPath({"highway", "motorway_link", "tunnel"}));
TEST_EQUAL(ftypes::GetHighwayClass(types2), ftypes::HighwayClass::Motorway, ());
TEST_EQUAL(ftypes::GetHighwayClass(types2), ftypes::HighwayClass::Trunk, ());
feature::TypesHolder types3;
types3.Add(c.GetTypeByPath({"highway", "unclassified"}));

View File

@@ -94,7 +94,7 @@ class RoadShieldParser
public:
explicit RoadShieldParser(std::string const & baseRoadNumber) : m_baseRoadNumber(baseRoadNumber) {}
virtual ~RoadShieldParser() = default;
virtual RoadShield ParseRoadShield(std::string_view rawText, uint8_t index) const = 0;
virtual RoadShield ParseRoadShield(std::string_view rawText) const = 0;
RoadShieldType FindNetworkShield(std::string network) const
{
@@ -127,20 +127,18 @@ public:
RoadShieldsSetT GetRoadShields() const
{
RoadShieldsSetT result, defaultShields;
uint8_t index = 0;
strings::Tokenize(m_baseRoadNumber, ";", [&](std::string_view rawText)
{
++index;
RoadShield shield;
auto slashPos = rawText.find('/');
if (slashPos == std::string::npos)
{
shield = ParseRoadShield(rawText, index);
shield = ParseRoadShield(rawText);
}
else
{
shield = ParseRoadShield(rawText.substr(slashPos + 1), index);
shield = ParseRoadShield(rawText.substr(slashPos + 1));
// TODO: use a network-based shield type override only if a parser couldn't make it
// more specific than country's default shield type.
// E.g. "94" is set to Generic_Orange by Estonia parser, but then
@@ -178,7 +176,7 @@ class USRoadShieldParser : public RoadShieldParser
{
public:
explicit USRoadShieldParser(std::string const & baseRoadNumber) : RoadShieldParser(baseRoadNumber) {}
RoadShield ParseRoadShield(std::string_view rawText, uint8_t index) const override
RoadShield ParseRoadShield(std::string_view rawText) const override
{
std::string shieldText(rawText);
@@ -238,7 +236,7 @@ class IndiaRoadShieldParser : public RoadShieldParser
{
public:
explicit IndiaRoadShieldParser(std::string const & baseRoadNumber) : RoadShieldParser(baseRoadNumber) {}
RoadShield ParseRoadShield(std::string_view rawText, uint8_t index) const override
RoadShield ParseRoadShield(std::string_view rawText) const override
{
std::string shieldText(rawText);
@@ -271,7 +269,7 @@ public:
, m_type(defaultType)
{}
RoadShield ParseRoadShield(std::string_view rawText, uint8_t index) const override
RoadShield ParseRoadShield(std::string_view rawText) const override
{
if (rawText.size() > kMaxRoadShieldBytesSize)
return RoadShield();
@@ -306,7 +304,7 @@ public:
, m_defaultType(defaultType)
{}
RoadShield ParseRoadShield(std::string_view rawText, uint8_t index) const override
RoadShield ParseRoadShield(std::string_view rawText) const override
{
if (rawText.size() > kMaxRoadShieldBytesSize)
return RoadShield();
@@ -331,72 +329,6 @@ private:
RoadShieldType const m_defaultType;
};
// Matches by a list of given highway classes for the first shield.
// Falls back to matching by a list of given substrings (identical to SimpleRoadShieldParser) for all other shields.
class HighwayClassRoadShieldParser : public RoadShieldParser
{
public:
struct Entry
{
Entry() = default;
Entry(std::string_view name, HighwayClass highwayClass, RoadShieldType type, bool isRedundant = false) : m_name(name), m_highwayClass(highwayClass), m_type(type), m_isRedundant(isRedundant) {}
std::string_view m_name;
HighwayClass m_highwayClass = HighwayClass::Undefined;
RoadShieldType m_type = RoadShieldType::Default;
/* Hides a specific secondary etc. sign, if there is a primary one */
bool m_isRedundant = false;
};
using ShieldTypes = buffer_vector<Entry, 8>;
HighwayClassRoadShieldParser(std::string const & baseRoadNumber, HighwayClass highwayClass, ShieldTypes && types, RoadShieldType defaultType = RoadShieldType::Default)
: RoadShieldParser(baseRoadNumber)
, m_highwayClass(highwayClass)
, m_types(std::move(types))
, m_defaultType(defaultType)
{}
RoadShield ParseRoadShield(std::string_view rawText, uint8_t index) const override
{
if (rawText.size() > kMaxRoadShieldBytesSize)
return RoadShield();
RoadShieldType type = m_defaultType;
if (index == 1) {
for (auto const & p : m_types)
{
if (p.m_highwayClass == m_highwayClass)
{
return RoadShield(p.m_type, rawText);
}
}
} else {
size_t idx = std::numeric_limits<size_t>::max();
for (auto const & p : m_types)
{
auto const i = rawText.find(p.m_name);
if (i != std::string::npos && i < idx)
{
if (p.m_isRedundant) {
type = RoadShieldType::Hidden;
} else {
type = p.m_type;
}
idx = i;
}
}
}
return {type, rawText};
}
private:
HighwayClass const m_highwayClass;
ShieldTypes const m_types;
RoadShieldType const m_defaultType;
};
uint16_t constexpr kAnyHigherRoadNumber = std::numeric_limits<uint16_t>::max();
// Matches by a list of numeric ranges (a first matching range is used).
@@ -422,7 +354,7 @@ public:
, m_types(std::move(types))
{}
RoadShield ParseRoadShield(std::string_view rawText, uint8_t index) const override
RoadShield ParseRoadShield(std::string_view rawText) const override
{
if (rawText.size() > kMaxRoadShieldBytesSize)
return RoadShield();
@@ -471,7 +403,7 @@ public:
, m_defaultType(defaultType)
{}
RoadShield ParseRoadShield(std::string_view rawText, uint8_t index) const override
RoadShield ParseRoadShield(std::string_view rawText) const override
{
uint32_t constexpr kMaxRoadShieldSymbolsSize = 4 * kMaxRoadShieldBytesSize;
@@ -497,15 +429,14 @@ private:
// Implementations of "ref" parses for some countries.
class AustriaRoadShieldParser : public HighwayClassRoadShieldParser
class AustriaRoadShieldParser : public SimpleRoadShieldParser
{
public:
explicit AustriaRoadShieldParser(std::string const & baseRoadNumber, HighwayClass const & highwayClass)
: HighwayClassRoadShieldParser(baseRoadNumber, highwayClass,
{{"A", HighwayClass::Motorway, RoadShieldType::Generic_Blue_Bordered},
{"S", HighwayClass::Trunk, RoadShieldType::Generic_Blue_Bordered},
{"B", HighwayClass::Primary, RoadShieldType::Generic_Blue},
{"L", HighwayClass::Secondary, RoadShieldType::Generic_Pill_White_Bordered}})
explicit AustriaRoadShieldParser(std::string const & baseRoadNumber)
: SimpleRoadShieldParser(baseRoadNumber, {{"A", RoadShieldType::Generic_Blue_Bordered},
{"S", RoadShieldType::Generic_Blue_Bordered},
{"B", RoadShieldType::Generic_Blue},
{"L", RoadShieldType::Generic_Pill_White_Bordered}})
{}
};
@@ -523,7 +454,7 @@ class GreeceRoadShieldParser : public SimpleRoadShieldParser
public:
explicit GreeceRoadShieldParser(std::string const & baseRoadNumber)
: SimpleRoadShieldParser(baseRoadNumber,
{{"Α", RoadShieldType::Highway_Hexagon_Green}, {"Ε", RoadShieldType::Generic_Blue}})
{{"Α", RoadShieldType::Generic_Green}, {"Ε", RoadShieldType::Generic_Blue}})
{}
};
@@ -549,15 +480,6 @@ public:
{}
};
class TurkeyRoadShieldParser : public SimpleRoadShieldParser
{
public:
explicit TurkeyRoadShieldParser(std::string const & baseRoadNumber)
: SimpleRoadShieldParser(baseRoadNumber, {{"O", RoadShieldType::Highway_Hexagon_Turkey},
{"D", RoadShieldType::Generic_Blue}})
{}
};
class LativaRoadShieldParser : public SimpleRoadShieldParser
{
public:
@@ -602,7 +524,7 @@ class SerbiaRoadShieldParser : public SimpleRoadShieldParser
{
public:
explicit SerbiaRoadShieldParser(std::string const & baseRoadNumber)
: SimpleRoadShieldParser(baseRoadNumber, {{"A", RoadShieldType::Highway_Hexagon_Green}})
: SimpleRoadShieldParser(baseRoadNumber, {{"A", RoadShieldType::Generic_Green}})
{}
};
@@ -618,7 +540,7 @@ class SloveniaRoadShieldParser : public SimpleRoadShieldParser
{
public:
explicit SloveniaRoadShieldParser(std::string const & baseRoadNumber)
: SimpleRoadShieldParser(baseRoadNumber, {{"A", RoadShieldType::Highway_Hexagon_Green}})
: SimpleRoadShieldParser(baseRoadNumber, {{"A", RoadShieldType::Generic_Green}})
{}
};
@@ -626,7 +548,7 @@ class SwitzerlandRoadShieldParser : public SimpleRoadShieldParser
{
public:
explicit SwitzerlandRoadShieldParser(std::string const & baseRoadNumber)
: SimpleRoadShieldParser(baseRoadNumber, {{"A", RoadShieldType::Highway_Hexagon_Red}})
: SimpleRoadShieldParser(baseRoadNumber, {{"A", RoadShieldType::Generic_Red}})
{}
};
@@ -634,7 +556,7 @@ class LiechtensteinRoadShieldParser : public SimpleRoadShieldParser
{
public:
explicit LiechtensteinRoadShieldParser(std::string const & baseRoadNumber)
: SimpleRoadShieldParser(baseRoadNumber, {{"A", RoadShieldType::Highway_Hexagon_Red}})
: SimpleRoadShieldParser(baseRoadNumber, {{"A", RoadShieldType::Generic_Red}})
{}
};
@@ -654,16 +576,11 @@ public:
{}
};
class UKRoadShieldParser : public HighwayClassRoadShieldParser
class UKRoadShieldParser : public SimpleRoadShieldParser
{
public:
explicit UKRoadShieldParser(std::string const & baseRoadNumber, HighwayClass const & highwayClass)
: HighwayClassRoadShieldParser(baseRoadNumber, highwayClass,
{{"M", HighwayClass::Motorway, RoadShieldType::Generic_Blue, true},
{"E", HighwayClass::Motorway, RoadShieldType::Hidden},
{"A", HighwayClass::Trunk, RoadShieldType::UK_Highway, true},
{"A", HighwayClass::Primary, RoadShieldType::Generic_White_Bordered},
{"B", HighwayClass::Secondary, RoadShieldType::Generic_White_Bordered}})
explicit UKRoadShieldParser(std::string const & baseRoadNumber)
: SimpleRoadShieldParser(baseRoadNumber, {{"M", RoadShieldType::Generic_Blue}, {"A", RoadShieldType::UK_Highway}})
{}
};
@@ -679,17 +596,14 @@ public:
{}
};
class GermanyRoadShieldParser : public HighwayClassRoadShieldParser
class GermanyRoadShieldParser : public SimpleRoadShieldParser
{
public:
explicit GermanyRoadShieldParser(std::string const & baseRoadNumber, HighwayClass const & highwayClass)
: HighwayClassRoadShieldParser(baseRoadNumber, highwayClass,
{{"A", HighwayClass::Motorway, RoadShieldType::Highway_Hexagon_Blue},
{"D", HighwayClass::Motorway, RoadShieldType::Hidden},
{"B", HighwayClass::Trunk, RoadShieldType::Generic_Orange_Bordered},
{"B", HighwayClass::Primary, RoadShieldType::Generic_Orange_Bordered},
{"L", HighwayClass::Secondary, RoadShieldType::Generic_White_Bordered},
{"K", HighwayClass::Secondary, RoadShieldType::Generic_White_Bordered}})
explicit GermanyRoadShieldParser(std::string const & baseRoadNumber)
: SimpleRoadShieldParser(baseRoadNumber, {{"A", RoadShieldType::Generic_Blue},
{"B", RoadShieldType::Generic_Orange_Bordered},
{"L", RoadShieldType::Generic_White_Bordered},
{"K", RoadShieldType::Generic_White_Bordered}})
{}
};
@@ -796,7 +710,7 @@ class MexicoRoadShieldParser : public RoadShieldParser
public:
explicit MexicoRoadShieldParser(std::string const & baseRoadNumber) : RoadShieldParser(baseRoadNumber) {}
RoadShield ParseRoadShield(std::string_view rawText, uint8_t index) const override
RoadShield ParseRoadShield(std::string_view rawText) const override
{
std::string shieldText(rawText);
@@ -839,10 +753,6 @@ RoadShieldsSetT GetRoadShields(FeatureType & f)
if (ref.empty())
return {};
auto const & highwayClass = ftypes::GetHighwayClass(feature::TypesHolder(f));
if (highwayClass == HighwayClass::Undefined)
return {};
// Find out country name.
std::string mwmName = f.GetID().GetMwmName();
ASSERT(!mwmName.empty(), (f.GetID()));
@@ -851,19 +761,19 @@ RoadShieldsSetT GetRoadShields(FeatureType & f)
if (underlinePos != std::string::npos)
mwmName = mwmName.substr(0, underlinePos);
return GetRoadShields(mwmName, ref, highwayClass);
return GetRoadShields(mwmName, ref);
}
RoadShieldsSetT GetRoadShields(std::string const & mwmName, std::string const & roadNumber, HighwayClass const & highwayClass)
RoadShieldsSetT GetRoadShields(std::string const & mwmName, std::string const & roadNumber)
{
if (mwmName == "US")
return USRoadShieldParser(roadNumber).GetRoadShields();
if (mwmName == "UK")
return UKRoadShieldParser(roadNumber, highwayClass).GetRoadShields();
return UKRoadShieldParser(roadNumber).GetRoadShields();
if (mwmName == "India")
return IndiaRoadShieldParser(roadNumber).GetRoadShields();
if (mwmName == "Austria")
return AustriaRoadShieldParser(roadNumber, highwayClass).GetRoadShields();
return AustriaRoadShieldParser(roadNumber).GetRoadShields();
if (mwmName == "Belgium")
return BelgiumRoadShieldParser(roadNumber).GetRoadShields();
if (mwmName == "Greece")
@@ -872,8 +782,6 @@ RoadShieldsSetT GetRoadShields(std::string const & mwmName, std::string const &
return IrelandRoadShieldParser(roadNumber).GetRoadShields();
if (mwmName == "Italy")
return ItalyRoadShieldParser(roadNumber).GetRoadShields();
if (mwmName == "Turkey")
return TurkeyRoadShieldParser(roadNumber).GetRoadShields();
if (mwmName == "Lativa")
return LativaRoadShieldParser(roadNumber).GetRoadShields();
if (mwmName == "Moldova")
@@ -897,7 +805,7 @@ RoadShieldsSetT GetRoadShields(std::string const & mwmName, std::string const &
if (mwmName == "France")
return FranceRoadShieldParser(roadNumber).GetRoadShields();
if (mwmName == "Germany")
return GermanyRoadShieldParser(roadNumber, highwayClass).GetRoadShields();
return GermanyRoadShieldParser(roadNumber).GetRoadShields();
if (mwmName == "Spain")
return SpainRoadShieldParser(roadNumber).GetRoadShields();
if (mwmName == "Ukraine")
@@ -966,10 +874,6 @@ std::string DebugPrint(RoadShieldType shieldType)
case RoadShieldType::Generic_Pill_Blue_Bordered: return "blue pill bordered";
case RoadShieldType::Generic_Pill_Red_Bordered: return "red pill bordered";
case RoadShieldType::Generic_Pill_Orange_Bordered: return "orange pill bordered";
case RoadShieldType::Highway_Hexagon_Green: return "highway hexagon green";
case RoadShieldType::Highway_Hexagon_Blue: return "highway hexagon blue";
case RoadShieldType::Highway_Hexagon_Red: return "highway hexagon red";
case RoadShieldType::Highway_Hexagon_Turkey: return "highway hexagon turkey";
case RoadShieldType::US_Interstate: return "US interstate";
case RoadShieldType::US_Highway: return "US highway";
case RoadShieldType::UK_Highway: return "UK highway";

View File

@@ -1,7 +1,6 @@
#pragma once
#include "indexer/feature.hpp"
#include "indexer/ftypes_matcher.hpp"
#include "geometry/rect2d.hpp"
@@ -34,10 +33,6 @@ enum class RoadShieldType
Generic_Pill_Blue_Bordered,
Generic_Pill_Red_Bordered,
Generic_Pill_Orange_Bordered,
Highway_Hexagon_Green,
Highway_Hexagon_Blue,
Highway_Hexagon_Red,
Highway_Hexagon_Turkey,
US_Interstate,
US_Highway,
UK_Highway,
@@ -80,7 +75,7 @@ struct RoadShield
// Use specific country road shield styles based on mwm feature belongs to.
using RoadShieldsSetT = buffer_vector<RoadShield, 2>;
RoadShieldsSetT GetRoadShields(FeatureType & f);
RoadShieldsSetT GetRoadShields(std::string const & mwmName, std::string const & roadNumber, HighwayClass const & highwayClass);
RoadShieldsSetT GetRoadShields(std::string const & mwmName, std::string const & roadNumber);
// Simple parsing without specific country styles.
RoadShieldsSetT GetRoadShields(std::string const & rawRoadNumber);

View File

@@ -14,7 +14,7 @@ using namespace ftypes;
bool IsHighway(HighwayClass hwClass, bool isLink)
{
return (hwClass == HighwayClass::Motorway || hwClass == HighwayClass::Trunk || hwClass == HighwayClass::Primary) && !isLink;
return (hwClass == HighwayClass::Trunk || hwClass == HighwayClass::Primary) && !isLink;
}
bool IsSmallRoad(HighwayClass hwClass)
@@ -102,7 +102,6 @@ double CalcEstimatedTimeToPass(double const distanceMeters, HighwayClass const h
double speedKmph = 0;
switch (highwayClass)
{
case HighwayClass::Motorway: speedKmph = 100.0; break;
case HighwayClass::Trunk: speedKmph = 100.0; break;
case HighwayClass::Primary: speedKmph = 70.0; break;
case HighwayClass::Secondary: speedKmph = 70.0; break;

View File

@@ -21,7 +21,6 @@ openlr::FunctionalRoadClass HighwayClassToFunctionalRoadClass(ftypes::HighwayCla
{
switch (hwClass)
{
case ftypes::HighwayClass::Motorway: return openlr::FunctionalRoadClass::FRC0;
case ftypes::HighwayClass::Trunk: return openlr::FunctionalRoadClass::FRC0;
case ftypes::HighwayClass::Primary: return openlr::FunctionalRoadClass::FRC1;
case ftypes::HighwayClass::Secondary: return openlr::FunctionalRoadClass::FRC2;
@@ -49,10 +48,11 @@ optional<Score> GetFrcScore(Graph::Edge const & e, FunctionalRoadClass functiona
switch (functionalRoadClass)
{
case FunctionalRoadClass::FRC0:
return hwClass == HighwayClass::Motorway || hwClass == HighwayClass::Trunk ? optional<Score>(kMaxScoreForFrc) : nullopt;
// Note. HighwayClass::Trunk means motorway, motorway_link, trunk or trunk_link.
return hwClass == HighwayClass::Trunk ? optional<Score>(kMaxScoreForFrc) : nullopt;
case FunctionalRoadClass::FRC1:
return (HighwayClass::Motorway || hwClass == HighwayClass::Trunk || hwClass == HighwayClass::Primary) ? optional<Score>(kMaxScoreForFrc)
return (hwClass == HighwayClass::Trunk || hwClass == HighwayClass::Primary) ? optional<Score>(kMaxScoreForFrc)
: nullopt;
case FunctionalRoadClass::FRC2: