Esempio n. 1
0
    def __init__(self, master):
        self.valves = self.get_valves()

        self.master = master
        self.master.configure(bg='sky blue')
        self.password = '******'

        self.momentary = Momentary(self.master, self.valves)
        self.edit = Edit(self.master, self.valves)
        self.summary = Summary(self.master, self.valves)
        self.preferences = Preferences(self.master, self.valves)
        self.run_screen = RunScreen(self.master, self.valves)

        self.header = self.make_header(self.master)
        self.home = self.home_page(self.master)
        self.frame = self.home
Esempio n. 2
0
 def returnBook(self, account):
     BookClass(self.__content).displayBook_Acc(account)
     if len(account[-2]) != 0:
         book = int(input('Which book do you want to return?'))
         account[-2].pop(book - 1)
         for i in self.__content:
             if account[book - 1] == i[0]:
                 Edit(i).editQty(str(int(i[2]) + 1))
Esempio n. 3
0
        def write(index):
            if index == -1:
                return
            [module_candidate_name, module_name] = resolvers[index]()

            settings = sublime.load_settings(SETTINGS)

            known_requires = settings.get('known_requires')
            module_candidate_name = known_requires.get(module_name,
                                                       module_candidate_name)

            if module_candidate_name.find("-") != -1:
                upperWords = [
                    word.capitalize()
                    for word in module_candidate_name.split("-")[1::]
                ]
                module_candidate_name = "".join(
                    module_candidate_name.split("-")[0:1] + upperWords)

            region_to_insert = self.view.sel()[0]

            line = self.view.substr(self.view.lines(region_to_insert)[0])
            line_is_empty = not line or line.isspace()

            clause_formats = {
                "source.js": {
                    True: settings.get('source_js_new_line'),
                    False: settings.get('source_js_existing_line')
                },
                "source.js.jsx": {
                    True: settings.get('source_js_new_line'),
                    False: settings.get('source_js_existing_line')
                },
                "source.coffee": {
                    True: settings.get('source_coffee_new_line'),
                    False: settings.get('source_coffee_existing_line')
                },
                "text.html.riot": {
                    True: settings.get('source_js_new_line'),
                    False: settings.get('source_js_existing_line')
                },
                "text.html.vue": {
                    True: settings.get('source_vue_new_line'),
                    False: settings.get('source_vue_existing_line')
                }
            }

            require_directive = clause_formats[current_lang][
                line_is_empty].format(module_candidate_name,
                                      get_path(module_name))

            with Edit(self.view) as edit:
                edit.insert(region_to_insert.a, require_directive)
Esempio n. 4
0
    def insert_class_reference(self, partial_name, original_file_extension,
                               spaces_number):
        region = self.view.sel()[0]

        # TODO correctly calculate spaces before new_region
        spaces = [' ' for x in range(spaces_number)]

        if original_file_extension == 'html':
            new_region = ''.join(
                spaces) + "<%= render '" + partial_name + "' %>"
        else:
            new_region = ''.join(spaces) + "= render '" + partial_name + "'"

        with Edit(self.view) as edit:
            edit.replace(region, new_region)
Esempio n. 5
0
    def __init__(self, master):
        self.valves = self.get_valves()

        self.master = master
        self.master.configure(bg='sky blue')
        self.password = '******'

        self.momentary = Momentary(self.master, self.valves)
        self.edit = Edit(self.master, self.valves)
        self.summary = Summary(self.master, self.valves)
        self.preferences = Preferences(self.master, self.valves)
        self.run_screen = RunScreen(self.master, self.valves)

        self.header = self.make_header(self.master)
        self.home = self.home_page(self.master)
        self.frame = self.home
