Example #1
0
    def active(self, holder):
        super().active(holder)

        if self._config.has_ups_lite:
            self._list = [
                '电池电压:{:.2f}V'.format(self._voltage),
                '电池容量:{:.0f}%'.format(self._capacity), 'hengying', '2021/1',
                '关机'
            ]
            return ListControl(holder, self.title, self._list)
        else:
            self._list = ['hengying', '2021/1', '关机']
            return ListControl(holder, self.title, self._list)
Example #2
0
 def handle_event(self, event):
     super().handle_event(event)
     if type(event) == ServerConnected:
         print('server connect!')
         self._client = event.client
         self._client.subscribe(MUSIC_REPLY_TOPIC_SUBSCRIBE)
     elif type(event) == MessageReceived:
         if event.msg.topic == MUSIC_TOPIC_ROOT + 'list_music/reply':
             if self._holder is not None:
                 payload = event.msg.payload.decode('UTF-8')
                 print('music list: ', payload)
                 client_id, music_list_str = payload.split(':', 1)
                 if client_id == self._holder.client_id:
                     self._music_list = music_list_str.split(',')
                     self._music_list_ctrl = ListControl(self._holder, self.title + '/'+ MUSIC_LIST,
                                self._music_list)
                     # 子系统不在激活状态,不要弹出 layer!
                     if self._holder.is_actived(self.title):
                         self._holder.add_layer(self._music_list_ctrl)
     elif type(event) == ListItemSelected:
         if event.list_name == self.title:
             if event.item_index == 0:
                 self._client.publish(MUSIC_TOPIC_ROOT + 'play_random_one', payload='', qos=1)
             elif event.item_index == 1:
                 self._client.publish(MUSIC_TOPIC_ROOT + 'list_music', payload=self._holder.client_id, qos=1)
             elif event.item_index == 2:
                 self._client.publish(MUSIC_TOPIC_ROOT + 'stop', payload='', qos=1)
         elif event.list_name == self.title + '/'+ MUSIC_LIST:
             music_name = self._music_list[event.item_index]
             self._client.publish(MUSIC_TOPIC_ROOT + 'play', payload=music_name, qos=1)
     if type(event) == ListBack:
         if event.list_name == self.title:
             self._holder.add_event(PopLayer(1))
         elif event.list_name == self.title + '/'+ MUSIC_LIST:
             self._holder.add_event(PopLayer(1))
Example #3
0
	def __init__(self):

		#initialize settings, check if user and lists files already exist
		self.settings = Settings()
		self.settings._file_check_username()
		self.settings._file_check_lists()

		#initialize list control options
		self.control = ListControl()

		#set the first key to be the active list by default
		self.active_list = next(iter(self.settings.lists))
		#Capitalize the list name for output to the console
		self.display_active_list = self.active_list.title()
		#Set the key in the dictionary to which changes should be made
		self.current_key = self.settings.lists[self.active_list]
Example #4
0
 def active(self, holder):
     super().active(holder)
     return ListControl(holder, self.title,
                        ['随机播放一首', '音乐列表', '停止'])
Example #5
0
 def active(self, holder):
     super().active(holder)
     return ListControl(holder, self.title, self._subsystems_name_list)
Example #6
0
class MyList:
	"""A class for multiple lists through which you can navigate"""
	def __init__(self):

		#initialize settings, check if user and lists files already exist
		self.settings = Settings()
		self.settings._file_check_username()
		self.settings._file_check_lists()

		#initialize list control options
		self.control = ListControl()

		#set the first key to be the active list by default
		self.active_list = next(iter(self.settings.lists))
		#Capitalize the list name for output to the console
		self.display_active_list = self.active_list.title()
		#Set the key in the dictionary to which changes should be made
		self.current_key = self.settings.lists[self.active_list]


	def _check_if_list_empty(self):
		"""Helper method to check if a list is empty or not"""

		if self.current_key:
			return True
		else:
			return False


	def _show_lists_by_number(self):
		"""Convert dictionary keys into list and access them by key"""
		print('')
		
		for i in range(0, len(self.settings.lists)):
			print(f"\t{i+1} : {list(self.settings.lists.keys())[i].title()}")

		print('')


	def _print_current_list(self):
		"""Output the current contents of the list"""

		if len(self.current_key) == 0:
			print("\n\tYour list is currently empty!")
		else:
			print("\nYour list so far: \n")
			for item in self.current_key:
				print(f"\t- {item}")

		print('')


	def change_active_list(self):
		"""Set active list to work with"""
		print("\nWhich list should be your active list?")
		print("Type in 'q' to go back.\n")

		self._show_lists_by_number()

		print('')

		prompt = input("Please enter the number of the list: ")

		while True:
			if prompt != 'q' or prompt != 'quit':		
				try:
					prompt = int(prompt)
					self.active_list = list(self.settings.lists.keys())[prompt-1]
				except ValueError:
					print("Please enter a valid list number!\n")
					break
				else:
					self.display_active_list = self.active_list.title()
					self.current_key = self.settings.lists[self.active_list] 
					print(f"Your active list has been changed to {self.display_active_list}.\n")
					break
			else:
				break


	def run_program(self):
		"""
			Starting point for program
			Display a menu with choices
		"""

		while True:
			print(f"Active List: {self.display_active_list}\n")

			menu = {
				'1' : "Change the active list",
				'2' : "Show current lists",
				's' : "Show items in active list",
				'a' : "Add an item to the active list",
				'd' : "Remove an item from the active list",
				'c' : "Delete the contents of the active list",
				'n' : "Create a new list",
				'r' : "Rename a list",
				'x' : "Delete an entire list",
				'q' : "Quit",
			}

			for key, value in menu.items():
				print(f"\t'{key}' : {value}")

			prompt = input("\nPlease enter your choice: ")

			try:
				prompt in menu.keys()
			except:
				print("Please enter a valid command!")
			else:
				if prompt == '1':
					self.change_active_list()
				elif prompt == '2':
					self._show_lists_by_number()
				elif prompt == 's':
					self._print_current_list()
				elif prompt == 'a':
					self.control.add_item_to_list()
				elif prompt == 'd':
					self.control.remove_item_from_list()
				elif prompt == 'n':
					self.control.add_new_list()
				elif prompt == 'r':
					self.control.rename_list()
				elif prompt == 'c':
					self.control.clear_list()
				elif prompt == 'x':
					self.control.delete_list()
				elif prompt == 'q':
					self.settings.save_to_file()
					print("Your changes have been saved for the next time you come back!")
					break
				else:
					print("Please enter a valid command!")
