def mouseDoubleClickEvent(self, *args, **kwargs):

            @long_task(self, "decorator(without cancel)", False)
            def task1a(sec):
                t = time.time()
                while time.time() - t < sec:
                    pass
                return "result of task1a"


            @long_task(self, "decorator(with cancel)", True)
            def task1b(sec, cancel_event):
                t = time.time()
                while time.time() - t < sec:
                    if cancel_event.isSet():
                        break
                return "result of task1b"

            def task2a(sec):
                t = time.time()
                while time.time() - t < sec:
                    pass
                return "result of task2a"

            def task2b(sec, cancel_event):
                t = time.time()
                while time.time() - t < sec:
                    if cancel_event.isSet():
                        break
                return "result of task2b"

            def task3a(callback, sec):
                t = time.time()
                while time.time() - t < sec:
                    callback(time.time() - t, t + sec)
                    time.sleep(.1)
                return "result of task2b"

            def task3b(callback, sec):
                try:
                    t = time.time()
                    while time.time() - t < sec:
                        callback(time.time() - t, t + sec)
                        #if cancel_event.isSet():
                        #    break
                        time.sleep(.1)
                    return "result of task2b"
                except CancelWarning:
                    return "Cancelled"
#
#            print (task1a(1))
#
#            try:
#                print (task1b(3))
#            except CancelWarning:
#                print ("task1b cancelled")
#
#
#            print (self.exec_long_task("exec_long_task(without cancel)", False, task2a, 1))
#
#            try:
#                print (self.exec_long_task("exec_long_task(with cancel", True, task2b, 5))
#            except CancelWarning:
#                print ("task2 cancelled")
#
#

            for x in self.progress_iterator(range(100), "progressbar(without cancel)", False):
                t = time.time()
                while time.time() - t < .01:
                    pass
                if x > 80:
                    raise Exception

            try:
                for _ in self.progress_iterator(range(100), "progressbar(with cancel)", True):
                    t = time.time()
                    while time.time() - t < .05:
                        pass
            except CancelWarning:
                print ("progressbar cancelled")
            return QMainWindow.mouseDoubleClickEvent(self, *args, **kwargs)