Пример #1
0
 def __init__(self, app):
     self.app = app
     self.techInfoDlg = TechInfoDlg(app)
     self.confirmDlg = ConfirmDlg(app)
     self.showCompleted = 0
     self.showObsolete = 0
     self.createUI()
Пример #2
0
 def __init__(self, app):
     self.app = app
     self.techInfoDlg = TechInfoDlg(app)
     self.confirmDlg = ConfirmDlg(app)
     self.showCompleted = 0
     self.showObsolete = 0
     self.createUI()
Пример #3
0
 def __init__(self, app):
     self.app = app
     self.showStructures = 1
     self.showShips = 0
     self.showOther = 0
     self.techID = 0
     self.sort = 'type'
     self.showLevels = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
     self.techInfoDlg = TechInfoDlg(app)
     self.createUI()
Пример #4
0
 def __init__(self, app):
     self.app = app
     self.showShips = 1
     self.showOther = 0
     self.techID = 0
     self.showLevels = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 99]
     self.techInfoDlg = TechInfoDlg(app)
     self.constructionDlg = ConstructionDlg(app)
     self.createUI()
     self.win.setTagAttr('ship', 'visible', 1)
     # set default sorting for technologies
     self.win.vTechs.setSort("text")
Пример #5
0
 def __init__(self, app):
     self.app = app
     self.player = None
     self.vPQueues = None
     self.queueNo = 5
     self.activeQueue = 0
     self.activeIndex = None
     self.changeQtyDlg = ChangeQtyDlg(app)
     self.newGlobalTaskDlg = NewGlobalTaskDlg(self.app)
     self.constructionDlg = ConstructionDlg(app)
     self.techInfoDlg = TechInfoDlg(app)
     self.confirmDlg = ConfirmDlg(app)
     self.createUI()
