from ij import IJ, WindowManager
from ij.plugin.frame import RoiManager
from ij.measure import ResultsTable
# import threading

titles = list(WindowManager.getImageTitles())
titles.sort()
toRemove = []
for title in titles:
    # print WindowManager.getWindow(title).getClass().getSimpleName(), title
    if WindowManager.getWindow(title).getClass().getSimpleName() != 'StackWindow':
        # print 'removing', title
        toRemove.append(title)

for title in toRemove:
    titles.remove(title)

out = ResultsTable()
print str(titles)


def measureOneImage(image, frames):
    WindowManager.setTempCurrentImage(image)
    IJ.run('Clear Results')
    roiM = RoiManager.getInstance()
    for i in xrange(roiM.getCount()):
        roiM.select(i)
        for j in xrange(1, frames + 1):
            image.setSliceWithoutUpdate(j)
            IJ.run('Measure')


for title in titles:
    # WindowManager.setCurrentWindow(WindowManager.getWindow(title))
    # IJ.runMacroFile("multi-plot.ijm")

    image = WindowManager.getImage(title)
    if image.getNFrames() > 1:
        frames = image.getNFrames()
    else:
        frames = image.getNSlices()

    measureOneImage(image, frames)

    results = ResultsTable.getResultsTable()
    heads = results.getHeadings()
    numHeads = len(heads)
    nRois = len(RoiManager.getInstance().getRoisAsArray())

    # for frame in range(0, frames):
    #     if out.getCounter() < frames:
    #         out.incrementCounter()
    #     for head in heads:
    #         for roi in range(0, nRois):
    #             print roi
    #             val = results.getValue(head, frames * (roi) + frame)
    #             print val
    #             out.setValue(
    # title + '_' + head + '#' + str(roi + 1), frame, val)

    for frame in xrange(frames):
        if out.getCounter() < frames:
            out.incrementCounter()
        for head in heads:
            for roi in xrange(nRois):
                # print roi
                val = results.getValue(head, frames * (roi) + frame)
                # print val
                out.setValue(
                    title + '_' + head + '#' + str(roi + 1), frame, val)


out.show("Output")
