Skip to content

Commit 5c2fee3

Browse files
Camera app: add "Erase" button and tweak UI
1 parent 9ae929a commit 5c2fee3

File tree

2 files changed

+46
-20
lines changed

2 files changed

+46
-20
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
- AppStore app: remove unnecessary scrollbar over publisher's name
66
- OSUpdate app: pause download when wifi is lost, resume when reconnected
77
- Settings app: fix un-checking of radio button
8+
- API: SharedPreferences: add erase_all() functionality
89

910
0.5.0
1011
=====

internal_filesystem/apps/com.micropythonos.camera/assets/camera_app.py

Lines changed: 45 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ def onCreate(self):
6565
self.load_resolution_preference()
6666
self.scanqr_mode = self.getIntent().extras.get("scanqr_mode")
6767
self.main_screen = lv.obj()
68-
self.main_screen.set_style_pad_all(0, 0)
68+
self.main_screen.set_style_pad_all(1, 0)
6969
self.main_screen.set_style_border_width(0, 0)
7070
self.main_screen.set_size(lv.pct(100), lv.pct(100))
7171
self.main_screen.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
@@ -651,49 +651,60 @@ def onCreate(self):
651651
# Create main screen
652652
screen = lv.obj()
653653
screen.set_size(lv.pct(100), lv.pct(100))
654-
screen.set_style_pad_all(5, 0)
654+
screen.set_style_pad_all(1, 0)
655655

656656
# Create tabview
657657
tabview = lv.tabview(screen)
658658
tabview.set_tab_bar_size(mpos.ui.pct_of_display_height(10))
659-
tabview.set_size(lv.pct(100), mpos.ui.pct_of_display_height(85))
659+
tabview.set_size(lv.pct(100), mpos.ui.pct_of_display_height(80))
660660

661661
# Create Basic tab (always)
662662
basic_tab = tabview.add_tab("Basic")
663663
self.create_basic_tab(basic_tab, prefs)
664664

665665
# Create Advanced and Expert tabs only for ESP32 camera
666-
if not self.is_webcam:
666+
if not self.is_webcam or True: # for now, show all tabs
667667
advanced_tab = tabview.add_tab("Advanced")
668668
self.create_advanced_tab(advanced_tab, prefs)
669669

670670
expert_tab = tabview.add_tab("Expert")
671671
self.create_expert_tab(expert_tab, prefs)
672672

673+
raw_tab = tabview.add_tab("Raw")
674+
self.create_raw_tab(raw_tab, prefs)
675+
673676
# Save/Cancel buttons at bottom
674677
button_cont = lv.obj(screen)
675-
button_cont.set_size(lv.pct(100), mpos.ui.pct_of_display_height(15))
678+
button_cont.set_size(lv.pct(100), mpos.ui.pct_of_display_height(20))
676679
button_cont.remove_flag(lv.obj.FLAG.SCROLLABLE)
677680
button_cont.align(lv.ALIGN.BOTTOM_MID, 0, 0)
678681
button_cont.set_style_border_width(0, 0)
679682
button_cont.set_style_bg_opa(0, 0)
680683

681684
save_button = lv.button(button_cont)
682-
save_button.set_size(100, mpos.ui.pct_of_display_height(14))
683-
save_button.align(lv.ALIGN.CENTER, -60, 0)
685+
save_button.set_size(mpos.ui.pct_of_display_width(25), lv.SIZE_CONTENT)
686+
save_button.align(lv.ALIGN.BOTTOM_LEFT, 0, 0)
684687
save_button.add_event_cb(lambda e: self.save_and_close(), lv.EVENT.CLICKED, None)
685688
save_label = lv.label(save_button)
686689
save_label.set_text("Save")
687690
save_label.center()
688691

689692
cancel_button = lv.button(button_cont)
690-
cancel_button.set_size(100, mpos.ui.pct_of_display_height(15))
691-
cancel_button.align(lv.ALIGN.CENTER, 60, 0)
693+
cancel_button.set_size(mpos.ui.pct_of_display_width(25), lv.SIZE_CONTENT)
694+
cancel_button.align(lv.ALIGN.BOTTOM_MID, 0, 0)
692695
cancel_button.add_event_cb(lambda e: self.finish(), lv.EVENT.CLICKED, None)
693696
cancel_label = lv.label(cancel_button)
694697
cancel_label.set_text("Cancel")
695698
cancel_label.center()
696699

700+
erase_button = lv.button(button_cont)
701+
erase_button.set_size(mpos.ui.pct_of_display_width(25), lv.SIZE_CONTENT)
702+
erase_button.align(lv.ALIGN.BOTTOM_RIGHT, 0, 0)
703+
erase_button.add_event_cb(lambda e: self.erase_and_close(), lv.EVENT.CLICKED, None)
704+
erase_label = lv.label(erase_button)
705+
erase_label.set_text("Erase")
706+
erase_label.center()
707+
697708
self.setContentView(screen)
698709

