Created
April 2, 2014 02:20
-
-
Save fereria/9926930 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
## -*- coding: utf-8 -*- | |
## last updated:<2013/12/06 11:57:06> | |
## Megumi Ando | |
#MayaModlue-----------------------------------## | |
import pymel.core as pm | |
import pymel.util as pmUtil | |
import maya.mel as mm | |
#----------------------------------------------# | |
import os.path | |
import logging | |
import json | |
import re | |
#orignalModule---------------------------------# | |
import remitools.lib.fileIO as fileIO | |
#PathSetting----------------------------------## | |
pathThisFile = os.path.dirname(os.path.abspath(__file__)) | |
settingPath = os.path.normpath(os.path.join(pathThisFile,"../setting")) | |
dataPath = os.path.normpath(os.path.join(pathThisFile,"../data" )) | |
shelfSaveDir = re.sub("\\\\","/",dataPath + "/floatingShelf") | |
#EnvSetting-----------------------------------*# | |
pmUtil.putEnv("XBMLANGPATH" , pmUtil.getEnv("XBMLANGPATH") + ";" + dataPath +"/icon") | |
pmUtil.putEnv("MAYA_SCRIPT_PATH" , pmUtil.getEnv("MAYA_SCRIPT_PATH") + ";" + shelfSaveDir) | |
""" | |
縦横を自由に変えられるタイプのShelf | |
ShelfEditorでShelfのアイコン変更ができない・・・? | |
""" | |
class floatingShelf(): | |
uiName = "floatingShelf" | |
tabColumnLo = {} | |
shelfLo = {} | |
tabLo = None | |
mainLo = None | |
width = 300 | |
height = 400 | |
shelfTabSave = shelfSaveDir + "/fs_tabData.json" | |
def __init__(self): | |
if pm.window(self.uiName,exists=True) == True: | |
pm.deleteUI(self.uiName) | |
self.hWindow = pm.window(self.uiName,w=self.width,h=self.height,menuBar=True) | |
with self.hWindow: | |
#pm.menu(label="File",tearOff=True) | |
#pm.menuItem(label="Tool Setting",c=pm.Callback(self.settingUI)) | |
#pm.menuItem(label="Save Shelf",c=pm.Callback(self.mainUI_Save)) | |
with pm.columnLayout(adj=True): | |
self.mainLo = pm.columnLayout(adj=True) | |
self.tabLo = pm.shelfTabLayout(parent=self.mainLo, | |
height=self.height, | |
image='rmtools_setting.png', | |
imageVisible=True, | |
cc=pm.Callback(self.mainUI_Save), | |
dgc=pm.Callback(self.mainUI_Save)) | |
pm.setParent("..") | |
with pm.rowLayout(numberOfColumns=2,adj=True): | |
pm.button(l="Tool Setting" ,w=(self.width / 2),c=pm.Callback(self.settingUI)) | |
pm.button(l="Save Shelf",w=(self.width / 2),c=pm.Callback(self.mainUI_Save)) | |
self.createUI() | |
def createUI(self): | |
""" | |
UIの構築部分。 | |
いずれは、Textの保存情報を元に組み立てるようにする。 | |
(現状は、タブ作成テスト) | |
""" | |
self.loadTab() | |
self.loadShelf() | |
def mainUI_Save(self): | |
""" | |
ツール情報の保存ルーチン | |
""" | |
self.saveTab() | |
self.saveShelf() | |
def addTab(self,tabName): | |
""" | |
引数で指定したtabのShelfを作成する。 | |
""" | |
with self.tabLo: | |
self.shelfLo[tabName] = pm.shelfLayout(tabName, | |
height=self.height, | |
width=self.width, | |
dpc=pm.Callback(self.mainUI_Save)) | |
def saveShelf(self): | |
""" | |
現状のShelf情報を保存する。 | |
保存先は、tools/data/floatingShelf 下。 | |
saveShelfで保存すると、mel形式で出力される。Pathの通っているところにおいておけば | |
Tab名と同じコマンドを実行すれば、シェルフ情報を復帰させることができる。 | |
""" | |
tabList = self.tabLo.getTabLabel() | |
if tabList != None: | |
for tabName in tabList: | |
pm.saveShelf(tabName,shelfSaveDir + "/" + tabName) | |
def loadShelf(self): | |
""" | |
Shelfに登録してあったIcon情報を復帰する | |
""" | |
tabList = self.tabLo.getTabLabel() | |
if tabList != None: | |
for tab in tabList: | |
mm.eval("source \""+ shelfSaveDir+"/" + tab + ".mel" + "\";") | |
mm.eval("setParent "+tab+";"+tab+";") | |
def saveTab(self,tabList=None): | |
""" | |
ツールのTab情報をJson形式(単純な配列)で保存する。 | |
""" | |
if tabList == None: | |
tabList = self.tabLo.getTabLabel() | |
fileIO.fileIO(self.shelfTabSave).writeLines([json.dumps(tabList)]) | |
def loadTab(self): | |
""" | |
保存しておいたShelfTab情報から、ディスプレイを復帰する。 | |
ファイルがない場合は、実行しない。 | |
""" | |
if os.path.exists(self.shelfTabSave) == True: | |
tabIO = open(self.shelfTabSave,'r') | |
tabList = json.load(tabIO) | |
tabIO.close() | |
self.tabLo.clear() | |
for tab in tabList: | |
self.addTab(tab) | |
#*----------------------------------------------*# | |
#設定UI部分 | |
#*----------------------------------------------*# | |
def settingUI(self,*args): | |
""" | |
ツールの設定UI | |
タブの追加や削除、タブ名の変更をする。 | |
""" | |
if pm.window("toolSetting",exists=True) == True: | |
pm.deleteUI("toolSetting") | |
with pm.window("toolSetting",w=200,mnb=False,mxb=False): | |
with pm.columnLayout(adj=True): | |
with pm.rowLayout(numberOfColumns=2,adj=True): | |
pm.text("tabList") | |
self.settingTab = pm.optionMenu(cc=pm.Callback(self._changeSelectTab)) | |
self._settingUpdate() | |
self.tabText = pm.textField() | |
pm.button(l="AddTab" , c=pm.Callback(self._settingAddTab)) | |
pm.button(l="ChangeTab" , c=pm.Callback(self._changeTabName)) | |
pm.button(l="DeleteTab" , c=pm.Callback(self._deleteTab)) | |
def _settingAddTab(self,*args): | |
""" | |
ツール設定画面のTab追加を押したときに実行されるコマンド。 | |
""" | |
self.addTab(self.tabText.getText()) | |
self._settingUpdate() | |
def _settingUpdate(self,*args): | |
""" | |
Settingの画面情報(Tab)を更新する。 | |
""" | |
tabList = self.tabLo.getTabLabel() | |
self.settingTab.clear() | |
if tabList != None: | |
with self.settingTab: | |
for tab in tabList: | |
pm.menuItem(l=tab) | |
self.saveTab() | |
def _changeTabName(self,*args): | |
""" | |
タブの名前を変更する。 | |
Shelfの内容を、変更後のもので保存→TabDelete | |
→Tabを新規で作成し、Tab情報保存(Tabの並び順は維持) | |
→UI作り直し | |
""" | |
srcTab = self.settingTab.getValue() | |
changeName = self.tabText.getText() | |
tabList = self.tabLo.getTabLabel() | |
if srcTab in tabList: | |
pm.saveShelf(srcTab,shelfSaveDir+"/"+changeName) | |
self.shelfLo[srcTab].delete() | |
index = tabList.index(srcTab) | |
tabList[index] = changeName | |
self.saveTab(tabList) | |
self.createUI() | |
def _deleteTab(self,*args): | |
self.shelfLo[self.settingTab.getValue()].delete() | |
self._settingUpdate() | |
def _changeSelectTab(self,*args): | |
""" | |
selectUIのoptionを切り替えると、 | |
textFieldに選択されているoptionMenuの内容を表示する。 | |
""" | |
self.tabText.setText(self.settingTab.getValue()) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment