예제 #1
0
    def status(self):
        bottomHBox = Gtk.HBox()

        self.nextTrackLabel = Gtk.Label("Next: ")
        bottomHBox.pack_start(self.nextTrackLabel, False, False, 0)

        self.nextTrackNameLabel = ScrollLabel(1)  #Gtk.Label()
        self.nextTrackNameLabel.set_markup("Track Name - Artist Name")
        self.nextTrackNameLabel.assign_markup("<b>{0}</b>")
        self.nextTrackNameLabel.set_max_width_chars(21)
        self.nextTrackNameLabel.set_ellipsize(Pango.EllipsizeMode.END)
        self.scrollLabels.append(self.nextTrackNameLabel)
        bottomHBox.pack_start(self.nextTrackNameLabel, True, True, 0)

        queueImage = Gtk.Image()
        queueImage.set_from_pixbuf(
            imageManager.get_image('queue').Scale(16, 16))
        bottomHBox.pack_start(queueImage, False, False, 2)

        self.inQueueLabel = Gtk.Label("In Queue: ")
        bottomHBox.pack_start(self.inQueueLabel, False, False, 0)

        self.inQueueCountLabel = Gtk.Label()
        self.inQueueCountLabel.set_markup("<b>##</b>")
        self.inQueueCountLabel.set_ellipsize(Pango.EllipsizeMode.END)
        bottomHBox.pack_start(self.inQueueCountLabel, False, False, 0)

        return bottomHBox
예제 #2
0
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.next_screen = False

        instr = ScrollLabel(txt_test1, textcolor = '#000000')
        lbl1 = ScrollLabel('Считайте пульс', textcolor = '#000000')
        self.lbl_sec = Seconds(15, textcolor = '#000000')
        self.lbl_sec.bind(done=self.sec_finished)

        line1 = BoxLayout()
        vlay = BoxLayout(orientation='horizontal')
        vlay.add_widget(lbl1)
        vlay.add_widget(self.lbl_sec)
        line1.add_widget(instr)
        line1.add_widget(vlay)
        
        line2 = BoxLayout(size_hint=(0.8, None), height='30sp')
        lbl_result = Label(text='Напишите свой результат в этом поле:', halign='right')
        self.in_result = TextInput(text='0', multiline=False)
        self.in_result.set_disabled(True)
        
        line2.add_widget(lbl_result)
        line2.add_widget(self.in_result)

        self.btn = Button(text='Приступить', size_hint=(0.3, 0.2), pos_hint={'center_x': 0.5})
        self.btn.background_color = btn_color
        self.btn.on_press = self.next        

        outer = BoxLayout(orientation='vertical', padding=8, spacing=8)
        outer.add_widget(line1)
        outer.add_widget(line2)
        outer.add_widget(self.btn)

        self.add_widget(outer)
예제 #3
0
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.next_screen = False

        instr = ScrollLabel(txt_sits, size_hint=(0.3, 1), textcolor='#FFFFFF')
        lbl1 = ScrollLabel('Сделайте 30 приседаний', textcolor='#FFFFFF')
        self.lbl_sits = Sits(30, textcolor='#FFFFFF')
        self.run = Runner(total=30,
                          steptime=1.5,
                          size_hint=(0.4, 1),
                          lcolor=(0.44, 0.44, 0.44, 1))
        self.run.bind(finished=self.run_finished)

        line = ColoredLayout(lcolor=(0, 0.5, 0.01, 1))
        vlay = BoxLayout(orientation='vertical', size_hint=(0.3, 1))
        vlay.add_widget(lbl1)
        vlay.add_widget(self.lbl_sits)
        line.add_widget(instr)
        line.add_widget(vlay)
        line.add_widget(self.run)

        self.btn = Button(text='Начать',
                          size_hint=(0.3, 0.2),
                          pos_hint={'center_x': 0.5})
        self.btn.background_color = btn_color
        self.btn.on_press = self.next

        outer = BoxLayout(orientation='vertical', padding=8, spacing=8)
        outer.add_widget(line)
        outer.add_widget(self.btn)

        self.add_widget(outer)
예제 #4
0
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

        self.outer = BoxLayout(orientation='vertical', padding=8, spacing=8)
        self.instr = ScrollLabel('', textcolor = '#000000')
        self.outer.add_widget(self.instr)

        self.add_widget(self.outer)
        self.on_enter = self.before
예제 #5
0
class Result(Screen):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

        self.outer = BoxLayout(orientation='vertical', padding=8, spacing=8)
        self.instr = ScrollLabel('', textcolor = '#000000')
        self.outer.add_widget(self.instr)

        self.add_widget(self.outer)
        self.on_enter = self.before
    
    def before(self):
        self.instr.set_text(get_result())
예제 #6
0
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

        self.outer = BoxLayout(orientation='vertical', padding=8, spacing=8)
        self.instr = ScrollLabel('', textcolor = '#FFFFFF')

        self.btn = Button(text='Завершить', size_hint=(0.3, 0.2), pos_hint={'center_x': 0.5})
        self.btn.background_color = btn_color
        self.btn.on_press = self.next

        self.outer.add_widget(self.instr)
        self.outer.add_widget(self.btn)

        self.add_widget(self.outer)
        self.on_enter = self.before
예제 #7
0
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.next_screen = False

        self.stage = 0
        instr = ScrollLabel(txt_test3, textcolor='#FFFFFF')

        self.lbl1 = ScrollLabel('Считайте пульс', textcolor='#FFFFFF')
        self.lbl_sec = Seconds(15, textcolor='#FFFFFF')
        self.lbl_sec.bind(done=self.sec_finished)

        line0 = ColoredLayout(lcolor=(0, 0.5, 0.01, 1))
        vlay = ColoredLayout(orientation='vertical',
                             lcolor=(0.44, 0.44, 0.44, 1))
        vlay.add_widget(self.lbl1)
        vlay.add_widget(self.lbl_sec)
        line0.add_widget(instr)
        line0.add_widget(vlay)

        line1 = BoxLayout(size_hint=(0.8, None), height='30sp')
        lbl_result1 = Label(text='Результат:', halign='right')
        self.in_result1 = TextInput(text='0', multiline=False)
        self.in_result1.set_disabled(True)

        line1.add_widget(lbl_result1)
        line1.add_widget(self.in_result1)

        line2 = BoxLayout(size_hint=(0.8, None), height='30sp')
        lbl_result2 = Label(text='Результат после отдыха:', halign='right')
        self.in_result2 = TextInput(text='0', multiline=False)
        self.in_result2.set_disabled(True)

        line2.add_widget(lbl_result2)
        line2.add_widget(self.in_result2)

        self.btn = Button(text='Начать',
                          size_hint=(0.3, 0.2),
                          pos_hint={'center_x': 0.5})
        self.btn.background_color = btn_color
        self.btn.on_press = self.next

        outer = BoxLayout(orientation='vertical', padding=8, spacing=8)
        outer.add_widget(line0)
        outer.add_widget(line1)
        outer.add_widget(line2)
        outer.add_widget(self.btn)

        self.add_widget(outer)
예제 #8
0
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

        instr = ScrollLabel(ltext=txt_instruction)

        l1 = Label(text="Введите имя:")
        self.name_input = TextInput()

        l2 = Label(text="Введите возраст:")
        self.age_input = TextInput()

        self.btn = Button(text="Начать")
        self.btn.background_color = (0, 0.5, 0.5, 1)
        self.btn.on_press = self.next

        line1 = BoxLayout(orientation="vertical",
                          size_hint=(1, None),
                          height='60sp')
        line1.add_widget(l1)
        line1.add_widget(self.name_input)

        line2 = BoxLayout(orientation="vertical",
                          size_hint=(1, None),
                          height='60sp')
        line2.add_widget(l2)
        line2.add_widget(self.age_input)

        linemain = BoxLayout(orientation="vertical", padding=8, spacing=8)
        linemain.add_widget(instr)
        linemain.add_widget(line1)

        linemain.add_widget(line2)
        linemain.add_widget(self.btn)

        self.add_widget(linemain)
