class XamlWindow(Window):
	def __init__(self):
		rd = ResourceDictionary()
		rd.Source = Uri("pack://application:,,,/ClassicAssist.Shared;component/Resources/DarkTheme.xaml")
		self.Resources.MergedDictionaries.Add(rd)
		self.Background = self.Resources["ThemeWindowBackgroundBrush"]		
		
		self.Content = XamlReader.Parse(xaml)
		self.Title = "Durability"
		self.Topmost = True
		self.SizeToContent = SizeToContent.Width
		self.Height = 400
		self.refreshTime = TimeSpan.FromSeconds(30)
		
		self.listView = self.Content.FindName('listView')
		self.startButton = self.Content.FindName('startButton')
		self.startButton.Click += self.onClick
		
		self.timer = DispatcherTimer()
		self.timer.Tick += self.onTick
		self.timer.Interval = TimeSpan().FromSeconds(0)
		self.timer.Start()
		self.timer.Interval = self.refreshTime
		self.Running = True
						
	def onClick(self, sender, event):
		self.Running = not self.Running
		self.startButton.Content = "Start" if not self.Running else 'Stop'
		
		if self.Running:
			print 'Starting timer...'
			self.timer.Interval = TimeSpan().FromSeconds(0)
			self.timer.Start()
			self.timer.Interval = self.refreshTime
		else:
			print 'Stopping timer...'
			self.timer.Stop()
			self.listView.Items.Clear()
	
	def onTick(self, sender, event):
		print 'Updating durabilities'
		self.listView.Items.Clear()
		durabilities = []
		for layer in layers:
			(res, durability) = GetDurability(layer)
			if res:
				durabilities.append(LayerDurability(layer, durability))
		sorted = durabilities.OrderBy(lambda i: int(i.Durability))
		for item in sorted:
			self.listView.Items.Add(item)
        if timer_counter > MAXTIMERCOUNT - 1:
            print "Time out! %d tests didn't finish." % len(remaining_tests)
            # stop timer
            ht.Stop()

        else:
            timer_counter += 1
            for test in tests:
                # TODO get test file from Iso store
                done_file = None
                if False:
                    lines = File.ReadAllLines(done_file)
                    done_code = int(lines[0].strip())
                    remaining_tests.remove(test)
                    if done_code == 0:
                        sl.log_info(test + ' done.')
                    else:
                        sl.log_error(test + ' failed.')

    # are we done?
    if remaining_tests:
        tests = list(remaining_tests)
    else:
        # stop timer
        ht.Stop()


ht.Tick += CheckForDonFile
ht.Start()
HtmlPage.Plugin.SetStyleAttribute("width", "1px")
HtmlPage.Plugin.SetStyleAttribute("height", "1px")
Esempio n. 3
0
class _Messenger(object):
    '''
    Thread-safe messenger that ensures that all message handlers are executed
    in main dispatcher thread.

    This class should be used as singleton. It is not enforced, but recomanded
    way of getting instance is by using :meth:`_Messenger.instance` class
    method.
    '''

    _instance = None

    @classmethod
    def instance(cls, interval=5):
        '''
        Returns existing instance of messenger. If one does not exist it will
        be created and returned.

        :param int interval:
            Number of miliseconds that represents interval when messages will
            be processed.
            Note that this parameter will be used only the first time when
            instance is requested, every other time it will be ignored
            because existing instance of :class:`._Messenger` is returned.
        '''
        if not cls._instance:
            cls._instance = _Messenger(interval)
        return cls._instance

    def __init__(self, interval=5):
        '''
        :param int interval:
            Number of milliseconds that represents interval when messages will
            be processed.
        '''
        self._subscribers = defaultdict(list)
        self._messages = Queue()
        self._lock = Lock()
        self._timer = DispatcherTimer()
        self._timer.Interval = TimeSpan.FromMilliseconds(5)
        self._timer.Tick += self._execute
        self._timer.Start()

    def send(self, message, *args, **kwargs):
        '''
        Sends provided message to all listeners. Message is only added to
        queue and will be processed on next tick.

        :param Message message:
            Message to send.
        '''
        self._messages.put((message, args, kwargs), False)

    def subscribe(self, message, handler):
        '''
        Adds hander for specified message.

        :param str message:
            Name of message to subscribe to.

        :param callable handler:
            Handler for this message type. Handler must receive single parameter
            and that parameter will be instance of sent message.
        '''
        with self._lock:
            ref = WeakCallable(handler, self._on_collect)
            self._subscribers[message].append(ref)

    # TODO: Unsubscribing with WeakCallable does not work
    def unsubscribe(self, message, handler):
        '''
        Removes handler from message listeners.

        :param str message:
            Name of message to unsubscribe handler from.

        :param callable handler:
            Callable that should be removed as handler for `message`.
        '''
        with self._lock:
            self._subscribers[message].remove(WeakCallable(handler))

    def _execute(self, sender, event_args):
        '''
        Event handler for timer that processes all queued messages.
        '''
        with self._lock:
            while not self._messages.empty():
                msg, args, kwargs = self._messages.get(False)
                for subscriber in self._subscribers[msg]:
                    try:
                        subscriber(*args, **kwargs)
                    except weakref.ReferenceError:
                        # Reference to handler is lost and it is OK to silence it
                        pass

    def _on_collect(self, ref):
        with self._lock:
            for msg in self._subscribers:
                if ref in self._subscribers[msg]:
                    self._subscribers[msg].remove(ref)
