예제 #1
0
 def __init__(self, parent, afefuc, item = None):
     self.parent = parent
     self.dialog = QtGui.QDialog()
     self.form = Ui_UseCaseForm()
     self.afefuc = afefuc
     self.item = item[1]
     self.item_original = item[0]
     self.actors = afefuc['project'].actors
예제 #2
0
class UseCaseFormWrapper():
    def __init__(self, parent, afefuc, item = None):
        self.parent = parent
        self.dialog = QtGui.QDialog()
        self.form = Ui_UseCaseForm()
        self.afefuc = afefuc
        self.item = item[1]
        self.item_original = item[0]
        self.actors = afefuc['project'].actors

    def load(self):
        self.form.titleEdit.setText(_fromUtf8(converter.itemsToText(self.item.title, edit = True)))
        self.form.idEdit.setText(_fromUtf8(self.item.identifier))
        self.form.summaryTextEdit.setPlainText(_fromUtf8(converter.itemsToText(self.item.summary, edit = True)))
        self.form.remarksTextEdit.setPlainText(_fromUtf8(converter.itemsToText(self.item.remarks, edit = True)))


        if self.item.priority:
            index = self.form.priorityComboBox.findText(_fromUtf8(self.item.priority.item.name))
            if index != -1:
                self.form.priorityComboBox.setCurrentIndex(index)

        if self.item.goal_level:
            index = self.form.goalLevelComboBox.findText(_fromUtf8(self.item.goal_level.item.name))
            if index != -1:
                self.form.goalLevelComboBox.setCurrentIndex(index)

        mainactorlist = []        
        otheractorlist = []
    
        mainActorlayout = QtGui.QVBoxLayout()
        for act in self.actors:
            chekMain = QtGui.QCheckBox(act.name)
            if len(self.item.main_actors) != 0:
                if act.name in self.item.main_actors:
                    chekMain.setChecked(True)
                else:
                    chekMain.setEnabled(False)
            chekMain.setObjectName(act.name)
            mainActorlayout.addWidget(chekMain)
            mainactorlist.append(chekMain)    
            if len(self.item.main_actors) != 0:                           
                QtCore.QObject.connect(chekMain, QtCore.SIGNAL("stateChanged(int)"), lambda: self.setEditEnableAndDisableMainActorList(otheractorlist,mainactorlist))
            else:
                QtCore.QObject.connect(chekMain, QtCore.SIGNAL("stateChanged(int)"), lambda: self.setEnableAndDisableMainActorList(otheractorlist,mainactorlist))
        self.form.mainActorTab.setLayout(mainActorlayout)
        
       
        otherActorslayout = QtGui.QVBoxLayout()
        for othact in self.actors:
            chekOther = QtGui.QCheckBox(othact.name)
            if len(self.item.other_actors) != 0:
                if othact.name in self.item.other_actors:
                    chekOther.setChecked(True)
                else:
                    chekOther.setEnabled(False)
                    chekOther.setChecked(False)

            chekOther.setObjectName(othact.name)
            otherActorslayout.addWidget(chekOther)
            otheractorlist.append(chekOther)
            
            if len(self.item.other_actors) != 0:
                QtCore.QObject.connect(chekOther, QtCore.SIGNAL("stateChanged(int)"), lambda: self.setEditEnableAndDisableOtherAcotrList(otheractorlist,mainactorlist))
            else:
                QtCore.QObject.connect(chekOther, QtCore.SIGNAL("stateChanged(int)"), lambda: self.setEnableAndDisableOtherAcotrList(otheractorlist,mainactorlist))    
        self.form.otherActorsTab.setLayout(otherActorslayout)

        if len(self.item.main_actors) != 0 and len(self.item.other_actors) != 0 : 
            for i in range(len(mainactorlist)):
                if mainactorlist[i].checkState() == 0 and otheractorlist[i].checkState() == 0:
                    mainactorlist[i].setEnabled(True)
                    otheractorlist[i].setEnabled(True)     
        elif len(self.item.main_actors) != 0 and len(self.item.other_actors) == 0:             
            for i in range(len(mainactorlist)):
                if mainactorlist[i].checkState() == 2:
                    otheractorlist[i].setEnabled(False)
        elif  len(self.item.main_actors) == 0 and len(self.item.other_actors) != 0:             
            for i in range(len(mainactorlist)):
                if otheractorlist[i].checkState() == 2 :
                    mainactorlist[i].setEnabled(False)     
                    
        
    def show(self):
        
        self.form.setupUi(self.dialog)

        for p in self.afefuc['project'].ucspec.priorities:
            self.form.priorityComboBox.addItem(p.name, p)

        for p in self.afefuc['project'].ucspec.goal_levels:
            self.form.goalLevelComboBox.addItem(p.name, p)

        self.modelEV = EventsTableModel(self.form.eventsView, self.afefuc, (self.item_original, self.item))
        self.form.eventsView.setModel(self.modelEV)
        #self.form.eventsView.setItemDelegateForColumn(2, PushButtonDelegate(self.form.eventsView, "X"))
        self.form.eventsView.horizontalHeader().setResizeMode(0, QtGui.QHeaderView.ResizeToContents)
        self.form.eventsView.horizontalHeader().setResizeMode(1, QtGui.QHeaderView.Stretch)
        #self.form.eventsView.setColumnWidth(2, 20)
        self.form.eventsView.horizontalHeader().hide()
        self.form.eventsView.verticalHeader().hide()
        self.form.eventsView.setEditTriggers(QtGui.QAbstractItemView.CurrentChanged)
        self.form.eventsView.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows)
        self.form.eventsView.setSelectionMode(QtGui.QAbstractItemView.SingleSelection)

        self.modelMS = MainScenarioTableModel(self.form.mainScenarioView, self.afefuc, (self.item_original, self.item), self.modelEV)
        self.form.mainScenarioView.setModel(self.modelMS)
        #self.form.mainScenarioView.setItemDelegateForColumn(2, PushButtonDelegate(self.form.mainScenarioView, "E"))
        #self.form.mainScenarioView.setItemDelegateForColumn(3, PushButtonDelegate(self.form.mainScenarioView, "X"))
        self.form.mainScenarioView.horizontalHeader().setResizeMode(0, QtGui.QHeaderView.ResizeToContents)
        self.form.mainScenarioView.horizontalHeader().setResizeMode(1, QtGui.QHeaderView.Stretch)
        self.form.mainScenarioView.setColumnWidth(2, 20)
        self.form.mainScenarioView.setColumnWidth(3, 20)
        self.form.mainScenarioView.horizontalHeader().hide()
        self.form.mainScenarioView.verticalHeader().hide()
        self.form.mainScenarioView.setEditTriggers(QtGui.QAbstractItemView.CurrentChanged)
        self.form.mainScenarioView.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows)
        self.form.mainScenarioView.setSelectionMode(QtGui.QAbstractItemView.SingleSelection)

        conditions = [
            (self.form.triView, self.item.triggers),
            (self.form.prcView, self.item.preconditions),
            (self.form.pocView, self.item.postconditions),
        ]

        for v, c in conditions:
            m = ConditionsTableModel(v, self.afefuc, (self.item_original, self.item), c)
            v.setModel(m)
            v.horizontalHeader().hide()
            v.verticalHeader().hide()
            v.horizontalHeader().setResizeMode(0, QtGui.QHeaderView.ResizeToContents)
            v.horizontalHeader().setResizeMode(1, QtGui.QHeaderView.Stretch)
            v.setEditTriggers(QtGui.QAbstractItemView.CurrentChanged)
            v.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows)
            v.setSelectionMode(QtGui.QAbstractItemView.SingleSelection)
        
        QtCore.QObject.connect(self.form.insertStepMSButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.clickedInsertStepMSButton)
        QtCore.QObject.connect(self.form.addEventMSButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.clickedAddEventMSButton)
        QtCore.QObject.connect(self.form.deleteMSButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.clickedDeleteMSButton)
        QtCore.QObject.connect(self.form.moveUpMSButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.clickedMoveUpMSButton)
        QtCore.QObject.connect(self.form.moveDownMSButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.clickedMoveDownMSButton)
        QtCore.QObject.connect(self.form.insertStepEvButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.clickedInsertStepEvButton)
        QtCore.QObject.connect(self.form.deleteEvButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.clickedDeleteEvButton)
        QtCore.QObject.connect(self.form.moveUpEvButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.clickedMoveUpEvButton)
        QtCore.QObject.connect(self.form.moveDownEvButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.clickedMoveDownEvButton)
        QtCore.QObject.connect(self.form.propertiesEvButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.clickedPropertiesEvButton)
        QtCore.QObject.connect(self.form.titleEdit, QtCore.SIGNAL(_fromUtf8("editingFinished()")), self.editingFinishedTitleEdit)
        QtCore.QObject.connect(self.form.idEdit, QtCore.SIGNAL(_fromUtf8("editingFinished()")), self.editingFinishedIdEdit)
        QtCore.QObject.connect(self.form.insertTriButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.clickedInsertTriButton)
        QtCore.QObject.connect(self.form.deleteTriButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.clickedDeleteTriButton)
        QtCore.QObject.connect(self.form.moveUpTriButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.clickedMoveUpTriButton)
        QtCore.QObject.connect(self.form.moveDownTriButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.clickedMoveDownTriButton)
        QtCore.QObject.connect(self.form.insertPrCButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.clickedInsertPrCButton)
        QtCore.QObject.connect(self.form.deletePrCButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.clickedDeletePrCButton)
        QtCore.QObject.connect(self.form.moveUpPrCButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.clickedMoveUpPrCButton)
        QtCore.QObject.connect(self.form.moveDownPrCButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.clickedMoveDownPrCButton)
        QtCore.QObject.connect(self.form.insertPoCButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.clickedInsertPoCButton)
        QtCore.QObject.connect(self.form.deletePoCButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.clickedDeletePoCButton)
        QtCore.QObject.connect(self.form.moveUpPoCButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.clickedMoveUpPoCButton)
        QtCore.QObject.connect(self.form.moveDownPoCButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.clickedMoveDownPoCButton)
        QtCore.QObject.connect(self.form.boxButton, QtCore.SIGNAL(_fromUtf8("accepted()")), self.clickedOKButton)
        QtCore.QObject.connect(self.form.boxButton, QtCore.SIGNAL(_fromUtf8("rejected()")), self.clickedCancelButton)

        #self.form.tabWidget.removeTab(2)

        self.load()

        self.dialog.exec_()

    def setEnableAndDisableMainActorList(self,otheractorlists,mainactorlists):
        for mainactorlist in mainactorlists:
            if mainactorlist.checkState()== 2:
                oindex = mainactorlists.index(mainactorlist)
                otheractorlists[oindex].setEnabled(False)
                if str(mainactorlist.objectName()).split("_")[0] not in self.item.main_actors:
                    self.item.main_actors.append(str(mainactorlist.objectName()).split("_")[0])

            if mainactorlist.checkState()== 0:    
                oindex = mainactorlists.index(mainactorlist)
                otheractorlists[oindex].setEnabled(True)
                # self.item.main_actors.remove("A2")
 
    def setEnableAndDisableOtherAcotrList(self,otheractorlists,mainactorlists):
        for otheractorlist in otheractorlists:
            if otheractorlist.checkState()== 2:
                oindex = otheractorlists.index(otheractorlist)
                mainactorlists[oindex].setEnabled(False)
                if str(otheractorlist.objectName()).split("_")[0] not in self.item.other_actors:
                    self.item.other_actors.append(str(otheractorlist.objectName()).split("_")[0])
            if otheractorlist.checkState()== 0:
                oindex = otheractorlists.index(otheractorlist)
                mainactorlists[oindex].setEnabled(True)
                # self.item.other_actors.remove(str(otheractorlist.objectName()).split("_")[0])

    def setEditEnableAndDisableMainActorList(self,otheractorlists,mainactorlists):
        self.item.main_actors=[]  
        for mainactorlist in mainactorlists:
            if mainactorlist.checkState()== 2:
                
                oindex = mainactorlists.index(mainactorlist)
                otheractorlists[oindex].setEnabled(False)
                if str(mainactorlist.objectName()).split("_")[0] not in self.item.main_actors:
                    self.item.main_actors.append(str(mainactorlist.objectName()).split("_")[0])
                
            if mainactorlist.checkState()== 0:    
                oindex = mainactorlists.index(mainactorlist)
                otheractorlists[oindex].setEnabled(True)
                
  

    def setEditEnableAndDisableOtherAcotrList(self,otheractorlists,mainactorlists):
        self.item.other_actors=[]
        for otheractorlist in otheractorlists:
            if otheractorlist.checkState()== 2:
                oindex = otheractorlists.index(otheractorlist)
                mainactorlists[oindex].setEnabled(False)
                if str(otheractorlist.objectName()).split("_")[0] not in self.item.other_actors:
                    self.item.other_actors.append(str(otheractorlist.objectName()).split("_")[0])
            if otheractorlist.checkState()== 0:
                oindex = otheractorlists.index(otheractorlist)
                mainactorlists[oindex].setEnabled(True)
            

    def clickedCancelButton(self):
        self.dialog.close()

    def clickedOKButton(self):
