Exemple #1
0
		class Input(BoxLayout):
			"""
				The class represents a numeric input layout. It has an input text box and a title.
			"""
			
			def __init__(self, title, default_text="Text Here", orientation='vertical', multiline=False, max_length=None):
				"""
					Initialize the input layout.
				"""
				
				# Call the box layout initializer.
				super(GUI.Abstracts.Input, self).__init__(orientation=orientation)
				
				# Create the title.
				self.title = Label(text=title, pos_hint={'center_x': .5})
				
				# The default text when text input in empty.
				self.default_text = default_text
				
				# Create the text input.
				self.text_input = TextInput(size_hint=(.3, 3), pos_hint={'center_x': .5})
				
				# Align the text in the text input to center.
				self.text_input.bind(text=self.update_padding)
				self.text_input.bind(size=self.update_padding)
				self.text_input.bind(focus=self.on_focus)
				#self.text_input.bind(touch_up=self.on_touch_up)
	
				# Set the input text to be white.
				self.text_input.background_color = (0, 0, 0, 0)
				self.text_input.foreground_color = (1, 1, 1, 1)
				
				# Initialize the text input to center.
				self.update_padding()
				
				# Add the widgets to the layout.
				self.add_widget(self.title)
				self.add_widget(self.text_input)
				
				self.text_input.hint_text = self.default_text

			def update_padding(self, instance=None, value=None):
				"""
					Align the text to center.
				"""
				
				if not self.text_input.text:

					text_input_text = self.default_text
				
				else:
				
					text_input_text = self.text_input.text
				
				# Calculate the text width.
				text_width = self.text_input._get_text_width(text_input_text, self.text_input.tab_width, self.text_input._label_cached)

				# Update the text position to point on the center.
				self.text_input.padding_x = (self.text_input.width - text_width)/2
			
			def on_focus(self, instance, value=None):
				"""
					The function is being called when the user clicks the text input.
				"""
				
				if self.text_input.text == self.default_text:

					self.text_input.text_hint=""
					self.text = ""
					
			def on_touch_up(self, instance, value=None):
				"""
					The function is being called the text input in unfocused.
				"""
				
				# If text input is empty set its text to default text.
				if not self.text_input.text:
					self.text_input.text_hint = self.default_text
Exemple #2
0
class ChaleshApp(App):
    def build(self):
        self.bot = Chalesh()
        layout = FloatLayout()
        values = cleaning.find_one({"_id": chaleshID})['settings']
        # configure spinner object and add to layout
        self.spinnerObject = Spinner(text="Message Type", values=values)
        self.spinnerObject.size_hint = (0.3, 0.1)
        self.spinnerObject.pos_hint = {'x': .05, 'y': .8}
        layout.add_widget(self.spinnerObject)
        self.spinnerObject.bind(text=self.on_spinner_select)
        self.spinnerSelection = Label(text="%s" % self.spinnerObject.text)
        layout.add_widget(self.spinnerSelection)

        types = {'Count', 'Duration'}
        dropdown = DropDown()
        for index in types:
            btn = Button(text='%s' % index, size_hint_y=None, height=44)
            btn.bind(on_release=lambda btn: dropdown.select(btn.text))
            dropdown.add_widget(btn)

        self.mainbutton = Button(text='Deletion Types', size_hint=(.2, .1))
        self.mainbutton.pos_hint = {'x': 0.4, 'top': .9}
        self.mainbutton.bind(on_release=dropdown.open)
        dropdown.bind(
            on_select=lambda instance, x: setattr(self.mainbutton, 'text', x))
        layout.add_widget(self.mainbutton)

        self.periodtxt = TextInput()
        self.periodtxt.multiline = False
        self.periodtxt.pos_hint = {'x': 0.65, 'top': .9, 'height': .1}
        self.periodtxt.size_hint = (.1, .1)
        layout.add_widget(self.periodtxt)

        self.infotxt = TextInput()
        self.infotxt.multiline = True
        self.infotxt.pos_hint = {'x': 0.05, 'top': .75, 'height': .5}
        self.infotxt.size_hint = (.6, .5)
        self.infotxt.background_color = (0, 0, 1, 1)
        fontspath = os.environ['WINDIR'] + "\\Fonts\\"
        self.infotxt.font_name = fontspath + "\\arial"
        self.infotxt.font_size = 20
        self.infotxt.base_direction = "rtl"
        text_width = self.infotxt._get_text_width(self.infotxt.text,
                                                  self.infotxt.tab_width,
                                                  self.infotxt._label_cached)
        self.infotxt.padding_x = (self.infotxt.width - text_width) / 2
        layout.add_widget(self.infotxt)

        # self.tv = TreeViewLabel()
        # for val in values:
        #     self.tv.add_node(TreeViewLabel(text=val))
        #
        # self.tv.size_hint = (.5, .1)
        # self.tv.pos_hint = {'x': .65, 'top': .75}
        # layout.add_widget(self.tv)
        # add a label displaying the selection from the spinner
        # self.spinnerObject.text

        self.savebtn = Button(text="Save")
        self.savebtn.size_hint = (.15, .1)
        self.savebtn.pos_hint = {'x': .8, 'y': 0.8}
        layout.add_widget(self.savebtn)

        self.runbtn = Button(text="Start")
        self.runbtn.size_hint = (.15, .1)
        self.runbtn.pos_hint = {'x': .2, 'y': 0.1}
        layout.add_widget(self.runbtn)
        self.runbtn.bind(on_press=self.runBot)
        return layout

    def runBot(self, instance):
        if self.runbtn.text == 'Start':
            self.runbtn.text = 'Stop'
            self.bot.chaleshBot()
        else:
            self.runbtn.text = 'Start'
            self.bot.stopUpdater()
        return

        # call back for the selection in spinner object

    def on_spinner_select(self, spinner, text):
        self.spinnerSelection.text = "Selected value in spinner is: %s" % self.spinnerObject.text