|
|
@@ -1,6 +1,10 @@
|
|
|
#include "init_deinit.h"
|
|
|
#include "input_event.h"
|
|
|
|
|
|
+#include "diskop.h"
|
|
|
+
|
|
|
+#define AUDIO_MODES_COUNT 2
|
|
|
+
|
|
|
TrackerView *tracker_view_alloc(FlizzerTrackerApp *tracker)
|
|
|
{
|
|
|
TrackerView *tracker_view = malloc(sizeof(TrackerView));
|
|
|
@@ -21,11 +25,29 @@ void tracker_view_free(TrackerView *tracker_view)
|
|
|
free(tracker_view);
|
|
|
}
|
|
|
|
|
|
+uint8_t my_value_index_bool(const bool value, const bool values[], uint8_t values_count) //why the fuck it gives unresolved symbol if I include it from toolbox???!!!
|
|
|
+{
|
|
|
+ uint8_t index = 0;
|
|
|
+
|
|
|
+ for(uint8_t i = 0; i < values_count; i++)
|
|
|
+ {
|
|
|
+ if(value == values[i])
|
|
|
+ {
|
|
|
+ index = i;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return index;
|
|
|
+}
|
|
|
+
|
|
|
FlizzerTrackerApp *init_tracker(uint32_t sample_rate, uint8_t rate, bool external_audio_output, uint32_t audio_buffer_size)
|
|
|
{
|
|
|
FlizzerTrackerApp *tracker = malloc(sizeof(FlizzerTrackerApp));
|
|
|
memset(tracker, 0, sizeof(FlizzerTrackerApp));
|
|
|
|
|
|
+ tracker->external_audio = external_audio_output;
|
|
|
+
|
|
|
sound_engine_init(&tracker->sound_engine, sample_rate, external_audio_output, audio_buffer_size);
|
|
|
tracker_engine_init(&tracker->tracker_engine, rate, &tracker->sound_engine);
|
|
|
|
|
|
@@ -56,17 +78,35 @@ FlizzerTrackerApp *init_tracker(uint32_t sample_rate, uint8_t rate, bool externa
|
|
|
tracker->pattern_submenu = submenu_alloc();
|
|
|
tracker->instrument_submenu = submenu_alloc();
|
|
|
|
|
|
- submenu_add_item(tracker->pattern_submenu, "Return", SUBMENU_PATTERN_RETURN, submenu_callback, tracker);
|
|
|
+ view_set_previous_callback(submenu_get_view(tracker->pattern_submenu), submenu_exit_callback);
|
|
|
+ view_set_previous_callback(submenu_get_view(tracker->instrument_submenu), submenu_exit_callback);
|
|
|
+
|
|
|
submenu_add_item(tracker->pattern_submenu, "Load song", SUBMENU_PATTERN_LOAD_SONG, submenu_callback, tracker);
|
|
|
submenu_add_item(tracker->pattern_submenu, "Save song", SUBMENU_PATTERN_SAVE_SONG, submenu_callback, tracker);
|
|
|
+ submenu_add_item(tracker->pattern_submenu, "Settings", SUBMENU_PATTERN_SETTINGS, submenu_callback, tracker);
|
|
|
submenu_add_item(tracker->pattern_submenu, "Exit", SUBMENU_PATTERN_EXIT, submenu_callback, tracker);
|
|
|
|
|
|
- submenu_add_item(tracker->instrument_submenu, "Return", SUBMENU_INSTRUMENT_RETURN, submenu_callback, tracker);
|
|
|
submenu_add_item(tracker->instrument_submenu, "Exit", SUBMENU_INSTRUMENT_EXIT, submenu_callback, tracker);
|
|
|
|
|
|
view_dispatcher_add_view(tracker->view_dispatcher, VIEW_SUBMENU_PATTERN, submenu_get_view(tracker->pattern_submenu));
|
|
|
view_dispatcher_add_view(tracker->view_dispatcher, VIEW_SUBMENU_INSTRUMENT, submenu_get_view(tracker->instrument_submenu));
|
|
|
|
|
|
+ load_config(tracker);
|
|
|
+
|
|
|
+ tracker->settings_list = variable_item_list_alloc();
|
|
|
+ View* view = variable_item_list_get_view(tracker->settings_list);
|
|
|
+ view_set_previous_callback(view, submenu_settings_exit_callback);
|
|
|
+
|
|
|
+ VariableItem* item;
|
|
|
+ uint8_t value_index;
|
|
|
+
|
|
|
+ item = variable_item_list_add(tracker->settings_list, "Audio output", AUDIO_MODES_COUNT, audio_output_changed_callback, tracker);
|
|
|
+ value_index = my_value_index_bool(tracker->external_audio, audio_modes_values, AUDIO_MODES_COUNT);
|
|
|
+ variable_item_set_current_value_index(item, value_index);
|
|
|
+ variable_item_set_current_value_text(item, audio_modes_text[value_index]);
|
|
|
+
|
|
|
+ view_dispatcher_add_view(tracker->view_dispatcher, VIEW_SETTINGS, view);
|
|
|
+
|
|
|
tracker->overwrite_file_widget = widget_alloc();
|
|
|
|
|
|
widget_add_button_element(
|
|
|
@@ -100,6 +140,7 @@ void deinit_tracker(FlizzerTrackerApp *tracker)
|
|
|
// Специальная очистка памяти, занимаемой очередью
|
|
|
furi_message_queue_free(tracker->event_queue);
|
|
|
|
|
|
+ view_dispatcher_remove_view(tracker->view_dispatcher, VIEW_SETTINGS);
|
|
|
view_dispatcher_remove_view(tracker->view_dispatcher, VIEW_FILE_OVERWRITE);
|
|
|
view_dispatcher_remove_view(tracker->view_dispatcher, VIEW_SUBMENU_INSTRUMENT);
|
|
|
view_dispatcher_remove_view(tracker->view_dispatcher, VIEW_SUBMENU_PATTERN);
|
|
|
@@ -108,6 +149,8 @@ void deinit_tracker(FlizzerTrackerApp *tracker)
|
|
|
|
|
|
text_input_free(tracker->text_input);
|
|
|
|
|
|
+ variable_item_list_free(tracker->settings_list);
|
|
|
+
|
|
|
submenu_free(tracker->pattern_submenu);
|
|
|
submenu_free(tracker->instrument_submenu);
|
|
|
|