mirror of
https://github.com/cyberboy666/r_e_c_u_r.git
synced 2025-12-06 00:10:07 +01:00
refacting data parts
This commit is contained in:
758
.idea/workspace.xml
generated
758
.idea/workspace.xml
generated
@@ -2,8 +2,21 @@
|
|||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="ChangeListManager">
|
<component name="ChangeListManager">
|
||||||
<list default="true" id="908505e2-8b2f-4abb-8017-7a9728876708" name="Default" comment="">
|
<list default="true" id="908505e2-8b2f-4abb-8017-7a9728876708" name="Default" comment="">
|
||||||
<change beforePath="$PROJECT_DIR$/data_objects/settings.json" afterPath="$PROJECT_DIR$/data_objects/settings.json" />
|
<change beforePath="" afterPath="$PROJECT_DIR$/data_centre/browser_data.py" />
|
||||||
|
<change beforePath="" afterPath="$PROJECT_DIR$/data_centre/json_objects/settings.json" />
|
||||||
|
<change beforePath="" afterPath="$PROJECT_DIR$/display_centre/menu.py" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/README.md" afterPath="$PROJECT_DIR$/README.md" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/data_centre.py" afterPath="$PROJECT_DIR$/data_centre/data.py" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/data_objects/display_data.json" afterPath="$PROJECT_DIR$/data_centre/json_objects/display_data.json" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/data_objects/key_map.json" afterPath="$PROJECT_DIR$/data_centre/json_objects/key_map.json" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/data_objects/next_bank_number.json" afterPath="$PROJECT_DIR$/data_centre/json_objects/next_bank_number.json" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/data_objects/settings.json" afterPath="" />
|
||||||
<change beforePath="$PROJECT_DIR$/display_centre/display.py" afterPath="$PROJECT_DIR$/display_centre/display.py" />
|
<change beforePath="$PROJECT_DIR$/display_centre/display.py" afterPath="$PROJECT_DIR$/display_centre/display.py" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/r_e_c_u_r.py" afterPath="$PROJECT_DIR$/r_e_c_u_r.py" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/user_input/actions.py" afterPath="$PROJECT_DIR$/actions.py" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/user_input/numpad_input.py" afterPath="$PROJECT_DIR$/user_input/numpad_input.py" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/video_centre/video_driver.py" afterPath="$PROJECT_DIR$/video_centre/video_driver.py" />
|
||||||
<change beforePath="$PROJECT_DIR$/video_centre/video_player.py" afterPath="$PROJECT_DIR$/video_centre/video_player.py" />
|
<change beforePath="$PROJECT_DIR$/video_centre/video_player.py" afterPath="$PROJECT_DIR$/video_centre/video_player.py" />
|
||||||
</list>
|
</list>
|
||||||
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
|
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
|
||||||
@@ -18,8 +31,8 @@
|
|||||||
<file leaf-file-name="r_e_c_u_r.py" pinned="false" current-in-tab="false">
|
<file leaf-file-name="r_e_c_u_r.py" pinned="false" current-in-tab="false">
|
||||||
<entry file="file://$PROJECT_DIR$/r_e_c_u_r.py">
|
<entry file="file://$PROJECT_DIR$/r_e_c_u_r.py">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="275">
|
<state relative-caret-position="1000">
|
||||||
<caret line="17" column="20" lean-forward="false" selection-start-line="17" selection-start-column="20" selection-end-line="17" selection-end-column="20" />
|
<caret line="40" column="7" lean-forward="true" selection-start-line="40" selection-start-column="7" selection-end-line="40" selection-end-column="7" />
|
||||||
<folding>
|
<folding>
|
||||||
<element signature="e#0#16#0" expanded="true" />
|
<element signature="e#0#16#0" expanded="true" />
|
||||||
</folding>
|
</folding>
|
||||||
@@ -27,48 +40,94 @@
|
|||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
</file>
|
</file>
|
||||||
<file leaf-file-name="display.py" pinned="false" current-in-tab="true">
|
<file leaf-file-name="numpad_input.py" pinned="false" current-in-tab="false">
|
||||||
<entry file="file://$PROJECT_DIR$/display_centre/display.py">
|
<entry file="file://$PROJECT_DIR$/user_input/numpad_input.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="335">
|
||||||
|
<caret line="52" column="50" lean-forward="false" selection-start-line="52" selection-start-column="50" selection-end-line="52" selection-end-column="50" />
|
||||||
|
<folding />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
</file>
|
||||||
|
<file leaf-file-name="data.py" pinned="false" current-in-tab="false">
|
||||||
|
<entry file="file://$PROJECT_DIR$/data_centre/data.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="-281">
|
||||||
|
<caret line="189" column="42" lean-forward="false" selection-start-line="189" selection-start-column="29" selection-end-line="189" selection-end-column="42" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#11#0" expanded="true" />
|
||||||
|
<element signature="e#2087#2270#0" expanded="false" />
|
||||||
|
<element signature="e#2659#2709#0" expanded="false" />
|
||||||
|
<element signature="e#3319#3350#0" expanded="false" />
|
||||||
|
<element signature="e#3406#3438#0" expanded="false" />
|
||||||
|
<element signature="e#5383#5585#0" expanded="false" />
|
||||||
|
<element signature="e#5652#6805#0" expanded="false" />
|
||||||
|
<element signature="e#7808#8385#0" expanded="false" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
</file>
|
||||||
|
<file leaf-file-name="browser_data.py" pinned="false" current-in-tab="false">
|
||||||
|
<entry file="file://$PROJECT_DIR$/data_centre/browser_data.py">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="175">
|
<state relative-caret-position="175">
|
||||||
<caret line="87" column="21" lean-forward="false" selection-start-line="87" selection-start-column="21" selection-end-line="87" selection-end-column="21" />
|
<caret line="7" column="30" lean-forward="true" selection-start-line="7" selection-start-column="30" selection-end-line="7" selection-end-column="30" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#9#0" expanded="true" />
|
||||||
|
<element signature="e#350#504#0" expanded="false" />
|
||||||
|
<element signature="e#1322#1553#0" expanded="false" />
|
||||||
|
<element signature="e#1635#2579#0" expanded="false" />
|
||||||
|
<element signature="e#2637#2818#0" expanded="false" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
</file>
|
||||||
|
<file leaf-file-name="actions.py" pinned="false" current-in-tab="true">
|
||||||
|
<entry file="file://$PROJECT_DIR$/actions.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="282">
|
||||||
|
<caret line="29" column="73" lean-forward="false" selection-start-line="29" selection-start-column="60" selection-end-line="29" selection-end-column="73" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#315#424#0" expanded="false" />
|
||||||
|
<element signature="e#475#580#0" expanded="false" />
|
||||||
|
<element signature="e#633#1022#0" expanded="false" />
|
||||||
|
<element signature="e#1239#1346#0" expanded="false" />
|
||||||
|
<element signature="e#1576#1680#0" expanded="false" />
|
||||||
|
<element signature="e#1743#1819#0" expanded="false" />
|
||||||
|
<element signature="e#1864#1900#0" expanded="false" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
</file>
|
||||||
|
<file leaf-file-name="display.py" pinned="false" current-in-tab="false">
|
||||||
|
<entry file="file://$PROJECT_DIR$/display_centre/display.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="1350">
|
||||||
|
<caret line="82" column="40" lean-forward="false" selection-start-line="82" selection-start-column="40" selection-end-line="82" selection-end-column="40" />
|
||||||
<folding>
|
<folding>
|
||||||
<element signature="e#0#29#0" expanded="true" />
|
<element signature="e#0#29#0" expanded="true" />
|
||||||
<element signature="e#8427#8619#0" expanded="false" />
|
<element signature="e#837#898#0" expanded="false" />
|
||||||
<element signature="e#8662#9090#0" expanded="false" />
|
<element signature="e#933#1579#0" expanded="false" />
|
||||||
<element signature="e#9131#9452#0" expanded="false" />
|
<element signature="e#1618#1760#0" expanded="false" />
|
||||||
<element signature="e#9491#9935#0" expanded="false" />
|
<element signature="e#1797#1935#0" expanded="false" />
|
||||||
<element signature="e#10459#10788#0" expanded="false" />
|
<element signature="e#1973#2361#0" expanded="false" />
|
||||||
<element signature="e#10828#10904#0" expanded="false" />
|
<element signature="e#3775#4623#0" expanded="false" />
|
||||||
</folding>
|
<element signature="e#4663#5519#0" expanded="false" />
|
||||||
</state>
|
<element signature="e#5558#6144#0" expanded="false" />
|
||||||
</provider>
|
<element signature="e#6194#6331#0" expanded="false" />
|
||||||
</entry>
|
<element signature="e#6383#6526#0" expanded="false" />
|
||||||
</file>
|
<element signature="e#6572#7087#0" expanded="false" />
|
||||||
<file leaf-file-name="actions.py" pinned="false" current-in-tab="false">
|
<element signature="e#6925#7087#0" expanded="false" />
|
||||||
<entry file="file://$PROJECT_DIR$/user_input/actions.py">
|
<element signature="e#7182#7845#0" expanded="false" />
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<element signature="e#7196#7453#0" expanded="false" />
|
||||||
<state relative-caret-position="299">
|
<element signature="e#7898#7982#0" expanded="false" />
|
||||||
<caret line="55" column="42" lean-forward="true" selection-start-line="55" selection-start-column="42" selection-end-line="55" selection-end-column="42" />
|
<element signature="e#8023#8229#0" expanded="false" />
|
||||||
<folding>
|
<element signature="e#8306#9464#0" expanded="false" />
|
||||||
<element signature="e#240#272#0" expanded="false" />
|
<element signature="e#9536#9732#0" expanded="false" />
|
||||||
<element signature="e#748#777#0" expanded="false" />
|
|
||||||
<element signature="e#819#923#0" expanded="false" />
|
|
||||||
<element signature="e#986#1074#0" expanded="false" />
|
|
||||||
<element signature="e#1119#1155#0" expanded="false" />
|
|
||||||
<element signature="e#1199#1497#0" expanded="false" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
</file>
|
|
||||||
<file leaf-file-name="video_driver.py" pinned="false" current-in-tab="false">
|
|
||||||
<entry file="file://$PROJECT_DIR$/video_centre/video_driver.py">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="866">
|
|
||||||
<caret line="70" column="42" lean-forward="false" selection-start-line="70" selection-start-column="42" selection-end-line="70" selection-end-column="42" />
|
|
||||||
<folding>
|
|
||||||
<element signature="e#0#18#0" expanded="true" />
|
|
||||||
</folding>
|
</folding>
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
@@ -77,62 +136,25 @@
|
|||||||
<file leaf-file-name="video_player.py" pinned="false" current-in-tab="false">
|
<file leaf-file-name="video_player.py" pinned="false" current-in-tab="false">
|
||||||
<entry file="file://$PROJECT_DIR$/video_centre/video_player.py">
|
<entry file="file://$PROJECT_DIR$/video_centre/video_player.py">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="358">
|
<state relative-caret-position="334">
|
||||||
<caret line="106" column="80" lean-forward="true" selection-start-line="106" selection-start-column="80" selection-end-line="106" selection-end-column="80" />
|
<caret line="124" column="34" lean-forward="true" selection-start-line="124" selection-start-column="34" selection-end-line="124" selection-end-column="34" />
|
||||||
<folding />
|
<folding />
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
</file>
|
</file>
|
||||||
<file leaf-file-name="data_centre.py" pinned="false" current-in-tab="false">
|
<file leaf-file-name="messages.py" pinned="false" current-in-tab="false">
|
||||||
<entry file="file://$PROJECT_DIR$/data_centre.py">
|
<entry file="file://$PROJECT_DIR$/display_centre/messages.py">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="265">
|
<state relative-caret-position="500">
|
||||||
<caret line="26" column="26" lean-forward="true" selection-start-line="26" selection-start-column="26" selection-end-line="26" selection-end-column="26" />
|
<caret line="20" column="19" lean-forward="false" selection-start-line="20" selection-start-column="8" selection-end-line="20" selection-end-column="19" />
|
||||||
<folding>
|
<folding>
|
||||||
<element signature="e#0#11#0" expanded="true" />
|
<element signature="e#0#14#0" expanded="true" />
|
||||||
<element signature="e#791#900#0" expanded="false" />
|
|
||||||
<element signature="e#939#1050#0" expanded="false" />
|
|
||||||
<element signature="e#1112#1288#0" expanded="false" />
|
|
||||||
<element signature="e#1402#1553#0" expanded="false" />
|
|
||||||
<element signature="e#1580#1910#0" expanded="false" />
|
|
||||||
<element signature="e#1943#1983#0" expanded="false" />
|
|
||||||
<element signature="e#2375#3326#0" expanded="false" />
|
|
||||||
<element signature="e#3407#3999#0" expanded="false" />
|
|
||||||
<element signature="e#4083#5027#0" expanded="false" />
|
|
||||||
<element signature="e#5087#5253#0" expanded="false" />
|
|
||||||
<element signature="e#5321#5546#0" expanded="false" />
|
|
||||||
<element signature="e#5607#5884#0" expanded="false" />
|
|
||||||
<element signature="e#6004#6303#0" expanded="false" />
|
|
||||||
<element signature="e#6376#6693#0" expanded="false" />
|
|
||||||
<element signature="e#6734#6773#0" expanded="false" />
|
|
||||||
<element signature="e#6813#7057#0" expanded="false" />
|
|
||||||
<element signature="e#7128#7346#0" expanded="false" />
|
|
||||||
<element signature="e#7375#7546#0" expanded="false" />
|
|
||||||
<element signature="e#7639#8116#0" expanded="false" />
|
|
||||||
<element signature="e#8211#8494#0" expanded="false" />
|
|
||||||
<element signature="e#8536#8838#0" expanded="false" />
|
|
||||||
<element signature="e#8878#9917#0" expanded="false" />
|
|
||||||
<element signature="e#9997#11105#0" expanded="false" />
|
|
||||||
<element signature="e#11152#11910#0" expanded="false" />
|
|
||||||
<element signature="e#11997#12533#0" expanded="false" />
|
|
||||||
<element signature="e#12579#12838#0" expanded="false" />
|
|
||||||
<element signature="e#12878#13028#0" expanded="false" />
|
|
||||||
</folding>
|
</folding>
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
</file>
|
</file>
|
||||||
<file leaf-file-name="display_data.json" pinned="false" current-in-tab="false">
|
|
||||||
<entry file="file://$PROJECT_DIR$/data_objects/display_data.json">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="447">
|
|
||||||
<caret line="62" column="25" lean-forward="true" selection-start-line="62" selection-start-column="25" selection-end-line="62" selection-end-column="25" />
|
|
||||||
<folding />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
</file>
|
|
||||||
</leaf>
|
</leaf>
|
||||||
</component>
|
</component>
|
||||||
<component name="FileTemplateManagerImpl">
|
<component name="FileTemplateManagerImpl">
|
||||||
@@ -144,21 +166,42 @@
|
|||||||
</component>
|
</component>
|
||||||
<component name="FindInProjectRecents">
|
<component name="FindInProjectRecents">
|
||||||
<findStrings>
|
<findStrings>
|
||||||
<find>refr</find>
|
|
||||||
<find>data_ob</find>
|
|
||||||
<find>self.display</find>
|
|
||||||
<find>settings</find>
|
|
||||||
<find>video_driver</find>
|
<find>video_driver</find>
|
||||||
<find>browser_start_index</find>
|
<find>logger</find>
|
||||||
<find>MAX_LINES</find>
|
<find>browser_list</find>
|
||||||
<find>data_object</find>
|
<find>is_file_in_memory_bank</find>
|
||||||
|
<find>create_new_bank_mapping_in_first_open</find>
|
||||||
|
<find>generate_browser_list</find>
|
||||||
|
<find>inspect</find>
|
||||||
|
<find>browser_data</find>
|
||||||
|
<find>convert_int_to_string_for_display</find>
|
||||||
|
<find>load_message</find>
|
||||||
|
<find>create_new_slot_mapping_in_first_open</find>
|
||||||
|
<find>get_context_options_from_settings</find>
|
||||||
|
<find>data</find>
|
||||||
|
<find>get_info</find>
|
||||||
<find>settings_list</find>
|
<find>settings_list</find>
|
||||||
<find>TITLE</find>
|
<find>extract_file_type_and_name_from_browser_format</find>
|
||||||
<find>DISPLAY_MODE</find>
|
<find>LOOPER</find>
|
||||||
<find>color</find>
|
<find>refresh_display</find>
|
||||||
<find>color</find>
|
<find>update_screen_every_second</find>
|
||||||
<find>has_omx</find>
|
<find>player</find>
|
||||||
|
<find>data_centre</find>
|
||||||
|
<find>browser_list.a</find>
|
||||||
|
<find>self.read_json</find>
|
||||||
|
<find>self.write_json</find>
|
||||||
|
<find>get_the_current_dir_path</find>
|
||||||
|
<find>Data</find>
|
||||||
|
<find>PATH_TO_BROWSER</find>
|
||||||
|
<find>PATH_TO_DATA_OBJECTS</find>
|
||||||
|
<find>SETTINGS_JSON</find>
|
||||||
|
<find>selected_list_index</find>
|
||||||
</findStrings>
|
</findStrings>
|
||||||
|
<replaceStrings>
|
||||||
|
<replace>read_json</replace>
|
||||||
|
<replace>SAMPLER</replace>
|
||||||
|
<replace>write_json</replace>
|
||||||
|
</replaceStrings>
|
||||||
</component>
|
</component>
|
||||||
<component name="Git.Settings">
|
<component name="Git.Settings">
|
||||||
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
||||||
@@ -171,14 +214,22 @@
|
|||||||
<option value="$PROJECT_DIR$/data_objects/key_map.json" />
|
<option value="$PROJECT_DIR$/data_objects/key_map.json" />
|
||||||
<option value="$PROJECT_DIR$/display_centre/navigation.py" />
|
<option value="$PROJECT_DIR$/display_centre/navigation.py" />
|
||||||
<option value="$PROJECT_DIR$/display_centre/actions.py" />
|
<option value="$PROJECT_DIR$/display_centre/actions.py" />
|
||||||
<option value="$PROJECT_DIR$/r_e_c_u_r.py" />
|
|
||||||
<option value="$PROJECT_DIR$/user_input/actions.py" />
|
|
||||||
<option value="$PROJECT_DIR$/video_centre/videodriver.py" />
|
<option value="$PROJECT_DIR$/video_centre/videodriver.py" />
|
||||||
<option value="$PROJECT_DIR$/data_objects/display_data.json" />
|
<option value="$PROJECT_DIR$/data_objects/display_data.json" />
|
||||||
<option value="$PROJECT_DIR$/user_input/numpad_input.py" />
|
|
||||||
<option value="$PROJECT_DIR$/video_centre/video_driver.py" />
|
|
||||||
<option value="$PROJECT_DIR$/data_centre.py" />
|
<option value="$PROJECT_DIR$/data_centre.py" />
|
||||||
|
<option value="$PROJECT_DIR$/user_input/actions.py" />
|
||||||
|
<option value="$PROJECT_DIR$/display_centre/menu.py" />
|
||||||
|
<option value="$PROJECT_DIR$/data_centre/data_centre.py" />
|
||||||
|
<option value="$PROJECT_DIR$/display_centre/message.py" />
|
||||||
|
<option value="$PROJECT_DIR$/README.md" />
|
||||||
|
<option value="$PROJECT_DIR$/user_input/numpad_input.py" />
|
||||||
|
<option value="$PROJECT_DIR$/r_e_c_u_r.py" />
|
||||||
|
<option value="$PROJECT_DIR$/display_centre/messages.py" />
|
||||||
|
<option value="$PROJECT_DIR$/video_centre/video_driver.py" />
|
||||||
|
<option value="$PROJECT_DIR$/data_centre/browser_data.py" />
|
||||||
|
<option value="$PROJECT_DIR$/actions.py" />
|
||||||
<option value="$PROJECT_DIR$/video_centre/video_player.py" />
|
<option value="$PROJECT_DIR$/video_centre/video_player.py" />
|
||||||
|
<option value="$PROJECT_DIR$/data_centre/data.py" />
|
||||||
<option value="$PROJECT_DIR$/display_centre/display.py" />
|
<option value="$PROJECT_DIR$/display_centre/display.py" />
|
||||||
</list>
|
</list>
|
||||||
</option>
|
</option>
|
||||||
@@ -204,7 +255,7 @@
|
|||||||
<foldersAlwaysOnTop value="true" />
|
<foldersAlwaysOnTop value="true" />
|
||||||
</navigator>
|
</navigator>
|
||||||
<panes>
|
<panes>
|
||||||
<pane id="Scope" />
|
<pane id="Scratches" />
|
||||||
<pane id="ProjectPane">
|
<pane id="ProjectPane">
|
||||||
<subPane>
|
<subPane>
|
||||||
<expand>
|
<expand>
|
||||||
@@ -215,18 +266,19 @@
|
|||||||
<path>
|
<path>
|
||||||
<item name="r_e_c_u_r" type="b2602c69:ProjectViewProjectNode" />
|
<item name="r_e_c_u_r" type="b2602c69:ProjectViewProjectNode" />
|
||||||
<item name="r_e_c_u_r" type="462c0819:PsiDirectoryNode" />
|
<item name="r_e_c_u_r" type="462c0819:PsiDirectoryNode" />
|
||||||
<item name="data_objects" type="462c0819:PsiDirectoryNode" />
|
<item name="data_centre" type="462c0819:PsiDirectoryNode" />
|
||||||
|
</path>
|
||||||
|
<path>
|
||||||
|
<item name="r_e_c_u_r" type="b2602c69:ProjectViewProjectNode" />
|
||||||
|
<item name="r_e_c_u_r" type="462c0819:PsiDirectoryNode" />
|
||||||
|
<item name="data_centre" type="462c0819:PsiDirectoryNode" />
|
||||||
|
<item name="json_objects" type="462c0819:PsiDirectoryNode" />
|
||||||
</path>
|
</path>
|
||||||
<path>
|
<path>
|
||||||
<item name="r_e_c_u_r" type="b2602c69:ProjectViewProjectNode" />
|
<item name="r_e_c_u_r" type="b2602c69:ProjectViewProjectNode" />
|
||||||
<item name="r_e_c_u_r" type="462c0819:PsiDirectoryNode" />
|
<item name="r_e_c_u_r" type="462c0819:PsiDirectoryNode" />
|
||||||
<item name="display_centre" type="462c0819:PsiDirectoryNode" />
|
<item name="display_centre" type="462c0819:PsiDirectoryNode" />
|
||||||
</path>
|
</path>
|
||||||
<path>
|
|
||||||
<item name="r_e_c_u_r" type="b2602c69:ProjectViewProjectNode" />
|
|
||||||
<item name="r_e_c_u_r" type="462c0819:PsiDirectoryNode" />
|
|
||||||
<item name="user_input" type="462c0819:PsiDirectoryNode" />
|
|
||||||
</path>
|
|
||||||
<path>
|
<path>
|
||||||
<item name="r_e_c_u_r" type="b2602c69:ProjectViewProjectNode" />
|
<item name="r_e_c_u_r" type="b2602c69:ProjectViewProjectNode" />
|
||||||
<item name="r_e_c_u_r" type="462c0819:PsiDirectoryNode" />
|
<item name="r_e_c_u_r" type="462c0819:PsiDirectoryNode" />
|
||||||
@@ -236,22 +288,23 @@
|
|||||||
<select />
|
<select />
|
||||||
</subPane>
|
</subPane>
|
||||||
</pane>
|
</pane>
|
||||||
<pane id="Scratches" />
|
<pane id="Scope" />
|
||||||
</panes>
|
</panes>
|
||||||
</component>
|
</component>
|
||||||
<component name="PropertiesComponent">
|
<component name="PropertiesComponent">
|
||||||
<property name="last_opened_file_path" value="$PROJECT_DIR$/display_centre/display.py" />
|
<property name="last_opened_file_path" value="$PROJECT_DIR$/data_centre/browser_data.py" />
|
||||||
<property name="settings.editor.selected.configurable" value="configurable.group.tools" />
|
<property name="settings.editor.selected.configurable" value="configurable.group.tools" />
|
||||||
</component>
|
</component>
|
||||||
<component name="RecentsManager">
|
<component name="RecentsManager">
|
||||||
<key name="CopyFile.RECENT_KEYS">
|
|
||||||
<recent name="C:\r_e_c_u_r\data_objects" />
|
|
||||||
</key>
|
|
||||||
<key name="MoveFile.RECENT_KEYS">
|
<key name="MoveFile.RECENT_KEYS">
|
||||||
|
<recent name="C:\r_e_c_u_r\data_centre" />
|
||||||
|
<recent name="C:\r_e_c_u_r\data_objects" />
|
||||||
|
<recent name="C:\r_e_c_u_r" />
|
||||||
<recent name="C:\r_e_c_u_r\user_input\" />
|
<recent name="C:\r_e_c_u_r\user_input\" />
|
||||||
<recent name="C:\r_e_c_u_r\scripts" />
|
<recent name="C:\r_e_c_u_r\scripts" />
|
||||||
<recent name="C:\r_e_c_u_r\data_objects\" />
|
</key>
|
||||||
<recent name="C:\r_e_c_u_r\video_centre" />
|
<key name="CopyFile.RECENT_KEYS">
|
||||||
|
<recent name="C:\r_e_c_u_r\data_objects" />
|
||||||
</key>
|
</key>
|
||||||
</component>
|
</component>
|
||||||
<component name="RunDashboard">
|
<component name="RunDashboard">
|
||||||
@@ -396,11 +449,113 @@
|
|||||||
</component>
|
</component>
|
||||||
<component name="XDebuggerManager">
|
<component name="XDebuggerManager">
|
||||||
<breakpoint-manager>
|
<breakpoint-manager>
|
||||||
<option name="time" value="3" />
|
<option name="time" value="5" />
|
||||||
</breakpoint-manager>
|
</breakpoint-manager>
|
||||||
<watches-manager />
|
<watches-manager />
|
||||||
</component>
|
</component>
|
||||||
<component name="editorHistoryManager">
|
<component name="editorHistoryManager">
|
||||||
|
<entry file="file://$PROJECT_DIR$/r_e_c_u_r.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="225">
|
||||||
|
<caret line="17" column="20" lean-forward="false" selection-start-line="17" selection-start-column="20" selection-end-line="17" selection-end-column="20" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#16#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/user_input/numpad_input.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="1350">
|
||||||
|
<caret line="54" column="26" lean-forward="false" selection-start-line="54" selection-start-column="18" selection-end-line="54" selection-end-column="26" />
|
||||||
|
<folding />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/display_centre/display.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="2700">
|
||||||
|
<caret line="192" column="42" lean-forward="true" selection-start-line="192" selection-start-column="42" selection-end-line="192" selection-end-column="42" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#29#0" expanded="true" />
|
||||||
|
<element signature="e#837#898#0" expanded="false" />
|
||||||
|
<element signature="e#933#1579#0" expanded="false" />
|
||||||
|
<element signature="e#1797#1935#0" expanded="false" />
|
||||||
|
<element signature="e#1973#2361#0" expanded="false" />
|
||||||
|
<element signature="e#2405#2852#0" expanded="false" />
|
||||||
|
<element signature="e#3284#3533#0" expanded="false" />
|
||||||
|
<element signature="e#3775#4623#0" expanded="false" />
|
||||||
|
<element signature="e#4663#5519#0" expanded="false" />
|
||||||
|
<element signature="e#5558#6144#0" expanded="false" />
|
||||||
|
<element signature="e#5614#5920#0" expanded="false" />
|
||||||
|
<element signature="e#6194#6331#0" expanded="false" />
|
||||||
|
<element signature="e#6383#6526#0" expanded="false" />
|
||||||
|
<element signature="e#6572#7087#0" expanded="false" />
|
||||||
|
<element signature="e#6925#7087#0" expanded="false" />
|
||||||
|
<element signature="e#7182#7845#0" expanded="false" />
|
||||||
|
<element signature="e#7196#7453#0" expanded="false" />
|
||||||
|
<element signature="e#7898#7982#0" expanded="false" />
|
||||||
|
<element signature="e#8023#8229#0" expanded="false" />
|
||||||
|
<element signature="e#8306#9464#0" expanded="false" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/video_centre/video_driver.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="1825">
|
||||||
|
<caret line="74" column="21" lean-forward="false" selection-start-line="74" selection-start-column="21" selection-end-line="74" selection-end-column="21" />
|
||||||
|
<folding />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/data_centre/data.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="1975">
|
||||||
|
<caret line="102" column="37" lean-forward="false" selection-start-line="102" selection-start-column="29" selection-end-line="102" selection-end-column="37" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#11#0" expanded="true" />
|
||||||
|
<element signature="e#2087#2270#0" expanded="false" />
|
||||||
|
<element signature="e#2659#2709#0" expanded="false" />
|
||||||
|
<element signature="e#3319#3350#0" expanded="false" />
|
||||||
|
<element signature="e#3406#3438#0" expanded="false" />
|
||||||
|
<element signature="e#5383#5585#0" expanded="false" />
|
||||||
|
<element signature="e#5652#6805#0" expanded="false" />
|
||||||
|
<element signature="e#7808#8385#0" expanded="false" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/data_centre/json_objects/display_data.json">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="1550">
|
||||||
|
<caret line="62" column="25" lean-forward="true" selection-start-line="62" selection-start-column="25" selection-end-line="62" selection-end-column="25" />
|
||||||
|
<folding />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/video_centre/video_player.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="3150">
|
||||||
|
<caret line="126" column="14" lean-forward="false" selection-start-line="126" selection-start-column="14" selection-end-line="126" selection-end-column="14" />
|
||||||
|
<folding />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/actions.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="375">
|
||||||
|
<caret line="15" column="35" lean-forward="false" selection-start-line="15" selection-start-column="35" selection-end-line="15" selection-end-column="35" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#633#1022#0" expanded="false" />
|
||||||
|
<element signature="e#1507#1534#0" expanded="false" />
|
||||||
|
<element signature="e#1576#1680#0" expanded="false" />
|
||||||
|
<element signature="e#1743#1819#0" expanded="false" />
|
||||||
|
<element signature="e#1864#1900#0" expanded="false" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/r_e_c_u_r.py">
|
<entry file="file://$PROJECT_DIR$/r_e_c_u_r.py">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="200">
|
<state relative-caret-position="200">
|
||||||
@@ -417,27 +572,39 @@
|
|||||||
<caret line="23" column="47" lean-forward="false" selection-start-line="23" selection-start-column="47" selection-end-line="23" selection-end-column="47" />
|
<caret line="23" column="47" lean-forward="false" selection-start-line="23" selection-start-column="47" selection-end-line="23" selection-end-column="47" />
|
||||||
<folding>
|
<folding>
|
||||||
<element signature="e#0#29#0" expanded="true" />
|
<element signature="e#0#29#0" expanded="true" />
|
||||||
<element signature="e#8427#8619#0" expanded="false" />
|
<element signature="e#837#898#0" expanded="false" />
|
||||||
<element signature="e#8662#9090#0" expanded="false" />
|
<element signature="e#933#1579#0" expanded="false" />
|
||||||
<element signature="e#9131#9452#0" expanded="false" />
|
<element signature="e#1797#1935#0" expanded="false" />
|
||||||
<element signature="e#9491#9935#0" expanded="false" />
|
<element signature="e#1973#2361#0" expanded="false" />
|
||||||
<element signature="e#10459#10788#0" expanded="false" />
|
<element signature="e#2405#2852#0" expanded="false" />
|
||||||
<element signature="e#10828#10904#0" expanded="false" />
|
<element signature="e#3284#3533#0" expanded="false" />
|
||||||
|
<element signature="e#3775#4623#0" expanded="false" />
|
||||||
|
<element signature="e#4663#5519#0" expanded="false" />
|
||||||
|
<element signature="e#5558#6144#0" expanded="false" />
|
||||||
|
<element signature="e#5614#5920#0" expanded="false" />
|
||||||
|
<element signature="e#6194#6331#0" expanded="false" />
|
||||||
|
<element signature="e#6383#6526#0" expanded="false" />
|
||||||
|
<element signature="e#6572#7087#0" expanded="false" />
|
||||||
|
<element signature="e#6925#7087#0" expanded="false" />
|
||||||
|
<element signature="e#7182#7845#0" expanded="false" />
|
||||||
|
<element signature="e#7196#7453#0" expanded="false" />
|
||||||
|
<element signature="e#7898#7982#0" expanded="false" />
|
||||||
|
<element signature="e#8023#8229#0" expanded="false" />
|
||||||
|
<element signature="e#8306#9464#0" expanded="false" />
|
||||||
</folding>
|
</folding>
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/user_input/actions.py">
|
<entry file="file://$PROJECT_DIR$/actions.py">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="675">
|
<state relative-caret-position="675">
|
||||||
<caret line="30" column="0" lean-forward="false" selection-start-line="30" selection-start-column="0" selection-end-line="30" selection-end-column="0" />
|
<caret line="30" column="0" lean-forward="false" selection-start-line="30" selection-start-column="0" selection-end-line="30" selection-end-column="0" />
|
||||||
<folding>
|
<folding>
|
||||||
<element signature="e#240#272#0" expanded="false" />
|
<element signature="e#633#1022#0" expanded="false" />
|
||||||
<element signature="e#748#777#0" expanded="false" />
|
<element signature="e#1507#1534#0" expanded="false" />
|
||||||
<element signature="e#819#923#0" expanded="false" />
|
<element signature="e#1576#1680#0" expanded="false" />
|
||||||
<element signature="e#986#1074#0" expanded="false" />
|
<element signature="e#1743#1819#0" expanded="false" />
|
||||||
<element signature="e#1119#1155#0" expanded="false" />
|
<element signature="e#1864#1900#0" expanded="false" />
|
||||||
<element signature="e#1199#1497#0" expanded="false" />
|
|
||||||
</folding>
|
</folding>
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
@@ -446,9 +613,7 @@
|
|||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="300">
|
<state relative-caret-position="300">
|
||||||
<caret line="12" column="22" lean-forward="false" selection-start-line="12" selection-start-column="22" selection-end-line="12" selection-end-column="22" />
|
<caret line="12" column="22" lean-forward="false" selection-start-line="12" selection-start-column="22" selection-end-line="12" selection-end-column="22" />
|
||||||
<folding>
|
<folding />
|
||||||
<element signature="e#0#18#0" expanded="true" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
@@ -460,39 +625,19 @@
|
|||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/data_centre.py">
|
<entry file="file://$PROJECT_DIR$/data_centre/data.py">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="5400">
|
<state relative-caret-position="5400">
|
||||||
<caret line="222" column="4" lean-forward="false" selection-start-line="222" selection-start-column="4" selection-end-line="222" selection-end-column="4" />
|
<caret line="222" column="4" lean-forward="false" selection-start-line="222" selection-start-column="4" selection-end-line="222" selection-end-column="4" />
|
||||||
<folding>
|
<folding>
|
||||||
<element signature="e#0#11#0" expanded="true" />
|
<element signature="e#0#11#0" expanded="true" />
|
||||||
<element signature="e#791#900#0" expanded="false" />
|
<element signature="e#2087#2270#0" expanded="false" />
|
||||||
<element signature="e#939#1050#0" expanded="false" />
|
<element signature="e#2659#2709#0" expanded="false" />
|
||||||
<element signature="e#1112#1288#0" expanded="false" />
|
<element signature="e#3319#3350#0" expanded="false" />
|
||||||
<element signature="e#1402#1553#0" expanded="false" />
|
<element signature="e#3406#3438#0" expanded="false" />
|
||||||
<element signature="e#1580#1910#0" expanded="false" />
|
<element signature="e#5383#5585#0" expanded="false" />
|
||||||
<element signature="e#1943#1983#0" expanded="false" />
|
<element signature="e#5652#6805#0" expanded="false" />
|
||||||
<element signature="e#2375#3326#0" expanded="false" />
|
<element signature="e#7808#8385#0" expanded="false" />
|
||||||
<element signature="e#3407#3999#0" expanded="false" />
|
|
||||||
<element signature="e#4083#5027#0" expanded="false" />
|
|
||||||
<element signature="e#5087#5253#0" expanded="false" />
|
|
||||||
<element signature="e#5321#5546#0" expanded="false" />
|
|
||||||
<element signature="e#5607#5884#0" expanded="false" />
|
|
||||||
<element signature="e#6004#6303#0" expanded="false" />
|
|
||||||
<element signature="e#6376#6693#0" expanded="false" />
|
|
||||||
<element signature="e#6734#6773#0" expanded="false" />
|
|
||||||
<element signature="e#6813#7057#0" expanded="false" />
|
|
||||||
<element signature="e#7128#7346#0" expanded="false" />
|
|
||||||
<element signature="e#7375#7546#0" expanded="false" />
|
|
||||||
<element signature="e#7639#8116#0" expanded="false" />
|
|
||||||
<element signature="e#8211#8494#0" expanded="false" />
|
|
||||||
<element signature="e#8536#8838#0" expanded="false" />
|
|
||||||
<element signature="e#8878#9917#0" expanded="false" />
|
|
||||||
<element signature="e#9997#11105#0" expanded="false" />
|
|
||||||
<element signature="e#11152#11910#0" expanded="false" />
|
|
||||||
<element signature="e#11997#12533#0" expanded="false" />
|
|
||||||
<element signature="e#12579#12838#0" expanded="false" />
|
|
||||||
<element signature="e#12878#13028#0" expanded="false" />
|
|
||||||
</folding>
|
</folding>
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
@@ -529,27 +674,39 @@
|
|||||||
<caret line="23" column="47" lean-forward="true" selection-start-line="23" selection-start-column="47" selection-end-line="23" selection-end-column="47" />
|
<caret line="23" column="47" lean-forward="true" selection-start-line="23" selection-start-column="47" selection-end-line="23" selection-end-column="47" />
|
||||||
<folding>
|
<folding>
|
||||||
<element signature="e#0#29#0" expanded="true" />
|
<element signature="e#0#29#0" expanded="true" />
|
||||||
<element signature="e#8427#8619#0" expanded="false" />
|
<element signature="e#837#898#0" expanded="false" />
|
||||||
<element signature="e#8662#9090#0" expanded="false" />
|
<element signature="e#933#1579#0" expanded="false" />
|
||||||
<element signature="e#9131#9452#0" expanded="false" />
|
<element signature="e#1797#1935#0" expanded="false" />
|
||||||
<element signature="e#9491#9935#0" expanded="false" />
|
<element signature="e#1973#2361#0" expanded="false" />
|
||||||
<element signature="e#10459#10788#0" expanded="false" />
|
<element signature="e#2405#2852#0" expanded="false" />
|
||||||
<element signature="e#10828#10904#0" expanded="false" />
|
<element signature="e#3284#3533#0" expanded="false" />
|
||||||
|
<element signature="e#3775#4623#0" expanded="false" />
|
||||||
|
<element signature="e#4663#5519#0" expanded="false" />
|
||||||
|
<element signature="e#5558#6144#0" expanded="false" />
|
||||||
|
<element signature="e#5614#5920#0" expanded="false" />
|
||||||
|
<element signature="e#6194#6331#0" expanded="false" />
|
||||||
|
<element signature="e#6383#6526#0" expanded="false" />
|
||||||
|
<element signature="e#6572#7087#0" expanded="false" />
|
||||||
|
<element signature="e#6925#7087#0" expanded="false" />
|
||||||
|
<element signature="e#7182#7845#0" expanded="false" />
|
||||||
|
<element signature="e#7196#7453#0" expanded="false" />
|
||||||
|
<element signature="e#7898#7982#0" expanded="false" />
|
||||||
|
<element signature="e#8023#8229#0" expanded="false" />
|
||||||
|
<element signature="e#8306#9464#0" expanded="false" />
|
||||||
</folding>
|
</folding>
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/user_input/actions.py">
|
<entry file="file://$PROJECT_DIR$/actions.py">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="675">
|
<state relative-caret-position="675">
|
||||||
<caret line="30" column="0" lean-forward="true" selection-start-line="30" selection-start-column="0" selection-end-line="30" selection-end-column="0" />
|
<caret line="30" column="0" lean-forward="true" selection-start-line="30" selection-start-column="0" selection-end-line="30" selection-end-column="0" />
|
||||||
<folding>
|
<folding>
|
||||||
<element signature="e#240#272#0" expanded="false" />
|
<element signature="e#633#1022#0" expanded="false" />
|
||||||
<element signature="e#748#777#0" expanded="false" />
|
<element signature="e#1507#1534#0" expanded="false" />
|
||||||
<element signature="e#819#923#0" expanded="false" />
|
<element signature="e#1576#1680#0" expanded="false" />
|
||||||
<element signature="e#986#1074#0" expanded="false" />
|
<element signature="e#1743#1819#0" expanded="false" />
|
||||||
<element signature="e#1119#1155#0" expanded="false" />
|
<element signature="e#1864#1900#0" expanded="false" />
|
||||||
<element signature="e#1199#1497#0" expanded="false" />
|
|
||||||
</folding>
|
</folding>
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
@@ -558,9 +715,7 @@
|
|||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="300">
|
<state relative-caret-position="300">
|
||||||
<caret line="12" column="22" lean-forward="true" selection-start-line="12" selection-start-column="22" selection-end-line="12" selection-end-column="22" />
|
<caret line="12" column="22" lean-forward="true" selection-start-line="12" selection-start-column="22" selection-end-line="12" selection-end-column="22" />
|
||||||
<folding>
|
<folding />
|
||||||
<element signature="e#0#18#0" expanded="true" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
@@ -572,39 +727,19 @@
|
|||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/data_centre.py">
|
<entry file="file://$PROJECT_DIR$/data_centre/data.py">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="5400">
|
<state relative-caret-position="5400">
|
||||||
<caret line="222" column="4" lean-forward="false" selection-start-line="222" selection-start-column="4" selection-end-line="222" selection-end-column="4" />
|
<caret line="222" column="4" lean-forward="false" selection-start-line="222" selection-start-column="4" selection-end-line="222" selection-end-column="4" />
|
||||||
<folding>
|
<folding>
|
||||||
<element signature="e#0#11#0" expanded="true" />
|
<element signature="e#0#11#0" expanded="true" />
|
||||||
<element signature="e#791#900#0" expanded="false" />
|
<element signature="e#2087#2270#0" expanded="false" />
|
||||||
<element signature="e#939#1050#0" expanded="false" />
|
<element signature="e#2659#2709#0" expanded="false" />
|
||||||
<element signature="e#1112#1288#0" expanded="false" />
|
<element signature="e#3319#3350#0" expanded="false" />
|
||||||
<element signature="e#1402#1553#0" expanded="false" />
|
<element signature="e#3406#3438#0" expanded="false" />
|
||||||
<element signature="e#1580#1910#0" expanded="false" />
|
<element signature="e#5383#5585#0" expanded="false" />
|
||||||
<element signature="e#1943#1983#0" expanded="false" />
|
<element signature="e#5652#6805#0" expanded="false" />
|
||||||
<element signature="e#2375#3326#0" expanded="false" />
|
<element signature="e#7808#8385#0" expanded="false" />
|
||||||
<element signature="e#3407#3999#0" expanded="false" />
|
|
||||||
<element signature="e#4083#5027#0" expanded="false" />
|
|
||||||
<element signature="e#5087#5253#0" expanded="false" />
|
|
||||||
<element signature="e#5321#5546#0" expanded="false" />
|
|
||||||
<element signature="e#5607#5884#0" expanded="false" />
|
|
||||||
<element signature="e#6004#6303#0" expanded="false" />
|
|
||||||
<element signature="e#6376#6693#0" expanded="false" />
|
|
||||||
<element signature="e#6734#6773#0" expanded="false" />
|
|
||||||
<element signature="e#6813#7057#0" expanded="false" />
|
|
||||||
<element signature="e#7128#7346#0" expanded="false" />
|
|
||||||
<element signature="e#7375#7546#0" expanded="false" />
|
|
||||||
<element signature="e#7639#8116#0" expanded="false" />
|
|
||||||
<element signature="e#8211#8494#0" expanded="false" />
|
|
||||||
<element signature="e#8536#8838#0" expanded="false" />
|
|
||||||
<element signature="e#8878#9917#0" expanded="false" />
|
|
||||||
<element signature="e#9997#11105#0" expanded="false" />
|
|
||||||
<element signature="e#11152#11910#0" expanded="false" />
|
|
||||||
<element signature="e#11997#12533#0" expanded="false" />
|
|
||||||
<element signature="e#12579#12838#0" expanded="false" />
|
|
||||||
<element signature="e#12878#13028#0" expanded="false" />
|
|
||||||
</folding>
|
</folding>
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
@@ -645,24 +780,23 @@
|
|||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/data_objects/key_map_old.json" />
|
<entry file="file://$PROJECT_DIR$/data_objects/key_map_old.json" />
|
||||||
<entry file="file://$PROJECT_DIR$/data_objects/key_map.json">
|
<entry file="file://$PROJECT_DIR$/data_centre/json_objects/key_map.json">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="25">
|
<state relative-caret-position="25">
|
||||||
<caret line="1" column="9" lean-forward="false" selection-start-line="1" selection-start-column="9" selection-end-line="1" selection-end-column="9" />
|
<caret line="1" column="9" lean-forward="false" selection-start-line="1" selection-start-column="9" selection-end-line="1" selection-end-column="9" />
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/user_input/actions.py">
|
<entry file="file://$PROJECT_DIR$/actions.py">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="234">
|
<state relative-caret-position="234">
|
||||||
<caret line="17" column="67" lean-forward="false" selection-start-line="17" selection-start-column="67" selection-end-line="17" selection-end-column="67" />
|
<caret line="17" column="67" lean-forward="false" selection-start-line="17" selection-start-column="67" selection-end-line="17" selection-end-column="67" />
|
||||||
<folding>
|
<folding>
|
||||||
<element signature="e#240#272#0" expanded="false" />
|
<element signature="e#633#1022#0" expanded="false" />
|
||||||
<element signature="e#748#777#0" expanded="false" />
|
<element signature="e#1507#1534#0" expanded="false" />
|
||||||
<element signature="e#819#923#0" expanded="false" />
|
<element signature="e#1576#1680#0" expanded="false" />
|
||||||
<element signature="e#986#1074#0" expanded="false" />
|
<element signature="e#1743#1819#0" expanded="false" />
|
||||||
<element signature="e#1119#1155#0" expanded="false" />
|
<element signature="e#1864#1900#0" expanded="false" />
|
||||||
<element signature="e#1199#1497#0" expanded="false" />
|
|
||||||
</folding>
|
</folding>
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
@@ -674,129 +808,159 @@
|
|||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/data_objects/path_to_browser.json">
|
<entry file="file://$PROJECT_DIR$/data_centre/json_objects/path_to_browser.json">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="0">
|
<state relative-caret-position="0">
|
||||||
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
|
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/data_objects/display_data.json">
|
<entry file="file://$PROJECT_DIR$/data_centre/json_objects/display_data.json">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="447">
|
<state relative-caret-position="1550">
|
||||||
<caret line="62" column="25" lean-forward="true" selection-start-line="62" selection-start-column="25" selection-end-line="62" selection-end-column="25" />
|
<caret line="62" column="25" lean-forward="true" selection-start-line="62" selection-start-column="25" selection-end-line="62" selection-end-column="25" />
|
||||||
<folding />
|
<folding />
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/user_input/numpad_input.py">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="672">
|
|
||||||
<caret line="32" column="38" lean-forward="false" selection-start-line="32" selection-start-column="38" selection-end-line="32" selection-end-column="38" />
|
|
||||||
<folding />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://C:/Program Files (x86)/Python36-32/Lib/tkinter/__init__.py">
|
<entry file="file://C:/Program Files (x86)/Python36-32/Lib/tkinter/__init__.py">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="169">
|
<state relative-caret-position="169">
|
||||||
<caret line="610" column="28" lean-forward="false" selection-start-line="610" selection-start-column="22" selection-end-line="610" selection-end-column="28" />
|
<caret line="610" column="28" lean-forward="false" selection-start-line="610" selection-start-column="22" selection-end-line="610" selection-end-column="28" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/display_centre/menu.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="0">
|
||||||
|
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
|
||||||
|
<folding />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/README.md">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="25">
|
||||||
|
<caret line="1" column="12" lean-forward="false" selection-start-line="1" selection-start-column="12" selection-end-line="1" selection-end-column="12" />
|
||||||
|
<folding />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/user_input/numpad_input.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="335">
|
||||||
|
<caret line="52" column="50" lean-forward="false" selection-start-line="52" selection-start-column="50" selection-end-line="52" selection-end-column="50" />
|
||||||
<folding />
|
<folding />
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/video_centre/video_driver.py">
|
<entry file="file://$PROJECT_DIR$/video_centre/video_driver.py">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="866">
|
<state relative-caret-position="50">
|
||||||
<caret line="70" column="42" lean-forward="false" selection-start-line="70" selection-start-column="42" selection-end-line="70" selection-end-column="42" />
|
<caret line="2" column="0" lean-forward="true" selection-start-line="2" selection-start-column="0" selection-end-line="2" selection-end-column="0" />
|
||||||
<folding>
|
|
||||||
<element signature="e#0#18#0" expanded="true" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/user_input/actions.py">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="299">
|
|
||||||
<caret line="55" column="42" lean-forward="true" selection-start-line="55" selection-start-column="42" selection-end-line="55" selection-end-column="42" />
|
|
||||||
<folding>
|
|
||||||
<element signature="e#240#272#0" expanded="false" />
|
|
||||||
<element signature="e#748#777#0" expanded="false" />
|
|
||||||
<element signature="e#819#923#0" expanded="false" />
|
|
||||||
<element signature="e#986#1074#0" expanded="false" />
|
|
||||||
<element signature="e#1119#1155#0" expanded="false" />
|
|
||||||
<element signature="e#1199#1497#0" expanded="false" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/video_centre/video_player.py">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="358">
|
|
||||||
<caret line="106" column="80" lean-forward="true" selection-start-line="106" selection-start-column="80" selection-end-line="106" selection-end-column="80" />
|
|
||||||
<folding />
|
<folding />
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/data_centre.py">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="265">
|
|
||||||
<caret line="26" column="26" lean-forward="true" selection-start-line="26" selection-start-column="26" selection-end-line="26" selection-end-column="26" />
|
|
||||||
<folding>
|
|
||||||
<element signature="e#0#11#0" expanded="true" />
|
|
||||||
<element signature="e#791#900#0" expanded="false" />
|
|
||||||
<element signature="e#939#1050#0" expanded="false" />
|
|
||||||
<element signature="e#1112#1288#0" expanded="false" />
|
|
||||||
<element signature="e#1402#1553#0" expanded="false" />
|
|
||||||
<element signature="e#1580#1910#0" expanded="false" />
|
|
||||||
<element signature="e#1943#1983#0" expanded="false" />
|
|
||||||
<element signature="e#2375#3326#0" expanded="false" />
|
|
||||||
<element signature="e#3407#3999#0" expanded="false" />
|
|
||||||
<element signature="e#4083#5027#0" expanded="false" />
|
|
||||||
<element signature="e#5087#5253#0" expanded="false" />
|
|
||||||
<element signature="e#5321#5546#0" expanded="false" />
|
|
||||||
<element signature="e#5607#5884#0" expanded="false" />
|
|
||||||
<element signature="e#6004#6303#0" expanded="false" />
|
|
||||||
<element signature="e#6376#6693#0" expanded="false" />
|
|
||||||
<element signature="e#6734#6773#0" expanded="false" />
|
|
||||||
<element signature="e#6813#7057#0" expanded="false" />
|
|
||||||
<element signature="e#7128#7346#0" expanded="false" />
|
|
||||||
<element signature="e#7375#7546#0" expanded="false" />
|
|
||||||
<element signature="e#7639#8116#0" expanded="false" />
|
|
||||||
<element signature="e#8211#8494#0" expanded="false" />
|
|
||||||
<element signature="e#8536#8838#0" expanded="false" />
|
|
||||||
<element signature="e#8878#9917#0" expanded="false" />
|
|
||||||
<element signature="e#9997#11105#0" expanded="false" />
|
|
||||||
<element signature="e#11152#11910#0" expanded="false" />
|
|
||||||
<element signature="e#11997#12533#0" expanded="false" />
|
|
||||||
<element signature="e#12579#12838#0" expanded="false" />
|
|
||||||
<element signature="e#12878#13028#0" expanded="false" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/r_e_c_u_r.py">
|
<entry file="file://$PROJECT_DIR$/r_e_c_u_r.py">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="275">
|
<state relative-caret-position="1000">
|
||||||
<caret line="17" column="20" lean-forward="false" selection-start-line="17" selection-start-column="20" selection-end-line="17" selection-end-column="20" />
|
<caret line="40" column="7" lean-forward="true" selection-start-line="40" selection-start-column="7" selection-end-line="40" selection-end-column="7" />
|
||||||
<folding>
|
<folding>
|
||||||
<element signature="e#0#16#0" expanded="true" />
|
<element signature="e#0#16#0" expanded="true" />
|
||||||
</folding>
|
</folding>
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/display_centre/display.py">
|
<entry file="file://$PROJECT_DIR$/video_centre/video_player.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="334">
|
||||||
|
<caret line="124" column="34" lean-forward="true" selection-start-line="124" selection-start-column="34" selection-end-line="124" selection-end-column="34" />
|
||||||
|
<folding />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/display_centre/messages.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="500">
|
||||||
|
<caret line="20" column="19" lean-forward="false" selection-start-line="20" selection-start-column="8" selection-end-line="20" selection-end-column="19" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#14#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/data_centre/browser_data.py">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="175">
|
<state relative-caret-position="175">
|
||||||
<caret line="87" column="21" lean-forward="false" selection-start-line="87" selection-start-column="21" selection-end-line="87" selection-end-column="21" />
|
<caret line="7" column="30" lean-forward="true" selection-start-line="7" selection-start-column="30" selection-end-line="7" selection-end-column="30" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#9#0" expanded="true" />
|
||||||
|
<element signature="e#350#504#0" expanded="false" />
|
||||||
|
<element signature="e#1322#1553#0" expanded="false" />
|
||||||
|
<element signature="e#1635#2579#0" expanded="false" />
|
||||||
|
<element signature="e#2637#2818#0" expanded="false" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/data_centre/data.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="-281">
|
||||||
|
<caret line="189" column="42" lean-forward="false" selection-start-line="189" selection-start-column="29" selection-end-line="189" selection-end-column="42" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#11#0" expanded="true" />
|
||||||
|
<element signature="e#2087#2270#0" expanded="false" />
|
||||||
|
<element signature="e#2659#2709#0" expanded="false" />
|
||||||
|
<element signature="e#3319#3350#0" expanded="false" />
|
||||||
|
<element signature="e#3406#3438#0" expanded="false" />
|
||||||
|
<element signature="e#5383#5585#0" expanded="false" />
|
||||||
|
<element signature="e#5652#6805#0" expanded="false" />
|
||||||
|
<element signature="e#7808#8385#0" expanded="false" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/display_centre/display.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="1350">
|
||||||
|
<caret line="82" column="40" lean-forward="false" selection-start-line="82" selection-start-column="40" selection-end-line="82" selection-end-column="40" />
|
||||||
<folding>
|
<folding>
|
||||||
<element signature="e#0#29#0" expanded="true" />
|
<element signature="e#0#29#0" expanded="true" />
|
||||||
<element signature="e#8427#8619#0" expanded="false" />
|
<element signature="e#837#898#0" expanded="false" />
|
||||||
<element signature="e#8662#9090#0" expanded="false" />
|
<element signature="e#933#1579#0" expanded="false" />
|
||||||
<element signature="e#9131#9452#0" expanded="false" />
|
<element signature="e#1618#1760#0" expanded="false" />
|
||||||
<element signature="e#9491#9935#0" expanded="false" />
|
<element signature="e#1797#1935#0" expanded="false" />
|
||||||
<element signature="e#10459#10788#0" expanded="false" />
|
<element signature="e#1973#2361#0" expanded="false" />
|
||||||
<element signature="e#10828#10904#0" expanded="false" />
|
<element signature="e#3775#4623#0" expanded="false" />
|
||||||
|
<element signature="e#4663#5519#0" expanded="false" />
|
||||||
|
<element signature="e#5558#6144#0" expanded="false" />
|
||||||
|
<element signature="e#6194#6331#0" expanded="false" />
|
||||||
|
<element signature="e#6383#6526#0" expanded="false" />
|
||||||
|
<element signature="e#6572#7087#0" expanded="false" />
|
||||||
|
<element signature="e#6925#7087#0" expanded="false" />
|
||||||
|
<element signature="e#7182#7845#0" expanded="false" />
|
||||||
|
<element signature="e#7196#7453#0" expanded="false" />
|
||||||
|
<element signature="e#7898#7982#0" expanded="false" />
|
||||||
|
<element signature="e#8023#8229#0" expanded="false" />
|
||||||
|
<element signature="e#8306#9464#0" expanded="false" />
|
||||||
|
<element signature="e#9536#9732#0" expanded="false" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/actions.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="282">
|
||||||
|
<caret line="29" column="73" lean-forward="false" selection-start-line="29" selection-start-column="60" selection-end-line="29" selection-end-column="73" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#315#424#0" expanded="false" />
|
||||||
|
<element signature="e#475#580#0" expanded="false" />
|
||||||
|
<element signature="e#633#1022#0" expanded="false" />
|
||||||
|
<element signature="e#1239#1346#0" expanded="false" />
|
||||||
|
<element signature="e#1576#1680#0" expanded="false" />
|
||||||
|
<element signature="e#1743#1819#0" expanded="false" />
|
||||||
|
<element signature="e#1864#1900#0" expanded="false" />
|
||||||
</folding>
|
</folding>
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# r_e_c_u_r
|
# r_e_c_u_r
|
||||||
a diy videolooper for py/pi
|
a diy video looper for py/pi
|
||||||
|
|
||||||
# things to do / bugs to fix:
|
# things to do / bugs to fix:
|
||||||
|
|
||||||
|
|||||||
71
actions.py
Normal file
71
actions.py
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
class Actions(object):
|
||||||
|
def __init__(self, tk, message_handler, data, video_driver, display):
|
||||||
|
self.tk = tk
|
||||||
|
self.message_handler = message_handler
|
||||||
|
self.data = data
|
||||||
|
self.video_driver = video_driver
|
||||||
|
self.display = display
|
||||||
|
|
||||||
|
|
||||||
|
def move_browser_selection_down(self):
|
||||||
|
# self.display.move_browser_down()
|
||||||
|
self.display.navigate_menu('down', len(self.display.browser_list))
|
||||||
|
|
||||||
|
def move_browser_selection_up(self):
|
||||||
|
# self.display.move_browser_up()
|
||||||
|
self.display.navigate_menu('up', len(self.display.browser_list))
|
||||||
|
|
||||||
|
def enter_on_browser_selection(self):
|
||||||
|
|
||||||
|
is_file, name = self.data.browser_data.extract_file_type_and_name_from_browser_format(
|
||||||
|
self.data.browser_list[self.display.selected_list_index][0])
|
||||||
|
if is_file:
|
||||||
|
self.data.create_new_bank_mapping_in_first_open(name)
|
||||||
|
else:
|
||||||
|
self.data.browser_data.update_open_folders(name)
|
||||||
|
self.display.browser_list = self.data.rewrite_browser_list()
|
||||||
|
|
||||||
|
def move_settings_selection_down(self):
|
||||||
|
# self.display.move_settings_down()
|
||||||
|
self.display.navigate_menu('down', len(self.display.settings_list))
|
||||||
|
|
||||||
|
def move_settings_selection_up(self):
|
||||||
|
# self.display.move_settings_up()
|
||||||
|
self.display.navigate_menu('up', len(self.display.settings_list))
|
||||||
|
|
||||||
|
def enter_on_settings_selection(self):
|
||||||
|
self.data.switch_settings(self.display.selected_list_index)
|
||||||
|
|
||||||
|
def clear_all_sampler_slots(self):
|
||||||
|
self.data.clear_all_slots()
|
||||||
|
|
||||||
|
def quit_the_program(self):
|
||||||
|
if self.video_driver.has_omx:
|
||||||
|
self.video_driver.exit_all_players()
|
||||||
|
self.tk.destroy()
|
||||||
|
|
||||||
|
def load_this_slot_into_next_player(self, slot):
|
||||||
|
update_next_slot_number(slot)
|
||||||
|
self.video_driver.next_player.reload()
|
||||||
|
|
||||||
|
def trigger_next_player(self):
|
||||||
|
self.video_driver.manual_next = True
|
||||||
|
|
||||||
|
def cycle_display_mode(self):
|
||||||
|
self.display.topscreen_menu_index = 0
|
||||||
|
self.display.current_menu_index = self.display.topscreen_menu_index
|
||||||
|
if self.display.display_mode == "BROWSER":
|
||||||
|
self.display.display_mode = "SAMPLER"
|
||||||
|
elif self.display.display_mode == "SAMPLER":
|
||||||
|
self.display.display_mode = "SETTINGS"
|
||||||
|
elif self.display.display_mode == "SETTINGS":
|
||||||
|
self.display.display_mode = "BROWSER"
|
||||||
|
|
||||||
|
def toggle_pause_on_player(self):
|
||||||
|
self.video_driver.current_player.toggle_pause()
|
||||||
|
|
||||||
|
def seek_forward_on_player(self):
|
||||||
|
self.video_driver.current_player.seek(30)
|
||||||
|
|
||||||
|
def seek_back_on_player(self):
|
||||||
|
self.video_driver.current_player.seek(-30)
|
||||||
356
data_centre.py
356
data_centre.py
@@ -1,356 +0,0 @@
|
|||||||
import json
|
|
||||||
import logging
|
|
||||||
from collections import OrderedDict
|
|
||||||
import os
|
|
||||||
from random import randint
|
|
||||||
import time
|
|
||||||
import inspect
|
|
||||||
|
|
||||||
try:
|
|
||||||
from omxplayer.player import OMXPlayer
|
|
||||||
has_omx = True
|
|
||||||
except:
|
|
||||||
has_omx = False
|
|
||||||
print('data_centre has omx:{}'.format(has_omx))
|
|
||||||
|
|
||||||
|
|
||||||
current_message = [None, None, None]
|
|
||||||
number_of_messages = 0
|
|
||||||
|
|
||||||
def set_message(message_type,message ):
|
|
||||||
global current_message
|
|
||||||
global number_of_messages
|
|
||||||
current_message = [message_type, message,True]
|
|
||||||
number_of_messages = number_of_messages + 1
|
|
||||||
|
|
||||||
def clear_message():
|
|
||||||
global current_message
|
|
||||||
global number_of_messages
|
|
||||||
number_of_messages = number_of_messages - 1
|
|
||||||
if number_of_messages is 0:
|
|
||||||
current_message = [None, None, None]
|
|
||||||
|
|
||||||
######## sets names for the persistant data objects ########
|
|
||||||
NEXT_BANK_JSON = 'next_bank_number.json'
|
|
||||||
SETTINGS_JSON = 'settings.json'
|
|
||||||
BANK_DATA_JSON = 'display_data.json'
|
|
||||||
|
|
||||||
####<<<< generic methods for all tabs >>>>#####
|
|
||||||
|
|
||||||
def read_json(file_name):
|
|
||||||
with open(PATH_TO_DATA_OBJECTS + file_name) as data_file:
|
|
||||||
data = json.load(data_file)
|
|
||||||
return data
|
|
||||||
|
|
||||||
def update_json(file_name,data):
|
|
||||||
with open('{}{}'.format(PATH_TO_DATA_OBJECTS, file_name), 'w') as data_file:
|
|
||||||
json.dump(data, data_file)
|
|
||||||
|
|
||||||
def convert_int_to_string_for_display(time_in_seconds):
|
|
||||||
if time_in_seconds < 0:
|
|
||||||
return ''
|
|
||||||
elif time_in_seconds >= 6000:
|
|
||||||
return '99:99'
|
|
||||||
else:
|
|
||||||
return time.strftime("%M:%S", time.gmtime(time_in_seconds))
|
|
||||||
|
|
||||||
|
|
||||||
######## define how to get path to current dir and set up logging ########
|
|
||||||
def get_the_current_dir_path():
|
|
||||||
#TODO: investigate weird path formatting differences
|
|
||||||
current_file_path = inspect.stack()[0][1]
|
|
||||||
return os.path.split(current_file_path)[0] + '/'
|
|
||||||
|
|
||||||
def setup_logging():
|
|
||||||
logger = logging.getLogger('logfile')
|
|
||||||
current_dir = get_the_current_dir_path()
|
|
||||||
hdlr = logging.FileHandler(current_dir + 'logfile.log')
|
|
||||||
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
|
|
||||||
hdlr.setFormatter(formatter)
|
|
||||||
logger.addHandler(hdlr)
|
|
||||||
logger.setLevel(logging.INFO)
|
|
||||||
return logger
|
|
||||||
|
|
||||||
def get_path_to_browser():
|
|
||||||
return read_json('path_to_browser.json')
|
|
||||||
|
|
||||||
logger = setup_logging()
|
|
||||||
|
|
||||||
######## sets paths and constants ########
|
|
||||||
PATH_TO_DATA_OBJECTS = '{}data_objects/'.format(get_the_current_dir_path())
|
|
||||||
PATH_TO_BROWSER = get_path_to_browser()
|
|
||||||
EMPTY_BANK = dict(name='', location='', length=-1, start=-1, end=-1)
|
|
||||||
DEV_MODE = read_json(SETTINGS_JSON)[6]["value"]
|
|
||||||
print(DEV_MODE)
|
|
||||||
####<<<< data methods for browser tab >>>>#####
|
|
||||||
class data(object):
|
|
||||||
######## a data class used mainly for managing the browser list ########
|
|
||||||
def __init__(self):
|
|
||||||
self._open_folders = []
|
|
||||||
self._browser_list = []
|
|
||||||
|
|
||||||
|
|
||||||
def rewrite_browser_list(self):
|
|
||||||
self._browser_list = generate_browser_list(PATH_TO_BROWSER, 0, self._open_folders)
|
|
||||||
|
|
||||||
def get_browser_data_for_display(self):
|
|
||||||
######## map the browser_list to format for displaying ########
|
|
||||||
if not self._browser_list:
|
|
||||||
self.rewrite_browser_list()
|
|
||||||
|
|
||||||
browser_list_for_display = []
|
|
||||||
for index , dir in enumerate(self._browser_list):
|
|
||||||
browser_list_for_display.append([dir['name'],dir['bank']])
|
|
||||||
#logger.info(browser_list_for_display)
|
|
||||||
return browser_list_for_display
|
|
||||||
|
|
||||||
def update_open_folders(self, folder_name):
|
|
||||||
if folder_name not in self._open_folders:
|
|
||||||
self._open_folders.append(folder_name)
|
|
||||||
else:
|
|
||||||
self._open_folders.remove(folder_name)
|
|
||||||
|
|
||||||
|
|
||||||
def generate_browser_list(initial_path, current_level, open_folder_list):
|
|
||||||
######## starts the recursive process of listing all folders and video files to display ########
|
|
||||||
global results
|
|
||||||
results = []
|
|
||||||
add_folder_to_browser_list(initial_path, current_level,open_folder_list)
|
|
||||||
|
|
||||||
memory_bank = read_json(BANK_DATA_JSON)
|
|
||||||
|
|
||||||
for browser_line in results:
|
|
||||||
is_file, file_name = extract_file_type_and_name_from_browser_format(browser_line['name'])
|
|
||||||
if is_file:
|
|
||||||
is_banked, bank_number = is_file_in_memory_bank(file_name, memory_bank)
|
|
||||||
if is_banked:
|
|
||||||
browser_line['bank'] = str(bank_number)
|
|
||||||
|
|
||||||
return results
|
|
||||||
|
|
||||||
def add_folder_to_browser_list(current_path, current_level,open_folder_list):
|
|
||||||
######## adds the folders and mp4 files at the current level to the results list. recursively recalls at deeper level if folder is open ########
|
|
||||||
#TODO make note of / investigate what happens with multiple folders of same name
|
|
||||||
root, dirs, files = next(os.walk(current_path))
|
|
||||||
|
|
||||||
indent = ' ' * 4 * (current_level)
|
|
||||||
for folder in dirs:
|
|
||||||
is_open, char = check_folder_state(folder,open_folder_list)
|
|
||||||
#print('{}{}{}'.format(indent, folder, char))
|
|
||||||
results.append(dict(name='{}{}{}'.format(indent, folder, char), bank='x'))
|
|
||||||
if (is_open):
|
|
||||||
next_path = '{}/{}'.format(root, folder)
|
|
||||||
next_level = current_level + 1
|
|
||||||
add_folder_to_browser_list(next_path, next_level,open_folder_list)
|
|
||||||
|
|
||||||
for f in files:
|
|
||||||
if (os.path.splitext(f)[1] in ['.mp4', '.mkv']):
|
|
||||||
#print('{}{}'.format(indent, f))
|
|
||||||
results.append(dict(name='{}{}'.format(indent, f), bank='-'))
|
|
||||||
|
|
||||||
def check_folder_state(folder_name,open_folder_list):
|
|
||||||
######## used for displaying folders as open or closed ########
|
|
||||||
if (folder_name in open_folder_list):
|
|
||||||
return True, '/'
|
|
||||||
else:
|
|
||||||
return False, '|'
|
|
||||||
|
|
||||||
def extract_file_type_and_name_from_browser_format(dir_name):
|
|
||||||
######## removes whitespace and folder state from display item ########
|
|
||||||
if(dir_name.endswith('|') or dir_name.endswith('/')):
|
|
||||||
return False , dir_name.lstrip()[:-1]
|
|
||||||
else:
|
|
||||||
return True , dir_name.lstrip()
|
|
||||||
|
|
||||||
def is_file_in_memory_bank(file_name, memory_bank=[]):
|
|
||||||
######## used for displaying the mappings in browser view ########
|
|
||||||
if not memory_bank:
|
|
||||||
memory_bank = read_json(BANK_DATA_JSON)
|
|
||||||
for index, bank in enumerate(memory_bank):
|
|
||||||
if(file_name == bank['name']):
|
|
||||||
return True , index
|
|
||||||
return False, ''
|
|
||||||
|
|
||||||
####<<<< responding to user input in browser tab >>>>#####
|
|
||||||
|
|
||||||
def create_new_bank_mapping_in_first_open(file_name):
|
|
||||||
######## used for mapping current video to next available bank ########
|
|
||||||
memory_bank = read_json(BANK_DATA_JSON)
|
|
||||||
for index , bank in enumerate(memory_bank):
|
|
||||||
if(not bank['name']):
|
|
||||||
create_new_bank_mapping(index,file_name,memory_bank)
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
def create_new_bank_mapping(bank_number,file_name,memory_bank=[]):
|
|
||||||
######## used for mapping current video to a specific bank ########
|
|
||||||
has_location , location = get_path_for_file(file_name)
|
|
||||||
length = get_length_for_file(location)
|
|
||||||
new_bank = dict(name=file_name, location=location, length=length, start=-1, end=-1)
|
|
||||||
update_a_banks_data(bank_number, new_bank, memory_bank)
|
|
||||||
|
|
||||||
def get_length_for_file(location):
|
|
||||||
return get_duration_from_path(location)
|
|
||||||
|
|
||||||
def get_path_for_file(file_name):
|
|
||||||
######## returns full path for a given file name ########
|
|
||||||
for root, dirs, files in os.walk(PATH_TO_BROWSER):
|
|
||||||
if file_name in files:
|
|
||||||
print(root)
|
|
||||||
return True, '{}/{}'.format(root,file_name)
|
|
||||||
return False, ''
|
|
||||||
|
|
||||||
def update_a_banks_data(bank_number, bank_info, memory_bank=[]):
|
|
||||||
######## overwrite a given banks info with new data ########
|
|
||||||
if not memory_bank:
|
|
||||||
memory_bank = read_json(BANK_DATA_JSON)
|
|
||||||
memory_bank[bank_number] = bank_info
|
|
||||||
update_json(BANK_DATA_JSON, memory_bank)
|
|
||||||
|
|
||||||
def clear_all_banks():
|
|
||||||
memory_bank = read_json(BANK_DATA_JSON)
|
|
||||||
for index, bank in enumerate(memory_bank):
|
|
||||||
memory_bank[index] = EMPTY_BANK
|
|
||||||
update_json(BANK_DATA_JSON, memory_bank)
|
|
||||||
|
|
||||||
####<<<< data methods for looper tab >>>>#####
|
|
||||||
|
|
||||||
def get_all_looper_data_for_display():
|
|
||||||
######## read bank mappings from data object and format for displaying ########
|
|
||||||
memory_bank = read_json(BANK_DATA_JSON)
|
|
||||||
loop_data = []
|
|
||||||
for index, bank in enumerate(memory_bank):
|
|
||||||
length = convert_int_to_string_for_display(bank["length"])
|
|
||||||
start = convert_int_to_string_for_display(bank["start"])
|
|
||||||
end = convert_int_to_string_for_display(bank["end"])
|
|
||||||
loop_data.append([str(index), bank["name"], length, start, end])
|
|
||||||
|
|
||||||
return loop_data
|
|
||||||
|
|
||||||
####<<<< data methods for looper tab >>>>#####
|
|
||||||
|
|
||||||
def get_all_settings_data_for_display():
|
|
||||||
######## read settings from data object and format for displaying ########
|
|
||||||
settings = read_json(SETTINGS_JSON)
|
|
||||||
display_settings = []
|
|
||||||
for index, setting in enumerate(settings):
|
|
||||||
display_settings.append([setting['name'],setting['value']])
|
|
||||||
return display_settings
|
|
||||||
|
|
||||||
def switch_settings(setting_index):
|
|
||||||
######## update the value of selected setting by cycling through valid options ########
|
|
||||||
settings = read_json(SETTINGS_JSON)
|
|
||||||
|
|
||||||
for index, setting in enumerate(settings):
|
|
||||||
if index == setting_index:
|
|
||||||
setting = cycle_setting_value(setting)
|
|
||||||
|
|
||||||
update_json(SETTINGS_JSON,settings)
|
|
||||||
|
|
||||||
def cycle_setting_value(setting):
|
|
||||||
######## contains the valid setting values for each applicable option ########
|
|
||||||
if setting['name'] == 'PLAYBACK_MODE':
|
|
||||||
if setting['value'] == 'LOOPER':
|
|
||||||
setting['value'] = 'PLAYLIST'
|
|
||||||
elif setting['value'] == 'PLAYLIST':
|
|
||||||
setting['value'] = 'RANDOM'
|
|
||||||
else:
|
|
||||||
setting['value'] = 'LOOPER'
|
|
||||||
elif setting['name'] == 'SYNC_LENGTHS':
|
|
||||||
if setting['value'] == 'ON':
|
|
||||||
setting['value'] = 'OFF'
|
|
||||||
else:
|
|
||||||
setting['value'] = 'ON'
|
|
||||||
elif setting['name'] == 'RAND_START':
|
|
||||||
if setting['value'] == 'ON':
|
|
||||||
setting['value'] = 'OFF'
|
|
||||||
else:
|
|
||||||
setting['value'] = 'ON'
|
|
||||||
elif setting['name'] == 'VIDEO_OUTPUT':
|
|
||||||
if setting['value'] == 'HDMI':
|
|
||||||
setting['value'] = 'COMPOSITE'
|
|
||||||
else:
|
|
||||||
setting['value'] = 'HDMI'
|
|
||||||
elif setting['name'] == 'DEV_MODE':
|
|
||||||
if setting['value'] == 'ON':
|
|
||||||
setting['value'] = 'OFF'
|
|
||||||
else:
|
|
||||||
setting['value'] = 'ON'
|
|
||||||
|
|
||||||
return setting
|
|
||||||
|
|
||||||
####<<<< data methods for video_centre >>>>#####
|
|
||||||
|
|
||||||
def get_next_context():
|
|
||||||
######## loads the bank details, uses settings to modify them and then set next bank number ########
|
|
||||||
next_bank_number = read_json(NEXT_BANK_JSON)
|
|
||||||
memory_bank = read_json(BANK_DATA_JSON)
|
|
||||||
next_bank_details = memory_bank[next_bank_number]
|
|
||||||
start_value = next_bank_details['start']
|
|
||||||
end_value = next_bank_details['end']
|
|
||||||
length = next_bank_details['length']
|
|
||||||
|
|
||||||
use_rand_start, use_sync_length, sync_length, playback_mode = get_context_options_from_settings()
|
|
||||||
|
|
||||||
if use_rand_start and use_sync_length:
|
|
||||||
start_value = randint(0, length - sync_length)
|
|
||||||
end_value = start_value + sync_length
|
|
||||||
elif use_rand_start and not use_sync_length:
|
|
||||||
start_value = randint(0, end_value)
|
|
||||||
elif not use_rand_start and use_sync_length:
|
|
||||||
end_value = min(length, start_value + sync_length)
|
|
||||||
|
|
||||||
set_next_bank_number_from_playback_mode(playback_mode, next_bank_number)
|
|
||||||
|
|
||||||
context = dict(location=next_bank_details['location'],name=next_bank_details['name'],length=next_bank_details['length'],start=start_value,end=end_value, bank_number=next_bank_number)
|
|
||||||
return context
|
|
||||||
|
|
||||||
def get_context_options_from_settings():
|
|
||||||
######## looks up the settings data object and returns states of relevant options ########
|
|
||||||
settings = read_json(SETTINGS_JSON)
|
|
||||||
use_sync_length = False
|
|
||||||
sync_length = 0
|
|
||||||
use_rand_start = False
|
|
||||||
playback_mode = ''
|
|
||||||
|
|
||||||
for index, setting in enumerate(settings):
|
|
||||||
if setting['name'] == 'SYNC_LENGTHS' and setting['value'] == 'ON':
|
|
||||||
use_sync_length = True
|
|
||||||
elif setting['name'] == 'SYNC_LENGTHS_TO':
|
|
||||||
sync_length = setting['value']
|
|
||||||
elif setting['name'] == 'RAND_START' and setting['value'] == 'ON':
|
|
||||||
use_rand_start = True
|
|
||||||
elif setting['name'] == 'PLAYBACK_MODE':
|
|
||||||
playback_mode = setting['value']
|
|
||||||
|
|
||||||
return use_rand_start , use_sync_length , sync_length , playback_mode
|
|
||||||
|
|
||||||
def set_next_bank_number_from_playback_mode(playback_mode, current_bank_number):
|
|
||||||
######## sets next bank number by using playback mode logic ########
|
|
||||||
next_bank_number = 0
|
|
||||||
if playback_mode == 'LOOPER':
|
|
||||||
next_bank_number = current_bank_number
|
|
||||||
elif playback_mode == 'RANDOM':
|
|
||||||
#TODO: actually find which banks have value and only use those
|
|
||||||
next_bank_number = randint(0,14)
|
|
||||||
elif playback_mode == 'PLAYLIST':
|
|
||||||
#TODO: implement some playlist objects and logic at some point
|
|
||||||
next_bank_number = current_bank_number
|
|
||||||
update_json('next_bank_number.json',next_bank_number)
|
|
||||||
|
|
||||||
def update_next_bank_number(new_value):
|
|
||||||
global current_message
|
|
||||||
memory_bank = read_json(BANK_DATA_JSON)
|
|
||||||
if(memory_bank[new_value]['location'] == ''):
|
|
||||||
print('its empty!')
|
|
||||||
current_message = 'the bank you pressed is empty'
|
|
||||||
else:
|
|
||||||
update_json(NEXT_BANK_JSON, new_value)
|
|
||||||
|
|
||||||
def get_duration_from_path(path):
|
|
||||||
temp_player = OMXPlayer(path, args=['--alpha', '0'], dbus_name='t.t')
|
|
||||||
duration = temp_player.duration()
|
|
||||||
temp_player.quit()
|
|
||||||
return duration
|
|
||||||
|
|
||||||
|
|
||||||
82
data_centre/browser_data.py
Normal file
82
data_centre/browser_data.py
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
import os
|
||||||
|
import data_centre.data
|
||||||
|
|
||||||
|
|
||||||
|
class BrowserData(object):
|
||||||
|
######## a data class used mainly for managing the browser list ########
|
||||||
|
def __init__(self):
|
||||||
|
self.open_folders = []
|
||||||
|
self.browser_list = []
|
||||||
|
self.memory_bank = []
|
||||||
|
self.generate_browser_list()
|
||||||
|
|
||||||
|
def update_open_folders(self, folder_name):
|
||||||
|
if folder_name not in self.open_folders:
|
||||||
|
self.open_folders.append(folder_name)
|
||||||
|
else:
|
||||||
|
self.open_folders.remove(folder_name)
|
||||||
|
|
||||||
|
def generate_browser_list(self):
|
||||||
|
######## starts the recursive process of listing all folders and video files to display ########
|
||||||
|
self.browser_list = []
|
||||||
|
self._add_folder_to_browser_list(data_centre.data.PATH_TO_BROWSER, 0)
|
||||||
|
|
||||||
|
self.memory_bank = data_centre.data.read_json(data_centre.data.BANK_DATA_JSON)
|
||||||
|
|
||||||
|
for browser_line in self.browser_list:
|
||||||
|
is_file, file_name = self.extract_file_type_and_name_from_browser_format(browser_line['name'])
|
||||||
|
if is_file:
|
||||||
|
is_banked, bank_number = self._is_file_in_memory_bank(file_name)
|
||||||
|
if is_banked:
|
||||||
|
browser_line['bank'] = str(bank_number)
|
||||||
|
|
||||||
|
return self.browser_list
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def extract_file_type_and_name_from_browser_format(dir_name):
|
||||||
|
# removes whitespace and folder state from display item ########
|
||||||
|
if dir_name.endswith('|') or dir_name.endswith('/'):
|
||||||
|
return False, dir_name.lstrip()[:-1]
|
||||||
|
else:
|
||||||
|
return True, dir_name.lstrip()
|
||||||
|
|
||||||
|
def _add_folder_to_browser_list(self, current_path, current_level):
|
||||||
|
######## adds the folders and mp4 files at the current level to the results list. recursively recalls at deeper level if folder is open ########
|
||||||
|
# TODO make note of / investigate what happens with multiple folders of same name
|
||||||
|
root, dirs, files = next(os.walk(current_path))
|
||||||
|
|
||||||
|
indent = ' ' * 4 * (current_level)
|
||||||
|
for folder in dirs:
|
||||||
|
is_open, char = self._check_folder_state(folder)
|
||||||
|
self.browser_list.append(dict(name='{}{}{}'.format(indent, folder, char), bank='x'))
|
||||||
|
if (is_open):
|
||||||
|
next_path = '{}/{}'.format(root, folder)
|
||||||
|
next_level = current_level + 1
|
||||||
|
self._add_folder_to_browser_list(next_path, next_level)
|
||||||
|
|
||||||
|
for f in files:
|
||||||
|
split_name = os.path.splitext(f)
|
||||||
|
if (split_name[1] in ['.mp4', '.mkv']):
|
||||||
|
self.browser_list.append(dict(name='{}{}'.format(indent, split_name[0]), bank='-'))
|
||||||
|
|
||||||
|
def _check_folder_state(self, folder_name):
|
||||||
|
######## used for displaying folders as open or closed ########
|
||||||
|
if folder_name in self.open_folders:
|
||||||
|
return True, '/'
|
||||||
|
else:
|
||||||
|
return False, '|'
|
||||||
|
|
||||||
|
def _is_file_in_memory_bank(self, file_name):
|
||||||
|
######## used for displaying the mappings in browser view ########
|
||||||
|
if not self.memory_bank:
|
||||||
|
self.memory_bank = data_centre.data.read_json(data_centre.data.BANK_DATA_JSON)
|
||||||
|
for index, bank in enumerate(self.memory_bank):
|
||||||
|
if file_name == bank['name']:
|
||||||
|
return True, index
|
||||||
|
return False, ''
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
235
data_centre/data.py
Normal file
235
data_centre/data.py
Normal file
@@ -0,0 +1,235 @@
|
|||||||
|
import json
|
||||||
|
import os
|
||||||
|
from random import randint
|
||||||
|
import inspect
|
||||||
|
|
||||||
|
from data_centre.browser_data import BrowserData
|
||||||
|
|
||||||
|
def get_the_current_dir_path():
|
||||||
|
# TODO: investigate weird path formatting differences
|
||||||
|
current_file_path = inspect.stack()[0][1]
|
||||||
|
return os.path.split(current_file_path)[0]
|
||||||
|
|
||||||
|
BANK_DATA_JSON = 'display_data.json'
|
||||||
|
NEXT_SLOT_JSON = 'next_bank_number.json'
|
||||||
|
SETTINGS_JSON = 'settings.json'
|
||||||
|
EMPTY_BANK = dict(name='', location='', length=-1, start=-1, end=-1)
|
||||||
|
PATH_TO_DATA_OBJECTS = '{}\\json_objects\\'.format(get_the_current_dir_path())
|
||||||
|
|
||||||
|
def read_json(file_name):
|
||||||
|
with open(PATH_TO_DATA_OBJECTS + file_name) as data_file:
|
||||||
|
data = json.load(data_file)
|
||||||
|
return data
|
||||||
|
|
||||||
|
|
||||||
|
def update_json(file_name, data):
|
||||||
|
with open('{}{}'.format(Data.PATH_TO_DATA_OBJECTS, file_name), 'w') as data_file:
|
||||||
|
json.dump(data, data_file)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def get_path_to_browser():
|
||||||
|
return read_json('path_to_browser.json')
|
||||||
|
|
||||||
|
PATH_TO_BROWSER = get_path_to_browser()
|
||||||
|
|
||||||
|
|
||||||
|
class Data(object):
|
||||||
|
def __init__(self, message_handler):
|
||||||
|
self.browser_data = BrowserData()
|
||||||
|
self.message_handler = message_handler
|
||||||
|
|
||||||
|
self.has_omx = self.try_import_omx()
|
||||||
|
self.DEV_MODE = read_json(SETTINGS_JSON)[6]["value"]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def create_new_slot_mapping_in_first_open(self, file_name):
|
||||||
|
######## used for mapping current video to next available slot ########
|
||||||
|
memory_bank = read_json(BANK_DATA_JSON)
|
||||||
|
for index, slot in enumerate(memory_bank):
|
||||||
|
if (not slot['name']):
|
||||||
|
self.create_new_slot_mapping(index, file_name)
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
def create_new_slot_mapping(self, slot_number, file_name):
|
||||||
|
######## used for mapping current video to a specific bank ########
|
||||||
|
has_location, location = self._get_path_for_file(file_name)
|
||||||
|
length = self._get_length_for_file(location)
|
||||||
|
new_slot = dict(name=file_name, location=location, length=length, start=-1, end=-1)
|
||||||
|
self._update_a_slots_data(slot_number, new_slot)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def clear_all_slots():
|
||||||
|
memory_bank = read_json(BANK_DATA_JSON)
|
||||||
|
for index, bank in enumerate(memory_bank):
|
||||||
|
memory_bank[index] = EMPTY_BANK
|
||||||
|
update_json(BANK_DATA_JSON, memory_bank)
|
||||||
|
|
||||||
|
def update_next_slot_number(self, new_value):
|
||||||
|
memory_bank = read_json(BANK_DATA_JSON)
|
||||||
|
if memory_bank[new_value]['location'] == '':
|
||||||
|
print('its empty!')
|
||||||
|
self.message_handler.set_message('INFO', 'the slot you pressed is empty')
|
||||||
|
else:
|
||||||
|
update_json(NEXT_SLOT_JSON, new_value)
|
||||||
|
|
||||||
|
def add_open_folder(self, folder_name):
|
||||||
|
self.browser_data.update_open_folders(folder_name)
|
||||||
|
|
||||||
|
def switch_settings(self, setting_index):
|
||||||
|
######## update the value of selected setting by cycling through valid options ########
|
||||||
|
settings = read_json(SETTINGS_JSON)
|
||||||
|
|
||||||
|
for index, setting in enumerate(settings):
|
||||||
|
if index == setting_index:
|
||||||
|
self._cycle_setting_value(setting)
|
||||||
|
|
||||||
|
update_json(SETTINGS_JSON, settings)
|
||||||
|
|
||||||
|
def rewrite_browser_list(self):
|
||||||
|
return self.browser_data.generate_browser_list()
|
||||||
|
|
||||||
|
def return_browser_list(self):
|
||||||
|
return self.browser_data.browser_list()
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_settings_data():
|
||||||
|
return read_json(SETTINGS_JSON)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_sampler_data():
|
||||||
|
return read_json(BANK_DATA_JSON)
|
||||||
|
|
||||||
|
def get_next_context(self):
|
||||||
|
######## loads the slot details, uses settings to modify them and then set next slot number ########
|
||||||
|
next_slot_number = read_json(NEXT_SLOT_JSON)
|
||||||
|
memory_bank = read_json(BANK_DATA_JSON)
|
||||||
|
next_slot_details = memory_bank[next_slot_number]
|
||||||
|
start_value = next_slot_details['start']
|
||||||
|
end_value = next_slot_details['end']
|
||||||
|
length = next_slot_details['length']
|
||||||
|
|
||||||
|
use_rand_start, use_sync_length, sync_length, playback_mode = self._get_context_options_from_settings()
|
||||||
|
|
||||||
|
if use_rand_start and use_sync_length:
|
||||||
|
start_value = randint(0, length - sync_length)
|
||||||
|
end_value = start_value + sync_length
|
||||||
|
elif use_rand_start and not use_sync_length:
|
||||||
|
start_value = randint(0, end_value)
|
||||||
|
elif not use_rand_start and use_sync_length:
|
||||||
|
end_value = min(length, start_value + sync_length)
|
||||||
|
|
||||||
|
self._set_next_slot_number_from_playback_mode(playback_mode, next_slot_number)
|
||||||
|
|
||||||
|
context = dict(location=next_slot_details['location'], name=next_slot_details['name'],
|
||||||
|
length=next_slot_details['length'], start=start_value, end=end_value,
|
||||||
|
bank_number=next_slot_number)
|
||||||
|
return context
|
||||||
|
|
||||||
|
def _get_length_for_file(self, path):
|
||||||
|
if self.has_omx:
|
||||||
|
temp_player = OMXPlayer(path, args=['--alpha', '0'], dbus_name='t.t')
|
||||||
|
duration = temp_player.duration()
|
||||||
|
temp_player.quit()
|
||||||
|
return duration
|
||||||
|
else:
|
||||||
|
return -1
|
||||||
|
|
||||||
|
def _get_path_for_file(self, file_name):
|
||||||
|
######## returns full path for a given file name ########
|
||||||
|
for root, dirs, files in os.walk(PATH_TO_BROWSER):
|
||||||
|
if file_name in files:
|
||||||
|
return True, '{}/{}'.format(root, file_name)
|
||||||
|
return False, ''
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _update_a_slots_data(bank_number, slot_info):
|
||||||
|
######## overwrite a given banks info with new data ########
|
||||||
|
memory_bank = read_json(BANK_DATA_JSON)
|
||||||
|
memory_bank[bank_number] = slot_info
|
||||||
|
update_json(BANK_DATA_JSON, memory_bank)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _cycle_setting_value(setting):
|
||||||
|
######## contains the valid setting values for each applicable option ########
|
||||||
|
if setting['name'] == 'PLAYBACK_MODE':
|
||||||
|
if setting['value'] == 'SAMPLER':
|
||||||
|
setting['value'] = 'PLAYLIST'
|
||||||
|
elif setting['value'] == 'PLAYLIST':
|
||||||
|
setting['value'] = 'RANDOM'
|
||||||
|
else:
|
||||||
|
setting['value'] = 'SAMPLER'
|
||||||
|
elif setting['name'] == 'SYNC_LENGTHS':
|
||||||
|
if setting['value'] == 'ON':
|
||||||
|
setting['value'] = 'OFF'
|
||||||
|
else:
|
||||||
|
setting['value'] = 'ON'
|
||||||
|
elif setting['name'] == 'RAND_START':
|
||||||
|
if setting['value'] == 'ON':
|
||||||
|
setting['value'] = 'OFF'
|
||||||
|
else:
|
||||||
|
setting['value'] = 'ON'
|
||||||
|
elif setting['name'] == 'VIDEO_OUTPUT':
|
||||||
|
if setting['value'] == 'HDMI':
|
||||||
|
setting['value'] = 'COMPOSITE'
|
||||||
|
else:
|
||||||
|
setting['value'] = 'HDMI'
|
||||||
|
elif setting['name'] == 'DEV_MODE':
|
||||||
|
if setting['value'] == 'ON':
|
||||||
|
setting['value'] = 'OFF'
|
||||||
|
else:
|
||||||
|
setting['value'] = 'ON'
|
||||||
|
|
||||||
|
return setting
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _get_context_options_from_settings():
|
||||||
|
######## looks up the settings data object and returns states of relevant options ########
|
||||||
|
settings = read_json(SETTINGS_JSON)
|
||||||
|
use_sync_length = False
|
||||||
|
sync_length = 0
|
||||||
|
use_rand_start = False
|
||||||
|
playback_mode = ''
|
||||||
|
|
||||||
|
for index, setting in enumerate(settings):
|
||||||
|
if setting['name'] == 'SYNC_LENGTHS' and setting['value'] == 'ON':
|
||||||
|
use_sync_length = True
|
||||||
|
elif setting['name'] == 'SYNC_LENGTHS_TO':
|
||||||
|
sync_length = setting['value']
|
||||||
|
elif setting['name'] == 'RAND_START' and setting['value'] == 'ON':
|
||||||
|
use_rand_start = True
|
||||||
|
elif setting['name'] == 'PLAYBACK_MODE':
|
||||||
|
playback_mode = setting['value']
|
||||||
|
|
||||||
|
return use_rand_start, use_sync_length, sync_length, playback_mode
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _set_next_slot_number_from_playback_mode(playback_mode, current_slot_number):
|
||||||
|
######## sets next slot number by using playback mode logic ########
|
||||||
|
next_slot_number = 0
|
||||||
|
if playback_mode == 'SAMPLER':
|
||||||
|
next_slot_number = current_slot_number
|
||||||
|
elif playback_mode == 'RANDOM':
|
||||||
|
#TODO: actually find which banks have value and only use those
|
||||||
|
next_slot_number = randint(0,14)
|
||||||
|
elif playback_mode == 'PLAYLIST':
|
||||||
|
#TODO: implement some playlist objects and logic at some point
|
||||||
|
next_slot_number = current_slot_number
|
||||||
|
update_json('next_bank_number.json',next_slot_number)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def try_import_omx():
|
||||||
|
try:
|
||||||
|
from omxplayer.player import OMXPlayer
|
||||||
|
return True
|
||||||
|
except:
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
1
data_centre/json_objects/settings.json
Normal file
1
data_centre/json_objects/settings.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"value": "PLAYLIST", "name": "PLAYBACK_MODE"}, {"value": "[1,1,1,4,1,2,1,4]", "name": "PLAYLIST"}, {"value": "ON", "name": "SYNC_LENGTHS"}, {"value": "00:08", "name": "SYNC_LENGTHS_TO"}, {"value": "ON", "name": "RAND_START"}, {"value": "COMPOSITE", "name": "VIDEO_OUTPUT"}, {"value": "ON", "name": "DEV_MODE"}]
|
||||||
@@ -1 +0,0 @@
|
|||||||
[{"value": "LOOPER", "name": "PLAYBACK_MODE"}, {"value": "[1,1,1,4,1,2,1,4]", "name": "PLAYLIST"}, {"value": "OFF", "name": "SYNC_LENGTHS"}, {"value": "00:08", "name": "SYNC_LENGTHS_TO"}, {"value": "OFF", "name": "RAND_START"}, {"value": "COMPOSITE", "name": "VIDEO_OUTPUT"}, {"value": "ON", "name": "DEV_MODE"}]
|
|
||||||
@@ -1,37 +1,35 @@
|
|||||||
from tkinter import Text, END
|
from tkinter import Text, END
|
||||||
import math
|
import math
|
||||||
import data_centre
|
import time
|
||||||
|
|
||||||
|
|
||||||
class Display(object):
|
class Display(object):
|
||||||
MAX_LINES = 10
|
MENU_HEIGHT = 10
|
||||||
SELECTOR_WIDTH = 0.47
|
SELECTOR_WIDTH = 0.47
|
||||||
ROW_OFFSET = 6.0
|
ROW_OFFSET = 6.0
|
||||||
VIDEO_DISPLAY_TEXT = ' NOW [{}] {} NEXT [{}] {}'
|
VIDEO_DISPLAY_TEXT = ' NOW [{}] {} NEXT [{}] {}'
|
||||||
VIDEO_DISPLAY_BANNER_TEXT = ' {} {} {}'
|
VIDEO_DISPLAY_BANNER_TEXT = ' {} {} {}'
|
||||||
|
|
||||||
def __init__(self, tk, video_driver):
|
def __init__(self, tk, video_driver, message_handler, data):
|
||||||
self.video_driver = video_driver
|
|
||||||
self.display_mode = "LOOPER"
|
|
||||||
self.tk = tk
|
self.tk = tk
|
||||||
|
self.video_driver = video_driver
|
||||||
|
self.message_handler = message_handler
|
||||||
|
self.data = data
|
||||||
|
|
||||||
self.browser_data = data_centre.data()
|
self.display_mode = "SAMPLER"
|
||||||
self.browser_start_index = 0
|
self.top_menu_index = 0
|
||||||
self.browser_index = self.browser_start_index
|
self.selected_list_index = self.top_menu_index
|
||||||
self.browser_list = self.browser_data.get_browser_data_for_display()
|
self.browser_list = self.data.rewrite_browser_list()
|
||||||
self.settings_start_index = 0
|
|
||||||
self.settings_index = self.settings_start_index
|
|
||||||
self.settings_list = data_centre.get_all_settings_data_for_display()
|
|
||||||
|
|
||||||
self.display_text = self.create_display_text(self.tk)
|
self.display_text = self._create_display_text(self.tk)
|
||||||
self.add_tags()
|
self._add_tags()
|
||||||
self.update_screen()
|
self._update_screen_every_second()
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def create_display_text(tk):
|
def _create_display_text(tk):
|
||||||
return Text(tk, bg="black", fg="white", font=('courier', 13))
|
return Text(tk, bg="black", fg="white", font=('courier', 13))
|
||||||
|
|
||||||
def add_tags(self):
|
def _add_tags(self):
|
||||||
self.display_text.tag_configure("SELECT", background="white", foreground="black")
|
self.display_text.tag_configure("SELECT", background="white", foreground="black")
|
||||||
self.display_text.tag_configure("TITLE", background="black", foreground="red")
|
self.display_text.tag_configure("TITLE", background="black", foreground="red")
|
||||||
self.display_text.tag_configure("DISPLAY_MODE", background="black", foreground="magenta")
|
self.display_text.tag_configure("DISPLAY_MODE", background="black", foreground="magenta")
|
||||||
@@ -40,19 +38,19 @@ class Display(object):
|
|||||||
self.display_text.tag_configure("PLAYER_INFO", background="black", foreground="yellow")
|
self.display_text.tag_configure("PLAYER_INFO", background="black", foreground="yellow")
|
||||||
self.display_text.tag_configure("COLUMN_NAME", background="black", foreground="cyan")
|
self.display_text.tag_configure("COLUMN_NAME", background="black", foreground="cyan")
|
||||||
|
|
||||||
def load_display(self):
|
def _load_display(self):
|
||||||
self.load_title()
|
self._load_title()
|
||||||
self.load_player()
|
self._load_player()
|
||||||
self.load_display_body()
|
self._load_display_body()
|
||||||
self.load_message()
|
self._load_message()
|
||||||
self.display_text.pack()
|
self.display_text.pack()
|
||||||
|
|
||||||
def load_title(self):
|
def _load_title(self):
|
||||||
self.display_text.insert(END, '================== r_e_c_u_r ================== \n')
|
self.display_text.insert(END, '================== r_e_c_u_r ================== \n')
|
||||||
self.display_text.tag_add("TITLE", 1.19, 1.28)
|
self.display_text.tag_add("TITLE", 1.19, 1.28)
|
||||||
|
|
||||||
def load_player(self):
|
def _load_player(self):
|
||||||
text, banner = self.get_text_for_video_display()
|
text, banner = self._get_info_for_player()
|
||||||
end_of_text = float("3." + str(len(text)))
|
end_of_text = float("3." + str(len(text)))
|
||||||
end_of_banner = float("3." + str(len(banner)))
|
end_of_banner = float("3." + str(len(banner)))
|
||||||
self.display_text.insert(END, text + '\n')
|
self.display_text.insert(END, text + '\n')
|
||||||
@@ -60,88 +58,92 @@ class Display(object):
|
|||||||
self.display_text.insert(END, banner + '\n')
|
self.display_text.insert(END, banner + '\n')
|
||||||
self.display_text.tag_add("PLAYER_INFO", 3.0, end_of_banner)
|
self.display_text.tag_add("PLAYER_INFO", 3.0, end_of_banner)
|
||||||
|
|
||||||
def load_display_body(self):
|
def _load_display_body(self):
|
||||||
if self.display_mode == 'BROWSER':
|
if self.display_mode == 'BROWSER':
|
||||||
self.load_browser()
|
self._load_browser()
|
||||||
elif self.display_mode == 'SETTINGS':
|
elif self.display_mode == 'SETTINGS':
|
||||||
self.load_settings()
|
self._load_settings()
|
||||||
else:
|
else:
|
||||||
self.load_sampler()
|
self._load_sampler()
|
||||||
self.display_text.tag_add("COLUMN_NAME", 5.0, 6.0)
|
self.display_text.tag_add("COLUMN_NAME", 5.0, 6.0)
|
||||||
|
print('selected_list_index:{}, top_menu_index:{}'.format(self.selected_list_index, self.top_menu_index))
|
||||||
|
self._highlight_this_row(self.selected_list_index - self.top_menu_index)
|
||||||
|
|
||||||
def load_sampler(self):
|
def _load_sampler(self):
|
||||||
bank_info = data_centre.get_all_looper_data_for_display()
|
bank_info = self.data.get_sampler_data()
|
||||||
self.display_text.insert(END, '------------------ <SAMPLER> ------------------ \n')
|
self.display_text.insert(END, '------------------ <SAMPLER> ------------------ \n')
|
||||||
self.display_text.tag_add("DISPLAY_MODE", 4.19, 4.29)
|
self.display_text.tag_add("DISPLAY_MODE", 4.19, 4.29)
|
||||||
self.display_text.insert(END, '{:^4} {:<22} {:<4} {:<4} {:<4} \n'.format(
|
self.display_text.insert(END, '{:^4} {:<22} {:<4} {:<4} {:<4} \n'.format(
|
||||||
'bank', 'name', 'length', 'start', 'end'))
|
'slot', 'name', 'length', 'start', 'end'))
|
||||||
for bank in bank_info:
|
for index, slot in enumerate(bank_info):
|
||||||
self.display_text.insert(END, '{:^4} {:<22} {:<4} {:<4} {:<4} \n'.format(
|
self.display_text.insert(END, '{:^4} {:<22} {:<4} {:<4} {:<4} \n'.format(
|
||||||
bank[0], bank[1][0:22], bank[2], bank[3], bank[4]))
|
index, slot['name'][0:22], self.format_time_value(slot['length']),
|
||||||
self.select_current_playing(self.video_driver.current_player.bank_number)
|
self.format_time_value(slot['start']), self.format_time_value(slot['end'])))
|
||||||
|
if self.video_driver.current_player.bank_number is '-':
|
||||||
|
self.selected_list_index = 0
|
||||||
|
else:
|
||||||
|
self.selected_list_index = self.video_driver.current_player.bank_number
|
||||||
|
|
||||||
def load_message(self):
|
def _load_browser(self):
|
||||||
if data_centre.current_message[1]:
|
number_of_lines_displayed = 0
|
||||||
self.display_text.insert(END, '{:5}: {:38}'.format(data_centre.current_message[0], data_centre.current_message[1][0:38]))
|
|
||||||
self.display_text.tag_add('{}_MESSAGE'.format(data_centre.current_message[0]), 16.0,16.0 + self.SELECTOR_WIDTH)
|
|
||||||
print(data_centre.current_message[2])
|
|
||||||
if data_centre.current_message[2]:
|
|
||||||
self.clear_message()
|
|
||||||
|
|
||||||
def clear_message(self):
|
|
||||||
data_centre.current_message[2] = False
|
|
||||||
message_length = 4000
|
|
||||||
self.tk.after(message_length, data_centre.clear_message)
|
|
||||||
|
|
||||||
def load_browser(self):
|
|
||||||
line_count = 0
|
|
||||||
self.display_text.insert(END, '------------------ <BROWSER> ------------------ \n')
|
self.display_text.insert(END, '------------------ <BROWSER> ------------------ \n')
|
||||||
self.display_text.tag_add("DISPLAY_MODE", 4.19, 4.29)
|
self.display_text.tag_add("DISPLAY_MODE", 4.19, 4.29)
|
||||||
self.display_text.insert(END, '{:40} {:5} \n'.format('path', 'bank'))
|
self.display_text.insert(END, '{:40} {:5} \n'.format('path', 'bank'))
|
||||||
|
|
||||||
number_of_browser_items = len(self.browser_list)
|
number_of_browser_items = len(self.browser_list)
|
||||||
for index in range(number_of_browser_items):
|
for index in range(number_of_browser_items):
|
||||||
if line_count >= self.MAX_LINES:
|
if number_of_lines_displayed >= self.MENU_HEIGHT:
|
||||||
break
|
break
|
||||||
if index >= self.browser_start_index:
|
if index >= self.top_menu_index:
|
||||||
path = self.browser_list[index]
|
path = self.browser_list[index]
|
||||||
self.display_text.insert(END, '{:40} {:5} \n'.format(path[0][0:35], path[1]))
|
self.display_text.insert(END, '{:40} {:5} \n'.format(path['name'][0:35], path['bank']))
|
||||||
line_count = line_count + 1
|
number_of_lines_displayed = number_of_lines_displayed + 1
|
||||||
|
|
||||||
for index in range(self.MAX_LINES - number_of_browser_items):
|
for index in range(self.MENU_HEIGHT - number_of_browser_items):
|
||||||
self.display_text.insert(END, '\n')
|
self.display_text.insert(END, '\n')
|
||||||
|
|
||||||
def load_settings(self):
|
def _load_settings(self):
|
||||||
line_count = 0
|
line_count = 0
|
||||||
|
settings_list = self.data.get_settings_data()
|
||||||
self.display_text.insert(END, '------------------ <SETTINGS> ----------------- \n')
|
self.display_text.insert(END, '------------------ <SETTINGS> ----------------- \n')
|
||||||
self.display_text.tag_add("DISPLAY_MODE", 4.19, 4.29)
|
self.display_text.tag_add("DISPLAY_MODE", 4.19, 4.29)
|
||||||
self.display_text.insert(END, '{:^25} {:^20} \n'.format('SETTING', 'VALUE'))
|
self.display_text.insert(END, '{:^25} {:^20} \n'.format('SETTING', 'VALUE'))
|
||||||
number_of_settings_items = len(self.settings_list)
|
number_of_settings_items = len(settings_list)
|
||||||
for index in range(number_of_settings_items):
|
for index in range(number_of_settings_items):
|
||||||
if line_count >= self.MAX_LINES:
|
if line_count >= self.MENU_HEIGHT:
|
||||||
break
|
break
|
||||||
if index >= self.settings_start_index:
|
if index >= self.top_menu_index:
|
||||||
setting = self.settings_list[index]
|
setting = settings_list[index]
|
||||||
self.display_text.insert(END, '{:>25} {:<20} \n'.format(setting[0], setting[1][0:20]))
|
self.display_text.insert(END, '{:>25} {:<20} \n'.format(setting['name'], setting['value'][0:20]))
|
||||||
line_count = line_count + 1
|
line_count = line_count + 1
|
||||||
|
|
||||||
for index in range(self.MAX_LINES - number_of_settings_items):
|
for index in range(self.MENU_HEIGHT - number_of_settings_items):
|
||||||
self.display_text.insert(END, '\n')
|
self.display_text.insert(END, '\n')
|
||||||
|
|
||||||
def highlight_this_row(self, row):
|
def _load_message(self):
|
||||||
|
if self.message_handler.current_message[1]:
|
||||||
|
self.display_text.insert(END, '{:5}: {:38}'.format(
|
||||||
|
self.message_handler.current_message[0], self.message_handler.current_message[1][0:38]))
|
||||||
|
self.display_text.tag_add('{}_MESSAGE'.format(
|
||||||
|
self.message_handler.current_message[0]), 16.0,16.0 + self.SELECTOR_WIDTH)
|
||||||
|
if self.message_handler.current_message[2]:
|
||||||
|
self.message_handler.current_message[2] = False
|
||||||
|
message_length = 4000
|
||||||
|
self.tk.after(message_length, self.message_handler.clear_message)
|
||||||
|
|
||||||
|
def _highlight_this_row(self, row):
|
||||||
self.display_text.tag_add("SELECT", self.ROW_OFFSET + row,
|
self.display_text.tag_add("SELECT", self.ROW_OFFSET + row,
|
||||||
self.ROW_OFFSET + self.SELECTOR_WIDTH + row)
|
self.ROW_OFFSET + self.SELECTOR_WIDTH + row)
|
||||||
|
|
||||||
def unhighlight_this_row(self, row):
|
def _unhighlight_this_row(self, row):
|
||||||
self.display_text.tag_remove("SELECT", self.ROW_OFFSET + row,
|
self.display_text.tag_remove("SELECT", self.ROW_OFFSET + row,
|
||||||
self.ROW_OFFSET + self.SELECTOR_WIDTH + row)
|
self.ROW_OFFSET + self.SELECTOR_WIDTH + row)
|
||||||
|
|
||||||
def get_text_for_video_display(self):
|
def _get_info_for_player(self):
|
||||||
now_bank, now_status, next_bank, next_status, position, video_length, start, end = self.video_driver.get_info_for_video_display()
|
now_bank, now_status, next_bank, next_status, position, video_length, start, end = self.video_driver.get_info_for_player_display()
|
||||||
banner = self.create_video_display_banner(start, end, video_length, position)
|
banner = self.create_video_display_banner(start, end, video_length, position)
|
||||||
time_been = data_centre.convert_int_to_string_for_display(position - start)
|
time_been = self.format_time_value(position - start)
|
||||||
time_left = data_centre.convert_int_to_string_for_display(
|
time_left = self.format_time_value(end - position)
|
||||||
end - position)
|
|
||||||
|
|
||||||
return self.VIDEO_DISPLAY_BANNER_TEXT.format(time_been, banner, time_left), \
|
return self.VIDEO_DISPLAY_BANNER_TEXT.format(time_been, banner, time_left), \
|
||||||
self.VIDEO_DISPLAY_TEXT.format(now_bank, now_status, next_bank, next_status)
|
self.VIDEO_DISPLAY_TEXT.format(now_bank, now_status, next_bank, next_status)
|
||||||
@@ -165,75 +167,52 @@ class Display(object):
|
|||||||
|
|
||||||
return ''.join(banner_list)
|
return ''.join(banner_list)
|
||||||
|
|
||||||
|
def _update_screen_every_second(self):
|
||||||
|
self.refresh_display()
|
||||||
|
self.tk.after(1000, self._update_screen_every_second)
|
||||||
|
|
||||||
def refresh_display(self):
|
def refresh_display(self):
|
||||||
self.display_text.configure(state='normal')
|
self.display_text.configure(state='normal')
|
||||||
self.display_text.delete(1.0, END)
|
self.display_text.delete(1.0, END)
|
||||||
self.load_display()
|
self._load_display()
|
||||||
self.display_text.configure(state='disable')
|
self.display_text.configure(state='disable')
|
||||||
if self.display_mode is 'BROWSER':
|
|
||||||
self.highlight_this_row(self.browser_index)
|
|
||||||
elif self.display_mode is 'SETTINGS':
|
|
||||||
self.highlight_this_row(self.settings_index)
|
|
||||||
self.display_text.focus_set()
|
self.display_text.focus_set()
|
||||||
|
|
||||||
def update_screen(self):
|
def navigate_menu(self, move_direction, number_items_in_list):
|
||||||
self.refresh_display()
|
last_list_index = number_items_in_list - 1
|
||||||
self.tk.after(1000, self.update_screen)
|
bottom_menu_index = self.top_menu_index + self.MENU_HEIGHT - 1
|
||||||
|
|
||||||
def select_current_playing(self, bank_number):
|
self._unhighlight_this_row(self.selected_list_index - self.top_menu_index)
|
||||||
if bank_number != '-':
|
|
||||||
self.display_text.tag_add("SELECT", self.ROW_OFFSET + bank_number,
|
|
||||||
self.ROW_OFFSET + self.SELECTOR_WIDTH + bank_number)
|
|
||||||
|
|
||||||
def move_browser_down(self):
|
if move_direction == 'down':
|
||||||
last_index = len(self.browser_list) - 1
|
if self.selected_list_index != last_list_index:
|
||||||
if self.browser_index + self.browser_start_index >= last_index:
|
if self.selected_list_index == bottom_menu_index:
|
||||||
return
|
self.top_menu_index += 1
|
||||||
if self.browser_index >= self.MAX_LINES - 1:
|
self.selected_list_index += 1
|
||||||
self.browser_start_index = self.browser_start_index + 1
|
else:
|
||||||
return
|
self.top_menu_index = 0
|
||||||
self.unhighlight_this_row(self.browser_index)
|
self.selected_list_index = self.top_menu_index
|
||||||
self.browser_index = self.browser_index + 1
|
|
||||||
self.highlight_this_row(self.browser_index)
|
|
||||||
|
|
||||||
def move_browser_up(self):
|
elif move_direction == 'up':
|
||||||
if self.browser_index == 0:
|
if self.selected_list_index != 0:
|
||||||
if self.browser_start_index > 0:
|
if self.selected_list_index == self.top_menu_index:
|
||||||
self.browser_start_index = self.browser_start_index - 1
|
self.top_menu_index -= 1
|
||||||
return
|
self.selected_list_index -= 1
|
||||||
self.unhighlight_this_row(self.browser_index)
|
else:
|
||||||
self.browser_index = self.browser_index - 1
|
self.selected_list_index = last_list_index
|
||||||
self.highlight_this_row(self.browser_index)
|
self.top_menu_index = last_list_index - (self.MENU_HEIGHT - 1)
|
||||||
|
if self.top_menu_index < 0:
|
||||||
|
self.top_menu_index = 0
|
||||||
|
|
||||||
def browser_enter(self):
|
self._highlight_this_row(self.selected_list_index - self.top_menu_index)
|
||||||
is_file, name = data_centre.extract_file_type_and_name_from_browser_format(
|
|
||||||
self.browser_list[self.browser_index + self.browser_start_index][0])
|
return
|
||||||
if is_file:
|
|
||||||
data_centre.create_new_bank_mapping_in_first_open(name)
|
@staticmethod
|
||||||
|
def format_time_value(time_in_seconds):
|
||||||
|
if time_in_seconds < 0:
|
||||||
|
return ''
|
||||||
|
elif time_in_seconds >= 6000:
|
||||||
|
return '99:99'
|
||||||
else:
|
else:
|
||||||
self.browser_data.update_open_folders(name)
|
return time.strftime("%M:%S", time.gmtime(time_in_seconds))
|
||||||
self.browser_data.rewrite_browser_list()
|
|
||||||
self.browser_list = self.browser_data.get_browser_data_for_display()
|
|
||||||
|
|
||||||
def move_settings_down(self):
|
|
||||||
last_index = len(self.settings_list) - 1
|
|
||||||
if self.settings_index + self.settings_start_index >= last_index:
|
|
||||||
return
|
|
||||||
if self.settings_index >= self.MAX_LINES - 1:
|
|
||||||
self.settings_start_index = self.settings_start_index + 1
|
|
||||||
return
|
|
||||||
self.unhighlight_this_row(self.settings_index)
|
|
||||||
self.settings_index = self.settings_index + 1
|
|
||||||
self.highlight_this_row(self.settings_index)
|
|
||||||
|
|
||||||
def move_settings_up(self):
|
|
||||||
if self.settings_index == 0:
|
|
||||||
if self.settings_start_index > 0:
|
|
||||||
self.settings_start_index = self.settings_start_index - 1
|
|
||||||
return
|
|
||||||
self.unhighlight_this_row(self.settings_index)
|
|
||||||
self.settings_index = self.settings_index - 1
|
|
||||||
self.highlight_this_row(self.settings_index)
|
|
||||||
|
|
||||||
def settings_enter(self):
|
|
||||||
data_centre.switch_settings(self.settings_index + self.settings_start_index)
|
|
||||||
|
|||||||
0
display_centre/menu.py
Normal file
0
display_centre/menu.py
Normal file
31
display_centre/messages.py
Normal file
31
display_centre/messages.py
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
import logging
|
||||||
|
import data_centre.data
|
||||||
|
|
||||||
|
|
||||||
|
class MessageHandler(object):
|
||||||
|
def __init__(self):
|
||||||
|
self.current_message = [None, None, None]
|
||||||
|
self.number_of_messages = 0
|
||||||
|
self.logger = self.setup_logging()
|
||||||
|
|
||||||
|
def setup_logging(self):
|
||||||
|
logger = logging.getLogger('logfile')
|
||||||
|
current_dir = data_centre.data.get_the_current_dir_path()
|
||||||
|
hdlr = logging.FileHandler(current_dir + 'logfile.log')
|
||||||
|
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
|
||||||
|
hdlr.setFormatter(formatter)
|
||||||
|
logger.addHandler(hdlr)
|
||||||
|
logger.setLevel(logging.ERROR)
|
||||||
|
return logger
|
||||||
|
|
||||||
|
def set_message(self, message_type, message, stacktrace=''):
|
||||||
|
self.current_message = [message_type, message, True]
|
||||||
|
self.number_of_messages = self.number_of_messages + 1
|
||||||
|
if message_type is 'ERROR':
|
||||||
|
self.logger.error('ERROR MESSAGE IS: {} \n STACKTRACE IS: {}'.format(message, stacktrace))
|
||||||
|
|
||||||
|
def clear_message(self):
|
||||||
|
self.number_of_messages = self.number_of_messages - 1
|
||||||
|
if self.number_of_messages is 0:
|
||||||
|
self.current_message = [None, None, None]
|
||||||
|
|
||||||
28
r_e_c_u_r.py
28
r_e_c_u_r.py
@@ -2,24 +2,34 @@ import traceback
|
|||||||
from tkinter import Tk, Frame
|
from tkinter import Tk, Frame
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from user_input.actions import Actions
|
from actions import Actions
|
||||||
|
from data_centre.data import Data
|
||||||
from display_centre.display import Display
|
from display_centre.display import Display
|
||||||
|
from display_centre.messages import MessageHandler
|
||||||
from user_input.numpad_input import NumpadInput
|
from user_input.numpad_input import NumpadInput
|
||||||
from video_centre.video_driver import VideoDriver
|
from video_centre.video_driver import VideoDriver
|
||||||
import data_centre
|
import data_centre
|
||||||
|
|
||||||
## create tk object
|
# create tk object
|
||||||
tk = Tk()
|
tk = Tk()
|
||||||
frame = Frame(tk, width=500, height=400)
|
frame = Frame(tk, width=500, height=400)
|
||||||
|
|
||||||
## setup the video driver
|
# setup message handler
|
||||||
video_driver = VideoDriver(frame)
|
|
||||||
|
|
||||||
## setup the display
|
message_handler = MessageHandler()
|
||||||
display = Display(tk, video_driver)
|
|
||||||
|
|
||||||
## setup the actions
|
# setup data
|
||||||
actions = Actions(tk, video_driver, display)
|
|
||||||
|
data = Data(message_handler)
|
||||||
|
|
||||||
|
# setup the video driver
|
||||||
|
video_driver = VideoDriver(frame, message_handler, data)
|
||||||
|
|
||||||
|
# setup the display
|
||||||
|
display = Display(tk, video_driver, message_handler, data)
|
||||||
|
|
||||||
|
# setup the actions
|
||||||
|
actions = Actions(tk, message_handler, data, video_driver, display)
|
||||||
|
|
||||||
numpad_input = NumpadInput(display, actions)
|
numpad_input = NumpadInput(display, actions)
|
||||||
|
|
||||||
@@ -29,4 +39,4 @@ tk.attributes("-fullscreen", True)
|
|||||||
try:
|
try:
|
||||||
tk.mainloop()
|
tk.mainloop()
|
||||||
except:
|
except:
|
||||||
data_centre.set_message(traceback.print_tb(sys.exc_traceback, limit=1, file=sys.stdout))
|
message_handler.set_message(traceback.print_tb(sys.exc_traceback, limit=1, file=sys.stdout))
|
||||||
|
|||||||
@@ -1,59 +0,0 @@
|
|||||||
import data_centre
|
|
||||||
|
|
||||||
|
|
||||||
class Actions(object):
|
|
||||||
def __init__(self, tk, video_driver, display):
|
|
||||||
self.tk = tk
|
|
||||||
self.video_driver = video_driver
|
|
||||||
self.display = display
|
|
||||||
|
|
||||||
def move_browser_selection_down(self):
|
|
||||||
self.display.move_browser_down()
|
|
||||||
|
|
||||||
def move_browser_selection_up(self):
|
|
||||||
self.display.move_browser_up()
|
|
||||||
|
|
||||||
def enter_on_browser_selection(self):
|
|
||||||
self.display.browser_enter()
|
|
||||||
|
|
||||||
def move_settings_selection_down(self):
|
|
||||||
self.display.move_settings_down()
|
|
||||||
|
|
||||||
def move_settings_selection_up(self):
|
|
||||||
self.display.move_settings_up()
|
|
||||||
|
|
||||||
def enter_on_settings_selection(self):
|
|
||||||
self.display.settings_enter()
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def clear_all_sampler_banks():
|
|
||||||
data_centre.clear_all_banks()
|
|
||||||
|
|
||||||
def quit_the_program(self):
|
|
||||||
if self.video_driver.has_omx:
|
|
||||||
self.video_driver.exit_all_players()
|
|
||||||
self.tk.destroy()
|
|
||||||
|
|
||||||
def load_this_bank_into_next_player(self, bank):
|
|
||||||
data_centre.update_next_bank_number(bank)
|
|
||||||
self.video_driver.next_player.reload()
|
|
||||||
|
|
||||||
def trigger_next_player(self):
|
|
||||||
self.video_driver.manual_next = True
|
|
||||||
|
|
||||||
def cycle_display_mode(self):
|
|
||||||
if self.display.display_mode == "BROWSER":
|
|
||||||
self.display.display_mode = "LOOPER"
|
|
||||||
elif self.display.display_mode == "LOOPER":
|
|
||||||
self.display.display_mode = "SETTINGS"
|
|
||||||
elif self.display.display_mode == "SETTINGS":
|
|
||||||
self.display.display_mode = "BROWSER"
|
|
||||||
|
|
||||||
def toggle_pause_on_player(self):
|
|
||||||
self.video_driver.current_player.toggle_pause()
|
|
||||||
|
|
||||||
def seek_forward_on_player(self):
|
|
||||||
self.video_driver.current_player.seek(30)
|
|
||||||
|
|
||||||
def seek_back_on_player(self):
|
|
||||||
self.video_driver.current_player.seek(-30)
|
|
||||||
@@ -33,7 +33,7 @@ class NumpadInput(object):
|
|||||||
def on_backspace_press(self, event):
|
def on_backspace_press(self, event):
|
||||||
if self.display.display_mode == 'BROWSER':
|
if self.display.display_mode == 'BROWSER':
|
||||||
self.actions.enter_on_browser_selection()
|
self.actions.enter_on_browser_selection()
|
||||||
elif self.display.display_mode == 'LOOPER':
|
elif self.display.display_mode == 'SAMPLER':
|
||||||
self.actions.toggle_pause_on_player()
|
self.actions.toggle_pause_on_player()
|
||||||
elif self.display.display_mode == 'SETTINGS':
|
elif self.display.display_mode == 'SETTINGS':
|
||||||
self.actions.enter_on_settings_selection()
|
self.actions.enter_on_settings_selection()
|
||||||
@@ -42,7 +42,7 @@ class NumpadInput(object):
|
|||||||
def on_minus_press(self):
|
def on_minus_press(self):
|
||||||
if self.display.display_mode == 'BROWSER':
|
if self.display.display_mode == 'BROWSER':
|
||||||
self.actions.move_browser_selection_up()
|
self.actions.move_browser_selection_up()
|
||||||
elif self.display.display_mode == 'LOOPER':
|
elif self.display.display_mode == 'SAMPLER':
|
||||||
self.actions.seek_back_on_player()
|
self.actions.seek_back_on_player()
|
||||||
elif self.display.display_mode == 'SETTINGS':
|
elif self.display.display_mode == 'SETTINGS':
|
||||||
self.actions.move_settings_selection_up()
|
self.actions.move_settings_selection_up()
|
||||||
@@ -50,7 +50,7 @@ class NumpadInput(object):
|
|||||||
def on_plus_press(self):
|
def on_plus_press(self):
|
||||||
if self.display.display_mode == 'BROWSER':
|
if self.display.display_mode == 'BROWSER':
|
||||||
self.actions.move_browser_selection_down()
|
self.actions.move_browser_selection_down()
|
||||||
elif self.display.display_mode == 'LOOPER':
|
elif self.display.display_mode == 'SAMPLER':
|
||||||
self.actions.seek_forward_on_player()
|
self.actions.seek_forward_on_player()
|
||||||
elif self.display.display_mode == 'SETTINGS':
|
elif self.display.display_mode == 'SETTINGS':
|
||||||
self.actions.move_settings_selection_down()
|
self.actions.move_settings_selection_down()
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
import data_centre
|
|
||||||
from video_centre.video_player import video_player, fake_video_player # <== for deving only
|
from video_centre.video_player import video_player, fake_video_player # <== for deving only
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class VideoDriver(object):
|
class VideoDriver(object):
|
||||||
def __init__(self, root=None):
|
def __init__(self, root, message_handler, data):
|
||||||
self.root = root
|
self.root = root
|
||||||
|
self.message_handler = message_handler
|
||||||
|
self.data = data
|
||||||
self.delay = 5
|
self.delay = 5
|
||||||
self.has_omx = data_centre.has_omx
|
self.has_omx = self.data.has_omx
|
||||||
if self.has_omx:
|
if self.has_omx:
|
||||||
self.last_player = video_player(self.root, 'a.a')
|
self.last_player = video_player(self.root, 'a.a')
|
||||||
self.current_player = video_player(self.root, 'b.b')
|
self.current_player = video_player(self.root, 'b.b')
|
||||||
@@ -62,7 +62,7 @@ class VideoDriver(object):
|
|||||||
else:
|
else:
|
||||||
self.root.after(self.delay, self.wait_for_next_load)
|
self.root.after(self.delay, self.wait_for_next_load)
|
||||||
|
|
||||||
def get_info_for_video_display(self):
|
def get_info_for_player_display(self):
|
||||||
if self.has_omx:
|
if self.has_omx:
|
||||||
return self.current_player.bank_number, self.current_player.status, self.next_player.bank_number, \
|
return self.current_player.bank_number, self.current_player.status, self.next_player.bank_number, \
|
||||||
self.next_player.status, self.current_player.get_position(), self.current_player.length, \
|
self.next_player.status, self.current_player.get_position(), self.current_player.length, \
|
||||||
|
|||||||
@@ -2,16 +2,17 @@ try:
|
|||||||
from omxplayer.player import OMXPlayer
|
from omxplayer.player import OMXPlayer
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
import data_centre
|
|
||||||
if data_centre.DEV_MODE == 'ON':
|
|
||||||
screen_size = '50,350,550,750'
|
|
||||||
else:
|
|
||||||
screen_size = '45,15,970,760' #'--blank'
|
|
||||||
|
|
||||||
class video_player:
|
class video_player:
|
||||||
def __init__(self, root, name):
|
def __init__(self, root, message_handler, data, name):
|
||||||
self.root = root
|
self.root = root
|
||||||
self.player = None
|
self.message_handler = message_handler
|
||||||
|
self.data = data
|
||||||
|
|
||||||
|
self.screen_size = self.set_screen_size()
|
||||||
|
|
||||||
|
self.omx_player = None
|
||||||
self.name = name
|
self.name = name
|
||||||
self.omx_running = False
|
self.omx_running = False
|
||||||
self.status = 'N/A'
|
self.status = 'N/A'
|
||||||
@@ -27,10 +28,10 @@ class video_player:
|
|||||||
self.get_context_for_player()
|
self.get_context_for_player()
|
||||||
|
|
||||||
self.status = 'LOADING'
|
self.status = 'LOADING'
|
||||||
self.player = OMXPlayer(self.location, args=self.arguments, dbus_name=self.name)
|
self.omx_player = OMXPlayer(self.location, args=self.arguments, dbus_name=self.name)
|
||||||
self.omx_running = True
|
self.omx_running = True
|
||||||
print('duration is: {}'.format(self.duration))
|
print('duration is: {}'.format(self.duration))
|
||||||
self.duration = self.player.duration() # <-- uneeded once self.duration stores float
|
self.duration = self.omx_player.duration() # <-- uneeded once self.duration stores float
|
||||||
print('new duration is: {}'.format(self.duration))
|
print('new duration is: {}'.format(self.duration))
|
||||||
if(self.end is -1):
|
if(self.end is -1):
|
||||||
self.end = self.duration
|
self.end = self.duration
|
||||||
@@ -46,14 +47,14 @@ class video_player:
|
|||||||
start_threshold = self.start - 0.05
|
start_threshold = self.start - 0.05
|
||||||
if(position > start_threshold):
|
if(position > start_threshold):
|
||||||
self.status = 'LOADED'
|
self.status = 'LOADED'
|
||||||
self.player.pause()
|
self.omx_player.pause()
|
||||||
self.player.set_alpha(255)
|
self.omx_player.set_alpha(255)
|
||||||
elif(self.omx_running):
|
elif(self.omx_running):
|
||||||
self.root.after(5,self.pause_at_start)
|
self.root.after(5,self.pause_at_start)
|
||||||
|
|
||||||
def play(self):
|
def play(self):
|
||||||
self.status = 'PLAYING'
|
self.status = 'PLAYING'
|
||||||
self.player.play()
|
self.omx_player.play()
|
||||||
self.pause_at_end()
|
self.pause_at_end()
|
||||||
|
|
||||||
def pause_at_end(self):
|
def pause_at_end(self):
|
||||||
@@ -61,7 +62,7 @@ class video_player:
|
|||||||
end_threshold = self.end - 0.2
|
end_threshold = self.end - 0.2
|
||||||
if(position > end_threshold):
|
if(position > end_threshold):
|
||||||
self.status = 'FINISHED'
|
self.status = 'FINISHED'
|
||||||
self.player.pause()
|
self.omx_player.pause()
|
||||||
print('its paused at end!')
|
print('its paused at end!')
|
||||||
elif(self.omx_running):
|
elif(self.omx_running):
|
||||||
self.root.after(5,self.pause_at_end)
|
self.root.after(5,self.pause_at_end)
|
||||||
@@ -79,7 +80,7 @@ class video_player:
|
|||||||
|
|
||||||
def get_position(self):
|
def get_position(self):
|
||||||
try:
|
try:
|
||||||
return self.player.position()
|
return self.omx_player.position()
|
||||||
except:
|
except:
|
||||||
print('{}: error get_position'.format(self.name))
|
print('{}: error get_position'.format(self.name))
|
||||||
return -1
|
return -1
|
||||||
@@ -94,8 +95,8 @@ class video_player:
|
|||||||
self.bank_number = next_context['bank_number']
|
self.bank_number = next_context['bank_number']
|
||||||
|
|
||||||
def toggle_pause(self):
|
def toggle_pause(self):
|
||||||
self.player.play_pause()
|
self.omx_player.play_pause()
|
||||||
self.status = self.player.playback_status().upper()
|
self.status = self.omx_player.playback_status().upper()
|
||||||
|
|
||||||
def seek(self, amount):
|
def seek(self, amount):
|
||||||
position = self.get_position()
|
position = self.get_position()
|
||||||
@@ -107,16 +108,23 @@ class video_player:
|
|||||||
data_centre.set_message('INFO', 'can not seek outside range')
|
data_centre.set_message('INFO', 'can not seek outside range')
|
||||||
|
|
||||||
def set_position(self, position):
|
def set_position(self, position):
|
||||||
self.player.set_position(position)
|
self.omx_player.set_position(position)
|
||||||
|
|
||||||
def exit(self):
|
def exit(self):
|
||||||
try:
|
try:
|
||||||
self.player.quit()
|
self.omx_player.quit()
|
||||||
self.status = 'N/A'
|
self.status = 'N/A'
|
||||||
self.omx_running = False
|
self.omx_running = False
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
def set_screen_size(self):
|
||||||
|
if self.data.DEV_MODE == 'ON':
|
||||||
|
return '50,350,550,750'
|
||||||
|
else:
|
||||||
|
return '45,15,970,760'
|
||||||
|
|
||||||
|
|
||||||
class fake_video_player:
|
class fake_video_player:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.player = None
|
self.player = None
|
||||||
|
|||||||
Reference in New Issue
Block a user