added overlay to system view

This commit is contained in:
Bernd Herzog 2023-04-23 16:21:33 +02:00
parent 0acf7ec2c2
commit 812f0f8211
6 changed files with 143 additions and 1 deletions

View File

@ -230,6 +230,7 @@ set(CPPSRC
apps/ui_nrf_rx.cpp apps/ui_nrf_rx.cpp
apps/ui_aprs_tx.cpp apps/ui_aprs_tx.cpp
apps/ui_bht_tx.cpp apps/ui_bht_tx.cpp
apps/ui_dfu_menu.cpp
apps/ui_coasterp.cpp apps/ui_coasterp.cpp
apps/ui_debug.cpp apps/ui_debug.cpp
apps/ui_encoders.cpp apps/ui_encoders.cpp

View File

@ -0,0 +1,46 @@
/*
* Copyright (C) 2023 Bernd Herzog
*
* This file is part of PortaPack.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 51 Franklin Street,
* Boston, MA 02110-1301, USA.
*/
#include "ui_dfu_menu.hpp"
#include "portapack_shared_memory.hpp"
namespace ui {
DfuMenu::DfuMenu(NavigationView& nav) : nav_ (nav) {
add_children({
&text_info,
&progress,
&dummy,
});
}
void DfuMenu::focus() {
dummy.focus();
}
void DfuMenu::paint(Painter& painter) {
painter.fill_rectangle(
{{50,50} , {50 , 50}},
ui::Color::blue()
);
}
} /* namespace ui */

View File

@ -0,0 +1,63 @@
/*
* Copyright (C) 2023 Bernd Herzog
*
* This file is part of PortaPack.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 51 Franklin Street,
* Boston, MA 02110-1301, USA.
*/
#ifndef __UI_DFU_MENU_H__
#define __UI_DFU_MENU_H__
#include <cstdint>
#include "ui_widget.hpp"
#include "event_m0.hpp"
namespace ui {
class NavigationView;
class DfuMenu : public View {
public:
DfuMenu(NavigationView& nav);
~DfuMenu() = default;
void focus() override;
void paint(Painter& painter) override;
std::string title() const override { return "DFU Menu"; };
private:
NavigationView& nav_;
Text text_info {
{ 10 * 8, 16 * 8, 10 * 8, 16 },
"Working..."
};
ProgressBar progress {
{ 2 * 8, 19 * 8, 26 * 8, 24 }
};
Button dummy {
{ 240, 0, 0, 0 },
""
};
};
} /* namespace ui */
#endif/*__UI_DFU_MENU_H__*/

View File

@ -43,6 +43,7 @@ using namespace lpc43xx;
#include <array> #include <array>
#include "ui_font_fixed_8x16.hpp" #include "ui_font_fixed_8x16.hpp"
#include "ui_navigation.hpp"
extern "C" { extern "C" {
@ -262,6 +263,8 @@ void EventDispatcher::on_touch_event(ui::TouchEvent event) {
void EventDispatcher::handle_lcd_frame_sync() { void EventDispatcher::handle_lcd_frame_sync() {
DisplayFrameSyncMessage message; DisplayFrameSyncMessage message;
message_map.send(&message); message_map.send(&message);
static_cast<ui::SystemView *>(top_widget)->paint_overlay();
painter.paint_widget_tree(top_widget); painter.paint_widget_tree(top_widget);
portapack::backlight()->on(); portapack::backlight()->on();
@ -304,7 +307,12 @@ void EventDispatcher::handle_switches() {
if( switches_state[i] ) { if( switches_state[i] ) {
const auto event = static_cast<ui::KeyEvent>(i); const auto event = static_cast<ui::KeyEvent>(i);
if( !event_bubble_key(event) ) { if( !event_bubble_key(event) ) {
context.focus_manager().update(top_widget, event); if (switches_state[(size_t)ui::KeyEvent::Dfu]) {
static_cast<ui::SystemView *>(top_widget)->toggle_overlay();
}
else {
context.focus_manager().update(top_widget, event);
}
} }
in_key_event = true; in_key_event = true;

View File

@ -748,6 +748,24 @@ Context& SystemView::context() const {
return context_; return context_;
} }
void SystemView::toggle_overlay() {
if (overlay_active){
this->remove_child(&this->overlay);
this->set_dirty();
}
else{
this->add_child(&this->overlay);
this->set_dirty();
}
overlay_active = !overlay_active;
}
void SystemView::paint_overlay() {
if (overlay_active){
this->overlay.set_dirty();
}
}
/* ***********************************************************************/ /* ***********************************************************************/
void BMPView::focus() { void BMPView::focus() {

View File

@ -33,6 +33,7 @@
#include "ui_channel.hpp" #include "ui_channel.hpp"
#include "ui_audio.hpp" #include "ui_audio.hpp"
#include "ui_sd_card_status_view.hpp" #include "ui_sd_card_status_view.hpp"
#include "ui_dfu_menu.hpp"
#include "bitmap.hpp" #include "bitmap.hpp"
#include "ff.h" #include "ff.h"
@ -290,10 +291,15 @@ namespace ui
const Rect parent_rect); const Rect parent_rect);
Context &context() const override; Context &context() const override;
void toggle_overlay();
void paint_overlay();
private: private:
bool overlay_active {false};
SystemStatusView status_view{navigation_view}; SystemStatusView status_view{navigation_view};
InformationView info_view{navigation_view}; InformationView info_view{navigation_view};
DfuMenu overlay{navigation_view};
NavigationView navigation_view{}; NavigationView navigation_view{};
Context &context_; Context &context_;
}; };