Skip to content

Commit 12f050c

Browse files
authored
Make minor FLA UI tweaks (#1066)
1 parent 1d8c6ef commit 12f050c

10 files changed

Lines changed: 40 additions & 60 deletions

File tree

gcs/electron/fla.ts

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ import {
4646
} from "./utils/flaUtils"
4747

4848
const UPDATE_THROTTLE_MS = 100 // Update every 100ms
49-
const recentLogsManager = createRecentLogsManager()
49+
const recentLogsManager = createRecentLogsManager(20)
5050
let logData: Messages | null = null
5151
let defaultMessageFilters: Record<string, unknown> = {}
5252

@@ -433,11 +433,6 @@ export function getRecentFiles(): RecentLog[] {
433433
return recentLogsManager.getRecentLogs()
434434
}
435435

436-
// New function to clear recent files
437-
export function clearRecentFiles(): void {
438-
recentLogsManager.clearRecentLogs()
439-
}
440-
441436
async function getFirstLine(pathToFile: string): Promise<string> {
442437
// https://stackoverflow.com/a/60193465/23139916
443438
const readable = fs.createReadStream(pathToFile)

gcs/electron/main.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import path from "node:path"
1717
import packageInfo from "../package.json"
1818

1919
import openFile, {
20-
clearRecentFiles,
2120
getMessageDataForTable,
2221
getMessages,
2322
getRecentFiles,
@@ -612,8 +611,6 @@ app.whenReady().then(() => {
612611
return []
613612
}
614613
})
615-
// Clear recent logs
616-
ipcMain.handle("fla:clear-recent-logs", clearRecentFiles)
617614

618615
// Load Messages on demand
619616
ipcMain.handle("fla:get-messages", getMessages)

gcs/electron/preload.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import { contextBridge, ipcRenderer } from "electron"
55
const ALLOWED_INVOKE_CHANNELS = [
66
"fla:open-file",
77
"fla:get-recent-logs",
8-
"fla:clear-recent-logs",
98
"fla:get-messages",
109
"fla:get-message-data-for-table",
1110
"fla:save-params-to-file",

gcs/electron/utils/recentLogManager.ts

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import * as fs from "fs"
33
import * as path from "path"
44
import type { RecentLog } from "../types/flaTypes"
55

6-
export default function createRecentLogsManager(maxRecentLogs: number = 10) {
6+
export default function createRecentLogsManager(maxRecentLogs: number) {
77
// JSON file to hold paths to recently opened logs
88
const recentLogsPath: string = path.join(
99
app.getPath("userData"),
@@ -88,10 +88,5 @@ export default function createRecentLogsManager(maxRecentLogs: number = 10) {
8888
}
8989
return existingFiles
9090
},
91-
92-
clearRecentLogs(): void {
93-
recentLogs = []
94-
saveRecentLogs()
95-
},
9691
}
9792
}

gcs/src/components/fla/SelectFlightLog.jsx

Lines changed: 11 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -24,21 +24,16 @@ import { readableBytes } from "./utils"
2424
export default function SelectFlightLog({ getLogSummary }) {
2525
const dispatch = useDispatch()
2626
const connected = useSelector(selectConnectedToDrone)
27-
const [recentFgcsLogs, setRecentFgcsLogs] = useState(null)
27+
const [recentLogs, setRecentLogs] = useState(null)
2828
const [loadingFile, setLoadingFile] = useState(false)
2929
const [loadingFileProgress, setLoadingFileProgress] = useState(0)
3030
const [
3131
downloadModalOpened,
3232
{ open: openDownloadModal, close: closeDownloadModal },
3333
] = useDisclosure(false)
3434

35-
async function getFgcsLogs() {
36-
setRecentFgcsLogs(await window.ipcRenderer.invoke("fla:get-recent-logs"))
37-
}
38-
39-
async function clearFgcsLogs() {
40-
await window.ipcRenderer.invoke("fla:clear-recent-logs")
41-
getFgcsLogs()
35+
async function getRecentLogs() {
36+
setRecentLogs(await window.ipcRenderer.invoke("fla:get-recent-logs"))
4237
}
4338

4439
const selectFile = async () => {
@@ -101,15 +96,15 @@ export default function SelectFlightLog({ getLogSummary }) {
10196
const onProgress = (_event, message) =>
10297
setLoadingFileProgress(message.percent)
10398
window.ipcRenderer.on("fla:log-parse-progress", onProgress)
104-
getFgcsLogs()
99+
getRecentLogs()
105100
return () => {
106101
window.ipcRenderer.removeAllListeners("fla:log-parse-progress")
107102
}
108103
}, [])
109104

110105
const recentLogItems = useMemo(() => {
111-
if (!recentFgcsLogs) return null
112-
return recentFgcsLogs.map((log, idx) => (
106+
if (!recentLogs) return null
107+
return recentLogs.map((log, idx) => (
113108
<div
114109
key={idx}
115110
className="flex flex-col px-4 py-2 hover:cursor-pointer hover:bg-falcongrey-600 hover:rounded-sm"
@@ -127,14 +122,14 @@ export default function SelectFlightLog({ getLogSummary }) {
127122
</div>
128123
</div>
129124
))
130-
}, [recentFgcsLogs, handleFile])
125+
}, [recentLogs, handleFile])
131126

132127
const logsExist = useMemo(() => {
133128
return (
134129
recentLogItems === null ||
135-
(recentFgcsLogs !== null && recentLogItems.length === 0)
130+
(recentLogs !== null && recentLogItems.length === 0)
136131
)
137-
}, [recentLogItems, recentFgcsLogs])
132+
}, [recentLogItems, recentLogs])
138133

139134
return (
140135
<div className="flex flex-col items-center justify-center h-full mx-auto">
@@ -148,20 +143,12 @@ export default function SelectFlightLog({ getLogSummary }) {
148143
Download from Drone
149144
</Button>
150145
)}
151-
<Button
152-
disabled={logsExist}
153-
color="red"
154-
variant="filled"
155-
onClick={clearFgcsLogs}
156-
>
157-
Clear Logs
158-
</Button>
159146
</div>
160147
<Divider size="xs" orientation="vertical" />
161148
<div className="relative">
162-
<LoadingOverlay visible={recentFgcsLogs === null || loadingFile} />
149+
<LoadingOverlay visible={recentLogs === null || loadingFile} />
163150
<div className="flex flex-col items-center gap-2">
164-
<p className="font-bold">Recent FGCS telemetry logs</p>
151+
<p className="font-bold">Recent logs</p>
165152
<ScrollArea.Autosize
166153
className="relative"
167154
type="always"

gcs/src/components/fla/graph.jsx

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@ import { ActionIcon, Button, Tooltip as MantineTooltip } from "@mantine/core"
1414
import {
1515
IconCapture,
1616
IconCopy,
17-
IconTimelineEvent,
18-
IconTimelineEventX,
1917
IconZoomIn,
2018
IconZoomOut,
2119
IconZoomReset,
@@ -493,7 +491,7 @@ export default function Graph({ data, customColors, openPresetModal }) {
493491
<PanelGroup direction="horizontal" style={{ height: "auto" }}>
494492
<Panel minSize={20}>
495493
<div
496-
className="chart-container relative"
494+
className="chart-container relative cursor-crosshair"
497495
style={{ minHeight: "60vh" }}
498496
>
499497
<Line ref={chartRef} options={config} data={data} />
@@ -541,20 +539,11 @@ export default function Graph({ data, customColors, openPresetModal }) {
541539
<IconCapture size={18} />
542540
</ActionIcon>
543541
</MantineTooltip>
544-
<MantineTooltip label="Copy graph">
542+
<MantineTooltip label="Copy graph as image">
545543
<ActionIcon size={32} variant="filled" onClick={copyGraphToClipboard}>
546544
<IconCopy size={18} />
547545
</ActionIcon>
548546
</MantineTooltip>
549-
<MantineTooltip label={showEvents ? "Hide events" : "Show events"}>
550-
<ActionIcon size={32} variant="filled" onClick={toggleShowEvents}>
551-
{showEvents ? (
552-
<IconTimelineEventX size={18} />
553-
) : (
554-
<IconTimelineEvent size={18} />
555-
)}
556-
</ActionIcon>
557-
</MantineTooltip>
558547
<MantineTooltip label="Clear Filters">
559548
<Button
560549
className="min-h-8 max-h-8"
@@ -595,6 +584,12 @@ export default function Graph({ data, customColors, openPresetModal }) {
595584
</Button>
596585
</MantineTooltip>
597586
)}
587+
588+
<MantineTooltip label={showEvents ? "Hide events" : "Show events"}>
589+
<Button className="min-h-8 max-h-8" onClick={toggleShowEvents}>
590+
{showEvents ? "Hide events" : "Show events"}
591+
</Button>
592+
</MantineTooltip>
598593
</div>
599594
</div>
600595
)

gcs/src/components/fla/mainDisplay.jsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ export default function MainDisplay({ closeLogFile, chartData, customColors }) {
7272
</div>
7373
<div className="flex justify-between px-4 py-2 text-gray-200 rounded bg-falcongrey-700">
7474
<div className="whitespace-nowrap">Aircraft Type:</div>
75-
<div className="text-white ml-auto">
75+
<div className="text-white ml-auto capitalize">
7676
{aircraftType ?? "No Aircraft Type"}
7777
</div>
7878
</div>
@@ -84,7 +84,7 @@ export default function MainDisplay({ closeLogFile, chartData, customColors }) {
8484
)}
8585
</div>
8686
<ScrollArea className="flex-1 min-h-0">
87-
<Accordion multiple={true}>
87+
<Accordion multiple={true} defaultValue={["messages"]}>
8888
{/* Presets */}
8989
<Accordion.Item key="presets" value="presets">
9090
<Accordion.Control className="rounded-md">
@@ -133,7 +133,7 @@ export default function MainDisplay({ closeLogFile, chartData, customColors }) {
133133

134134
<Tabs.Panel value="chart_cards" className="min-h-0 h-full pb-4">
135135
<ScrollArea className="h-full">
136-
<div className="grid grid-cols-5 gap-4 py-4">
136+
<div className="grid grid-cols-6 gap-2 py-2">
137137
{chartData.datasets.map((item) => (
138138
<Fragment key={item.label}>
139139
<ChartDataCard

gcs/src/components/fla/messagesFiltersAccordion.jsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,13 @@ export default function MessagesFiltersAccordion() {
181181
if (!messageFilters) return null
182182

183183
return (
184-
<Accordion multiple={true}>
184+
<Accordion
185+
multiple={true}
186+
classNames={{
187+
control: "!py-1",
188+
label: "!py-1",
189+
}}
190+
>
185191
{Object.keys(messageFilters).map((messageName) => (
186192
<Accordion.Item value={messageName} key={messageName}>
187193
<Accordion.Control className="rounded-md">

gcs/src/components/fla/presetAccordionItem.jsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ export default function PresetAccordionItem({ category, deleteCustomPreset }) {
238238
{category.name}
239239
</Accordion.Control>
240240
<Accordion.Panel>
241-
<div className="flex flex-col gap-2">
241+
<div className="flex flex-col gap-1">
242242
{filteredPresets.length === 0 ? (
243243
<div className="flex items-center justify-center py-4">
244244
<IconInfoCircle size={20} />
@@ -252,7 +252,7 @@ export default function PresetAccordionItem({ category, deleteCustomPreset }) {
252252
const isAvailable = preset.isAvailable
253253

254254
return (
255-
<div key={idx} className="flex items-center gap-2">
255+
<div key={idx} className="flex items-center gap-1">
256256
<MantineTooltip
257257
label={
258258
isAvailable

gcs/src/components/fla/presetsAccordion.jsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,13 @@ export default function PresetsAccordion({
113113
}, [presetCategories, logType, messageFilters, formatMessages])
114114

115115
return (
116-
<Accordion multiple={true}>
116+
<Accordion
117+
multiple={true}
118+
classNames={{
119+
control: "!py-1",
120+
label: "!py-1",
121+
}}
122+
>
117123
{/* Custom Presets */}
118124
{processedPresetCategories.custom.map((category) => (
119125
<Fragment key={category.name}>

0 commit comments

Comments
 (0)