def __init__(self, table, parent = None):
     QtGui.QWidget.__init__(self, parent)
     self.ui = Ui_FilterDialog()
     self.ui.setupUi(self)
     
     self.table = table
     self.canceled = False
     
     self.initializeUi()
     self.setupSignals()
class FilterGamesController(QtGui.QDialog):
    def __init__(self, table, parent = None):
        QtGui.QWidget.__init__(self, parent)
        self.ui = Ui_FilterDialog()
        self.ui.setupUi(self)
        
        self.table = table
        self.canceled = False
        
        self.initializeUi()
        self.setupSignals()

    def initializeUi(self):
        def assign_model(model, list_widget):       
            model_qt = Qt.QStandardItemModel()
            values_list = model.get_list()
            for value in values_list:
                item = Qt.QStandardItem(value)
                item.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled)
                item.setData(QtCore.Qt.Checked, QtCore.Qt.CheckStateRole)
                if model.get_filtered(value):
                    item.setCheckState(QtCore.Qt.Unchecked)
                model_qt.appendRow(item)          
            list_widget.setModel(model_qt)
        
        assign_model(self.table.system_list_model, self.ui.listSystem) 
        assign_model(self.table.status_list_model, self.ui.listStatus)        
        assign_model(self.table.label_list_model, self.ui.listLabel)

    def setupSignals(self):
        self.ui.pushButtonSelectAllSystem.clicked.connect(lambda: self.select_all(self.ui.listSystem))
        self.ui.pushButtonDeselectAllSystem.clicked.connect(lambda: self.deselect_all(self.ui.listSystem))
        self.ui.pushButtonSelectAllStatus.clicked.connect(lambda: self.select_all(self.ui.listStatus))
        self.ui.pushButtonDeselectAllStatus.clicked.connect(lambda: self.deselect_all(self.ui.listStatus))
        self.ui.pushButtonSelectAllLabel.clicked.connect(lambda: self.select_all(self.ui.listLabel))
        self.ui.pushButtonDeselectAllLabel.clicked.connect(lambda: self.deselect_all(self.ui.listLabel))
        self.ui.pushButtonOk.clicked.connect(self.ok_clicked)
        self.ui.pushButtonCancel.clicked.connect(self.cancel_clicked)
        
    def select_all(self, list_view):
        model_qt = list_view.model()
        for index in range(model_qt.rowCount()):
            item = model_qt.item(index)
            if item.isCheckable() and item.checkState() == QtCore.Qt.Unchecked:
                item.setCheckState(QtCore.Qt.Checked)
            
    def deselect_all(self, list_view):
        model_qt = list_view.model()
        for index in range(model_qt.rowCount()):
            item = model_qt.item(index)
            if item.isCheckable() and item.checkState() == QtCore.Qt.Checked:
                item.setCheckState(QtCore.Qt.Unchecked)
                
    def ok_clicked(self):
        self.canceled = False
        self.hide()
        
    def cancel_clicked(self):
        self.canceled = True
        self.hide()

    def applyFiltering(self):
        def applyFilteringPerType(model, list_widget):
            model_qt = list_widget.model()
            for index in range(model_qt.rowCount()):
                item = model_qt.item(index)
                model.set_filtered(str(item.text()), item.checkState() != QtCore.Qt.Checked)
            
        if not self.canceled:      
            applyFilteringPerType(self.table.system_list_model, self.ui.listSystem)
            applyFilteringPerType(self.table.status_list_model, self.ui.listStatus)
            applyFilteringPerType(self.table.label_list_model, self.ui.listLabel)               
            self.table.hide_rows()