mod auto_solve;
mod callbacks;
mod deep_solve;
mod loading;
mod material_lookup;
mod native_io;
mod optimize_solve;
pub mod retarget;
mod state;
mod view;
use crate::{
MainWindow,
bridge::{library::source::LibrarySource, render_thread::RenderContext},
gui::solid_preview::preview_state::{PickBuffer, SolidLastSolved, SolidPreviewState},
};
use indicatrix_vault::db::sqlite::Database;
use state::EditorState;
use std::{
cell::RefCell,
rc::Rc,
sync::{Arc, Mutex},
};
pub fn setup_editor_callbacks(
ui: &MainWindow,
db: &Arc<Mutex<Database>>,
source: &Arc<Mutex<LibrarySource>>,
render_ctx: &Arc<Mutex<RenderContext>>,
preview_state: &Arc<SolidPreviewState>,
solid_last_solved: &SolidLastSolved,
solid_pick: &Arc<Mutex<Option<PickBuffer>>>,
) {
auto_solve::init(preview_state, solid_last_solved);
let state = Rc::new(RefCell::new(EditorState::fresh()));
view::refresh_editor_panel(ui, render_ctx, &state.borrow());
callbacks::setup_new_design_create_callback(
ui,
&state,
render_ctx,
preview_state,
solid_last_solved,
);
callbacks::setup_load_selected_callback(
ui,
&state,
render_ctx,
preview_state,
solid_last_solved,
db,
source,
);
callbacks::setup_solve_callback(ui, &state, render_ctx, preview_state, solid_last_solved);
callbacks::setup_undo_callback(ui, &state, render_ctx, preview_state, solid_last_solved);
callbacks::setup_redo_callback(ui, &state, render_ctx, preview_state, solid_last_solved);
callbacks::setup_apply_preform_callback(
ui,
&state,
render_ctx,
preview_state,
solid_last_solved,
);
callbacks::setup_apply_yield_inputs_callback(
ui,
&state,
render_ctx,
preview_state,
solid_last_solved,
);
callbacks::setup_save_tier_callback(ui, &state, render_ctx, preview_state, solid_last_solved);
callbacks::setup_remove_tier_callback(ui, &state, render_ctx, preview_state, solid_last_solved);
callbacks::setup_toggle_detach_callback(
ui,
&state,
render_ctx,
preview_state,
solid_last_solved,
);
callbacks::setup_inline_set_angle_callback(
ui,
&state,
render_ctx,
preview_state,
solid_last_solved,
);
callbacks::setup_nudge_angle_callback(ui, &state, render_ctx, preview_state, solid_last_solved);
callbacks::setup_duplicate_tier_callback(
ui,
&state,
render_ctx,
preview_state,
solid_last_solved,
);
callbacks::setup_toggle_multi_select_callback(ui, &state);
native_io::setup_export_asc_callback(ui, &state);
native_io::setup_save_native_callback(ui, &state);
native_io::setup_open_native_callback(ui, &state, render_ctx, preview_state, solid_last_solved);
callbacks::setup_adopt_meet_callback(ui, &state, render_ctx, preview_state, solid_last_solved);
callbacks::setup_deep_solve_callback(ui, &state);
callbacks::setup_deep_solve_cancel_callback(ui, &state);
callbacks::setup_optimize_callback(ui, &state, render_ctx);
callbacks::setup_optimize_cancel_callback(ui, &state);
callbacks::setup_optimize_apply_callback(
ui,
&state,
render_ctx,
preview_state,
solid_last_solved,
);
setup_editor_secondary_callbacks(
ui,
&state,
render_ctx,
preview_state,
solid_last_solved,
solid_pick,
);
}
fn setup_editor_secondary_callbacks(
ui: &MainWindow,
state: &Rc<RefCell<EditorState>>,
render_ctx: &Arc<Mutex<RenderContext>>,
preview_state: &Arc<SolidPreviewState>,
solid_last_solved: &SolidLastSolved,
solid_pick: &Arc<Mutex<Option<PickBuffer>>>,
) {
callbacks::setup_apply_design_material_callback(
ui,
state,
render_ctx,
preview_state,
solid_last_solved,
);
callbacks::setup_gear_apply_callback(ui, state);
callbacks::setup_gear_remap_confirm_callback(
ui,
state,
render_ctx,
preview_state,
solid_last_solved,
);
callbacks::setup_gear_remap_cancel_callback(ui, state);
callbacks::setup_apply_symmetry_callback(
ui,
state,
render_ctx,
preview_state,
solid_last_solved,
);
callbacks::setup_viewport_material_linked_changed_callback(ui, state, render_ctx);
callbacks::setup_material_suggestion_accept_callback(
ui,
state,
render_ctx,
preview_state,
solid_last_solved,
);
callbacks::setup_material_suggestion_dismiss_callback(ui);
callbacks::setup_retarget_open_callback(ui, state, render_ctx);
callbacks::setup_retarget_proposal_changed_callback(ui, state, render_ctx);
callbacks::setup_retarget_apply_callback(
ui,
state,
render_ctx,
preview_state,
solid_last_solved,
);
callbacks::setup_retarget_close_callback(ui, state);
callbacks::setup_solid_facet_hover_callback(ui, state, solid_pick, solid_last_solved);
callbacks::setup_solid_facet_click_callback(ui, state, solid_pick, solid_last_solved);
callbacks::setup_solid_selected_tier_changed_callback(
ui,
state,
render_ctx,
preview_state,
solid_last_solved,
);
}