/
nukeTreeSearch.py
113 lines (77 loc) · 3.01 KB
/
nukeTreeSearch.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
class nodeList(object):
def __init__(self):
self.nodeList = []
def addToList(self):
self.nodeList.insert(0, nuke.thisNode())
if len(self.nodeList) >14:
del self.nodeList[14]
print 'added ' + nuke.thisNode().knob('name').getValue()
def deleteFromList(self):
for i in range(len(self.nodeList)):
if nuke.thisNode().knob('name').getValue() in self.nodeList[i].knob('name').getValue():
print 'delete' + str(self.nodeList[i].knob('name').getValue())
del self.nodeList[i]
break
a = nodeList()
nuke.addOnUserCreate(a.addToList)
nuke.addOnDestroy(a.deleteFromList)
from PySide import QtCore, QtGui
#import sys
import nuke
class myWidget(QtGui.QDialog):
def __init__(self):
super(myWidget, self).__init__()
# self.setWindowFlags(QtCore.Qt.Tool) # without this the win will not stay ontop
# self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
self.setMinimumSize(200, 300)
self.setMaximumSize(200, 300)
# Input box
self.input = QtGui.QLineEdit()
self.things = QtGui.QListWidget()
print self.input.text()
for i in a.nodeList:
self.things.addItem(i.knob('name').getValue())
layout = QtGui.QVBoxLayout()
layout.addWidget(self.input)
layout.addWidget(self.things)
# Remove margins
layout.setContentsMargins(0, 0, 0, 0)
self.setLayout(layout)
self.things.currentRowChanged.connect(self.update)
self.input.textChanged.connect(self.lineChange)
self.row = -1
def event(self, event):
is_keypress = event.type() == QtCore.QEvent.KeyPress
if is_keypress and event.key() == QtCore.Qt.Key_Up:
if self.row < 0:
self.row = -1
else:
self.row = self.row - 1
self.things.setCurrentRow(self.row)
elif is_keypress and event.key() == QtCore.Qt.Key_Down:
self.row = self.row+ 1
self.things.setCurrentRow(self.row)
else:
return super(myWidget, self).event(event)
def update(self):
nuke.selectAll()
nuke.invertSelection()
a.nodeList[self.things.currentRow()].knob('selected').setValue(True)
node = nuke.selectedNode()
xC = node.xpos() + node.screenWidth()/2
yC = node.ypos() + node.screenHeight()/2
nuke.zoom( 2, [ xC, yC ])
def lineChange(self):
if not self.input.text():
for i in a.nodeList:
self.things.addItem(i.knob('name').getValue())
else:
self.things.clear()
selNodes = []
for i in nuke.allNodes():
if self.input.text().lower() in i.knob('name').getValue().lower():
selNodes.append(i)
self.things.addItem(i.knob('name').getValue())
self.things.setCurrentRow(0)
t = myWidget()
t.show()