Example #1
0
    def OkButtonEvent(self, event):
        """
                設定されたキーが重複している場合はエラーとする
        """
        # 他のビューとの重複調査
        if not views.KeyValueSettingDialogBase.KeySettingValidation(
                self.oldKeyConfig, self.values[0], self.log, self.checkEntries,
                True):
            return

        # このビュー内での重複調査
        newKeys = {}
        for name, keys in self.values[0].items():
            for key in keys.split("/"):
                newKeys.setdefault(key.upper(), set()).add(name)
        for key, names in newKeys.items():
            if key == _("なし"):
                continue
            if len(names) >= 2:
                entries = []
                for name in names:
                    entries.append(
                        keymap.makeEntry(self.values[1][name], key, None,
                                         self.log))
                if not keymap.permitConfrict(entries, self.log):
                    dialog(
                        _("エラー"),
                        _("以下の項目において、重複するキー %(key)s が設定されています。\n\n%(command)s")
                        % {
                            "key": key,
                            "command": names
                        }, self.wnd)
                    return
        event.Skip()
Example #2
0
	def Validation(self,event):
		lst=[]
		for i in range(1,6):
			if self.edits[i].GetLineText(0)!=_("なし"):
				entry = keymap.makeEntry(self.edits[0].GetLineText(0),self.edits[i].GetLineText(0),None,self.log)
				if entry not in lst:
					lst.append(entry)
				else:
					self.edits[i].SetValue(_("なし"))
		event.Skip()
Example #3
0
def KeySettingValidation(oldKeyConfig,newKeyConfig,logger,entries=None,AllowNewKeyDuplication=False):
	"""
		oldKeyConfig:	{name:key}	設定変更前
		newKeyConfig:	{name:key}	設定変更後
		logger:			logger		エラー時のログ出力用
		entries:		set(keymap.AcceleratorEntry)	重複判定対象(省略時はメインビューのみ)
		AllowNewKeyDuplication	bool	newKey内での重複を許すならTrue
	"""
	if logger==None:
		logger=getLogger("%s.%s" % (constants.LOG_PREFIX,"KeySettingValidation"))
	errors=""
	oldKeys={}
	for k,vs in oldKeyConfig.items():
		for v in vs.split("/"):
			oldKeys.setdefault(v, list()).append(k)
	newKeys={}
	for k,vs in newKeyConfig.items():
		for v in vs.split("/"):
			newKeys.setdefault(v, list()).append(k)
	if entries==None:
		entries=globalVars.app.hMainView.GetKeyEntries()

	for k,v in newKeys.items():
		if k==_("なし"):
			continue
		if not AllowNewKeyDuplication:
			if len(v)==2:
				errors+=_("%(v1)sと%(v2)sに同じショートカットキー%(key)sが設定されています。\n") % {"v1": v[0],"v2": v[1],"key": k}
				continue
			elif len(v)>2:
				errors+=_("%(v1)s、%(v2)sなど計%(count)d箇所に同じショートカットキー%(key)sが設定されています。\n") % {"v1": v[0],"v2": v[1],"count": len(v),"key": k}
				continue
		e=keymap.makeEntry("DUMMY",k,None,logger)
		if e==None:
			errors+=_("設定されたショートカット%sが認識できません。お手数ですが、このエラーメッセージを作者へご連絡ください。\n") % k
		elif e in entries and (k not in oldKeys):
			errors+=_("%(name)sに設定されたショートカットキー%(key)sは、別の場所で利用されています。\n") % {"name": v[0],"key": k}
	if errors!="":
		dialog(_("エラー"),errors)
		return False
	return True