Esempio n. 6
0
    def read_url_on_done(self, content, content_type):
        if content:
            window = sublime.active_window()
            view = window.new_file()
            with Edit(view) as edit:
                edit.insert(0, content)

            # TODO: convert to a dict and include in settings
            if content_type == 'text/html':
                view.settings().set('syntax', 'Packages/HTML/HTML.tmLanguage')
            elif content_type == 'text/css':
                view.settings().set('syntax', 'Packages/CSS/CSS.tmLanguage')
            elif content_type == 'text/javascript' or content_type == 'application/javascript' or content_type == 'application/x-javascript':
                view.settings().set('syntax', 'Packages/JavaScript/JavaScript.tmLanguage')
            elif content_type == 'application/json' or content_type == 'text/json':
                view.settings().set('syntax', 'Packages/JavaScript/JSON.tmLanguage')
            elif content_type == 'text/xml' or content_type == 'application/xml':
                view.settings().set('syntax', 'Packages/XML/XML.tmLanguage')
Esempio n. 7
0
 def borrowBook(self, account):
     book = input('Which book do you want to borrow?')
     for i in self.__content:
         if book.title() == i[0]:
             if int(i[-1]) > 0:
                 while True:
                     amt = int(input('How many book you want to borrow?'))
                     if amt > 0:
                         if amt <= int(i[-1]):
                             Edit(i).editQty(str(int(i[-1]) - amt))
                             for a in range(amt):
                                 account[-2].append(i[0])
                             print(
                                 'The book you have borrow is {0}.'.format(
                                     book.title()))
                             break
                         else:
                             print('Sorry, We only got {0}.'.format(i[-1]))
                     elif amt == 0:
                         continue
             else:
                 print('Book out off stock!')
Esempio n. 8
0
 def bookEdit(self):
     choose = input(
         'Please choose between\n[1] Edit Title\n[2] Edit Content\n[3] Edit Quantity\n'
     )
     if choose == '1':
         newTitle = input('Please input the Title Name! ')
         Edit.editTitle(self, newTitle)
     elif choose == '2':
         Edit.editContent(self)
     elif choose == '3':
         print('{0}\'s Quantity is {1}.'.format(self.__content[0],
                                                self.__content[-1]))
         while True:
             amt = input('Change the quantity to ')
             if amt.isdigit():
                 break
         Edit.editQty(self, amt)
        def write(index):
            if index == -1:
                return
            [module_candidate_name, module_rel_path] = resolvers[index]()

            if module_candidate_name.find("-") != -1:
                upperWords = [
                    word.capitalize()
                    for word in module_candidate_name.split("-")[1::]
                ]
                module_candidate_name = "".join(
                    module_candidate_name.split("-")[0:1] + upperWords)

            region_to_insert = self.view.sel()[0]

            line_is_empty = self.view.lines(region_to_insert)[0].empty()

            require_directive = clause_formats[current_lang][
                line_is_empty].format(module_candidate_name,
                                      get_path(module_rel_path))

            with Edit(self.view) as edit:
                edit.insert(region_to_insert.a, require_directive)