#       index = self.form.priorityComboBox.currentIndex()
#       priority = self.form.priorityComboBox.itemData(index).toPyObject()
#
#       try:
#           self.item.priority = priority.get_ref()
#       except:
#           validation.errorMessage(self.dialog, "Priority must be specified")
#           return

#       index = self.form.goalLevelComboBox.currentIndex()
#       priority = self.form.goalLevelComboBox.itemData(index).toPyObject()
#
#       try:
#           self.item.goal_level = priority.get_ref()
#       except:
#           validation.errorMessage(self.dialog, "Goal level must be specified")
#           return

#       try:
#           self.item.remarks = converter.textToItems(
#               self.afefuc['project'],
#               unicode(self.form.remarksTextEdit.toPlainText().toUtf8(), "utf-8")
#           )
#       except:
#           validation.errorMessage(self.dialog, "Invalid reference in remarks")
#           return
#
#       try:
#           self.item.summary = converter.textToItems(
#               self.afefuc['project'],
#               unicode(self.form.summaryTextEdit.toPlainText().toUtf8(), "utf-8")
#           )
#       except:
#           validation.errorMessage(self.dialog, "Invalid reference in summary")
#           return

        # validate

        errors = validation.usecase(self.afefuc['project'], self.item, self.item_original is None, self.form)

        if errors:
            validation._show(self.dialog, errors)
            return
        if self.item_original:
            self.parent.model.updateItem((self.item_original, self.item))
        else:
            self.parent.model.insertItem((self.item_original, self.item))

        self.dialog.close()
   
    def clickedInsertStepMSButton(self):
        print "!!!"

        step = model.Step()
        step.setParent(self.item)

        print self.form.mainScenarioView.selectedIndexes()

        if len(self.form.mainScenarioView.selectedIndexes()) != 0:
            position = self.form.mainScenarioView.selectedIndexes()[0].row()

            self.modelMS.insertItem(step, position + 1)
        else:
            self.modelMS.insertItem(step)

    def clickedAddEventMSButton(self):
        if len(self.form.mainScenarioView.selectedIndexes()) == 2:
            position = self.form.mainScenarioView.selectedIndexes()[0].row()

            self.modelEV.insertEvent(position)

    def clickedDeleteMSButton(self):
        if len(self.form.mainScenarioView.selectedIndexes()) == 2:
            position = self.form.mainScenarioView.selectedIndexes()[0].row()

            self.modelMS.removeItem(position)

    def clickedMoveUpMSButton(self):
        if len(self.form.mainScenarioView.selectedIndexes()) == 2:
            position = self.form.mainScenarioView.selectedIndexes()[0].row()

            self.modelMS.movePositionUp(position)

    def clickedMoveDownMSButton(self):
        if len(self.form.mainScenarioView.selectedIndexes()) == 2:
            position = self.form.mainScenarioView.selectedIndexes()[0].row()

            self.modelMS.movePositionDown(position)

    def clickedInsertStepEvButton(self):
        if len(self.form.eventsView.selectedIndexes()) == 2:
            position = self.form.eventsView.selectedIndexes()[0].row()

            self.modelEV.insertStep(position)

    def clickedDeleteEvButton(self):
        if len(self.form.eventsView.selectedIndexes()) == 2:
            position = self.form.eventsView.selectedIndexes()[0].row()

            self.modelEV.removeItem(position)

    def clickedPropertiesEvButton(self):
        if len(self.form.eventsView.selectedIndexes()) == 2:
            position = self.form.eventsView.selectedIndexes()[0].row()

            EventPropertiesFormWrapper(
                    self,
                    self.afefuc['project'],
                    position
            ).show()

    def clickedMoveUpEvButton(self):
        if len(self.form.eventsView.selectedIndexes()) == 2:
            position = self.form.eventsView.selectedIndexes()[0].row()

            self.modelEV.movePositionUp(position)

    def clickedMoveDownEvButton(self):
        if len(self.form.eventsView.selectedIndexes()) == 2:
            position = self.form.eventsView.selectedIndexes()[0].row()

            self.modelEV.movePositionDown(position)

    def editingFinishedTitleEdit(self):
        try:
            self.item.title = converter.textToItems(
                self.afefuc['project'],
                unicode(
                        self.form.titleEdit.text().toUtf8(),
                        'utf-8'
                ),
                (
                        self.item_original,
                        self.item
                )
            )
        except ValueError:
            validation.errorMessage(None, "Invalid reference in title")
            return

        self.modelEV.reset()
        self.modelMS.reset()

    def editingFinishedIdEdit(self):
        self.item.identifier = unicode(self.form.idEdit.text().toUtf8(), 'utf-8')

        self.modelEV.reset()
        self.modelMS.reset()

    def clickedInsertTriButton(self):
        condition = model.Trigger()

        if len(self.form.triView.selectedIndexes()) != 0:
            position = self.form.triView.selectedIndexes()[0].row()

            self.form.triView.model().insertItem(condition, position)
        else:
            self.form.triView.model().insertItem(condition)

    def clickedDeleteTriButton(self):
        if len(self.form.triView.selectedIndexes()) == 2:
            position = self.form.triView.selectedIndexes()[0].row()

            self.form.triView.model().removeItem(position)

    def clickedMoveUpTriButton(self):
        if len(self.form.triView.selectedIndexes()) == 2:
            position = self.form.triView.selectedIndexes()[0].row()

            self.form.triView.model().movePositionUp(position)

    def clickedMoveDownTriButton(self):
        if len(self.form.triView.selectedIndexes()) == 2:
            position = self.form.triView.selectedIndexes()[0].row()

            self.form.triView.model().movePositionDown(position)

    def clickedInsertPrCButton(self):
        condition = model.PreCondition()

        if len(self.form.prcView.selectedIndexes()) != 0:
            position = self.form.prcView.selectedIndexes()[0].row()

            self.form.prcView.model().insertItem(condition, position)
        else:
            self.form.prcView.model().insertItem(condition)

    def clickedDeletePrCButton(self):
        if len(self.form.prcView.selectedIndexes()) == 2:
            position = self.form.prcView.selectedIndexes()[0].row()

            self.form.prcView.model().removeItem(position)

    def clickedMoveUpPrCButton(self):
        if len(self.form.prcView.selectedIndexes()) == 2:
            position = self.form.prcView.selectedIndexes()[0].row()

            self.form.prcView.model().movePositionUp(position)

    def clickedMoveDownPrCButton(self):
        if len(self.form.prcView.selectedIndexes()) == 2:
            position = self.form.prcView.selectedIndexes()[0].row()

            self.form.prcView.model().movePositionDown(position)

    def clickedInsertPoCButton(self):
        condition = model.PostCondition()

        if len(self.form.pocView.selectedIndexes()) != 0:
            position = self.form.pocView.selectedIndexes()[0].row()

            self.form.pocView.model().insertItem(condition, position)
        else:
            self.form.pocView.model().insertItem(condition)

    def clickedDeletePoCButton(self):
        if len(self.form.pocView.selectedIndexes()) == 2:
            position = self.form.pocView.selectedIndexes()[0].row()

            self.form.pocView.model().removeItem(position)

    def clickedMoveUpPoCButton(self):
        if len(self.form.pocView.selectedIndexes()) == 2:
            position = self.form.pocView.selectedIndexes()[0].row()

            self.form.pocView.model().movePositionUp(position)

    def clickedMoveDownPoCButton(self):
        if len(self.form.pocView.selectedIndexes()) == 2:
            position = self.form.pocView.selectedIndexes()[0].row()
            self.form.pocView.model().movePositionDown(position)