Esempio n. 4
0
        me.Volume1_MouseEnterValue.To = buttonOverHexValue
        me.Volume2_MouseEnterValue.To = buttonOverHexValue
        me.NextA_MouseEnterValue.To = buttonOverHexValue
        me.NextB_MouseEnterValue.To = buttonOverHexValue
        me.PreviousA_MouseEnterValue.To = buttonOverHexValue
        me.PreviousB_MouseEnterValue.To = buttonOverHexValue
        me.FullA_MouseEnterValue.To = buttonOverHexValue
        me.FullB_MouseEnterValue.To = buttonOverHexValue
        me.FullC_MouseEnterValue.To = buttonOverHexValue
        me.FullD_MouseEnterValue.To = buttonOverHexValue

    # UI update timer
    _positionTimer = DispatcherTimer()
    _positionTimer.Interval = TimeSpan(0, 0, 0, 0, 100)
    _positionTimer.Tick += positionTimer_Tick
    _positionTimer.Start()

    #get XML from page DOM
    name = Application.Current.Host.InitParams["xamlid"].Split("-")[0]
    xmlSettings = HtmlPage.Document.GetElementById(name + "-settings").text
    settings = MediaInfo(xmlSettings)

    # assign values declared in markup
    _loop = settings.Loop
    me.Width = settings.Width
    me.Height = settings.Height

    if settings.Poster != "":
        me.Poster.Source = BitmapImage(
            Uri(EnsureAbsoluteFilePath(settings.Poster), UriKind.Absolute))