예제 #9
0
파일: main.py 프로젝트: yuopa/Heart-check
    def __init__(self, **kwargs):
        super().__init__(**kwargs)


        instr = ScrollLabel(ltext=txt_test1)
        self.ltimer = Seconds(15)
        self.ltimer.bind(done=self.timer_end)
        
        self.start_button = Button(text='Начать')
        self.start_button.on_press = self.start_timer
        self.start_button.background_color = (0,0,1,1)

        l1 = Label(text='Запишите релузьтат')
        self.test1_input = TextInput()
        self.test1_input.set_disabled(True)



        line1 = BoxLayout(orientation='vertical', size_hint=(1, None), height='60sp')
        line1.add_widget(l1)
        line1.add_widget(self.test1_input)

        self.button = Button(text='Далее')
        self.button.background_color = (1, 0, 0, 1)
        self.button.set_disabled(True)
        self.button.on_press = self.next

        main_line = BoxLayout(orientation='vertical', padding=8, spacing=8)
        main_line.add_widget(instr)
        main_line.add_widget(self.ltimer)
        main_line.add_widget(self.start_button)
        main_line.add_widget(line1)
        main_line.add_widget(self.button)

        self.add_widget(main_line)
예제 #10
0
파일: main.py 프로젝트: yuopa/Heart-check
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

        instr = ScrollLabel(ltext=txt_instruction)

        l1 = Label(text='Введите имя')
        self.user_name = TextInput()
        self.button = Button(text='Начать')
        self.button.background_color = (0, 1, 0, 1)
        self.button.on_press = self.next
        l2 = Label(text='Введите Ваш возраст')
        self.user_age = TextInput()


        line1 = BoxLayout(orientation='vertical', size_hint=(1, None), height='60sp')
        line2 = BoxLayout(orientation='vertical', size_hint=(1, None), height='60sp')

        line1.add_widget(l1)
        line1.add_widget(self.user_name)

        line2.add_widget(l2)
        line2.add_widget(self.user_age)

        


        main_line = BoxLayout(orientation='vertical', padding=8, spacing=8)

        main_line.add_widget(instr)
        main_line.add_widget(line1)
        main_line.add_widget(line2)
        main_line.add_widget(self.button)
        

        self.add_widget(main_line)
예제 #11
0
파일: main.py 프로젝트: yuopa/Heart-check
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

        self.l = ScrollLabel(ltext='')

        self.add_widget(self.l)
        self.on_enter = self.before
예제 #12
0
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        instr = ScrollLabel(ltext=txt_test1)
        self.ltimer = Seconds(15)
        self.ltimer.bind(done=self.timer_end)

        l1 = Label(text="Запишите результат")
        self.test_input = TextInput(text='0')
        self.test_input.set_disabled(True)

        self.btn = Button(text="Далее")
        self.btn.background_color = (0, 0.5, 0.5, 1)
        self.btn.set_disabled(True)
        self.btn.on_press = self.next
        line1 = BoxLayout(orientation="vertical",
                          size_hint=(1, None),
                          height='60sp')
        line1.add_widget(l1)
        line1.add_widget(self.test_input)
        linemain = BoxLayout(orientation="vertical", padding=8, spacing=8)

        linemain.add_widget(instr)
        linemain.add_widget(self.ltimer)
        linemain.add_widget(line1)
        linemain.add_widget(self.btn)

        self.add_widget(linemain)
예제 #13
0
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

        instr = ScrollLabel(txt_instruction, textcolor='#FFFFFF')

        lbl1 = Label(text='Введите имя:', halign='right')
        self.in_name = TextInput(multiline=False)
        lbl2 = Label(text='Введите возраст:', halign='right')
        self.in_age = TextInput(text='7', multiline=False)

        self.btn = Button(text='Начать',
                          size_hint=(0.3, 0.2),
                          pos_hint={'center_x': 0.5})
        self.btn.background_color = btn_color
        self.btn.on_press = self.next

        line1 = BoxLayout(size_hint=(0.8, None), height='30sp')
        line2 = BoxLayout(size_hint=(0.8, None), height='30sp')
        line1.add_widget(lbl1)
        line1.add_widget(self.in_name)
        line2.add_widget(lbl2)
        line2.add_widget(self.in_age)

        outer = BoxLayout(orientation='vertical', padding=8, spacing=8)
        outer.add_widget(instr)
        outer.add_widget(line1)
        outer.add_widget(line2)
        outer.add_widget(self.btn)

        self.add_widget(outer)
예제 #14
0
    def scrolledWindow(self):
        vbox = Gtk.VBox()

        self.albumArtImage = Gtk.Image()
        self.albumArtImage.set_from_file('./images/AlbumArtEmpty.jpg')
        pixbuf = self.albumArtImage.get_pixbuf().scale_simple(
            250, 250, GdkPixbuf.InterpType.BILINEAR)
        self.albumArtImage.set_from_pixbuf(pixbuf)
        self.albumArtImage.show()
        vbox.pack_start(self.albumArtImage, True, True, 5)

        self.musicLabel = ScrollLabel(1)  #Gtk.Label()
        music = "[no music]"
        #self.musicLabel.set_markup("<span size=\"12000\"><b>" + music + "</b></span>")
        self.musicLabel.assign_markup(
            "<span size=\"12000\"><b> {0} </b></span>")
        self.musicLabel.set_markup(music)
        self.musicLabel.set_max_width_chars(25)
        self.musicLabel.set_ellipsize(Pango.EllipsizeMode.END)
        vbox.pack_start(self.musicLabel, False, False, 0)

        return (vbox)
예제 #15
0
파일: main.py 프로젝트: yuopa/Heart-check
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

        instr = ScrollLabel(ltext=txt_sitting)

        self.button = Button(text='Далее')
        self.button.background_color = (1, 0, 0, 1)
        self.button.on_press = self.next

        main_line = BoxLayout(orientation='vertical', padding=8, spacing=8)
        main_line.add_widget(instr)
        main_line.add_widget(self.button)

        self.add_widget(main_line)
예제 #16
0
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        instr = ScrollLabel(ltext=txt_sitting)

        self.ltimer = Seconds(45)
        self.ltimer.bind(done=self.timer_end)

        self.btn = Button(text="Далее")
        self.btn.background_color = (0, 0.5, 0.5, 1)
        self.btn.on_press = self.next

        linemain = BoxLayout(orientation="vertical", padding=8, spacing=8)
        linemain.add_widget(instr)
        linemain.add_widget(self.ltimer)

        linemain.add_widget(self.btn)

        self.add_widget(linemain)
예제 #17
0
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

        instr = ScrollLabel(ltext=txt_test2)

        self.t1 = Seconds(15)
        self.t2 = Seconds(45)
        self.t3 = Seconds(15)
        self.t1.bind(done=self.t1_end)
        self.t2.bind(done=self.t2_end)
        self.t3.bind(done=self.t3_end)

        l1 = Label(text="Результат после приседаний:")
        self.test2_input = TextInput()
        self.test2_input.set_disabled(True)

        l2 = Label(text="Результат после отдыха:")
        self.test3_input = TextInput()
        self.test3_input.set_disabled(True)

        self.btn = Button(text="Нажми, если ты живой")
        self.btn.background_color = (0, 0.5, 0.5, 1)
        self.btn.on_press = self.next
        self.btn.set_disabled(True)

        line1 = BoxLayout(orientation="vertical",
                          size_hint=(1, None),
                          height='60sp')
        line1.add_widget(l1)
        line1.add_widget(self.test2_input)

        line2 = BoxLayout(orientation="vertical",
                          size_hint=(1, None),
                          height='60sp')
        line2.add_widget(l2)
        line2.add_widget(self.test3_input)

        linemain = BoxLayout(orientation="vertical", padding=8, spacing=8)
        linemain.add_widget(instr)
        linemain.add_widget(line1)
        linemain.add_widget(line2)
        linemain.add_widget(self.btn)

        self.add_widget(linemain)
예제 #18
0
파일: main.py 프로젝트: yuopa/Heart-check
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

        instr = ScrollLabel(ltext=txt_test2)

        l1 = Label(text='Результат после приседаний:')
        self.test2_input = TextInput()
        
        l2 = Label(text='Результат после отдыха:')
        self.test3_input = TextInput()

        self.button = Button(text='Показать результат')
        self.button.background_color = (1, 0, 0, 1)
        self.button.on_press = self.next


        line1 = BoxLayout(orientation='vertical', size_hint=(1, None), height='60sp')
        line2 = BoxLayout(orientation='vertical', size_hint=(1, None), height='60sp')

        line1.add_widget(l1)
        line1.add_widget(self.test2_input)

        line2.add_widget(l2)
        line2.add_widget(self.test3_input)

        


        main_line = BoxLayout(orientation='vertical', padding=8, spacing=8)

        main_line.add_widget(instr)
        main_line.add_widget(line1)
        main_line.add_widget(line2)
        main_line.add_widget(self.button)
        

        self.add_widget(main_line)
