cm.abstract.materialHandling

All removed/modified interfaces. See specific sections for more details on what migration changes need to be made.

Old: public class MhFrameUpdateBayHeightFunction extends MhSystemEngineFunction {
New: public class MhFrameHeightChangeUpdateBayFunction extends MhSystemEngineFunction {

Old: public bool isBack2(Object o) { return evalClassification(o, sBack); }
New: public bool isBack(Object o) { return evalClassification(o, sBack); }

Old: public bool isBack(Object o) { return evalClassification(o, sBackRow); }
New: public bool isBackRow(Object o) { return evalClassification(o, sBackRow); }

Old: public MhSnapper[] getAllRowsRecursive(MhSnapper snapper, bool top=false, bool reverse=true, Snapper{} visited=null) {
New: public MhSnapper[] getAllRowsRecursive(MhSnapper snapper, bool top=false, Snapper{} visited=null) {

Old: public double mhCalculatedBayHeightForConstruction(MhSystemConfigurationItem this, MhSnapper bay, int numLevels, bool loadOnFloor=true, bool loadWithinLimit=true) {
New: public double mhCalculatedBayHeightForConstruction(MhSystemConfigurationItem this, MhSnapper bay, int numLevels, bool loadOnFloor=true, bool loadWithinLimit=true, bool forceConstruct=false) {

Old: public class MhDbgSpaceViewer extends DialogWindow {
New: public class MhDebugSpaceViewerDialog extends DialogWindow {

Old: public class MhBayCollisionAlternative extends MhDoubleStepRangeCollisionAlternative { 
New: public class MhRowChildCollisionAlternative extends MhSubSetCollisionAlternative {

Old: public class MhDoubleStepRangeCollisionAlternative extends MhCollisionAlternative {
New: public class MhSubSetCollisionAlternative extends MhCollisionAlternative {

Old: public CollisionPrimitive localCollisionPrimitive(MhSnapper this) : inline, deprecated {
Old: public CollisionPrimitive localCollisionPrimitive(MhSnapper this, MhCollisionFetchEnv env) : inline {
New: public CollisionPrimitive localCollisionPrimitive(MhSnapper this, MhCollisionFetchEnv env=null) : inline {

Removed: public bool isArm(Snapper snapper) { return evalClassification(snapper, sArm); } 
Removed: public void mhStorageRegisterFunctions(CxFunction[] functions, symbol pkg=null) {
Removed: public void mhStoragePutNextPkgLookup(symbol pkg, symbol next) {

Removed: public class MhBayAndPalletsGfxBehavior extends MhBayGfxBehavior {
Removed: public class MhCollisionEntrySnapperFilter extends MhCollisionSnapperFilter : deprecated {
Removed: public class MhBayStretchSymFunction extends MhSystemEngineFunction : deprecated {
Removed: public class MhBayStretch3DFunction extends MhSystemEngineFunction : deprecated {
Removed: public class MhDoubleDeepLevelLinkFunction extends MhSystemEngineFunction : deprecated {
Removed: public class MhLevelLinkFunction extends MhSystemEngineFunction : deprecated {
Removed: public class MhRowSystemSymFunction extends MhSystemEngineFunction : deprecated {
Removed: public class MhRowSystem2DFunction extends MhRowSystemSymFunction : deprecated {
Removed: public class MhRowSystem3DFunction extends MhRowSystemSymFunction : deprecated {
Removed: public class MhUnitLoadFixedStepPrimPopulator2 extends MhPopulator : deprecated {
Removed: public class MhUnitLoadStepPrimPopulator extends MhPopulator : deprecated {
Removed: public class MhStorageEngineStretchVessel extends MhStretchVessel : deprecated {
Removed: public class MhStorageEditorDifferentExtensionDialog extends ModalDialog : deprecated {
Removed: public class MhEngineOverrideFunctionInfo {

public class MhSnapper extends Snapper {
- Removed: extend public box localBound(symbol[] symbols) : deprecated {
- Removed: extend public CollisionPrimitive collisionPrimitive(Transform t, bool includeChildren, Object env=null) : deprecated {
- Removed: extend public void putEngineEntryDim(str key, double v) : deprecated {
- Old: extend public MhSnapper getSnapperReplacementForPickupApply() : deprecated {
- Old: extend public MhSnapper getSnapperReplacementForPickupApply(CoreObject candidate) : deprecated {
- New: extend public MhSnapper getSnapperReplacementForPickupApply(CoreObject candidate=null) {

public class MhSnapperShape extends CorePropObj {
- Old: extend public MhSnapper getSnapperReplacementForPickupApply() : deprecated {
- Old: extend public MhSnapper getSnapperReplacementForPickupApply(CoreObject candidate) {
- New: extend public MhSnapper getSnapperReplacementForPickupApply(CoreObject candidate=null) {

public class MhBehavior extends CoreObject {
- Removed: extend public bool allowTrySnap(MhSnapper snapper, MhTrySnapAlternative alternative) : deprecated {

public class MhSystemConfiguration extends CoreObject {
- Removed: extend public void showPackageInfoMismatchDialog() { }
// See Old engine removal section
- Removed: extend public symbol functionPath() {

public class MhApplyColorFrameVessel extends MhSpreadColorFrameVessel {
- Removed: extend public bool useStrictClassification() : deprecated {

public class MhAssortment extends CorePropObj {
- Removed: extend public MhEngine engine() : deprecated {
- Removed: public symbol functionPath
- Removed: public bool useEngineFuncG2 : stream=null
- Removed: extend public bool useEngineFuncG2() {

public class MhEngineManager extends CoreObject {
- Removed: public MhEngine->MhEngineRun engineRuns : deprecated;
- Removed: extend public bool useEngineFuncG2() {
- Removed: extend public void ensureConfiguration(MhEngine engine, str->Object args) {
}

public class MhEngine extends CxEngine {
- Removed: public void mhRegisterEngineFunction(MhEngine engine, CxFunction func, symbol pkg=null) {
- Removed: public void mhPutEngineNextPkgLookup(MhEngine engine, symbol pkg, symbol next) {
- Removed: final public symbol functionPath() {
- Removed: final public void setFunctionPath(symbol functionPath) {

public class MhEngineBehavior extends MhBehavior : inherit constructors {
- Removed: extend public void putEngineEntryDim(MhSnapper snapper, str key, double v) : deprecated {
- Removed: extend public symbol functionPath(MhSnapper snapper) {
- Removed: extend public bool useEngineFuncG2(MhSnapper snapper) {
- Removed: extend public void putEngineRunFunctions(MhSnapper snapper, symbol event="", Object env=null) {
- Old: extend public void fetchEngineFunctionsRunG2(MhEngineFunctionRun[] functions, MhSnapper snapper, symbol event="", Object env=null) {
- New: extend public void fetchEngineFunctionsRun(MhEngineFunctionRun[] functions, MhSnapper snapper, symbol event="", Object env=null) {
- Old: extend public MhPreprocessArgsEnv preprocessFuncArgsG2(MhEngineFunctionRun[] functions, MhSnapper snapper, symbol event="", Object env=null) {
- New: extend public MhPreprocessArgsEnv preprocessFuncArgs(MhEngineFunctionRun[] functions, MhSnapper snapper, symbol event="", Object env=null) {
- Old: extend public str->Object engineFunctionArgsG2(MhSnapper snapper, MhEngineFunctionRun func, symbol event="", MhPreprocessArgsEnv preprocessArgs=null, Object env=null) {
- New: extend public str->Object engineFunctionArgs(MhSnapper snapper, MhEngineFunctionRun func, symbol event="", MhPreprocessArgsEnv preprocessArgs=null, Object env=null) {
- Old: extend public bool acceptFunctionRunG2(MhSnapper snapper, MhEngineFunctionRun func, symbol event="", Object env=null) {
- New: extend public bool acceptFunctionRun(MhSnapper snapper, MhEngineFunctionRun func, symbol event="", Object env=null) {

public class MhEngineFunctionLibrary extends CxFunctionLibrary {
- Removed: public MhEngineOverrideFunctionInfo overrideInfo
- Removed: public symbol->symbol nextFunctionLookupPkgs
- Removed: extend public void register(CxFunction fun, symbol pkg) {
- Removed: extend public void putNextPkgLookup(symbol path, symbol next) {
- Removed: extend public void optimizeFunctionsOrder(MhSystemConfiguration config) {
- Old: final public CxFunction getFunction(str key, symbol path, bool finalize) : deprecated {
- Old: final public CxFunction getFunction(str key, symbol path) {
- New: final public CxFunction getFunction(str key) {

public class MhEngineSnapperEntry extends MhEngineBoxEntry : inherit constructors {
- Removed: extend public MhEngineSnapperEntry zeroTransformSnapperEntry() : deprecated {

public class MhSnapperApplyAnimation extends MhSnapperSpreadToolAnimation {
- Removed: extend public MhSnapper snapperReplacement(MhSnapper pickedUp) : deprecated {

public class MhBayBracingBehavior extends MhBehavior {
- Removed: extend public bool topBracing(int bayIndex) : deprecated { return true; }
- Removed: extend public bool backBracing(int bayIndex) : deprecated { return true; }
- Old: extend public Graph cross2D(rect r) {
- New: extend public Graph cross2D(rect r, double z) {

public class MhRowAnimationEngineGfxBehavior extends MhGenericEngineGfxBehavior {
- Removed: extend public GMaterial3D entryMaterial3D(MhEngineEntry entry) : deprecated {
- Removed: extend public color entryColor(MhEngineEntry entry) : deprecated {

public class MhLevelArrangeFunction extends MhSystemEngineFunction {
- Removed: public Bool maintainLowestLevel : deprecated;
- Removed: extend public double standOnZ(MhEngineEntry entry) : deprecated {
- Removed: extend public MhPopulator populator(MhEngineEntry edit) : deprecated {
- Removed: extend public bool shouldMoveLevel(MhEngine engine, MhEngineBoxEntry entry, MhEngineBoxEntry lastEntry, double diff, double fixedLimit, bool isLowestLevel) {
- New: extend public bool shouldMoveLevel(MhEngine engine, MhEngineBoxEntry entry, MhEngineBoxEntry lastEntry, double diff, double fixedLimit) {

public class MhAisleUpdateWidthFunction extends MhSystemEngineFunction {
- Removed: extend public box localBoundIncludingChildren(MhEngineEntry entry, Transform t, MhEngine engine) {
- Removed: extend public box localBoundIncludingChildren(MhEngineEntry entry, Transform t, MhEngine engine, LayerSet ls) {
- New: extend public box localBoundIncludingChildren(MhEngineEntry entry, Transform t, MhEngine engine, LayerSet ls=null) {

public class MhRowSystemCollisionAdjustToFlue extends MhRowSystemCollisionSolution {
- Removed: extend public void alignYToColumns(MhEngineEntryBlock[] blocks, double columnY, bool up, int &lastIndex) : deprecated {
- Removed: extend public int findBestFlueSpaceIndex(MhEngineEntryBlock[] blocks, double columnY, bool up, int lastIndex=0) : deprecated {

public class MhLevelShape extends MhBoxSnapperShape {
- Removed: extend public void unstreamStoredSpec(ObjectFormatter formatter) : deprecated {

public class MhBayEditConfiguration extends MhStorageEditorConfiguration {
- Removed: extend public void overrideFramesMaterial() : deprecated {
- Removed: extend public void overrideFrameMaterial(Snapper snapper) : deprecated {

public class MhBayLevelEditorItem extends MhBayEditorItem {
- Removed: extend public MhClearanceBehavior bayEditorLevelClearanceBehavior(double newLevelClearance) : deprecated {
- Removed: extend public int clearanceSpecId(World w=null) : deprecated {

public class MhBayEditorLevelClearanceBehavior extends MhClearanceBehavior : unstreamable {
- Removed: public constructor(double levelClearanceZ) : deprecated {

public class MhSnapperSpreadVessel extends Vessel {
- Old: extend public bool showIntervalProps(Object currentSpread=this."spreadPattern")
- New: extend public bool showIntervalProps()

public class MhRunEngineEnv {
- Old: public constructor(bool cleanup=true, bool blockImport=false, bool blockExport=false, bool blockFinalize=true, bool removeFailedEntry=false, bool showProgressBar=false) {
- New: public constructor(Space space=null, bool cleanup=true, bool blockImport=false, bool blockExport=false, bool blockFinalize=true, bool removeFailedEntry=false, MhSnapper initiator=null, bool showProgressBar=false) {
}

public class MhRowLegendInfoBehavior extends MhBehavior : abstract {
- Removed: extend public MhGridColumnEnv[] columns(MhSnapper row) : abstract, deprecated { }
- Removed: extend public str->MhRowLegendInfo[] getRowInfos(MhSnapper row) : abstract, deprecated { }

public class MhRowLocationLegendBehavior extends MhRowLegendInfoBehavior {
- Removed: extend public str{} getUniqueUnitLoadsKeys(MhSnapper[] rows) : deprecated {

public class MhBayRowEngineBehavior extends MhEngineBehavior
- Removed: extend public void putAisleUpdateFunctions(MhEngine engine, MhSnapper snapper, bool top) {
- Removed: extend public void putAisleUpdateFunctions(MhEngine engine, MhSnapper snapper) {
- Removed: extend public void putAisleUpdateFunctions(MhEngine engine, MhSnapper snapper, MhSnapper aisleRow, MhSnapper topRow, MhSnapper downRow) {
- Old: extend public MhSnapper[] propagatingRows(MhSnapper snapper, MhSnapperChangedEnv env) 
- New: extend public MhSnapper{} propagatingRows(MhSnapper snapper, MhSnapperChangedEnv env)
- Old: extend public void collectPropagatingRow(MhSnapper snapper, MhSnapperChangedEnv env, MhSnapper[] res)
- New: extend public void collectPropagatingRow(MhSnapper snapper, MhSnapperChangedEnv env, MhSnapper{} res)
- Old: extend public void collectSelectionPropagatingRow(MhSnapper snapper, MhSnapperChangedEnv env, MhSnapper[] res)
- New: extend public void collectSelectionPropagatingRow(MhSnapper snapper, MhSnapperChangedEnv env, MhSnapper{} res)
- Old: extend public void appendForcedPropagations(MhSnapperChangedEnv env, str key, MhSnapper[] res)
- New: extend public void appendForcedPropagations(MhSnapperChangedEnv env, str key, MhSnapper{} res)
- Old: extend public void appendSnapperPropagations(MhSnapper s, MhSnapperChangedEnv env, str key, MhSnapper[] res)
- New: extend public void appendSnapperPropagations(MhSnapper s, MhSnapperChangedEnv env, str key, MhSnapper{} res)
- Old: extend public void appendPropagationRowChildren(MhSnapper row, MhSnapperChangedEnv env, str key, MhSnapper[] res)
- New: extend public void appendPropagationRowChildren(MhSnapper row, MhSnapperChangedEnv env, str key, MhSnapper{} res)
- Old: extend public void finalizePropagatingSnappers(MhSnapperChangedEnv env, str key, MhSnapper[] res)
- New: extend public void finalizePropagatingSnappers(MhSnapperChangedEnv env, str key, MhSnapper{} res)

public class MhRowSnapperSpawner extends MhStorageSpawner {
// This is replaced with normal `customEngineBehaviors` call. 
- Removed: extend public MhBehavior[] engineBehavior() {

public class MhInsertHeightBehavior extends MhBehavior {
- Removed: extend public SubSet heightDomain(MhSnapper toSnapper=null) {
- New: extend public SubSet heightDomain(Snapper owner, MhSnapper toSnapper=null) {

public class MhStorageConfiguration extends MhSystemConfiguration {
- Old: extend public MhConfiguratorPreviewSpace previewSpace()
- New: extend public MhConfiguratorPreviewSpace previewSpace(bool initIfNull=true)

public class MhInsertHeightBehavior extends MhBehavior {
- Removed: extend public double resolveZPos(MhSnapper owner, double z, MhCollisionAlternative alt, CollisionPrimitive ownerPrims, vector dir) {
- New: extend public double resolveZPos(MhSnapper owner, double z, double elev, MhCollisionAlternative alt, CollisionPrimitive ownerPrims, vector dir) {
- Removed: extend public CollisionSolution resolveZPosSolution(MhSnapper owner, double z, MhCollisionAlternative alt, CollisionPrimitive ownerPrims, vector dir) {
- New: extend public CollisionSolution resolveZPosSolution(MhSnapper owner, double z, double elev, MhCollisionAlternative alt, CollisionPrimitive ownerPrims, vector dir) {
- Removed: extend public CollisionSolution resolveZPosSolution(MhSnapper owner, double z, CollisionResolver resolver, CollisionPrimitive ownerPrims, vector dir) {
- New: extend public CollisionSolution resolveZPosSolution(MhSnapper owner, double z, double elev, CollisionResolver resolver, CollisionPrimitive ownerPrims, vector dir) {

public class MhLevelInsertHeightBehavior extends MhBehavior {
- Removed: extend public bool updateHeightDomains(MhSnapper owner, MhSnapper toSnapper, Object env=null) {
- Removed: extend public SubSet restrictedHeightDomain(MhSnapper firstAbove, MhSnapper firstBelow, MhSnapper owner, MhSnapper toSnapper, Object env) {
- Removed: extend public <SubSet, SubSet> freeSpacesDomains(MhSnapper firstAbove, MhSnapper firstBelow, MhSnapper owner, MhSnapper toSnapper, Object env=null) {
- Removed: extend public bool isConflicting(MhSnapper owner, double z, MhCollisionAlternative alt, CollisionPrimitiveSet ownerPrims) {
- Removed: extend public void checkInsertHeightLocked(point& p, SubSet heightDomain) {
- Removed: extend public void checkFreeSpaceAboveLocked(point& p, SubSet aboveDomain, MhSnapper firstAbove, MhSnapper owner, MhSnapper toSnapper) {
- Removed: extend public void checkFreeSpaceBelowLocked(point& p, SubSet belowDomain, MhSnapper firstBelow, MhSnapper owner, MhSnapper toSnapper) {
- Removed: extend public <Double, Double> calculateFreeSpaceAboveAndBelow(MhSnapper owner, MhSnapper toSnapper, double insertH, Snapper specificAboveSnapper=null, Snapper specificBelowSnapper=null) {
- Removed: extend public box boundForCalculation(MhSnapper snapper, bool toSpace=false) {
- Removed: extend public symbol[] geoSymbolsForCalculation() {
- New: extend public void toggleLockProperties(bool lock, str except=null) {
- New: extend public double updateFreeSpacesProperties(MhSnapper owner, MhSnapper toSnapper, Object env) {
- New: extend public double updateElevationProperty(MhSnapper owner, MhSnapper toSnapper, Object env) {
- New: extend public LayerSet collisionLayerToCollide() {
- New: extend public LayerSet collisionLayerToIgnore() {

public class MhConfigManager : unstreamable {
- Removed: extend public void fixInconsistenciesIfNecessary() {
- Use: extend public void updateConfigsAfterRestoredByUndo(MhSnapper current, MhSnapper original) {

Classification evaluation functions renamed

Old: public bool isBack2(Object o) { return evalClassification(o, sBack); }
New: public bool isBack(Object o) { return evalClassification(o, sBack); }

Old: public bool isBack(Object o) { return evalClassification(o, sBackRow); }
New: public bool isBackRow(Object o) { return evalClassification(o, sBackRow); }

Important to note is that the isBack() function interface still exists but the logic has been updated as shown above, so it will not throw a compilation error. Ensure that you are calling the appropriate function.

getAllRowsRecursive changes

Removed the bool reverse=true argument from this function.

Old: public MhSnapper[] getAllRowsRecursive(MhSnapper snapper, bool top=false, bool reverse=true, Snapper{} visited=null) {
New: public MhSnapper[] getAllRowsRecursive(MhSnapper snapper, bool top=false, Snapper{} visited=null) {

mhCalculatedBayHeightForConstruction changes

Added a new argument bool forceConstruct=false argument to this function. Set it to true if you want to use construction collision primitives in this function.

Old: public double mhCalculatedBayHeightForConstruction(MhSystemConfigurationItem this, MhSnapper bay, int numLevels, bool loadOnFloor=true, bool loadWithinLimit=true) {
New: public double mhCalculatedBayHeightForConstruction(MhSystemConfigurationItem this, MhSnapper bay, int numLevels, bool loadOnFloor=true, bool loadWithinLimit=true, bool forceConstruct=false) {

MhDbgSpaceViewer changes

The class MhDbgSpaceViewer has been renamed to MhDebugSpaceViewerDialog . Additionally it has been moved from cm.abstract.materialHandling.storage.tools.editor to cm.abstract.materialHandling.debug.

MhSnapper changes

Replace all overrides and calls to localBound(symbol[] symbols) with shapeBound(symbol[] symbols=null).

Removed: extend public box localBound(symbol[] symbols) : deprecated {
Use: extend public box shapeBound(symbol[] symbols=null) {

Replace all overrides and calls to collisionPrimitive(Transform t, bool includeChildren, Object env=null) with collisionPrimitive(MhCollisionFetchEnv env).

Removed: extend public CollisionPrimitive collisionPrimitive(Transform t, bool includeChildren, Object env=null) : deprecated {
Use: extend public CollisionPrimitive collisionPrimitive(MhCollisionFetchEnv env) {

The deprecated method putEngineEntryDim(str key, double v) has been removed. We have previously replaced calls to this method with updateEngineEntry() instead.

Removed: extend public void putEngineEntryDim(str key, double v) : deprecated {

Replace all overrides and calls to getSnapperReplacementForPickupApply() and getSnapperReplacementForPickupApply(CoreObject candidate) with getSnapperReplacementForPickupApply(CoreObject candidate=null).

Removed: extend public MhSnapper getSnapperReplacementForPickupApply() : deprecated {
Removed: extend public MhSnapper getSnapperReplacementForPickupApply(CoreObject candidate) : deprecated {
New: extend public MhSnapper getSnapperReplacementForPickupApply(CoreObject candidate=null) {

New argument for invalidate engine.

Old: extend public void invalidateEngine()
New: extend public void invalidateEngine(Object env=null)

MhSnapperShape changes

Replace all overrides and calls to getSnapperReplacementForPickupApply() and getSnapperReplacementForPickupApply(CoreObject candidate) with getSnapperReplacementForPickupApply(CoreObject candidate=null).

Removed: extend public MhSnapper getSnapperReplacementForPickupApply() : deprecated {
Removed: extend public MhSnapper getSnapperReplacementForPickupApply(CoreObject candidate) {
New: extend public MhSnapper getSnapperReplacementForPickupApply(CoreObject candidate=null) {

MhBehavior changes

Replace all overrides and calls to allowTrySnap(MhSnapper snapper, MhTrySnapAlternative alternative) with allowTrySnap(MhSnapper snapper, MhTrySnapAlternative alternative, Animation anim).

Removed: extend public bool allowTrySnap(MhSnapper snapper, MhTrySnapAlternative alternative) : deprecated {
Use: extend public bool allowTrySnap(MhSnapper snapper, MhTrySnapAlternative alternative, Animation anim) {

MhRunEngineEnv changes

MhRunEngineEnv has two new arguments, initiator and space.

The initiator argument is used to keep track of what started the engine run to determine if an actual change is needed (eg: level height increasing the bay height should not populate new levels and which should only happen if the bay is the initiator).

The space argument is used to control what engine runs are executed. If space=null, triggering mhRunEngines() will run all collected engine runs, this is the current behavior. We have now added the ability to only run specific engine runs by passing in a space to MhRunEngineEnv. See More control over which engine runs are executed using space for more info.

Old: public constructor(bool cleanup=true, bool blockImport=false, bool blockExport=false, bool blockFinalize=true, bool removeFailedEntry=false, bool showProgressBar=false) {

New: public constructor(Space space=null, bool cleanup=true, bool blockImport=false, bool blockExport=false, bool blockFinalize=true, bool removeFailedEntry=false, MhSnapper initiator=null, bool showProgressBar=false) {

MhSystemConfiguration changes

Replace all overrides and calls to showPackageInfoMismatchDialog() with showPackageInfoMismatchDialog(symbol packageInfo).

Removed: extend public void showPackageInfoMismatchDialog() { }
Use: public void showPackageInfoMismatchDialog(symbol packageInfo) {}

MhApplyColorFrameVessel changes

Replace all overrides and calls to useStrictClassification() with useStrictClassification(MhSnapper c).

Removed: extend public bool useStrictClassification() : deprecated {
Use: extend public bool useStrictClassification(MhSnapper c) {

MhEngineSnapperEntry changes

The deprecated method zeroTransformSnapperEntry() has been removed as it is no longer needed for its original purpose which was to remove a roll angle from its transform. We now handle it differently by unrolling the entry's CollisionPrimitive. If you need to unroll CollisionPrimitive objects,, call the function mhUnrollCollisionPrim(CollisionPrimitive prim).

Removed: extend public MhEngineSnapperEntry zeroTransformSnapperEntry() : deprecated {

MhSnapperApplyAnimation changes

Replace all overrides and calls to snapperReplacement(MhSnapper pickedUp) with snapperReplacement(MhSnapper pickedUp, CoreObject candidate).

Removed: extend public MhSnapper snapperReplacement(MhSnapper pickedUp) : deprecated {
Use: extend public MhSnapper snapperReplacement(MhSnapper pickedUp, CoreObject candidate) {

MhBayBracingBehavior changes

Replace all overrides and calls to topBracing(int bayIndex) with topBracing(MhSnapper bay, int bayIndex).

Removed: extend public bool topBracing(int bayIndex) : deprecated { return true; }
Use: extend public bool topBracing(MhSnapper bay, int bayIndex) { return true; }

Replace all overrides and calls to backBracing(int bayIndex) with backBracing(MhSnapper bay, int bayIndex).

Removed: extend public bool backBracing(int bayIndex) : deprecated { return true; }
Use: extend public bool backBracing(MhSnapper bay, int bayIndex) { return true; }

Replace all overrides and calls to cross2D(rect r) with cross2D(rect r, double z).

Old: extend public Graph cross2D(rect r) {
New: extend public Graph cross2D(rect r, double z) {

MhRowAnimationEngineGfxBehavior changes

Replace all overrides and calls to entryMaterial3D(MhEngineEntry entry) with entryMaterial3D(MhEngineEntry entry, MhEngine engine).

Removed: extend public GMaterial3D entryMaterial3D(MhEngineEntry entry) : deprecated {
Use: extend public GMaterial3D entryMaterial3D(MhEngineEntry entry, MhEngine engine) {

Replace all overrides and calls to entryColor(MhEngineEntry entry) with entryColor(MhEngineEntry entry, MhEngine engine).

Removed: extend public color entryColor(MhEngineEntry entry) : deprecated {
Use: extend public color entryColor(MhEngineEntry entry, MhEngine engine) {

MhLevelArrangeFunction changes

The field beamOffsetZ (and its PropDef) has been removed as it is not in use. If you have overridden this class and need this field, please add it back in as well as the PropDef.

The value for beamOffsetZ is no longer being passed in as a function argument in MhBayEngineBehavior for the "levelArrange" function. You will also need to override this behavior to pass in the argument if beamOffsetZ is still needed by your function.

Old:
    /**
     * Gather function args.
     */
    public str->Object engineFunctionArgsG2(MhSnapper snapper, MhEngineFunctionRun func, symbol event="",
                                            MhPreprocessArgsEnv preprocessArgs=null, Object env=null) {
        ...
          case "levelArrange" : {
              ...
              return props { snapper=snapper,
                    holeZDomain=preprocessArgs.get(cMhHoleZDomainPK),
                    additionalPrim=preprocessArgs.get(cMhAdditionalPrimPK),
                    squeezeLevels=squeezeLevels,
                    maintainBayHeight=maintainBayHeight,
                    beamOffsetZ=beamOffsetZ(snapper) };
          ...


New:
    /**
     * Gather function args.
     */
    public str->Object engineFunctionArgsG2(MhSnapper snapper, MhEngineFunctionRun func, symbol event="",
                                            MhPreprocessArgsEnv preprocessArgs=null, Object env=null) {
        ...
          case "levelArrange" : {
              ...
              return props { snapper=snapper,
                    holeZDomain=preprocessArgs.get(cMhHoleZDomainPK),
                    additionalPrim=preprocessArgs.get(cMhAdditionalPrimPK),
                    squeezeLevels=squeezeLevels,
                    maintainBayHeight=maintainBayHeight};
          ...

Replace all overrides and calls to shouldMoveLevel(MhEngine engine, MhEngineBoxEntry entry, MhEngineBoxEntry lastEntry, double diff, double fixedLimit, bool isLowestLevel) with shouldMoveLevel(MhEngine engine, MhEngineBoxEntry entry, MhEngineBoxEntry lastEntry, double diff, double fixedLimit).

Removed: extend public bool shouldMoveLevel(MhEngine engine, MhEngineBoxEntry entry, MhEngineBoxEntry lastEntry, double diff, double fixedLimit, bool isLowestLevel) {
New: extend public bool shouldMoveLevel(MhEngine engine, MhEngineBoxEntry entry, MhEngineBoxEntry lastEntry, double diff, double fixedLimit) {

MhRowSystemCollisionAdjustToFlue changes

Replace all overrides and calls to alignYToColumns(MhEngineEntryBlock[] blocks, double columnY, bool up, int &lastIndex) with alignYToColumns(MhEngineEntryBlock[] blocks, MhColumnCollisionEnv columnEnv, bool up, int &lastIndex).

Removed: extend public void alignYToColumns(MhEngineEntryBlock[] blocks, double columnY, bool up, int &lastIndex) : deprecated {
Use: extend public void alignYToColumns(MhEngineEntryBlock[] blocks, MhColumnCollisionEnv columnEnv, bool up, int &lastIndex) {

Replace all overrides and calls to findBestFlueSpaceIndex(MhEngineEntryBlock[] blocks, double columnY, bool up, int lastIndex=0) with findBestFlueSpaceIndex(MhEngineEntryBlock[] blocks, MhColumnCollisionEnv columnEnv, bool up, int lastIndex=0).

Removed: extend public int findBestFlueSpaceIndex(MhEngineEntryBlock[] blocks, double columnY, bool up, int lastIndex=0) : deprecated {
Use: extend public int findBestFlueSpaceIndex(MhEngineEntryBlock[] blocks, MhColumnCollisionEnv columnEnv, bool up, int lastIndex=0) {

MhLevelShape changes

Replace all overrides and calls to unstreamStoredSpec(ObjectFormatter formatter) with mhUnstreamStoredSpec(MhSnapperShape shape, ObjectFormatter formatter).

Removed: extend public void unstreamStoredSpec(ObjectFormatter formatter) : deprecated {
Use: public void mhUnstreamStoredSpec(MhSnapperShape shape, ObjectFormatter formatter) {

MhBayLevelEditorItem changes

Replace all overrides and calls to bayEditorLevelClearanceBehavior(double newLevelClearance) with bayEditorLevelClearanceBehavior(double newLevelClearance, Box bottomPrim=null).

Removed: extend public MhClearanceBehavior bayEditorLevelClearanceBehavior(double newLevelClearance) : deprecated {
Use: extend public MhClearanceBehavior bayEditorLevelClearanceBehavior(double newLevelClearance, Box bottomPrim=null) {

MhBayEditorLevelClearanceBehavior changes

Replace all overrides and calls to constructor(double levelClearanceZ) with constructor(double levelClearanceZ, Box bottomPrim=null).

Removed: public constructor(double levelClearanceZ) : deprecated {
Use: public constructor(double levelClearanceZ, Box bottomPrim=null) {

MhRowLegendInfoBehavior changes

Replace all overrides and calls to columns(MhSnapper row) with columns(MhSnapper row, bool showDescription=false).

Removed: extend public MhGridColumnEnv[] columns(MhSnapper row) : abstract, deprecated { }
Use: extend public MhGridColumnEnv[] columns(MhSnapper row, bool showDescription=false) : abstract { }

Replace all overrides and calls to getRowInfos(MhSnapper row) with getRowInfos(MhSnapper row, bool showDescription=false).

Removed: extend public str->MhRowLegendInfo[] getRowInfos(MhSnapper row) : abstract, deprecated { }
Use: extend public str->MhRowLegendInfo[] getRowInfos(MhSnapper row, bool showDescription=false) : abstract { }

MhRowLocationLegendBehavior changes

Replace all overrides and calls to getUniqueUnitLoadsKeys(MhSnapper[] rows) with getUniqueUnitLoadsKeys(MhSnapper[] rows, bool showDescription=false).

Removed: extend public str{} getUniqueUnitLoadsKeys(MhSnapper[] rows) : deprecated {
Use: extend public str{} getUniqueUnitLoadsKeys(MhSnapper[] rows, bool showDescription=false) {

Moved classes from cm.abstract.materialHandling.engine

The following classes have been moved from cm.abstract.materialHandling.engine to cm.abstract.materialHandling:

public class MhConfigurationItemGroup { ... }
public class MhSystemConfigurationManager { ... }
public class MhConfigurationPullPropsVisitor extends PushPropsVisitor { ... }
public class MhConfigurationPushPropsVisitor extends PushPropsVisitor { ... }
public class MhPushPropsEnv extends PushPropsEnv { ... }
public class MhFlexibleTypeCheck extends FlexibleTypeCheck { ... }
public class MhSystemConfiguration extends CoreObject { ... }
public class MhSystemConfigurationContainer { ... }
public class MhSystemConfigurationItem extends CoreObject : abstract { ... }

MhBayRowEngineBehavior changes

Change collecting of propagate rows from seq to set for performance.

Old: extend public MhSnapper[] propagatingRows(MhSnapper snapper, MhSnapperChangedEnv env) 
New: extend public MhSnapper{} propagatingRows(MhSnapper snapper, MhSnapperChangedEnv env)
Old: extend public void collectPropagatingRow(MhSnapper snapper, MhSnapperChangedEnv env, MhSnapper[] res)
New: extend public void collectPropagatingRow(MhSnapper snapper, MhSnapperChangedEnv env, MhSnapper{} res)
Old: extend public void collectSelectionPropagatingRow(MhSnapper snapper, MhSnapperChangedEnv env, MhSnapper[] res)
New: extend public void collectSelectionPropagatingRow(MhSnapper snapper, MhSnapperChangedEnv env, MhSnapper{} res)
Old: extend public void appendForcedPropagations(MhSnapperChangedEnv env, str key, MhSnapper[] res)
New: extend public void appendForcedPropagations(MhSnapperChangedEnv env, str key, MhSnapper{} res)
Old: extend public void appendSnapperPropagations(MhSnapper s, MhSnapperChangedEnv env, str key, MhSnapper[] res)
New: extend public void appendSnapperPropagations(MhSnapper s, MhSnapperChangedEnv env, str key, MhSnapper{} res)
Old: extend public void appendPropagationRowChildren(MhSnapper row, MhSnapperChangedEnv env, str key, MhSnapper[] res)
New: extend public void appendPropagationRowChildren(MhSnapper row, MhSnapperChangedEnv env, str key, MhSnapper{} res)
Old: extend public void finalizePropagatingSnappers(MhSnapperChangedEnv env, str key, MhSnapper[] res)
New: extend public void finalizePropagatingSnappers(MhSnapperChangedEnv env, str key, MhSnapper{} res)

MhStorageConfiguration changes

When accessing the configuration preview space, give the option whether to initialize the space or not. Also spaces are now removed from world when closing the configurator.

Old: extend public MhConfiguratorPreviewSpace previewSpace()
New: extend public MhConfiguratorPreviewSpace previewSpace(bool initIfNull=true)

Bay collision alternative

Bay collision alternative class, MhBayCollisionAlternative has been renamed to make it more generic as it contains logic that is not specific only for bay.

Old: public class MhBayCollisionAlternative extends MhDoubleStepRangeCollisionAlternative { 
New: public class MhRowChildCollisionAlternative extends MhSubSetCollisionAlternative {

Collision alternative

Old: public class MhDoubleStepRangeCollisionAlternative extends MhCollisionAlternative {
New: public class MhSubSetCollisionAlternative extends MhCollisionAlternative {

MhInsertHeightBehavior changes

Replace all overrides and calls to resolveZPos(MhSnapper owner, double z, MhCollisionAlternative alt, CollisionPrimitive ownerPrims, vector dir) with resolveZPos(MhSnapper owner, double z, double elev, MhCollisionAlternative alt, CollisionPrimitive ownerPrims, vector dir) so that it will take elevation into account.

Removed: extend public double resolveZPos(MhSnapper owner, double z, MhCollisionAlternative alt, CollisionPrimitive ownerPrims, vector dir) {
New: extend public double resolveZPos(MhSnapper owner, double z, double elev, MhCollisionAlternative alt, CollisionPrimitive ownerPrims, vector dir) {

Replace all overrides and calls to resolveZPosSolution(MhSnapper owner, double z, MhCollisionAlternative alt, CollisionPrimitive ownerPrims, vector dir) with resolveZPosSolution(MhSnapper owner, double z, double elev, MhCollisionAlternative alt, CollisionPrimitive ownerPrims, vector dir) so that it will take elevation into account.

Removed: extend public CollisionSolution resolveZPosSolution(MhSnapper owner, double z, MhCollisionAlternative alt, CollisionPrimitive ownerPrims, vector dir) {
New: extend public CollisionSolution resolveZPosSolution(MhSnapper owner, double z, double elev, MhCollisionAlternative alt, CollisionPrimitive ownerPrims, vector dir) {

Replace all overrides and calls to resolveZPosSolution(MhSnapper owner, double z, CollisionResolver resolver, CollisionPrimitive ownerPrims, vector dir) with resolveZPosSolution(MhSnapper owner, double z, double elev, CollisionResolver resolver, CollisionPrimitive ownerPrims, vector dir) so that it will take elevation into account.

Removed: extend public CollisionSolution resolveZPosSolution(MhSnapper owner, double z, CollisionResolver resolver, CollisionPrimitive ownerPrims, vector dir) {
New: extend public CollisionSolution resolveZPosSolution(MhSnapper owner, double z, double elev, CollisionResolver resolver, CollisionPrimitive ownerPrims, vector dir) {

MhLevelInsertHeightBehavior changes

Some logic in this class, MhLevelInsertHeightBehavior, has been changed/rewritten and simplified in order to support beams with no hole pitch domain e.g DistanceRange, DoubleRange.

Removed: extend public bool updateHeightDomains(MhSnapper owner, MhSnapper toSnapper, Object env=null) {
Removed: extend public SubSet restrictedHeightDomain(MhSnapper firstAbove, MhSnapper firstBelow, MhSnapper owner, MhSnapper toSnapper, Object env) {
Removed: extend public <SubSet, SubSet> freeSpacesDomains(MhSnapper firstAbove, MhSnapper firstBelow, MhSnapper owner, MhSnapper toSnapper, Object env=null) {
Removed: extend public bool isConflicting(MhSnapper owner, double z, MhCollisionAlternative alt, CollisionPrimitiveSet ownerPrims) {
Removed: extend public void checkInsertHeightLocked(point& p, SubSet heightDomain) {
Removed: extend public void checkFreeSpaceAboveLocked(point& p, SubSet aboveDomain, MhSnapper firstAbove, MhSnapper owner, MhSnapper toSnapper) {
Removed: extend public void checkFreeSpaceBelowLocked(point& p, SubSet belowDomain, MhSnapper firstBelow, MhSnapper owner, MhSnapper toSnapper) {
Removed: extend public <Double, Double> calculateFreeSpaceAboveAndBelow(MhSnapper owner, MhSnapper toSnapper, double insertH, Snapper specificAboveSnapper=null, Snapper specificBelowSnapper=null) {
Removed: extend public box boundForCalculation(MhSnapper snapper, bool toSpace=false) {
Removed: extend public symbol[] geoSymbolsForCalculation() {

New: extend public void toggleLockProperties(bool lock, str except=null) {
New: extend public double updateFreeSpacesProperties(MhSnapper owner, MhSnapper toSnapper, Object env) {
New: extend public double updateElevationProperty(MhSnapper owner, MhSnapper toSnapper, Object env) {
New: extend public LayerSet collisionLayerToCollide() {
New: extend public LayerSet collisionLayerToIgnore() {

MhSnapperSpreadVessel changes

Removed argument from show interval props since we can get the spreadPattern directly.

Old: extend public bool showIntervalProps(Object currentSpread=this."spreadPattern")
New: extend public bool showIntervalProps()

MhDoubleRowClassificationBehavior moved package

MhDoubleRowClassificationBehavior has been moved from cm.abstract.materialHandling.storage.racking.behavior to cm.abstract.materialHandling.storage.behavior so it is accessible to non-racking products.

Old engine removal

Old engine (G1) is now deprecated and removed.

MhEngine changes

Remove mhRegisterEngineFunction(MhEngine engine, CxFunction func, symbol pkg=null) and mhPutEngineNextPkgLookup(MhEngine engine, symbol pkg, symbol next) as they are meant for old engine.

Removed: public void mhRegisterEngineFunction(MhEngine engine, CxFunction func, symbol pkg=null) {
Removed: public void mhPutEngineNextPkgLookup(MhEngine engine, symbol pkg, symbol next) {

Remove functionPath() and setFunctionPath(symbol functionPath) as they are meant for old engine.

Removed: final public symbol functionPath() {
Removed: final public void setFunctionPath(symbol functionPath) {

MhEngineBehavior changes

Remove functionPath(MhSnapper snapper) method as it is no longer needed to override an engine function.

Removed: extend public symbol functionPath(MhSnapper snapper) { 

Remove useEngineFuncG2(MhSnapper snapper) method as it is no longer an option to use old engine.

Removed: extend public bool useEngineFuncG2(MhSnapper snapper) {

Remove putEngineRunFunctions(MhSnapper snapper, symbol event="", Object env=null) method as it is meant for old engine.

Removed: extend public void putEngineRunFunctions(MhSnapper snapper, symbol event="", Object env=null) {

As old engine has been removed, fetchEngineFunctionsRunG2, preprocessFuncArgsG2, engineFunctionArgsG2, and acceptFunctionRunG2 have been renamed accordingly. All overriding methods and calls have been replaced.

Old: extend public void fetchEngineFunctionsRunG2(MhEngineFunctionRun[] functions, MhSnapper snapper, symbol event="", Object env=null) {
Old: extend public MhPreprocessArgsEnv preprocessFuncArgsG2(MhEngineFunctionRun[] functions, MhSnapper snapper, symbol event="", Object env=null) {
Old: extend public str->Object engineFunctionArgsG2(MhSnapper snapper, MhEngineFunctionRun func, symbol event="", MhPreprocessArgsEnv preprocessArgs=null, Object env=null) {
Old: extend public bool acceptFunctionRunG2(MhSnapper snapper, MhEngineFunctionRun func, symbol event="", Object env=null) {
New: extend public void fetchEngineFunctionsRun(MhEngineFunctionRun[] functions, MhSnapper snapper, symbol event="", Object env=null) {
New: extend public MhPreprocessArgsEnv preprocessFuncArgs(MhEngineFunctionRun[] functions, MhSnapper snapper, symbol event="", Object env=null) {
New: extend public str->Object engineFunctionArgs(MhSnapper snapper, MhEngineFunctionRun func, symbol event="", MhPreprocessArgsEnv preprocessArgs=null, Object env=null) {
New: extend public bool acceptFunctionRun(MhSnapper snapper, MhEngineFunctionRun func, symbol event="", Object env=null) {

MhEngineFunctionLibrary changes

The fields overrideInfo and extFunctionLookupPkgs have been removed as it is no longer needed for the new engine. All calls to these fields have also been removed.

Removed: public MhEngineOverrideFunctionInfo overrideInfo
Removed: public symbol->symbol nextFunctionLookupPkgs

Remove register(CxFunction fun, symbol pkg), putNextPkgLookup(symbol path, symbol next), and optimizeFunctionsOrder(MhSystemConfiguration config) as it is no longer needed for the new engine.

Removed: extend public void register(CxFunction fun, symbol pkg) {
Removed: extend public void putNextPkgLookup(symbol path, symbol next) {
Removed: extend public void optimizeFunctionsOrder(MhSystemConfiguration config) {

Replace all overrides and calls to getFunction(str key, symbol path) with getFunction(str key).

Removed: final public CxFunction getFunction(str key, symbol path) {
New: final public CxFunction getFunction(str key) {

Remove deprecated methods getFunction(str key, symbol path, bool finalize).

Removed: final public CxFunction getFunction(str key, symbol path, bool finalize) : deprecated {

MhEngineOverrideFunctionInfo changes

This class has been removed as it is no longer needed for the new engine.

Removed: public class MhEngineOverrideFunctionInfo {

MhSystemConfiguration changes

Remove functionPath() as it is no longer needed for the new engine.

Removed: extend public symbol functionPath() {

MhAssortment changes

Replace all overrides and calls to engine() with engine(Space space).

Removed: extend public MhEngine engine() : deprecated {
Use: extend public MhEngine engine(Space space) {

Remove functionPath and useEngineFuncG2 fields as it is no longer needed and no longer an option to use old engine.

Removed: public symbol functionPath
Removed: public bool useEngineFuncG2 : stream=null

Remove useEngineFuncG2() as it is no longer an option to use old engine.

Removed: extend public bool useEngineFuncG2() {

MhEngineManager changes

Replace all references to engineRuns with engineRunList.

Removed: public MhEngine->MhEngineRun engineRuns : deprecated;
Use: public MhEngine->MhEngineRun[] engineRunList;

Remove useEngineFuncG2() as it is no longer an option to use old engine.

Removed: extend public bool useEngineFuncG2() {

Remove ensureConfiguration(MhEngine engine, str->Object args) as it is meant for old engine.

Removed: extend public void ensureConfiguration(MhEngine engine, str->Object args) {

MhStorageEngine changes

Remove mhStorageRegisterFunctions(CxFunction[] functions, symbol pkg=null) and mhStoragePutNextPkgLookup(symbol pkg, symbol next) as they are no longer needed.

Removed: public void mhStorageRegisterFunctions(CxFunction[] functions, symbol pkg=null) {
Removed: public void mhStoragePutNextPkgLookup(symbol pkg, symbol next) {

MhConfigManager changes

The functionality of fixInconsistenciesIfNecessary() has been moved to a new function updateConfigsAfterRestoredByUndo(MhSnapper current, MhSnapper original). The inconsistency is caused by the undo, so it makes more sense to be fixed right after the snapper is restored by undo.

- Removed: extend public void fixInconsistenciesIfNecessary() {
- Use: extend public void updateConfigsAfterRestoredByUndo(MhSnapper current, MhSnapper original) {

cm.abstract.materialHandling.storage.mobile

Removed: public bool isPlatform(Object o) : deprecated { return isMobilePlatform(..); }
Removed: public bool isEndPanel(Object o) : deprecated { return isMobileEndPanel(..); }

Removed: public class MhMobileUpdateBehavior extends MhBehavior : deprecated {
Removed: public mhLazyGlobal MhBehavior mhMobileUpdateBehavior = MhMobileUpdateBehavior();

cm.abstract.materialHandling.storage.racking

Removed: public class MhUprightProtectorEngineBehavior extends MhEngineBehavior {
Removed: public class MhSpacerLinkFrameFunction extends MhSystemEngineFunction : deprecated {
Removed: public class MhLevelLinkTest extends MhTest {

cm.abstract.materialHandling.storage.racking.cantilever

Removed: public bool isArm(Snapper snapper) { return evalClassification(snapper, sArm); }

Changes to isArm() function

The function isArm(Snapper snapper) has been removed due to it being redundant with isArm(Object o). You should still be able to call isArm(Object o) without any compilation errors.

MhCantileverBayGfxBehavior changes

Old: extend public color bayColor2D()
New: extend public Color bayColor2D()

cm.abstract.materialHandling.storage.racking.deepstorage

public class MhDeepstorageNoOfSingleFramesFunction extends MhSystemEngineFunction {
- Removed: extend public MhEngineEntry[] sortedFramesByPriority(MhEngineEntry[] sortedFrames) : deprecated {

MhDeepstorageNoOfSingleFramesFunction changes

Replace all overrides and calls to sortedFramesByPriority(MhEngineEntry[] sortedFrames) with sortedFramesByPriority(bool rotated, MhEngineEntry[] sortedFrames).

Removed: extend public MhEngineEntry[] sortedFramesByPriority(MhEngineEntry[] sortedFrames) : deprecated {
Use: extend public MhEngineEntry[] sortedFramesByPriority(bool rotated, MhEngineEntry[] sortedFrames) {

cm.abstract.materialHandling.storage.shelving

MhShelvingCompartmentConfigurationItem changes

public class MhShelvingCompartmentConfigurationItem extends MhStorageConfigurationItem {
- Old: public double levelHeight;
- New: public Double levelHeight;

cm.abstract.part

ProdPart has the following changes to its methods, these allow for applying option adjustments:

Added: public void generateOptAdjustmentSifRows(SpecOption opt, str[] lines) {}
Added: final public PartOptionAdjustment newOptionAdjustment(SpecOption option, Space space) {}
Added: final public void putOptionAdjustment(PartOptionAdjustment adjustment, Space space) {}
Added: final public PartOptionAdjustment optionAdjustment(SpecOption option, Space space) {}

cm.abstract.unitLoad

Package Stream Renamer

Two renamer classes AbstractUnitLoadCollabG1Renamer from the collabG1 folder and AbstractUnitLoadCollabG3Renamer from the collabG3 folder have been removed. The reason for their removal is because they both were registered to be the package stream renamer of the #"cm.abstract.unitLoad" package, but each package should only have one renamer. By having two renamers registered for the same package, only one renamer is used and the other is not. It is also random as to which renamer is chosen.

To resolve this issue, both the classes mentioned above have been combined into a new class UnitLoadStreamRenamer. So, any existing class that extends from those removed classes can extend from this new class without the loss of functionality.

UnitLoadStackableTote Renamed

The class UnitLoadStackableTote has been renamed to UnitLoadCaseTote.

The reason for the change is because UnitLoadStackableTote is actually a Case Tote, and there is another type of unit load called Stackable Tote from MhStackableTote class, which made it really confusing.

Unit Load Repository

Unit load cache has been remove and this is replaced with a unit load repository instead. Unit load will still be accessible through function unitLoad(UnitLoad m) but used unit loads will be put into repository map and unused objects will be cleaned up by gc later on as by default it'll be added into a weak collection. With repository it's possible to manually control the lifetime of a unit load object and can be done by calling public void use(UnitLoad this) { which will promote unit load objects to not be collected by the garbage collector.

The following functions have been remove and replaced.

Old: public class UnitLoadCache {
New: public class UnitLoadRepository : unstreamable {
New: public UnitLoadRepository unitLoadRepository() {
Removed: public UnitLoadCache unitLoadCache() { 
// Lifetime will be handle by gc or manually remove if necessary.
Removed: public void mhPreLoadClearUnitLoadCacheHook(WorldFileHeader header) {
Removed: public void mhClearUnitLoadCacheHook(World world) {
Removed: public bool usingUnitLoad(UnitLoad ul) {

Unit load function registration is now split into two in order to have better control of default and temporary objects to populate unit load domain.

Old: public void registerUnitLoad(UnitLoad ul, World w=null) {
// Register it to container to populate unit load domain.
New: public void registerUnitLoadToContainer(UnitLoad ul, World w=null) {
// Will register unit load to be use as default.
New: public void registerUnitLoadToDefault(UnitLoad ul) {

// Include world to be more specific when looking for unitload container.
Old: public UnitLoad unitLoad(guid unitGuid) {
New: public UnitLoad unitLoad(guid unitGuid, World w=null) {

Old: public UnitLoad unitLoadFromName(str name) {
New: public UnitLoad unitLoadFromName(str name, World w=null) {

// Better variable name.
Old: public UnitLoad unitLoad(str unitKey, World w=null) {
New: public UnitLoad unitLoad(str gidHex, World w=null) {

cm.application

The following changes were made to support efforts in the facelift project:

CET's menubar now support nested menus items, which has required some changes to the menu item functions in cm/application/keyBindingMenu.cm:

Removed: public void imageItem(MenuBar menuBar,
                               str k,
                               str label,
                               Image image,
                               MenubarCB callback,
                               char c='\0',
                               bool sys=false,
                               KeyCode keyCode=null,
                               SubMenuInfo subMenu=null,
                               bool excludeFromVisibilityProfile=false) {}

Added: public void imageItem(MenuBar menuBar,
                             str k,
                             str label,
                             Image image,
                             MenubarCB callback,
                             char c='\0',
                             bool sys=false,
                             KeyCode keyCode=null,
                             SubMenuInfo subMenu=null,
                             str nestedKey=null, Removed:  ADDED
                             bool excludeFromVisibilityProfile=false) {}

Removed: public void labelItem(MenuBar menuBar,
                               str k,
                               str label,
                               MenubarCB callback,
                               char c='\0',
                               bool sys=false,
                               KeyCode keyCode=null,
                               SubMenuInfo subMenu=null,
                               bool excludeFromVisibilityProfile=false) {}

Added: public void labelItem(MenuBar menuBar,
                             str k,
                             str label,
                             MenubarCB callback,
                             char c='\0',
                             bool sys=false,
                             KeyCode keyCode=null,
                             SubMenuInfo subMenu=null,
                             str nestedKey=null, Removed:  ADDED
                             bool excludeFromVisibilityProfile=false) {}

cm.basic

The following functions have been moved to cm.win:

  • str kilometerS(double, bool, int, bool, lcid, unitMagnitude)
  • str meterS(double, bool, int, bool, lcid, unitMagnitude)
  • str decimeterS(double, bool, int, bool, lcid, unitMagnitude)
  • str centimeterS(double, bool int, bool, lcid, unitMagnitude)
  • str millimeterS(double, bool, int, bool, lcid, unitMagnitude)
  • str inchesS(double, bool, lcid, int, unitMagnitude)
  • str inchesAndFractionsS(double, bool, int, lcid, unitMagnitude, bool)
  • str inchesAndDecimalsS(double, bool, int, bool, lcid, unitMagnitude)
  • str feetS(double, bool, lcid, unitMagnitude)
  • str feetAndInchesS(double, lcid, unitMagnitude)
  • str feetAndDecimalsS(double, bool, int, bool, lcid, unitMagnitude)
  • str feetAndInchesAndFractionsS(double, bool, int, lcid, unitMagnitude, bool)
  • str feetAndInchesAndDecimalsS(double, bool, int, bool, lcid, unitMagnitude)
  • str tsuboUnitS()
  • str tsuboS(double, bool, int, bool, lcid)
  • double realInchesWithMagnitude(double, unitMagnitude)
  • str showUnitHelper(str, unitMagnitude)
  • void showUnitHelper(StrBuf, unitMagnitude)
  • int->str precisionsToLabel(distanceUnit)
  • str unitS(double, distanceUnit, bool, bool, bool, int, bool, lcid, unitMagnitude)
  • str roundToPrecisionUnitS(double, distanceUnit, bool, bool, int, bool, lcid, unitMagnitude)
  • str meterConvertToUnitS(double, bool, bool, lcid, unitMagnitude, distanceUnit, int)
  • str kgfPermm2S(int, bool, bool, lcid)
  • str kgfPercm2S(int, bool, bool, lcid)
  • str lbfPerInches2S(int, bool, bool, lcid)
  • str lbfPerFeet2S(int, bool, bool, lcid)
  • str toS(pressureUnit, unt, bool, bool, lcid)
  • str toS(weightType, distanceUnit, int, bool, bool, lcid)
  • str toMetricS(int, bool, bool, lcid)
  • str toImperialS(int, bool, bool, lcid)

cm.core

cm.core

Removed the following functions because ensureSettings did not do anything.

Remove: public void addCetQLParamsFromSnapper(Snapper z, bool ensureSettings) {
Remove: public void removeCetQLParamsFromSnapper(Snapper z, bool ensureSettings) {

class Animation

Removed: extend public void hideCircleMenu(AnimationMouseInfo mi=null) {

class CircleMenu

Replaced global variable with global function. Now there is no variable to set. The function checks if there is any visible circle menu.

Old: public bool inCircleMenu = false;
New: public bool inCircleMenu() {
Old: public constructor(Window parent, Window owner,
			Brush brush=null,
			Skin skin0=null,
			FrameStyle frameStyle=noFrame,
			frame3DState frameState=frameStateUp,
			SrcRef src=#:src) {
New: public constructor(Window parent, Window owner,
			str key=defaultCircleMenuKey,
			Brush brush=null,
			Skin skin0=null,
			FrameStyle frameStyle=noFrame,
			frame3DState frameState=frameStateUp,
			bool transparent=true,
			SrcRef src=#:src) {

Now you can retrieve a circle menu by its key.

Old: public CircleMenu circleMenu(Window w, bool includeHidden=false) {
New: public CircleMenu circleMenu(str key) {

Comment: If you need to close a specific circle menu you can use the class member function instead.

Old: public void hideCircleMenu(Window w, bool fromUndo=false) {
New: public void hideAllCircleMenus(bool fromUndo=false) {

class CoreDistanceField

The new function is in the same file but is no longer a member of CoreDistanceField.

Old: final public Double scanAndCalculate(str text) {
New: public Double scanAndCalculate(str text, distanceUnit defaultUnit) {

clas enableV2ViewModeBar

The following changes were made to support efforts in the Facelift project

The global setting enableV2ViewModeBar and the class ViewModeBarV2 has been removed, as ViewModeBarV2 has been merged with its parent class.

cm/core/coreUIEffect.cm has been moved to cm/win/uiEffect.cm, which has effected the following classes and functions:

public class AbstractEffect;
public class AbstractUIEffect;
public double logEffectLambdaFunction(double lambda, AbstractEffect effect) {}
public double expEffectLambdaFunction(double lambda, AbstractEffect effect) {}
public double tanhEffectLambdaFunction(double lambda, AbstractEffect effect) {}
public double oneEffectLambdaFunction(double lambda, AbstractEffect effect) {}
public double bouncingEffectLambdaFunction(double lambda, AbstractEffect effect) {}

ViewModeButton's constructor has been been modified as follows:

Removed: public constructor(Window parent, ViewMode mode, bool normal, SrcRef src=#:src) {}
Added: public constructor(Window parent, ViewMode mode, SrcRef src=#:src) {}

cm.core.block

BlockSnapper has had the following changes to its methods:

Removed: extend public void edit() {}
Added: extend public void edit(Space[] parentSpaces=null) {}

The following functions have been removed:

Removed: public bool acceptModifyBlockInSeveralAlternativeSpaces(Block block) {
Removed: public bool acceptModifyBlockInSeveralAlternativeSpaces(Snapper snapper) {

Instead, a combination of these new functions can be used:

Added: public bool isAnyBlockInMultipleAlternatives(Snapper{} snappers) {
Added: public bool isBlockInMultipleAlternatives(Snapper snapper) {
Added: public bool isBlockInMultipleAlternatives(Block block) {
Added: public bool isBlockInMultipleAlternatives(guid blockGuid) {
Added: public void showModifyBlockInMultipleAlternativesWarningDialog() {
Added: public int showModifyBlockInMultipleAlternativesWarningPromptDialog() {

cm.core.calc

Updated/Deprecated Interfaces:

The parameter PartInfoTree tree=null was added to the constructor in CalcDoubleInputCell and CalcGridCellPopup to populate the new infoTree field.

// calcDoubleInputCell.cm
Old: public constructor(BasicPartColumn column, Part part, PartCache cache, Space space)
New: public constructor(BasicPartColumn column, Part part, PartCache cache, Space space, PartInfoTree tree=null)

calcGridCellPopup.cm
Old: public constructor(Window parent, BasicPartColumn column, Part part, Space space, rectI cellBound)
New: public constructor(Window parent, BasicPartColumn column, Part part, Space space, rectI cellBound, PartInfoTree tree=null)

cm.core.dwg

class DwgBspSplitEnv

Caching bound is now the responsibility of class DwgBspEntry. Methods and members related to caching was removed.

Removed: public Graph->Rect boundCache();
Removed: final public rect bound(Graph g) : inline {

cm.core.library

The following changes were made to support development efforts of the new UI.

The Library and CompanyLibrary constructors have been modified as follows:

// Library
Removed: public constructor(LibraryLimb tree, symbol pkg, bool rebuildOnUserLevelChange=false, function() viewModeHook=null) {}
Added: public constructor(LibraryLimb tree,
                          symbol pkg,
                          bool rebuildOnUserLevelChange=false,
                          bool facelift=false, // ADDED
                          LibraryHeaderBuilder headerBuilder=null, // ADDED
                          function() viewModeHook=null) {}

// CompanyLibrary
Removed: public constructor(LibraryLimb tree,
                            symbol pkg,
                            bool rebuildOnUserLevelChange=false,
                            str companyKey=null,
                            version version=version(0, 0, 0),
                            function() viewModeHook=null) {}
Added: public constructor(LibraryLimb tree,
                          symbol pkg,
                          bool rebuildOnUserLevelChange=false,
                          bool facelift=false, // ADDED
                          LibraryHeaderBuilder headerBuilder=null, // ADDED
                          str companyKey=null,
                          version version=version(0, 0, 0),
                          function() viewModeHook=null) {}

The constructor for LibraryLimb has been changed, and LibraryLimb now stores a UIHint in a field, so UIHint fields in subclasses have been removed:

// LibraryLimb
Removed: public constructor(symbol pkg,
                            str key,
                            Image image=null,
                            bool frame=true,
                            str label=null,
                            str toolTipText=null,
                            Image toolTipImage=null,
                            SectionButton[] buttons=null,
                            SrcRef src=null) {}
Added: public constructor(symbol pkg,
                          str key,
                          Image image=null,
                          bool frame=true,
                          str label=null,
                          str toolTipText=null,
                          Image toolTipImage=null,
                          SectionButton[] buttons=null, // ADDED
                          UIHint hint=null, // ADDED
                          SrcRef src=null) {}

// AutoGroupLimb
Removed: public UIHint hint;

// ComponentLimb
Removed: public UIHint hint;

// SettingLimb
Removed: public UIHint hint;

// VoidCallbackLimb
Removed: public UIHint hint;

The UIHint class and its child classes have changed in the following ways:

// UIHInt
Removed: public constructor(bool showLabel=false,
                            bool prefer3D=false,
                            sizeI preferSize=(-1, -1)) {}
Added: public constructor(bool showLabel=false,
                          bool prefer3D=false,
                          sizeI preferSize=(-1, -1),
                          int columns=0, // ADDED
                          alignment align=middle, // ADDED
                          pointI margins=(-1, -1) // ADDED
                          ) {}

Deprecated: public class UIMarginsHint extends UIHint {}

// UIFrameHint
Removed: public pointI margins;

// UITextSideHint
Removed: public constructor(alignment textSide,
                            bool showLabel=false,
                            bool prefer3D=false,
                            sizeI preferSize=(24, 24)) {}

Added: public constructor(alignment textSide,
                          bool showLabel=false,
                          bool prefer3D=false,
                          sizeI preferSize=(24, 24),
                          alignment align=middle // ADDED
                          ) {}

// UIImageHint
Removed: public pointI margins;

Removed: public constructor(bool showLabel=false,
                            Image image=null,
                            alignment textSide=alignment.down,
                            FrameStyle frameStyle=null,
                            pointI margins=(-1, -1),
                            sizeI preferSize=(-1, -1)) {}

Added: public constructor(bool showLabel=false,
                          Image image=null,
                          alignment textSide=alignment.down,
                          FrameStyle frameStyle=null,
                          pointI margins=(-1, -1),
                          sizeI preferSize=(-1, -1),
                          int columns=0, // ADDED
                          alignment align=middle // ADDED
                          ) {}

// UIBrushHoverHint
Removed: public pointI margins;

UIBuilder has had the following changes to its fields:

Removed: public int mg;

UIGroupBuilder has had the following changes to its methods:

Removed: extend public Window build(UIBuilder uiBuilder, LibraryLimb limb, Window window) {}
Added: extend public Window build(UIBuilder uiBuilder,
                                  LibraryLimb limb,
                                  Window window,
                                  bool subsection=false /** ADDED **/) {}

UIGroupOrganizerEnv has had the following changes:

Removed: public int mg;
Added: public Margins margins;

Removed: final public int mg() {}
Added: final public Margins mg() {}

OldSchoolGroupOrganizer has been completely removed.

cm.core.part

Updated/Deprecated Interfaces:

The parameter bool ignoreBlockSpace was added to the adjustment interfaces in partAdjustment.cm to determine if a PartAdjustment should be stored or found on BlockSpaces. When set to true, the functions will ignore the space parameter if it is a BlockSpace and use the Part's space instead. When false, the functions will not ignore the space parameter if it is a BlockSpace.

// partAdjustment.cm
Old: public Object adjustedValueIfAny(Part part, str key, Space space) : deprecated
New: public Object adjustedValueIfAny(Part part, str key, Space space, bool ignoreBlockSpace=true)

Old: public void adjustProperty(Part part, str key, Object value, Space space=null, bool createIfNull=true) : deprecated
New: public void adjustProperty(Part part, str key, Object value, Space space=null, bool createIfNull=true, bool ignoreBlockSpace=true)

Old: public bool isAdjusted(Part part, Space space, str key) : deprecated
New: public bool isAdjusted(Part part, Space space, str key, bool ignoreBlockSpace=true)

class Part.cm:

The parameter bool ignoreBlockSpace was added to the adjustment interfaces in Part to determine if a PartAdjustment should be stored in BlockSpaces.
When set to true, an adjusted Part will store it's adjustment on the main Space. When false, the adjustment will be stored on the BlockSpace that it was made on.

// part.cm
Old: extend public SinglePartAdjustment newAdjustment(Space space) : deprecated
New: extend public SinglePartAdjustment newAdjustment(Space space, bool ignoreBlockSpace=true)

Old: extend public void putAdjustment(SinglePartAdjustment adjustment, Space space) : deprecated
New: extend public void putAdjustment(SinglePartAdjustment adjustment, Space space, bool ignoreBlockSpace=true)

Old: extend public SinglePartAdjustment adjustment(Space space) : deprecated 
New: extend public SinglePartAdjustment adjustment(Space space, bool ignoreBlockSpace=true)

class PartInfoTree

The columns() function now returns PartColumn[] rather than PartInfoColumn[]. This allows a PartInfoTree to contain any type of PartColumn.

Old: extend public PartInfoColumn[] columns() {
New: extend public PartColumn[] columns() {

cm.core.propsScheme

PropsSchemeDialog

Old: extend public void refreshSearchResult() 
New: final public void refreshSearchResult()  // use the new refreshSearchResultFor for specificity
New: extend public void refreshSearchResultFor(str{} keys) 

PropsSchemeOptionLabel

Old:    extend public void highlight(str target, bool ignoreCase=true) 
New:	extend public void highlight(str target, color hc, bool ignoreCase=true)

Old:    extend public void highlight(str{} keys) 
New:    extend public void highlight(str{} keys, color hc) 

PropsSchemeOptionsSubWindow

Old:        extend public void highlight(str target, bool ignoreCase=true) {
New:        extend public void highlight(str target, color hc, bool ignoreCase=true) {

Old:        extend public void highlight(str{} keys) {
New:        extend public void highlight(str{} keys, color hc) {

PropsSchemeSectionedLabel

Old:        extend public void highlight(str target, bool ignoreCase=true) {
New:        extend public void highlight(str target, color hc, bool ignoreCase=true) {

Old:        extend public void highlight(str{} keys) {
New:        extend public void highlight(str{} keys, color hc) {

cm.core.toolbox

Visibility of TBQuickBarButton has been changed from public to private.

The ToolboxSectionedLabel constructor is no longer the same constructor as for Display, with the following parameters:

public constructor(Window parent,
                   Brush brush=noBrush,
                   FrameStyle frameStyle=noFrame,
                   frame3DState frameState=frameStateFlat,
                   str key=null,
                   str label=null,
                   str tooltip=null,
                   bool initFacelift=false, // pass true to enable new Facelift style
                   SrcRef src=#:src) {}

The LazyBasicSnapperButton constructor has been changed to not perform any auto sizing unless passed a size of (-1, -1). All subclasses should modify their constructor's default size parameter to match the new default in order to retain auto sizing.

cm.core.user

Removed: public void deleteUserStyle(str styleKey) {
Added: public void deleteUserStyle(UserStyle style) {
Removed: public bool saveUserStyle(UserStyle style) {
Removed: public bool saveUserStyle(UserStyle style, Url url) {
Added: public bool saveUserStyle(UserStyle style, bool newStyle=false, Url url=null) {

class UserStylesHolder

Old: public sorted str->UserStyle styles;
New: private sorted str->UserStyle styles : public readable;
Added: public void remove(str key) {

The new put method uses the key of the style. Consider using this if the key matches the key of the style.

Added: final public void put(UserStyle p) {

class UserStyle

Old: public class UserStyle {
New: public class UserStyle : abstract {

Replaces getStyleUrlPath in RegTypeCard.

Added: extend public Url getDefaultStyleUrlPath() {

class RegTypeCard

Replaced with method in UserStyle:

Removed: extend public Url getStyleUrlPath(UserStyle s) {
Removed: extend public bool addNewStyle(UserStyle s) {
Removed: extend public bool saveStyle(UserStyle s) {
Added: extend public bool saveStyle(UserStyle s, bool newStyle=false) {

class RegTypeDialog

Removed: extend public bool addNewStyle(UserStyle s) {
Added: extend public bool saveStyle(UserStyle style, bool newStyle=false) {

class ComboQuickProperty

Old: public bool edit;
New: private bool edit;

cm.draw

The following colour constants have been moved to cm.win:

public const color black(0, 0, 0);
public const color white(255, 255, 255);

public const color lightGray(220, 220, 220);
public const color gray(198, 198, 198);
public const color darkGray(145, 145, 145);

public const color lightRed(235, 175, 175);
public const color red(212, 151, 151);
public const color darkRed(210, 120, 120);
public const color brightRed(230, 100, 100);
public const color strongRed(255, 0, 0);

public const color lightGreen(114, 191, 134);
public const color green(128, 163, 135);
public const color darkGreen(110, 135, 110);
public const color brightGreen(90, 190, 90);
public const color strongGreen(0, 255, 0);

public const color lightBlue(155, 197, 230);
public const color blue(135, 177, 248);
public const color darkBlue(126, 126, 200);
public const color brightBlue(110, 110, 240);
public const color strongBlue(0, 0, 255);

public const color lightYellow(230, 231, 186);
public const color yellow(229, 231, 164);
public const color darkYellow(208, 203, 115);
public const color brightYellow(235, 230, 90);
public const color strongYellow(255, 255, 0);

public const color lightBrown(211, 200, 169);
public const color brown(192, 176, 138);
public const color darkBrown(172, 153, 110);

public const color lightBeige(205, 205, 180);
public const color beige(224, 211, 175);
public const color darkBeige(229, 204, 133);

public const color lightOrange(238, 200, 140);
public const color orange(245, 194, 98);
public const color darkOrange(220, 170, 70);
public const color brightOrange(246, 168, 33);

public const color lightPurple(213, 183, 229);
public const color purple(198, 137, 229);
public const color darkPurple(165, 114, 191);
public const color brightPurple(190, 108, 200);
public const color strongPurple(255, 0, 255);

cm.format.dwg

cm.format.dwg.dwgMaterialData.cm

Removed unused field from DwgMaterialProp constructor.

Old: public constructor(Url texturePath, CByteArray pixelData)

New: public constructor(Url texturePath)

cm.geometry

The following functions have been moved to cm.win:

  • str inchesS(box, bool, lcid, int)
  • str inchesS(line, bool, lcid, int)
  • str inchesS(point, bool, lcid, int)

cm.geometry.advanced.collision

Limited Vector Option

A field in this class has been changed to be more generic to handle more variants of SubSet.

public class CollisionLimitedVectorOption extends CollisionVectorOption {
- Old: public DoubleStepRange steps;
- New: public SubSet domain;

cm.geometry2D

str inchesS(point2D, bool, lcid, int) has been moved to cm.win.

cm.lang

str inchesS(range, bool, lcid, int) has been moved to cm.win.

cm.std.architectural

Removed the following deprecated definitions from the SelectedFloorControl class.

Removed: public CoreDistanceField elevation;
Removed: public CoreDistanceField floorT;
Removed: public CoreDistanceField ceilingH;

The following constructors in FloorViewItem has been changed. The remaining constructor should be enough for all known use-cases.

Old: public class FloorViewItem extends TreeViewItem {
New: public class FloorViewItem extends LevelTreeViewItemBase {
Old: public constructor(FloorsControl floorsControl, SpaceVolume v, SrcRef src=#:src) {
New: public constructor(FloorsControl floorsControl, SpaceVolume v) {
Removed: public constructor(FloorsControl floorsControl, symbol id, Space space, SrcRef src=#:src) {

The following fields in the FloorViewItem class was made private and moved into the base class LevelTreeViewItemBase. The fields can still be accessed through getter functions.

Old: public Space space : copy=reference;
New: private Space _space : copy=reference;
Old: public symbol volumeId;
New: private symbol _volumeId;

The following methods in FloorViewItem have been modified and moved into the new base class LevelTreeViewItemBase. In most cases this shouldn't require any action.

Old: extend public bool isOutside() {
New: final public bool isOutside() {
Old: extend public void setSpace(Space space) {
New: extend public void setSpace(Space newSpace) {
Old: extend private bool anyLevelsCreated() {
New: final public bool anyLevelsCreated() {
Old: extend public bool isVisible() {
New: final public bool isVisible() {
Old: extend public bool isLocked() {
New: final public bool isLocked() {
Old: extend public bool isSolid() {
New: final public bool isSolid() {
Old: extend public void toggleVisibility() {
New: final public void toggleVisibility() {
Old: extend public void toggleLocked() {
New: final public void toggleLocked() {
Old: extend public void toggleSolid() {
New: final public void toggleSolid() {

The following method in FloorViewItem has been moved to a standalone function outside of the class.

Removed: extend public void cloneFloor(bool onlyVolumeSnappers) {
Added: package void undoableCloneLevel(SpaceVolume volume, Space space, bool onlyVolumeSnappers=false) {

cm.std.tools

The following definitions in cm/std/tools/library.cm have been removed, as they are no longer used. If you still require some of the functionality, consider making a local copy of it.

Removed: package bool showMirror = false;
Removed: public class ShowMirrorVisibility extends LibraryLimbVisibility {
Removed: public str arrowHeadIndexToLabel(Object o) {
Removed: public str precisionIndexToLabel(Object o) {
Removed: public Object setInitialPrecision(ObjectSubSet seq, int key) {

The following definitions in cm/std/tools/library.cm have been changed to private, as they were not used outside of the file.

Old: package int->str pToLCache = null;
New: private int->str pToLCache;
Old: package distanceUnit lastUnit = distanceUnit.none;
New: private distanceUnit lastUnit = distanceUnit.none;

cm.win

The following changes were made to support development efforts for the New UI.

SlimDoubleScrollBar has been deprecated. Set the slim parameter in DoubleScrollBar to true instead.

The following changes were made to cm/win/cardWindow.cm:

Removed: public bool delayToolboxPaint;
Removed: public taskStatus cardWindowDrawFrameCB(Task task, timespan slot, Object arg) {}
Removed: public taskStatus cardWindowDrawFlapsCB(Task task, timespan slot, Object arg) {}

FrameWindow resizing has been split into 2 separate methods.

The first method resizing0 determines the frame borders and resizing1 should perform actual re-layout logic.

Deprecated: extend public rectI resizing(rectI r, bool left, bool right, bool top, bool bottom)
Added: extend public rectI resizing0(rectI r, bool left, bool right, bool top, bool bottom)
Added: extend public void resizing1(sizeI s)

CardWindow has had the following changes:

Removed: public bool rebuildingInProgress;
Added: public int rebuildNesting;
Added: final public bool rebuildingInProgress() {}

Removed: extend public bool drawFrame(WindowPixelDevice c, bool enqueue=true) {}
Added: extend public bool drawFrame(WindowPixelDevice c) {}

Removed: extend public void drawFlaps(WindowPixelDevice c, bool dragging=false, bool enqueue=true) {}
Added: extend public void drawFlaps(WindowPixelDevice c, bool dragging=false) {}

FormattedTextArea has the following methods removed:

Removed: final public void setText(null n) {}

All predefined LegacyFrames in cm/win/legacyFrame.cm have been removed due to performance issues:

Removed: public FrameStyle redButtonFrame -> Migrate to redPenFrame
Removed: public FrameStyle greenButtonFrame -> Migrate to greenPenFrame
Removed: public FrameStyle blueButtonFrame -> Migrate to bluePenFrame
Removed: public FrameStyle grayFrame -> Migrate to stdLightFrame
Removed: public FrameStyle mediumGrayFrame -> Migrate to stdGrayFrame
Removed: public FrameStyle darkGrayFrame -> Migrate to darkGrayPenFrame
Removed: public FrameStyle unknownFrame -> Migrate to null

The fields in SubMenuInfo have been changed:

Removed: public bool visible;

The following change in cm/win/distanceLabel.cm was made to support adding yardage as a unit of measure.

Added: public str yardsS(double meters, bool showUnit=true, int decimals=2, bool decimalZeroes=false, lcid locale=lcid(-1), unitMagnitude magnitude=unitMagnitude.dist) {}