<NME> selection-changed-action.cocoascript
<BEF> @import 'actions/action-inventory.cocoascript'
@import 'actions/view-inventory.cocoascript'
@import 'actions/statistics-inventory.cocoascript'
@import 'run-actions.cocoascript'
@import 'lib.js'


function SelectionInventory(type) {
    this.type = type
    this.artboards = NSMutableArray.new()
    this.layers = NSMutableArray.new()
}

function SelectionInventory(type, artboards) {
    this.type = type
    this.artboards = NSMutableArray.new()
    this.layers = NSMutableArray.new()

    if (artboards != nil) { this.artboards = artboards}
}

function SelectionInventory(type, artboards, layers) {
    this.type = type

@import 'actions/action-inventory.cocoascript'
@import 'actions/view-inventory.cocoascript'

// var testThreadIdentifier = "com.tilllur.framer-inventory.testing"
// function TestObject (name) {


// }

var onSelectionChanged = function(context) {
    // return
    coscript.setShouldKeepAround(true); // Setting session as a long running.

    // First argument is a delay in seconds.
    coscript.scheduleWithInterval_jsFunction(0.4,function() {
        var threadIdentifier = "com.tilllur.framer-inventory"
        var threadDictionary = NSThread.mainThread().threadDictionary()
        var testObject = threadDictionary[threadIdentifier]

        if (testObject != nil) {
            // var selection = NSDocumentController.sharedDocumentController().currentDocument().selectedLayers();
            // var selection = context.actionContext.newSelection
            // log(selection)

            var selection = NSDocumentController.sharedDocumentController().currentDocument().selectedLayers();
            // log(selectionCorrect)

            if (selection.count() > 0) {
                var currentName = "Artboards: "

                var counterA = 0
                var counterL = 0

                for (var i = 0; i < selection.count(); i++) {
                      if (TypeInventory.isArtboardType([[selection objectAtIndex:i] className])) { counterA++ }
                    // currentName += selection[i].name() + ", "
                }
                testObject.updateSelectionLabel(currentName + counterA)
            }
            else {
                testObject.updateSelectionLabel("Select Layers")
            }

        }

        coscript.setShouldKeepAround(false); // Tearing down the session.
    });




// SelectionInventory.selectionChangedHandler = function() {
//
// }


// 0 – Select layers
// 1 – layer / all states
// 2 – selected states
// 3 – layers / all states for layers
// 4 – selected states for layers
// 5 – Scene
// 6 – Scene for selected artboards
// 7 – Expired

SelectionInventory.analyseActionType = function(selection) {
    if (!DemoInventory.isRegistered() && DemoInventory.actionsLeft() <= 0) { return new SelectionInventory(7) }

    if (selection == nil) {
        if (showLog) { log("Warning. Selection is nil") }
        return new SelectionInventory(0)
    }

    var localLayers = NSMutableArray.new()
    var localArtboards = NSMutableArray.new()
    var hasParentArtboard = false

    for (var i = 0; i < selection.count(); i++) {
        var currentLayerClassName = [[selection objectAtIndex:i] className]
        if (TypeInventory.isArtboardType(currentLayerClassName)) { localArtboards.addObject([selection objectAtIndex:i]) }
        else {
            localLayers.addObject([selection objectAtIndex:i])
            if (!hasParentArtboard) {
                var localParent = TypeInventory.findParentArtboard([selection objectAtIndex:i])
                if (localParent != nil && TypeInventory.isArtboardType(localParent.className())) { hasParentArtboard = true }
            }
        }
    }
    // for Keynote only
    if (StatisticsInventory.getStatus() == Status.simulateID() || (ToolbarInventory.toolbarMode() == Status.toolbarModeScene() && (StatisticsInventory.getStatus() != Status.generateID() || StatisticsInventory.getStatus() != Status.replicateID()))) {
        if (localArtboards.count() < 1) { return new SelectionInventory(5, currentDocument.currentPage().artboards()) }
        return new SelectionInventory(6, localArtboards)
    }

    if (localLayers.count() < 1 || !hasParentArtboard) { return new SelectionInventory(0) }

    var isSameName = true
    if (localLayers.count() > 0) {
        var currentLayerName = [[localLayers firstObject] name]
        for (var i = 1; i < localLayers.count(); i++) {
            var currentLayer = [localLayers objectAtIndex:i]
            if (![currentLayerName isEqualToString:[currentLayer name]]) {
                isSameName = false
                break;
            }
        }
    }

    var additionalArtboards = NSMutableArray.new()
    for (var i = 0; i < localLayers.count(); i++) {
        var currentLayer = [localLayers objectAtIndex:i]
        var currentLayerArtboard = TypeInventory.findParentArtboard(currentLayer)
        if (TypeInventory.isArtboardType([currentLayerArtboard className])) { additionalArtboards.addObject(currentLayerArtboard) }
    }

    for (var i = 0; i < additionalArtboards.count(); i++) {
        var shouldAddCurrentArtboard = true
        var currentArtboard = [additionalArtboards objectAtIndex:i]

        for (var j = 0; j < localArtboards.count(); j++) {
            var comparableArtboard = [localArtboards objectAtIndex:j]
            if ([[comparableArtboard name] isEqualToString:[currentArtboard name]] &&
                [comparableArtboard hash] == [currentArtboard hash]) {
                    shouldAddCurrentArtboard = false
                    break;
                }
        }

        if (shouldAddCurrentArtboard) { localArtboards.addObject(currentArtboard) }
    }

    // log("L: " + localLayers.count() + ", on A:" + localArtboards.count() + ". Same?" + isSameName)

    var type = -1
    if (localArtboards.count() == 1) { type = isSameName ? 1 : 3 }
    else if (localArtboards.count() > 1) { type = isSameName ? 2 : 4 }
    else { type = 0 }

    return new SelectionInventory(type, localArtboards, localLayers)
}

<MSG> Toolbar is saved in threadDictionary

– Updated Toolbar Inventory class to be stored in threadDictionary
– Path label is updating
– Selection label is updating

<DFF> @@ -24,6 +24,7 @@
 
 @import 'actions/action-inventory.cocoascript'
 @import 'actions/view-inventory.cocoascript'
+@import 'lib.js'
 
 // var testThreadIdentifier = "com.tilllur.framer-inventory.testing"
 // function TestObject (name) {
@@ -32,43 +33,53 @@
 // }
 
 var onSelectionChanged = function(context) {
-    // return
-    coscript.setShouldKeepAround(true); // Setting session as a long running.
 
-    // First argument is a delay in seconds.
-    coscript.scheduleWithInterval_jsFunction(0.4,function() {
-        var threadIdentifier = "com.tilllur.framer-inventory"
-        var threadDictionary = NSThread.mainThread().threadDictionary()
-        var testObject = threadDictionary[threadIdentifier]
+    // coscript.setShouldKeepAround(true);
+    // coscript.scheduleWithInterval_jsFunction(0.2,function() {
+    //     var selection = NSDocumentController.sharedDocumentController().currentDocument().selectedLayers();
+    //     ToolbarInventory.updateSelectionLabelStringValue(selection.count() + "")
+    //     coscript.setShouldKeepAround(false); // Tearing down the session.
+    // }
 
-        if (testObject != nil) {
-            // var selection = NSDocumentController.sharedDocumentController().currentDocument().selectedLayers();
-            // var selection = context.actionContext.newSelection
-            // log(selection)
 
-            var selection = NSDocumentController.sharedDocumentController().currentDocument().selectedLayers();
-            // log(selectionCorrect)
+    coscript.setShouldKeepAround(true); // Setting session as a long running.
 
-            if (selection.count() > 0) {
-                var currentName = "Artboards: "
+    // First argument is a delay in seconds.
+    coscript.scheduleWithInterval_jsFunction(0.4,function() {
+        var selection = NSDocumentController.sharedDocumentController().currentDocument().selectedLayers();
+        ToolbarInventory.updateSelectionLabelStringValue(selection.count() + "")
+
+        // if (testObject != nil) {
+        //     // var selection = NSDocumentController.sharedDocumentController().currentDocument().selectedLayers();
+        //     // var selection = context.actionContext.newSelection
+        //     // log(selection)
+        //
+        //     var selection = NSDocumentController.sharedDocumentController().currentDocument().selectedLayers();
+        //     // log(selectionCorrect)
+        //
+        //     if (selection.count() > 0) {
+        //         var currentName = "Artboards: "
+        //
+        //         var counterA = 0
+        //         var counterL = 0
+        //
+        //         for (var i = 0; i < selection.count(); i++) {
+        //               if (TypeInventory.isArtboardType([[selection objectAtIndex:i] className])) { counterA++ }
+        //             // currentName += selection[i].name() + ", "
+        //         }
+        //         testObject.updateSelectionLabel(currentName + counterA)
+        //     }
+        //     else {
+        //         testObject.updateSelectionLabel("Select Layers")
+        //     }
+        //
+        // }
 
-                var counterA = 0
-                var counterL = 0
+        coscript.setShouldKeepAround(false); // Tearing down the session.
+    });
 
-                for (var i = 0; i < selection.count(); i++) {
-                      if (TypeInventory.isArtboardType([[selection objectAtIndex:i] className])) { counterA++ }
-                    // currentName += selection[i].name() + ", "
-                }
-                testObject.updateSelectionLabel(currentName + counterA)
-            }
-            else {
-                testObject.updateSelectionLabel("Select Layers")
-            }
 
-        }
 
-        coscript.setShouldKeepAround(false); // Tearing down the session.
-    });
 
 
 

Toolbar is saved in threadDictionary