Analytics

Analytics/Statistics

For 15.5 onwards, support for button press events was introduced. For more information on this topic, please refer to the implementation article on Analytics available here: https://support.configura.com/hc/en-us/articles/24381012443159-Developing-for-Extension-Analytics

cm.abstract

To support filtering of MaterialLegends, ObjFilters are utilized to filter materials in the legend. As a result, the following interface was added.

Added: extend public void initFilters() {}
Added: extend public ObjFilter activeFilter() {}
Added: extend public void activateFilter(ObjFilter filter) {}
Added: extend public void deactivateFilter() {}
Added: extend public ObjFilter{} filters() {}
Added: extend public ObjFilter[] filterSeq() {}
Added: extend public void appendFilter(ObjFilter filter) {}
Added: extend public void appendFilters(ObjFilter{} newFilters) {}
Added: extend public void appendFilters(ObjFilter[] newFilters) {}
Added: public void removeFilter(ObjFilter filter) {}

Added: 
// initializes filters when MaterialLegendSnapper is dropped in Space
public void dropped() {
	if (_filters.empty()) initFilters();
	super();
}

To support filtering of MaterialLegends, ObjFilters are utilized to filter materials in the legend. As a result, the following interface was added.

Added: public constructor(ObjFilter filter, str header, symbol resPkg=#:package : caller eval) {}
Added: extend public ObjFilter filter() {}
Added: extend public void setFilter(ObjFilter filter) {}
Added: extend public void removeFilter() {}

Modified: 
extend public void appendItem(str key, LegendItem item) {
	if (filter and !filter.accepts(item)) return; // ADDED
	if (key !in items) items.put(key, item);
}

cm.abstract.dataSymbol.ui

// snapper3DMemortButtons.cm
public constructor(Window parent, DsPData data, bool facelift, ...)

cm.abstract.dataSymbol.ui.material

An override of the following parent functions in cm.abstract.material.comMaterialCard were added.

// updates a specific MaterialTreeViewItem in the tree view
Added: public void updateMaterial(Material mat) {}

// returns the COMUndoOp for the COM and operation
Added: public COMUndoOp comUndoOp(CustomerOwnMaterial com, comUndoOperation operation) {}

The following class has been added to support undo operations for CustomerOwnMaterials.

public class DsCOMUndoOp extends COMUndoOp {}

cm.abstract.material

To support filtering of MaterialLegends, ObjFilters are utilized to filter materials in the legend. As a result, the LabeledClassFilter was added. It is a replica of the ClassFilter in cm.util.objFilter but extends LabeledObjFilter.

Added: public class LabeledClassFilter extends LabeledObjFilter
Added: public constructor(str label, Class c) {}

To support filtering of MaterialLegends, ObjFilters are utilized to filter materials in the legend. As a result, the following interface was added.

Added: public ObjFilter activeFilter() {}
Added: public void activateFilter(ObjFilter filter) {
Added: public void deactivateFilter() {
Added: public ObjFilter{} filters() {
Added: public ObjFilter[] filterSeq() {
Added: public void appendFilter(ObjFilter filter) {
Added: public void appendFilters(ObjFilter[] newFilters) {
Added: public void removeFilter(ObjFilter filter) {

The following functions have been added to support categories for CustomerOwnMaterials as well as saving and loading CustomerOwnMaterials.

// sets category on CustomerOwnMaterial data
Added: extend public void setCategory(Control c) {}

// saves CustomerOwnMaterial and its data to GMaterial (.gm) file
Added: extend public void saveCOM(Control c) {}

// Generates thumbnail for GMaterial3D with specific gmThumbnailType
Added: final public MemoryImage genThumbnail(GMaterial3D gm, gmThumbnailType type) {}

// default directory for saving COMs
Added: public Url defaultComDir() : inline {}

// user saved directory for saving COMs
Added public Url comLibraryDir() {}

To support filtering of MaterialLegends, ObjFilters are utilized to filter materials in the legend. As a result, the LabeledComboORFilter was added. It is a replica of the ComboORFilter in cm.util.objFilter but extends LabeledObjFilter.

Added: public class LabeledComboORFilter extends LabeledObjFilter
Added: public constructor(str label) {}
Added: public constructor(str label, ObjFilter[] filters) {}
Added: public constructor(str label, ObjFilter f0) {}    
Added: public constructor(str label, rest: ObjFilter[] args) {}
Added: final public LabeledComboORFilter operator<<(ObjFilter filter) : inline {}

The following overridden function has been added. It's intended to apply one CustomerOwnMaterial to another by copying it's properties and material data.

Added:  public void apply(Material other, symbol context=#parts) {}

The COMUndoOp class has been added to handle undo operations for CustomerOwnMaterials. It contains interface for COM creation, deletion, and editing.

// enum of different operation types
Added: public enum comUndoOperation : field access {}

// undo operation for CustomerOwnMaterials
Added: public class COMUndoOp extends UndoOp {}

// COM creation undo/redo
Added: extend public undoStatus createdUndoOperation(UndoChain chain) {}
Added: extend public COMUndoOp inverseCreatedUndoOperation() {}

// COM removal undo/redo
Added: extend public undoStatus removedUndoOperation(UndoChain chain, bool redo) {}
Added: extend public COMUndoOp inverseRemovedUndoOperation() {}

// COM changed undo/redo
Added: extend public undoStatus changedUndoOperation(UndoChain chain) {}
Added: extend public COMUndoOp inverseChangedUndoOperation() {}

To support filtering of MaterialLegends, ObjFilters are utilized to filter materials in the legend. As a result, the following changes were made.

Added: public ObjFilter filter() {}
Added: public void setFilter(ObjFilter filter) {}
    
	
// the optional `bool filtered` parameter was added
Old: public sorted str->MaterialLegendItem sortedList() {}
New: public sorted str->MaterialLegendItem sortedList(bool filtered=true) {}

cm.abstract.materialHandling

New Debug Tool - Config Manager Tracker

A debug tool is introduced to help keep track of some of the config changes made to MhConfigManager. It can be launched from the Debug Engine section, as shown in the screenshot below:

Config Manager Tracker Location

Clicking the button will open the tracker dialog. To use, keep the dialog open, and insert a racking system that uses the config manager. Then, perform an action that will modify the configs, like stretching a bay.

Config_Manager_Tracker_Example

Above shows an example of the dialog after those actions are performed. It shows the new config ID a snapper has after the config manager has processed it. The trace section on the right shows the stack trace for when the snapper got invalidated (when it was put into the config manager). Clicking on a method in the trace section will show its position in emacs.

Note: As of this moment, this debugger tool only shows the process of the validatePending() method in MhConfigManager. It does not show every operation/ changes made to each config in the MhConfigManager.

cm.abstract.materialHandling.storage.racking.deepstorage

New frame config behavior

Added a new behavior MhDeepStorageFrameConfigBehavior to be added to deep storage frame snappers. This is used to avoid creating unique MhConfigRef instances when applying a deep storage frame config to a group of frames using the MhDeepStorageFrameApplyAnimation animation.

// Global.
public mhLazyGlobal MhBehavior mhDeepStorageFrameConfigBehavior = MhDeepStorageFrameConfigBehavior();


/**
 * Deepstorage frame config behavior.
 */
public class MhDeepStorageFrameConfigBehavior extends MhFrameConfigBehavior {

    /**
     * Keep current config?
     */
    public bool keepCurrentConfig(MhSnapper z) {
        if (animation in MhDeepStorageFrameApplyAnimation) return true;
        return super(..);
    }
}

cm.core

cm.core

  • Added ConfiguraQAToolsVisibility and vs_qaToolsInternal for selectively showing or hiding test tools associated with QA Tools extension.
  • Deprecated InternalDeveloperVisibility, use ConfiguraInternalVisibility instead.

cm.core.library

UI Hints

To aid in adhering to the Toolbox Guidelines, several standard UIHints are provided for developers for use in defining their Libraries.

You can find these UIHints defined in cm/core/library/commonHints.cm. Use of these standard hints are highly recommended whenever possible.

MessageLimb

A new limb, MessageLimb, has been added to allow the creation of message banners in toolboxes.

There are two provided constructors, with the primary difference being the ability to include your own customizations. Utilizing the constructor with the msgType parameter and by supplying the appropriate messageType will ensure that the message banner created matches the system status styles as defined in our Design Guidelines.

You may also find additional utility methods defined for updating message banners in cm.core.toolbox.messageWindow.

Added: public constructor(LibraryLimb parent,
                          symbol pkg,
                          str key,
                          Brush brush=ultraLightGrayBrush,
                          FrameStyle frameStyle=lightGrayPenFrame,
                          int margin=7,
                          color textColor=black,
                          color linkColor=blue,
                          color linkHoverColor=blue,
                          UIHint hint=null,
                          LibraryLimbVisibility vs=null,
                          Image image=null,
                          Image toolTipImage=null,
                          str label=null,
                          function(Control button, str key):bool linkCallback=null,
                          SrcRef src=#:src)

Added: public constructor(LibraryLimb parent,
                          symbol pkg,
                          str key,
                          messageType msgType,
                          int margin=7,
                          UIHint hint=null,
                          LibraryLimbVisibility vs=null,
                          str label=null,
                          function(Control button, str key):bool linkCallback=null,
                          SrcRef src=#:src)

cm.core.material

The following overridden function has been added. It's intended to apply one Material to another by copying it's properties and material data.

Added: extend public void apply(Material other, symbol context=#parts) {}

The following functions have been added to support category data for Materials.

Added: extend public str category() {}
Added: extend public str category=(str v) {}

The following overridden function has been added. It's intended to apply one CachedMaterial to another by copying it's properties and material data.

Added:  public void apply(Material other, symbol context=#parts) {}

cm.util

A LabeledObjFilter was added. It's an ObjFilter that contains a str label field.

Added: public str label;
Added: public constructor(str label) {}

cm.win

FormattedTextArea

Links in FormattedTextArea have been enhanced to now be able to run callbacks. Previously, links were allowed only if it pointed to a valid location (such as a URL, or file path). With this change, arbitrary functions can now be called by using this mtf string:

<callbackLink=$label:$callbackKey>

Alternatively, the mtfCallbackLink function is provided as a helper to generate the mtf string for you.

When constructing the FormattedTextArea supply a callback handler in the new linkCallback parameter, which will recieve the specified callbackKey as an argument.

FaceliftScrollBar

Added ability to have a floating transparent scroll bar.

Old: public constructor(Window parent, pointI p=(0, 0), bool horizontal=false) {
New: public constructor(Window parent, pointI p=(0, 0), bool horizontal=false, bool transparentBG=false) {}

Statistics

Validation for statistic events. Validation currently checks for the following:

  1. Snapper events contain at least one snapper entity.
  2. Window events contain at least one window entity.
  3. Manufacturer package must be a main package.
  4. Custom manufacturer entities must match manufacturer package.