Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from kivy.app import App
- from kivy.lang import Builder
- from kivy.properties import ObjectProperty
- from kivymd.theming import ThemeManager
- from kivy.core.window import Window
- from kivy.clock import Clock
- from network import network_service
- from camera.upload import firmware_upload
- Clock.max_iteration = 20
- main_widget_kv = '''
- #:import Toolbar kivymd.toolbar.Toolbar
- #:import ThemeManager kivymd.theming.ThemeManager
- #:import NavigationDrawerToolbar kivymd.navigationdrawer.NavigationDrawerToolbar
- #:import MDCheckbox kivymd.selectioncontrols.MDCheckbox
- #:import MDSwitch kivymd.selectioncontrols.MDSwitch
- #:import MDCard kivymd.card.MDCard
- #:import MDSeparator kivymd.card.MDSeparator
- #:import NavigationScreen screens.navigation.NavigationScreen
- #:import SelectableRecycleBoxLayout screens.status.SelectableRecycleBoxLayout
- #:import CreateSlideScreen screens.create_slide.CreateSlideScreen
- #:import HomeScreen screens.home.HomeScreen
- #:import LoginScreen screens.login.LoginScreen
- #:import MDTextField kivymd.textfields.MDTextField
- #:import StatusScreen screens.status.StatusScreen
- <SlideItem@BoxLayout>:
- orientation: 'vertical'
- index: 0
- id: slide_item
- spacing: 10
- slide_name: ''
- slide_status: ''
- images: ''
- pos_hint: {'left': 1}
- canvas.before:
- Color:
- rgba: (.0, 0.9, .1, .3) if self.selected else (1, 1, 1, 1)
- Rectangle:
- pos: self.pos
- size: self.size
- BoxLayout:
- orientation: 'horizontal'
- MDLabel:
- font_size:20
- text: "Slide : "
- size_hint: None,None
- text_size: self.size
- height: 30
- font_style: 'Title'
- theme_text_color: 'Primary'
- color: 1,0,0,1
- MDLabel:
- font_size: 20
- text: slide_item.slide_name
- size_hint: .1,None
- height: 30
- font_style: 'Title'
- theme_text_color: 'Primary'
- BoxLayout:
- orientation: 'horizontal'
- MDLabel:
- font_size:20
- text: "Status : "
- size_hint: None,None
- text_size: self.size
- height: 30
- font_style: 'Title'
- theme_text_color: 'Primary'
- color: 1,0,0,1
- MDLabel:
- font_size: 20
- text: slide_item.slide_status
- size_hint: .1,None
- height: 30
- font_style: 'Title'
- theme_text_color: 'Primary'
- BoxLayout:
- orientation: 'horizontal'
- MDLabel:
- font_size:20
- text: "Images : "
- size_hint: None,None
- text_size: self.size
- height: 30
- font_style: 'Title'
- theme_text_color: 'Primary'
- color: 1,0,0,1
- MDLabel:
- font_size: 20
- text: slide_item.images
- size_hint: .1,None
- height: 30
- font_style: 'Title'
- theme_text_color: 'Primary'
- MDSeparator:
- height: 1
- ScreenManager:
- id: scr_mngr
- scr_mngr: scr_mngr
- LoginScreen:
- id: login_screen
- name: "login_screen"
- username: username
- password: password
- installation_spinner:installation_spinner
- server_spinner:server_spinner
- manager: 'scr_mngr'
- FloatLayout:
- StackLayout:
- size: min(root.size), min(root.size)
- size_hint: None, None
- pos_hint: {'center_x': .5, 'center_y': .5}
- padding: 10,10,10,10
- MDTextField:
- id: username
- text: ''
- hint_text: 'Enter username'
- height: 30
- size_hint: .8, None
- MDTextField:
- id: password
- password: True
- text: ''
- hint_text: 'Enter password'
- height: 30
- size_hint: .8, None
- Spinner:
- id: installation_spinner
- height: 40
- size_hint: .8, None
- values: ["Neon-Linux", "Xenon-Linux", "ADL", "Suburban", "SigtupleLabs"]
- on_text: login_screen.installation_chosen()
- Spinner:
- id: server_spinner
- height: 40
- size_hint: .8,None
- values: ["Neon", "Xenon", "Krypton"]
- on_text: login_screen.server_chosen()
- MDRaisedButton:
- id: login_button
- text: "LOGIN"
- height: 40
- size_hint: .4, None
- on_release: login_screen.login(scr_mngr)
- NavigationScreen:
- id: navigation_screen
- name: 'navigation_screen'
- manager: 'scr_mngr'
- NavigationLayout:
- id: nav_layout
- MDNavigationDrawer:
- id: nav_drawer
- NavigationDrawerToolbar:
- id: nav_toolbar
- title: "Sigtuple"
- NavigationDrawerIconButton:
- icon: 'checkbox-blank-circle'
- text: "Camera"
- on_release: sub_screen_manager.current = 'home'
- NavigationDrawerIconButton:
- icon: 'checkbox-blank-circle'
- text: "Status"
- on_release: sub_screen_manager.current = 'status_screen'
- NavigationDrawerIconButton:
- icon: 'checkbox-blank-circle'
- text: "Logout"
- on_release: navigation_screen.logout(scr_mngr)
- NavigationDrawerIconButton:
- icon: 'checkbox-blank-circle'
- text: "Shutdown"
- on_release: navigation_screen.shutdown_application(home_screen)
- BoxLayout:
- orientation: 'vertical'
- Toolbar:
- id: toolbar
- title: 'Shonit'
- md_bg_color: app.theme_cls.primary_color
- background_palette: 'Primary'
- background_hue: '500'
- left_action_items: [['menu', lambda x: nav_layout.toggle_nav_drawer()]]
- ScreenManager:
- id: sub_screen_manager
- home_screen: home_screen
- HomeScreen:
- id: home_screen
- name: 'home'
- create_slide_button: create_slide_button
- image_count: image_count
- auto_scan: auto_scan
- take_btn: take_btn
- stand_by : stand_by
- status_text: status_text
- manager: 'sub_screen_manager'
- RelativeLayout:
- MDRaisedButton:
- id: take_btn
- text: 'Take picture'
- pos_hint: {'bottom': .8,'left': 1}
- on_release: home_screen.click_picture()
- Label:
- id: status_text
- size_hint: .8,1
- text_size: self.size
- size: self.texture_size
- halign: 'left'
- valign: 'middle'
- text: 'Camera Calibration going on'
- pos_hint: {'center_x': .5, 'center_y': .5}
- height: 10
- font_size: 10
- color: 1,0,0,1
- MDRaisedButton:
- id: stand_by
- text: "Standby"
- pos_hint: {'top': .8,'right': 1}
- on_release: home_screen.go_to_home()
- MDRaisedButton:
- id: auto_scan
- text: "Starting up"
- pos_hint: {'bottom': .8,'center_x': .5}
- on_release: home_screen.start_scan()
- MDRaisedButton:
- id: create_slide_button
- text: "Create slide"
- pos_hint: {'bottom': .8,'right': 1}
- on_release: sub_screen_manager.current = 'createslide'
- BoxLayout:
- orientation: 'horizontal'
- size_hint: 1,.1
- pos_hint: {'center_y': .9, 'left':1}
- Label:
- id: image_count
- size_hint: .1,1
- text: "[0]"
- height: 10
- font_size: 20
- halign: 'left'
- valign: 'middle'
- color: 1,0,0,1
- pos_hint: {'center_y':.9, 'left': 1}
- Label:
- id: slideid
- size_hint: .8,1
- text_size: self.size
- size: self.texture_size
- halign: 'left'
- valign: 'middle'
- text: home_screen.slide_name
- pos_hint: {'center_y':.9, 'left': 1}
- height: 10
- font_size: 20
- color: 1,0,0,1
- CreateSlideScreen:
- id: create_slide
- name: 'createslide'
- slide_id: slide_id
- manager: 'sub_screen_manager'
- on_pre_enter:
- stain_1.state = 'down'
- stain_2.state = 'normal'
- smear_1.state = 'normal'
- smear_2.state = 'down'
- slide_id.text = ''
- RelativeLayout:
- id: create_screen
- StackLayout:
- spacing: 10
- Label:
- text: 'Create Slide'
- font_size: 20
- color: 1,0,0,1
- pos_hint: {'center_x': .5}
- size_hint: 1, None
- height: 30
- MDTextField:
- id: slide_id
- text: ''
- hint_text: 'Enter slide name'
- size_hint: .8, None
- height: 30
- BoxLayout:
- orientation: 'horizontal'
- spacing: 5
- size_hint: 1, None
- height: 50
- ToggleButton:
- id: stain_1
- size_hint: .5, 1
- text: 'Leishman'
- group: 'stain'
- ToggleButton:
- id: stain_2
- size_hint: .5, 1
- text: 'MGG'
- group: 'stain'
- BoxLayout:
- orientation: 'horizontal'
- spacing: 5
- size_hint: 1, None
- height: 50
- ToggleButton:
- id: smear_1
- size_hint:.5, 1
- text: 'Auto'
- group: 'smear'
- ToggleButton:
- id: smear_2
- size_hint:.5, 1
- text: 'Manual'
- group: 'smear'
- BoxLayout:
- orientation: 'horizontal'
- size_hint: 1, None
- pos_hint: {'bottom': .6}
- spacing: 10
- height: 50
- MDRaisedButton:
- text: 'Cancel'
- elevation_normal: 2
- on_release: sub_screen_manager.current = 'home'
- size_hint: .2, 1
- pos_hint: {'center_x': .5}
- MDRaisedButton:
- text: 'Done'
- elevation_normal: 2
- on_press: home_screen.change_slide_name(slide_id.text)
- on_press: create_slide.save_slide()
- on_release: sub_screen_manager.current = 'home'
- size_hint: .2, 1
- pos_hint: {'center_x': .5}
- StatusScreen:
- name: 'status_screen'
- manager: 'sub_screen_manager'
- StatusDB:
- orientation: "vertical"
- id: statusDB
- rv: rv
- padding: 10
- spacing: 10
- description: description
- BoxLayout:
- size_hint_y: None
- orientation: 'vertical'
- spacing: 10
- MDRaisedButton:
- text: "Get Slides"
- size_hint: None,None
- width: 60
- height: 50
- on_press: statusDB.get_slides()
- MDTextField:
- id: description
- text: ''
- hint_text: 'Enter description'
- height: 30
- size_hint: .8, None
- RecycleView:
- id: rv
- viewclass: 'SlideItem'
- SelectableRecycleBoxLayout:
- default_size_hint: 1, None
- size_hint_y: None
- height: self.minimum_height
- orientation: 'vertical'
- spacing: 20
- padding: 20
- BoxLayout:
- size_hint_y: None
- pos_hint: {'center_x': .5, 'bottom': 1}
- orientation: 'horizontal'
- spacing: 10
- MDRaisedButton:
- text: "Load"
- size_hint: None,None
- width: 60
- height: 50
- elevation_normal: 2
- on_press: statusDB.load_slide(home_screen)
- MDRaisedButton:
- text: "Submit"
- size_hint: None,None
- width: 60
- height: 50
- elevation_normal: 2
- on_press: statusDB.submit_slide()
- '''
- class NavigateApp(App):
- theme_cls = ThemeManager()
- nav_drawer = ObjectProperty()
- home_screen = ObjectProperty()
- def build(self):
- Window.size = (800, 420)
- self.title = 'Shonit'
- self.icon = 'deployment_files/Shonit.png'
- main_widget = Builder.load_string(main_widget_kv)
- self.home_screen = main_widget.ids.home_screen
- return main_widget
- def on_stop(self):
- print "Stopping application"
- self.home_screen.stop_running_process()
- network_service.app_closed = True
- print network_service.app_closed
- if __name__ == '__main__':
- # Load dascam firmware
- firmware_upload()
- from kivy.config import Config
- Config.set('graphics', 'fullscreen', 1)
- Config.set('kivy', 'window_icon', 'deployment_files/Shonit.png')
- NavigateApp().run()
Add Comment
Please, Sign In to add comment