Esempio n. 10
0
class GUI:
    def __init__(self, master):
        self.valves = self.get_valves()

        self.master = master
        self.master.configure(bg='sky blue')
        self.password = '******'

        self.momentary = Momentary(self.master, self.valves)
        self.edit = Edit(self.master, self.valves)
        self.summary = Summary(self.master, self.valves)
        self.preferences = Preferences(self.master, self.valves)
        self.run_screen = RunScreen(self.master, self.valves)

        self.header = self.make_header(self.master)
        self.home = self.home_page(self.master)
        self.frame = self.home

    def make_header(self, master):
        header = Frame(master, bg='sky blue')

        self.label = StringVar()
        self.label.set('NONE')

        self.start_label = StringVar()
        self.start_label.set('START')
        
        self.lock_label = StringVar()
        self.lock_label.set('LOCKED')

        self.title = Label(header, textvariable=self.label, pady=20, font=('Lucida Console', 50))
        self.title.config(bg='sky blue', fg='RoyalBlue4')

        self.run_image = PhotoImage(file="img/animate.png").subsample(x=5, y=5)
        self.run_button = Button(header, image=self.run_image, command=self.run, bg='SkyBlue4', activebackground='midnight blue', border=5)

        self.start_button = Button(header, textvariable=self.start_label, font=('Lucida Console', 30), command=self.start_stop, height=5)
        self.start_button.config(bg='brown3', activebackground='brown4', fg='white', activeforeground='white', width=10, border=5)

        self.save_image = PhotoImage(file="img/save.png").subsample(x=5, y=5)
        self.save_button = Button(header, image=self.save_image, command=self.save, bg='SkyBlue4', activebackground='midnight blue', border=5)
        self.save_button.config(state='disabled')

        self.reset_image = PhotoImage(file="img/reset.png").subsample(x=5, y=5)
        self.reset_button = Button(header, image=self.reset_image, command=self.reset, bg='SkyBlue4', activebackground='midnight blue', border=5)

        self.home_image = PhotoImage(file="img/home.png").subsample(x=5, y=5)
        self.home_button = Button(header, image=self.home_image, command=self.to_home, bg='SkyBlue4', activebackground='midnight blue', border=5)

        self.locked_image = PhotoImage(file="img/lock.png").subsample(x=5, y=5)
        self.unlocked_image = PhotoImage(file="img/unlock.png").subsample(x=5, y=5)
        self.lock_button = Button(header, image=self.locked_image, command=self.lock, bg='SkyBlue4', activebackground='midnight blue', border=5, textvariable=self.lock_label)

        return header

    def home_page(self, master):
        frame = Frame(master)
        frame.grid(row=0, column=0)

        image = PhotoImage(file="img/guido.gif")
        bg = Label(frame, image=image)
        bg.image = image
        bg.grid(row=0, column=0, rowspan=4, columnspan=2)

        index = 0
        while index < 3:
            frame.grid_columnconfigure(index, minsize=200)
            frame.grid_rowconfigure(index, minsize=80)
            index += 1

        summary_button = HomeButton(frame, self.to_summary, 'img/summary.png')
        summary_button.grid(row=0, column=0, sticky='w')

        edit_button = HomeButton(frame, self.to_edit, 'img/edit.png')
        edit_button.grid(row=0, column=1, sticky='e')

        momentary_button = HomeButton(frame, self.to_momentary, 'img/momentary.png')
        momentary_button.grid(row=1, column=0, sticky='w')

        preferences_button = HomeButton(frame, self.to_pref, 'img/preferences.png')
        preferences_button.grid(row=1, column=1, sticky='e')

        music = HomeButton(frame, self.to_summary, 'img/music.png')
        music.grid(row=2, column=0, sticky='w')

        info = HomeButton(frame, self.to_summary, 'img/info.png')
        info.grid(row=2, column=1, sticky='e')

        return frame

    # CSV file input
    def get_valves(self):
        valves = [Valve('VALVE 1', 'DEFAULT', 'Action A', 'Action B', [0, 0]),
                  Valve('VALVE 2', 'DEFAULT', 'Action A', 'Action B', [0, 0]),
                  Valve('VALVE 3', 'DEFAULT', 'Action A', 'Action B', [0, 0]),
                  Valve('VALVE 4', 'DEFAULT', 'Action A', 'Action B', [0, 0]),
                  Valve('VALVE 5', 'DEFAULT', 'Action A', 'Action B', [0, 0]),
                  Valve('VALVE 6', 'DEFAULT', 'Action A', 'Action B', [0, 0]),
                  Valve('VALVE 7', 'DEFAULT', 'Action A', 'Action B', [0, 0]),
                  Valve('VALVE 8', 'DEFAULT', 'Action A', 'Action B', [0, 0])]

        file = open('data.csv', 'rt', newline='')
        try:
            reader = csv.reader(file, lineterminator='\n')
            index = 0
            for row in reader:
                if index == 0:
                    index += 1
                    continue
                else:
                    run = int(row[4])
                    delay = int(row[5])
                    interval = [run, delay]
                    valves[index - 1] = Valve(row[0], row[1], row[2], row[3], interval)
                index += 1
        finally:
            file.close()
            return valves

    def lock(self):
        if self.lock_label.get() == 'LOCKED':
            window = Toplevel()
            window.geometry('318x550')
            self.keypad = Keypad(window, self, self.password)
        else:
            self.save_button.config(state='disabled')
            self.edit.lock()
            self.preferences.lock()
            self.lock_label.set('LOCKED')
            self.lock_button.config(image=self.locked_image)
        
    def save(self):
        self.save_pref()
        self.save_edit()
        
    def save_edit(self):
        file = open('data.csv', 'w')
        interval = self.edit.get_intervals()
        try:
            writer = csv.writer(file, lineterminator='\n')
            writer.writerow(('Name', 'Setting', 'Action A', 'Action B', 'Runtime', 'Delaytime'))
            index = 0
            for i in self.valves:
                i.set_interval([interval[index].get(), interval[index + 8].get()])
                valve_interval = i.get_interval()
                if self.edit.plusInterval[index].cget('state') == 'disabled' and self.edit.motor[index].cget('state') != 'disabled':
                    i.set_setting('MOTOR')
                    writer.writerow((i.get_name().get(), i.get_setting(), i.get_action_a().get(), i.get_action_b().get(), 0, 0))
                elif interval[index].get() is 0:
                    i.set_setting('INACTIVE')
                    writer.writerow((i.get_name().get(), i.get_setting(), 'NONE', 'NONE', 0, 0))
                else:
                    i.set_setting('DEFAULT')
                    writer.writerow((i.get_name().get(), i.get_setting(), i.get_action_a().get(), i.get_action_b().get(), valve_interval[0], valve_interval[1]))
                index += 1
        finally:
            file.close()

    # must fix
    def save_pref(self):
        index = 0
        for i in self.valves:
            num = index * 3
            if self.preferences.entry_field[num].get():
                i.set_name(self.preferences.entry_field[num].get())
                self.preferences.entry_field[num].delete(0, 'end')
                
            if self.preferences.entry_field[num + 1].get():
                i.set_action_a(self.preferences.entry_field[num + 1].get())
                self.preferences.entry_field[num + 1].delete(0, 'end')
                
            if self.preferences.entry_field[num + 2].get():
                i.set_action_b(self.preferences.entry_field[num + 2].get())
                self.preferences.entry_field[num + 2].delete(0, 'end')
                
            index += 1
                
    def start_stop(self):
        if self.start_label.get() == 'START':
            self.start_label.set('STOP')
            self.master.update()

            self.run_screen.run_all(True)
            self.home_button.config(state='disabled')
        else:
            self.start_label.set('START')
            self.run_screen.run_all(False)
            self.home_button.config(state='normal')

    def run(self):
        self.summary.grid_remove()
        self.run_button.pack_forget()

        self.run_screen.make_frame()
        self.frame = self.run_screen
        self.frame.grid(row=0, column=0)
        self.header.grid(row=0, column=1)

        self.label.set('RUN')
        self.title.pack(side='top')
        self.start_button.pack()
        self.home_button.pack(side='bottom')

    def to_home(self):
        self.momentary.end_all()
        self.momentary.delete_frame()

        self.lock_button.pack_forget()
        self.run_button.pack_forget()
        self.save_button.pack_forget()
        self.reset_button.pack_forget()
        self.home_button.pack_forget()
        self.start_button.pack_forget()

        self.preferences.grid_remove()
        self.frame.grid_remove()
        self.header.grid_remove()

        self.frame = self.home
        self.frame.grid(row=0, column=0)

    def to_summary(self):
        self.frame.grid_remove()
        self.label.set('SUMMARY')
        self.home_button.pack(side='right')
        self.run_button.pack(side='right')
        self.header.grid(row=0, column=0, columnspan=1, sticky='nsew')
        
        self.title.pack(side='left')

        self.summary = Summary(self.master, self.valves)
        self.frame = self.summary
        self.frame.grid(row=1, column=0)

    def to_edit(self):
        self.frame.grid_remove()
        self.label.set('EDIT PROGRAM')

        self.header.grid(row=0, column=0, columnspan=1, sticky='nsew')
        self.home_button.pack(side='right')
        self.save_button.pack(side='right')
        self.lock_button.pack(side='right')
        self.reset_button.pack(side='right')
        self.title.pack(side='left')

        self.frame = self.edit
        self.frame.grid(row=1, column=0)

    def to_momentary(self):
        self.frame.grid_forget()
        self.label.set('MOMENTARY')

        self.header.grid(row=0, column=0, columnspan=12, sticky='ew')
        self.title.pack(side='left')
        self.home_button.pack(side='right')

        self.momentary.make_frame()

    def to_pref(self):
        self.frame.grid_remove()
        self.label.set('PREFERENCES')
        
        self.header.grid(row=0, column=0, columnspan=1, sticky='nsew')
        self.home_button.pack(side='right')
        self.save_button.pack(side='right')
        self.lock_button.pack(side='right')
        self.reset_button.pack(side='right')
        
        self.title.pack(side='left')

        self.frame = self.preferences
        self.frame.grid(row=1, column=0)

    def reset(self):
        self.master.quit()
        
    def access_granted(self):
        self.lock_label.set('UNLOCKED')
        self.lock_button.config(image=self.unlocked_image)
        self.save_button.config(state='normal')
        index = 0
        while index < 8:
            self.edit.minusInterval[index].config(state='normal')
            self.edit.minusDelay[index].config(state='normal')
            self.edit.plusInterval[index].config(state='normal')
            self.edit.plusDelay[index].config(state='normal')
            self.edit.motor[index].config(state='normal')
            self.edit.adv[index].config(state='normal')
            index += 1

        for each in self.preferences.entry_field:
            each.config(state='normal')
        self.edit.set_seconds()
        self.save_button.config(state='normal')
