URI: 
       tstyle.kv - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
       tstyle.kv (25528B)
       ---
            1 #:kivy 1.0
            2 
            3 <Label>:
            4     canvas:
            5         Color:
            6             rgba: self.disabled_color if self.disabled else (self.color if not self.markup else (1, 1, 1, 1))
            7         Rectangle:
            8             texture: self.texture
            9             size: self.texture_size
           10             pos: int(self.center_x - self.texture_size[0] / 2.), int(self.center_y - self.texture_size[1] / 2.)
           11 
           12 <-Button,-ToggleButton>:
           13     state_image: self.background_normal if self.state == 'normal' else self.background_down
           14     disabled_image: self.background_disabled_normal if self.state == 'normal' else self.background_disabled_down
           15     canvas:
           16         Color:
           17             rgba: self.background_color
           18         BorderImage:
           19             border: self.border
           20             pos: self.pos
           21             size: self.size
           22             source: self.disabled_image if self.disabled else self.state_image
           23         Color:
           24             rgba: self.disabled_color if self.disabled else self.color
           25         Rectangle:
           26             texture: self.texture
           27             size: self.texture_size
           28             pos: int(self.center_x - self.texture_size[0] / 2.), int(self.center_y - self.texture_size[1] / 2.)
           29 
           30 <BubbleContent>
           31     opacity: .7 if self.disabled else 1
           32     rows: 1
           33     canvas:
           34         Color:
           35             rgba: self.parent.background_color if self.parent else (1, 1, 1, 1)
           36         BorderImage:
           37             border: self.parent.border if self.parent else (16, 16, 16, 16)
           38             texture: root.parent._bk_img.texture if root.parent else None
           39             size: self.size
           40             pos: self.pos
           41 
           42 <BubbleButton>:
           43     background_normal: 'atlas://data/images/defaulttheme/bubble_btn'
           44     background_down: 'atlas://data/images/defaulttheme/bubble_btn_pressed'
           45     background_disabled_normal: 'atlas://data/images/defaulttheme/bubble_btn'
           46     background_disabled_down: 'atlas://data/images/defaulttheme/bubble_btn_pressed'
           47     border: (0, 0, 0, 0)
           48 
           49 <Slider>:
           50     canvas:
           51         Color:
           52             rgb: 1, 1, 1
           53         BorderImage:
           54             border: (0, 18, 0, 18) if self.orientation == 'horizontal' else (18, 0, 18, 0)
           55             pos: (self.x + self.padding, self.center_y - sp(18)) if self.orientation == 'horizontal' else (self.center_x - 18, self.y + self.padding)
           56             size: (self.width - self.padding * 2, sp(36)) if self.orientation == 'horizontal' else (sp(36), self.height - self.padding * 2)
           57             source: 'atlas://data/images/defaulttheme/slider{}_background{}'.format(self.orientation[0], '_disabled' if self.disabled else '')
           58         Rectangle:
           59             pos: (self.value_pos[0] - sp(16), self.center_y - sp(17)) if self.orientation == 'horizontal' else (self.center_x - (16), self.value_pos[1] - sp(16))
           60             size: (sp(32), sp(32))
           61             source: 'atlas://data/images/defaulttheme/slider_cursor{}'.format('_disabled' if self.disabled else '')
           62 
           63 <RelativeLayout>:
           64     canvas.before:
           65         PushMatrix
           66         Translate:
           67             xy: self.pos
           68     canvas.after:
           69         PopMatrix
           70 
           71 <Image,AsyncImage>:
           72     canvas:
           73         Color:
           74             rgba: self.color
           75         Rectangle:
           76             texture: self.texture
           77             size: self.norm_image_size
           78             pos: self.center_x - self.norm_image_size[0] / 2., self.center_y - self.norm_image_size[1] / 2.
           79 
           80 <TabbedPanelContent>
           81     rows: 1
           82     padding: 3
           83     canvas:
           84         Color:
           85             rgba: self.parent.background_color if self.parent else (1, 1, 1, 1)
           86         BorderImage:
           87             border: self.parent.border if self.parent else (16, 16, 16, 16)
           88             source: (root.parent.background_disabled_image if self.disabled else root.parent.background_image) if root.parent else None
           89             size: self.size
           90             pos: self.pos
           91 
           92 <TabbedPanelStrip>
           93     rows: 1
           94 
           95 <StripLayout>
           96     padding: '2dp', '2dp', '2dp', '2dp'
           97     canvas.before:
           98         BorderImage:
           99             pos: self.pos
          100             size: self.size
          101             border: root.border
          102             source: root.background_image
          103 
          104 <TabbedPanelHeader>:
          105     halign: 'center'
          106     valign: 'middle'
          107     background_normal: 'atlas://data/images/defaulttheme/tab_btn'
          108     background_disabled_normal: 'atlas://data/images/defaulttheme/tab_btn_disabled'
          109     background_down: 'atlas://data/images/defaulttheme/tab_btn_pressed'
          110     background_disabled_down: 'atlas://data/images/defaulttheme/tab_btn_pressed'
          111     border: (8, 8, 8, 8)
          112     font_size: '15sp'
          113 
          114 <Selector>
          115     allow_stretch: True
          116 
          117 <TextInput>:
          118     canvas.before:
          119         Color:
          120             rgba: self.background_color
          121         BorderImage:
          122             border: self.border
          123             pos: self.pos
          124             size: self.size
          125             source: (self.background_disabled_active if self.disabled else self.background_active) if self.focus else (self.background_disabled_normal if self.disabled else self.background_normal)
          126         Color:
          127             rgba: (self.cursor_color if self.focus and not self.cursor_blink else (0, 0, 0, 0))
          128         Rectangle:
          129             pos: [int(x) for x in self.cursor_pos]
          130             size: 1, -self.line_height
          131         Color:
          132             rgba: self.disabled_foreground_color if self.disabled else (self.hint_text_color if not self.text and not self.focus else self.foreground_color)
          133 
          134 <TextInputCutCopyPaste>:
          135     but_cut: cut.__self__
          136     but_copy: copy.__self__
          137     but_paste: paste.__self__
          138     but_selectall: selectall.__self__
          139 
          140     size_hint: None, None
          141     size: '150sp', '50sp'
          142     BubbleButton:
          143         id: cut
          144         text: 'Cut'
          145         on_release: root.do('cut')
          146     BubbleButton:
          147         id: copy
          148         text: 'Copy'
          149         on_release: root.do('copy')
          150     BubbleButton:
          151         id: paste
          152         text: 'Paste'
          153         on_release: root.do('paste')
          154     BubbleButton:
          155         id: selectall
          156         text: 'Select All'
          157         on_release: root.do('selectall')
          158 
          159 <CodeInput>:
          160     font_name: 'data/fonts/RobotoMono-Regular.ttf'
          161 
          162 
          163 <TreeViewNode>:
          164     canvas.before:
          165         Color:
          166             rgba: self.color_selected if self.is_selected else self.odd_color if self.odd else self.even_color
          167         Rectangle:
          168             pos: [self.parent.x, self.y] if self.parent else [0, 0]
          169             size: [self.parent.width, self.height] if self.parent else [1, 1]
          170         Color:
          171             rgba: 1, 1, 1, int(not self.is_leaf)
          172         Rectangle:
          173             source: 'atlas://data/images/defaulttheme/tree_%s' % ('opened' if self.is_open else 'closed')
          174             size: 16, 16
          175             pos: self.x - 20, self.center_y - 8
          176     canvas.after:
          177         Color:
          178             rgba: .5, .5, .5, .2
          179         Line:
          180             points: [self.parent.x, self.y, self.parent.right, self.y] if self.parent else []
          181 
          182 
          183 <TreeViewLabel>:
          184     width: self.texture_size[0]
          185     height: max(self.texture_size[1] + dp(10), dp(24))
          186     text_size: self.width, None
          187 
          188 
          189 <StencilView>:
          190     canvas.before:
          191         StencilPush
          192         Rectangle:
          193             pos: self.pos
          194             size: self.size
          195         StencilUse
          196 
          197     canvas.after:
          198         StencilUnUse
          199         Rectangle:
          200             pos: self.pos
          201             size: self.size
          202         StencilPop
          203 
          204 
          205 <FileChooserListLayout>:
          206     on_entry_added: treeview.add_node(args[1])
          207     on_entries_cleared: treeview.root.nodes = []
          208     on_subentry_to_entry: not args[2].locked and treeview.add_node(args[1], args[2])
          209     on_remove_subentry: args[2].nodes = []
          210     BoxLayout:
          211         pos: root.pos
          212         size: root.size
          213         size_hint: None, None
          214         orientation: 'vertical'
          215         BoxLayout:
          216             size_hint_y: None
          217             height: 30
          218             orientation: 'horizontal'
          219             Widget:
          220                 # Just for spacing
          221                 width: 10
          222                 size_hint_x: None
          223             Label:
          224                 text: 'Name'
          225                 text_size: self.size
          226                 halign: 'left'
          227                 bold: True
          228             Label:
          229                 text: 'Size'
          230                 text_size: self.size
          231                 size_hint_x: None
          232                 halign: 'right'
          233                 bold: True
          234             Widget:
          235                 # Just for spacing
          236                 width: 10
          237                 size_hint_x: None
          238         ScrollView:
          239             id: scrollview
          240             do_scroll_x: False
          241             Scatter:
          242                 do_rotation: False
          243                 do_scale: False
          244                 do_translation: False
          245                 size: treeview.size
          246                 size_hint_y: None
          247                 TreeView:
          248                     id: treeview
          249                     hide_root: True
          250                     size_hint_y: None
          251                     width: scrollview.width
          252                     height: self.minimum_height
          253                     on_node_expand: root.controller.entry_subselect(args[1])
          254                     on_node_collapse: root.controller.close_subselection(args[1])
          255 
          256 <FileChooserListView>:
          257     layout: layout
          258     FileChooserListLayout:
          259         id: layout
          260         controller: root
          261 
          262 [FileListEntry@FloatLayout+TreeViewNode]:
          263     locked: False
          264     entries: []
          265     path: ctx.path
          266     # FIXME: is_selected is actually a read_only treeview property. In this
          267     # case, however, we're doing this because treeview only has single-selection
          268     # hardcoded in it. The fix to this would be to update treeview to allow
          269     # multiple selection.
          270     is_selected: self.path in ctx.controller().selection
          271 
          272     orientation: 'horizontal'
          273     size_hint_y: None
          274     height: '48dp' if dp(1) > 1 else '24dp'
          275     # Don't allow expansion of the ../ node
          276     is_leaf: not ctx.isdir or ctx.name.endswith('..' + ctx.sep) or self.locked
          277     on_touch_down: self.collide_point(*args[1].pos) and ctx.controller().entry_touched(self, args[1])
          278     on_touch_up: self.collide_point(*args[1].pos) and ctx.controller().entry_released(self, args[1])
          279     BoxLayout:
          280         pos: root.pos
          281         Label:
          282             id: filename
          283             text_size: self.width, None
          284             halign: 'left'
          285             shorten: True
          286             text: ctx.name
          287         Label:
          288             text_size: self.width, None
          289             size_hint_x: None
          290             halign: 'right'
          291             text: '{}'.format(ctx.get_nice_size())
          292 
          293 
          294 <FileChooserIconLayout>:
          295     on_entry_added: stacklayout.add_widget(args[1])
          296     on_entries_cleared: stacklayout.clear_widgets()
          297     ScrollView:
          298         id: scrollview
          299         pos: root.pos
          300         size: root.size
          301         size_hint: None, None
          302         do_scroll_x: False
          303         Scatter:
          304             do_rotation: False
          305             do_scale: False
          306             do_translation: False
          307             size_hint_y: None
          308             height: stacklayout.height
          309             StackLayout:
          310                 id: stacklayout
          311                 width: scrollview.width
          312                 size_hint_y: None
          313                 height: self.minimum_height
          314                 spacing: '10dp'
          315                 padding: '10dp'
          316 
          317 <FileChooserIconView>:
          318     layout: layout
          319     FileChooserIconLayout:
          320         id: layout
          321         controller: root
          322 
          323 [FileIconEntry@Widget]:
          324     locked: False
          325     path: ctx.path
          326     selected: self.path in ctx.controller().selection
          327     size_hint: None, None
          328 
          329     on_touch_down: self.collide_point(*args[1].pos) and ctx.controller().entry_touched(self, args[1])
          330     on_touch_up: self.collide_point(*args[1].pos) and ctx.controller().entry_released(self, args[1])
          331     size: '100dp', '100dp'
          332 
          333     canvas:
          334         Color:
          335             rgba: 1, 1, 1, 1 if self.selected else 0
          336         BorderImage:
          337             border: 8, 8, 8, 8
          338             pos: root.pos
          339             size: root.size
          340             source: 'atlas://data/images/defaulttheme/filechooser_selected'
          341 
          342     Image:
          343         size: '48dp', '48dp'
          344         source: 'atlas://data/images/defaulttheme/filechooser_%s' % ('folder' if ctx.isdir else 'file')
          345         pos: root.x + dp(24), root.y + dp(40)
          346     Label:
          347         text: ctx.name
          348         text_size: (root.width, self.height)
          349         halign: 'center'
          350         shorten: True
          351         size: '100dp', '16dp'
          352         pos: root.x, root.y + dp(16)
          353 
          354     Label:
          355         text: '{}'.format(ctx.get_nice_size())
          356         font_size: '11sp'
          357         color: .8, .8, .8, 1
          358         size: '100dp', '16sp'
          359         pos: root.pos
          360         halign: 'center'
          361 
          362 <FileChooserProgress>:
          363     pos_hint: {'x': 0, 'y': 0}
          364     canvas:
          365         Color:
          366             rgba: 0, 0, 0, .8
          367         Rectangle:
          368             pos: self.pos
          369             size: self.size
          370     Label:
          371         pos_hint: {'x': .2, 'y': .6}
          372         size_hint: .6, .2
          373         text: 'Opening %s' % root.path
          374     FloatLayout:
          375         pos_hint: {'x': .2, 'y': .4}
          376         size_hint: .6, .2
          377         ProgressBar:
          378             id: pb
          379             pos_hint: {'x': 0, 'center_y': .5}
          380             max: root.total
          381             value: root.index
          382         Label:
          383             pos_hint: {'x': 0}
          384             text: '%d / %d' % (root.index, root.total)
          385             size_hint_y: None
          386             height: self.texture_size[1]
          387             y: pb.center_y - self.height - 8
          388             font_size: '13sp'
          389             color: (.8, .8, .8, .8)
          390 
          391     AnchorLayout:
          392         pos_hint: {'x': .2, 'y': .2}
          393         size_hint: .6, .2
          394 
          395         Button:
          396             text: 'Cancel'
          397             size_hint: None, None
          398             size: 150, 44
          399             on_release: root.cancel()
          400 
          401 
          402 
          403 # Switch widget
          404 <Switch>:
          405     active_norm_pos: max(0., min(1., (int(self.active) + self.touch_distance / sp(41))))
          406     canvas:
          407         Color:
          408             rgb: 1, 1, 1
          409         Rectangle:
          410             source: 'atlas://data/images/defaulttheme/switch-background{}'.format('_disabled' if self.disabled else '')
          411             size: sp(83), sp(32)
          412             pos: int(self.center_x - sp(41)), int(self.center_y - sp(16))
          413         Rectangle:
          414             source: 'atlas://data/images/defaulttheme/switch-button{}'.format('_disabled' if self.disabled else '')
          415             size: sp(43), sp(32)
          416             pos: int(self.center_x - sp(41) + self.active_norm_pos * sp(41)), int(self.center_y - sp(16))
          417 
          418 
          419 # ModalView widget
          420 <ModalView>:
          421     canvas:
          422         Color:
          423             rgba: root.background_color[:3] + [root.background_color[-1] * self._anim_alpha]
          424         Rectangle:
          425             size: self._window.size if self._window else (0, 0)
          426 
          427         Color:
          428             rgb: 1, 1, 1
          429         BorderImage:
          430             source: root.background
          431             border: root.border
          432             pos: self.pos
          433             size: self.size
          434 
          435 
          436 # Popup widget
          437 <Popup>:
          438     _container: container
          439     background_color: (0, 0, 0, 0.7)
          440     GridLayout:
          441         padding: '12dp'
          442         cols: 1
          443         size_hint: None, None
          444         pos: root.pos
          445         size: root.size
          446 
          447         Label:
          448             text: root.title
          449             color: root.title_color
          450             size_hint_y: None
          451             height: self.texture_size[1] + dp(16)
          452             text_size: self.width - dp(16), None
          453             font_size: root.title_size
          454             font_name: root.title_font
          455             halign: root.title_align
          456 
          457         Widget:
          458             size_hint_y: None
          459             height: dp(4)
          460             canvas:
          461                 Color:
          462                     rgba: root.separator_color
          463                 Rectangle:
          464                     pos: self.x, self.y + root.separator_height / 2.
          465                     size: self.width, root.separator_height
          466 
          467         BoxLayout:
          468             id: container
          469 
          470 # =============================================================================
          471 # Spinner widget
          472 # =============================================================================
          473 
          474 <SpinnerOption>:
          475     size_hint_y: None
          476     height: '48dp'
          477 
          478 <Spinner>:
          479     background_normal: 'atlas://data/images/defaulttheme/spinner'
          480     background_disabled_normal: 'atlas://data/images/defaulttheme/spinner_disabled'
          481     background_down: 'atlas://data/images/defaulttheme/spinner_pressed'
          482 
          483 # =============================================================================
          484 # ActionBar widget
          485 # =============================================================================
          486 
          487 <ActionBar>:
          488     height: '48dp'
          489     size_hint_y: None
          490     spacing: '4dp'
          491     canvas:
          492         Color:
          493             rgba: self.background_color
          494         BorderImage:
          495             border: root.border
          496             pos: self.pos
          497             size: self.size
          498             source: self.background_image
          499 
          500 <ActionView>:
          501     orientation: 'horizontal'
          502     canvas:
          503         Color:
          504             rgba: self.background_color
          505         BorderImage:
          506             pos: self.pos
          507             size: self.size
          508             source: self.background_image
          509 
          510 <ActionSeparator>:
          511     size_hint_x: None
          512     minimum_width: '2sp'
          513     width: self.minimum_width
          514     canvas:
          515         Rectangle:
          516             pos: self.x, self.y + sp(4)
          517             size: self.width, self.height - sp(8)
          518             source: self.background_image
          519 
          520 <ActionButton,ActionToggleButton>:
          521     background_normal: 'atlas://data/images/defaulttheme/' + ('action_bar' if self.inside_group else 'action_item')
          522     background_down: 'atlas://data/images/defaulttheme/action_item_down'
          523     size_hint_x: None if not root.inside_group else 1
          524     width: [dp(48) if (root.icon and not root.inside_group) else max(dp(48), (self.texture_size[0] + dp(32))), self.size_hint_x][0]
          525     color: self.color[:3] + [0 if (root.icon and not root.inside_group) else 1]
          526 
          527     Image:
          528         allow_stretch: True
          529         opacity: 1 if (root.icon and not root.inside_group) else 0
          530         source: root.icon
          531         mipmap: root.mipmap
          532         pos: root.x + dp(4), root.y + dp(4)
          533         size: root.width - dp(8), root.height - sp(8)
          534 
          535 <ActionLabel>:
          536     size_hint_x: None if not root.inside_group else 1
          537     width: self.texture_size[0] + dp(32)
          538 
          539 <ActionGroup>:
          540     size_hint_x: None
          541     width: self.texture_size[0] + dp(32)
          542 
          543 <ActionCheck>:
          544     background_normal: 'atlas://data/images/defaulttheme/action_bar' if self.inside_group else 'atlas://data/images/defaulttheme/action_item'
          545 
          546 <ActionPreviousImage@Image>:
          547     temp_width: 0
          548     temp_height: 0
          549 
          550 <ActionPreviousButton@Button>:
          551     background_normal: 'atlas://data/images/defaulttheme/action_item'
          552     background_down: 'atlas://data/images/defaulttheme/action_item_down'
          553 
          554 <ActionPrevious>:
          555     size_hint_x: 1
          556     minimum_width: layout.minimum_width + min(sp(100), title.width)
          557     important: True
          558     GridLayout:
          559         id: layout
          560         rows: 1
          561         pos: root.pos
          562         size_hint_x: None
          563         width: self.minimum_width
          564         ActionPreviousButton:
          565             on_press: root.dispatch('on_press')
          566             on_release: root.dispatch('on_release')
          567             size_hint_x: None
          568             width: prevlayout.width
          569             GridLayout:
          570                 id: prevlayout
          571                 rows: 1
          572                 width: self.minimum_width
          573                 height: self.parent.height
          574                 pos: self.parent.pos
          575                 ActionPreviousImage:
          576                     id: prev_icon_image
          577                     source: root.previous_image
          578                     opacity: 1 if root.with_previous else 0
          579                     allow_stretch: True
          580                     size_hint_x: None
          581                     temp_width: root.previous_image_width or dp(prev_icon_image.texture_size[0])
          582                     temp_height: root.previous_image_height or dp(prev_icon_image.texture_size[1])
          583                     width:
          584                         (self.temp_width if self.temp_height <= self.height else \
          585                         self.temp_width * (self.height / self.temp_height)) \
          586                         if self.texture else dp(8)
          587                     mipmap: root.mipmap
          588                 ActionPreviousImage:
          589                     id: app_icon_image
          590                     source: root.app_icon
          591                     allow_stretch: True
          592                     size_hint_x: None
          593                     temp_width: root.app_icon_width or dp(app_icon_image.texture_size[0])
          594                     temp_height: root.app_icon_height or dp(app_icon_image.texture_size[1])
          595                     width:
          596                         (self.temp_width if self.temp_height <= self.height else \
          597                         self.temp_width * (self.height / self.temp_height)) \
          598                         if self.texture else dp(8)
          599                     mipmap: root.mipmap
          600                 Widget:
          601                     size_hint_x: None
          602                     width: '5sp'
          603     Label:
          604         id: title
          605         text: root.title
          606         text_size: self.size
          607         color: root.color
          608         shorten: True
          609         shorten_from: 'right'
          610         halign: 'left'
          611         valign: 'middle'
          612 
          613 <ActionGroup>:
          614     background_normal: 'atlas://data/images/defaulttheme/action_group'
          615     background_down: 'atlas://data/images/defaulttheme/action_group_down'
          616     background_disabled_normal: 'atlas://data/images/defaulttheme/action_group_disabled'
          617     border: 30, 30, 3, 3
          618     ActionSeparator:
          619         pos: root.pos
          620         size: root.separator_width, root.height
          621         opacity: 1 if root.use_separator else 0
          622         background_image: root.separator_image if root.use_separator else 'action_view'
          623 
          624 <ActionOverflow>:
          625     border: 3, 3, 3, 3
          626     background_normal: 'atlas://data/images/defaulttheme/action_item'
          627     background_down: 'atlas://data/images/defaulttheme/action_item_down'
          628     background_disabled_normal: 'atlas://data/images/defaulttheme/button_disabled'
          629     size_hint_x: None
          630     minimum_width: '48sp'
          631     width: self.texture_size[0] if self.texture else self.minimum_width
          632     canvas.after:
          633         Color:
          634             rgb: 1, 1, 1
          635         Rectangle:
          636             pos: root.center_x - sp(16), root.center_y - sp(16)
          637             size: sp(32), sp(32)
          638             source: root.overflow_image
          639 
          640 <ActionDropDown>:
          641     auto_width: False
          642 
          643 
          644 # =============================================================================
          645 # Accordion widget
          646 # =============================================================================
          647 
          648 [AccordionItemTitle@Label]:
          649     text: ctx.title
          650     normal_background: ctx.item.background_normal if ctx.item.collapse else ctx.item.background_selected
          651     disabled_background: ctx.item.background_disabled_normal if ctx.item.collapse else ctx.item.background_disabled_selected
          652     canvas.before:
          653         Color:
          654             rgba: self.disabled_color if self.disabled else self.color
          655         BorderImage:
          656             source: self.disabled_background if self.disabled else self.normal_background
          657             pos: self.pos
          658             size: self.size
          659         PushMatrix
          660         Translate:
          661             xy: self.center_x, self.center_y
          662         Rotate:
          663             angle: 90 if ctx.item.orientation == 'horizontal' else 0
          664             axis: 0, 0, 1
          665         Translate:
          666             xy: -self.center_x, -self.center_y
          667     canvas.after:
          668         PopMatrix
          669 
          670 
          671 <AccordionItem>:
          672     container: container
          673     container_title: container_title
          674 
          675     BoxLayout:
          676         orientation: root.orientation
          677         pos: root.pos
          678         BoxLayout:
          679             size_hint_x: None if root.orientation == 'horizontal' else 1
          680             size_hint_y: None if root.orientation == 'vertical' else 1
          681             width: root.min_space if root.orientation == 'horizontal' else 100
          682             height: root.min_space if root.orientation == 'vertical' else 100
          683             id: container_title
          684 
          685         StencilView:
          686             id: sv
          687 
          688             BoxLayout:
          689                 id: container
          690                 pos: sv.pos
          691                 size: root.content_size
          692 
          693 
          694 <ScrollView>:
          695     _handle_y_pos: (self.right - self.bar_width - self.bar_margin) if self.bar_pos_y == 'right' else (self.x + self.bar_margin), self.y + self.height * self.vbar[0]
          696     _handle_y_size: min(self.bar_width, self.width), self.height * self.vbar[1]
          697     _handle_x_pos: self.x + self.width * self.hbar[0], (self.y + self.bar_margin) if self.bar_pos_x == 'bottom' else (self.top - self.bar_margin - self.bar_width)
          698     _handle_x_size: self.width * self.hbar[1], min(self.bar_width, self.height)
          699     canvas.after:
          700         Color:
          701             rgba: self._bar_color if (self.do_scroll_y and self.viewport_size[1] > self.height) else [0, 0, 0, 0]
          702         Rectangle:
          703             pos: root._handle_y_pos or (0, 0)
          704             size: root._handle_y_size or (0, 0)
          705         Color:
          706             rgba: self._bar_color if (self.do_scroll_x and self.viewport_size[0] > self.width) else [0, 0, 0, 0]
          707         Rectangle:
          708             pos: root._handle_x_pos or (0, 0)
          709             size: root._handle_x_size or (0, 0)
          710 
          711 
          712 <CheckBox>:
          713     _checkbox_state_image:
          714         self.background_checkbox_down \
          715         if self.active else self.background_checkbox_normal
          716     _checkbox_disabled_image:
          717         self.background_checkbox_disabled_down \
          718         if self.active else self.background_checkbox_disabled_normal
          719     _radio_state_image:
          720         self.background_radio_down \
          721         if self.active else self.background_radio_normal
          722     _radio_disabled_image:
          723         self.background_radio_disabled_down \
          724         if self.active else self.background_radio_disabled_normal
          725     _checkbox_image:
          726         self._checkbox_disabled_image \
          727         if self.disabled else self._checkbox_state_image
          728     _radio_image:
          729         self._radio_disabled_image \
          730         if self.disabled else self._radio_state_image
          731     canvas:
          732         Color:
          733             rgb: 1, 1, 1
          734         Rectangle:
          735             source: self._radio_image if self.group else self._checkbox_image
          736             size: sp(32), sp(32)
          737             pos: int(self.center_x - sp(16)), int(self.center_y - sp(16))
          738 
          739 # =============================================================================
          740 # Screen Manager
          741 # =============================================================================
          742 
          743 <ScreenManager>:
          744     canvas.before:
          745         StencilPush
          746         Rectangle:
          747             pos: self.pos
          748             size: self.size
          749         StencilUse
          750     canvas.after:
          751         StencilUnUse
          752         Rectangle:
          753             pos: self.pos
          754             size: self.size
          755         StencilPop