Files
SliceBeam/app/src/main/java/ru/ytkab0bp/slicebeam/fragment/FilamentConfigFragment.java
T
2024-11-17 23:23:56 +03:00

281 lines
14 KiB
Java

package ru.ytkab0bp.slicebeam.fragment;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import ru.ytkab0bp.slicebeam.R;
import ru.ytkab0bp.slicebeam.SliceBeam;
import ru.ytkab0bp.slicebeam.config.ConfigObject;
import ru.ytkab0bp.slicebeam.recycler.SpaceItem;
import ru.ytkab0bp.slicebeam.slic3r.PrintConfigDef;
import ru.ytkab0bp.slicebeam.slic3r.Slic3rLocalization;
import ru.ytkab0bp.slicebeam.slic3r.Slic3rUtils;
import ru.ytkab0bp.slicebeam.utils.ViewUtils;
public class FilamentConfigFragment extends ProfileListFragment {
private List<ProfileListItem> compatItems;
private String lastPrinter;
private String lastPrint;
private int lastUid;
private ConfigObject currentConfig;
@Override
public void onCreate() {
super.onCreate();
onResetConfig();
}
@Override
protected List<ProfileListItem> getItems(boolean filter) {
List<ConfigObject> list = SliceBeam.CONFIG.filamentConfigs;
if (filter) {
String printer = SliceBeam.CONFIG.presets.get("printer");
String print = SliceBeam.CONFIG.presets.get("print");
if (Objects.equals(lastPrinter, printer) && Objects.equals(lastPrint, print) && compatItems != null && lastUid == SliceBeam.CONFIG_UID) {
return compatItems;
}
List<ConfigObject> nList = new ArrayList<>(list.size());
Slic3rUtils.ConfigChecker checker = new Slic3rUtils.ConfigChecker(SliceBeam.CONFIG.findPrinter(printer).serialize());
if (SliceBeam.CONFIG.findPrint(print) != null) {
Slic3rUtils.ConfigChecker printChecker = new Slic3rUtils.ConfigChecker(SliceBeam.CONFIG.findPrint(print).serialize());
for (ConfigObject obj : list) {
if (checker.checkCompatibility(obj.get("compatible_printers_condition")) && printChecker.checkCompatibility(obj.get("compatible_prints_condition"))) {
nList.add(obj);
}
}
printChecker.release();
}
checker.release();
lastPrinter = printer;
lastPrint = print;
lastUid = SliceBeam.CONFIG_UID;
return compatItems = (List) nList;
}
return (List) list;
}
@Override
protected List<OptionElement> getConfigItems() {
PrintConfigDef def = PrintConfigDef.getInstance();
return Arrays.asList(
new OptionElement(R.drawable.slot_filament_28, Slic3rLocalization.getString("Filament")),
new OptionElement(new SubHeader("Filament")),
new OptionElement(def.options.get("filament_colour")),
new OptionElement(def.options.get("filament_diameter")),
new OptionElement(def.options.get("extrusion_multiplier")),
new OptionElement(def.options.get("filament_density")),
new OptionElement(def.options.get("filament_cost")),
new OptionElement(def.options.get("filament_spool_weight")),
new OptionElement(new SpaceItem(0, ViewUtils.dp(4))),
new OptionElement(new SubHeader("Temperature")),
new OptionElement(def.options.get("idle_temperature")),
new OptionElement(new SpaceItem(0, ViewUtils.dp(4))),
new OptionElement(new SubHeader("Nozzle")),
new OptionElement(def.options.get("first_layer_temperature")),
new OptionElement(def.options.get("temperature")),
new OptionElement(new SpaceItem(0, ViewUtils.dp(4))),
new OptionElement(new SubHeader("Bed")),
new OptionElement(def.options.get("first_layer_bed_temperature")),
new OptionElement(def.options.get("bed_temperature")),
new OptionElement(new SpaceItem(0, ViewUtils.dp(4))),
new OptionElement(new SubHeader("Chamber")),
new OptionElement(def.options.get("chamber_temperature")),
new OptionElement(def.options.get("chamber_minimal_temperature")),
new OptionElement(new SpaceItem(0, ViewUtils.dp(4))),
new OptionElement(R.drawable.mode_fan_24, Slic3rLocalization.getString("Cooling")),
new OptionElement(new SubHeader("Enable")),
new OptionElement(def.options.get("fan_always_on")),
new OptionElement(def.options.get("cooling")),
new OptionElement(new SpaceItem(0, ViewUtils.dp(4))),
new OptionElement(new SubHeader("Fan speed")),
new OptionElement(def.options.get("min_fan_speed")),
new OptionElement(def.options.get("max_fan_speed")),
new OptionElement(new SpaceItem(0, ViewUtils.dp(4))),
new OptionElement(def.options.get("bridge_fan_speed")),
new OptionElement(def.options.get("disable_fan_first_layers")),
new OptionElement(def.options.get("full_fan_speed_layer")),
new OptionElement(new SpaceItem(0, ViewUtils.dp(4))),
new OptionElement(new SubHeader("Dynamic fan speeds")),
new OptionElement(def.options.get("enable_dynamic_fan_speeds")),
new OptionElement(def.options.get("overhang_fan_speed_0")),
new OptionElement(def.options.get("overhang_fan_speed_1")),
new OptionElement(def.options.get("overhang_fan_speed_2")),
new OptionElement(def.options.get("overhang_fan_speed_3")),
new OptionElement(new SpaceItem(0, ViewUtils.dp(4))),
new OptionElement(new SubHeader("Cooling thresholds")),
new OptionElement(def.options.get("fan_below_layer_time")),
new OptionElement(def.options.get("slowdown_below_layer_time")),
new OptionElement(def.options.get("min_print_speed")),
new OptionElement(new SpaceItem(0, ViewUtils.dp(4))),
new OptionElement(R.drawable.settings_outline_28, Slic3rLocalization.getString("Advanced")),
new OptionElement(new SubHeader("Filament properties")),
new OptionElement(def.options.get("filament_type")),
new OptionElement(def.options.get("filament_soluble")),
new OptionElement(new SpaceItem(0, ViewUtils.dp(4))),
new OptionElement(new SubHeader("Print speed override")),
new OptionElement(def.options.get("filament_max_volumetric_speed")),
new OptionElement(new SpaceItem(0, ViewUtils.dp(4))),
new OptionElement(def.options.get("filament_infill_max_speed")),
new OptionElement(def.options.get("filament_infill_max_crossing_speed")),
new OptionElement(new SpaceItem(0, ViewUtils.dp(4))),
new OptionElement(new SubHeader("Shrinkage compensation")),
// TODO: Support x_size_compensation/y_size_compensation instead (I'm too lazy to write description for now)
// new OptionElement(def.options.get("filament_shrinkage_compensation_x")),
// new OptionElement(def.options.get("filament_shrinkage_compensation_y")),
new OptionElement(def.options.get("filament_shrinkage_compensation_xy")),
new OptionElement(def.options.get("filament_shrinkage_compensation_z")),
new OptionElement(new SpaceItem(0, ViewUtils.dp(4))),
new OptionElement(new SubHeader("Wipe tower parameters")),
new OptionElement(def.options.get("filament_minimal_purge_on_wipe_tower")),
new OptionElement(new SpaceItem(0, ViewUtils.dp(4))),
new OptionElement(new SubHeader("Toolchange parameters with single extruder MM printers")),
new OptionElement(def.options.get("filament_loading_speed_start")),
new OptionElement(def.options.get("filament_loading_speed")),
new OptionElement(def.options.get("filament_unloading_speed_start")),
new OptionElement(def.options.get("filament_unloading_speed")),
new OptionElement(def.options.get("filament_load_time")),
new OptionElement(def.options.get("filament_unload_time")),
new OptionElement(def.options.get("filament_toolchange_delay")),
new OptionElement(def.options.get("filament_cooling_moves")),
new OptionElement(def.options.get("filament_cooling_initial_speed")),
new OptionElement(def.options.get("filament_cooling_final_speed")),
new OptionElement(def.options.get("filament_stamping_loading_speed")),
new OptionElement(def.options.get("filament_stamping_distance")),
new OptionElement(def.options.get("filament_purge_multiplier")),
new OptionElement(def.options.get("filament_ramming_parameters")),
new OptionElement(new SpaceItem(0, ViewUtils.dp(4))),
new OptionElement(new SubHeader("Toolchange parameters with multi extruder MM printers")),
new OptionElement(def.options.get("filament_multitool_ramming")),
new OptionElement(def.options.get("filament_multitool_ramming_volume")),
new OptionElement(def.options.get("filament_multitool_ramming_flow")),
new OptionElement(R.drawable.settings_outline_28, Slic3rLocalization.getString("Filament Overrides")),
new OptionElement(new SubHeader("Travel lift")),
new OptionElement(def.options.get("filament_retract_lift")),
new OptionElement(def.options.get("filament_travel_ramping_lift")),
new OptionElement(def.options.get("filament_travel_max_lift")),
new OptionElement(def.options.get("filament_travel_slope")),
new OptionElement(def.options.get("filament_travel_lift_before_obstacle")),
new OptionElement(def.options.get("filament_retract_lift_above")),
new OptionElement(def.options.get("filament_retract_lift_below")),
new OptionElement(new SpaceItem(0, ViewUtils.dp(4))),
new OptionElement(new SubHeader("Retraction")),
new OptionElement(def.options.get("filament_retract_length")),
new OptionElement(def.options.get("filament_retract_speed")),
new OptionElement(def.options.get("filament_deretract_speed")),
new OptionElement(def.options.get("filament_retract_restart_extra")),
new OptionElement(def.options.get("filament_retract_before_travel")),
new OptionElement(def.options.get("filament_retract_layer_change")),
new OptionElement(def.options.get("filament_wipe")),
new OptionElement(def.options.get("filament_retract_before_wipe")),
new OptionElement(new SpaceItem(0, ViewUtils.dp(4))),
new OptionElement(new SubHeader("Retraction when tool is disabled")),
new OptionElement(def.options.get("filament_retract_length_toolchange")),
new OptionElement(def.options.get("filament_retract_restart_extra_toolchange")),
new OptionElement(new SpaceItem(0, ViewUtils.dp(4))),
new OptionElement(R.drawable.settings_outline_28, Slic3rLocalization.getString("Custom G-code")),
new OptionElement(new SubHeader("Start G-code")),
new OptionElement(def.options.get("start_filament_gcode")),
new OptionElement(new SpaceItem(0, ViewUtils.dp(4))),
new OptionElement(new SubHeader("End G-code")),
new OptionElement(def.options.get("end_filament_gcode")),
new OptionElement(R.drawable.note_pen_outline_96, Slic3rLocalization.getString("Notes")),
new OptionElement(new SubHeader("Notes")),
new OptionElement(def.options.get("filament_notes")),
new OptionElement(R.drawable.wrench_outline_28, Slic3rLocalization.getString("Dependencies")),
new OptionElement(new SubHeader("Profile dependencies")),
new OptionElement(def.options.get("compatible_printers_condition")),
new OptionElement(def.options.get("compatible_prints")),
new OptionElement(def.options.get("compatible_prints_condition"))
);
}
@Override
protected void cloneCurrentProfile() {
ConfigObject obj = new ConfigObject(SliceBeam.INSTANCE.getString(R.string.SettingsProfileCopy, currentConfig.getTitle()));
obj.values.putAll(currentConfig.values);
currentConfig = new ConfigObject(obj);
SliceBeam.CONFIG.filamentConfigs.add(obj);
SliceBeam.CONFIG.presets.put("filament", obj.getTitle());
SliceBeam.saveConfig();
SliceBeam.getCurrentConfigFile().delete();
currentConfig = new ConfigObject(obj);
dropdownView.setTitle(getCurrentConfig().getTitle());
compatItems = null;
}
@Override
protected void deleteCurrentProfile() {
compatItems = null;
SliceBeam.CONFIG.filamentConfigs.remove(SliceBeam.CONFIG.findFilament(currentConfig.getTitle()));
selectItem(getItems(true).get(0));
dropdownView.setTitle(getCurrentConfig().getTitle());
}
@Override
protected void onApplyConfig(String title) {
compatItems = null;
ConfigObject obj = SliceBeam.CONFIG.findFilament(currentConfig.getTitle());
obj.setTitle(title);
obj.values.putAll(currentConfig.values);
currentConfig.setTitle(title);
SliceBeam.CONFIG.presets.put("filament", title);
SliceBeam.saveConfig();
SliceBeam.getCurrentConfigFile().delete();
dropdownView.setTitle(title);
}
@Override
protected void onResetConfig() {
currentConfig = new ConfigObject(SliceBeam.CONFIG.findFilament(SliceBeam.CONFIG.presets.get("filament")));
}
@Override
protected ConfigObject getCurrentConfig() {
return currentConfig;
}
@Override
protected int getTitle() {
return R.string.SlotFilamentConfigTooltip;
}
@Override
protected void selectItem(ProfileListItem item) {
currentConfig = new ConfigObject((ConfigObject) item);
SliceBeam.CONFIG.presets.put("filament", item.getTitle());
SliceBeam.saveConfig();
}
}