Add the "About" dialog and move feedback button there
This commit is contained in:
		
							parent
							
								
									bdae602289
								
							
						
					
					
						commit
						0676a9ef4c
					
				
					 5 changed files with 113 additions and 20 deletions
				
			
		|  | @ -30,9 +30,14 @@ import flet as ft | |||
| class WuttaControl(ft.UserControl): | ||||
| 
 | ||||
|     def __init__(self, config, *args, **kwargs): | ||||
|         self.on_reset = kwargs.pop('on_reset', None) | ||||
|         super().__init__(*args, **kwargs) | ||||
|         self.config = config | ||||
|         self.app = config.get_app() | ||||
| 
 | ||||
|     def informed_refresh(self, **kwargs): | ||||
|         pass | ||||
| 
 | ||||
|     def reset(self, e=None): | ||||
|         if self.on_reset: | ||||
|             self.on_reset(e=e) | ||||
|  |  | |||
|  | @ -24,6 +24,8 @@ | |||
| WuttaPOS - feedback control | ||||
| """ | ||||
| 
 | ||||
| import time | ||||
| 
 | ||||
| import flet as ft | ||||
| 
 | ||||
| from .base import WuttaControl | ||||
|  | @ -35,10 +37,13 @@ class WuttaFeedback(WuttaControl): | |||
|     default_font_size = 20 | ||||
|     default_button_height = 60 | ||||
| 
 | ||||
|     def __init__(self, *args, **kwargs): | ||||
|     def __init__(self, config, page=None, *args, **kwargs): | ||||
|         self.on_send = kwargs.pop('on_send', None) | ||||
|         self.on_cancel = kwargs.pop('on_cancel', None) | ||||
|         super().__init__(*args, **kwargs) | ||||
|         super().__init__(config, *args, **kwargs) | ||||
|         # TODO: why must we save this aside from self.page ? | ||||
|         # but sometimes self.page gets set to None, so we must.. | ||||
|         self.mypage = page | ||||
| 
 | ||||
|     def build(self): | ||||
| 
 | ||||
|  | @ -107,9 +112,15 @@ class WuttaFeedback(WuttaControl): | |||
|             ], | ||||
|         ) | ||||
| 
 | ||||
|         self.page.dialog = self.dlg | ||||
|         if self.mypage.dialog and self.mypage.dialog.open and self.mypage.dialog is not self.dlg: | ||||
|             self.mypage.dialog.open = False | ||||
|             self.mypage.update() | ||||
|             # cf. https://github.com/flet-dev/flet/issues/1670 | ||||
|             time.sleep(0.1) | ||||
| 
 | ||||
|         self.mypage.dialog = self.dlg | ||||
|         self.dlg.open = True | ||||
|         self.page.update() | ||||
|         self.mypage.update() | ||||
| 
 | ||||
|     def keypress(self, key): | ||||
|         if key == '⏎': | ||||
|  | @ -120,7 +131,10 @@ class WuttaFeedback(WuttaControl): | |||
|             self.message.value += key | ||||
| 
 | ||||
|         self.message.focus() | ||||
|         self.update() | ||||
| 
 | ||||
|         # TODO: why is keypress happening with no page? | ||||
|         if self.page: | ||||
|             self.update() | ||||
| 
 | ||||
|     def long_backspace(self): | ||||
|         self.message.value = self.message.value[:-10] | ||||
|  | @ -129,7 +143,7 @@ class WuttaFeedback(WuttaControl): | |||
| 
 | ||||
|     def cancel(self, e): | ||||
|         self.dlg.open = False | ||||
|         self.page.update() | ||||
|         self.mypage.update() | ||||
| 
 | ||||
|         if self.on_cancel: | ||||
|             self.on_cancel(e) | ||||
|  | @ -138,22 +152,22 @@ class WuttaFeedback(WuttaControl): | |||
|         if self.message.value: | ||||
| 
 | ||||
|             self.app.send_email('pos_feedback', data={ | ||||
|                 'user_name': self.page.session.get('user_display'), | ||||
|                 'user_name': self.mypage.session.get('user_display'), | ||||
|                 'message': self.message.value, | ||||
|             }) | ||||
| 
 | ||||
|             self.dlg.open = False | ||||
|             self.page.snack_bar = ft.SnackBar(ft.Text(f"MESSAGE WAS SENT", | ||||
|                                                       color='black', | ||||
|                                                       weight=ft.FontWeight.BOLD), | ||||
|                                               bgcolor='green', | ||||
|                                               duration=1500) | ||||
|             self.page.snack_bar.open = True | ||||
|             self.page.update() | ||||
|             self.mypage.snack_bar = ft.SnackBar(ft.Text(f"MESSAGE WAS SENT", | ||||
|                                                         color='black', | ||||
|                                                         weight=ft.FontWeight.BOLD), | ||||
|                                                 bgcolor='green', | ||||
|                                                 duration=1500) | ||||
|             self.mypage.snack_bar.open = True | ||||
|             self.mypage.update() | ||||
| 
 | ||||
|             if self.on_send: | ||||
|                 self.on_send() | ||||
| 
 | ||||
|         else: | ||||
|             self.message.focus() | ||||
|             self.page.update() | ||||
|             self.mypage.update() | ||||
|  |  | |||
|  | @ -24,10 +24,14 @@ | |||
| WuttaPOS - header control | ||||
| """ | ||||
| 
 | ||||
| import rattail | ||||
| 
 | ||||
| import flet as ft | ||||
| 
 | ||||
| import wuttapos | ||||
| from .base import WuttaControl | ||||
| from .timestamp import WuttaTimestamp | ||||
| from .feedback import WuttaFeedback | ||||
| 
 | ||||