Пример #6
0
class ResearchDlg:

    def __init__(self, app):
        self.app = app
        self.techInfoDlg = TechInfoDlg(app)
        self.confirmDlg = ConfirmDlg(app)
        self.showCompleted = 0
        self.showObsolete = 0
        self.createUI()

    def display(self):
        self.win.vUnObs.enabled = 0
        self.win.vObs.enabled = 0
        self.show()
        # show window
        if not self.win.visible:
            self.win.show()
        # register for updates
        if self not in gdata.updateDlgs:
            gdata.updateDlgs.append(self)

    def hide(self):
        self.win.setStatus(_("Ready."))
        self.win.hide()
        # unregister updates
        if self in gdata.updateDlgs:
            gdata.updateDlgs.remove(self)

    def update(self):
        if self.win.visible:
            self.show()

    def show(self):
        player = client.getPlayer()
        # title
        self.win.vRQueueTitle.text = _('Research queue [%d pts/turn]') % (
            player.effSciPoints,
        )
        self.win.title = _("Research [TL%d]") % player.techLevel
        # Known techs
        items = []
        #~researchable = {}
        disabled = []
        taskIDs = {}
        for task in player.rsrchQueue:
            taskIDs[task.techID] = None
        for techID in player.techs.keys():
            if techID in player.obsoleteTechs and not self.showObsolete:
                continue
            tech = client.getTechInfo(techID)
            improvement = player.techs[techID]
            item = ui.Item(tech.name,
                techID = techID,
                tLevel = '%d-%d' % (tech.level, improvement),
                tStruct = (' ', '*')[tech.isStructure],
                tShip = (' ', '*')[tech.isShipEquip],
            )
            if improvement < Rules.techMaxImprovement and improvement < tech.maxImprovement:
                neededSci = Utils.getTechRCost(player, techID)
                if player.effSciPoints > 0:
                    item.tETC = res.formatTime(float(neededSci) / player.effSciPoints)
                else:
                    item.tETC = _("N/A")
                found = 0
                if taskIDs.has_key(techID):
                    item.foreground = (0xd0, 0xd0, 0xd0)
                else:
                    item.foreground = None
            else:
                item.tETC = res.getNA()
                item.foreground = (0x80, 0x80, 0x80)
                if not self.showCompleted:
                    # skip this item
                    continue
            if techID in player.obsoleteTechs:
                item.foreground = (0x80, 0x40, 0x40)
            items.append(item)
            disabled.extend(tech.researchDisables)
            #~for improvement in range(1, improvement + 1):
            #~    for techID in tech.researchEnables[improvement]:
            #~        researchable[techID] = 1
        self.win.vKTechs.items = items
        self.win.vKTechs.itemsChanged()
        # Research queue
        items = []
        index = 0
        queueTechs = []
        total = 0
        for task in player.rsrchQueue:
            tech = client.getTechInfo(task.techID)
            fulltech = client.getFullTechInfo(task.techID)
            queueTechs.append(task.techID)
            item = ui.Item(tech.name, techID = task.techID, index = index)
            researchSci = Utils.getTechRCost(player, task.techID, task.improvement)
            maxImprovement = min(Rules.techMaxImprovement,fulltech.maxImprovement)
            maxImpTotalSci = 0
            if task.improveToMax and task.improvement < maxImprovement:
                for impr in range(task.improvement+1,maxImprovement+1):
                    maxImpTotalSci += Utils.getTechRCost(player, task.techID, impr)
            item.tooltipTitle = _("Details")
            item.tooltip = _("Research points %d/%d, change %d pts/turn.") % (task.currSci, researchSci, task.changeSci)
            item.statustip = item.tooltip
            item.tImpToMax = ["", "*"][task.improveToMax]
            item.tImproveToMax = task.improveToMax
            if task.currSci > 0:
                item.tProgress = _("%d %%") % int(task.currSci * 100 / researchSci)
            else:
                item.tProgress = _("-")
            if task.changeSci > 0:
                value = float(researchSci - task.currSci) / max(task.changeSci, player.effSciPoints)
                total += int(value + 1)
                if player.effSciPoints > 0:
                    total += float(maxImpTotalSci) / player.effSciPoints
                    item.tETC = res.formatTime(value)
                else:
                    total = 0
                    item.tETC = res.getNA()
            elif task.changeSci < 0:
                value = - float(task.currSci) / min(task.changeSci, player.effSciPoints)
                item.tETC = _("[%s]") % res.formatTime(value)
            elif player.effSciPoints > 0:
                value = float(researchSci) / player.effSciPoints
                total += int(value + 1)
                total += float(maxImpTotalSci) / player.effSciPoints
                item.tETC = res.formatTime(value)
            else:
                item.tETC = res.getNA()
            item.tLevel = _("%d-%d") % (tech.level, task.improvement)
            items.append(item)
            index += 1
        self.win.vRQueue.items = items
        self.win.vRQueue.itemsChanged()
        self.win.vRQueueTop.enabled = 0
        self.win.vRQueueUp.enabled = 0
        self.win.vRQueueDown.enabled = 0
        self.win.vRQueueAbort.enabled = 0
        self.win.vRQueueRepat.enabled = 0
        self.win.vRQueueRepat.pressed = 0
        self.win.vRQueueInfo.enabled = 0
        if total == 0:
            self.win.vRTotal.text = _("N/A")
        else:
            self.win.vRTotal.text = res.formatTime(total)
        # Researchable techs
        items = []
        for techID in client.getAllTechIDs():
            if player.techs.has_key(techID) or techID in queueTechs \
                or techID in disabled:
                continue
            # can check requirements
            tech = client.getTechInfo(techID)
            if not hasattr(tech, "partialData"):
                continue
            item = ui.Item(tech.name, tLevel = tech.level, techID = techID)
            if hasattr(tech, 'isStructure'): item.tStruct = ('', '*')[tech.isStructure]
            else: item.tStruct = ''
            if hasattr(tech, 'isShipEquip'): item.tShip = ('', '*')[tech.isShipEquip]
            else: item.tShip = ''
            if hasattr(tech, 'researchMod'):
                neededSci = Utils.getTechRCost(player, techID)
                if player.effSciPoints > 0:
                    item.tETC = res.formatTime(float(neededSci) / player.effSciPoints)
                else:
                    item.tETC = _("N/A")
                item.foreground = None
            else:
                item.tSci = res.getNA()
                item.foreground = (0xc0, 0xc0, 0xc0)
                # skip this item
                continue
            if hasattr(tech, "researchDisables") and tech.researchDisables:
                item.foreground = (0xff, 0xff, 0x00)
            if client.getFullTechInfo(techID).finishResearchHandler == TechHandlers.finishResTLAdvance:
                item.foreground = gdata.sevColors[gdata.CRI]
            items.append(item)
        self.win.vRTechs.items = items
        self.win.vRTechs.itemsChanged()

    def onSelectKTech(self, widget, action, data):
        techID = self.win.vKTechs.selection[0].techID
        player = client.getPlayer()
        if techID in player.obsoleteTechs:
            self.win.vObs.enabled = 0
            self.win.vUnObs.enabled = 1
        else:
            self.win.vUnObs.enabled = 0
            self.win.vObs.enabled = 1

    def onKTechInfo(self, widget, action, data):
        if self.win.vKTechs.selection:
            self.techInfoDlg.display(self.win.vKTechs.selection[0].techID)

    def onSelectRTech(self, widget, action, data):
        # TODO implement
        pass

    def onRTechInfo(self, widget, action, data):
        if self.win.vRTechs.selection:
            self.techInfoDlg.display(self.win.vRTechs.selection[0].techID)

    def onSelectRQueueTech(self, widget, action, data):
        index = self.win.vRQueue.items.index(self.win.vRQueue.selection[0])
        self.win.vRQueueTop.enabled = index > 0
        self.win.vRQueueUp.enabled = index > 0
        self.win.vRQueueDown.enabled = index < len(self.win.vRQueue.items) - 1
        self.win.vRQueueAbort.enabled = 1
        self.win.vRQueueRepat.enabled = 1
        self.win.vRQueueRepat.pressed = self.win.vRQueue.selection[0].tImproveToMax
        self.win.vRQueueInfo.enabled = 1

    def onRQueueTechInfo(self, widget, action, data):
        if self.win.vRQueue.selection:
            self.techInfoDlg.display(self.win.vRQueue.selection[0].techID)

    def onCloseDlg(self, widget, action, data):
        self.hide()

    def onStartResearch(self, widget, action, data):
        if not self.win.vRTechs.selection:
            self.win.setStatus(_('Select technology to research.'))
            return
        else:
            techID = self.win.vRTechs.selection[0].techID
        try:
            self.win.setStatus(_('Executing START RESEARCH command...'))
            player = client.getPlayer()
            player.rsrchQueue = client.cmdProxy.startResearch(player.oid, techID)
            self.win.setStatus(_('Command has been executed.'))
        except ige.GameException, e:
            self.win.setStatus(e.args[0])
            return
        self.update()