Esempio n. 11
0
    def insert_class_reference(self, class_name, source):
        region = self.view.sel()[0]

        with Edit(self.view) as edit:
            edit.replace(region, '  ' + class_name + '.new()\n')
Esempio n. 12
0
 def __init__(self, book_content):
     self.__content = book_content
     Add.__init__(self, self.__content)
     Edit.__init__(self, self.__content)
Esempio n. 13
0
 def __init__(self, content):
     self.__content = content
     Add.__init__(self, self.__content)
     Edit.__init__(self, self.__content)
    def on_done(self, repeat):
        global faker
        repeat = int(repeat or 0)
        if repeat > 0:

            view = View()
            faker = self._faker()

            if Pref.seed:
                faker.seed(Pref.seed)

            def index(_counter_index=-1):
                if not _counter_index in index.counter:
                    index.counter[_counter_index] = -1
                index.counter[_counter_index] += 1
                return index.counter[_counter_index]

            index.counter = {}
            faker.index = index

            try:
                from .Edit import Edit as Edit
            except:
                from Edit import Edit as Edit

            with Edit(view) as edit:

                for region in reversed(view.sel()):
                    if region.empty():
                        continue

                    content = view.substr(region) * repeat
                    functions_and_modifiers = re.findall(
                        '{{(.*?)(\|[^}]+)?}}', content, re.U | re.I)
                    for function, modifiers in functions_and_modifiers:
                        find_for = str('{{' + function + modifiers + '}}')

                        modifiers = modifiers.split('|')
                        modifiers.pop(0)

                        callable = lambda: self.value(lambda: eval('faker.' +
                                                                   function))
                        value = None
                        if not modifiers:
                            try:
                                value = callable()
                            except Exception as e:
                                print(
                                    'FakeDataGenerator: Error evaluating faker expression "'
                                    + function + '" : ' + str(e).strip())
                        else:
                            for modifier in modifiers:
                                if not value:
                                    # the first modifier receive the faker object, and may whish to call it multiple times.
                                    pass
                                else:
                                    # faker object already applied, just send the value
                                    callable = lambda: self._return(value)
                                try:
                                    value = eval('self.' + (modifier.replace(
                                        '(', '(callable,', 1)))
                                except Exception as e:
                                    print(
                                        'FakeDataGenerator: Error evaluating modifier expression "'
                                        + modifier +
                                        '", or faker expression : ' +
                                        str(e).strip())

                        content = content.replace(find_for, value, 1)

                    edit.replace(region, content)