예제 #19
0
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

        instr = ScrollLabel(ltext=txt_test2)

        l1 = Label(text="   Результат после приседания")
        self.test2_input = TextInput()

        l2 = Label(text="")
        self.test3_input = TextInput()
        self.t1 = Seconds(15)
        self.t2 = Seconds(45)
        self.t3 = Seconds(15)
        self.btn = Button(text="Показать результат")
        self.btn.background_color = (0, 0.5, 0.5, 1)
        self.btn.on_press = self.next

        line1 = BoxLayout(orientation="vertical",
                          size_hint=(1, None),
                          height='60sp')
        line1.add_widget(l1)
        line1.add_widget(self.test2_input)

        line2 = BoxLayout(orientation="vertical",
                          size_hint=(1, None),
                          height='60sp')
        line2.add_widget(l2)
        line2.add_widget(self.test3_input)

        linemain = BoxLayout(orientation="vertical", padding=8, spacing=8)
        linemain.add_widget(instr)
        linemain.add_widget(line1)
        linemain.add_widget(line2)
        linemain.add_widget(self.btn)

        self.add_widget(linemain)
예제 #20
0
class PulseScr2(Screen):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.next_screen = False

        self.stage = 0
        instr = ScrollLabel(txt_test3, textcolor='#FFFFFF')

        self.lbl1 = ScrollLabel('Считайте пульс', textcolor='#FFFFFF')
        self.lbl_sec = Seconds(15, textcolor='#FFFFFF')
        self.lbl_sec.bind(done=self.sec_finished)

        line0 = ColoredLayout(lcolor=(0, 0.5, 0.01, 1))
        vlay = ColoredLayout(orientation='vertical',
                             lcolor=(0.44, 0.44, 0.44, 1))
        vlay.add_widget(self.lbl1)
        vlay.add_widget(self.lbl_sec)
        line0.add_widget(instr)
        line0.add_widget(vlay)

        line1 = BoxLayout(size_hint=(0.8, None), height='30sp')
        lbl_result1 = Label(text='Результат:', halign='right')
        self.in_result1 = TextInput(text='0', multiline=False)
        self.in_result1.set_disabled(True)

        line1.add_widget(lbl_result1)
        line1.add_widget(self.in_result1)

        line2 = BoxLayout(size_hint=(0.8, None), height='30sp')
        lbl_result2 = Label(text='Результат после отдыха:', halign='right')
        self.in_result2 = TextInput(text='0', multiline=False)
        self.in_result2.set_disabled(True)

        line2.add_widget(lbl_result2)
        line2.add_widget(self.in_result2)

        self.btn = Button(text='Начать',
                          size_hint=(0.3, 0.2),
                          pos_hint={'center_x': 0.5})
        self.btn.background_color = btn_color
        self.btn.on_press = self.next

        outer = BoxLayout(orientation='vertical', padding=8, spacing=8)
        outer.add_widget(line0)
        outer.add_widget(line1)
        outer.add_widget(line2)
        outer.add_widget(self.btn)

        self.add_widget(outer)

    def sec_finished(self, instance, value):
        if value:
            if self.stage == 0:
                self.stage = 1
                self.lbl1.set_text('Отдыхайте')
                self.lbl_sec.restart(30)
                self.in_result1.set_disabled(False)
            elif self.stage == 1:
                self.stage = 2
                self.lbl1.set_text('Считайте пульс')
                self.lbl_sec.restart(15)
            elif self.stage == 2:
                self.in_result2.set_disabled(False)
                self.btn.set_disabled(False)
                self.btn.text = 'Завершить'
                self.next_screen = True

    def next(self):
        if not self.next_screen:
            self.btn.set_disabled(True)
            self.lbl_sec.start()
        else:
            global p2, p3
            p2 = check_int(self.in_result1.text)
            p3 = check_int(self.in_result2.text)
            if p2 == False and p3 == False:
                p2 = 0
                self.in_result1.text = str(p2)
                p3 = 0
                self.in_result2.text = str(p3)
            elif p2 == False:
                p2 = 0
                self.in_result1.text = str(p2)
            elif p3 == False:
                p3 = 0
                self.in_result2.text = str(p3)
            else:
                self.in_result1.text = '0'
                self.in_result2.text = '0'
                self.manager.current = 'result'
예제 #21
0
    def scrolledWindow(self):
        topVbox = Gtk.VBox()

        stateHBox = Gtk.HBox()
        self.xportStateImage = Gtk.Image()
        self.xportStateImage.set_from_pixbuf(
            imageManager.get_image('stop').Scale(16, 16))
        stateHBox.pack_start(self.xportStateImage, False, False, 5)
        xportStateLabel = Gtk.Label()
        xportStateLabel.set_markup("<span size=\"15000\">Now Playing</span>")
        xportStateLabel.set_alignment(0.0, 0.5)
        stateHBox.pack_start(xportStateLabel, True, True, 5)
        self.crossFadeImage = Gtk.Image()
        self.crossFadeImage.set_from_pixbuf(
            imageManager.get_pixbuf('crossFade'))
        stateHBox.pack_start(self.crossFadeImage, False, False, 5)
        self.playModeShuffleImage = Gtk.Image()
        self.playModeShuffleImage.set_from_pixbuf(
            imageManager.get_pixbuf('shuffle'))
        stateHBox.pack_start(self.playModeShuffleImage, False, False, 5)
        self.playModeRepeatImage = Gtk.Image()
        self.playModeRepeatImage.set_from_pixbuf(
            imageManager.get_pixbuf('repeat'))
        stateHBox.pack_start(self.playModeRepeatImage, False, False, 5)
        topVbox.pack_start(stateHBox, False, False, 0)

        detailHBox = Gtk.HBox()
        self.albumArtImage = Gtk.Image()
        self.albumArtImage.set_from_pixbuf(imageManager.get_pixbuf('noArt'))
        detailHBox.pack_start(self.albumArtImage, False, False, 5)

        detailVBox = Gtk.VBox()

        self.trackNumberLabel = Gtk.Label("Track [x/y]")
        self.trackNumberLabel.set_alignment(0.0, 0.5)
        detailVBox.pack_start(self.trackNumberLabel, True, False, 0)

        mf = "<b>{0}</b>"
        self.trackNameLabel = ScrollLabel(1)  #Gtk.Label()
        #self.trackNameLabel.set_markup("<span weight=\"bold\">Track Name Goes Here In Bold</span>")
        self.trackNameLabel.set_markup("Track Name Goes Here In Bold")
        self.trackNameLabel.set_ellipsize(Pango.EllipsizeMode.END)
        self.trackNameLabel.set_alignment(0.0, 0.5)
        self.trackNameLabel.assign_markup(mf)
        self.scrollLabels.append(self.trackNameLabel)
        detailVBox.pack_start(self.trackNameLabel, True, False, 0)

        self.trackProgressBar = Gtk.ProgressBar()
        detailVBox.pack_start(self.trackProgressBar, True, False, 0)

        self.trackProgressTimeLabel = Gtk.Label("--:--/--:--")
        self.trackProgressTimeLabel.set_alignment(1.0, 0.5)
        detailVBox.pack_start(self.trackProgressTimeLabel, True, False, 0)

        artistsLabel = Gtk.Label("Artists")
        artistsLabel.set_alignment(0.0, 0.5)
        detailVBox.pack_start(artistsLabel, True, False, 0)

        self.artistsNameLabel = ScrollLabel(1)  #Gtk.Label()
        self.artistsNameLabel.set_markup("Artist Name Goes Here")
        self.artistsNameLabel.set_ellipsize(Pango.EllipsizeMode.END)
        self.artistsNameLabel.set_alignment(0.0, 0.5)
        self.artistsNameLabel.assign_markup(mf)
        self.scrollLabels.append(self.artistsNameLabel)
        detailVBox.pack_start(self.artistsNameLabel, True, False, 0)

        separatorLine = Gtk.Image()
        separatorLine.set_from_pixbuf(imageManager.get_pixbuf('separator'))
        detailVBox.pack_start(separatorLine, True, False, 0)

        albumsLabel = Gtk.Label("Albums")
        albumsLabel.set_alignment(0.0, 0.5)
        detailVBox.pack_start(albumsLabel, True, False, 0)

        self.albumNameLabel = ScrollLabel(1)  #Gtk.Label()
        self.albumNameLabel.set_markup("Album Name Goes Here")
        self.albumNameLabel.set_ellipsize(Pango.EllipsizeMode.END)
        self.albumNameLabel.set_alignment(0.0, 0.5)
        self.albumNameLabel.assign_markup(mf)
        self.scrollLabels.append(self.albumNameLabel)
        detailVBox.pack_start(self.albumNameLabel, True, False, 0)

        detailHBox.pack_start(detailVBox, True, True, 5)

        topVbox.pack_start(detailHBox, True, True, 2)

        return (topVbox)
