def __init__(self, title, parent=None):
     super(ReferenceExporterpage, self).__init__(parent)
     self.parent = parent
     
     self.populating = False
     self.reference_formatter = ReferenceEntryFormatter()
 
     self.setButtonText(QtGui.QWizard.FinishButton, "Save to file...")
     
     self.ui = Ui_ReferenceExporterPage()
     self.ui.setupUi(self)
     self.setTitle(title)
     self.set_references_context_menu()
     
     self.registerField("complete*", self.ui.entriesEdit, "plainText",
                        QtCore.SIGNAL('textChanged()'));
     
     self.connect(self.ui.references,
                  QtCore.SIGNAL("itemChanged(QTreeWidgetItem *,int)"),
                  self._format_references)
class ReferenceExporterpage(QtGui.QWizardPage):
    
    def __init__(self, title, parent=None):
        super(ReferenceExporterpage, self).__init__(parent)
        self.parent = parent
        
        self.populating = False
        self.reference_formatter = ReferenceEntryFormatter()
    
        self.setButtonText(QtGui.QWizard.FinishButton, "Save to file...")
        
        self.ui = Ui_ReferenceExporterPage()
        self.ui.setupUi(self)
        self.setTitle(title)
        self.set_references_context_menu()
        
        self.registerField("complete*", self.ui.entriesEdit, "plainText",
                           QtCore.SIGNAL('textChanged()'));
        
        self.connect(self.ui.references,
                     QtCore.SIGNAL("itemChanged(QTreeWidgetItem *,int)"),
                     self._format_references)

    def initializePage(self):
        log.debug("Initializing references list.")  #@UndefinedVariable

        self.enter_populating()
        extractions = self.parent.extraction_gw.find_extractions()
        for extraction in extractions:
            self._add_extraction(extraction)
        self.ui.references.sortItems(0, QtCore.Qt.AscendingOrder)
        self.exit_populating()
        
        self.thread = ReferenceFormatterThread(self, self.reference_formatter)
        # Connect thread signals
        self.connect(self.thread, QtCore.SIGNAL("finished()"),
                     self._update_export_edit)
        self.connect(self.thread, QtCore.SIGNAL("terminated()"),
                     self._update_export_edit)

    def set_references_context_menu(self):
        self.ui.check_all = QtGui.QAction("Check All", self.ui.references)
        self.ui.check_all.triggered.connect(self._check_all)
        self.ui.references.addAction(self.ui.check_all)
        
        self.ui.uncheck_all = QtGui.QAction("Uncheck All", self.ui.references)
        self.ui.uncheck_all.triggered.connect(self._uncheck_all)
        self.ui.references.addAction(self.ui.uncheck_all)

    def enter_populating(self):
        self.populating = True

    def exit_populating(self):
        self.populating = False

    def _add_extraction(self, extraction):
        item = QtGui.QTreeWidgetItem(self.ui.references)
        item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsUserCheckable)
        
        item.extraction = extraction
        item.show_path = self._get_show_string(extraction.file_path)
        
        item.setText(0, QtGui.QApplication.translate("", item.show_path,
            None, QtGui.QApplication.UnicodeUTF8))
        item.setCheckState(0, QtCore.Qt.Unchecked)
        item.reference_entry = None
        return item

    def _format_references(self):
        if self.populating:
            return
        
        log.debug('Item checked/unchecked') #@UndefinedVariable
        self.ui.entriesEdit.setText('Updating...')
        
        items = self._get_checked_items()
        log.debug('Items selected: %d' % len(items)) #@UndefinedVariable
        
        self.thread.items = items
        self.thread.start()

    def _get_checked_items(self):
        items = []
        for index in range(self.ui.references.topLevelItemCount()):
            item = self.ui.references.topLevelItem(index)
            if item.checkState(0) == QtCore.Qt.Checked:
                items.append(item)
        return items

    def _update_export_edit(self):
        log.debug('Finished formatting: %d formatted references' % #@UndefinedVariable 
                  len(self.thread.formatted_references))
        formatted_references = self.thread.formatted_references
        
        text = ''
        for reference in formatted_references:
            text = ''.join([text, reference, '\n\n'])
        
        self.ui.entriesEdit.setText(text)

    def _get_show_string(self, string):
        split_string = string.rsplit('/', 1) 
        if len(split_string) == 2:
            return split_string[1]
        else:
            return split_string[0]
    
    def _check_all(self):
        log.debug('Check all references') #@UndefinedVariable
        self._change_items_check_state(QtCore.Qt.Checked)
        self._update_export_edit()

    def _uncheck_all(self):
        log.debug('Uncheck all references') #@UndefinedVariable
        self._change_items_check_state(QtCore.Qt.Unchecked)
        self._update_export_edit()
        
    def _change_items_check_state(self, value):
        self.enter_populating()
        count = self.ui.references.topLevelItemCount() - 1
        for index in range(count):
            item = self.ui.references.topLevelItem(index)
            item.setCheckState(0, value)
        self.exit_populating()
        self.ui.references.topLevelItem(count).setCheckState(0, value)