diff --git a/app/src/main/java/ru/ytkab0bp/slicebeam/config/ConfigObject.java b/app/src/main/java/ru/ytkab0bp/slicebeam/config/ConfigObject.java index e121984..23498f8 100644 --- a/app/src/main/java/ru/ytkab0bp/slicebeam/config/ConfigObject.java +++ b/app/src/main/java/ru/ytkab0bp/slicebeam/config/ConfigObject.java @@ -34,6 +34,13 @@ public class ConfigObject implements ProfileListFragment.ProfileListItem { this.values.putAll(from.values); } + /** + * Note: suitable only from "printer" config + */ + public int getExtruderCount() { + return get("nozzle_diameter") != null ? get("nozzle_diameter").replaceAll("[^.]+", "").length() : 1; + } + public String get(String key) { return values.get(key); } diff --git a/app/src/main/java/ru/ytkab0bp/slicebeam/fragment/PrinterConfigFragment.java b/app/src/main/java/ru/ytkab0bp/slicebeam/fragment/PrinterConfigFragment.java index d7610a6..be3b761 100644 --- a/app/src/main/java/ru/ytkab0bp/slicebeam/fragment/PrinterConfigFragment.java +++ b/app/src/main/java/ru/ytkab0bp/slicebeam/fragment/PrinterConfigFragment.java @@ -113,7 +113,7 @@ public class PrinterConfigFragment extends ProfileListFragment { // TODO: m_supports_min_feedrates? <= marlin/marlin legacy )); - int count = currentConfig.get("nozzle_diameter") != null ? currentConfig.get("nozzle_diameter").replaceAll("[^.]+", "").length() : 1; + int count = currentConfig.getExtruderCount(); for (int i = 0; i < count; i++) { int j = count == 1 ? -1 : i; list.addAll(Arrays.asList( diff --git a/app/src/main/java/ru/ytkab0bp/slicebeam/fragment/ProfileListFragment.java b/app/src/main/java/ru/ytkab0bp/slicebeam/fragment/ProfileListFragment.java index a4548a6..5c150a7 100644 --- a/app/src/main/java/ru/ytkab0bp/slicebeam/fragment/ProfileListFragment.java +++ b/app/src/main/java/ru/ytkab0bp/slicebeam/fragment/ProfileListFragment.java @@ -433,6 +433,7 @@ public abstract class ProfileListFragment extends Fragment { public void onDestroy() { super.onDestroy(); SliceBeam.EVENT_BUS.unregisterListener(this); + unfolded.clear(); } @SuppressLint("NotifyDataSetChanged") @@ -477,7 +478,9 @@ public abstract class ProfileListFragment extends Fragment { String v = getCurrentConfig().get(def.key); if (i != -1) { try { - v = v.split(",")[i]; + String ch = ","; + if (def.guiType == ConfigOptionDef.GUIType.COLOR) ch = ";"; + v = v.split(ch)[i]; } catch (ArrayIndexOutOfBoundsException e) { Log.w("ProfileListFragment", "Failed to parse mm option", e); } @@ -487,9 +490,11 @@ public abstract class ProfileListFragment extends Fragment { protected void updateConfigField(ConfigOptionDef def, int i, String value) { if (i != -1) { - String[] vals = opt(def, -1).split(","); + String ch = ","; + if (def.guiType == ConfigOptionDef.GUIType.COLOR) ch = ";"; + String[] vals = opt(def, -1).split(ch); vals[i] = value; - value = TextUtils.join(",", vals); + value = TextUtils.join(ch, vals); } if (!Objects.equals(opt(def, i), value)) { @@ -697,7 +702,14 @@ public abstract class ProfileListFragment extends Fragment { } ref.set(builder.show()); - }); + }).setOnLongClickListener(v -> { + new BeamAlertDialogBuilder(getContext()) + .setTitle(Slic3rLocalization.getString(def.getFullLabel())) + .setMessage(Slic3rLocalization.getString(def.tooltip)) + .setPositiveButton(android.R.string.ok, null) + .show(); + return true; + });; if (def.type == ConfigOptionDef.ConfigOptionType.STRING || def.type == ConfigOptionDef.ConfigOptionType.STRINGS) { ((PreferenceItem) simpleItem).setSubtitleProvider(() -> opt(def, eIndex).trim()); @@ -727,11 +739,23 @@ public abstract class ProfileListFragment extends Fragment { case BOOLS: simpleItem = new PreferenceSwitchItem().setTitle(Slic3rLocalization.getString(def.label)) .setValueProvider(() -> "1".equals(opt(def, eIndex))) - .setChangeListener((buttonView, isChecked) -> updateConfigField(def, eIndex, String.valueOf(isChecked ? 1 : 0))); + .setChangeListener((buttonView, isChecked) -> updateConfigField(def, eIndex, String.valueOf(isChecked ? 1 : 0))) + .setLongClickListener(v -> { + new BeamAlertDialogBuilder(getContext()) + .setTitle(Slic3rLocalization.getString(def.getFullLabel())) + .setMessage(Slic3rLocalization.getString(def.tooltip)) + .setPositiveButton(android.R.string.ok, null) + .show(); + return true; + }); break; } } + public OptionElement(int specialType) { + this.specialType = specialType; + } + public OptionElement(int icon, String title) { this.icon = icon; this.title = title; @@ -858,7 +882,6 @@ public abstract class ProfileListFragment extends Fragment { @Override public View onCreateView(Context ctx) { FrameLayout v = new FrameLayout(ctx); - v.setBackgroundColor(Color.GREEN); v.setLayoutParams(new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewUtils.dp(32)) {{ bottomMargin = ViewUtils.dp(16); }}); diff --git a/app/src/main/java/ru/ytkab0bp/slicebeam/recycler/PreferenceItem.java b/app/src/main/java/ru/ytkab0bp/slicebeam/recycler/PreferenceItem.java index db19466..c3d2daf 100644 --- a/app/src/main/java/ru/ytkab0bp/slicebeam/recycler/PreferenceItem.java +++ b/app/src/main/java/ru/ytkab0bp/slicebeam/recycler/PreferenceItem.java @@ -30,6 +30,7 @@ public class PreferenceItem extends SimpleRecyclerItem