예제 #22
0
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(900, 670)

        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")

        self.gridLayoutWidget = QtWidgets.QWidget(self.centralwidget)
        self.gridLayoutWidget.setGeometry(QtCore.QRect(50, 40, 800, 600))
        self.gridLayoutWidget.setObjectName("gridLayoutWidget")
        self.gridLayout = QtWidgets.QGridLayout(self.gridLayoutWidget)
        self.gridLayout.setContentsMargins(0, 0, 0, 0)
        self.gridLayout.setObjectName("gridLayout")

        self.times = QtWidgets.QLineEdit(self.gridLayoutWidget)
        self.times.setObjectName("times")
        self.gridLayout.addWidget(self.times, 3, 1, 1, 1)
        self.times.setText("1")
        self.onlyInt = QIntValidator()
        self.onlyInt.setBottom(1)
        self.times.setValidator((self.onlyInt))

        self.sp = QSlider(Qt.Horizontal)
        self.sp.setMinimum(1)
        self.sp.setMaximum(50)
        self.sp.setValue(1)
        self.gridLayout.addWidget(self.sp, 4, 0, 2, 2)
        self.sp.valueChanged.connect(self.sliderD)

        self.sliderLabel = QtWidgets.QLabel(self.gridLayoutWidget)
        font = QtGui.QFont()
        font.setPointSize(8)
        self.sliderLabel.setFont(font)
        self.sliderLabel.setFrameShape(QtWidgets.QFrame.NoFrame)
        self.sliderLabel.setAlignment(QtCore.Qt.AlignLeading
                                      | QtCore.Qt.AlignLeft
                                      | QtCore.Qt.AlignVCenter)
        self.sliderLabel.setObjectName("sliderLabel")
        self.gridLayout.addWidget(self.sliderLabel, 4, 0, 1, 1)
        self.sliderLabel.setText("Number of dice thrown at once: 1")

        self.numFaces = QtWidgets.QLineEdit(self.gridLayoutWidget)
        self.numFaces.setObjectName("numFaces")
        self.gridLayout.addWidget(self.numFaces, 3, 0, 1, 1)
        self.numFaces.setText("6")
        self.numFaces.setValidator((self.onlyInt))

        self.generateButton = QtWidgets.QPushButton(self.gridLayoutWidget)
        self.generateButton.setObjectName("generateButton")
        self.generateButton.clicked.connect(self.generate)
        self.gridLayout.addWidget(self.generateButton, 0, 0, 1, 1)

        self.loadFileButton = QtWidgets.QPushButton(self.gridLayoutWidget)
        self.loadFileButton.setObjectName("loadFileButton")
        self.loadFileButton.clicked.connect(self.load)
        self.loadFileButton.setText("Load file")
        self.gridLayout.addWidget(self.loadFileButton, 13, 1, 1, 1)

        self.saveFileButton = QtWidgets.QPushButton(self.gridLayoutWidget)
        self.saveFileButton.setObjectName("saveFileButton")
        self.saveFileButton.clicked.connect(self.save)
        self.saveFileButton.setText("Save data")
        self.gridLayout.addWidget(self.saveFileButton, 13, 0, 1, 1)

        self.showHistoryButton = QtWidgets.QPushButton(self.gridLayoutWidget)
        self.showHistoryButton.setObjectName("showHistoryButton")
        self.showHistoryButton.clicked.connect(self.showHistory)
        self.gridLayout.addWidget(self.showHistoryButton, 7, 0, 1, 0)

        self.numFacesLabel = QtWidgets.QLabel(self.gridLayoutWidget)
        font = QtGui.QFont()
        font.setPointSize(8)
        self.numFacesLabel.setFont(font)
        self.numFacesLabel.setFrameShape(QtWidgets.QFrame.NoFrame)
        self.numFacesLabel.setAlignment(QtCore.Qt.AlignLeading
                                        | QtCore.Qt.AlignLeft
                                        | QtCore.Qt.AlignVCenter)
        self.numFacesLabel.setObjectName("numFacesLabel")
        self.gridLayout.addWidget(self.numFacesLabel, 2, 0, 1, 1)

        spacerItem = QtWidgets.QSpacerItem(20, 20,
                                           QtWidgets.QSizePolicy.Minimum,
                                           QtWidgets.QSizePolicy.Fixed)
        self.gridLayout.addItem(spacerItem, 1, 0, 1, 1)

        self.clearButton = QtWidgets.QPushButton(self.gridLayoutWidget)
        self.clearButton.setObjectName("clearButton")
        self.gridLayout.addWidget(self.clearButton, 0, 1, 1, 1)
        self.clearButton.clicked.connect(self.reset)

        self.timesLabel = QtWidgets.QLabel(self.gridLayoutWidget)
        font = QtGui.QFont()
        font.setPointSize(8)
        font.setItalic(False)
        self.timesLabel.setFont(font)
        self.timesLabel.setAlignment(QtCore.Qt.AlignLeading
                                     | QtCore.Qt.AlignLeft
                                     | QtCore.Qt.AlignVCenter)
        self.timesLabel.setObjectName("timesLabel")
        self.gridLayout.addWidget(self.timesLabel, 2, 1, 1, 1)

        self.label_3 = QtWidgets.QLabel(self.gridLayoutWidget)
        font = QtGui.QFont()
        font.setPointSize(15)
        font.setItalic(True)
        self.label_3.setFont(font)
        self.label_3.setAlignment(QtCore.Qt.AlignCenter)
        self.label_3.setObjectName("label_3")
        self.gridLayout.addWidget(self.label_3, 6, 0, 1, 2)
        self.label_3.setText("Last random number:  - ")
        self.label_3.setStyleSheet("color: black;")

        spacerItem1 = QtWidgets.QSpacerItem(20, 30,
                                            QtWidgets.QSizePolicy.Minimum,
                                            QtWidgets.QSizePolicy.Fixed)
        self.gridLayout.addItem(spacerItem1, 5, 0, 1, 1)

        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 22))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

        self.figure = pyplot.figure()
        self.canvas = FigureCanvas(self.figure)
        self.toolbar = NavigationToolbar(self.canvas, MainWindow)

        self.gridLayout.addWidget(self.toolbar, 9, 0, 1, 2)
        self.gridLayout.addWidget(self.canvas, 11, 0, 2, 2)

        self.label = ScrollLabel(MainWindow)
        self.gridLayout.addWidget(self.label, 8, 0, 1, 2)

        self.showHistoryButton.setText("Show history")
        self.showHistoryButton.close()