| 
 | ||||
| class WuttaHeader(WuttaControl): | ||||
|  | @ -36,8 +40,9 @@ class WuttaHeader(WuttaControl): | |||
|         self.txn_display = ft.Text("Txn: N", weight=ft.FontWeight.BOLD, size=20) | ||||
|         self.cust_display = ft.Text("Cust: N", weight=ft.FontWeight.BOLD, size=20) | ||||
|         self.user_display = ft.Text("User: N", weight=ft.FontWeight.BOLD, size=20) | ||||
|         self.logout_button = ft.FilledButton("Logout", on_click=self.logout_click, visible=False) | ||||
|         self.logout_button = ft.OutlinedButton("Logout", on_click=self.logout_click, visible=False) | ||||
|         self.logout_divider = ft.VerticalDivider(visible=False) | ||||
|         self.title_button = ft.FilledButton(self.app.get_title(), on_click=self.title_click) | ||||
| 
 | ||||
|         controls = [ | ||||
|             self.txn_display, | ||||
|  | @ -50,7 +55,7 @@ class WuttaHeader(WuttaControl): | |||
|             ft.VerticalDivider(), | ||||
|             self.logout_button, | ||||
|             self.logout_divider, | ||||
|             ft.Text(f"WuttaPOS", weight=ft.FontWeight.BOLD, size=20), | ||||
|             self.title_button, | ||||
|         ] | ||||
| 
 | ||||
|         return ft.Row(controls) | ||||
|  | @ -94,3 +99,71 @@ class WuttaHeader(WuttaControl): | |||
| 
 | ||||
|         self.page.session.clear() | ||||
|         self.page.go('/login') | ||||
| 
 | ||||
|     def title_click(self, e): | ||||
|         title = self.app.get_title() | ||||
| 
 | ||||
|         license = """\ | ||||
| WuttaPOS -- Pythonic Point of Sale System | ||||
| Copyright © 2023 Lance Edgar | ||||
| 
 | ||||
| WuttaPOS 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 3 of the License, or (at your option) any later | ||||
| version. | ||||
| 
 | ||||
| WuttaPOS 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 | ||||
| WuttaPOS.  If not, see <http://www.gnu.org/licenses/>. | ||||
| """ | ||||
| 
 | ||||
|         self.dlg = ft.AlertDialog( | ||||
|             title=ft.Text(title), | ||||
|             content=ft.Container( | ||||
|                 content=ft.Column( | ||||
|                     [ | ||||
|                         ft.Divider(), | ||||
|                         ft.Text(f"{title} v{wuttapos.__version__}"), | ||||
|                         ft.Text(f"rattail v{rattail.__version__}"), | ||||
|                         ft.Divider(), | ||||
|                         ft.Text(license), | ||||
|                         ft.Container( | ||||
|                             content=WuttaFeedback(self.config, page=self.page, | ||||
|                                                   on_send=self.reset, on_cancel=self.reset), | ||||
|                             alignment=ft.alignment.center, | ||||
|                             expand=True, | ||||
|                         ), | ||||
|                     ], | ||||
|                     expand=True, | ||||
|                 ), | ||||
|                 height=600, | ||||
|             ), | ||||
|             actions=[ | ||||
|                 ft.Row( | ||||
|                     [ | ||||
|                         ft.Container(content=ft.Text("Close", size=20, | ||||
|                                                      weight=ft.FontWeight.BOLD), | ||||
|                                      height=60, | ||||
|                                      width=60 * 2.5, | ||||
|                                      alignment=ft.alignment.center, | ||||
|                                      border=ft.border.all(1, 'black'), | ||||
|                                      border_radius=ft.border_radius.all(5), | ||||
|                                      on_click=self.close_dlg), | ||||
|                     ], | ||||
|                     alignment=ft.MainAxisAlignment.CENTER, | ||||
|                 ), | ||||
|             ], | ||||
|         ) | ||||
| 
 | ||||
|         self.page.dialog = self.dlg | ||||
|         self.dlg.open = True | ||||
|         self.page.update() | ||||
| 
 | ||||
|     def close_dlg(self, e): | ||||
|         self.dlg.open = False | ||||
|         self.reset() | ||||
|         self.page.update() | ||||
|  |  | |||
|  | @ -53,9 +53,12 @@ class WuttaView(ft.View): | |||
|         return [self.build_header()] | ||||
| 
 | ||||
|     def build_header(self): | ||||
|         self.header = WuttaHeader(self.config) | ||||
|         self.header = WuttaHeader(self.config, on_reset=self.reset) | ||||
|         return self.header | ||||
| 
 | ||||
|     def reset(self, *args, **kwargs): | ||||
|         pass | ||||
| 
 | ||||
| 
 | ||||
| class WuttaViewContainer(ft.Container): | ||||
|     """ | ||||
|  |  | |||
|  | @ -32,7 +32,6 @@ import flet as ft | |||
| 
 | ||||
| from .base import WuttaView | ||||
| from wuttapos.controls.custlookup import WuttaCustomerLookup | ||||
| from wuttapos.controls.feedback import WuttaFeedback | ||||
| from wuttapos.util import get_pos_batch_handler | ||||
| 
 | ||||
| 
 | ||||
|  | @ -641,7 +640,6 @@ class POSView(WuttaView): | |||
| 
 | ||||
|             ft.Row( | ||||
|                 [ | ||||
|                     WuttaFeedback(self.config, on_send=self.reset, on_cancel=self.reset), | ||||
|                     ft.Row( | ||||
|                         [ | ||||
|                             self.set_quantity, | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Lance Edgar
						Lance Edgar