Ejemplo n.º 1
0
class Calendar_Tab(QWidget):

    def __init__(self):
        super(QWidget, self).__init__()
        
        
        
        # I should be doing this with every widget()
        self.setObjectName("calendar_tab")

        #Main layout as a horizontal layout
        self.main_layout = QHBoxLayout()
        self.setLayout(self.main_layout)

        #Left side widget set to verticak mode
        self.left_calendar_widget = QWidget()
        self.left_calendar_widget_layout = QVBoxLayout()
        self.left_calendar_widget.setLayout(self.left_calendar_widget_layout)


        self.calendar = QCalendarWidget(self)
        self.calendar.clicked.connect(self.get_date)
        self.current_date = self.calendar.selectedDate()
        self.calendar.currentPageChanged.connect(self.date_changed)


        self.event_add_widget = QWidget()
        self.event_add_widget_layout = QVBoxLayout()
        self.event_add_widget.setLayout(self.event_add_widget_layout)

        self.date_input_widget = QWidget()
        self.date_input_widget_layout = QHBoxLayout()
        self.date_input_widget.setLayout(self.date_input_widget_layout)

        self.date_input_edit = QDateEdit()
        self.date_name = QLineEdit()
        self.date_name.setPlaceholderText("Enter an event name")
        self.date_name.setAlignment(Qt.AlignRight)

        self.date_input_widget_layout.addWidget(self.date_input_edit)
        self.date_input_widget_layout.addWidget(self.date_name)



        self.date_add_widget = QWidget()
        self.date_add_widget_layout = QVBoxLayout()
        self.date_add_widget.setLayout(self.date_add_widget_layout)

        self.date_description = QTextEdit()

        self.date_add_button_widget = QWidget()
        self.date_add_button_widget_layout = QHBoxLayout()
        self.date_add_button_widget.setLayout(self.date_add_button_widget_layout)

        self.date_add_button = QPushButton("Add Event")
        self.date_add_button_widget_layout.setAlignment(Qt.AlignCenter)
        self.date_add_button.clicked.connect(self.new_event)
        #self.date_add_button.resize(50,50)

        self.date_add_button_widget_layout.addWidget(self.date_add_button)

        self.date_add_widget_layout.addWidget(self.date_description)
        self.date_add_widget_layout.addWidget(self.date_add_button_widget)

        self.event_add_widget_layout.addWidget(self.date_input_widget)
        self.event_add_widget_layout.addWidget(self.date_description)
        self.event_add_widget_layout.addWidget(self.date_add_button)



        self.left_calendar_widget_layout.addWidget(self.calendar)
        self.left_calendar_widget_layout.addWidget(self.event_add_widget)


        self.right_calender_widget = QWidget()
        self.right_calender_widget_layout = QVBoxLayout()
        self.right_calender_widget.setLayout(self.right_calender_widget_layout)

        self.date_view_text = QListView(self.right_calender_widget)

        self.right_calender_widget_layout.addWidget(self.date_view_text)

        self.main_layout.addWidget(self.left_calendar_widget)
        self.main_layout.addWidget(self.right_calender_widget)
    
    def get_date(self):
        # print(self.calendar.selectedDate())
        self.date_input_edit.setDate(self.calendar.selectedDate())
        
    def new_event(self):
        
        date = self.date_input_edit.date()
        name = self.date_name.text()
        description = self.date_description.toPlainText()
        
        DB.calendar_add_event(date, name, description)
        # then possibly retrieve and update monthly view
    
    def event_added_notification(self):
        self.event_added = QMainWindow()
        self.event_added
        self.event_added_layout = QHBoxLayout()
        self.event_added.setLayout(self.event_added_layout)
        
    
    def date_changed(self):
        print(self.calendar.monthShown())
        print(self.calendar.yearShown())
        print("Month has changed")
    
    def get_months_events(self):
        # get all events with date could be dictionary
        # if no events, post no events to table
        # if events post to table
        # refresh table with months events
        return