예제 #23
0
class Ui_MainWindow(object):
    history = []
    minValue = 0
    maxValue = 10

    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(900, 670)

        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")

        self.gridLayoutWidget = QtWidgets.QWidget(self.centralwidget)
        self.gridLayoutWidget.setGeometry(QtCore.QRect(50, 40, 800, 600))
        self.gridLayoutWidget.setObjectName("gridLayoutWidget")
        self.gridLayout = QtWidgets.QGridLayout(self.gridLayoutWidget)
        self.gridLayout.setContentsMargins(0, 0, 0, 0)
        self.gridLayout.setObjectName("gridLayout")

        self.times = QtWidgets.QLineEdit(self.gridLayoutWidget)
        self.times.setObjectName("times")
        self.gridLayout.addWidget(self.times, 3, 1, 1, 1)
        self.times.setText("1")
        self.onlyInt = QIntValidator()
        self.onlyInt.setBottom(1)
        self.times.setValidator((self.onlyInt))

        self.sp = QSlider(Qt.Horizontal)
        self.sp.setMinimum(1)
        self.sp.setMaximum(50)
        self.sp.setValue(1)
        self.gridLayout.addWidget(self.sp, 4, 0, 2, 2)
        self.sp.valueChanged.connect(self.sliderD)

        self.sliderLabel = QtWidgets.QLabel(self.gridLayoutWidget)
        font = QtGui.QFont()
        font.setPointSize(8)
        self.sliderLabel.setFont(font)
        self.sliderLabel.setFrameShape(QtWidgets.QFrame.NoFrame)
        self.sliderLabel.setAlignment(QtCore.Qt.AlignLeading
                                      | QtCore.Qt.AlignLeft
                                      | QtCore.Qt.AlignVCenter)
        self.sliderLabel.setObjectName("sliderLabel")
        self.gridLayout.addWidget(self.sliderLabel, 4, 0, 1, 1)
        self.sliderLabel.setText("Number of dice thrown at once: 1")

        self.numFaces = QtWidgets.QLineEdit(self.gridLayoutWidget)
        self.numFaces.setObjectName("numFaces")
        self.gridLayout.addWidget(self.numFaces, 3, 0, 1, 1)
        self.numFaces.setText("6")
        self.numFaces.setValidator((self.onlyInt))

        self.generateButton = QtWidgets.QPushButton(self.gridLayoutWidget)
        self.generateButton.setObjectName("generateButton")
        self.generateButton.clicked.connect(self.generate)
        self.gridLayout.addWidget(self.generateButton, 0, 0, 1, 1)

        self.loadFileButton = QtWidgets.QPushButton(self.gridLayoutWidget)
        self.loadFileButton.setObjectName("loadFileButton")
        self.loadFileButton.clicked.connect(self.load)
        self.loadFileButton.setText("Load file")
        self.gridLayout.addWidget(self.loadFileButton, 13, 1, 1, 1)

        self.saveFileButton = QtWidgets.QPushButton(self.gridLayoutWidget)
        self.saveFileButton.setObjectName("saveFileButton")
        self.saveFileButton.clicked.connect(self.save)
        self.saveFileButton.setText("Save data")
        self.gridLayout.addWidget(self.saveFileButton, 13, 0, 1, 1)

        self.showHistoryButton = QtWidgets.QPushButton(self.gridLayoutWidget)
        self.showHistoryButton.setObjectName("showHistoryButton")
        self.showHistoryButton.clicked.connect(self.showHistory)
        self.gridLayout.addWidget(self.showHistoryButton, 7, 0, 1, 0)

        self.numFacesLabel = QtWidgets.QLabel(self.gridLayoutWidget)
        font = QtGui.QFont()
        font.setPointSize(8)
        self.numFacesLabel.setFont(font)
        self.numFacesLabel.setFrameShape(QtWidgets.QFrame.NoFrame)
        self.numFacesLabel.setAlignment(QtCore.Qt.AlignLeading
                                        | QtCore.Qt.AlignLeft
                                        | QtCore.Qt.AlignVCenter)
        self.numFacesLabel.setObjectName("numFacesLabel")
        self.gridLayout.addWidget(self.numFacesLabel, 2, 0, 1, 1)

        spacerItem = QtWidgets.QSpacerItem(20, 20,
                                           QtWidgets.QSizePolicy.Minimum,
                                           QtWidgets.QSizePolicy.Fixed)
        self.gridLayout.addItem(spacerItem, 1, 0, 1, 1)

        self.clearButton = QtWidgets.QPushButton(self.gridLayoutWidget)
        self.clearButton.setObjectName("clearButton")
        self.gridLayout.addWidget(self.clearButton, 0, 1, 1, 1)
        self.clearButton.clicked.connect(self.reset)

        self.timesLabel = QtWidgets.QLabel(self.gridLayoutWidget)
        font = QtGui.QFont()
        font.setPointSize(8)
        font.setItalic(False)
        self.timesLabel.setFont(font)
        self.timesLabel.setAlignment(QtCore.Qt.AlignLeading
                                     | QtCore.Qt.AlignLeft
                                     | QtCore.Qt.AlignVCenter)
        self.timesLabel.setObjectName("timesLabel")
        self.gridLayout.addWidget(self.timesLabel, 2, 1, 1, 1)

        self.label_3 = QtWidgets.QLabel(self.gridLayoutWidget)
        font = QtGui.QFont()
        font.setPointSize(15)
        font.setItalic(True)
        self.label_3.setFont(font)
        self.label_3.setAlignment(QtCore.Qt.AlignCenter)
        self.label_3.setObjectName("label_3")
        self.gridLayout.addWidget(self.label_3, 6, 0, 1, 2)
        self.label_3.setText("Last random number:  - ")
        self.label_3.setStyleSheet("color: black;")

        spacerItem1 = QtWidgets.QSpacerItem(20, 30,
                                            QtWidgets.QSizePolicy.Minimum,
                                            QtWidgets.QSizePolicy.Fixed)
        self.gridLayout.addItem(spacerItem1, 5, 0, 1, 1)

        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 22))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

        self.figure = pyplot.figure()
        self.canvas = FigureCanvas(self.figure)
        self.toolbar = NavigationToolbar(self.canvas, MainWindow)

        self.gridLayout.addWidget(self.toolbar, 9, 0, 1, 2)
        self.gridLayout.addWidget(self.canvas, 11, 0, 2, 2)

        self.label = ScrollLabel(MainWindow)
        self.gridLayout.addWidget(self.label, 8, 0, 1, 2)

        self.showHistoryButton.setText("Show history")
        self.showHistoryButton.close()

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "ProbDice"))
        self.generateButton.setText(_translate("MainWindow", "Throw the dice"))
        self.numFacesLabel.setText(_translate("MainWindow", "Number of faces"))
        self.clearButton.setText(_translate("MainWindow", "Reset"))
        self.timesLabel.setText(_translate("MainWindow", "Times"))

    def showHistory(self):

        self.label.setText(self.history)
        self.label.show()

    def sliderD(self):
        self.sliderLabel.setText("Number of dice thrown at once: " +
                                 str(self.sp.value()))

    def generate(self):

        if not (self.times.hasAcceptableInput()
                and self.numFaces.hasAcceptableInput()):
            self.label_3.setText("You can only enter integers greater than 0")
            self.label_3.setStyleSheet("color: red;")
        else:

            i = 0
            j = 0
            # Since times.text() is always greater or equal than 1, num, always has a value
            while i < int(self.times.text()):
                num = 0
                while j < self.sp.value():
                    num += random.randint(1, int(self.numFaces.text()))
                    j = j + 1
                self.history.append(num)
                j = 0
                i = i + 1

            self.label_3.setStyleSheet("color: black;")
            self.label_3.setText("Last random number:  " + str(num))
            self.plot()

            if len(self.history) < 100000:
                self.showHistory()
            else:
                self.label.setTextW(
                    "For large data sets it may take some time to generate the history, (the histogram is always updated)"
                )
                self.label.show()
                self.showHistoryButton.show()

    def reset(self):
        self.label_3.setStyleSheet("color: black;")
        self.history.clear()
        self.label_3.setText("Last random number:  - ")
        self.figure.clear()
        self.canvas.draw()
        self.label.clear()
        self.showHistoryButton.hide()

    def plot(self):
        self.figure.clear()
        self.figure.add_subplot()
        pyplot.hist(
            self.history,
            bins=np.arange(1,
                           int(self.numFaces.text()) * self.sp.value() + 2) -
            0.5,
            ec="w",
            weights=np.ones(len(self.history)) / len(self.history))
        pyplot.gca().yaxis.set_major_formatter(PercentFormatter(1))
        self.canvas.draw()

    def load(self):
        try:
            self.history = interactFiles.load(self.history)
            self.showHistoryButton.show()
            self.plot()
        except:
            self.label_3.setText(
                "The file selected has not the proper format or data")
            self.label_3.setStyleSheet("color: red;")
            self.label.setTextW(
                "In the file there can only be numbers, they can be placed with a space between them (1 2 3), with commas (1,2,3) or (1, 2, 3) or place a number per line"
            )
            self.label.show()

    def save(self):
        try:
            interactFiles.save(self.history)
            self.label_3.setText("The file has been saved correctly")
            self.label_3.setStyleSheet("color: black;")
        except:
            self.label_3.setText("The file has not been saved correctly")
            self.label_3.setStyleSheet("color: red;")