Esempio n. 5
0
class MainWindow(Window):
    def __init__(self):
        '''
        get the window design from Window.xaml
        FindLogicalNode maps each component to a variable
        += maps an event to a function, the name of the event can be found in Windows class help file
        '''
        Window.__init__(self)

        stream = StreamReader("Window.xaml")
        window = XamlReader.Load(stream.BaseStream)

        self._timer = DispatcherTimer()
        self._timer.Tick += self._timer_Tick
        self._timer.Interval = TimeSpan.FromMilliseconds(10) 'run the timer every 10ms'
        self._timer.Start()

        initializing = True
        print("main window")
        while Transfer.all_connected() == False and initializing:
            if MessageBox.Show("Devices not initialized, retry?","warning", MessageBoxButton.YesNo, MessageBoxImage.Information) == MessageBoxResult.Yes:
                Transfer.reinitialize()
            else:
                initializing = False

        if initializing == False:
            Application.Current.Shutdown()
            return

        self.UI_x = LogicalTreeHelper.FindLogicalNode(window, "UI_x")
        self.UI_x.Content = KCubeDCServoUI.CreateLargeView(Transfer.x)
        self.UI_y = LogicalTreeHelper.FindLogicalNode(window, "UI_y")
        self.UI_y.Content = KCubeDCServoUI.CreateLargeView(Transfer.y)
        self.UI_z = LogicalTreeHelper.FindLogicalNode(window, "UI_z")
        self.UI_z.Content = KCubeDCServoUI.CreateLargeView(Transfer.z)
        self.UI_rx = LogicalTreeHelper.FindLogicalNode(window, "UI_rx")
        self.UI_rx.Content = KCubeDCServoUI.CreateLargeView(Transfer.rx)
        self.UI_ry = LogicalTreeHelper.FindLogicalNode(window, "UI_ry")
        self.UI_ry.Content = KCubeDCServoUI.CreateLargeView(Transfer.ry)
        self.UI_r = LogicalTreeHelper.FindLogicalNode(window, "UI_r")
        self.UI_r.Content = KCubeDCServoUI.CreateLargeView(Transfer.r)

        self.Help = LogicalTreeHelper.FindLogicalNode(window, "Help")
        self.Help.Click += self.Help_Click

        self.ZUp = LogicalTreeHelper.FindLogicalNode(window, "ZUp")
        self.ZUp.Checked += self.ZUp_Checked
        self.ZUp.Unchecked += self.ZUp_Unchecked
        self.ZDown = LogicalTreeHelper.FindLogicalNode(window, "ZDown")
        self.ZDown.Checked += self.ZDown_Checked
        self.ZDown.Unchecked += self.ZDown_Unchecked

        self.ViewMode = LogicalTreeHelper.FindLogicalNode(window, "ViewMode")
        self.ViewMode.SelectionChanged += self.ViewMode_Changed

        self.Button1 = LogicalTreeHelper.FindLogicalNode(window, "Button1")
        self.Button1.Click += self.Button1_Click

        self.Mode = LogicalTreeHelper.FindLogicalNode(window, "Mode")
        self.Mode.Text = "High speed mode"

        self.RotateAngle = LogicalTreeHelper.FindLogicalNode(window, "Angle")

        self.Title = "Gaming..."
        '''lock the size'''

        Application().Run(window)

    def ViewMode_Changed(self, sender, e):
        if self.ViewMode.SelectedValue.Name == "SimpleMode":
            self.UI_x.Content = KCubeDCServoUI.CreateSmallView(Transfer.x)
            self.UI_y.Content = KCubeDCServoUI.CreateSmallView(Transfer.y)
            self.UI_z.Content = KCubeDCServoUI.CreateSmallView(Transfer.z)
            self.UI_rx.Content = KCubeDCServoUI.CreateSmallView(Transfer.rx)
            self.UI_ry.Content = KCubeDCServoUI.CreateSmallView(Transfer.ry)
            self.UI_r.Content = KCubeDCServoUI.CreateSmallView(Transfer.r)
        if self.ViewMode.SelectedValue.Name == "ComplexMode":
            self.UI_x.Content = KCubeDCServoUI.CreateLargeView(Transfer.x)
            self.UI_y.Content = KCubeDCServoUI.CreateLargeView(Transfer.y)
            self.UI_z.Content = KCubeDCServoUI.CreateLargeView(Transfer.z)
            self.UI_rx.Content = KCubeDCServoUI.CreateLargeView(Transfer.rx)
            self.UI_ry.Content = KCubeDCServoUI.CreateLargeView(Transfer.ry)
            self.UI_r.Content = KCubeDCServoUI.CreateLargeView(Transfer.r)
        self.SizeToContent = True

    def Button1_Click(self, sender, e):
        try:
            angle = float(self.RotateAngle.Text)
            Transfer.rotate(angle)
        except ValueError:
            MessageBox.Show("Input invalid")
        self.RotateAngle.Clear()

    def _timer_Tick(self, sender, e):
        '''
        keeps running to get the command and control.
        event is the signal from Xbox controller
        '''
        #Transfer.check()\
        #print("for/bavk/stop:{0}{1}{2}".format(Transfer.rx.Status.IsMovingForward, Transfer.rx.Status.IsMovingBackward, Transfer.rx.Status.IsMoving))
        events = get_events()
        for event in events:
            if event.type == EVENT_BUTTON_RELEASED and event.button == "BACK":
                Transfer.close()
            if event.type == EVENT_BUTTON_RELEASED and event.button == "START":
                Transfer.__init__()
                #self.__init__() !!!!
            if event.type == EVENT_BUTTON_PRESSED and event.button == "LEFT_SHOULDER":
                if self.Mode.Text == "Low speed mode":
                    Transfer.setspeed([200000, 500000, 25000, 300000])
                    self.Mode.Text = "High speed mode"
                else:
                    Transfer.setspeed([20000, 20000, 2500, 5000])
                    self.Mode.Text = "Low speed mode"
                print(Transfer.speed)
            WrongInfo = Transfer.move(event)
            if WrongInfo != 'None':
                MessageBox.Show(WrongInfo)

    def ZUp_Checked(self, sender, e):
        '''
        the function for the checkbox (the switch of z up/down)
        '''
        if self.ZDown.IsChecked == True:
            try:
                Transfer.z.Stop(0)
            except:
                pass
            sleep(0.5)
            self.ZDown.IsChecked = False
        Transfer.z.MoveContinuousAtVelocity(FORWARD, 500)

    def ZUp_Unchecked(self, sender, e):
        Transfer.z.Stop(0)

    def ZDown_Checked(self, sender, e):
        if self.ZUp.IsChecked == True:
            try:
                Transfer.z.Stop(0)
            except:
                pass
            sleep(0.5)
            self.ZUp.IsChecked = False
        Transfer.z.MoveContinuousAtVelocity(BACKWARD, 500)

    def ZDown_Unchecked(self, sender, e):
        Transfer.z.Stop(0)

    def Help_Click(self, sender, e):
        '''
        can show a help file after clicking the help
        '''
        pass
