def create_top_level(self):
        top_level_names = []
        for name in self.equipment_table.header:
            if name in self.skip_names:
                continue
            if name in self.rename_map:
                name = self.rename_map[name]
            top_level_names.append(name)

        top_level_names.extend(['Backend',
                                'Interface'])  # for ConnectionRecord's

        for item in sorted(top_level_names):
            QtWidgets.QTreeWidgetItem(self, [item])
    def populate_tree(self):
        self.clear()
        self.create_top_level()

        for index in range(self.topLevelItemCount()):
            item = self.topLevelItem(index)
            name = item.text(0)
            if name == 'Manufacturer':
                values = {}
                for record in self.equipment_table.records_all:
                    if record.manufacturer and record.manufacturer not in values:
                        values[record.manufacturer] = [record.model]
                    else:
                        if record.model and record.model not in values[
                                record.manufacturer]:
                            values[record.manufacturer].append(record.model)
                item.setText(0, name + ' ({})'.format(len(values)))
                for manufacturer in sorted(values):
                    model_item = QtWidgets.QTreeWidgetItem(
                        item, [manufacturer])
                    for model in sorted(values[manufacturer]):
                        QtWidgets.QTreeWidgetItem(model_item, [model])
            elif name == 'Year Calibrated':
                years = []
                for record in self.equipment_table.records_all:
                    year = record.date_calibrated.year
                    if year > 1 and year not in years:
                        years.append(year)
                item.setText(0, name + ' ({})'.format(len(years)))
                for year in sorted(years)[::-1]:
                    QtWidgets.QTreeWidgetItem(item, [str(year)])
            elif name == 'Connection':
                bools = {'True': 0, 'False': 0}
                for record in self.equipment_table.records_all:
                    bools[str(record.connection is not None)] += 1
                item.setText(0, name + ' (2)')
                for key in sorted(bools):
                    QtWidgets.QTreeWidgetItem(item, [key])
            elif name == 'Calibration Cycle':
                cycles = []
                for record in self.equipment_table.records_all:
                    if record.calibration_cycle == 0:
                        continue
                    if int(record.calibration_cycle
                           ) == record.calibration_cycle:
                        cycle = int(record.calibration_cycle)
                    else:
                        cycle = record.calibration_cycle
                    if cycle not in cycles:
                        cycles.append(cycle)
                item.setText(0, name + ' ({})'.format(len(cycles)))
                for c in sorted(cycles):
                    QtWidgets.QTreeWidgetItem(item, [str(c)])
            else:
                if name == 'Backend' or name == 'Interface':
                    values = self._get_distinct_connection_records(name)
                else:
                    values = self._get_distinct_equipment_records(name)
                item.setText(0, name + ' ({})'.format(len(values)))
                for value in sorted(values):
                    QtWidgets.QTreeWidgetItem(item, [value])