Exemplo n.º 1
0
    def _change(self, newName, absences, failures):
        """
        This function changes the event on the database

        :return: None
        """
        # Create a new Event with the new name
        newEvent = Event(newName, self.event['start'], self.event['end'],
                         self.event['day'], self.event['type'],
                         self.event['subject'], absences, failures)

        # Iterate
        started = False
        index = 0
        for t in Time.HOURS:

            # Start counting when start time is detected
            if t[0:5] == self.event['start']: started = True
            if t[8:] == self.event['end']:
                started = False
                # One last element
                if self.event == Database.pick(self.weekday, index):
                    Database.edit(self.weekday, index, newEvent)
                break

            if started:
                # Delete and add new Event
                if self.event == Database.pick(self.weekday, index):
                    Database.edit(self.weekday, index, newEvent)

            index += 1

        self.event['name'] = newName
        self.event['absences'] = absences
        self.event['failures'] = failures
Exemplo n.º 2
0
    def _delete(self):
        """Delete the selected Event"""
        # Get user's response
        response = messagebox.askquestion(
            "Delete event", "Are you sure you want to delete this event?")

        if response == "yes":
            started = False
            index = 0
            for t in Time.HOURS:

                # Start counting when start time is detected
                if t[0:5] == self.event['start']: started = True
                if t[8:] == self.event['end']:
                    started = False
                    # Delete last event
                    if self.event == Database.pick(self.weekday, index):
                        Database.delete(self.weekday, index)
                    break

                if started:
                    # Delete events
                    if self.event == Database.pick(self.weekday, index):
                        Database.delete(self.weekday, index)

                index += 1

            self.destroyFrame()

        else:
            return
Exemplo n.º 3
0
    def _getFreeTime(self):
        """
        Get available time (free time)
        All available time is stored in a list corresponding to it's dictionary key
        Blocks of free time are stored in the same subset
        Each hour of time is stored in a tuple, containing it's time range index

        Example:
        {
            'Monday': [
                [(1, {}), (2, {}), (3, {})],
                [12, {}]
            ]

            .....

            'Sunday': [

            ]
        }
        """
        for day in Time.WEEKDAYS[1:]:
            self.freeTime[day] = []

            # Group free time that are all together in the same slice
            slice = []
            for hour in range(len(Time.HOURS)):
                data = Database.pick(day, hour)

                if hour < len(Time.HOURS) - 1:
                    nextData = Database.pick(day, hour + 1)
                else:
                    nextData = None

                if data == {}:
                    if nextData == {}:
                        slice.append((hour, data))
                    else:
                        if len(slice) == 0:
                            self.freeTime[day].append([(hour, data)])
                        else:
                            slice.append((hour, data))
                            self.freeTime[day].append(slice)
                            slice = []
Exemplo n.º 4
0
    def buildTimeTable(self):
        """Build time table"""
        # Time table layout
        self.tableFrame = tk.Frame(self)

        today = Time.WEEKDAYS[datetime.datetime.today().weekday() + 1]

        # Create the timetable
        for d in range(len(Time.WEEKDAYS)):
            if Time.WEEKDAYS[d] == today:
                tk.Label(self.tableFrame,
                         text=Time.WEEKDAYS[d],
                         font=Constants.MEDIUM_FONT,
                         padx=25,
                         pady=30,
                         bg=Constants.TODAY[0],
                         fg=Constants.TODAY[1]).grid(row=0, column=d)
            else:
                tk.Label(self.tableFrame,
                         text=Time.WEEKDAYS[d],
                         font=Constants.MEDIUM_FONT,
                         padx=25,
                         pady=30).grid(row=0, column=d)

            if d == 0:
                for h in range(len(Time.HOURS)):
                    tk.Label(self.tableFrame,
                             text=Time.HOURS[h],
                             font=Constants.MEDIUM_FONT,
                             padx=20,
                             pady=5).grid(row=h + 1, column=d)
            else:
                for e in range(len(Time.HOURS)):
                    data = Database.pick(Time.WEEKDAYS[d], e)
                    self.e = tk.Label(self.tableFrame,
                                      width=14,
                                      height=1,
                                      font=Constants.MEDIUM_FONT,
                                      borderwidth=2,
                                      relief="ridge")

                    if data != {}:
                        bg = Constants.GRIDCOLOR[Constants.TASKS.index(
                            data['type'])][0]
                        fg = Constants.GRIDCOLOR[Constants.TASKS.index(
                            data['type'])][1]
                        self.e['text'] = data['name']
                        self.e['bg'] = bg
                        self.e['fg'] = fg
                        self.e.bind("<Button-1>",
                                    lambda ev: self._eventClicked(ev))

                    self.e.grid(row=e + 1, column=d)

        self.tableFrame.grid(row=1, column=0)
Exemplo n.º 5
0
    def __init__(self, eventCoords, *args, **kwargs):
        self.weekday = Time.WEEKDAYS[eventCoords[0]]
        self.timeIndex = eventCoords[1] - 1
        self.event = Database.pick(self.weekday, self.timeIndex)

        tk.Tk.__init__(self, *args, **kwargs)

        self.geometry(Constants.POPSIZE)
        self.resizable(False, False)
        self.title(self.event['name'])
        self.protocol("WM_DELETE_WINDOW", self.destroyFrame)

        self.container = tk.Frame(self)
        self.container.pack(side="top", fill="both", expand=True)

        self._build_frame()
Exemplo n.º 6
0
    def __init__(self, title, *args, **kwargs):
        # Get current weekday
        self.today = Time.WEEKDAYS[datetime.datetime.today().weekday() + 1]
        self.exams = []
        # Get all exams and store them in self.exams
        for day in Time.WEEKDAYS[1:]:

            for i in range(len(Time.HOURS)):
                data = Database.pick(day, i)

                if data != {}:
                    if data['type'] == "Exam":
                        if data not in self.exams:
                            self.exams.append(data)

        Popup.__init__(self, title, *args, **kwargs)
        self.geometry(Constants.MLPOPSIZE)
Exemplo n.º 7
0
    def _getStudy(self, exam):
        """
        Iterate through database and get ammount of hours of studytime

        :param exam: Exam information
        :return: Studytime (Integer)
        """
        # Get the ammount of studytime
        studytime = 0
        # Iterate
        for day in Time.WEEKDAYS[1:]:
            for i in range(len(Time.HOURS)):
                # Pick data
                data = Database.pick(day, i)
                # Check if no null data
                if data != {}:
                    # Check if is study
                    if data['type'] == "Study":
                        # Check if subject matches with exam's subject
                        if data['subject'] == exam['subject']:
                            # Check if studytime is within today and exam date
                            iStudy = Time.WEEKDAYS.index(data['day'])
                            iExam = Time.WEEKDAYS.index(exam['day'])
                            iToday = Time.WEEKDAYS.index(self.today)

                            # If today is before exam
                            if iToday < iExam:
                                if iToday <= iStudy and iStudy < iExam:
                                    studytime += 1
                            # If today is after exam (exam will be next week)
                            if iToday > iExam:
                                if iStudy >= iToday:
                                    studytime += 1
                                if iStudy < iExam:
                                    studytime += 1
                            # Get remaining time before exam in the same day
                            if iStudy == iExam:
                                for t in Time.TIMELIST:
                                    # data reaches first
                                    if data['start'] == t:
                                        studytime += 1
                                        break
                                    # exam reaches first
                                    if exam['start'] == t:
                                        break
        return studytime