Пример #7
0
class ResearchDlg:

	def __init__(self, app):
		self.app = app
		self.techInfoDlg = TechInfoDlg(app)
		self.confirmDlg = ConfirmDlg(app)
		self.showCompleted = 0
		self.createUI()

	def display(self):
		self.show()
		# show window
		if not self.win.visible:
			self.win.show()
		# register for updates
		if self not in gdata.updateDlgs:
			gdata.updateDlgs.append(self)

	def hide(self):
		self.win.setStatus(_("Ready."))
		self.win.hide()
		# unregister updates
		if self in gdata.updateDlgs:
			gdata.updateDlgs.remove(self)

	def update(self):
		if self.win.visible:
			self.show()

	def show(self):
		player = client.getPlayer()
		# title
		self.win.vRQueueTitle.text = _('Research queue [%d pts/turn]') % (
			player.effSciPoints,
		)
		self.win.title = _("Research [TL%d]") % player.techLevel
		# Known techs
		items = []
		#~researchable = {}
		disabled = []
		taskIDs = {}
		for task in player.rsrchQueue:
			taskIDs[task.techID] = None
		for techID in player.techs.keys():
			tech = client.getTechInfo(techID)
			improvement = player.techs[techID]
			item = ui.Item(tech.name,
				techID = techID,
				tLevel = '%d-%d' % (tech.level, improvement),
				tStruct = (' ', '*')[tech.isStructure],
				tShip = (' ', '*')[tech.isShipEquip],
			)
			if improvement < Rules.techMaxImprovement and improvement < tech.maxImprovement:
				neededSci = Utils.getTechRCost(player, techID)
				if player.effSciPoints > 0:
					item.tETC = res.formatTime(float(neededSci) / player.effSciPoints)
				else:
					item.tETC = _("N/A")
				found = 0
				if taskIDs.has_key(techID):
					item.foreground = (0xd0, 0xd0, 0xd0)
				else:
					item.foreground = None
			else:
				item.tETC = res.getNA()
				item.foreground = (0x80, 0x80, 0x80)
				if not self.showCompleted:
					# skip this item
					continue
			items.append(item)
			disabled.extend(tech.researchDisables)
			#~for improvement in range(1, improvement + 1):
			#~	for techID in tech.researchEnables[improvement]:
			#~		researchable[techID] = 1
		self.win.vKTechs.items = items
		self.win.vKTechs.itemsChanged()
		# Research queue
		items = []
		index = 0
		queueTechs = []
		total = 0
		for task in player.rsrchQueue:
			tech = client.getTechInfo(task.techID)
			fulltech = client.getFullTechInfo(task.techID)
			queueTechs.append(task.techID)
			item = ui.Item(tech.name, techID = task.techID, index = index)
			researchSci = Utils.getTechRCost(player, task.techID, task.improvement)
			maxImprovement = min(Rules.techMaxImprovement,fulltech.maxImprovement)
			maxImpTotalSci = 0
			if task.improveToMax and task.improvement < maxImprovement:
				for impr in range(task.improvement+1,maxImprovement+1):
					maxImpTotalSci += Utils.getTechRCost(player, task.techID, impr)
			item.tooltip = _("Research points %d/%d, change %d pts/turn.") % (task.currSci, researchSci, task.changeSci)
			item.statustip = item.tooltip
			item.tImpToMax = ["", "*"][task.improveToMax]
			item.tImproveToMax = task.improveToMax
			if task.currSci > 0:
				item.tProgress = _("%d %%") % int(task.currSci * 100 / researchSci)
			else:
				item.tProgress = _("-")
			if task.changeSci > 0:
				value = float(researchSci - task.currSci) / max(task.changeSci, player.effSciPoints)
				total += int(value + 1)
				if player.effSciPoints > 0:
					total += float(maxImpTotalSci) / player.effSciPoints
					item.tETC = res.formatTime(value)
				else:
					total = 0
					item.tETC = res.getNA()
			elif task.changeSci < 0:
				value = - float(task.currSci) / min(task.changeSci, player.effSciPoints)
				item.tETC = _("[%s]") % res.formatTime(value)
			elif player.effSciPoints > 0:
				value = float(researchSci) / player.effSciPoints
				total += int(value + 1)
				total += float(maxImpTotalSci) / player.effSciPoints
				item.tETC = res.formatTime(value)
			else:
				item.tETC = res.getNA()
			item.tLevel = _("%d-%d") % (tech.level, task.improvement)
			items.append(item)
			index += 1
		self.win.vRQueue.items = items
		self.win.vRQueue.itemsChanged()
		self.win.vRQueueTop.enabled = 0
		self.win.vRQueueUp.enabled = 0
		self.win.vRQueueDown.enabled = 0
		self.win.vRQueueAbort.enabled = 0
		self.win.vRQueueRepat.enabled = 0
		self.win.vRQueueRepat.pressed = 0
		self.win.vRQueueInfo.enabled = 0
		if total == 0:
			self.win.vRTotal.text = _("N/A")
		else:
			self.win.vRTotal.text = res.formatTime(total)
		# Researchable techs
		items = []
		for techID in client.getAllTechIDs():
			if player.techs.has_key(techID)	or techID in queueTechs \
				or techID in disabled:
				continue
			# can check requirements
			tech = client.getTechInfo(techID)
			if not hasattr(tech, "partialData"):
				continue
			item = ui.Item(tech.name, tLevel = tech.level, techID = techID)
			if hasattr(tech, 'isStructure'): item.tStruct = ('', '*')[tech.isStructure]
			else: item.tStruct = ''
			if hasattr(tech, 'isShipEquip'): item.tShip = ('', '*')[tech.isShipEquip]
			else: item.tShip = ''
			if hasattr(tech, 'researchMod'):
				neededSci = Utils.getTechRCost(player, techID)
				if player.effSciPoints > 0:
					item.tETC = res.formatTime(float(neededSci) / player.effSciPoints)
				else:
					item.tETC = _("N/A")
				item.foreground = None
			else:
				item.tSci = res.getNA()
				item.foreground = (0xc0, 0xc0, 0xc0)
				# skip this item
				continue
			if hasattr(tech, "researchDisables") and tech.researchDisables:
				item.foreground = (0xff, 0xff, 0x00)
			if client.getFullTechInfo(techID).finishResearchHandler == TechHandlers.finishResTLAdvance:
					item.foreground = gdata.sevColors[gdata.CRI]
			items.append(item)
		self.win.vRTechs.items = items
		self.win.vRTechs.itemsChanged()

	def onSelectKTech(self, widget, action, data):
		# TODO implement
		pass

	def onKTechInfo(self, widget, action, data):
		if self.win.vKTechs.selection:
			self.techInfoDlg.display(self.win.vKTechs.selection[0].techID)

	def onSelectRTech(self, widget, action, data):
		# TODO implement
		pass

	def onRTechInfo(self, widget, action, data):
		if self.win.vRTechs.selection:
			self.techInfoDlg.display(self.win.vRTechs.selection[0].techID)

	def onSelectRQueueTech(self, widget, action, data):
		index = self.win.vRQueue.items.index(self.win.vRQueue.selection[0])
		self.win.vRQueueTop.enabled = index > 0
		self.win.vRQueueUp.enabled = index > 0
		self.win.vRQueueDown.enabled = index < len(self.win.vRQueue.items) - 1
		self.win.vRQueueAbort.enabled = 1
		self.win.vRQueueRepat.enabled = 1
		self.win.vRQueueRepat.pressed = self.win.vRQueue.selection[0].tImproveToMax
		self.win.vRQueueInfo.enabled = 1

	def onRQueueTechInfo(self, widget, action, data):
		if self.win.vRQueue.selection:
			self.techInfoDlg.display(self.win.vRQueue.selection[0].techID)

	def onCloseDlg(self, widget, action, data):
		self.hide()

	def onStartResearch(self, widget, action, data):
		if not self.win.vRTechs.selection:
			self.win.setStatus(_('Select technology to research.'))
			return
		else:
			techID = self.win.vRTechs.selection[0].techID
		try:
			self.win.setStatus(_('Executing START RESEARCH command...'))
			player = client.getPlayer()
			player.rsrchQueue = client.cmdProxy.startResearch(player.oid, techID)
			self.win.setStatus(_('Command has been executed.'))
		except ige.GameException, e:
			self.win.setStatus(e.args[0])
			return
		self.update()