699710
def create_slider(self, parent, label_text, min_val, max_val, default_val, pref_key):
@@ -771,7 +782,8 @@ def create_dropdown(self, parent, label_text, options, default_idx, pref_key):
771782
def create_basic_tab(self, tab, prefs):
772783
"""Create Basic settings tab."""
773784
tab.set_flex_flow(lv.FLEX_FLOW.COLUMN)
774-
tab.set_scrollbar_mode(lv.SCROLLBAR_MODE.AUTO)
785+
#tab.set_scrollbar_mode(lv.SCROLLBAR_MODE.AUTO)
786+
tab.set_style_pad_all(1, 0)
775787

776788
# Resolution dropdown
777789
current_resolution = prefs.get_string("resolution", "320x240")
@@ -781,8 +793,7 @@ def create_basic_tab(self, tab, prefs):
781793
resolution_idx = idx
782794
break
783795

784-
dropdown, cont = self.create_dropdown(tab, "Resolution:", self.resolutions,
785-
resolution_idx, "resolution")
796+
dropdown, cont = self.create_dropdown(tab, "Resolution:", self.resolutions, resolution_idx, "resolution")
786797
self.ui_controls["resolution"] = dropdown
787798

788799
# Brightness
@@ -822,8 +833,9 @@ def create_basic_tab(self, tab, prefs):
822833

823834
def create_advanced_tab(self, tab, prefs):
824835
"""Create Advanced settings tab."""
825-
tab.set_scrollbar_mode(lv.SCROLLBAR_MODE.AUTO)
836+
#tab.set_scrollbar_mode(lv.SCROLLBAR_MODE.AUTO)
826837
tab.set_flex_flow(lv.FLEX_FLOW.COLUMN)
838+
tab.set_style_pad_all(1, 0)
827839

828840
# Auto Exposure Control (master switch)
829841
exposure_ctrl = prefs.get_bool("exposure_ctrl", True)
@@ -854,7 +866,7 @@ def exposure_ctrl_changed(e):
854866

855867
# Auto Exposure Level
856868
ae_level = prefs.get_int("ae_level", 0)
857-
slider, label, cont = self.create_slider(tab, "AE Level", -2, 2, ae_level, "ae_level")
869+
slider, label, cont = self.create_slider(tab, "Auto Exposure Level", -2, 2, ae_level, "ae_level")
858870
self.ui_controls["ae_level"] = slider
859871

860872
# Night Mode (AEC2)
@@ -931,12 +943,13 @@ def whitebal_changed(e):
931943

932944
def create_expert_tab(self, tab, prefs):
933945
"""Create Expert settings tab."""
934-
tab.set_scrollbar_mode(lv.SCROLLBAR_MODE.AUTO)
946+
#tab.set_scrollbar_mode(lv.SCROLLBAR_MODE.AUTO)
935947
tab.set_flex_flow(lv.FLEX_FLOW.COLUMN)
948+
tab.set_style_pad_all(1, 0)
936949

937-
# Note: Sensor detection would require camera access
950+
# Note: Sensor detection isn't performed right now
938951
# For now, show sharpness/denoise with note
939-
supports_sharpness = False # Conservative default
952+
supports_sharpness = True # Assume yes
940953

941954
# Sharpness
942955
sharpness = prefs.get_int("sharpness", 0)
@@ -965,9 +978,10 @@ def create_expert_tab(self, tab, prefs):
965978
note.align(lv.ALIGN.TOP_RIGHT, 0, 0)
966979

967980
# JPEG Quality
968-
quality = prefs.get_int("quality", 85)
969-
slider, label, cont = self.create_slider(tab, "JPEG Quality", 0, 100, quality, "quality")
970-
self.ui_controls["quality"] = slider
981+
# Disabled because JPEG is not used right now
982+
#quality = prefs.get_int("quality", 85)
983+
#slider, label, cont = self.create_slider(tab, "JPEG Quality", 0, 100, quality, "quality")
984+
#self.ui_controls["quality"] = slider
971985

972986
# Color Bar
973987
colorbar = prefs.get_bool("colorbar", False)
@@ -999,6 +1013,17 @@ def create_expert_tab(self, tab, prefs):
9991013
checkbox, cont = self.create_checkbox(tab, "Lens Correction", lenc, "lenc")
10001014
self.ui_controls["lenc"] = checkbox
10011015

1016+
def create_raw_tab(self, tab, prefs):
1017+
startX = prefs.get_bool("startX", 0)
1018+
#startX, cont = self.create_checkbox(tab, "Lens Correction", lenc, "lenc")
1019+
startX, label, cont = self.create_slider(tab, "startX", 0, 2844, startX, "startX")
1020+
self.ui_controls["statX"] = startX
1021+
1022+
def erase_and_close(self):
1023+
SharedPreferences("com.micropythonos.camera").edit().remove_all().commit()
1024+
self.setResult(True, {"settings_changed": True})
1025+
self.finish()
1026+
10021027
def save_and_close(self):
10031028
"""Save all settings to SharedPreferences and return result."""
10041029
prefs = SharedPreferences("com.micropythonos.camera")

0 commit comments

Comments
 (0)