def OnMenuOpen(self, event): # メニューの有効・無効を切り替える disableMenuIdSet = views.menuBlocker.testMenu(self.parent.activeTab) obj = event.GetEventObject() if obj is None: # システムメニューを開いた return for i in obj.GetMenuItems(): i.Enable(not i.GetId() in disableMenuIdSet) # カラムソートメニューの場合、中身の描画をする if event.GetMenu() == self.parent.menu.hMenuBar.FindItemById(menuItemsStore.getRef("VIEW_SORT_COLUMN")).GetSubMenu(): menu = self.parent.menu.hMenuBar.FindItemById(menuItemsStore.getRef("VIEW_SORT_COLUMN")).GetSubMenu() # 一旦全て削除 for i in range(menu.GetMenuItemCount()): menu.DestroyItem(menu.FindItemByPosition(0)) # カラム数分登録 i = 0 for title in self.parent.activeTab.GetListColumns(): subMenu = wx.Menu() subMenu.Append(constants.MENU_ID_SORT_COLUMN + 2 * i, "前へ") subMenu.Append(constants.MENU_ID_SORT_COLUMN + 2 * i + 1, "後ろへ") menu.AppendSubMenu(subMenu, title) i += 1 menu.Enable(constants.MENU_ID_SORT_COLUMN, False) menu.Enable(constants.MENU_ID_SORT_COLUMN + 2 * (i - 1) + 1, False) event.Skip()
def UpdateMenuState(self, old, new): # メニューのブロック状態を変更 self.menu.Enable(menuItemsStore.getRef("MOVE_MARK"), new.IsMarked()) self.menu.Enable(menuItemsStore.getRef("EDIT_UNMARKITEM_ALL"), new.hasCheckedItem()) self.menu.Enable(menuItemsStore.getRef("EDIT_MARKITEM_ALL"), len(new.checkedItem) != len(new.listObject)) self.menu.Enable(menuItemsStore.getRef("MOVE_HIST_NEXT"), new.environment["history"].hasNext()) self.menu.Enable(menuItemsStore.getRef("MOVE_HIST_PREV"), new.environment["history"].hasPrevious())
def ItemMarkProcess(self, items, strict=None): """ itemsをチェック・チェック解除する。現在状態と比べて反転させる strict!=Noneの時は、全アイテムのチェック状態をstrictに合わせる """ for item in items: index = self.listObject.GetItemIndex(item) if strict == False or (strict == None and self._IsItemChecked(item)): # チェック解除 self.checkedItem.discard(item) if len(items) == 1 and strict is None: globalVars.app.say(_("チェック解除"), interrupt=True) self.hListCtrl.SetItemBackgroundColour(index, "#000000") else: # チェック if len(items) == 1: globalVars.app.say(_("チェック"), interrupt=True) if not strict: globalVars.app.PlaySound( globalVars.app.config["sounds"]["check"]) self.checkedItem.add(item) self.hListCtrl.SetItemBackgroundColour(index, "#0000FF") self.hListCtrl.RefreshItem(index) # カーソルを1つ下へ移動 if len(items) == 1 and index != len( self.listObject) - 1: # カーソルが一番下以外にある時 # self.hListCtrl.SetItemState(item,0,wx.LIST_STATE_SELECTED) self.Focus(index + 1, True) self.hListCtrl.Update() globalVars.app.hMainView.menu.Enable( menuItemsStore.getRef("EDIT_UNMARKITEM_ALL"), self.hasCheckedItem()) globalVars.app.hMainView.menu.Enable( menuItemsStore.getRef("EDIT_MARKITEM_ALL"), len(self.checkedItem) != len(self.listObject))
def play(self, listPorQ=constants.PLAYLIST): if not globalVars.play.isDeviceOk(): return False #デバイス異常時は処理を中止 if globalVars.play.getStatus() == PLAYER_STATUS_DEVICEERROR: return False t = listManager.getTuple(listPorQ, True) if listPorQ == constants.QUEUE: globalVars.listInfo.playingTmp = t #キュー再生の時はタプルを一時退避 sc = None if re.search("https?://.+\..+", t[constants.ITEM_PATH]) != None: #URLの場合は中にURLがないか確認 sc = self.inUrlCheck(t[constants.ITEM_PATH]) if sc == None: sc = t[constants.ITEM_PATH] if globalVars.play.setSource(sc): ret = globalVars.play.play() else: ret = False if ret: self.errorSkipCount = 0 #エラースキップのカウンタをリセット self.playingList = listPorQ if ret: view_manager.buttonSetPause() listManager.setTag(listPorQ) globalVars.app.hMainView.menu.hFunctionMenu.Enable( menuItemsStore.getRef("ABOUT_PLAYING"), True) self.refreshTagInfo() globalVars.app.hMainView.tagInfoTimer.Start(10000) view_manager.setFileStaticInfoView() #スクリーンリーダ用リストとウィンドウ情報更新 if not ret: view_manager.buttonSetPlay() globalVars.app.hMainView.menu.hFunctionMenu.Enable( menuItemsStore.getRef("ABOUT_PLAYING"), False) view_manager.clearStaticInfoView() #スクリーンリーダ用リストとウィンドウ情報更新 view_manager.changeListLabel(globalVars.app.hMainView.playlistView) view_manager.changeListLabel(globalVars.app.hMainView.queueView) return ret
def OnMenuSelect(self, event): """メニュー項目が選択されたときのイベントハンドら。""" #ショートカットキーが無効状態のときは何もしない if not self.parent.shortcutEnable: event.Skip() return selected = event.GetId() #メニュー識別しの数値が出る if selected == menuItemsStore.getRef("exit"): self.Exit() elif selected == menuItemsStore.getRef("versionInfo"): dialog( _("バージョン情報"), _("%(appName)s Version %(versionNumber)s.\nCopyright (C) %(year)s %(developerName)s" ) % { "appName": constants.APP_NAME, "versionNumber": constants.APP_VERSION, "year": constants.APP_COPYRIGHT_YEAR, "developerName": constants.APP_DEVELOPERS }) elif selected == menuItemsStore.getRef("connect"): connectDialog = views.connect.Dialog() connectDialog.Initialize() ret = connectDialog.Show()
def forcePlay(self, source): if not globalVars.play.isDeviceOk(): return False #デバイス異常時は処理を中止 sc = None if re.search("https?://.+\..+", source) != None: #URLの場合は中にURLがないか確認 sc = self.inUrlCheck(source) if sc == None: sc = source if globalVars.play.setSource(sc): if globalVars.play.play(): ret = True self.playingList = constants.NOLIST # リストではない globalVars.listInfo.playingTmp = (source, os.path.basename(source), 0) listManager.setTag(constants.NOLIST) globalVars.app.hMainView.menu.hFunctionMenu.Enable( menuItemsStore.getRef("ABOUT_PLAYING"), True) else: ret = False else: ret = False if ret: self.errorSkipCount = 0 #エラースキップのカウンタをリセット view_manager.buttonSetPause() globalVars.app.hMainView.menu.hFunctionMenu.Enable( menuItemsStore.getRef("ABOUT_PLAYING"), True) self.refreshTagInfo() globalVars.app.hMainView.tagInfoTimer.Start(10000) view_manager.setFileStaticInfoView() #スクリーンリーダ用リストとウィンドウ情報更新 else: view_manager.buttonSetPlay() globalVars.app.hMainView.menu.hFunctionMenu.Enable( menuItemsStore.getRef("ABOUT_PLAYING"), False) view_manager.clearStaticInfoView() #スクリーンリーダ用リストとウィンドウ情報更新 view_manager.changeListLabel(globalVars.app.hMainView.playlistView) view_manager.changeListLabel(globalVars.app.hMainView.queueView) return ret
def repeatLoopCtrl(self, mode=-1): #0=なし, 1=リピート, 2=ループ if mode == -1: if self.repeatLoopFlag < 2: self.repeatLoopFlag += 1 else: self.repeatLoopFlag = 0 elif mode >= 0 and mode <= 2: self.repeatLoopFlag = mode if self.repeatLoopFlag == 0: globalVars.play.setRepeat(False) view_manager.buttonSetRepeatLoop() globalVars.app.say(_("オフ"), interrupt=True) globalVars.app.hMainView.menu.hRepeatLoopSubMenu.Check( menuItemsStore.getRef("REPEAT_LOOP_NONE"), True) elif self.repeatLoopFlag == 1: globalVars.play.setRepeat(True) view_manager.buttonSetRepeat() globalVars.app.say(_("リピート"), interrupt=True) globalVars.app.hMainView.menu.hRepeatLoopSubMenu.Check( menuItemsStore.getRef("RL_REPEAT"), True) elif self.repeatLoopFlag == 2: globalVars.play.setRepeat(False) view_manager.buttonSetLoop() globalVars.app.say(_("ループ"), interrupt=True) globalVars.app.hMainView.menu.hRepeatLoopSubMenu.Check( menuItemsStore.getRef("RL_LOOP"), True)
def _RegisterMenuCommand(self,menu_handle,ref_id,title,subMenu): shortcut=self.keymap.GetKeyString(self.keymap_identifier,ref_id) s=title if shortcut is None else "%s\t%s" % (title,shortcut) if subMenu==None: menu_handle.Append(menuItemsStore.getRef(ref_id),s) else: menu_handle.Append(menuItemsStore.getRef(ref_id),s,subMenu) self.blockCount[menuItemsStore.getRef(ref_id)]=0
def UpdateMenuState(self, old, new): #メニューのブロック状態を変更 if old: self.menu.UnBlock(old.blockMenuList) self.menu.Block(new.blockMenuList) self.menu.Enable(menuItemsStore.getRef("MOVE_MARK"), new.IsMarked()) self.menu.Enable(menuItemsStore.getRef("EDIT_UNMARKITEM_ALL"), new.hasCheckedItem()) new.ItemSelected() #メニューのブロック情報を選択中アイテム数の状況に合わせるために必用
def _RegisterCheckMenuCommand(self, menu_handle, ref_id, title, index=-1): """チェックメニューアイテム生成補助関数""" shortcut = self.keymap.GetKeyString(self.keymap_identifier, ref_id) s = title if shortcut is None else "%s\t%s" % (title, shortcut) if index >= 0: menu_handle.InsertCheckItem(index, menuItemsStore.getRef(ref_id), s) else: menu_handle.AppendCheckItem(menuItemsStore.getRef(ref_id), s) self.blockCount[menuItemsStore.getRef(ref_id)] = 0
def shuffleSw(self): if self.shuffleCtrl == None: self.shuffleCtrl = shuffle_ctrl.shuffle(listManager.getLCObject(constants.PLAYLIST)) view_manager.buttonSetShuffleOn() globalVars.app.say(_("シャッフル"), interrupt=True) globalVars.app.hMainView.menu.hOperationMenu.Check(menuItemsStore.getRef("SHUFFLE"), True) else: #シャッフルを解除してプレイリストに復帰 self.shuffleCtrl = None view_manager.buttonSetShuffleOff() globalVars.app.say(_("オフ"), interrupt=True) globalVars.app.hMainView.menu.hOperationMenu.Check(menuItemsStore.getRef("SHUFFLE"), False)
def makeEntry(self, ref, key, filter, log): """ ref(String)と、/区切りでない単一のkey(String)からwx.AcceleratorEntryを生成 """ if menuItemsStore.getRef( ref.upper()) > 49151: #OSの仕様により0xBFFF=49151までしか利用できない log.warning( "%s=%d is invalid hotkey ref. hotkey ref must be smaller than 49151" % (ref, menuItemsStore.getRef(ref))) return False return super().makeEntry(ref, key, filter, log)
def closeM3u(newSave=True): if globalVars.listInfo.playlistFile != None: lst = [] for t in globalVars.app.hMainView.playlistView: lst.append(t[0]) if loadM3u(globalVars.listInfo.playlistFile, LOAD_ONLY) != lst: if os.path.splitext( globalVars.listInfo.playlistFile)[1] == ".m3u": #変換を確認 d = mkDialog.Dialog("m3uConversionConfirmDialog") d.Initialize(_("プレイリスト変換確認"), _("このプレイリストは変更されています。\nm3u8ファイルに変換して保存しますか?"), (_("保存"), _("破棄"), _("キャンセル")), sound=False) fxManager.confirm() c = d.Show() elif os.path.splitext( globalVars.listInfo.playlistFile)[1] == ".m3u8": #上書きを確認 d = mkDialog.Dialog("m3uOverwriteConfirmDialog") d.Initialize(_("プレイリスト上書き保存の確認"), _("このプレイリストは変更されています。\n上書き保存しますか?"), (_("上書き"), _("破棄"), _("キャンセル")), sound=False) fxManager.confirm() c = d.Show() if c == 0: saveM3u8(globalVars.listInfo.playlistFile, False) elif c == wx.ID_CANCEL: return False else: if newSave: if len(globalVars.app.hMainView.playlistView) != 0: d = mkDialog.Dialog("m3uSaveConfirmDialog") d.Initialize(_("プレイリスト保存の確認"), _("このプレイリストは変更されています。\n保存しますか?"), (_("保存"), _("破棄"), _("キャンセル")), sound=False) fxManager.confirm() c = d.Show() if c == 0: saveM3u8(None, False) elif c == wx.ID_CANCEL: return False # 停止して削除 globalVars.eventProcess.stop() globalVars.listInfo.playlistFile = None globalVars.app.hMainView.playlistView.clear() globalVars.app.hMainView.playlistLabel.SetLabel( _("プレイリスト") + " (0" + _("件") + ")") #メニュー処理 globalVars.app.hMainView.menu.hFileMenu.SetLabel( menuItemsStore.getRef("M3U8_SAVE"), _("プレイリストを上書き保存")) globalVars.app.hMainView.menu.hFileMenu.Enable( menuItemsStore.getRef("M3U8_SAVE"), False) globalVars.app.hMainView.menu.hFileMenu.Enable( menuItemsStore.getRef("M3U_CLOSE"), False) globalVars.app.hMainView.menu.hPlaylistMenu.Enable( menuItemsStore.getRef("SET_STARTUPLIST"), False) return True
def stop(self): self.errorSkipCount = 0 #エラースキップのカウンタをリセット view_manager.clearStaticInfoView() #スクリーンリーダ用リストの更新 globalVars.lampController.clearFileInfo() # ネット用ファイル情報更新 globalVars.app.hMainView.playlistView.setPointer(-1) globalVars.play.stop() view_manager.buttonSetPlay() globalVars.app.hMainView.menu.hFunctionMenu.Enable(menuItemsStore.getRef("ABOUT_PLAYING"), False) globalVars.app.hMainView.menu.hFunctionMenu.Enable(menuItemsStore.getRef("SET_CURSOR_PLAYING"), False) globalVars.app.hMainView.viewTitle.SetLabel(_("タイトル") + " : ") globalVars.app.hMainView.viewTagInfo.SetLabel("") globalVars.app.hMainView.tagInfoTimer.Stop()
def Move(self, path, cursor="", addHistory=True): """指定の場所へ移動する。""" if addHistory: self.environment["history"].add(path) self.parent.menu.Enable(menuItemsStore.getRef("MOVE_HIST_NEXT"), self.environment["history"].hasNext()) self.parent.menu.Enable(menuItemsStore.getRef("MOVE_HIST_PREV"), self.environment["history"].hasPrevious()) r = navigator.Navigate(path, cursor, previous_tab=self, environment=self.environment) return errorCodes.OK if r is self else r
def UnBlock(self,ref): """ メニュー項目のブロック事由が消滅したので、ブロックカウントを減らす。0になったら有効化する refはリスト """ for i in ref: try: self.blockCount[menuItemsStore.getRef(i)]-=1 except KeyError: self.blockCount[menuItemsStore.getRef(i)]=0 #ブロック解除 if self.blockCount[menuItemsStore.getRef(i)]==0: self.hMenuBar.Enable(menuItemsStore.getRef(i),True)
def Block(self, ref): """ メニュー項目の利用をブロックし、無効状態にする refはlist(str) """ for i in ref: try: self.blockCount[menuItemsStore.getRef(i)] += 1 except KeyError: self.blockCount[menuItemsStore.getRef(i)] = 1 # 新規にブロック if self.blockCount[menuItemsStore.getRef(i)] == 1: self.hMenuBar.Enable(menuItemsStore.getRef(i), False)
def ClearAllItems(self): """ 必用な調整を経て、リストビューを空にする 並び替え等に伴う同一リストの再描画用 listObjectについては別途処理が必要 """ self._cancelBackgroundTasks() self.StopSound() self.hListCtrl.DeleteAllItems() self.hilightIndex = -1 globalVars.app.hMainView.menu.Enable( menuItemsStore.getRef("EDIT_UNMARKITEM_ALL"), False) globalVars.app.hMainView.menu.Enable( menuItemsStore.getRef("EDIT_MARKITEM_ALL"), True)
def setSkipInterval(self, increase=True, sec=None): if sec == None: sec = settings.getSkipInterval()[0] idx = settings.skipInterval.index(sec) if increase == True: if idx < len(settings.skipInterval) - 1: settings.setSkipInterval(settings.skipInterval[idx + 1]) else: if idx > 0: settings.setSkipInterval(settings.skipInterval[idx - 1]) strVal = settings.getSkipInterval()[1] globalVars.app.hMainView.menu.hOperationMenu.SetLabel( menuItemsStore.getRef("SKIP"), strVal + " " + _("進む")) globalVars.app.hMainView.menu.hOperationMenu.SetLabel( menuItemsStore.getRef("REVERSE_SKIP"), strVal + " " + _("戻る"))
def loadM3u(path=None, playlist=2): rtn = [] #ファイルパスリスト f = False #ファイル if path == None: fd = wx.FileDialog(None, _("プレイリストファイル選択"), wildcard=_("プレイリストファイル (.m3u8/.m3u)") + "|*.m3u8*;*.m3u") c = fd.ShowModal() if c == wx.ID_CANCEL: return rtn path = fd.GetPath() if os.path.isfile(path) and os.path.splitext(path)[1] == ".m3u": f = open(path, "r", encoding="shift-jis") elif os.path.isfile(path) and os.path.splitext(path)[1] == ".m3u8": f = open(path, "r", encoding="utf-8") if f != False: #ファイルの読み込み for s in f.readlines(): s = s.strip() if os.path.isfile(s): rtn.append(s) f.close() else: ed = mkDialog.Dialog("m3uLoadErrorDialog") ed.Initialize(_("読み込みエラー"), _("プレイリストファイルの読み込みに失敗しました。"), ("OK", ), sound=False) fxManager.error() return ed.Show() if playlist == 2: #REPLACE if closeM3u() == False: return rtn #closeがキャンセルされたら中止 listManager.addItems(rtn, globalVars.app.hMainView.playlistView) globalVars.listInfo.playlistFile = path globalVars.m3uHistory.add(path) globalVars.app.hMainView.menu.hFileMenu.Enable( menuItemsStore.getRef("M3U_OPEN"), True) globalVars.app.hMainView.menu.hFileMenu.Enable( menuItemsStore.getRef("M3U_CLOSE"), True) elif playlist == 1: #ADD listManager.addItems(rtn, globalVars.app.hMainView.playlistView) globalVars.listInfo.playlistFile = path globalVars.m3uHistory.add(path) if os.path.splitext(globalVars.listInfo.playlistFile)[1] == ".m3u": if playlist == 2: globalVars.app.hMainView.menu.hFileMenu.SetLabel( menuItemsStore.getRef("M3U8_SAVE"), _("UTF-8プレイリストに変換")) globalVars.app.hMainView.menu.hFileMenu.Enable( menuItemsStore.getRef("M3U8_SAVE"), True) globalVars.app.hMainView.menu.hPlaylistMenu.Enable( menuItemsStore.getRef("SET_STARTUPLIST"), True) elif os.path.splitext(globalVars.listInfo.playlistFile)[1] == ".m3u8": if playlist == 2: globalVars.app.hMainView.menu.hFileMenu.SetLabel( menuItemsStore.getRef("M3U8_SAVE"), _("プレイリストを上書き保存")) globalVars.app.hMainView.menu.hFileMenu.Enable( menuItemsStore.getRef("M3U8_SAVE"), True) globalVars.app.hMainView.menu.hPlaylistMenu.Enable( menuItemsStore.getRef("SET_STARTUPLIST"), True) return rtn
def shuffleSw(self): if self.shuffleCtrl == 0: self.shuffleCtrl = shuffle_ctrl.shuffle(globalVars.playlist) globalVars.app.hMainView.shuffleBtn.SetLabel(_("シャッフル解除")) globalVars.app.hMainView.menu.hOperationMenu.Check( menuItemsStore.getRef("SHUFFLE"), True) else: #シャッフルを解除してプレイリストに復帰 idx = globalVars.playlist.getIndex(self.shuffleCtrl.getNow()) if idx != None: globalVars.playlist.playIndex = idx else: globalVars.playlist.positionReset() self.shuffleCtrl = 0 globalVars.app.hMainView.shuffleBtn.SetLabel(_("シャッフル")) globalVars.app.hMainView.menu.hOperationMenu.Check( menuItemsStore.getRef("SHUFFLE"), False)
def mute(self): if self.muteFlag == 0: #ミュート処理 globalVars.play.changeVolume(0) self.muteFlag = 1 globalVars.app.hMainView.volumeSlider.Disable() globalVars.app.hMainView.muteBtn.SetLabel("ミュート解除") globalVars.app.hMainView.menu.hVolumeInOperationMenu.SetLabel( menuItemsStore.getRef("MUTE"), _("消音を解除")) elif self.muteFlag == 1: #ミュート解除処理 val = globalVars.app.hMainView.volumeSlider.GetValue() globalVars.play.changeVolume(val) self.muteFlag = 0 globalVars.app.hMainView.volumeSlider.Enable() globalVars.app.hMainView.muteBtn.SetLabel("ミュート") globalVars.app.hMainView.menu.hVolumeInOperationMenu.SetLabel( menuItemsStore.getRef("MUTE"), _("消音に設定"))
def makeEntry(self, ref, key): """ref(String)と、/区切りでない単一のkey(String)からwx.AcceleratorEntryを生成""" key = key.upper() ctrl = "CTRL+" in key alt = "ALT+" in key shift = "SHIFT+" in key codestr = key.split("+") flags = 0 flagCount = 0 if ctrl: flags = wx.ACCEL_CTRL flagCount += 1 if alt: flags = flags | wx.ACCEL_ALT flagCount += 1 if shift: flags = flags | wx.ACCEL_SHIFT flagCount += 1 if not len(codestr) - flagCount == 1: return False codestr = codestr[len(codestr) - 1] if not codestr in str2key: return False return AcceleratorEntry(flags, str2key[codestr], menuItemsStore.getRef(ref.upper()), ref.upper())
def __init__(self,params,keys,refHead): """ params,keymapは(name,value)のタプルのリスト configparser.items(section)の利用を想定 """ #変数を初期化 self.refHead=refHead self.keyMap={} self.paramMap={} self.refMap={} self.errors=[] dic={} #引数からconfigを生成 dic["param"]=dict(params) dic["key"]=dict(keys) config=FalconConfigParser.FalconConfigParser() config.read_dict(dic) #configから2つのmapを生成 for k in config.options("param"): if(config.has_option("key",k)): k=k.upper() self.paramMap[k]=config["param"][k] self.keyMap[k]=config["key"][k] self.refMap[menuItemsStore.getRef(refHead+k)]=k else: self.errors.append(k)
def add(self,name,param,key=None): """指定した要素を追加""" name=name.upper() self.paramMap[name]=param if key!=None: self.keyMap[name]=key self.refMap[name]=menuItemsStore.getRef(self.refHead+name)
def AddUserCommandMenu(self): for m in globalVars.app.userCommandManagers: # 既に登録済みならインデックスを取得していったん削除する item = self.menu.hMoveMenu.FindItemById(menuItemsStore.getRef(m.refHead)) if item: index = self.menu.hMoveMenu.GetMenuItems().index(item) self.menu.hMoveMenu.DestroyItem(item) else: index = self.menu.hMoveMenu.GetMenuItemCount() subMenu = wx.Menu() for v in m.paramMap: self.menu.RegisterMenuCommand(subMenu, m.refHead + v, v) if m == globalVars.app.favoriteDirectory: self.menu.RegisterMenuCommand(subMenu, ( "", "MOVE_ADD_FAVORITE", "MOVE_SETTING_FAVORITE" )) else: self.menu.RegisterMenuCommand(subMenu, ( "", "MOVE_SETTING_OPEN_HERE" )) title = globalVars.app.userCommandManagers[m] self.menu.RegisterMenuCommand(self.menu.hMoveMenu, m.refHead, title, subMenu, index) self.hFrame.SetMenuBar(self.menu.hMenuBar)
def delete(self, name): """指定されたnameの登録を削除する""" name = name.lower() del self.paramMap[name] if name in self.keyMap: del self.keyMap[name] del refMap[menuItemsStore.getRef(self.refHead + name)]
def RegisterRadioMenuCommand(self, menu_handle, ref_id, title=None, index=-1): """ラジオメニューアイテム生成補助関数""" shortcut = self.keymap.GetKeyString(self.keymap_identifier, ref_id) if not title: title = menuItemsDic.dic[ref_id] s = title if shortcut is None else "%s\t%s" % (title, shortcut) if index >= 0: menu_handle.InsertRadioItem(index, menuItemsStore.getRef(ref_id), s) else: menu_handle.AppendRadioItem(menuItemsStore.getRef(ref_id), s) self.blockCount[menuItemsStore.getRef(ref_id)] = 0
def OnMenuSelect(self, event): """メニュー項目が選択されたときのイベントハンドら。""" selected = event.GetId() #メニュー識別しの数値が出る if selected == menuItemsStore.getRef("POPUP_PLAY"): if self.parent.GetSelectedItemCount() == 1: globalVars.eventProcess.listSelection(self.parent) elif selected == menuItemsStore.getRef("POPUP_ADD_QUEUE_HEAD"): if self.parent.GetSelectedItemCount() != 0: t = [] for i in self.parent.getItemSelections(): t.append(self.parent[i][0]) listManager.addItems(t, globalVars.app.hMainView.queueView, 0) elif selected == menuItemsStore.getRef("POPUP_ADD_QUEUE"): if self.parent.GetSelectedItemCount() != 0: t = [] for i in self.parent.getItemSelections(): t.append(self.parent[i][0]) listManager.addItems(t, globalVars.app.hMainView.queueView) elif selected == menuItemsStore.getRef("POPUP_ADD_PLAYLIST"): if self.parent.GetSelectedItemCount() != 0: t = [] for i in self.parent.getItemSelections(): t.append(self.parent[i][0]) listManager.addItems(t, globalVars.app.hMainView.playlistView) elif selected == menuItemsStore.getRef("POPUP_COPY"): if self.parent.GetSelectedItemCount() != 0: fList = [] i = self.parent.GetFirstSelected() if i >= 0: fList.append(self.parent[i][0]) while True: i = self.parent.GetNextSelected(i) if i >= 0: fList.append(self.parent[i][0]) else: break lampClipBoardCtrl.copy(fList) elif selected == menuItemsStore.getRef("POPUP_PASTE"): lampClipBoardCtrl.paste(self.parent) elif selected == menuItemsStore.getRef("POPUP_DELETE"): if self.parent.GetSelectedItemCount() != 0: globalVars.eventProcess.delete(self.parent) elif selected == menuItemsStore.getRef("POPUP_SELECT_ALL"): for i in range(self.parent.GetItemCount()): self.parent.Select(i - 1) elif selected == menuItemsStore.getRef("POPUP_ABOUT"): if self.parent.GetSelectedItemCount() == 1: index = self.parent.GetFirstSelected() t = self.parent[index] tag = listManager.getTags([t]) self.parent[index] = tag[0] t = self.parent[index] listManager.infoDialog(t)
def OnMenuOpen(self, event): menuObject = event.GetEventObject() if event.GetMenu() == self.parent.menu.hDeviceSubMenu: menu = self.parent.menu.hDeviceSubMenu # 内容クリア for i in range(menu.GetMenuItemCount()): menu.DestroyItem(menu.FindItemByPosition(0)) # デバイスリスト追加 deviceList = player.getDeviceList() deviceIndex = 0 for d in deviceList: if deviceIndex == 0: menu.AppendCheckItem(constants.DEVICE_LIST_MENU, _("規定の出力先")) elif d != None: menu.AppendCheckItem( constants.DEVICE_LIST_MENU + deviceIndex, d) deviceIndex += 1 # 現在の設定にチェック deviceNow = globalVars.play.getConfig(PLAYER_CONFIG_DEVICE) if deviceNow == PLAYER_DEFAULT_SPEAKER: menu.Check(constants.DEVICE_LIST_MENU, True) elif deviceNow > 0 and deviceNow < len( deviceList) and deviceList[deviceNow] != None: menu.Check(constants.DEVICE_LIST_MENU + deviceNow, True) elif menuObject == self.parent.menu.hPlaylistMenu: menu = self.parent.menu.hPlaylistMenu # 履歴部分を削除 for i in range(menu.GetMenuItemCount() - 2): menu.DestroyItem(menu.FindItemByPosition(2)) # 履歴部分を作成 index = 0 for path in globalVars.m3uHistory.getList(): menu.Insert(2, constants.PLAYLIST_HISTORY + index, path) index += 1 elif menuObject == self.parent.menu.hFilterSubMenu: menu = self.parent.menu.hFilterSubMenu # いったん全て削除 for i in range(menu.GetMenuItemCount() - 1): menu.DestroyItem(menu.FindItemByPosition(0)) # 項目を作成 index = 0 for filter in globalVars.filter.getList(): menu.InsertCheckItem(index, constants.FILTER_LIST_MENU + index, filter.getName()) menu.Check(constants.FILTER_LIST_MENU + index, filter.isEnable()) index += 1 elif menuObject == self.parent.menu.hOperationMenu: self.parent.menu.hOperationMenu.Check( menuItemsStore.getRef("MANUAL_SONG_FEED"), globalVars.app.config.getboolean("player", "manualSongFeed", False))