예제 #3
0
class UseCaseFormWrapper():
	def __init__(self, parent, afefuc, item = None):
		self.parent = parent

		self.dialog = QtGui.QDialog()
		self.form = Ui_UseCaseForm()
		self.afefuc = afefuc
		self.item = item[1]
		self.item_original = item[0]

	def load(self):
		self.form.titleEdit.setText(_fromUtf8(converter.itemsToText(self.item.title, edit = True)))
		self.form.idEdit.setText(_fromUtf8(self.item.identifier))

		self.form.actorMainEdit.setText(_fromUtf8(", ".join(["[%s] %s" % (a.item.identifier, a.item.name) for a in self.item.main_actors])))
		self.form.actorOtherEdit.setText(_fromUtf8(", ".join(["[%s] %s" % (a.item.identifier, a.item.name) for a in self.item.other_actors])))

		self.form.summaryTextEdit.setPlainText(_fromUtf8(converter.itemsToText(self.item.summary, edit = True)))
		self.form.remarksTextEdit.setPlainText(_fromUtf8(converter.itemsToText(self.item.remarks, edit = True)))


		if self.item.priority:
			index = self.form.priorityComboBox.findText(_fromUtf8(self.item.priority.item.name))
			if index != -1:
				self.form.priorityComboBox.setCurrentIndex(index)

		if self.item.goal_level:
			index = self.form.goalLevelComboBox.findText(_fromUtf8(self.item.goal_level.item.name))
			if index != -1:
				self.form.goalLevelComboBox.setCurrentIndex(index)

	def show(self):
		self.form.setupUi(self.dialog)

		for p in self.afefuc['project'].ucspec.priorities:
			self.form.priorityComboBox.addItem(p.name, p)

		for p in self.afefuc['project'].ucspec.goal_levels:
			self.form.goalLevelComboBox.addItem(p.name, p)

		self.modelEV = EventsTableModel(self.form.eventsView, self.afefuc, (self.item_original, self.item))
		self.form.eventsView.setModel(self.modelEV)
		#self.form.eventsView.setItemDelegateForColumn(2, PushButtonDelegate(self.form.eventsView, "X"))
		self.form.eventsView.horizontalHeader().setResizeMode(0, QtGui.QHeaderView.ResizeToContents)
		self.form.eventsView.horizontalHeader().setResizeMode(1, QtGui.QHeaderView.Stretch)
		#self.form.eventsView.setColumnWidth(2, 20)
		self.form.eventsView.horizontalHeader().hide()
		self.form.eventsView.verticalHeader().hide()
		self.form.eventsView.setEditTriggers(QtGui.QAbstractItemView.CurrentChanged)
		self.form.eventsView.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows)
		self.form.eventsView.setSelectionMode(QtGui.QAbstractItemView.SingleSelection)

		self.modelMS = MainScenarioTableModel(self.form.mainScenarioView, self.afefuc, (self.item_original, self.item), self.modelEV)
		self.form.mainScenarioView.setModel(self.modelMS)
		#self.form.mainScenarioView.setItemDelegateForColumn(2, PushButtonDelegate(self.form.mainScenarioView, "E"))
		#self.form.mainScenarioView.setItemDelegateForColumn(3, PushButtonDelegate(self.form.mainScenarioView, "X"))
		self.form.mainScenarioView.horizontalHeader().setResizeMode(0, QtGui.QHeaderView.ResizeToContents)
		self.form.mainScenarioView.horizontalHeader().setResizeMode(1, QtGui.QHeaderView.Stretch)
		self.form.mainScenarioView.setColumnWidth(2, 20)
		self.form.mainScenarioView.setColumnWidth(3, 20)
		self.form.mainScenarioView.horizontalHeader().hide()
		self.form.mainScenarioView.verticalHeader().hide()
		self.form.mainScenarioView.setEditTriggers(QtGui.QAbstractItemView.CurrentChanged)
		self.form.mainScenarioView.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows)
		self.form.mainScenarioView.setSelectionMode(QtGui.QAbstractItemView.SingleSelection)

		conditions = [
				(self.form.triView, self.item.triggers),
				(self.form.prcView, self.item.preconditions),
				(self.form.pocView, self.item.postconditions),
		]

		for v, c in conditions:
			m = ConditionsTableModel(v, self.afefuc, (self.item_original, self.item), c)
			v.setModel(m)
			v.horizontalHeader().hide()
			v.verticalHeader().hide()
			v.horizontalHeader().setResizeMode(0, QtGui.QHeaderView.ResizeToContents)
			v.horizontalHeader().setResizeMode(1, QtGui.QHeaderView.Stretch)
			v.setEditTriggers(QtGui.QAbstractItemView.CurrentChanged)
			v.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows)
			v.setSelectionMode(QtGui.QAbstractItemView.SingleSelection)

		QtCore.QObject.connect(self.form.actorMainSelectButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.clickedActorMainSelectButton)
		QtCore.QObject.connect(self.form.actorOthersSelectButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.clickedActorOthersSelectButton)
		QtCore.QObject.connect(self.form.insertStepMSButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.clickedInsertStepMSButton)
		QtCore.QObject.connect(self.form.addEventMSButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.clickedAddEventMSButton)
		QtCore.QObject.connect(self.form.deleteMSButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.clickedDeleteMSButton)
		QtCore.QObject.connect(self.form.moveUpMSButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.clickedMoveUpMSButton)
		QtCore.QObject.connect(self.form.moveDownMSButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.clickedMoveDownMSButton)
		QtCore.QObject.connect(self.form.insertStepEvButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.clickedInsertStepEvButton)
		QtCore.QObject.connect(self.form.deleteEvButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.clickedDeleteEvButton)
		QtCore.QObject.connect(self.form.moveUpEvButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.clickedMoveUpEvButton)
		QtCore.QObject.connect(self.form.moveDownEvButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.clickedMoveDownEvButton)
		QtCore.QObject.connect(self.form.propertiesEvButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.clickedPropertiesEvButton)
		QtCore.QObject.connect(self.form.titleEdit, QtCore.SIGNAL(_fromUtf8("editingFinished()")), self.editingFinishedTitleEdit)
		QtCore.QObject.connect(self.form.idEdit, QtCore.SIGNAL(_fromUtf8("editingFinished()")), self.editingFinishedIdEdit)
		QtCore.QObject.connect(self.form.insertTriButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.clickedInsertTriButton)
		QtCore.QObject.connect(self.form.deleteTriButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.clickedDeleteTriButton)
		QtCore.QObject.connect(self.form.moveUpTriButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.clickedMoveUpTriButton)
		QtCore.QObject.connect(self.form.moveDownTriButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.clickedMoveDownTriButton)
		QtCore.QObject.connect(self.form.insertPrCButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.clickedInsertPrCButton)
		QtCore.QObject.connect(self.form.deletePrCButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.clickedDeletePrCButton)
		QtCore.QObject.connect(self.form.moveUpPrCButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.clickedMoveUpPrCButton)
		QtCore.QObject.connect(self.form.moveDownPrCButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.clickedMoveDownPrCButton)
		QtCore.QObject.connect(self.form.insertPoCButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.clickedInsertPoCButton)
		QtCore.QObject.connect(self.form.deletePoCButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.clickedDeletePoCButton)
		QtCore.QObject.connect(self.form.moveUpPoCButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.clickedMoveUpPoCButton)
		QtCore.QObject.connect(self.form.moveDownPoCButton, QtCore.SIGNAL(_fromUtf8("clicked()")), self.clickedMoveDownPoCButton)
		QtCore.QObject.connect(self.form.boxButton, QtCore.SIGNAL(_fromUtf8("accepted()")), self.clickedOKButton)
		QtCore.QObject.connect(self.form.boxButton, QtCore.SIGNAL(_fromUtf8("rejected()")), self.clickedCancelButton)

		#self.form.tabWidget.removeTab(2)

		self.load()

		self.dialog.exec_()

	def clickedCancelButton(self):
		self.dialog.close()

	def clickedOKButton(self):