예제 #24
0
class MusicPlayingPage(PageBase):
    class zoneListener(ZoneListener):
        def __init__(self, owner):
            super().__init__(owner)

        def on_selected_zone_changed(self):
            if self.owner.pageInView == True:
                self.owner.on_Page_Entered_View(None)

        def on_zone_transport_change_event(self, event):
            if self.owner.pageInView == True:
                self.owner.on_zone_transport_change_event(event)

        def on_zone_render_change_event(self, event):
            pass

        def on_zone_queue_update_begin(self):
            pass

        def on_zone_queue_update_end(self):
            pass

        def on_current_track_update_state(self, trackInfo):
            self.owner.on_current_track_update_state(trackInfo)

    def close_play_mode_dialog(self):
        self.playModeDialog.destroy()
        self.playModeDialog = None

    def handlePlayModeResponse(self):
        response = self.playModeDialog.get_response()
        self.close_play_mode_dialog()
        zone = self.topLevel.get_selected_zone()
        if zone is not None:
            if response == PlayModeDialog.Choice.PLAY_NORMAL:
                zone.play_mode('NORMAL')
            elif response == PlayModeDialog.Choice.PLAY_SHUFFLE:
                zone.play_mode('SHUFFLE')
            elif response == PlayModeDialog.Choice.PLAY_REPEAT:
                zone.play_mode('REPEAT_ALL')
            elif response == PlayModeDialog.Choice.PLAY_SHUFFLE_REPEAT:
                zone.play_mode('SHUFFLE_NOREPEAT')
            elif response == PlayModeDialog.Choice.CROSSFADE:
                zone.cross_fade(True if self.crossFadeMode == '0' else False)

    def on_zoneButton_Clicked(self):
        # Close all open dialogs.
        if self.playModeDialog is not None:
            self.close_play_mode_dialog()
        super().on_zoneButton_Clicked()

    def on_Page_Entered_View(self, SelectedZone):
        super().on_Page_Entered_View(SelectedZone)
        # Update the page when it shows up with
        # the latest information.
        if self.selectedZone is not None:
            self.on_zone_transport_change_event(
                self.selectedZone.get_current_transport_info())
            trackInfo = self.selectedZone.get_current_track_info()
            self.set_current_track_details(trackInfo)
            self.set_album_art(trackInfo)
        print("Music playing view")

        # get uri and metadata of what's playing
        media_info = self.selectedZone.sonos.avTransport.GetMediaInfo(
            [('InstanceID', 0)]
        )  #this uses SoCo to access the underlying UPNP calls which gets AV data which s different to s.get_current_track_info()
        #uri = media_info['CurrentURI']
        metadata = media_info['CurrentURIMetaData']
        #
        ## later you can play this station by:
        #s.play_uri(uri=uri, meta=metadata)

    def on_Page_Exit_View(self):
        super().on_Page_Exit_View()
        # Stop all timeouts
        for label in self.scrollLabels:
            label.stop()

    def on_Button_A_Clicked(self):
        if self.playModeDialog is None:
            self.playModeDialog = PlayModeDialog(self)
            self.playModeDialog.set_decorated(False)
        else:
            self.handlePlayModeResponse()

    def on_Button_B_Clicked(self):
        pass

    def on_Button_C_Clicked(self):
        if self.playModeDialog is not None:
            self.close_play_mode_dialog()
        self.topLevel.show_queue_page()

    def on_Return_Button_Clicked(self):
        if self.playModeDialog is None:
            self.topLevel.show_page("MusicPage")
        else:
            self.close_play_mode_dialog()

    # The scroll wheel
    def on_Scroll_Up(self):
        if self.playModeDialog is not None:
            self.playModeDialog.on_Scroll_Up()

    def on_Scroll_Down(self):
        if self.playModeDialog is not None:
            self.playModeDialog.on_Scroll_Down()

    def on_Button_Ok_Clicked(self):
        if self.playModeDialog is None:
            self.topLevel.show_page("MusicAlbumArtPage")
        else:
            self.handlePlayModeResponse()

    def set_album_art(self, data):
        artUri = ""
        if 'album_art_uri' in data:
            artUri = data['album_art_uri']
        elif 'album_art' in data:
            artUri = data['album_art']

        if artUri != "":
            self.albumArtUri = self.topLevel.get_selected_zone(
            ).sonos.music_library.build_album_art_full_uri(artUri)
            response = requests.get(self.albumArtUri)
            if response.status_code == 200:
                im = Image(None)
                im.SetFromStream(response.content)
                self.albumArtImage.set_from_pixbuf(im.Scale(128, 128))
        else:
            self.albumArtImage.set_from_pixbuf(
                imageManager.get_pixbuf('noArt'))

    def set_current_track_details(self, data):
        string = ""  #GLib.markup_escape_text(data['title'])
        self.trackNameLabel.set_markup(data['title'])
        if 'creator' in data:
            string = data[
                'creator']  # GLib.markup_escape_text(data['creator'])
        elif 'artist' in data:
            string = data['artist']
            #string = GLib.markup_escape_text(data['artist'])

        #self.artistsNameLabel.set_markup("<b>" + string + "</b>")
        self.artistsNameLabel.set_markup(string)

        #string = GLib.markup_escape_text(data['album'])
        #self.albumNameLabel.set_markup("<b>" + string + "</b>")
        self.albumNameLabel.set_markup(data['album'])

        if 'duration' in data and 'position' in data:
            self.on_current_track_update_state(data)

    def on_zone_transport_change_event(self, event):
        mutex.acquire()

        try:
            if hasattr(event, 'variables'):
                varDict = event.variables
            else:
                varDict = event

            if 'current_play_mode' in varDict:
                currentPlayMode = varDict['current_play_mode']
                if currentPlayMode == 'SHUFFLE_NOREPEAT':
                    self.playModeRepeatImage.clear()
                    self.playModeShuffleImage.set_from_pixbuf(
                        imageManager.get_pixbuf('shuffle'))
                elif currentPlayMode == 'REPEAT_ALL':
                    self.playModeRepeatImage.set_from_pixbuf(
                        imageManager.get_pixbuf('repeat'))
                    self.playModeShuffleImage.clear()
                elif currentPlayMode == 'NORMAL':
                    self.playModeRepeatImage.clear()
                    self.playModeShuffleImage.clear()
                elif currentPlayMode == 'SHUFFLE':  # shuffle and repeat
                    self.playModeRepeatImage.set_from_pixbuf(
                        imageManager.get_pixbuf('repeat'))
                    self.playModeShuffleImage.set_from_pixbuf(
                        imageManager.get_pixbuf('suffle'))

            if 'transport_state' in varDict:
                xportState = varDict['transport_state']
                if xportState == 'PAUSED_PLAYBACK':
                    self.xportStateImage.set_from_pixbuf(
                        imageManager.get_pixbuf('pause'))
                elif xportState == 'TRANSITIONING':
                    self.xportStateImage.set_from_pixbuf(
                        imageManager.get_pixbuf('transition'))
                elif xportState == 'PLAYING':
                    self.xportStateImage.set_from_pixbuf(
                        imageManager.get_pixbuf('play'))
                elif xportState == 'STOPPED':
                    self.xportStateImage.set_from_pixbuf(
                        imageManager.get_pixbuf('stop'))
                    self.trackProgressBar.set_fraction(0.0)
                    self.trackProgressTimeLabel.set_text("--:--/--:--")
                else:
                    self.xportStateImage.set_from_pixbuf(
                        imageManager.get_pixbuf('shrug'))

            if 'current_crossfade_mode' in varDict:
                self.crossFadeMode = varDict['current_crossfade_mode']
                if self.crossFadeMode == '1':
                    self.crossFadeImage.set_from_pixbuf(
                        imageManager.get_pixbuf('crossFade'))
                else:
                    self.crossFadeImage.clear()

            if 'next_track_meta_data' in varDict:
                nextTrackMetaData = varDict['next_track_meta_data']
                if nextTrackMetaData is not '':
                    nextTrackMetaData = nextTrackMetaData.to_dict()
                    nextTrackTitle = GLib.markup_escape_text(
                        nextTrackMetaData['title'])
                    nextTrackArtist = GLib.markup_escape_text(
                        nextTrackMetaData['creator'])
                    #string = "<b>{0} - {1}</b>"
                    string = "{0} - {1}"
                    self.nextTrackLabel.set_text("Next: ")
                    string = string.format(nextTrackTitle, nextTrackArtist)
                    self.nextTrackNameLabel.set_markup(string)
                else:
                    self.nextTrackLabel.set_text("")
                    self.nextTrackNameLabel.set_text("")

            if 'current_track' in varDict and 'number_of_tracks' in varDict:
                currentTrack = varDict['current_track']
                numberOfTracks = varDict['number_of_tracks']
                string = "Track [{0}/{1}]"
                self.trackNumberLabel.set_text(
                    string.format(currentTrack, numberOfTracks))

                self.inQueueLabel.set_text("In Queue: ")
                string = "<b>{0}</b>"
                self.inQueueCountLabel.set_markup(
                    string.format(numberOfTracks))
            else:
                self.trackNumberLabel.set_text("Track")
                self.inQueueLabel.set_text("")
                self.inQueueCountLabel.set_text("")

            if 'current_track_meta_data' in varDict:
                currentTrackMetaData = varDict['current_track_meta_data']
                if currentTrackMetaData is not '':
                    currentTrackMetaData = currentTrackMetaData.to_dict()
                    self.set_current_track_details(currentTrackMetaData)

                    self.trackProgressBar.show()
                    self.trackProgressTimeLabel.show()

                    if self.topLevel.get_selected_zone() is not None:
                        self.set_album_art(currentTrackMetaData)
                    else:
                        #Display the blank album art image
                        self.albumArtImage.set_from_pixbuf(
                            imageManager.get_pixbuf('noArt'))
                else:
                    self.trackNameLabel.set_markup("<b>[no music]</b>")
                    self.artistsNameLabel.set_text("")
                    self.albumNameLabel.set_text("")
                    self.albumArtImage.set_from_pixbuf(
                        imageManager.get_pixbuf('noArt'))
                    self.trackProgressBar.hide()
                    self.trackProgressTimeLabel.hide()
        finally:
            mutex.release()

    def on_current_track_update_state(self, trackInfo):
        mutex.acquire()
        try:
            # grab the values from the current track
            # state and update the gui
            if isinstance(trackInfo, dict):
                trackPos = trackInfo['position'].split(':')
                trackLen = trackInfo['duration'].split(':')
                try:
                    tpH = int(trackPos[0])
                    tpM = int(trackPos[1])
                    tpS = int(trackPos[2])

                    tlH = int(trackLen[0])
                    tlM = int(trackLen[1])
                    tlS = int(trackLen[2])

                    trackProg = float((tpH * 24) + (tpM * 60) + tpS)
                    trackDur = float((tlH * 24) + (tlM * 60) + tlS)

                    tpos = ((trackPos[0] + ":") if tpH > 0 else
                            "") + trackPos[1] + ":" + trackPos[2]
                    tdur = ((trackLen[0] + ":") if tlH > 0 else
                            "") + trackLen[1] + ":" + trackLen[2]

                    if trackDur > 0.0:
                        self.trackProgressBar.set_fraction(trackProg /
                                                           trackDur)
                        self.trackProgressTimeLabel.set_text(tpos + "/" + tdur)
                    else:
                        self.trackProgressTimeLabel.set_text("")
                except ValueError:
                    self.trackProgressTimeLabel.set_text("")

        finally:
            mutex.release()

    def title(self):
        self.titleLabel = Gtk.Label("Now Playing")
        return (self.titleLabel)

    def scrolledWindow(self):
        topVbox = Gtk.VBox()

        stateHBox = Gtk.HBox()
        self.xportStateImage = Gtk.Image()
        self.xportStateImage.set_from_pixbuf(
            imageManager.get_image('stop').Scale(16, 16))
        stateHBox.pack_start(self.xportStateImage, False, False, 5)
        xportStateLabel = Gtk.Label()
        xportStateLabel.set_markup("<span size=\"15000\">Now Playing</span>")
        xportStateLabel.set_alignment(0.0, 0.5)
        stateHBox.pack_start(xportStateLabel, True, True, 5)
        self.crossFadeImage = Gtk.Image()
        self.crossFadeImage.set_from_pixbuf(
            imageManager.get_pixbuf('crossFade'))
        stateHBox.pack_start(self.crossFadeImage, False, False, 5)
        self.playModeShuffleImage = Gtk.Image()
        self.playModeShuffleImage.set_from_pixbuf(
            imageManager.get_pixbuf('shuffle'))
        stateHBox.pack_start(self.playModeShuffleImage, False, False, 5)
        self.playModeRepeatImage = Gtk.Image()
        self.playModeRepeatImage.set_from_pixbuf(
            imageManager.get_pixbuf('repeat'))
        stateHBox.pack_start(self.playModeRepeatImage, False, False, 5)
        topVbox.pack_start(stateHBox, False, False, 0)

        detailHBox = Gtk.HBox()
        self.albumArtImage = Gtk.Image()
        self.albumArtImage.set_from_pixbuf(imageManager.get_pixbuf('noArt'))
        detailHBox.pack_start(self.albumArtImage, False, False, 5)

        detailVBox = Gtk.VBox()

        self.trackNumberLabel = Gtk.Label("Track [x/y]")
        self.trackNumberLabel.set_alignment(0.0, 0.5)
        detailVBox.pack_start(self.trackNumberLabel, True, False, 0)

        mf = "<b>{0}</b>"
        self.trackNameLabel = ScrollLabel(1)  #Gtk.Label()
        #self.trackNameLabel.set_markup("<span weight=\"bold\">Track Name Goes Here In Bold</span>")
        self.trackNameLabel.set_markup("Track Name Goes Here In Bold")
        self.trackNameLabel.set_ellipsize(Pango.EllipsizeMode.END)
        self.trackNameLabel.set_alignment(0.0, 0.5)
        self.trackNameLabel.assign_markup(mf)
        self.scrollLabels.append(self.trackNameLabel)
        detailVBox.pack_start(self.trackNameLabel, True, False, 0)

        self.trackProgressBar = Gtk.ProgressBar()
        detailVBox.pack_start(self.trackProgressBar, True, False, 0)

        self.trackProgressTimeLabel = Gtk.Label("--:--/--:--")
        self.trackProgressTimeLabel.set_alignment(1.0, 0.5)
        detailVBox.pack_start(self.trackProgressTimeLabel, True, False, 0)

        artistsLabel = Gtk.Label("Artists")
        artistsLabel.set_alignment(0.0, 0.5)
        detailVBox.pack_start(artistsLabel, True, False, 0)

        self.artistsNameLabel = ScrollLabel(1)  #Gtk.Label()
        self.artistsNameLabel.set_markup("Artist Name Goes Here")
        self.artistsNameLabel.set_ellipsize(Pango.EllipsizeMode.END)
        self.artistsNameLabel.set_alignment(0.0, 0.5)
        self.artistsNameLabel.assign_markup(mf)
        self.scrollLabels.append(self.artistsNameLabel)
        detailVBox.pack_start(self.artistsNameLabel, True, False, 0)

        separatorLine = Gtk.Image()
        separatorLine.set_from_pixbuf(imageManager.get_pixbuf('separator'))
        detailVBox.pack_start(separatorLine, True, False, 0)

        albumsLabel = Gtk.Label("Albums")
        albumsLabel.set_alignment(0.0, 0.5)
        detailVBox.pack_start(albumsLabel, True, False, 0)

        self.albumNameLabel = ScrollLabel(1)  #Gtk.Label()
        self.albumNameLabel.set_markup("Album Name Goes Here")
        self.albumNameLabel.set_ellipsize(Pango.EllipsizeMode.END)
        self.albumNameLabel.set_alignment(0.0, 0.5)
        self.albumNameLabel.assign_markup(mf)
        self.scrollLabels.append(self.albumNameLabel)
        detailVBox.pack_start(self.albumNameLabel, True, False, 0)

        detailHBox.pack_start(detailVBox, True, True, 5)

        topVbox.pack_start(detailHBox, True, True, 2)

        return (topVbox)

    def status(self):
        bottomHBox = Gtk.HBox()

        self.nextTrackLabel = Gtk.Label("Next: ")
        bottomHBox.pack_start(self.nextTrackLabel, False, False, 0)

        self.nextTrackNameLabel = ScrollLabel(1)  #Gtk.Label()
        self.nextTrackNameLabel.set_markup("Track Name - Artist Name")
        self.nextTrackNameLabel.assign_markup("<b>{0}</b>")
        self.nextTrackNameLabel.set_max_width_chars(21)
        self.nextTrackNameLabel.set_ellipsize(Pango.EllipsizeMode.END)
        self.scrollLabels.append(self.nextTrackNameLabel)
        bottomHBox.pack_start(self.nextTrackNameLabel, True, True, 0)

        queueImage = Gtk.Image()
        queueImage.set_from_pixbuf(
            imageManager.get_image('queue').Scale(16, 16))
        bottomHBox.pack_start(queueImage, False, False, 2)

        self.inQueueLabel = Gtk.Label("In Queue: ")
        bottomHBox.pack_start(self.inQueueLabel, False, False, 0)

        self.inQueueCountLabel = Gtk.Label()
        self.inQueueCountLabel.set_markup("<b>##</b>")
        self.inQueueCountLabel.set_ellipsize(Pango.EllipsizeMode.END)
        bottomHBox.pack_start(self.inQueueCountLabel, False, False, 0)

        return bottomHBox

    def footer(self):
        grid = Gtk.Grid()
        l = Gtk.Label("Play Mode")
        l.set_hexpand(True)
        l.set_size_request(100, -1)
        grid.add(l)
        l = Gtk.Label(" ")
        l.set_hexpand(True)
        l.set_size_request(100, -1)
        grid.attach(l, 1, 0, 1, 1)
        l = Gtk.Label("View Queue")
        l.set_hexpand(True)
        l.set_size_request(100, -1)
        grid.attach(l, 2, 0, 1, 1)
        return grid

    def __init__(self, topLevel):
        self.scrollLabels = []
        super().__init__(topLevel)
        self.crossFadeMode = '0'
        self.playModeDialog = None
        self.zlistener = self.zoneListener(self)
        self.topLevel.add_zone_listener(self.__class__.__name__,
                                        self.zlistener)