Esempio n. 6
0
class MyWindow(Window):
    def __init__(self):
        self.mouse_drag = False
        self.animal_window = None
        self.selected_animal = None
        self.mouse_start_point = Point(0, 0)
        self.start_time = time()

        self.world = world.World(500, 200, constants=WorldConstants())

        self.window = wpf.LoadComponent(self,
                                        'iron_unconditioned_reflexes.xaml')
        self._create_and_start_timer()

        self._renderer = Renderer(self.canvas, self.world)

        self.world.food_timer = self.food_slider.Value

        self._renderer.draw_food_smell = self.food_smell_checkBox.IsChecked
        self._renderer.draw_eat_distance = self.eat_distance_checkBox.IsChecked
        self._renderer.draw_chunks = self.chunks_checkBox.IsChecked
        self._renderer.draw_animal_smell = self.animal_smell_checkBox.IsChecked

        self._simulation_scenario = SimulationScenario(self)

    def _create_and_start_timer(self):
        self.timer = DispatcherTimer()
        self.timer.Tick += self.dispatcherTimer_Tick
        self.timer.Interval = TimeSpan(0, 0, 0, 0, self.timer_slider.Value)
        self.timer.Start()

    def dispatcherTimer_Tick(self, sender, e):
        self._simulation_scenario.tic()
        self._check_performance()
        self._show_world_info_in_ui()

        self.world.update()
        self._renderer.render()
        if self.animal_window:
            self.animal_window.update()

    def _check_performance(self):
        if self.world.time % 10 == 0:
            performance = (time() - self.start_time) / 10.0
            self.performance_textblock.Text = "performance={}".format(
                performance)
            self.start_time = time()

    def _show_world_info_in_ui(self):
        self.world_time_textblock.Text = "world time={}".format(
            self.world.time)
        self.animal_count_textblock.Text = "animal count={}".format(
            len(self.world.animals))
        self.food_count_textblock.Text = "food count={}".format(
            len(self.world.food))

    def timer_slider_ValueChanged(self, sender, e):
        self.timer.Interval = TimeSpan(0, 0, 0, 0, sender.Value)

    def scale_slider_ValueChanged(self, sender, e):
        # todo fix this crutch
        if hasattr(self, 'canvas'):
            self.canvas.RenderTransform = ScaleTransform(
                sender.Value, sender.Value)

    def canvas_SizeChanged(self, sender, e):
        self.world.width = int(sender.ActualWidth)
        self.world.height = int(sender.ActualHeight)

    def canvas_MouseRightButtonDown(self, sender, e):
        self.mouse_drag = True
        self.mouse_start_point = e.GetPosition(self.canvas)

    def canvas_MouseRightButtonUp(self, sender, e):
        self.mouse_drag = False

    def canvas_MouseLeave(self, sender, e):
        self.mouse_drag = False

    def canvas_MouseMove(self, sender, e):
        if self.mouse_drag:
            point = e.GetPosition(self.canvas)
            left = self.parent_canvas.GetLeft(self.canvas)
            top = self.parent_canvas.GetTop(self.canvas)
            if float.IsNaN(left):
                left = 0
            if float.IsNaN(top):
                top = 0
            self.parent_canvas.SetLeft(
                self.canvas, left + point.X - self.mouse_start_point.X)
            self.parent_canvas.SetTop(self.canvas,
                                      top + point.Y - self.mouse_start_point.Y)

    def canvas_MouseWheel(self, sender, e):
        self.scale_slider.Value += (e.Delta / 120) * 0.05

    def food_slider_ValueChanged(self, sender, e):
        self.world.food_timer = int(sender.Value)

    def food_smell_changed(self, sender, e):
        self._renderer.draw_food_smell = self.food_smell_checkBox.IsChecked

    def eat_distance_changed(self, sender, e):
        self._renderer.draw_eat_distance = self.eat_distance_checkBox.IsChecked

    def chunks_changed(self, sender, e):
        self._renderer.draw_chunks = self.chunks_checkBox.IsChecked

    def animal_smell_changed(self, sender, e):
        self._renderer.draw_animal_smell = self.animal_smell_checkBox.IsChecked

    def MenuItem_Click(self, sender, e):
        if self.animal_window is None or not self.animal_window.IsLoaded:
            self.animal_window = AnimalWindow()
            self.animal_window.animal = self.selected_animal
            self.animal_window.Show()

    def canvas_MouseLeftButtonDown(self, sender, e):
        point = e.GetPosition(self.canvas)
        self.selected_animal = self.world.get_animal(point.X, point.Y)
        self._renderer.selected_animal = self.selected_animal
        if self.animal_window:
            self.animal_window.animal = self.selected_animal