Example #7
0
 def handle_event(self, event):
     super().handle_event(event)
     if type(event) == ServerConnected:
         print('server connect!')
         self._client = event.client
         self._client.subscribe(ALARM_REPLY_TOPIC_SUBSCRIBE)
     elif type(event) == MessageReceived:
         if event.msg.topic == ALARM_TOPIC_ROOT + 'list_alarm/reply':
             if self._holder is not None:
                 payload = event.msg.payload.decode('UTF-8')
                 print('alarm list: ', payload)
                 client_id, alarm_list_str = payload.split(':', 1)
                 if client_id == self._holder.client_id:
                     self._alarm_list = alarm_list_str.split(',')
                     self._alarm_list_ctrl = ListControl(self._holder, self.title + '/'+ ALARM_LIST,
                                self._alarm_list)
                     # 子系统不在激活状态,不要弹出 layer!
                     if self._holder.is_actived(self.title):
                         self._holder.add_layer(self._alarm_list_ctrl)
     elif type(event) == ListItemSelected:
         if event.list_name == self.title:
             if event.item_index == 0:
                 self._client.publish(ALARM_TOPIC_ROOT + 'list_alarm', payload=self._holder.client_id, qos=1)
             elif event.item_index == 1:
                 hour_list = ['{:02d}:'.format(i) for i in range(24)]
                 hour_ctrl = ListControl(self._holder, self.title + '/' + ALARM_ADD_HOUR_LIST, hour_list)
                 self._holder.add_layer(hour_ctrl)
             elif event.item_index == 2:
                 self._client.publish(ALARM_TOPIC_ROOT + 'stop', payload='', qos=1)
         elif event.list_name == self.title + '/'+ ALARM_LIST:
             alarm = self._alarm_list[event.item_index]
             if alarm == '':
                 return
             alarm_opt_list = []
             if len(alarm) > 5:
                 self._current_alarm_enabled = False
                 alarm_opt_list = ['启用', '删除']
             else:
                 self._current_alarm_enabled = True
                 alarm_opt_list = ['停用', '删除']
             self._current_alarm = alarm[:5]
             alarm_opt_ctrl = ListControl(self._holder, self.title + '/' + ALARM_OPT_LIST, alarm_opt_list)
             self._holder.add_layer(alarm_opt_ctrl)
         elif event.list_name == self.title + '/' + ALARM_ADD_HOUR_LIST:
             self._alarm_hour = event.item_index
             minute_list = ['{:02d}:{:02d}'.format(self._alarm_hour, i) for i in range(0, 60, 5)]
             minute_ctrl = ListControl(self._holder, self.title + '/' + ALARM_ADD_MINUTE_LIST, minute_list)
             self._holder.add_layer(minute_ctrl)
         elif event.list_name == self.title + '/' + ALARM_ADD_MINUTE_LIST:
             self._alarm_minute = event.item_index * 5
             self._client.publish(ALARM_TOPIC_ROOT + 'add',
                                  payload='{:02d}:{:02d}'.format(self._alarm_hour, self._alarm_minute), qos=1)
             self._client.publish(ALARM_TOPIC_ROOT + 'list_alarm', payload=self._holder.client_id, qos=1)
             self._holder.add_event(PopLayer(2))
         elif event.list_name == self.title + '/' + ALARM_OPT_LIST:
             if event.item_index == 0:
                 if self._current_alarm_enabled:
                     self._client.publish(ALARM_TOPIC_ROOT + 'disable', payload=self._current_alarm, qos=1)
                 else:
                     self._client.publish(ALARM_TOPIC_ROOT + 'enable', payload=self._current_alarm, qos=1)
             elif event.item_index == 1:
                 self._client.publish(ALARM_TOPIC_ROOT + 'delete', payload=self._current_alarm, qos=1)
             self._holder.add_event(PopLayer(2))
             # 如果 delete qos 为2,list_alarm qos为1,则list_alarm会在删除前返回,
             # 导致显示不正确。暂时都设置为 qos=1。
             self._client.publish(ALARM_TOPIC_ROOT + 'list_alarm', payload=self._holder.client_id, qos=1)
     if type(event) == ListBack:
         if event.list_name == self.title:
             self._holder.add_event(PopLayer(1))
         elif event.list_name == self.title + '/'+ ALARM_LIST:
             self._holder.add_event(PopLayer(1))
         elif event.list_name == self.title + '/'+ ALARM_ADD_HOUR_LIST:
             self._holder.add_event(PopLayer(1))
         elif event.list_name == self.title + '/'+ ALARM_ADD_MINUTE_LIST:
             self._holder.add_event(PopLayer(1))
         elif event.list_name == self.title + '/'+ ALARM_OPT_LIST:
             self._holder.add_event(PopLayer(1))
Example #8
0
 def active(self, holder):
     super().active(holder)
     return ListControl(holder, self.title,
                        ['闹铃列表', '添加闹铃', '停止闹铃'])