# 		index = self.form.priorityComboBox.currentIndex()
# 		priority = self.form.priorityComboBox.itemData(index).toPyObject()
#
# 		try:
# 			self.item.priority = priority.get_ref()
# 		except:
# 			validation.errorMessage(self.dialog, "Priority must be specified")
# 			return

# 		index = self.form.goalLevelComboBox.currentIndex()
# 		priority = self.form.goalLevelComboBox.itemData(index).toPyObject()
#
# 		try:
# 			self.item.goal_level = priority.get_ref()
# 		except:
# 			validation.errorMessage(self.dialog, "Goal level must be specified")
# 			return

# 		try:
# 			self.item.remarks = converter.textToItems(
# 				self.afefuc['project'],
# 				unicode(self.form.remarksTextEdit.toPlainText().toUtf8(), "utf-8")
# 			)
# 		except:
# 			validation.errorMessage(self.dialog, "Invalid reference in remarks")
# 			return
#
# 		try:
# 			self.item.summary = converter.textToItems(
# 				self.afefuc['project'],
# 				unicode(self.form.summaryTextEdit.toPlainText().toUtf8(), "utf-8")
# 			)
# 		except:
# 			validation.errorMessage(self.dialog, "Invalid reference in summary")
# 			return

		# validate

		errors = validation.usecase(self.afefuc['project'], self.item, self.item_original is None, self.form)

		if errors:
			validation._show(self.dialog, errors)
			return

		if self.item_original:
			self.parent.model.updateItem((self.item_original, self.item))
		else:
			self.parent.model.insertItem((self.item_original, self.item))

		self.dialog.close()

	def clickedActorMainSelectButton(self):
		SelectActorsFormWrapper(
				self,
				self.afefuc['project'],
				item = (None, self.item),
				target = self.item.main_actors,
				unselectable = self.item.other_actors,
				single = False,
		).show()

		self.form.actorMainEdit.setText(_fromUtf8(", ".join(["[%s] %s" % (a.item.identifier, a.item.name) for a in self.item.main_actors])))

	def clickedActorOthersSelectButton(self):
		SelectActorsFormWrapper(
				self,
				self.afefuc['project'],
				item = (None, self.item),
				target = self.item.other_actors,
				unselectable = self.item.main_actors,
				single = False
		).show()

		self.form.actorOtherEdit.setText(_fromUtf8(", ".join(["[%s] %s" % (a.item.identifier, a.item.name) for a in self.item.other_actors])))

	def clickedInsertStepMSButton(self):
		print "!!!"

		step = model.Step()
		step.setParent(self.item)

		print self.form.mainScenarioView.selectedIndexes()

		if len(self.form.mainScenarioView.selectedIndexes()) != 0:
			position = self.form.mainScenarioView.selectedIndexes()[0].row()

			self.modelMS.insertItem(step, position + 1)
		else:
			self.modelMS.insertItem(step)

	def clickedAddEventMSButton(self):
		if len(self.form.mainScenarioView.selectedIndexes()) == 2:
			position = self.form.mainScenarioView.selectedIndexes()[0].row()

			self.modelEV.insertEvent(position)

	def clickedDeleteMSButton(self):
		if len(self.form.mainScenarioView.selectedIndexes()) == 2:
			position = self.form.mainScenarioView.selectedIndexes()[0].row()

			self.modelMS.removeItem(position)

	def clickedMoveUpMSButton(self):
		if len(self.form.mainScenarioView.selectedIndexes()) == 2:
			position = self.form.mainScenarioView.selectedIndexes()[0].row()

			self.modelMS.movePositionUp(position)

	def clickedMoveDownMSButton(self):
		if len(self.form.mainScenarioView.selectedIndexes()) == 2:
			position = self.form.mainScenarioView.selectedIndexes()[0].row()

			self.modelMS.movePositionDown(position)

	def clickedInsertStepEvButton(self):
		if len(self.form.eventsView.selectedIndexes()) == 2:
			position = self.form.eventsView.selectedIndexes()[0].row()

			self.modelEV.insertStep(position)

	def clickedDeleteEvButton(self):
		if len(self.form.eventsView.selectedIndexes()) == 2:
			position = self.form.eventsView.selectedIndexes()[0].row()

			self.modelEV.removeItem(position)

	def clickedPropertiesEvButton(self):
		if len(self.form.eventsView.selectedIndexes()) == 2:
			position = self.form.eventsView.selectedIndexes()[0].row()

			EventPropertiesFormWrapper(
					self,
					self.afefuc['project'],
					position
			).show()

	def clickedMoveUpEvButton(self):
		if len(self.form.eventsView.selectedIndexes()) == 2:
			position = self.form.eventsView.selectedIndexes()[0].row()

			self.modelEV.movePositionUp(position)

	def clickedMoveDownEvButton(self):
		if len(self.form.eventsView.selectedIndexes()) == 2:
			position = self.form.eventsView.selectedIndexes()[0].row()

			self.modelEV.movePositionDown(position)

	def editingFinishedTitleEdit(self):
		try:
			self.item.title = converter.textToItems(
				self.afefuc['project'],
				unicode(
						self.form.titleEdit.text().toUtf8(),
						'utf-8'
				),
				(
						self.item_original,
						self.item
				)
			)
		except ValueError:
			validation.errorMessage(None, "Invalid reference in title")
			return

		self.modelEV.reset()
		self.modelMS.reset()

	def editingFinishedIdEdit(self):
		self.item.identifier = unicode(self.form.idEdit.text().toUtf8(), 'utf-8')

		self.modelEV.reset()
		self.modelMS.reset()

	def clickedInsertTriButton(self):
		condition = model.Trigger()

		if len(self.form.triView.selectedIndexes()) != 0:
			position = self.form.triView.selectedIndexes()[0].row()

			self.form.triView.model().insertItem(condition, position)
		else:
			self.form.triView.model().insertItem(condition)

	def clickedDeleteTriButton(self):
		if len(self.form.triView.selectedIndexes()) == 2:
			position = self.form.triView.selectedIndexes()[0].row()

			self.form.triView.model().removeItem(position)

	def clickedMoveUpTriButton(self):
		if len(self.form.triView.selectedIndexes()) == 2:
			position = self.form.triView.selectedIndexes()[0].row()

			self.form.triView.model().movePositionUp(position)

	def clickedMoveDownTriButton(self):
		if len(self.form.triView.selectedIndexes()) == 2:
			position = self.form.triView.selectedIndexes()[0].row()

			self.form.triView.model().movePositionDown(position)

	def clickedInsertPrCButton(self):
		condition = model.PreCondition()

		if len(self.form.prcView.selectedIndexes()) != 0:
			position = self.form.prcView.selectedIndexes()[0].row()

			self.form.prcView.model().insertItem(condition, position)
		else:
			self.form.prcView.model().insertItem(condition)

	def clickedDeletePrCButton(self):
		if len(self.form.prcView.selectedIndexes()) == 2:
			position = self.form.prcView.selectedIndexes()[0].row()

			self.form.prcView.model().removeItem(position)

	def clickedMoveUpPrCButton(self):
		if len(self.form.prcView.selectedIndexes()) == 2:
			position = self.form.prcView.selectedIndexes()[0].row()

			self.form.prcView.model().movePositionUp(position)

	def clickedMoveDownPrCButton(self):
		if len(self.form.prcView.selectedIndexes()) == 2:
			position = self.form.prcView.selectedIndexes()[0].row()

			self.form.prcView.model().movePositionDown(position)

	def clickedInsertPoCButton(self):
		condition = model.PostCondition()

		if len(self.form.pocView.selectedIndexes()) != 0:
			position = self.form.pocView.selectedIndexes()[0].row()

			self.form.pocView.model().insertItem(condition, position)
		else:
			self.form.pocView.model().insertItem(condition)

	def clickedDeletePoCButton(self):
		if len(self.form.pocView.selectedIndexes()) == 2:
			position = self.form.pocView.selectedIndexes()[0].row()

			self.form.pocView.model().removeItem(position)

	def clickedMoveUpPoCButton(self):
		if len(self.form.pocView.selectedIndexes()) == 2:
			position = self.form.pocView.selectedIndexes()[0].row()

			self.form.pocView.model().movePositionUp(position)

	def clickedMoveDownPoCButton(self):
		if len(self.form.pocView.selectedIndexes()) == 2:
			position = self.form.pocView.selectedIndexes()[0].row()

			self.form.pocView.model().movePositionDown(position)