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()
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()
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