Ejemplo n.º 2
0
class MainWidget(QWidget):

    def __init__(self):
        QWidget.__init__(self)

        # Set Time One Group
        self.time_one_calendar = QCalendarWidget()
        self.time_one_country_combobox = QComboBox()
        self.time_one_vbox = QVBoxLayout()
        self.time_one_groupbox = QGroupBox("Time One")
        self.time_one_bottom_hbox = QHBoxLayout()
        self.time_one_time_edit = QTimeEdit()
        self.time_one_default_button = QPushButton()
        self.time_one_default_button.setIcon(QIcon("%s/gnome-set-time.png" % icon_path))
        self.time_one_default_button.setMaximumSize(50, 50)
        self.time_one_bottom_hbox.addWidget(self.time_one_time_edit)
        self.time_one_bottom_hbox.addWidget(self.time_one_default_button)
        self.time_one_vbox.addWidget(self.time_one_country_combobox)
        self.time_one_vbox.addWidget(self.time_one_calendar)
        self.time_one_vbox.addLayout(self.time_one_bottom_hbox)
        self.time_one_groupbox.setLayout(self.time_one_vbox)

        # Set Time Two Group
        self.time_two_groupbox = QGroupBox("Time Two")
        self.time_two_calendar = QCalendarWidget()
        self.time_two_vbox = QVBoxLayout()
        self.time_two_country_combobox = QComboBox()
        self.time_two_bottom_hbox = QHBoxLayout()
        self.time_two_time_edit = QTimeEdit()
        self.time_two_default_button = QPushButton()
        self.time_two_default_button.setIcon(QIcon("%s/gnome-set-time.png" % icon_path))
        self.time_two_default_button.setMaximumSize(50, 50)
        self.time_two_bottom_hbox.addWidget(self.time_two_time_edit)
        self.time_two_bottom_hbox.addWidget(self.time_two_default_button)
        self.time_two_vbox.addWidget(self.time_two_country_combobox)
        self.time_two_vbox.addWidget(self.time_two_calendar)
        self.time_two_vbox.addLayout(self.time_two_bottom_hbox)
        self.time_two_groupbox.setLayout(self.time_two_vbox)

        # Set main layout
        self.main_layout = QHBoxLayout()
        self.main_layout.addWidget(self.time_one_groupbox)
        self.main_layout.addWidget(self.time_two_groupbox)
        self.setLayout(self.main_layout)

        # Wire-up your widgets!
        self.time_one_connect()
        self.time_two_connect()
        self.time_one_default_button.clicked.connect(self.set_local_time_one)
        self.time_two_default_button.clicked.connect(self.set_local_time_two)

        # Set the local time for time one
        self.set_local_country()
        self.set_local_time_one()

        # Finally, convert the second time based on the first
        self.convert_timeone_to_timetwo()

    def set_local_country(self):
        global_timezone_list = timezone_info.get_global_timezone_list()
        local_tz_index = global_timezone_list.index(str(self.get_local_timezone()))
        self.time_one_country_combobox.addItems(global_timezone_list)
        self.time_one_country_combobox.setCurrentIndex(local_tz_index)
        self.time_two_country_combobox.addItems(global_timezone_list)

    # To-do: Current solution works for Debian systems. Need to find repo solution that
    # allows for something like "from tzlocal import get_localzone"
    @staticmethod
    def get_local_timezone():
        timezone_file = '/etc/timezone'
        try:
            file = open(timezone_file, 'r')
            system_timezone = file.read().rstrip()
        except IOError:
            print("Unable to open %s") & timezone_file
            system_timezone = 'UTC'

        return system_timezone

    @staticmethod
    def get_local_times():
        local_hour = datetime.datetime.now().strftime("%H")
        local_minute = datetime.datetime.now().strftime("%M")
        local_current_time = QTime(int(local_hour), int(local_minute), 0, 0)

        return local_current_time

    def set_local_time_one(self):

        # Set time for one time
        local_current_time = self.get_local_times()
        self.time_one_time_edit.setTime(local_current_time)

        # Set date for one calendar
        self.time_one_calendar.setSelectedDate(QDate.currentDate())

        # Convert the second time based on the first
        self.convert_timeone_to_timetwo()

    def set_local_time_two(self):

        # Set time for one time
        local_current_time = self.get_local_times()
        self.time_two_time_edit.setTime(local_current_time)

        # Set date for one calendar
        self.time_two_calendar.setSelectedDate(QDate.currentDate())

        # Convert the first time based on the second
        self.convert_timetwo_to_timeone()

    def time_one_connect(self):
        self.time_one_country_combobox.activated.connect(self.convert_timeone_to_timetwo)
        self.time_one_calendar.clicked.connect(self.convert_timeone_to_timetwo)
        self.time_one_calendar.currentPageChanged.connect(self.convert_timeone_to_timetwo)
        self.time_one_time_edit.timeChanged.connect(self.convert_timeone_to_timetwo)

    def time_two_connect(self):
        self.time_two_country_combobox.activated.connect(self.convert_timeone_to_timetwo)
        self.time_two_calendar.clicked.connect(self.convert_timetwo_to_timeone)
        self.time_two_calendar.currentPageChanged.connect(self.convert_timetwo_to_timeone)
        self.time_two_time_edit.timeChanged.connect(self.convert_timetwo_to_timeone)

    def time_one_disconnect(self):
        self.time_one_calendar.clicked.disconnect()
        self.time_one_country_combobox.activated.disconnect()
        self.time_one_time_edit.timeChanged.disconnect()

    def time_two_disconnect(self):
        self.time_two_calendar.clicked.disconnect()
        self.time_two_country_combobox.activated.disconnect()
        self.time_two_time_edit.timeChanged.disconnect()

    def clear_combo_boxes(self):
        self.time_one_country_combobox.clear()
        self.time_two_country_combobox.clear()

    def __amend_country_region(self):
        """
        Used to add the regional header before converting if a region outside of global is used.
        """

        current_region = timezone_info.get_city_region(self.time_one_country_combobox.currentText())
        time_one_country = self.time_one_country_combobox.currentText()
        time_two_country = self.time_two_country_combobox.currentText()

        if '/' not in time_one_country:
            time_one_country = current_region+'/'+self.time_one_country_combobox.currentText()
            time_two_country = current_region+'/'+self.time_two_country_combobox.currentText()

        return time_one_country, time_two_country

    def convert_timeone_to_timetwo(self):
        # Disconnect time two widgets,so that they do not run
        self.time_two_disconnect()

        time_one_country, time_two_country = self.__amend_country_region()

        date_time_one = datetime.datetime(self.time_one_calendar.yearShown(),
                                          self.time_one_calendar.monthShown(),
                                          self.time_one_calendar.selectedDate().day(),
                                          self.time_one_time_edit.time().hour(),
                                          self.time_one_time_edit.time().minute())

        first_tz = timezone(time_one_country)
        second_tz = timezone(time_two_country)

        first_dt = first_tz.localize(date_time_one)
        second_dt = first_dt.astimezone(second_tz)

        new_date_two = QDate(second_dt.year, second_dt.month, second_dt.day)
        self.time_two_calendar.setSelectedDate(new_date_two)

        new_time_two = QTime(int(second_dt.hour), int(second_dt.minute))
        self.time_two_time_edit.setTime(new_time_two)

        # Reconnect time one widgets.
        self.time_two_connect()

    def convert_timetwo_to_timeone(self):

        # Disconnect time one widgets,so that they do not run
        self.time_one_disconnect()

        time_one_country, time_two_country = self.__amend_country_region()

        date_time_two = datetime.datetime(self.time_two_calendar.yearShown(),
                                          self.time_two_calendar.monthShown(),
                                          self.time_two_calendar.selectedDate().day(),
                                          self.time_two_time_edit.time().hour(),
                                          self.time_two_time_edit.time().minute())

        first_tz = timezone(time_one_country)
        second_tz = timezone(time_two_country)

        second_dt = second_tz.localize(date_time_two)
        first_dt = second_dt.astimezone(first_tz)

        new_date_one = QDate(first_dt.year, first_dt.month, first_dt.day)
        self.time_one_calendar.setSelectedDate(new_date_one)

        new_time_one = QTime(int(first_dt.hour), int(first_dt.minute))
        self.time_one_time_edit.setTime(new_time_one)

        # Reconnect time one widgets
        self.time_one_connect()