Пример #8
0
class ResearchDlg:
    def __init__(self, app):
        self.app = app
        self.techInfoDlg = TechInfoDlg(app)
        self.confirmDlg = ConfirmDlg(app)
        self.showCompleted = 0
        self.showObsolete = 0
        self.createUI()

    def display(self):
        self.win.vUnObs.enabled = 0
        self.win.vObs.enabled = 0
        self.show()
        # show window
        if not self.win.visible:
            self.win.show()
        # register for updates
        if self not in gdata.updateDlgs:
            gdata.updateDlgs.append(self)

    def hide(self):
        self.win.setStatus(_("Ready."))
        self.win.hide()
        # unregister updates
        if self in gdata.updateDlgs:
            gdata.updateDlgs.remove(self)

    def update(self):
        if self.win.visible:
            self.show()

    def _processResearchableTech(self, tech):
        player = client.getPlayer()

        item = ui.Item(tech.name, tLevel=tech.level, techID=tech.id)
        item.tStruct = '*' if getattr(tech, 'isStructure', None) else ''
        item.tShip = '*' if getattr(tech, 'isShipEquip', None) else ''

        neededSci = Utils.getTechRCost(player, tech.id)
        item.tETC = res.formatTime(
            float(neededSci) /
            player.effSciPoints) if player.effSciPoints > 0 else _("N/A")
        item.foreground = None

        if client.getFullTechInfo(
                tech.id
        ).finishResearchHandler == TechHandlers.finishResTLAdvance:
            item.foreground = gdata.sevColors[gdata.CRI]
        elif getattr(tech, "researchDisables", None):
            item.foreground = (0xff, 0xff, 0x00)
        return item

    def _processResearchable(self, disabled, queued):
        player = client.getPlayer()

        items = []
        for techID in client.getAllTechIDs():
            if techID in player.techs or techID in queued or techID in disabled:
                continue
            tech = client.getTechInfo(techID)
            if not hasattr(tech, 'partialData') or not hasattr(
                    tech, 'researchMod'):
                continue
            items.append(self._processResearchableTech(tech))
        self.win.vRTechs.items = items
        self.win.vRTechs.itemsChanged()

    def _processResearchQueueTask(self, task):
        player = client.getPlayer()
        tech = client.getTechInfo(task.techID)
        fulltech = client.getFullTechInfo(task.techID)
        researchSci = Utils.getTechRCost(player, task.techID, task.improvement)
        item = ui.Item(tech.name, techID=task.techID)
        item.tooltipTitle = _("Details")
        item.tooltip = _("Research points %d/%d, change %d pts/turn.") % (
            task.currSci, researchSci, task.changeSci)
        item.statustip = item.tooltip
        item.tImpToMax = "*" if task.improveToMax else ""
        item.tImproveToMax = task.improveToMax
        item.tProgress = _("%d %%") % int(
            task.currSci * 100 / researchSci) if task.currSci > 0 else _("-")
        totalSci = 0
        if task.changeSci > 0:
            etc = float(researchSci - task.currSci) / max(
                task.changeSci, player.effSciPoints)
            totalSci += researchSci - task.currSci
            if player.effSciPoints > 0:
                item.tETC = res.formatTime(etc)
            else:
                item.tETC = res.getNA()
        elif task.changeSci < 0:
            etc = -float(task.currSci) / min(task.changeSci,
                                             player.effSciPoints)
            item.tETC = _("[%s]") % res.formatTime(etc)
        elif player.effSciPoints > 0:
            etc = float(researchSci) / player.effSciPoints
            totalSci += researchSci
            item.tETC = res.formatTime(etc)
        else:
            item.tETC = res.getNA()

        if task.improveToMax:
            for impr in range(task.improvement + 1,
                              fulltech.maxImprovement + 1):
                totalSci += Utils.getTechRCost(player, task.techID, impr)
        item.tLevel = _("%d-%d") % (tech.level, task.improvement)
        return item, totalSci

    def _processResearchQueue(self):
        player = client.getPlayer()

        items = []
        index = 0
        queued = []
        totalSci = 0
        for task in player.rsrchQueue:
            queued.append(task.techID)
            item, taskSci = self._processResearchQueueTask(task)
            item.index = index
            items.append(item)
            totalSci += taskSci
            index += 1
        totalSci = math.ceil(float(totalSci) / player.effSciPoints)
        self.win.vRQueue.items = items
        self.win.vRQueue.itemsChanged()
        self.win.vRQueueTop.enabled = 0
        self.win.vRQueueUp.enabled = 0
        self.win.vRQueueDown.enabled = 0
        self.win.vRQueueAbort.enabled = 0
        self.win.vRQueueRepat.enabled = 0
        self.win.vRQueueRepat.pressed = 0
        self.win.vRQueueInfo.enabled = 0
        self.win.vRTotal.text = res.formatTime(totalSci) if totalSci else _(
            "N/A")
        return queued

    def _processImprovableTech(self, tech, scheduledIDs):
        player = client.getPlayer()

        item = ui.Item(tech.name,
                       techID=tech.id,
                       tLevel='%d-%d' % (tech.level, player.techs[tech.id]),
                       tStruct=(' ', '*')[tech.isStructure],
                       tShip=(' ', '*')[tech.isShipEquip])
        neededSci = Utils.getTechRCost(player, tech.id)
        item.tETC = res.formatTime(
            float(neededSci) /
            player.effSciPoints) if player.effSciPoints > 0 else _("N/A")
        item.foreground = (0xd0, 0xd0,
                           0xd0) if tech.id in scheduledIDs else None
        item.foreground = (
            0x80, 0x40,
            0x40) if tech.id in player.obsoleteTechs else item.foreground
        return item

    def _processKnownTech(self):
        player = client.getPlayer()

        items = []
        disabled = []
        scheduledIDs = set([task.techID for task in player.rsrchQueue])
        for techID in player.techs.keys():
            if techID in player.obsoleteTechs and not self.showObsolete:
                continue
            tech = client.getTechInfo(techID)
            improvement = player.techs[techID]
            if improvement == tech.maxImprovement and not self.showCompleted:
                continue
            items.append(self._processImprovableTech(tech, scheduledIDs))
            disabled.extend(tech.researchDisables)
        self.win.vKTechs.items = items
        self.win.vKTechs.itemsChanged()
        return disabled

    def show(self):
        player = client.getPlayer()
        # title
        self.win.vRQueueTitle.text = _('Research queue [%d pts/turn]') % (
            player.effSciPoints, )
        self.win.title = _("Research [TL%d]") % player.techLevel

        disabled = self._processKnownTech()
        queued = self._processResearchQueue()
        self._processResearchable(disabled, queued)

    def onSelectKTech(self, widget, action, data):
        techID = self.win.vKTechs.selection[0].techID
        player = client.getPlayer()
        if techID in player.obsoleteTechs:
            self.win.vObs.enabled = 0
            self.win.vUnObs.enabled = 1
        else:
            self.win.vUnObs.enabled = 0
            self.win.vObs.enabled = 1

    def onKTechInfo(self, widget, action, data):
        if self.win.vKTechs.selection:
            self.techInfoDlg.display(self.win.vKTechs.selection[0].techID)

    def onSelectRTech(self, widget, action, data):
        # TODO implement
        pass

    def onRTechInfo(self, widget, action, data):
        if self.win.vRTechs.selection:
            self.techInfoDlg.display(self.win.vRTechs.selection[0].techID)

    def onSelectRQueueTech(self, widget, action, data):
        index = self.win.vRQueue.items.index(self.win.vRQueue.selection[0])
        self.win.vRQueueTop.enabled = index > 0
        self.win.vRQueueUp.enabled = index > 0
        self.win.vRQueueDown.enabled = index < len(self.win.vRQueue.items) - 1
        self.win.vRQueueAbort.enabled = 1
        self.win.vRQueueRepat.enabled = 1
        self.win.vRQueueRepat.pressed = self.win.vRQueue.selection[
            0].tImproveToMax
        self.win.vRQueueInfo.enabled = 1

    def onRQueueTechInfo(self, widget, action, data):
        if self.win.vRQueue.selection:
            self.techInfoDlg.display(self.win.vRQueue.selection[0].techID)

    def onCloseDlg(self, widget, action, data):
        self.hide()

    def onStartResearch(self, widget, action, data):
        if not self.win.vRTechs.selection:
            self.win.setStatus(_('Select technology to research.'))
            return
        else:
            techID = self.win.vRTechs.selection[0].techID
        try:
            self.win.setStatus(_('Executing START RESEARCH command...'))
            player = client.getPlayer()
            player.rsrchQueue = client.cmdProxy.startResearch(
                player.oid, techID)
            self.win.setStatus(_('Command has been executed.'))
        except ige.GameException, e:
            self.win.setStatus(e.args[0])
            return
        self.update()