Kivy-examples 2.3.1.dev0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/3Drendering/main.py +77 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/3Drendering/monkey.obj +7966 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/3Drendering/objloader.py +147 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/3Drendering/simple.glsl +47 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/RST_Editor/editor.kv +72 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/RST_Editor/main.py +64 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/compass/android.txt +3 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/compass/compass.kv +25 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/compass/main.py +77 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/compass/needle.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/compass/rose.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/takepicture/android.txt +3 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/takepicture/main.py +80 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/takepicture/shadow32.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/android/takepicture/takepicture.kv +40 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/animation/animate.py +42 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/app_suite.py +152 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/app_suite_data/testkvdir.kv +4 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/app_with_build.py +24 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/app_with_config.py +49 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/app_with_kv.py +25 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/app_with_kv_in_template1.py +27 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/template1/test.kv +4 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/test.kv +4 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/application/testkvfile.kv +4 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/async/asyncio_advanced.py +90 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/async/asyncio_basic.py +59 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/async/trio_advanced.py +93 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/async/trio_basic.py +58 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12908_sweet_trip_mm_clap_hi.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12909_sweet_trip_mm_clap_lo.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12910_sweet_trip_mm_clap_mid.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12911_sweet_trip_mm_hat_cl.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12913_sweet_trip_mm_kick_hi.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12914_sweet_trip_mm_kick_lo.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12915_sweet_trip_mm_kick_mid.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12916_sweet_trip_mm_kwik_mod_01.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12917_sweet_trip_mm_kwik_mod_02.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12918_sweet_trip_mm_kwik_mod_03.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12919_sweet_trip_mm_kwik_mod_04.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12920_sweet_trip_mm_kwik_mod_05.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12921_sweet_trip_mm_kwik_mod_06.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12922_sweet_trip_mm_kwik_mod_07.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12923_sweet_trip_mm_metal_clave.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12925_sweet_trip_mm_sweep_x.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12926_sweet_trip_mm_sweep_y.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/12927_sweet_trip_mm_sweep_z.wav +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/audio.kv +59 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/main.py +81 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/audio/pitch.py +42 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/camera/main.py +59 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/bezier.py +105 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/canvas_stress.py +72 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/circle.py +84 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/fbo_canvas.py +91 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/kiwi.jpg +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/lines.py +296 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/lines_extended.py +183 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/mesh.py +57 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/mesh_manipulation.py +101 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/mtexture1.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/mtexture2.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/multitexture.py +110 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/repeat_texture.py +65 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/rotation.py +35 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/rounded_rectangle.py +153 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/scale.py +37 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/stencil_canvas.py +85 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/tesselate.py +146 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/texture.py +143 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/canvas/texture_example_image.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/container/kv/1.kv +28 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/container/kv/2.kv +28 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/container/kv/3.kv +28 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/container/kv/root.kv +32 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/container/main.py +63 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/cover/cover_image.py +25 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/cover/cover_video.py +31 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/camera_puzzle.py +98 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/AnchorLayoutContainer.kv +15 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/BoxLayoutContainer.kv +14 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/ButtonContainer.kv +27 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/CheckBoxContainer.kv +28 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/FileChooserContainer.kv +19 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/FloatLayoutContainer.kv +16 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/GridLayoutContainer.kv +20 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/LabelContainer.kv +62 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/MediaContainer.kv +9 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/PlaygroundContainer.kv +4 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/PopupContainer.kv +39 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/ProgressBarContainer.kv +17 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/RestContainer.kv +5 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/ScatterContainer.kv +16 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/SelectorsContainer.kv +10 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/StackLayoutContainer.kv +25 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/container_kvs/TextContainer.kv +20 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/kivycatalog.kv +144 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/kivycatalog/main.py +192 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/gesturedatabase.kv +117 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/gesturedatabase.py +180 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/helpers.py +30 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/historymanager.kv +164 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/historymanager.py +276 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/main.py +144 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/multistroke.kv +101 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/settings.kv +110 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/multistroke/settings.py +97 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/pictures/android.txt +3 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/pictures/images/Bubbles.jpg +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/pictures/images/Ill1.jpg +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/pictures/images/Wall.jpg +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/pictures/images/faust_github.jpg +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/pictures/main.py +73 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/pictures/pictures.kv +57 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/pictures/shadow32.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/shadereditor/main.py +147 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/shadereditor/shadereditor.kv +39 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/README.txt +11 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/android.txt +3 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/background.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/faust_github.jpg +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/icons/README +4 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/icons/bug.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/icons/chevron-left.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/icons/chevron-right.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/accordions.kv +39 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/bubbles.kv +33 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/buttons.kv +26 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/carousel.kv +51 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/checkboxes.kv +33 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/codeinput.kv +9 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/dropdown.kv +40 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/filechoosers.kv +24 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/popups.kv +17 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/progressbar.kv +15 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/rstdocument.kv +24 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/scatter.kv +14 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/screenmanager.kv +46 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/sliders.kv +55 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/spinner.kv +11 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/splitter.kv +13 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/switches.kv +39 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/tabbedpanel + layouts.kv +69 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/textinputs.kv +48 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/data/screens/togglebutton.kv +39 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/main.py +243 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/showcase/showcase.kv +100 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/touchtracer/README.txt +12 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/touchtracer/android.txt +3 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/touchtracer/icon.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/touchtracer/main.py +170 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/touchtracer/particle.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/demo/touchtracer/touchtracer.kv +29 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/frameworks/twisted/echo_client_app.py +82 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/frameworks/twisted/echo_server_app.py +49 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/frameworks/twisted/twistd_app.py +66 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/gestures/gesture_board.py +95 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/gestures/my_gestures.py +90 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/designwithkv/controller.kv +16 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/designwithkv/main.py +29 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/firstwidget/1_skeleton.py +15 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/firstwidget/2_print_touch.py +16 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/firstwidget/3_draw_ellipse.py +22 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/firstwidget/4_draw_line.py +26 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/firstwidget/5_random_colors.py +28 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/firstwidget/6_button.py +38 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/guide/quickstart/main.py +15 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/includes/button.kv +9 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/includes/layout.kv +6 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/includes/main.py +19 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/includes/test.kv +5 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/keyboard/android.txt +3 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/keyboard/main.py +226 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/keyboard/numeric.json +38 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kinect/README.txt +13 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kinect/kinectviewer.py +283 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/app_button.kv +9 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/app_camera.kv +25 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/app_fbo.kv +11 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/app_layout.kv +23 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/app_logo.kv +36 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/app_scatter.kv +6 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/app_stencil.kv +27 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/app_video.kv +42 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/builder_template.py +28 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/ids/id_in_kv/id_in_kv.py +20 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/ids/id_in_kv/test.kv +11 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/ids/kv_and_py/kv_and_py.py +34 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/ids/kv_and_py/test.kv +11 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/kivy.jpg +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/kv/kvrun.py +38 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/clipboard.py +63 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/custom_titlebar.py +56 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/imagesave.py +14 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/joystick.py +83 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/multiple_dropfile.py +51 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/on_textedit_event.py +104 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/opacitywindow.py +28 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/shapecollisions.py +397 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/shapedwindow.py +98 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/two_panes.py +47 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/miscellaneous/urlrequest.py +128 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/settings/android.txt +3 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/settings/main.py +122 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/shader/plasma.kv +9 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/shader/plasma.py +86 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/shader/rotated.kv +91 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/shader/rotated.py +102 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/shader/shadertree.kv +29 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/shader/shadertree.py +193 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/shader/tex3.jpg +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/benchmark.py +19 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/cloud.svg +25 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/main-smaa.py +155 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/main.py +50 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/music.svg +68 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/rotated.svg +23 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/ship.svg +181 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/sun.svg +35 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/svg/tiger.svg +813 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/text/pango_demo.py +296 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/notes/final/data/icon.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/notes/final/main.py +163 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/notes/final/note.kv +154 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/main.py +82 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/pong.kv +53 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step1/main.py +15 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step1/pong.kv +2 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step2/main.py +15 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step2/pong.kv +21 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step3/main.py +26 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step3/pong.kv +31 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step4/main.py +48 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step4/pong.kv +34 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step5/main.py +75 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/tutorials/pong/steps/step5/pong.kv +53 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/accordion_1.py +17 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/actionbar.py +32 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/asyncimage.py +35 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/boxlayout_poshint.py +54 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/bubble_test.py +63 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/camera.py +33 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/carousel_buttons.py +50 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/cityCC0.mpg +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/cityCC0.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/codeinput.py +225 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/codeinputtest.kv +53 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/colorpicker.py +234 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/colorusage.py +62 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/compound_selection.py +83 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/customcollide.py +82 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/effectwidget.py +193 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/effectwidget2.py +47 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/effectwidget3_advanced.py +62 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/fbowidget.py +111 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/focus_behavior.py +98 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/image_mipmap.py +31 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/keyboardlistener.py +42 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/label_mipmap.py +28 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/label_sizing.py +193 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/label_text_size.py +49 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/label_with_markup.py +21 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/lang_dynamic_classes.py +18 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/pagelayout.py +64 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/popup_with_kv.py +35 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/recycleview/basic_data.py +124 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/recycleview/infinite_scrolling.py +143 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/recycleview/key_viewclass.py +149 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/recycleview/messenger.py +196 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/recycleview/pull_to_refresh.py +95 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/recycleview/rv_animate_items.py +109 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/rstexample.py +128 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/scatter.kv +53 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/scatter.py +16 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/screenmanager.py +106 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/scrollview.kv +16 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/scrollview.py +40 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/android.txt +3 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/data/images/bird.zip +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/data/images/button_white.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/data/images/button_white_animated.zip +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/data/images/cube.zip +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/data/images/info.png +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/data/images/info.zip +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/data/images/simple_cv_joint_animated.gif +0 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/main.kv +63 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/main.py +150 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/uix/__init__.py +7 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/sequenced_images/uix/custom_button.py +98 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/settings.py +93 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/shorten_text.py +80 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/spinner.py +17 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/splitter.py +74 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/tabbed_panel_showcase.py +316 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/tabbedpanel.py +50 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/textalign.kv +49 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/textalign.py +48 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/textinput.py +59 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/unicode_textinput.py +244 -0
- Kivy_examples-2.3.1.dev0.data/data/share/kivy-examples/widgets/videoplayer.py +26 -0
- Kivy_examples-2.3.1.dev0.dist-info/AUTHORS +66 -0
- Kivy_examples-2.3.1.dev0.dist-info/LICENSE +21 -0
- Kivy_examples-2.3.1.dev0.dist-info/METADATA +382 -0
- Kivy_examples-2.3.1.dev0.dist-info/RECORD +624 -0
- Kivy_examples-2.3.1.dev0.dist-info/WHEEL +5 -0
- Kivy_examples-2.3.1.dev0.dist-info/dependency_links.txt +1 -0
- Kivy_examples-2.3.1.dev0.dist-info/top_level.txt +1 -0
- kivy/__init__.py +519 -0
- kivy/_version.py +18 -0
- kivy/animation.py +831 -0
- kivy/app.py +1213 -0
- kivy/atlas.py +456 -0
- kivy/base.py +617 -0
- kivy/cache.py +262 -0
- kivy/clock.py +1172 -0
- kivy/compat.py +82 -0
- kivy/config.py +1004 -0
- kivy/context.py +102 -0
- kivy/core/__init__.py +247 -0
- kivy/core/audio/__init__.py +223 -0
- kivy/core/audio/audio_android.py +104 -0
- kivy/core/audio/audio_avplayer.py +82 -0
- kivy/core/audio/audio_ffpyplayer.py +185 -0
- kivy/core/audio/audio_gstplayer.py +101 -0
- kivy/core/audio/audio_pygame.py +127 -0
- kivy/core/camera/__init__.py +151 -0
- kivy/core/camera/camera_android.py +206 -0
- kivy/core/camera/camera_gi.py +170 -0
- kivy/core/camera/camera_opencv.py +163 -0
- kivy/core/camera/camera_picamera.py +96 -0
- kivy/core/clipboard/__init__.py +157 -0
- kivy/core/clipboard/_clipboard_ext.py +36 -0
- kivy/core/clipboard/clipboard_android.py +91 -0
- kivy/core/clipboard/clipboard_dbusklipper.py +41 -0
- kivy/core/clipboard/clipboard_dummy.py +26 -0
- kivy/core/clipboard/clipboard_gtk3.py +47 -0
- kivy/core/clipboard/clipboard_nspaste.py +44 -0
- kivy/core/clipboard/clipboard_pygame.py +67 -0
- kivy/core/clipboard/clipboard_sdl2.py +36 -0
- kivy/core/clipboard/clipboard_winctypes.py +107 -0
- kivy/core/clipboard/clipboard_xclip.py +29 -0
- kivy/core/clipboard/clipboard_xsel.py +26 -0
- kivy/core/gl/__init__.py +90 -0
- kivy/core/image/__init__.py +996 -0
- kivy/core/image/img_dds.py +40 -0
- kivy/core/image/img_ffpyplayer.py +87 -0
- kivy/core/image/img_pil.py +123 -0
- kivy/core/image/img_pygame.py +119 -0
- kivy/core/image/img_sdl2.py +66 -0
- kivy/core/image/img_tex.py +58 -0
- kivy/core/spelling/__init__.py +135 -0
- kivy/core/spelling/spelling_enchant.py +50 -0
- kivy/core/spelling/spelling_osxappkit.py +64 -0
- kivy/core/text/__init__.py +1090 -0
- kivy/core/text/markup.py +893 -0
- kivy/core/text/text_pango.py +145 -0
- kivy/core/text/text_pil.py +84 -0
- kivy/core/text/text_pygame.py +117 -0
- kivy/core/text/text_sdl2.py +50 -0
- kivy/core/video/__init__.py +219 -0
- kivy/core/video/video_ffmpeg.py +106 -0
- kivy/core/video/video_ffpyplayer.py +449 -0
- kivy/core/video/video_gstplayer.py +140 -0
- kivy/core/video/video_null.py +12 -0
- kivy/core/window/__init__.py +2515 -0
- kivy/core/window/window_egl_rpi.py +86 -0
- kivy/core/window/window_pygame.py +441 -0
- kivy/core/window/window_sdl2.py +999 -0
- kivy/deps/__init__.py +6 -0
- kivy/effects/__init__.py +23 -0
- kivy/effects/dampedscroll.py +114 -0
- kivy/effects/kinetic.py +193 -0
- kivy/effects/opacityscroll.py +27 -0
- kivy/effects/scroll.py +126 -0
- kivy/event.py +12 -0
- kivy/eventmanager/__init__.py +185 -0
- kivy/extras/__init__.py +0 -0
- kivy/extras/highlight.py +52 -0
- kivy/factory.py +190 -0
- kivy/factory_registers.py +201 -0
- kivy/garden/__init__.py +186 -0
- kivy/geometry.py +121 -0
- kivy/gesture.py +424 -0
- kivy/graphics/__init__.py +126 -0
- kivy/graphics/cgl_backend/__init__.py +0 -0
- kivy/input/__init__.py +39 -0
- kivy/input/factory.py +35 -0
- kivy/input/motionevent.py +587 -0
- kivy/input/postproc/__init__.py +27 -0
- kivy/input/postproc/calibration.py +200 -0
- kivy/input/postproc/dejitter.py +74 -0
- kivy/input/postproc/doubletap.py +101 -0
- kivy/input/postproc/ignorelist.py +47 -0
- kivy/input/postproc/retaintouch.py +93 -0
- kivy/input/postproc/tripletap.py +106 -0
- kivy/input/provider.py +40 -0
- kivy/input/providers/__init__.py +68 -0
- kivy/input/providers/androidjoystick.py +117 -0
- kivy/input/providers/hidinput.py +778 -0
- kivy/input/providers/leapfinger.py +113 -0
- kivy/input/providers/linuxwacom.py +396 -0
- kivy/input/providers/mactouch.py +220 -0
- kivy/input/providers/mouse.py +424 -0
- kivy/input/providers/mtdev.py +380 -0
- kivy/input/providers/probesysfs.py +254 -0
- kivy/input/providers/tuio.py +326 -0
- kivy/input/providers/wm_common.py +162 -0
- kivy/input/providers/wm_pen.py +121 -0
- kivy/input/providers/wm_touch.py +157 -0
- kivy/input/recorder.py +335 -0
- kivy/input/shape.py +27 -0
- kivy/interactive.py +335 -0
- kivy/lang/__init__.py +883 -0
- kivy/lang/builder.py +1004 -0
- kivy/lang/parser.py +822 -0
- kivy/lib/__init__.py +21 -0
- kivy/lib/ddsfile.py +419 -0
- kivy/lib/gstplayer/__init__.py +27 -0
- kivy/lib/mtdev.py +254 -0
- kivy/lib/vidcore_lite/__init__.py +0 -0
- kivy/loader.py +579 -0
- kivy/logger.py +646 -0
- kivy/metrics.py +421 -0
- kivy/modules/__init__.py +300 -0
- kivy/modules/_webdebugger.py +200 -0
- kivy/modules/console.py +1059 -0
- kivy/modules/cursor.py +75 -0
- kivy/modules/inspector.py +755 -0
- kivy/modules/joycursor.py +299 -0
- kivy/modules/keybinding.py +64 -0
- kivy/modules/monitor.py +90 -0
- kivy/modules/recorder.py +94 -0
- kivy/modules/screen.py +183 -0
- kivy/modules/showborder.py +33 -0
- kivy/modules/touchring.py +97 -0
- kivy/modules/webdebugger.py +30 -0
- kivy/multistroke.py +1477 -0
- kivy/network/__init__.py +7 -0
- kivy/network/urlrequest.py +794 -0
- kivy/parser.py +154 -0
- kivy/resources.py +102 -0
- kivy/storage/__init__.py +405 -0
- kivy/storage/dictstore.py +98 -0
- kivy/storage/jsonstore.py +92 -0
- kivy/storage/redisstore.py +103 -0
- kivy/support.py +267 -0
- kivy/tests/__init__.py +11 -0
- kivy/tests/async_common.py +568 -0
- kivy/tests/common.py +524 -0
- kivy/tests/conftest.py +33 -0
- kivy/tests/fixtures.py +169 -0
- kivy/tests/perf_test_textinput.py +195 -0
- kivy/tests/pyinstaller/simple_widget/main.py +12 -0
- kivy/tests/pyinstaller/simple_widget/project/__init__.py +0 -0
- kivy/tests/pyinstaller/simple_widget/project/widget.py +12 -0
- kivy/tests/pyinstaller/test_pyinstaller.py +115 -0
- kivy/tests/pyinstaller/video_widget/main.py +6 -0
- kivy/tests/pyinstaller/video_widget/project/__init__.py +38 -0
- kivy/tests/test_animations.py +415 -0
- kivy/tests/test_app.py +216 -0
- kivy/tests/test_audio.py +69 -0
- kivy/tests/test_benchmark.py +292 -0
- kivy/tests/test_clipboard.py +48 -0
- kivy/tests/test_clock.py +292 -0
- kivy/tests/test_compat.py +6 -0
- kivy/tests/test_config.py +35 -0
- kivy/tests/test_coverage.py +83 -0
- kivy/tests/test_doc_gallery.py +38 -0
- kivy/tests/test_environ_cli.py +50 -0
- kivy/tests/test_fbo_py2py3.py +74 -0
- kivy/tests/test_filechooser.py +11 -0
- kivy/tests/test_filechooser_unicode.py +82 -0
- kivy/tests/test_fonts.py +42 -0
- kivy/tests/test_garden.py +23 -0
- kivy/tests/test_graphics.py +1149 -0
- kivy/tests/test_graphics_svg.py +84 -0
- kivy/tests/test_image.py +74 -0
- kivy/tests/test_imageloader.py +485 -0
- kivy/tests/test_invalid_lang.py +42 -0
- kivy/tests/test_issues/test_6315.py +55 -0
- kivy/tests/test_issues/test_issue_1084.py +47 -0
- kivy/tests/test_issues/test_issue_1091.py +19 -0
- kivy/tests/test_issues/test_issue_599.py +21 -0
- kivy/tests/test_issues/test_issue_609.py +19 -0
- kivy/tests/test_issues/test_issue_6909.py +28 -0
- kivy/tests/test_issues/test_issue_883.py +12 -0
- kivy/tests/test_kivy_init.py +30 -0
- kivy/tests/test_knspace.py +247 -0
- kivy/tests/test_lang.py +431 -0
- kivy/tests/test_lang_complex.py +87 -0
- kivy/tests/test_lang_pre_process_and_post_process.py +394 -0
- kivy/tests/test_logger.py +516 -0
- kivy/tests/test_metrics.py +30 -0
- kivy/tests/test_module_inspector.py +382 -0
- kivy/tests/test_motion_event.py +44 -0
- kivy/tests/test_mouse_hover_event.py +249 -0
- kivy/tests/test_mouse_multitouchsim.py +554 -0
- kivy/tests/test_multistroke.py +389 -0
- kivy/tests/test_properties.py +1332 -0
- kivy/tests/test_resources.py +79 -0
- kivy/tests/test_rst_replace.py +63 -0
- kivy/tests/test_screen.py +38 -0
- kivy/tests/test_storage.py +135 -0
- kivy/tests/test_uix_actionbar.py +363 -0
- kivy/tests/test_uix_anchorlayout.py +79 -0
- kivy/tests/test_uix_asyncimage.py +133 -0
- kivy/tests/test_uix_boxlayout.py +94 -0
- kivy/tests/test_uix_bubble.py +425 -0
- kivy/tests/test_uix_carousel.py +93 -0
- kivy/tests/test_uix_colorpicker.py +77 -0
- kivy/tests/test_uix_dropdown.py +91 -0
- kivy/tests/test_uix_gridlayout.py +244 -0
- kivy/tests/test_uix_layout.py +16 -0
- kivy/tests/test_uix_modal.py +101 -0
- kivy/tests/test_uix_recyclegridlayout.py +383 -0
- kivy/tests/test_uix_relativelayout.py +30 -0
- kivy/tests/test_uix_scrollview.py +358 -0
- kivy/tests/test_uix_settings.py +33 -0
- kivy/tests/test_uix_slider.py +156 -0
- kivy/tests/test_uix_stacklayout.py +120 -0
- kivy/tests/test_uix_textinput.py +577 -0
- kivy/tests/test_uix_translate_coordinates.py +72 -0
- kivy/tests/test_uix_videoplayer.py +112 -0
- kivy/tests/test_uix_widget.py +137 -0
- kivy/tests/test_urlrequest/test_urlrequest_requests.py +378 -0
- kivy/tests/test_urlrequest/test_urlrequest_urllib.py +155 -0
- kivy/tests/test_utils.py +237 -0
- kivy/tests/test_vector.py +256 -0
- kivy/tests/test_video.py +25 -0
- kivy/tests/test_weakmethod.py +44 -0
- kivy/tests/test_widget.py +127 -0
- kivy/tests/test_widget_walk.py +70 -0
- kivy/tests/test_window_base.py +60 -0
- kivy/tests/test_window_info.py +29 -0
- kivy/tests/visual_test_label.py +291 -0
- kivy/tools/__init__.py +44 -0
- kivy/tools/benchmark.py +286 -0
- kivy/tools/changelog_parser.py +120 -0
- kivy/tools/coverage.py +135 -0
- kivy/tools/gallery.py +323 -0
- kivy/tools/generate-icons.py +117 -0
- kivy/tools/gles_compat/subset_gles.py +125 -0
- kivy/tools/highlight/__init__.py +9 -0
- kivy/tools/kviewer.py +80 -0
- kivy/tools/packaging/__init__.py +12 -0
- kivy/tools/packaging/cython_cfg.py +82 -0
- kivy/tools/packaging/factory.py +105 -0
- kivy/tools/packaging/pyinstaller_hooks/__init__.py +381 -0
- kivy/tools/packaging/pyinstaller_hooks/__main__.py +29 -0
- kivy/tools/packaging/pyinstaller_hooks/hook-kivy.py +9 -0
- kivy/tools/packaging/pyinstaller_hooks/pyi_rth_kivy.py +17 -0
- kivy/tools/pep8checker/pep8.py +2316 -0
- kivy/tools/pep8checker/pep8kivy.py +109 -0
- kivy/tools/report.py +223 -0
- kivy/tools/stub-gl-debug.py +201 -0
- kivy/tools/texturecompress.py +233 -0
- kivy/uix/__init__.py +56 -0
- kivy/uix/accordion.py +484 -0
- kivy/uix/actionbar.py +934 -0
- kivy/uix/anchorlayout.py +122 -0
- kivy/uix/behaviors/__init__.py +95 -0
- kivy/uix/behaviors/button.py +212 -0
- kivy/uix/behaviors/codenavigation.py +167 -0
- kivy/uix/behaviors/compoundselection.py +688 -0
- kivy/uix/behaviors/cover.py +160 -0
- kivy/uix/behaviors/drag.py +234 -0
- kivy/uix/behaviors/emacs.py +140 -0
- kivy/uix/behaviors/focus.py +595 -0
- kivy/uix/behaviors/knspace.py +590 -0
- kivy/uix/behaviors/togglebutton.py +156 -0
- kivy/uix/behaviors/touchripple.py +318 -0
- kivy/uix/boxlayout.py +331 -0
- kivy/uix/bubble.py +576 -0
- kivy/uix/button.py +137 -0
- kivy/uix/camera.py +118 -0
- kivy/uix/carousel.py +695 -0
- kivy/uix/checkbox.py +197 -0
- kivy/uix/codeinput.py +238 -0
- kivy/uix/colorpicker.py +486 -0
- kivy/uix/dropdown.py +391 -0
- kivy/uix/effectwidget.py +772 -0
- kivy/uix/filechooser.py +1134 -0
- kivy/uix/floatlayout.py +148 -0
- kivy/uix/gesturesurface.py +625 -0
- kivy/uix/gridlayout.py +629 -0
- kivy/uix/image.py +528 -0
- kivy/uix/label.py +1200 -0
- kivy/uix/layout.py +322 -0
- kivy/uix/modalview.py +339 -0
- kivy/uix/pagelayout.py +233 -0
- kivy/uix/popup.py +266 -0
- kivy/uix/progressbar.py +95 -0
- kivy/uix/recycleboxlayout.py +183 -0
- kivy/uix/recyclegridlayout.py +255 -0
- kivy/uix/recyclelayout.py +446 -0
- kivy/uix/recycleview/__init__.py +624 -0
- kivy/uix/recycleview/datamodel.py +194 -0
- kivy/uix/recycleview/layout.py +253 -0
- kivy/uix/recycleview/views.py +423 -0
- kivy/uix/relativelayout.py +324 -0
- kivy/uix/rst.py +1492 -0
- kivy/uix/sandbox.py +198 -0
- kivy/uix/scatter.py +645 -0
- kivy/uix/scatterlayout.py +93 -0
- kivy/uix/screenmanager.py +1275 -0
- kivy/uix/scrollview.py +1288 -0
- kivy/uix/settings.py +1343 -0
- kivy/uix/slider.py +421 -0
- kivy/uix/spinner.py +221 -0
- kivy/uix/splitter.py +430 -0
- kivy/uix/stacklayout.py +331 -0
- kivy/uix/stencilview.py +40 -0
- kivy/uix/switch.py +122 -0
- kivy/uix/tabbedpanel.py +880 -0
- kivy/uix/textinput.py +4049 -0
- kivy/uix/togglebutton.py +37 -0
- kivy/uix/treeview.py +665 -0
- kivy/uix/video.py +302 -0
- kivy/uix/videoplayer.py +697 -0
- kivy/uix/vkeyboard.py +879 -0
- kivy/uix/widget.py +1629 -0
- kivy/utils.py +550 -0
- kivy/vector.py +412 -0
- kivy/weakmethod.py +72 -0
|
@@ -0,0 +1,590 @@
|
|
|
1
|
+
'''
|
|
2
|
+
Kivy Namespaces
|
|
3
|
+
===============
|
|
4
|
+
|
|
5
|
+
.. versionadded:: 1.9.1
|
|
6
|
+
|
|
7
|
+
.. warning::
|
|
8
|
+
This code is still experimental, and its API is subject to change in a
|
|
9
|
+
future version.
|
|
10
|
+
|
|
11
|
+
The :class:`KNSpaceBehavior` `mixin <https://en.wikipedia.org/wiki/Mixin>`_
|
|
12
|
+
class provides namespace functionality for Kivy objects. It allows kivy objects
|
|
13
|
+
to be named and then accessed using namespaces.
|
|
14
|
+
|
|
15
|
+
:class:`KNSpace` instances are the namespaces that store the named objects
|
|
16
|
+
in Kivy :class:`~kivy.properties.ObjectProperty` instances.
|
|
17
|
+
In addition, when inheriting from :class:`KNSpaceBehavior`, if the derived
|
|
18
|
+
object is named, the name will automatically be added to the associated
|
|
19
|
+
namespace and will point to a :attr:`~kivy.uix.widget.proxy_ref` of the
|
|
20
|
+
derived object.
|
|
21
|
+
|
|
22
|
+
Basic examples
|
|
23
|
+
--------------
|
|
24
|
+
|
|
25
|
+
By default, there's only a single namespace: the :attr:`knspace` namespace. The
|
|
26
|
+
simplest example is adding a widget to the namespace:
|
|
27
|
+
|
|
28
|
+
.. code-block:: python
|
|
29
|
+
|
|
30
|
+
from kivy.uix.behaviors.knspace import knspace
|
|
31
|
+
widget = Widget()
|
|
32
|
+
knspace.my_widget = widget
|
|
33
|
+
|
|
34
|
+
This adds a kivy :class:`~kivy.properties.ObjectProperty` with `rebind=True`
|
|
35
|
+
and `allownone=True` to the :attr:`knspace` namespace with a property name
|
|
36
|
+
`my_widget`. And the property now also points to this widget.
|
|
37
|
+
|
|
38
|
+
This can be done automatically with:
|
|
39
|
+
|
|
40
|
+
.. code-block:: python
|
|
41
|
+
|
|
42
|
+
class MyWidget(KNSpaceBehavior, Widget):
|
|
43
|
+
pass
|
|
44
|
+
|
|
45
|
+
widget = MyWidget(knsname='my_widget')
|
|
46
|
+
|
|
47
|
+
Or in kv:
|
|
48
|
+
|
|
49
|
+
.. code-block:: kv
|
|
50
|
+
|
|
51
|
+
<MyWidget@KNSpaceBehavior+Widget>
|
|
52
|
+
|
|
53
|
+
MyWidget:
|
|
54
|
+
knsname: 'my_widget'
|
|
55
|
+
|
|
56
|
+
Now, `knspace.my_widget` will point to that widget.
|
|
57
|
+
|
|
58
|
+
When one creates a second widget with the same name, the namespace will
|
|
59
|
+
also change to point to the new widget. E.g.:
|
|
60
|
+
|
|
61
|
+
.. code-block:: python
|
|
62
|
+
|
|
63
|
+
widget = MyWidget(knsname='my_widget')
|
|
64
|
+
# knspace.my_widget now points to widget
|
|
65
|
+
widget2 = MyWidget(knsname='my_widget')
|
|
66
|
+
# knspace.my_widget now points to widget2
|
|
67
|
+
|
|
68
|
+
Setting the namespace
|
|
69
|
+
---------------------
|
|
70
|
+
|
|
71
|
+
One can also create ones own namespace rather than using the default
|
|
72
|
+
:attr:`knspace` by directly setting :attr:`KNSpaceBehavior.knspace`:
|
|
73
|
+
|
|
74
|
+
.. code-block:: python
|
|
75
|
+
|
|
76
|
+
class MyWidget(KNSpaceBehavior, Widget):
|
|
77
|
+
pass
|
|
78
|
+
|
|
79
|
+
widget = MyWidget(knsname='my_widget')
|
|
80
|
+
my_new_namespace = KNSpace()
|
|
81
|
+
widget.knspace = my_new_namespace
|
|
82
|
+
|
|
83
|
+
Initially, `my_widget` is added to the default namespace, but when the widget's
|
|
84
|
+
namespace is changed to `my_new_namespace`, the reference to `my_widget` is
|
|
85
|
+
moved to that namespace. We could have also of course first set the namespace
|
|
86
|
+
to `my_new_namespace` and then have named the widget `my_widget`, thereby
|
|
87
|
+
avoiding the initial assignment to the default namespace.
|
|
88
|
+
|
|
89
|
+
Similarly, in kv:
|
|
90
|
+
|
|
91
|
+
.. code-block:: kv
|
|
92
|
+
|
|
93
|
+
<MyWidget@KNSpaceBehavior+Widget>
|
|
94
|
+
|
|
95
|
+
MyWidget:
|
|
96
|
+
knspace: KNSpace()
|
|
97
|
+
knsname: 'my_widget'
|
|
98
|
+
|
|
99
|
+
Inheriting the namespace
|
|
100
|
+
------------------------
|
|
101
|
+
|
|
102
|
+
In the previous example, we directly set the namespace we wished to use.
|
|
103
|
+
In the following example, we inherit it from the parent, so we only have to set
|
|
104
|
+
it once:
|
|
105
|
+
|
|
106
|
+
.. code-block:: kv
|
|
107
|
+
|
|
108
|
+
<MyWidget@KNSpaceBehavior+Widget>
|
|
109
|
+
<MyLabel@KNSpaceBehavior+Label>
|
|
110
|
+
|
|
111
|
+
<MyComplexWidget@MyWidget>:
|
|
112
|
+
knsname: 'my_complex'
|
|
113
|
+
MyLabel:
|
|
114
|
+
knsname: 'label1'
|
|
115
|
+
MyLabel:
|
|
116
|
+
knsname: 'label2'
|
|
117
|
+
|
|
118
|
+
Then, we do:
|
|
119
|
+
|
|
120
|
+
.. code-block:: python
|
|
121
|
+
|
|
122
|
+
widget = MyComplexWidget()
|
|
123
|
+
new_knspace = KNSpace()
|
|
124
|
+
widget.knspace = new_knspace
|
|
125
|
+
|
|
126
|
+
The rule is that if no knspace has been assigned to a widget, it looks for a
|
|
127
|
+
namespace in its parent and parent's parent and so on until it find one to
|
|
128
|
+
use. If none are found, it uses the default :attr:`knspace`.
|
|
129
|
+
|
|
130
|
+
When `MyComplexWidget` is created, it still used the default namespace.
|
|
131
|
+
However, when we assigned the root widget its new namespace, all its
|
|
132
|
+
children switched to using that new namespace as well. So `new_knspace` now
|
|
133
|
+
contains `label1` and `label2` as well as `my_complex`.
|
|
134
|
+
|
|
135
|
+
If we had first done:
|
|
136
|
+
|
|
137
|
+
.. code-block:: python
|
|
138
|
+
|
|
139
|
+
widget = MyComplexWidget()
|
|
140
|
+
new_knspace = KNSpace()
|
|
141
|
+
knspace.label1.knspace = knspace
|
|
142
|
+
widget.knspace = new_knspace
|
|
143
|
+
|
|
144
|
+
Then `label1` would remain stored in the default :attr:`knspace` since it was
|
|
145
|
+
directly set, but `label2` and `my_complex` would still be added to the new
|
|
146
|
+
namespace.
|
|
147
|
+
|
|
148
|
+
One can customize the attribute used to search the parent tree by changing
|
|
149
|
+
:attr:`KNSpaceBehavior.knspace_key`. If the desired knspace is not reachable
|
|
150
|
+
through a widgets parent tree, e.g. in a popup that is not a widget's child,
|
|
151
|
+
:attr:`KNSpaceBehavior.knspace_key` can be used to establish a different
|
|
152
|
+
search order.
|
|
153
|
+
|
|
154
|
+
Accessing the namespace
|
|
155
|
+
-----------------------
|
|
156
|
+
|
|
157
|
+
As seen in the previous example, if not directly assigned, the namespace is
|
|
158
|
+
found by searching the parent tree. Consequently, if a namespace was assigned
|
|
159
|
+
further up the parent tree, all its children and below could access that
|
|
160
|
+
namespace through their :attr:`KNSpaceBehavior.knspace` property.
|
|
161
|
+
|
|
162
|
+
This allows the creation of multiple widgets with identically given names
|
|
163
|
+
if each root widget instance is assigned a new namespace. For example:
|
|
164
|
+
|
|
165
|
+
.. code-block:: kv
|
|
166
|
+
|
|
167
|
+
<MyComplexWidget@KNSpaceBehavior+Widget>:
|
|
168
|
+
Label:
|
|
169
|
+
text: root.knspace.pretty.text if root.knspace.pretty else ''
|
|
170
|
+
|
|
171
|
+
<MyPrettyWidget@KNSpaceBehavior+TextInput>:
|
|
172
|
+
knsname: 'pretty'
|
|
173
|
+
text: 'Hello'
|
|
174
|
+
|
|
175
|
+
<MyCompositeWidget@KNSpaceBehavior+BoxLayout>:
|
|
176
|
+
MyComplexWidget
|
|
177
|
+
MyPrettyWidget
|
|
178
|
+
|
|
179
|
+
Now, when we do:
|
|
180
|
+
|
|
181
|
+
.. code-block:: python
|
|
182
|
+
|
|
183
|
+
knspace1, knspace2 = KNSpace(), KNSpace()
|
|
184
|
+
composite1 = MyCompositeWidget()
|
|
185
|
+
composite1.knspace = knspace1
|
|
186
|
+
|
|
187
|
+
composite2 = MyCompositeWidget()
|
|
188
|
+
composite2.knspace = knspace2
|
|
189
|
+
|
|
190
|
+
knspace1.pretty = "Here's the ladder, now fix the roof!"
|
|
191
|
+
knspace2.pretty = "Get that raccoon off me!"
|
|
192
|
+
|
|
193
|
+
Because each of the `MyCompositeWidget` instances have a different namespace
|
|
194
|
+
their children also use different namespaces. Consequently, the
|
|
195
|
+
pretty and complex widgets of each instance will have different text.
|
|
196
|
+
|
|
197
|
+
Further, because both the namespace :class:`~kivy.properties.ObjectProperty`
|
|
198
|
+
references, and :attr:`KNSpaceBehavior.knspace` have `rebind=True`, the
|
|
199
|
+
text of the `MyComplexWidget` label is rebound to match the text of
|
|
200
|
+
`MyPrettyWidget` when either the root's namespace changes or when the
|
|
201
|
+
`root.knspace.pretty` property changes, as expected.
|
|
202
|
+
|
|
203
|
+
Forking a namespace
|
|
204
|
+
-------------------
|
|
205
|
+
|
|
206
|
+
Forking a namespace provides the opportunity to create a new namespace
|
|
207
|
+
from a parent namespace so that the forked namespace will contain everything
|
|
208
|
+
in the origin namespace, but the origin namespace will not have access to
|
|
209
|
+
anything added to the forked namespace.
|
|
210
|
+
|
|
211
|
+
For example:
|
|
212
|
+
|
|
213
|
+
.. code-block:: python
|
|
214
|
+
|
|
215
|
+
child = knspace.fork()
|
|
216
|
+
grandchild = child.fork()
|
|
217
|
+
|
|
218
|
+
child.label = Label()
|
|
219
|
+
grandchild.button = Button()
|
|
220
|
+
|
|
221
|
+
Now label is accessible by both child and grandchild, but not by knspace. And
|
|
222
|
+
button is only accessible by the grandchild but not by the child or by knspace.
|
|
223
|
+
Finally, doing `grandchild.label = Label()` will leave `grandchild.label`
|
|
224
|
+
and `child.label` pointing to different labels.
|
|
225
|
+
|
|
226
|
+
A motivating example is the example from above:
|
|
227
|
+
|
|
228
|
+
.. code-block:: kv
|
|
229
|
+
|
|
230
|
+
<MyComplexWidget@KNSpaceBehavior+Widget>:
|
|
231
|
+
Label:
|
|
232
|
+
text: root.knspace.pretty.text if root.knspace.pretty else ''
|
|
233
|
+
|
|
234
|
+
<MyPrettyWidget@KNSpaceBehavior+TextInput>:
|
|
235
|
+
knsname: 'pretty'
|
|
236
|
+
text: 'Hello'
|
|
237
|
+
|
|
238
|
+
<MyCompositeWidget@KNSpaceBehavior+BoxLayout>:
|
|
239
|
+
knspace: 'fork'
|
|
240
|
+
MyComplexWidget
|
|
241
|
+
MyPrettyWidget
|
|
242
|
+
|
|
243
|
+
Notice the addition of `knspace: 'fork'`. This is identical to doing
|
|
244
|
+
`knspace: self.knspace.fork()`. However, doing that would lead to infinite
|
|
245
|
+
recursion as that kv rule would be executed recursively because `self.knspace`
|
|
246
|
+
will keep on changing. However, allowing `knspace: 'fork'` cirumvents that.
|
|
247
|
+
See :attr:`KNSpaceBehavior.knspace`.
|
|
248
|
+
|
|
249
|
+
Now, having forked, we just need to do:
|
|
250
|
+
|
|
251
|
+
.. code-block:: python
|
|
252
|
+
|
|
253
|
+
composite1 = MyCompositeWidget()
|
|
254
|
+
composite2 = MyCompositeWidget()
|
|
255
|
+
|
|
256
|
+
composite1.knspace.pretty = "Here's the ladder, now fix the roof!"
|
|
257
|
+
composite2.knspace.pretty = "Get that raccoon off me!"
|
|
258
|
+
|
|
259
|
+
Since by forking we automatically created a unique namespace for each
|
|
260
|
+
`MyCompositeWidget` instance.
|
|
261
|
+
'''
|
|
262
|
+
|
|
263
|
+
__all__ = ('KNSpace', 'KNSpaceBehavior', 'knspace')
|
|
264
|
+
|
|
265
|
+
from kivy.event import EventDispatcher
|
|
266
|
+
from kivy.properties import StringProperty, ObjectProperty, AliasProperty
|
|
267
|
+
from kivy.context import register_context
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
class KNSpace(EventDispatcher):
|
|
271
|
+
'''Each :class:`KNSpace` instance is a namespace that stores the named Kivy
|
|
272
|
+
objects associated with this namespace. Each named object is
|
|
273
|
+
stored as the value of a Kivy :class:`~kivy.properties.ObjectProperty` of
|
|
274
|
+
this instance whose property name is the object's given name. Both `rebind`
|
|
275
|
+
and `allownone` are set to `True` for the property.
|
|
276
|
+
|
|
277
|
+
See :attr:`KNSpaceBehavior.knspace` for details on how a namespace is
|
|
278
|
+
associated with a named object.
|
|
279
|
+
|
|
280
|
+
When storing an object in the namespace, the object's `proxy_ref` is
|
|
281
|
+
stored if the object has such an attribute.
|
|
282
|
+
|
|
283
|
+
:Parameters:
|
|
284
|
+
|
|
285
|
+
`parent`: (internal) A :class:`KNSpace` instance or None.
|
|
286
|
+
If specified, it's a parent namespace, in which case, the current
|
|
287
|
+
namespace will have in its namespace all its named objects
|
|
288
|
+
as well as the named objects of its parent and parent's parent
|
|
289
|
+
etc. See :meth:`fork` for more details.
|
|
290
|
+
'''
|
|
291
|
+
|
|
292
|
+
parent = None
|
|
293
|
+
'''(internal) The parent namespace instance, :class:`KNSpace`, or None. See
|
|
294
|
+
:meth:`fork`.
|
|
295
|
+
'''
|
|
296
|
+
__has_applied = None
|
|
297
|
+
|
|
298
|
+
keep_ref = False
|
|
299
|
+
'''Whether a direct reference should be kept to the stored objects.
|
|
300
|
+
If ``True``, we use the direct object, otherwise we use
|
|
301
|
+
:attr:`~kivy.uix.widget.proxy_ref` when present.
|
|
302
|
+
|
|
303
|
+
Defaults to False.
|
|
304
|
+
'''
|
|
305
|
+
|
|
306
|
+
def __init__(self, parent=None, keep_ref=False, **kwargs):
|
|
307
|
+
self.keep_ref = keep_ref
|
|
308
|
+
super(KNSpace, self).__init__(**kwargs)
|
|
309
|
+
self.parent = parent
|
|
310
|
+
self.__has_applied = set(self.properties().keys())
|
|
311
|
+
|
|
312
|
+
def __setattr__(self, name, value):
|
|
313
|
+
prop = super(KNSpace, self).property(name, quiet=True)
|
|
314
|
+
has_applied = self.__has_applied
|
|
315
|
+
if prop is None:
|
|
316
|
+
if hasattr(self, name):
|
|
317
|
+
super(KNSpace, self).__setattr__(name, value)
|
|
318
|
+
else:
|
|
319
|
+
self.apply_property(
|
|
320
|
+
**{name:
|
|
321
|
+
ObjectProperty(None, rebind=True, allownone=True)}
|
|
322
|
+
)
|
|
323
|
+
if not self.keep_ref:
|
|
324
|
+
value = getattr(value, 'proxy_ref', value)
|
|
325
|
+
has_applied.add(name)
|
|
326
|
+
super(KNSpace, self).__setattr__(name, value)
|
|
327
|
+
elif name not in has_applied:
|
|
328
|
+
self.apply_property(**{name: prop})
|
|
329
|
+
has_applied.add(name)
|
|
330
|
+
if not self.keep_ref:
|
|
331
|
+
value = getattr(value, 'proxy_ref', value)
|
|
332
|
+
super(KNSpace, self).__setattr__(name, value)
|
|
333
|
+
else:
|
|
334
|
+
if not self.keep_ref:
|
|
335
|
+
value = getattr(value, 'proxy_ref', value)
|
|
336
|
+
super(KNSpace, self).__setattr__(name, value)
|
|
337
|
+
|
|
338
|
+
def __getattribute__(self, name):
|
|
339
|
+
if name in super(KNSpace, self).__getattribute__('__dict__'):
|
|
340
|
+
return super(KNSpace, self).__getattribute__(name)
|
|
341
|
+
|
|
342
|
+
try:
|
|
343
|
+
value = super(KNSpace, self).__getattribute__(name)
|
|
344
|
+
except AttributeError:
|
|
345
|
+
parent = super(KNSpace, self).__getattribute__('parent')
|
|
346
|
+
if parent is None:
|
|
347
|
+
raise AttributeError(name)
|
|
348
|
+
return getattr(parent, name)
|
|
349
|
+
|
|
350
|
+
if value is not None:
|
|
351
|
+
return value
|
|
352
|
+
|
|
353
|
+
parent = super(KNSpace, self).__getattribute__('parent')
|
|
354
|
+
if parent is None:
|
|
355
|
+
return None
|
|
356
|
+
|
|
357
|
+
try:
|
|
358
|
+
return getattr(parent, name) # if parent doesn't have it
|
|
359
|
+
except AttributeError:
|
|
360
|
+
return None
|
|
361
|
+
|
|
362
|
+
def property(self, name, quiet=False):
|
|
363
|
+
# needs to overwrite EventDispatcher.property so kv lang will work
|
|
364
|
+
prop = super(KNSpace, self).property(name, quiet=True)
|
|
365
|
+
if prop is not None:
|
|
366
|
+
return prop
|
|
367
|
+
|
|
368
|
+
prop = ObjectProperty(None, rebind=True, allownone=True)
|
|
369
|
+
self.apply_property(**{name: prop})
|
|
370
|
+
self.__has_applied.add(name)
|
|
371
|
+
return prop
|
|
372
|
+
|
|
373
|
+
def fork(self):
|
|
374
|
+
'''Returns a new :class:`KNSpace` instance which will have access to
|
|
375
|
+
all the named objects in the current namespace but will also have a
|
|
376
|
+
namespace of its own that is unique to it.
|
|
377
|
+
|
|
378
|
+
For example:
|
|
379
|
+
|
|
380
|
+
.. code-block:: python
|
|
381
|
+
|
|
382
|
+
forked_knspace1 = knspace.fork()
|
|
383
|
+
forked_knspace2 = knspace.fork()
|
|
384
|
+
|
|
385
|
+
Now, any names added to `knspace` will be accessible by the
|
|
386
|
+
`forked_knspace1` and `forked_knspace2` namespaces by the normal means.
|
|
387
|
+
However, any names added to `forked_knspace1` will not be accessible
|
|
388
|
+
from `knspace` or `forked_knspace2`. Similar for `forked_knspace2`.
|
|
389
|
+
'''
|
|
390
|
+
return KNSpace(parent=self)
|
|
391
|
+
|
|
392
|
+
|
|
393
|
+
class KNSpaceBehavior(object):
|
|
394
|
+
'''Inheriting from this class allows naming of the inherited objects, which
|
|
395
|
+
are then added to the associated namespace :attr:`knspace` and accessible
|
|
396
|
+
through it.
|
|
397
|
+
|
|
398
|
+
Please see the :mod:`knspace behaviors module <kivy.uix.behaviors.knspace>`
|
|
399
|
+
documentation for more information.
|
|
400
|
+
'''
|
|
401
|
+
|
|
402
|
+
_knspace = ObjectProperty(None, allownone=True)
|
|
403
|
+
_knsname = StringProperty('')
|
|
404
|
+
__last_knspace = None
|
|
405
|
+
__callbacks = None
|
|
406
|
+
|
|
407
|
+
def __init__(self, knspace=None, **kwargs):
|
|
408
|
+
self.knspace = knspace
|
|
409
|
+
super(KNSpaceBehavior, self).__init__(**kwargs)
|
|
410
|
+
|
|
411
|
+
def __knspace_clear_callbacks(self, *largs):
|
|
412
|
+
for obj, name, uid in self.__callbacks:
|
|
413
|
+
obj.unbind_uid(name, uid)
|
|
414
|
+
last = self.__last_knspace
|
|
415
|
+
self.__last_knspace = self.__callbacks = None
|
|
416
|
+
|
|
417
|
+
assert self._knspace is None
|
|
418
|
+
assert last
|
|
419
|
+
|
|
420
|
+
new = self.__set_parent_knspace()
|
|
421
|
+
if new is last:
|
|
422
|
+
return
|
|
423
|
+
self.property('_knspace').dispatch(self)
|
|
424
|
+
|
|
425
|
+
name = self.knsname
|
|
426
|
+
if not name:
|
|
427
|
+
return
|
|
428
|
+
|
|
429
|
+
if getattr(last, name) == self:
|
|
430
|
+
setattr(last, name, None)
|
|
431
|
+
|
|
432
|
+
if new:
|
|
433
|
+
setattr(new, name, self)
|
|
434
|
+
else:
|
|
435
|
+
raise ValueError('Object has name "{}", but no namespace'.
|
|
436
|
+
format(name))
|
|
437
|
+
|
|
438
|
+
def __set_parent_knspace(self):
|
|
439
|
+
callbacks = self.__callbacks = []
|
|
440
|
+
fbind = self.fbind
|
|
441
|
+
append = callbacks.append
|
|
442
|
+
parent_key = self.knspace_key
|
|
443
|
+
clear = self.__knspace_clear_callbacks
|
|
444
|
+
|
|
445
|
+
append((self, 'knspace_key', fbind('knspace_key', clear)))
|
|
446
|
+
if not parent_key:
|
|
447
|
+
self.__last_knspace = knspace
|
|
448
|
+
return knspace
|
|
449
|
+
|
|
450
|
+
append((self, parent_key, fbind(parent_key, clear)))
|
|
451
|
+
parent = getattr(self, parent_key, None)
|
|
452
|
+
while parent is not None:
|
|
453
|
+
fbind = parent.fbind
|
|
454
|
+
|
|
455
|
+
parent_knspace = getattr(parent, 'knspace', 0)
|
|
456
|
+
if parent_knspace != 0:
|
|
457
|
+
append((parent, 'knspace', fbind('knspace', clear)))
|
|
458
|
+
self.__last_knspace = parent_knspace
|
|
459
|
+
return parent_knspace
|
|
460
|
+
|
|
461
|
+
append((parent, parent_key, fbind(parent_key, clear)))
|
|
462
|
+
new_parent = getattr(parent, parent_key, None)
|
|
463
|
+
if new_parent is parent:
|
|
464
|
+
break
|
|
465
|
+
parent = new_parent
|
|
466
|
+
self.__last_knspace = knspace
|
|
467
|
+
return knspace
|
|
468
|
+
|
|
469
|
+
def _get_knspace(self):
|
|
470
|
+
_knspace = self._knspace
|
|
471
|
+
if _knspace is not None:
|
|
472
|
+
return _knspace
|
|
473
|
+
|
|
474
|
+
if self.__callbacks is not None:
|
|
475
|
+
return self.__last_knspace
|
|
476
|
+
|
|
477
|
+
# we only get here if we never accessed our knspace
|
|
478
|
+
return self.__set_parent_knspace()
|
|
479
|
+
|
|
480
|
+
def _set_knspace(self, value):
|
|
481
|
+
if value is self._knspace:
|
|
482
|
+
return
|
|
483
|
+
|
|
484
|
+
knspace = self._knspace or self.__last_knspace
|
|
485
|
+
name = self.knsname
|
|
486
|
+
if name and knspace and getattr(knspace, name) == self:
|
|
487
|
+
setattr(knspace, name, None) # reset old namespace
|
|
488
|
+
|
|
489
|
+
if value == 'fork':
|
|
490
|
+
if not knspace:
|
|
491
|
+
knspace = self.knspace # get parents in case we haven't before
|
|
492
|
+
if knspace:
|
|
493
|
+
value = knspace.fork()
|
|
494
|
+
else:
|
|
495
|
+
raise ValueError('Cannot fork with no namespace')
|
|
496
|
+
|
|
497
|
+
for obj, prop_name, uid in self.__callbacks or []:
|
|
498
|
+
obj.unbind_uid(prop_name, uid)
|
|
499
|
+
self.__last_knspace = self.__callbacks = None
|
|
500
|
+
|
|
501
|
+
if name:
|
|
502
|
+
if value is None: # if None, first update the recursive knspace
|
|
503
|
+
knspace = self.__set_parent_knspace()
|
|
504
|
+
if knspace:
|
|
505
|
+
setattr(knspace, name, self)
|
|
506
|
+
self._knspace = None # cause a kv trigger
|
|
507
|
+
else:
|
|
508
|
+
setattr(value, name, self)
|
|
509
|
+
knspace = self._knspace = value
|
|
510
|
+
|
|
511
|
+
if not knspace:
|
|
512
|
+
raise ValueError('Object has name "{}", but no namespace'.
|
|
513
|
+
format(name))
|
|
514
|
+
else:
|
|
515
|
+
if value is None:
|
|
516
|
+
self.__set_parent_knspace() # update before trigger below
|
|
517
|
+
self._knspace = value
|
|
518
|
+
|
|
519
|
+
knspace = AliasProperty(
|
|
520
|
+
_get_knspace, _set_knspace, bind=('_knspace', ), cache=False,
|
|
521
|
+
rebind=True, allownone=True)
|
|
522
|
+
'''The namespace instance, :class:`KNSpace`, associated with this widget.
|
|
523
|
+
The :attr:`knspace` namespace stores this widget when naming this widget
|
|
524
|
+
with :attr:`knsname`.
|
|
525
|
+
|
|
526
|
+
If the namespace has been set with a :class:`KNSpace` instance, e.g. with
|
|
527
|
+
`self.knspace = KNSpace()`, then that instance is returned (setting with
|
|
528
|
+
`None` doesn't count). Otherwise, if :attr:`knspace_key` is not None, we
|
|
529
|
+
look for a namespace to use in the object that is stored in the property
|
|
530
|
+
named :attr:`knspace_key`, of this instance. I.e.
|
|
531
|
+
`object = getattr(self, self.knspace_key)`.
|
|
532
|
+
|
|
533
|
+
If that object has a knspace property, then we return its value. Otherwise,
|
|
534
|
+
we go further up, e.g. with `getattr(object, self.knspace_key)` and look
|
|
535
|
+
for its `knspace` property.
|
|
536
|
+
|
|
537
|
+
Finally, if we reach a value of `None`, or :attr:`knspace_key` was `None`,
|
|
538
|
+
the default :attr:`~kivy.uix.behaviors.knspace.knspace` namespace is
|
|
539
|
+
returned.
|
|
540
|
+
|
|
541
|
+
If :attr:`knspace` is set to the string `'fork'`, the current namespace
|
|
542
|
+
in :attr:`knspace` will be forked with :meth:`KNSpace.fork` and the
|
|
543
|
+
resulting namespace will be assigned to this instance's :attr:`knspace`.
|
|
544
|
+
See the module examples for a motivating example.
|
|
545
|
+
|
|
546
|
+
Both `rebind` and `allownone` are `True`.
|
|
547
|
+
'''
|
|
548
|
+
|
|
549
|
+
knspace_key = StringProperty('parent', allownone=True)
|
|
550
|
+
'''The name of the property of this instance, to use to search upwards for
|
|
551
|
+
a namespace to use by this instance. Defaults to `'parent'` so that we'll
|
|
552
|
+
search the parent tree. See :attr:`knspace`.
|
|
553
|
+
|
|
554
|
+
When `None`, we won't search the parent tree for the namespace.
|
|
555
|
+
`allownone` is `True`.
|
|
556
|
+
'''
|
|
557
|
+
|
|
558
|
+
def _get_knsname(self):
|
|
559
|
+
return self._knsname
|
|
560
|
+
|
|
561
|
+
def _set_knsname(self, value):
|
|
562
|
+
old_name = self._knsname
|
|
563
|
+
knspace = self.knspace
|
|
564
|
+
if old_name and knspace and getattr(knspace, old_name) == self:
|
|
565
|
+
setattr(knspace, old_name, None)
|
|
566
|
+
|
|
567
|
+
self._knsname = value
|
|
568
|
+
if value:
|
|
569
|
+
if knspace:
|
|
570
|
+
setattr(knspace, value, self)
|
|
571
|
+
else:
|
|
572
|
+
raise ValueError('Object has name "{}", but no namespace'.
|
|
573
|
+
format(value))
|
|
574
|
+
|
|
575
|
+
knsname = AliasProperty(
|
|
576
|
+
_get_knsname, _set_knsname, bind=('_knsname', ), cache=False)
|
|
577
|
+
'''The name given to this instance. If named, the name will be added to the
|
|
578
|
+
associated :attr:`knspace` namespace, which will then point to the
|
|
579
|
+
`proxy_ref` of this instance.
|
|
580
|
+
|
|
581
|
+
When named, one can access this object by e.g. self.knspace.name, where
|
|
582
|
+
`name` is the given name of this instance. See :attr:`knspace` and the
|
|
583
|
+
module description for more details.
|
|
584
|
+
'''
|
|
585
|
+
|
|
586
|
+
|
|
587
|
+
knspace = register_context('knspace', KNSpace)
|
|
588
|
+
'''The default :class:`KNSpace` namespace. See :attr:`KNSpaceBehavior.knspace`
|
|
589
|
+
for more details.
|
|
590
|
+
'''
|