Guest User

Untitled

a guest
Feb 7th, 2018
41
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.03 KB | None | 0 0
  1. from kivy.app import App
  2. from kivy.lang import Builder
  3. from kivy.properties import ObjectProperty
  4. from kivymd.theming import ThemeManager
  5. from kivy.core.window import Window
  6. from kivy.clock import Clock
  7. from network import network_service
  8. from camera.upload import firmware_upload
  9.  
  10. Clock.max_iteration = 20
  11.  
  12. main_widget_kv = '''
  13. #:import Toolbar kivymd.toolbar.Toolbar
  14. #:import ThemeManager kivymd.theming.ThemeManager
  15. #:import NavigationDrawerToolbar kivymd.navigationdrawer.NavigationDrawerToolbar
  16. #:import MDCheckbox kivymd.selectioncontrols.MDCheckbox
  17. #:import MDSwitch kivymd.selectioncontrols.MDSwitch
  18. #:import MDCard kivymd.card.MDCard
  19. #:import MDSeparator kivymd.card.MDSeparator
  20. #:import NavigationScreen screens.navigation.NavigationScreen
  21. #:import SelectableRecycleBoxLayout screens.status.SelectableRecycleBoxLayout
  22. #:import CreateSlideScreen screens.create_slide.CreateSlideScreen
  23. #:import HomeScreen screens.home.HomeScreen
  24. #:import LoginScreen screens.login.LoginScreen
  25. #:import MDTextField kivymd.textfields.MDTextField
  26. #:import StatusScreen screens.status.StatusScreen
  27.  
  28. <SlideItem@BoxLayout>:
  29. orientation: 'vertical'
  30. index: 0
  31. id: slide_item
  32. spacing: 10
  33. slide_name: ''
  34. slide_status: ''
  35. images: ''
  36. pos_hint: {'left': 1}
  37. canvas.before:
  38. Color:
  39. rgba: (.0, 0.9, .1, .3) if self.selected else (1, 1, 1, 1)
  40. Rectangle:
  41. pos: self.pos
  42. size: self.size
  43.  
  44. BoxLayout:
  45. orientation: 'horizontal'
  46. MDLabel:
  47. font_size:20
  48. text: "Slide : "
  49. size_hint: None,None
  50. text_size: self.size
  51. height: 30
  52. font_style: 'Title'
  53. theme_text_color: 'Primary'
  54. color: 1,0,0,1
  55. MDLabel:
  56. font_size: 20
  57. text: slide_item.slide_name
  58. size_hint: .1,None
  59. height: 30
  60. font_style: 'Title'
  61. theme_text_color: 'Primary'
  62. BoxLayout:
  63. orientation: 'horizontal'
  64. MDLabel:
  65. font_size:20
  66. text: "Status : "
  67. size_hint: None,None
  68. text_size: self.size
  69. height: 30
  70. font_style: 'Title'
  71. theme_text_color: 'Primary'
  72. color: 1,0,0,1
  73. MDLabel:
  74. font_size: 20
  75. text: slide_item.slide_status
  76. size_hint: .1,None
  77. height: 30
  78. font_style: 'Title'
  79. theme_text_color: 'Primary'
  80. BoxLayout:
  81. orientation: 'horizontal'
  82. MDLabel:
  83. font_size:20
  84. text: "Images : "
  85. size_hint: None,None
  86. text_size: self.size
  87. height: 30
  88. font_style: 'Title'
  89. theme_text_color: 'Primary'
  90. color: 1,0,0,1
  91. MDLabel:
  92. font_size: 20
  93. text: slide_item.images
  94. size_hint: .1,None
  95. height: 30
  96. font_style: 'Title'
  97. theme_text_color: 'Primary'
  98. MDSeparator:
  99. height: 1
  100.  
  101. ScreenManager:
  102. id: scr_mngr
  103. scr_mngr: scr_mngr
  104. LoginScreen:
  105. id: login_screen
  106. name: "login_screen"
  107. username: username
  108. password: password
  109. installation_spinner:installation_spinner
  110. server_spinner:server_spinner
  111. manager: 'scr_mngr'
  112. FloatLayout:
  113.  
  114. StackLayout:
  115. size: min(root.size), min(root.size)
  116. size_hint: None, None
  117. pos_hint: {'center_x': .5, 'center_y': .5}
  118. padding: 10,10,10,10
  119.  
  120. MDTextField:
  121. id: username
  122. text: ''
  123. hint_text: 'Enter username'
  124. height: 30
  125. size_hint: .8, None
  126.  
  127. MDTextField:
  128. id: password
  129. password: True
  130. text: ''
  131. hint_text: 'Enter password'
  132. height: 30
  133. size_hint: .8, None
  134. Spinner:
  135. id: installation_spinner
  136. height: 40
  137. size_hint: .8, None
  138. values: ["Neon-Linux", "Xenon-Linux", "ADL", "Suburban", "SigtupleLabs"]
  139. on_text: login_screen.installation_chosen()
  140. Spinner:
  141. id: server_spinner
  142. height: 40
  143. size_hint: .8,None
  144. values: ["Neon", "Xenon", "Krypton"]
  145. on_text: login_screen.server_chosen()
  146.  
  147. MDRaisedButton:
  148. id: login_button
  149. text: "LOGIN"
  150. height: 40
  151. size_hint: .4, None
  152. on_release: login_screen.login(scr_mngr)
  153.  
  154. NavigationScreen:
  155. id: navigation_screen
  156. name: 'navigation_screen'
  157. manager: 'scr_mngr'
  158.  
  159. NavigationLayout:
  160. id: nav_layout
  161. MDNavigationDrawer:
  162. id: nav_drawer
  163. NavigationDrawerToolbar:
  164. id: nav_toolbar
  165. title: "Sigtuple"
  166. NavigationDrawerIconButton:
  167. icon: 'checkbox-blank-circle'
  168. text: "Camera"
  169. on_release: sub_screen_manager.current = 'home'
  170.  
  171. NavigationDrawerIconButton:
  172. icon: 'checkbox-blank-circle'
  173. text: "Status"
  174. on_release: sub_screen_manager.current = 'status_screen'
  175.  
  176. NavigationDrawerIconButton:
  177. icon: 'checkbox-blank-circle'
  178. text: "Logout"
  179. on_release: navigation_screen.logout(scr_mngr)
  180.  
  181. NavigationDrawerIconButton:
  182. icon: 'checkbox-blank-circle'
  183. text: "Shutdown"
  184. on_release: navigation_screen.shutdown_application(home_screen)
  185.  
  186.  
  187.  
  188. BoxLayout:
  189. orientation: 'vertical'
  190. Toolbar:
  191. id: toolbar
  192. title: 'Shonit'
  193. md_bg_color: app.theme_cls.primary_color
  194. background_palette: 'Primary'
  195. background_hue: '500'
  196. left_action_items: [['menu', lambda x: nav_layout.toggle_nav_drawer()]]
  197.  
  198. ScreenManager:
  199. id: sub_screen_manager
  200. home_screen: home_screen
  201.  
  202. HomeScreen:
  203. id: home_screen
  204. name: 'home'
  205. create_slide_button: create_slide_button
  206. image_count: image_count
  207. auto_scan: auto_scan
  208. take_btn: take_btn
  209. stand_by : stand_by
  210. status_text: status_text
  211.  
  212. manager: 'sub_screen_manager'
  213. RelativeLayout:
  214. MDRaisedButton:
  215. id: take_btn
  216. text: 'Take picture'
  217. pos_hint: {'bottom': .8,'left': 1}
  218. on_release: home_screen.click_picture()
  219. Label:
  220. id: status_text
  221. size_hint: .8,1
  222. text_size: self.size
  223. size: self.texture_size
  224. halign: 'left'
  225. valign: 'middle'
  226. text: 'Camera Calibration going on'
  227. pos_hint: {'center_x': .5, 'center_y': .5}
  228. height: 10
  229. font_size: 10
  230. color: 1,0,0,1
  231.  
  232. MDRaisedButton:
  233. id: stand_by
  234. text: "Standby"
  235. pos_hint: {'top': .8,'right': 1}
  236. on_release: home_screen.go_to_home()
  237.  
  238. MDRaisedButton:
  239. id: auto_scan
  240. text: "Starting up"
  241. pos_hint: {'bottom': .8,'center_x': .5}
  242. on_release: home_screen.start_scan()
  243. MDRaisedButton:
  244. id: create_slide_button
  245. text: "Create slide"
  246. pos_hint: {'bottom': .8,'right': 1}
  247. on_release: sub_screen_manager.current = 'createslide'
  248. BoxLayout:
  249. orientation: 'horizontal'
  250. size_hint: 1,.1
  251. pos_hint: {'center_y': .9, 'left':1}
  252. Label:
  253. id: image_count
  254. size_hint: .1,1
  255. text: "[0]"
  256. height: 10
  257. font_size: 20
  258.  
  259. halign: 'left'
  260. valign: 'middle'
  261. color: 1,0,0,1
  262. pos_hint: {'center_y':.9, 'left': 1}
  263. Label:
  264. id: slideid
  265. size_hint: .8,1
  266. text_size: self.size
  267. size: self.texture_size
  268. halign: 'left'
  269. valign: 'middle'
  270. text: home_screen.slide_name
  271. pos_hint: {'center_y':.9, 'left': 1}
  272. height: 10
  273. font_size: 20
  274. color: 1,0,0,1
  275.  
  276.  
  277.  
  278. CreateSlideScreen:
  279.  
  280. id: create_slide
  281. name: 'createslide'
  282. slide_id: slide_id
  283. manager: 'sub_screen_manager'
  284. on_pre_enter:
  285. stain_1.state = 'down'
  286. stain_2.state = 'normal'
  287. smear_1.state = 'normal'
  288. smear_2.state = 'down'
  289. slide_id.text = ''
  290.  
  291. RelativeLayout:
  292. id: create_screen
  293. StackLayout:
  294. spacing: 10
  295. Label:
  296. text: 'Create Slide'
  297. font_size: 20
  298. color: 1,0,0,1
  299. pos_hint: {'center_x': .5}
  300. size_hint: 1, None
  301. height: 30
  302. MDTextField:
  303. id: slide_id
  304. text: ''
  305. hint_text: 'Enter slide name'
  306. size_hint: .8, None
  307. height: 30
  308.  
  309. BoxLayout:
  310. orientation: 'horizontal'
  311. spacing: 5
  312. size_hint: 1, None
  313. height: 50
  314. ToggleButton:
  315. id: stain_1
  316. size_hint: .5, 1
  317. text: 'Leishman'
  318. group: 'stain'
  319. ToggleButton:
  320. id: stain_2
  321. size_hint: .5, 1
  322. text: 'MGG'
  323. group: 'stain'
  324. BoxLayout:
  325. orientation: 'horizontal'
  326. spacing: 5
  327. size_hint: 1, None
  328. height: 50
  329. ToggleButton:
  330. id: smear_1
  331. size_hint:.5, 1
  332. text: 'Auto'
  333. group: 'smear'
  334. ToggleButton:
  335. id: smear_2
  336. size_hint:.5, 1
  337. text: 'Manual'
  338. group: 'smear'
  339. BoxLayout:
  340. orientation: 'horizontal'
  341. size_hint: 1, None
  342. pos_hint: {'bottom': .6}
  343. spacing: 10
  344. height: 50
  345. MDRaisedButton:
  346. text: 'Cancel'
  347. elevation_normal: 2
  348. on_release: sub_screen_manager.current = 'home'
  349. size_hint: .2, 1
  350. pos_hint: {'center_x': .5}
  351.  
  352. MDRaisedButton:
  353. text: 'Done'
  354. elevation_normal: 2
  355. on_press: home_screen.change_slide_name(slide_id.text)
  356. on_press: create_slide.save_slide()
  357. on_release: sub_screen_manager.current = 'home'
  358. size_hint: .2, 1
  359. pos_hint: {'center_x': .5}
  360. StatusScreen:
  361. name: 'status_screen'
  362. manager: 'sub_screen_manager'
  363. StatusDB:
  364. orientation: "vertical"
  365. id: statusDB
  366. rv: rv
  367. padding: 10
  368. spacing: 10
  369. description: description
  370.  
  371. BoxLayout:
  372. size_hint_y: None
  373. orientation: 'vertical'
  374. spacing: 10
  375.  
  376. MDRaisedButton:
  377. text: "Get Slides"
  378. size_hint: None,None
  379. width: 60
  380. height: 50
  381. on_press: statusDB.get_slides()
  382.  
  383. MDTextField:
  384. id: description
  385. text: ''
  386. hint_text: 'Enter description'
  387. height: 30
  388. size_hint: .8, None
  389.  
  390. RecycleView:
  391. id: rv
  392. viewclass: 'SlideItem'
  393. SelectableRecycleBoxLayout:
  394. default_size_hint: 1, None
  395. size_hint_y: None
  396. height: self.minimum_height
  397. orientation: 'vertical'
  398. spacing: 20
  399. padding: 20
  400. BoxLayout:
  401. size_hint_y: None
  402. pos_hint: {'center_x': .5, 'bottom': 1}
  403. orientation: 'horizontal'
  404. spacing: 10
  405. MDRaisedButton:
  406. text: "Load"
  407. size_hint: None,None
  408. width: 60
  409. height: 50
  410. elevation_normal: 2
  411. on_press: statusDB.load_slide(home_screen)
  412. MDRaisedButton:
  413. text: "Submit"
  414. size_hint: None,None
  415. width: 60
  416. height: 50
  417. elevation_normal: 2
  418. on_press: statusDB.submit_slide()
  419.  
  420.  
  421.  
  422.  
  423.  
  424.  
  425. '''
  426.  
  427.  
  428. class NavigateApp(App):
  429. theme_cls = ThemeManager()
  430. nav_drawer = ObjectProperty()
  431. home_screen = ObjectProperty()
  432.  
  433. def build(self):
  434. Window.size = (800, 420)
  435. self.title = 'Shonit'
  436. self.icon = 'deployment_files/Shonit.png'
  437. main_widget = Builder.load_string(main_widget_kv)
  438. self.home_screen = main_widget.ids.home_screen
  439.  
  440. return main_widget
  441.  
  442. def on_stop(self):
  443. print "Stopping application"
  444.  
  445. self.home_screen.stop_running_process()
  446. network_service.app_closed = True
  447. print network_service.app_closed
  448.  
  449.  
  450. if __name__ == '__main__':
  451. # Load dascam firmware
  452. firmware_upload()
  453.  
  454. from kivy.config import Config
  455.  
  456. Config.set('graphics', 'fullscreen', 1)
  457. Config.set('kivy', 'window_icon', 'deployment_files/Shonit.png')
  458.  
  459. NavigateApp().run()
Add Comment
Please, Sign In to add comment