예제 #25
0
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

        index = ruffier_index(p1, p2, p3)
        self.l = ScrollLabel(ltext="")
        self.add_widget(self.l)
예제 #26
0
class MusicAlbumArtPage(PageBase):
    class zoneListener(ZoneListener):
        def __init__(self, owner):
            super().__init__(owner)

        def on_selected_zone_changed(self):
            if self.owner.pageInView == True:
                self.owner.on_Page_Entered_View(None)

        def on_zone_transport_change_event(self, event):
            if self.owner.pageInView == True:
                self.owner.on_zone_transport_change_event(event)

        def on_zone_render_change_event(self, event):
            pass

        def on_zone_queue_update_begin(self):
            pass

        def on_zone_queue_update_end(self):
            pass

        def on_current_track_update_state(self, trackInfo):
            pass

    def on_Page_Entered_View(self, SelectedZone):
        super().on_Page_Entered_View(SelectedZone)
        if self.selectedZone is not None:
            self.on_zone_transport_change_event(
                self.selectedZone.get_current_transport_info())
            self.on_current_track_update_state(
                self.selectedZone.get_current_track_info())
        print("Album art in view")

    def on_current_track_update_state(self, trackInfo):
        mutex.acquire()

        try:
            if isinstance(trackInfo, dict):
                self.set_album_art(trackInfo)

                if trackInfo['artist'] == "" or trackInfo["title"] == "":
                    self.musicLabel.set_markup("[no music]")
                    #self.musicLabel.set_markup("<span size=\"12000\"><b>[no music]</b></span>")
                else:
                    #music = GLib.markup_escape_text(trackInfo['title'] + " - " + trackInfo['artist'])
                    #self.musicLabel.set_markup("<span size=\"12000\"><b>" + music + "</b></span>")
                    music = (trackInfo['title'] + " - " + trackInfo['artist'])
                    self.musicLabel.set_markup(music)

        finally:
            mutex.release()

    def set_album_art(self, data):
        artUri = ""
        if 'album_art_uri' in data:
            artUri = data['album_art_uri']
        elif 'album_art' in data:
            artUri = data['album_art']

        if artUri != "":
            self.albumArtUri = self.topLevel.get_selected_zone(
            ).sonos.music_library.build_album_art_full_uri(artUri)
            response = requests.get(self.albumArtUri)
            if response.status_code == 200:
                im = Image(None)
                im.SetFromStream(response.content)
                self.albumArtImage.set_from_pixbuf(im.Scale(250, 250))
        else:
            self.albumArtImage.set_from_pixbuf(
                imageManager.get_image('noArt').Scale(250, 250))

    def on_zone_transport_change_event(self, event):
        mutex.acquire()

        try:
            if hasattr(event, 'variables'):
                varDict = event.variables
            else:
                varDict = event

            if 'current_track_meta_data' in varDict:
                currentTrackMetaData = varDict['current_track_meta_data']
                if currentTrackMetaData is not '':
                    currentTrackMetaData = currentTrackMetaData.to_dict()
                    #music = GLib.markup_escape_text(currentTrackMetaData['title'] + " - " + currentTrackMetaData['creator'])
                    #self.musicLabel.set_markup("<span size=\"12000\"><b>" + music + "</b></span>")
                    music = (currentTrackMetaData['title'] + " - " +
                             currentTrackMetaData['creator'])
                    self.musicLabel.set_markup(music)

                    #if self.topLevel.get_selected_zone() is not None and 'album_art_uri' in currentTrackMetaData:
                    if self.topLevel.get_selected_zone() is not None:
                        self.set_album_art(currentTrackMetaData)
                    else:
                        #self.albumArtImage.set_from_file('./images/NoAlbumArt.jpg')
                        self.albumArtImage.set_from_file(
                            './images/AlbumArtEmpty.jpg')
                        pixbuf = self.albumArtImage.get_pixbuf().scale_simple(
                            250, 250, GdkPixbuf.InterpType.BILINEAR)
                        self.albumArtImage.set_from_pixbuf(pixbuf)
                else:
                    #self.musicLabel.set_markup("<span size=\"12000\"><b>[no music]</b></span>")
                    self.musicLabel.set_markup("[no music]")
                    self.albumArtImage.set_from_file(
                        './images/AlbumArtEmpty.jpg')
                    pixbuf = self.albumArtImage.get_pixbuf().scale_simple(
                        250, 250, GdkPixbuf.InterpType.BILINEAR)
                    self.albumArtImage.set_from_pixbuf(pixbuf)
        finally:
            mutex.release()

    def on_Button_A_Clicked(self):
        pass

    def on_Button_B_Clicked(self):
        pass

    def on_Button_C_Clicked(self):
        pass

    def on_Return_Button_Clicked(self):
        self.topLevel.show_page("MusicPlayingPage")

    # The scroll wheel
    def on_Scroll_Up(self):
        pass

    def on_Scroll_Down(self):
        pass

    def on_Button_Ok_Clicked(self):
        self.topLevel.show_page("MusicPlayingPage")

    def title(self):
        #self.titleLabel = Gtk.Label("Now Playing (Album Art)")
        return (Gtk.VBox())

    def scrolledWindow(self):
        vbox = Gtk.VBox()

        self.albumArtImage = Gtk.Image()
        self.albumArtImage.set_from_file('./images/AlbumArtEmpty.jpg')
        pixbuf = self.albumArtImage.get_pixbuf().scale_simple(
            250, 250, GdkPixbuf.InterpType.BILINEAR)
        self.albumArtImage.set_from_pixbuf(pixbuf)
        self.albumArtImage.show()
        vbox.pack_start(self.albumArtImage, True, True, 5)

        self.musicLabel = ScrollLabel(1)  #Gtk.Label()
        music = "[no music]"
        #self.musicLabel.set_markup("<span size=\"12000\"><b>" + music + "</b></span>")
        self.musicLabel.assign_markup(
            "<span size=\"12000\"><b> {0} </b></span>")
        self.musicLabel.set_markup(music)
        self.musicLabel.set_max_width_chars(25)
        self.musicLabel.set_ellipsize(Pango.EllipsizeMode.END)
        vbox.pack_start(self.musicLabel, False, False, 0)

        return (vbox)

    def status(self):
        pass

    def footer(self):
        return Gtk.VBox()

    def __init__(self, topLevel):
        super().__init__(topLevel)
        self.zlistener = self.zoneListener(self)
        self.topLevel.add_zone_listener(self.__class__.__name__,
                                        self.zlistener)