chore(views/geomap): integrate touchbar

This commit is contained in:
Elian Doran 2025-07-06 18:25:44 +03:00
parent a4faaa406b
commit 229dd9cd18
No known key found for this signature in database
2 changed files with 38 additions and 37 deletions

View file

@ -25,7 +25,6 @@ export default class GeoMapTypeWidget extends TypeWidget {
private geoMapWidget: GeoMapWidget;
private L!: Leaflet;
private ignoreNextZoomEvent?: boolean;
static getType() {
return "geoMap";
@ -55,15 +54,7 @@ export default class GeoMapTypeWidget extends TypeWidget {
// map.invalidateSize();
// }, 100);
// if (hasTouchBar) {
// map.on("zoom", () => {
// if (!this.ignoreNextZoomEvent) {
// this.triggerCommand("refreshTouchBar");
// }
// this.ignoreNextZoomEvent = false;
// });
// }
}
async doRefresh(note: FNote) {
@ -91,30 +82,4 @@ export default class GeoMapTypeWidget extends TypeWidget {
// this.moveMarker(noteId, null);
}
buildTouchBarCommand({ TouchBar }: CommandListenerData<"buildTouchBar">) {
const map = this.geoMapWidget.map;
const that = this;
if (!map) {
return;
}
return [
new TouchBar.TouchBarSlider({
label: "Zoom",
value: map.getZoom(),
minValue: map.getMinZoom(),
maxValue: map.getMaxZoom(),
change(newValue) {
that.ignoreNextZoomEvent = true;
map.setZoom(newValue);
},
}),
new TouchBar.TouchBarButton({
label: "New geo note",
click: () => this.triggerCommand("geoMapCreateChildNote", { ntxId: this.ntxId }),
enabled: (this._state === State.Normal)
})
];
}
}

View file

@ -4,10 +4,9 @@ import type { GPX, LatLng, LeafletMouseEvent, Map, Marker } from "leaflet";
import SpacedUpdate from "../../../services/spaced_update.js";
import { t } from "../../../services/i18n.js";
import processNoteWithMarker, { processNoteWithGpxTrack } from "./markers.js";
import froca from "../../../services/froca.js";
import { hasTouchBar } from "../../../services/utils.js";
import toast from "../../../services/toast.js";
import { EventData } from "../../../components/app_context.js";
import { CommandListenerData, EventData } from "../../../components/app_context.js";
import dialog from "../../../services/dialog.js";
import server from "../../../services/server.js";
import attributes from "../../../services/attributes.js";
@ -117,6 +116,7 @@ export default class GeoView extends ViewMode<MapData> {
private map?: Map;
private spacedUpdate: SpacedUpdate;
private _state: State;
private ignoreNextZoomEvent?: boolean;
private currentMarkerData: Record<string, Marker>;
private currentTrackData: Record<string, GPX>;
@ -168,6 +168,16 @@ export default class GeoView extends ViewMode<MapData> {
map.on("click", (e) => this.#onMapClicked(e));
this.#reloadMarkers();
if (hasTouchBar) {
map.on("zoom", () => {
if (!this.ignoreNextZoomEvent) {
this.triggerCommand("refreshTouchBar");
}
this.ignoreNextZoomEvent = false;
});
}
}
async #restoreViewportAndZoom() {
@ -303,4 +313,30 @@ export default class GeoView extends ViewMode<MapData> {
this.#changeState(State.Normal);
}
buildTouchBarCommand({ TouchBar }: CommandListenerData<"buildTouchBar">) {
const map = this.map;
const that = this;
if (!map) {
return;
}
return [
new TouchBar.TouchBarSlider({
label: "Zoom",
value: map.getZoom(),
minValue: map.getMinZoom(),
maxValue: map.getMaxZoom(),
change(newValue) {
that.ignoreNextZoomEvent = true;
map.setZoom(newValue);
},
}),
new TouchBar.TouchBarButton({
label: "New geo note",
click: () => this.triggerCommand("geoMapCreateChildNote"),
enabled: (this._state === State.Normal)
})
];
}
}