Esempio n. 15
0
class GUI:
    def __init__(self, master):
        self.valves = self.get_valves()

        self.master = master
        self.master.configure(bg='sky blue')
        self.password = '******'

        self.momentary = Momentary(self.master, self.valves)
        self.edit = Edit(self.master, self.valves)
        self.summary = Summary(self.master, self.valves)
        self.preferences = Preferences(self.master, self.valves)
        self.run_screen = RunScreen(self.master, self.valves)

        self.header = self.make_header(self.master)
        self.home = self.home_page(self.master)
        self.frame = self.home

    def make_header(self, master):
        header = Frame(master, bg='sky blue')

        self.label = StringVar()
        self.label.set('NONE')

        self.start_label = StringVar()
        self.start_label.set('START')

        self.lock_label = StringVar()
        self.lock_label.set('LOCKED')

        self.title = Label(header,
                           textvariable=self.label,
                           pady=20,
                           font=('Lucida Console', 50))
        self.title.config(bg='sky blue', fg='RoyalBlue4')

        self.run_image = PhotoImage(file="img/animate.png").subsample(x=5, y=5)
        self.run_button = Button(header,
                                 image=self.run_image,
                                 command=self.run,
                                 bg='SkyBlue4',
                                 activebackground='midnight blue',
                                 border=5)

        self.start_button = Button(header,
                                   textvariable=self.start_label,
                                   font=('Lucida Console', 30),
                                   command=self.start_stop,
                                   height=5)
        self.start_button.config(bg='brown3',
                                 activebackground='brown4',
                                 fg='white',
                                 activeforeground='white',
                                 width=10,
                                 border=5)

        self.save_image = PhotoImage(file="img/save.png").subsample(x=5, y=5)
        self.save_button = Button(header,
                                  image=self.save_image,
                                  command=self.save,
                                  bg='SkyBlue4',
                                  activebackground='midnight blue',
                                  border=5)
        self.save_button.config(state='disabled')

        self.reset_image = PhotoImage(file="img/reset.png").subsample(x=5, y=5)
        self.reset_button = Button(header,
                                   image=self.reset_image,
                                   command=self.reset,
                                   bg='SkyBlue4',
                                   activebackground='midnight blue',
                                   border=5)

        self.home_image = PhotoImage(file="img/home.png").subsample(x=5, y=5)
        self.home_button = Button(header,
                                  image=self.home_image,
                                  command=self.to_home,
                                  bg='SkyBlue4',
                                  activebackground='midnight blue',
                                  border=5)

        self.locked_image = PhotoImage(file="img/lock.png").subsample(x=5, y=5)
        self.unlocked_image = PhotoImage(file="img/unlock.png").subsample(x=5,
                                                                          y=5)
        self.lock_button = Button(header,
                                  image=self.locked_image,
                                  command=self.lock,
                                  bg='SkyBlue4',
                                  activebackground='midnight blue',
                                  border=5,
                                  textvariable=self.lock_label)

        return header

    def home_page(self, master):
        frame = Frame(master)
        frame.grid(row=0, column=0)

        image = PhotoImage(file="img/guido.gif")
        bg = Label(frame, image=image)
        bg.image = image
        bg.grid(row=0, column=0, rowspan=4, columnspan=2)

        index = 0
        while index < 3:
            frame.grid_columnconfigure(index, minsize=200)
            frame.grid_rowconfigure(index, minsize=80)
            index += 1

        summary_button = HomeButton(frame, self.to_summary, 'img/summary.png')
        summary_button.grid(row=0, column=0, sticky='w')

        edit_button = HomeButton(frame, self.to_edit, 'img/edit.png')
        edit_button.grid(row=0, column=1, sticky='e')

        momentary_button = HomeButton(frame, self.to_momentary,
                                      'img/momentary.png')
        momentary_button.grid(row=1, column=0, sticky='w')

        preferences_button = HomeButton(frame, self.to_pref,
                                        'img/preferences.png')
        preferences_button.grid(row=1, column=1, sticky='e')

        music = HomeButton(frame, self.to_summary, 'img/music.png')
        music.grid(row=2, column=0, sticky='w')

        info = HomeButton(frame, self.to_summary, 'img/info.png')
        info.grid(row=2, column=1, sticky='e')

        return frame

    # CSV file input
    def get_valves(self):
        valves = [
            Valve('VALVE 1', 'DEFAULT', 'Action A', 'Action B', [0, 0]),
            Valve('VALVE 2', 'DEFAULT', 'Action A', 'Action B', [0, 0]),
            Valve('VALVE 3', 'DEFAULT', 'Action A', 'Action B', [0, 0]),
            Valve('VALVE 4', 'DEFAULT', 'Action A', 'Action B', [0, 0]),
            Valve('VALVE 5', 'DEFAULT', 'Action A', 'Action B', [0, 0]),
            Valve('VALVE 6', 'DEFAULT', 'Action A', 'Action B', [0, 0]),
            Valve('VALVE 7', 'DEFAULT', 'Action A', 'Action B', [0, 0]),
            Valve('VALVE 8', 'DEFAULT', 'Action A', 'Action B', [0, 0])
        ]

        file = open('data.csv', 'rt', newline='')
        try:
            reader = csv.reader(file, lineterminator='\n')
            index = 0
            for row in reader:
                if index == 0:
                    index += 1
                    continue
                else:
                    run = int(row[4])
                    delay = int(row[5])
                    interval = [run, delay]
                    valves[index - 1] = Valve(row[0], row[1], row[2], row[3],
                                              interval)
                index += 1
        finally:
            file.close()
            return valves

    def lock(self):
        if self.lock_label.get() == 'LOCKED':
            window = Toplevel()
            window.geometry('318x550')
            self.keypad = Keypad(window, self, self.password)
        else:
            self.save_button.config(state='disabled')
            self.edit.lock()
            self.preferences.lock()
            self.lock_label.set('LOCKED')
            self.lock_button.config(image=self.locked_image)

    def save(self):
        self.save_pref()
        self.save_edit()

    def save_edit(self):
        file = open('data.csv', 'w')
        interval = self.edit.get_intervals()
        try:
            writer = csv.writer(file, lineterminator='\n')
            writer.writerow(('Name', 'Setting', 'Action A', 'Action B',
                             'Runtime', 'Delaytime'))
            index = 0
            for i in self.valves:
                i.set_interval(
                    [interval[index].get(), interval[index + 8].get()])
                valve_interval = i.get_interval()
                if self.edit.plusInterval[index].cget(
                        'state') == 'disabled' and self.edit.motor[index].cget(
                            'state') != 'disabled':
                    i.set_setting('MOTOR')
                    writer.writerow(
                        (i.get_name().get(), i.get_setting(),
                         i.get_action_a().get(), i.get_action_b().get(), 0, 0))
                elif interval[index].get() is 0:
                    i.set_setting('INACTIVE')
                    writer.writerow((i.get_name().get(), i.get_setting(),
                                     'NONE', 'NONE', 0, 0))
                else:
                    i.set_setting('DEFAULT')
                    writer.writerow(
                        (i.get_name().get(), i.get_setting(),
                         i.get_action_a().get(), i.get_action_b().get(),
                         valve_interval[0], valve_interval[1]))
                index += 1
        finally:
            file.close()

    # must fix
    def save_pref(self):
        index = 0
        for i in self.valves:
            num = index * 3
            if self.preferences.entry_field[num].get():
                i.set_name(self.preferences.entry_field[num].get())
                self.preferences.entry_field[num].delete(0, 'end')

            if self.preferences.entry_field[num + 1].get():
                i.set_action_a(self.preferences.entry_field[num + 1].get())
                self.preferences.entry_field[num + 1].delete(0, 'end')

            if self.preferences.entry_field[num + 2].get():
                i.set_action_b(self.preferences.entry_field[num + 2].get())
                self.preferences.entry_field[num + 2].delete(0, 'end')

            index += 1

    def start_stop(self):
        if self.start_label.get() == 'START':
            self.start_label.set('STOP')
            self.master.update()

            self.run_screen.run_all(True)
            self.home_button.config(state='disabled')
        else:
            self.start_label.set('START')
            self.run_screen.run_all(False)
            self.home_button.config(state='normal')

    def run(self):
        self.summary.grid_remove()
        self.run_button.pack_forget()

        self.run_screen.make_frame()
        self.frame = self.run_screen
        self.frame.grid(row=0, column=0)
        self.header.grid(row=0, column=1)

        self.label.set('RUN')
        self.title.pack(side='top')
        self.start_button.pack()
        self.home_button.pack(side='bottom')

    def to_home(self):
        self.momentary.end_all()
        self.momentary.delete_frame()

        self.lock_button.pack_forget()
        self.run_button.pack_forget()
        self.save_button.pack_forget()
        self.reset_button.pack_forget()
        self.home_button.pack_forget()
        self.start_button.pack_forget()

        self.preferences.grid_remove()
        self.frame.grid_remove()
        self.header.grid_remove()

        self.frame = self.home
        self.frame.grid(row=0, column=0)

    def to_summary(self):
        self.frame.grid_remove()
        self.label.set('SUMMARY')
        self.home_button.pack(side='right')
        self.run_button.pack(side='right')
        self.header.grid(row=0, column=0, columnspan=1, sticky='nsew')

        self.title.pack(side='left')

        self.summary = Summary(self.master, self.valves)
        self.frame = self.summary
        self.frame.grid(row=1, column=0)

    def to_edit(self):
        self.frame.grid_remove()
        self.label.set('EDIT PROGRAM')

        self.header.grid(row=0, column=0, columnspan=1, sticky='nsew')
        self.home_button.pack(side='right')
        self.save_button.pack(side='right')
        self.lock_button.pack(side='right')
        self.reset_button.pack(side='right')
        self.title.pack(side='left')

        self.frame = self.edit
        self.frame.grid(row=1, column=0)

    def to_momentary(self):
        self.frame.grid_forget()
        self.label.set('MOMENTARY')

        self.header.grid(row=0, column=0, columnspan=12, sticky='ew')
        self.title.pack(side='left')
        self.home_button.pack(side='right')

        self.momentary.make_frame()

    def to_pref(self):
        self.frame.grid_remove()
        self.label.set('PREFERENCES')

        self.header.grid(row=0, column=0, columnspan=1, sticky='nsew')
        self.home_button.pack(side='right')
        self.save_button.pack(side='right')
        self.lock_button.pack(side='right')
        self.reset_button.pack(side='right')

        self.title.pack(side='left')

        self.frame = self.preferences
        self.frame.grid(row=1, column=0)

    def reset(self):
        self.master.quit()

    def access_granted(self):
        self.lock_label.set('UNLOCKED')
        self.lock_button.config(image=self.unlocked_image)
        self.save_button.config(state='normal')
        index = 0
        while index < 8:
            self.edit.minusInterval[index].config(state='normal')
            self.edit.minusDelay[index].config(state='normal')
            self.edit.plusInterval[index].config(state='normal')
            self.edit.plusDelay[index].config(state='normal')
            self.edit.motor[index].config(state='normal')
            self.edit.adv[index].config(state='normal')
            index += 1

        for each in self.preferences.entry_field:
            each.config(state='normal')
        self.edit.set_seconds()
        self.save_button.config(state='normal')