|
|
|
#:kivy 2.0.0
|
|
|
|
|
|
|
|
#: set highlight_color (0.388,0.694,0.737, 1)
|
|
|
|
#: set main_color (0.88235, 0.88627, 0.88235, 1)
|
|
|
|
#: set highlight_light (0.30588,0.67451, 0.74510, 1)
|
|
|
|
#: set bar_color (0.259,0.435,0.569 ,1 )
|
|
|
|
#: set bar_light (0.447,0.616,0.757, 1)
|
|
|
|
#: set dark_text (0,0,0,1)
|
|
|
|
#: set light_text (1,1,1,1)
|
|
|
|
|
|
|
|
|
|
|
|
#:import FirebaseLoginScreen firebaseloginscreen.firebaseloginscreen.FirebaseLoginScreen
|
|
|
|
|
|
|
|
GridLayout:
|
|
|
|
id: main
|
|
|
|
cols:1
|
|
|
|
rows:2
|
|
|
|
MDToolbar:
|
|
|
|
title: 'LandScape'
|
|
|
|
left_action_items: [["assets/virgis.png",lambda x: app.do_nothing()]]
|
|
|
|
right_action_items:[['play', lambda x: app.play(), "Play Project in ViRGiS"],['folder-open', lambda x: app.show_load(), "Open File" ], ['newspaper-plus', lambda x: app.new_file(), "New Project" ], ['dots-vertical', lambda x: app.show_menu(x), "More Options"]]
|
|
|
|
ScreenManager:
|
|
|
|
id: screen_manager
|
|
|
|
FirebaseLoginScreen:
|
|
|
|
id: firebase_login_screen
|
|
|
|
name: "firebase_login_screen"
|
|
|
|
debug: True
|
|
|
|
remember_user: True
|
|
|
|
require_email_verification: True
|
|
|
|
web_api_key: "AIzaSyC588Nc4mif8n9qds3gMld5tLxrIvBB3Q4"
|
|
|
|
background: "background.jpg"
|
|
|
|
on_login_success:
|
|
|
|
if self.login_state == 'out': app.logout()
|
|
|
|
if self.login_state == 'in': app.local_id = self.localId
|
|
|
|
if self.login_state == 'in': app.user_idToken = self.idToken
|
|
|
|
if self.login_state == 'in': app.login()
|
|
|
|
failed_account_load: app.failed
|
|
|
|
|
|
|
|
Screen:
|
|
|
|
id: mainScreen
|
|
|
|
name: "mainScreen"
|
|
|
|
MainPane:
|
|
|
|
id: mainPane
|
|
|
|
|
|
|
|
Screen:
|
|
|
|
id: unauthScreen
|
|
|
|
name: "unauthScreen"
|
|
|
|
FloatLayout:
|
|
|
|
RoundedCard:
|
|
|
|
pos_hint: {"center_y": .5, "center_x": .5}
|
|
|
|
orientation: "vertical"
|
|
|
|
size_hint: 0.5, 0.5
|
|
|
|
md_bg_color: self.theme_cls.primary_color
|
|
|
|
padding: "10sp"
|
|
|
|
RoundedCard:
|
|
|
|
orientation: "vertical"
|
|
|
|
size_hint_y: 3
|
|
|
|
padding: "20sp"
|
|
|
|
Details:
|
|
|
|
text:"No Valid License"
|
|
|
|
Widget:
|
|
|
|
|
|
|
|
<MainPane>:
|
|
|
|
cols:1
|
|
|
|
rows:3
|
|
|
|
GridLayout:
|
|
|
|
rows: 1
|
|
|
|
size_hint_max_y: "50sp"
|
|
|
|
background_color: (0,0,0,0)
|
|
|
|
Heading1:
|
|
|
|
text: "Project File : "
|
|
|
|
halign: "right"
|
|
|
|
background_color: app.info
|
|
|
|
color: app.info_text
|
|
|
|
Heading1:
|
|
|
|
text: app.project.filename
|
|
|
|
halign: "left"
|
|
|
|
background_color: app.info
|
|
|
|
color: app.info_text
|
|
|
|
MDBoxLayout:
|
|
|
|
orientation: "horizontal"
|
|
|
|
padding: "5sp"
|
|
|
|
size_hint_max_y: "120sp"
|
|
|
|
RoundedCard:
|
|
|
|
orientation: "horizontal"
|
|
|
|
MDBoxLayout:
|
|
|
|
orientation: "vertical"
|
|
|
|
Widget:
|
|
|
|
size_hint_y: 0.5
|
|
|
|
DetailBox:
|
|
|
|
id: project_name
|
|
|
|
text: root.projectName
|
|
|
|
on_text: root.projectName = self.text
|
|
|
|
disabled: root.noData
|
|
|
|
hint_text: "Project Name"
|
|
|
|
required: True
|
|
|
|
helper_text_mode: "on_error"
|
|
|
|
helper_text: "You must give the project a valid name"
|
|
|
|
pos_hint: {"center-x": 0.5}
|
|
|
|
Widget:
|
|
|
|
size_hint_y: 0.5
|
|
|
|
MDBoxLayout:
|
|
|
|
orientation: "horizontal"
|
|
|
|
BoxLayout:
|
|
|
|
orientation: "vertical"
|
|
|
|
DetailFloat:
|
|
|
|
id: lat
|
|
|
|
text: root.lat
|
|
|
|
on_text: root.lat = self.text
|
|
|
|
disabled: root.noData
|
|
|
|
hint_text: "Latitude"
|
|
|
|
tooltip_text: "Geographic center of the\nModel : EPSG:4326 coords"
|
|
|
|
required: True
|
|
|
|
helper_text_mode: "on_error"
|
|
|
|
helper_text: "You must give the project a valid origin"
|
|
|
|
DetailFloat:
|
|
|
|
id: lon
|
|
|
|
text: root.lon
|
|
|
|
on_text: root.lon = self.text
|
|
|
|
disabled: root.noData
|
|
|
|
hint_text: "Longitude"
|
|
|
|
tooltip_text: "Geographic center of the\nModel : EPSG:4326 coords"
|
|
|
|
required: True
|
|
|
|
helper_text_mode: "on_error"
|
|
|
|
helper_text: "You must give the project a valid origin"
|
|
|
|
BoxLayout:
|
|
|
|
orientation: "vertical"
|
|
|
|
size_hint_x: 0.2
|
|
|
|
Widget:
|
|
|
|
MyRaisedIconButton:
|
|
|
|
icon: "map"
|
|
|
|
tooltip_text: "Show the location on a map"
|
|
|
|
on_release: root.map()
|
|
|
|
Widget:
|
|
|
|
MDBoxLayout:
|
|
|
|
orientation:"vertical"
|
|
|
|
DetailFloat:
|
|
|
|
id: gridscale
|
|
|
|
text: root.gridScale
|
|
|
|
hint_text: "gridScale"
|
|
|
|
on_text: root.gridScale = self.text
|
|
|
|
required: True
|
|
|
|
disabled: root.noData
|
|
|
|
tooltip_text: "Size of grid to be used by\n \"Snap to Grid\" : metres"
|
|
|
|
helper_text_mode: "on_error"
|
|
|
|
helper_text: "You must give the project a valid grid scale"
|
|
|
|
DetailBox:
|
|
|
|
id: default_proj
|
|
|
|
text: root.default_proj
|
|
|
|
hint_text: "Project CRS"
|
|
|
|
on_text: root.default_proj = self.text
|
|
|
|
helper_text: "Default EPSG:4326"
|
|
|
|
tooltip_text: "Default CRS or Projection for the project"
|
|
|
|
helper_text_mode: "on_focus"
|
|
|
|
GridLayout:
|
|
|
|
cols:2
|
|
|
|
rows:1
|
|
|
|
LayerListPane:
|
|
|
|
id: layerList
|
|
|
|
LayerDetailPane:
|
|
|
|
id: layerDetail
|
|
|
|
|
|
|
|
FAB:
|
|
|
|
icon: app.fab
|
|
|
|
on_release: app.fab_action()
|
|
|
|
pos: [self.parent.size[0] - 1.5 * self.size[0], 0.5 * self.size[1]]
|
|
|
|
tooltip_text: app.tooltip_text
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<LayerListPane>:
|
|
|
|
cols: 1
|
|
|
|
size_hint_x: 0.5
|
|
|
|
Heading1:
|
|
|
|
size_hint_max_y: "25sp"
|
|
|
|
text: "Layers"
|
|
|
|
BoxLayout
|
|
|
|
orientation: "horizontal"
|
|
|
|
size_hint_max_y: "25sp"
|
|
|
|
spacing:"3sp"
|
|
|
|
padding: ("5sp","3sp")
|
|
|
|
OldButton:
|
|
|
|
text: 'Add Layer'
|
|
|
|
on_release: root.add_layer()
|
|
|
|
tooltip_text: "Add new Data Layer"
|
|
|
|
OldButton:
|
|
|
|
text: 'Add Map'
|
|
|
|
on_release: root.add_map()
|
|
|
|
tooltip_text: "Add a Map Layer"
|
|
|
|
OldButton:
|
|
|
|
text: 'Delete Layer'
|
|
|
|
on_release: root.delete_layer()
|
|
|
|
tooltip_text: "Delete Layer"
|
|
|
|
RecycleView:
|
|
|
|
id: layerRv
|
|
|
|
viewclass: 'InvertSelectableLabel'
|
|
|
|
data: root.layers
|
|
|
|
SelectableRecycleBoxLayout:
|
|
|
|
id: layerRecycle
|
|
|
|
default_size: None, dp(56)
|
|
|
|
default_size_hint: 1, None
|
|
|
|
size_hint_y: None
|
|
|
|
height: self.minimum_height
|
|
|
|
orientation: 'vertical'
|
|
|
|
padding: ("5sp","2sp")
|
|
|
|
|
|
|
|
<AddLayerPane>:
|
|
|
|
size: root.size
|
|
|
|
pos: root.pos
|
|
|
|
BoxLayout:
|
|
|
|
padding:"10sp"
|
|
|
|
spacing: "10sp"
|
|
|
|
orientation: "vertical"
|
|
|
|
Heading1:
|
|
|
|
text: "Create a New Layer"
|
|
|
|
GridLayout:
|
|
|
|
cols:1
|
|
|
|
GridLayout:
|
|
|
|
cols:1
|
|
|
|
padding: "20sp"
|
|
|
|
siz_hint_y: 0.5
|
|
|
|
Heading1:
|
|
|
|
text: "1 : Chose a type of location for the source data"
|
|
|
|
Spinner:
|
|
|
|
id: sourceType
|
|
|
|
size_hint_max_y: "30sp"
|
|
|
|
values: root.sourceTypes
|
|
|
|
text: root.sourceType
|
|
|
|
on_text: root.sourceType = self.text
|
|
|
|
GridLayout:
|
|
|
|
cols:2
|
|
|
|
size_hint_y: 1
|
|
|
|
padding: "20sp"
|
|
|
|
GridLayout:
|
|
|
|
cols:1
|
|
|
|
Heading1:
|
|
|
|
text: "2 : Chose or type in a source location (i.e. File or URI)"
|
|
|
|
GridLayout:
|
|
|
|
rows:1
|
|
|
|
DetailBox:
|
|
|
|
|
|
|
|
id: create_source
|
|
|
|
text: root.source
|
|
|
|
on_text: root.source = self.text
|
|
|
|
left_icon: "folder-open"
|
|
|
|
left_icon_action: root.get_source
|
|
|
|
left_tooltip: "Search for source file"
|
|
|
|
right_icon: "file-document"
|
|
|
|
right_tooltip: "Validate and get details of\nthe layer source data"
|
|
|
|
right_icon_action: root.info
|
|
|
|
right_disabled: False if self.text else True
|
|
|
|
GridLayout:
|
|
|
|
cols:1
|
|
|
|
padding: "10sp"
|
|
|
|
size_hint_y: 2
|
|
|
|
GridLayout:
|
|
|
|
rows:1
|
|
|
|
Details:
|
|
|
|
text:"Source Processor"
|
|
|
|
tooltip_text: "This is the processing type for the data source"
|
|
|
|
Details:
|
|
|
|
text: root.dal
|
|
|
|
GridLayout:
|
|
|
|
rows:1
|
|
|
|
Details:
|
|
|
|
text:"Source Driver"
|
|
|
|
tooltip_text: "This is the driver type for the data source"
|
|
|
|
Details:
|
|
|
|
text: root.driver
|
|
|
|
GridLayout:
|
|
|
|
rows:1
|
|
|
|
Details:
|
|
|
|
text:"CRS"
|
|
|
|
tooltip_text: "This is the CRS reference found in the data source"
|
|
|
|
Details:
|
|
|
|
text: root.proj
|
|
|
|
GridLayout:
|
|
|
|
cols:1
|
|
|
|
padding: "20sp"
|
|
|
|
select: root.select
|
|
|
|
size_hint_y: 2
|
|
|
|
Heading1:
|
|
|
|
text: "3 : Chose one of the Layer Types shown below"
|
|
|
|
RecycleView:
|
|
|
|
id: layerTypeRv
|
|
|
|
viewclass: 'SelectableLabel'
|
|
|
|
data: root.selectedTypes
|
|
|
|
SelectableRecycleBoxLayout:
|
|
|
|
id: layerTyperRecycle
|
|
|
|
default_size: None, dp(56)
|
|
|
|
default_size_hint: 1, None
|
|
|
|
size_hint_y: None
|
|
|
|
height: self.minimum_height
|
|
|
|
orientation: 'vertical'
|
|
|
|
padding: "5sp"
|
|
|
|
|
|
|
|
<LayerDetailPane>:
|
|
|
|
orientation: "vertical"
|
|
|
|
|
|
|
|
<ProfileDetailPane>:
|
|
|
|
FloatLayout:
|
|
|
|
RoundedCard:
|
|
|
|
pos_hint: {"center_y": .5, "center_x": .5}
|
|
|
|
orientation: "vertical"
|
|
|
|
size_hint: 0.5, 0.5
|
|
|
|
md_bg_color: self.theme_cls.primary_color
|
|
|
|
padding: "10sp"
|
|
|
|
RoundedCard:
|
|
|
|
orientation: "horizontal"
|
|
|
|
padding: "10sp"
|
|
|
|
Details:
|
|
|
|
text: "Light/Dark Theme"
|
|
|
|
MySwitch:
|
|
|
|
id: theme_select
|
|
|
|
on_active: app.set_theme(self.active)
|
|
|
|
active: True if self.theme_cls.theme_style == "Dark" else False
|
|
|
|
Widget:
|
|
|
|
size_hint_y: 3
|
|
|
|
|