Public Access
The Launcher shows the Apps as a 4 x 3 grid of 32 x 32 icons, the selected one's name under it (issue #9). The icons are the website's own, doubled, and two drawn the same way for SSH and the Shell; they are PNGs in assets/icons, turned into arrays by scripts/make_icons.py, which CI checks. The selected tile is the website's: dark blue on cyan, with notched corners. - GridModel (lib/ui, host-tested) holds the selection and the scrolling. - App::badge(): a dot on the tile for unread IRC messages, a Track recording, a Capture running, an SSH session open. - Settings > Launcher: Grid or List. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0162FokPdvY2KsS4NBfwyWPk
36 lines
1.0 KiB
C++
36 lines
1.0 KiB
C++
#pragma once
|
|
|
|
#include <string>
|
|
|
|
#include "app.h"
|
|
#include "services/gnss_service.h"
|
|
#include "settings.h"
|
|
|
|
namespace roro {
|
|
|
|
// GNSS (see docs/milestones/M2.md, Q59): the Position view, and the Sky view with every satellite
|
|
// in view placed by direction and elevation. Tab switches between them.
|
|
class GnssApp : public App {
|
|
public:
|
|
GnssApp(GnssService& gnss, const Settings& settings) : gnss_(gnss), settings_(settings) {}
|
|
void onEnter() override { requestRedraw(); }
|
|
bool onKey(const KeyEvent& e) override;
|
|
void update(uint32_t nowMs) override;
|
|
void draw(Canvas& c) override;
|
|
void help(std::vector<KeyHelp>& out) const override;
|
|
bool badge() const override { return gnss_.tracking(); }
|
|
|
|
private:
|
|
void drawPosition(Canvas& c);
|
|
void drawSky(Canvas& c);
|
|
|
|
GnssService& gnss_;
|
|
const Settings& settings_;
|
|
bool sky_ = false;
|
|
uint32_t lastDrawMs_ = 0;
|
|
std::string refusal_; // why a Track couldn't start, shown for a few seconds
|
|
uint32_t refusalMs_ = 0;
|
|
};
|
|
|
|
} // namespace roro
|