"""
     tasks/freerflag/CTaskFreerflag.py
     Copyright (C) 2011 STFC
     Author: Martyn Winn

"""
from PyQt4 import QtCore
from CCP4TaskWidget import CTaskWidget

class CTaskFreerflag(CTaskWidget):

  TASKNAME = 'freerflag'
  TASKVERSION = 0.0
  TASKMODULE= [ 'data_reduction', 'expt_data_utility' ]
  TASKTITLE='Generate a Free R set'
  DESCRIPTION="Generate a Free R set for a complete set of reflection indices to a given resolution (FreeRflag)"
  RANK = 2
  EXPORTMTZPARAMS = [ 'F_SIGF','FREEROUT' ]
  
  def __init__(self,parent):
    CTaskWidget.__init__(self,parent)

  def drawContents(self):
    self.setProgramHelpFile('freerflag')
    self.openFolder(folderFunction='inputData')
    self.createLine(['advice', 'By default, this task will create a new set of freeR flags'])
    self.createLine(['help', 'TESTING', 'widget', 'F_SIGF'])
    self.createLine(['widget', '-guiMode', 'radio', 'GEN_MODE'])
    self.createLine(['tip', 'FreeR column to be completed', 'widget','FREERFLAG'], toggle=['GEN_MODE', 'open', ['COMPLETE']])
    self.createLine(['label', 'Set fraction of reflections in freeR set', 'widget', 'FRAC',
                     'advice', 'Default fraction is 0.05'], toggle=['GEN_MODE', 'open', ['GEN_NEW']])
    self.openFolder(title='Advanced Options')
    self.createLine(['widget', 'UNIQUEIFY', 'label', 'Generate free flag for all unique reflections'])
    self.createLine(['label', 'Optionally, set high resolution limit at', 'widget', 'RESMAX', 'label', 'A.'], toggle=['UNIQUEIFY', 'open', [True]] )

    if self.isEditable():
      self.handle_gen_mode_changed()
      self.connect(self.container.controlParameters.GEN_MODE, QtCore.SIGNAL('dataChanged'), self.handle_gen_mode_changed)
      qcb = getattr(self.getWidget('FREERFLAG'), 'jobCombo', None)
      if qcb: qcb.setItemText(qcb.findData(QtCore.QVariant(-1)), '.. must be selected')

  def handle_gen_mode_changed(self):
    mode_new = self.container.controlParameters.GEN_MODE == 'GEN_NEW'
    self.container.inputData.FREERFLAG.setQualifier('allowUndefined', mode_new)
    self.getWidget('FREERFLAG').validate()

