fixed selection issues after insert/remove ops, more about info, ...
This commit is contained in:
parent
ccf7ceb037
commit
b494a9c05e
|
@ -104,6 +104,184 @@ class TempLevel(QtCore.QObject):
|
||||||
self.is_env = is_env
|
self.is_env = is_env
|
||||||
self.color = None
|
self.color = None
|
||||||
|
|
||||||
|
class TempLevelModel(QtCore.QAbstractTableModel):
|
||||||
|
solder_changed = QtCore.pyqtSignal()
|
||||||
|
|
||||||
|
def __init__(self, parent):
|
||||||
|
super(TempLevelModel, self).__init__(parent)
|
||||||
|
self._changed = False
|
||||||
|
self.temp_levels = list()
|
||||||
|
self.headerdata = [u"Name", u"Temperature (°C)"]
|
||||||
|
|
||||||
|
def headerData(self, col, orientation, role):
|
||||||
|
if orientation == QtCore.Qt.Horizontal and role == QtCore.Qt.DisplayRole:
|
||||||
|
return QtCore.QVariant(self.headerdata[col])
|
||||||
|
return QtCore.QVariant()
|
||||||
|
|
||||||
|
def rowCount(self, parent):
|
||||||
|
return len(self.temp_levels)
|
||||||
|
|
||||||
|
def columnCount(self, parent):
|
||||||
|
return 2
|
||||||
|
|
||||||
|
def data(self, index, role):
|
||||||
|
if not index.isValid():
|
||||||
|
return QtCore.QVariant()
|
||||||
|
|
||||||
|
if role == QtCore.Qt.DisplayRole:
|
||||||
|
col = index.column()
|
||||||
|
if col == 0:
|
||||||
|
return QtCore.QVariant(self.temp_levels[index.row()].name)
|
||||||
|
else:
|
||||||
|
return QtCore.QVariant(self.temp_levels[index.row()].temp)
|
||||||
|
|
||||||
|
if index.column() == 0 and role == QtCore.Qt.DecorationRole:
|
||||||
|
p = QtGui.QPixmap(10,10)
|
||||||
|
color = self.temp_levels[index.row()].color
|
||||||
|
p.fill(color)
|
||||||
|
return p
|
||||||
|
|
||||||
|
return QtCore.QVariant()
|
||||||
|
|
||||||
|
def flags(self, index):
|
||||||
|
if not index.isValid():
|
||||||
|
return 0
|
||||||
|
return QtCore.Qt.ItemFlags(QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEditable)
|
||||||
|
|
||||||
|
def setData(self, index, variant, role):
|
||||||
|
if index.isValid() and role == QtCore.Qt.EditRole:
|
||||||
|
col = index.column()
|
||||||
|
if col == 0:
|
||||||
|
self.temp_levels[index.row()].name = str(variant.toString())
|
||||||
|
elif col == 1:
|
||||||
|
self.temp_levels[index.row()].temp = variant.toInt()[0]
|
||||||
|
print "emit solder_changed"
|
||||||
|
self.solder_changed.emit()
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
def remove_temp_level(self, index):
|
||||||
|
tmp = self.temp_levels[index]
|
||||||
|
del self.temp_levels[index]
|
||||||
|
self.reset()
|
||||||
|
self.solder_changed.emit()
|
||||||
|
return tmp
|
||||||
|
|
||||||
|
def add_temp_level(self, index, temp_level):
|
||||||
|
self.temp_levels.insert(index.row() + 1, temp_level)
|
||||||
|
set_colors(self.temp_levels)
|
||||||
|
self.reset()
|
||||||
|
self.solder_changed.emit()
|
||||||
|
|
||||||
|
def setTempLevels(self, temp_levels):
|
||||||
|
assert isinstance(temp_levels, list)
|
||||||
|
self.temp_levels = temp_levels
|
||||||
|
self.reset()
|
||||||
|
|
||||||
|
|
||||||
|
def clear(self):
|
||||||
|
self.temp_levels = list()
|
||||||
|
self.reset()
|
||||||
|
|
||||||
|
|
||||||
|
class TempLevelWidget(QtGui.QWidget):
|
||||||
|
temp_level_removed = QtCore.pyqtSignal(TempLevel)
|
||||||
|
solder_changed = QtCore.pyqtSignal()
|
||||||
|
|
||||||
|
def __init__(self, parent, readonly=False):
|
||||||
|
super(TempLevelWidget, self).__init__(parent)
|
||||||
|
self.readonly = readonly
|
||||||
|
self.temp_level_model = TempLevelModel(self)
|
||||||
|
|
||||||
|
self.temp_level_view = QtGui.QTableView()
|
||||||
|
self.temp_level_view.setModel(self.temp_level_model)
|
||||||
|
self.temp_level_view.verticalHeader().setVisible(False)
|
||||||
|
self.temp_level_view.resizeColumnsToContents()
|
||||||
|
self.temp_level_view.horizontalHeader().setStretchLastSection(True)
|
||||||
|
self.temp_level_view.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows)
|
||||||
|
|
||||||
|
h = QtGui.QHBoxLayout()
|
||||||
|
h.addWidget(self.temp_level_view)
|
||||||
|
self.setLayout(h)
|
||||||
|
|
||||||
|
self.connect(
|
||||||
|
self.temp_level_view,
|
||||||
|
QtCore.SIGNAL("clicked(QModelIndex)"),
|
||||||
|
self.temp_level_selected)
|
||||||
|
|
||||||
|
if not readonly:
|
||||||
|
self.controls = AddRemoveWidget(self)
|
||||||
|
h.addWidget(self.controls)
|
||||||
|
|
||||||
|
self.connect(
|
||||||
|
self.controls.add_button,
|
||||||
|
QtCore.SIGNAL("clicked()"),
|
||||||
|
self.add_temp_level)
|
||||||
|
|
||||||
|
self.connect(
|
||||||
|
self.controls.remove_button,
|
||||||
|
QtCore.SIGNAL("clicked()"),
|
||||||
|
self.remove_temp_level)
|
||||||
|
|
||||||
|
self.connect(
|
||||||
|
self.controls.up_button,
|
||||||
|
QtCore.SIGNAL("clicked()"),
|
||||||
|
self.temp_level_up)
|
||||||
|
|
||||||
|
self.connect(
|
||||||
|
self.controls.down_button,
|
||||||
|
QtCore.SIGNAL("clicked()"),
|
||||||
|
self.temp_level_down)
|
||||||
|
|
||||||
|
self.connect(
|
||||||
|
self.temp_level_model,
|
||||||
|
QtCore.SIGNAL("solder_changed()"),
|
||||||
|
self._solder_changed)
|
||||||
|
|
||||||
|
def _solder_changed(self):
|
||||||
|
print self._solder_changed
|
||||||
|
self.solder_changed.emit()
|
||||||
|
|
||||||
|
|
||||||
|
def setData(self, solder):
|
||||||
|
self.temp_level_model.setTempLevels(solder.temp_levels)
|
||||||
|
self.temp_level_view.resizeColumnsToContents()
|
||||||
|
|
||||||
|
|
||||||
|
def add_temp_level(self):
|
||||||
|
index = self.temp_level_view.currentIndex()
|
||||||
|
self.temp_level_model.add_temp_level(index, TempLevel("new " + str(self.temp_level_model.rowCount(None)), 0))
|
||||||
|
self.temp_level_view.setCurrentIndex(self.temp_level_model.index(index.row() + 1, 0))
|
||||||
|
|
||||||
|
|
||||||
|
def remove_temp_level(self):
|
||||||
|
self.temp_level_removed.emit(
|
||||||
|
self.temp_level_model.remove_temp_level(
|
||||||
|
self.temp_level_view.currentIndex().row()))
|
||||||
|
self.solder_changed.emit()
|
||||||
|
|
||||||
|
def temp_level_up(self):
|
||||||
|
dst_row = self.temp_level_view.currentIndex().row()
|
||||||
|
self.temp_level_model.temp_levels[dst_row - 1], self.temp_level_model.temp_levels[dst_row] = self.temp_level_model.temp_levels[dst_row], self.temp_level_model.temp_levels[dst_row - 1]
|
||||||
|
self.temp_level_model.reset()
|
||||||
|
self.solder_changed.emit()
|
||||||
|
|
||||||
|
def temp_level_down(self):
|
||||||
|
dst_row = self.selected_temp_levels_view.currentIndex().row()
|
||||||
|
self.temp_level_model.temp_levels[dst_row], self.temp_level_model.temp_levels[dst_row + 1] = self.temp_level_model.temp_levels[dst_row + 1], self.temp_level_model.temp_levels[dst_row]
|
||||||
|
self.temp_level_model.reset()
|
||||||
|
self.solder_changed.emit()
|
||||||
|
|
||||||
|
|
||||||
|
def temp_level_selected(self, index):
|
||||||
|
if index.isValid():
|
||||||
|
row = index.row()
|
||||||
|
if not self.readonly:
|
||||||
|
is_env = self.temp_level_model.temp_levels[row].is_env
|
||||||
|
#is_end = row == len(self.temp_level_model.temp_levels) - 1
|
||||||
|
#self.controls.add_button.setEnabled(not is_end)
|
||||||
|
self.controls.remove_button.setEnabled(not is_env)
|
||||||
|
|
||||||
|
|
||||||
class Solder(QtCore.QObject):
|
class Solder(QtCore.QObject):
|
||||||
|
|
||||||
|
@ -282,9 +460,11 @@ class Solder(QtCore.QObject):
|
||||||
rate.append(etree.Element("state", {"name" : temp_level.name}))
|
rate.append(etree.Element("state", {"name" : temp_level.name}))
|
||||||
solder_node.append(rate)
|
solder_node.append(rate)
|
||||||
|
|
||||||
dirname = os.path.join(os.path.dirname(__file__), "solder_types")
|
dirname = SolderListModel.dirname()
|
||||||
root = etree.Element("xml")
|
root = etree.Element("xml")
|
||||||
root.append(solder_node)
|
root.append(solder_node)
|
||||||
|
if self.filename is None:
|
||||||
|
self.filename = os.path.join(dirname, self.name + ".xml")
|
||||||
etree.ElementTree(root).write(self.filename, "UTF-8", True)
|
etree.ElementTree(root).write(self.filename, "UTF-8", True)
|
||||||
self.changed = False
|
self.changed = False
|
||||||
|
|
||||||
|
@ -306,7 +486,7 @@ class SolderListModel(QtCore.QAbstractListModel):
|
||||||
return len(self.listdata)
|
return len(self.listdata)
|
||||||
|
|
||||||
def reload(self):
|
def reload(self):
|
||||||
dirname = os.path.join(os.path.dirname(__file__), "solder_types")
|
dirname = self.dirname()
|
||||||
dirlisting = filter(lambda x: os.path.splitext(x)[1] == ".xml", os.listdir(dirname))
|
dirlisting = filter(lambda x: os.path.splitext(x)[1] == ".xml", os.listdir(dirname))
|
||||||
self.listdata = []
|
self.listdata = []
|
||||||
for p in dirlisting:
|
for p in dirlisting:
|
||||||
|
@ -345,92 +525,63 @@ class SolderListModel(QtCore.QAbstractListModel):
|
||||||
return QtCore.Qt.ItemFlags(QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEditable)
|
return QtCore.Qt.ItemFlags(QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEditable)
|
||||||
|
|
||||||
def create_solder(self):
|
def create_solder(self):
|
||||||
solder = Solder("new", "")
|
solder = Solder(None, "new", "")
|
||||||
|
|
||||||
tl = solder.add_temp_level("environment temp", getTemperature(), True)
|
tl = solder.add_temp_level("environment temp", getTemperature(), True)
|
||||||
tl.color = QtGui.QColor(0, 0, 0)
|
tl.color = QtGui.QColor(0, 0, 0)
|
||||||
self.listdata.append(solder)
|
self.listdata.append(solder)
|
||||||
self.reset()
|
self.reset()
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
class TempLevelModel(QtCore.QAbstractTableModel):
|
def dirname():
|
||||||
solder_changed = QtCore.pyqtSignal()
|
return os.path.join(os.path.dirname(__file__), "solder_types")
|
||||||
|
|
||||||
def __init__(self, parent):
|
|
||||||
super(TempLevelModel, self).__init__(parent)
|
|
||||||
self._changed = False
|
|
||||||
self.temp_levels = list()
|
|
||||||
self.headerdata = [u"Name", u"Temperature (°C)"]
|
|
||||||
|
|
||||||
def headerData(self, col, orientation, role):
|
|
||||||
if orientation == QtCore.Qt.Horizontal and role == QtCore.Qt.DisplayRole:
|
|
||||||
return QtCore.QVariant(self.headerdata[col])
|
|
||||||
return QtCore.QVariant()
|
|
||||||
|
|
||||||
def rowCount(self, parent):
|
|
||||||
return len(self.temp_levels)
|
|
||||||
|
|
||||||
def columnCount(self, parent):
|
|
||||||
return 2
|
|
||||||
|
|
||||||
def data(self, index, role):
|
|
||||||
if not index.isValid():
|
|
||||||
return QtCore.QVariant()
|
|
||||||
|
|
||||||
if role == QtCore.Qt.DisplayRole:
|
|
||||||
col = index.column()
|
|
||||||
if col == 0:
|
|
||||||
return QtCore.QVariant(self.temp_levels[index.row()].name)
|
|
||||||
else:
|
|
||||||
return QtCore.QVariant(self.temp_levels[index.row()].temp)
|
|
||||||
|
|
||||||
if index.column() == 0 and role == QtCore.Qt.DecorationRole:
|
|
||||||
p = QtGui.QPixmap(10,10)
|
|
||||||
color = self.temp_levels[index.row()].color
|
|
||||||
p.fill(color)
|
|
||||||
return p
|
|
||||||
|
|
||||||
return QtCore.QVariant()
|
|
||||||
|
|
||||||
def flags(self, index):
|
|
||||||
if not index.isValid():
|
|
||||||
return 0
|
|
||||||
return QtCore.Qt.ItemFlags(QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEditable)
|
|
||||||
|
|
||||||
def setData(self, index, variant, role):
|
|
||||||
if index.isValid() and role == QtCore.Qt.EditRole:
|
|
||||||
col = index.column()
|
|
||||||
if col == 0:
|
|
||||||
self.temp_levels[index.row()].name = str(variant.toString())
|
|
||||||
elif col == 1:
|
|
||||||
self.temp_levels[index.row()].temp = variant.toInt()[0]
|
|
||||||
print "emit solder_changed"
|
|
||||||
self.solder_changed.emit()
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
def remove_temp_level(self, index):
|
|
||||||
tmp = self.temp_levels[index]
|
|
||||||
del self.temp_levels[index]
|
|
||||||
self.reset()
|
|
||||||
self.solder_changed.emit()
|
|
||||||
return tmp
|
|
||||||
|
|
||||||
def add_temp_level(self, index, temp_level):
|
|
||||||
self.temp_levels.insert(index.row() + 1, temp_level)
|
|
||||||
set_colors(self.temp_levels)
|
|
||||||
self.reset()
|
|
||||||
self.solder_changed.emit()
|
|
||||||
|
|
||||||
def setTempLevels(self, temp_levels):
|
|
||||||
assert isinstance(temp_levels, list)
|
|
||||||
self.temp_levels = temp_levels
|
|
||||||
self.reset()
|
|
||||||
|
|
||||||
|
|
||||||
def clear(self):
|
|
||||||
self.temp_levels = list()
|
class SolderWidget(QtGui.QWidget):
|
||||||
self.reset()
|
def __init__(self, parent, readonly=False):
|
||||||
|
super(SolderWidget, self).__init__(parent)
|
||||||
|
self.solder_model = SolderListModel(self)
|
||||||
|
self.solder_view = QtGui.QListView()
|
||||||
|
self.solder_view.setModel(self.solder_model)
|
||||||
|
self.solder_controls = AddRemoveWidget(self, False)
|
||||||
|
|
||||||
|
layout = QtGui.QHBoxLayout(self)
|
||||||
|
layout.addWidget(self.solder_view, 3)
|
||||||
|
layout.addWidget(self.solder_controls, 1)
|
||||||
|
|
||||||
|
|
||||||
|
self.connect(
|
||||||
|
self.solder_controls.add_button,
|
||||||
|
QtCore.SIGNAL("clicked()"),
|
||||||
|
self.solder_model.create_solder)
|
||||||
|
|
||||||
|
self.connect(
|
||||||
|
self.solder_controls.remove_button,
|
||||||
|
QtCore.SIGNAL("clicked()"),
|
||||||
|
self.remove_solder)
|
||||||
|
|
||||||
|
self.solder_view.setCurrentIndex(self.solder_model.index(0,0))
|
||||||
|
|
||||||
|
def remove_solder(self):
|
||||||
|
index = self.solder_view.currentIndex()
|
||||||
|
solder = self.solder_model.listdata[index.row()]
|
||||||
|
try:
|
||||||
|
os.remove(solder.filename)
|
||||||
|
except OSError, e:
|
||||||
|
print e
|
||||||
|
pass
|
||||||
|
del self.solder_model.listdata[index.row()]
|
||||||
|
self.solder_model.reset()
|
||||||
|
new_index = self.solder_model.index(0)
|
||||||
|
self.solder_view.setCurrentIndex(new_index)
|
||||||
|
return new_index
|
||||||
|
|
||||||
|
def save_solder(self, index):
|
||||||
|
self.solder_model.listdata[index.row()].save()
|
||||||
|
self.solder_model.reset()
|
||||||
|
new_index = self.solder_model.index(self.solder_model.listdata.index(self.plotter.solder))
|
||||||
|
self.solder_widget.solder_view.setCurrentIndex(new_index)
|
||||||
|
|
||||||
|
|
||||||
class Plotter(FigureCanvas):
|
class Plotter(FigureCanvas):
|
||||||
|
@ -475,21 +626,25 @@ class Plotter(FigureCanvas):
|
||||||
self.updated = False
|
self.updated = False
|
||||||
|
|
||||||
def update_figure(self):
|
def update_figure(self):
|
||||||
self.fig.lines = lines = list()
|
|
||||||
if self.updated:
|
if self.updated:
|
||||||
|
self.fig.lines = lines = list()
|
||||||
self.updated = False
|
self.updated = False
|
||||||
self.axes.patches = list()
|
self.axes.patches = list()
|
||||||
self.axes.texts = list()
|
self.axes.texts = list()
|
||||||
self.x = list()
|
self.x = list()
|
||||||
self.y = list()
|
self.y = list()
|
||||||
|
|
||||||
self.x, self.y, self.xmin, self.xmax, self.ymin, self.ymax, self.used, self.unused = self.solder.calc_profile()
|
try:
|
||||||
|
self.x, self.y, self.xmin, self.xmax, self.ymin, self.ymax, self.used, self.unused = self.solder.calc_profile()
|
||||||
|
except ValueError:
|
||||||
|
self.x, self.y, self.xmin, self.xmax, self.ymin, self.ymax, self.used, self.unused = [], [], 0., 300., 0., 300., [], self.solder.temp_levels
|
||||||
|
|
||||||
self.plot_data.set_xdata(self.x)
|
self.plot_data.set_xdata(self.x)
|
||||||
self.plot_data.set_ydata(self.y)
|
self.plot_data.set_ydata(self.y)
|
||||||
|
|
||||||
self.axes.set_xbound(lower=self.xmin, upper=self.xmax + 20)
|
self.axes.set_xbound(lower=self.xmin, upper=self.xmax + 20)
|
||||||
self.axes.set_ybound(lower=self.ymin, upper=self.ymax + 20)
|
self.axes.set_ybound(lower=self.ymin, upper=self.ymax + 20)
|
||||||
|
self.axes.set_xlim(self.xmin, self.xmax + 20, auto=True)
|
||||||
|
|
||||||
self.axes.set_yticks(self.y)
|
self.axes.set_yticks(self.y)
|
||||||
self.axes.set_xticks(self.x)
|
self.axes.set_xticks(self.x)
|
||||||
|
@ -502,16 +657,15 @@ class Plotter(FigureCanvas):
|
||||||
|
|
||||||
self.axes.legend(("Estimated profile",), loc=2)
|
self.axes.legend(("Estimated profile",), loc=2)
|
||||||
|
|
||||||
for temp_level in self.solder.temp_levels:
|
for temp_level in self.solder.temp_levels:
|
||||||
if not temp_level.is_env:
|
if not temp_level.is_env:
|
||||||
line = Line2D([0, self.xmax + 20], [temp_level.temp, temp_level.temp],
|
line = Line2D([0, self.xmax + 20], [temp_level.temp, temp_level.temp],
|
||||||
transform=self.axes.transData, figure=self.fig, color=str(temp_level.color.name()), label="name", zorder=1)
|
transform=self.axes.transData, figure=self.fig, color=str(temp_level.color.name()), label="name", zorder=1)
|
||||||
lines.append(line)
|
lines.append(line)
|
||||||
|
|
||||||
self.draw()
|
self.draw()
|
||||||
|
|
||||||
def solder_changed(self):
|
def solder_changed(self):
|
||||||
print self.solder_changed
|
|
||||||
self.solder.setChanged()
|
self.solder.setChanged()
|
||||||
self.updated = True
|
self.updated = True
|
||||||
|
|
||||||
|
@ -700,9 +854,10 @@ class ConstraintWidget(QtGui.QWidget):
|
||||||
self.controls.up_button.setEnabled(True)
|
self.controls.up_button.setEnabled(True)
|
||||||
self.controls.down_button.setEnabled(True)
|
self.controls.down_button.setEnabled(True)
|
||||||
|
|
||||||
|
|
||||||
def add_constraint(self):
|
def add_constraint(self):
|
||||||
self.constraint_model.append_constraint()
|
self.constraint_model.append_constraint()
|
||||||
|
new_index = self.constraint_model.rowCount() - 1
|
||||||
|
self.constraint_view.setCurrentIndex(self.constraint_model.index(new_index, 0))
|
||||||
self.set_controls()
|
self.set_controls()
|
||||||
self.solder_changed.emit()
|
self.solder_changed.emit()
|
||||||
|
|
||||||
|
@ -789,6 +944,28 @@ class DurationConstraintWidget(ConstraintWidget):
|
||||||
self.controls.value.setValue(0)
|
self.controls.value.setValue(0)
|
||||||
|
|
||||||
|
|
||||||
|
class RateConstraintWidget(ConstraintWidget):
|
||||||
|
|
||||||
|
def _set_data(self, solder):
|
||||||
|
self.spinbox_block = True
|
||||||
|
self.constraint_model.constraint_list = solder.rates
|
||||||
|
self.constraint_model.reset()
|
||||||
|
ix = self.constraint_model.index(0, 0)
|
||||||
|
self._constraint_selected(ix)
|
||||||
|
self.constraint_view.setCurrentIndex(ix)
|
||||||
|
|
||||||
|
|
||||||
|
def _constraint_selected(self, index):
|
||||||
|
if index.isValid():
|
||||||
|
self.spinbox_block = True
|
||||||
|
temp_levels, value = self.constraint_model.constraint_list[index.row()]
|
||||||
|
self.selected_temp_levels.setTempLevels(temp_levels)
|
||||||
|
self.controls.value.setValue(value)
|
||||||
|
else:
|
||||||
|
self.spinbox_block = True
|
||||||
|
self.selected_temp_levels.setTempLevels([])
|
||||||
|
self.controls.value.setValue(0)
|
||||||
|
|
||||||
|
|
||||||
class OvenControlsWidget(QtGui.QWidget):
|
class OvenControlsWidget(QtGui.QWidget):
|
||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None):
|
||||||
|
@ -850,148 +1027,6 @@ class OvenControlsWidget(QtGui.QWidget):
|
||||||
self.start_button.setIcon(self.sicon)
|
self.start_button.setIcon(self.sicon)
|
||||||
|
|
||||||
|
|
||||||
class RateConstraintWidget(ConstraintWidget):
|
|
||||||
|
|
||||||
def _set_data(self, solder):
|
|
||||||
self.spinbox_block = True
|
|
||||||
self.constraint_model.constraint_list = solder.rates
|
|
||||||
self.constraint_model.reset()
|
|
||||||
ix = self.constraint_model.index(0, 0)
|
|
||||||
self._constraint_selected(ix)
|
|
||||||
self.constraint_view.setCurrentIndex(ix)
|
|
||||||
|
|
||||||
|
|
||||||
def _constraint_selected(self, index):
|
|
||||||
if index.isValid():
|
|
||||||
self.spinbox_block = True
|
|
||||||
temp_levels, value = self.constraint_model.constraint_list[index.row()]
|
|
||||||
self.selected_temp_levels.setTempLevels(temp_levels)
|
|
||||||
self.controls.value.setValue(value)
|
|
||||||
else:
|
|
||||||
self.spinbox_block = True
|
|
||||||
self.selected_temp_levels.setTempLevels([])
|
|
||||||
self.controls.value.setValue(0)
|
|
||||||
|
|
||||||
class SolderWidget(QtGui.QWidget):
|
|
||||||
def __init__(self, parent, readonly=False):
|
|
||||||
super(SolderWidget, self).__init__(parent)
|
|
||||||
self.solder_model = SolderListModel(self)
|
|
||||||
self.solder_view = QtGui.QListView()
|
|
||||||
self.solder_view.setModel(self.solder_model)
|
|
||||||
self.solder_controls = AddRemoveWidget(self, False)
|
|
||||||
|
|
||||||
layout = QtGui.QHBoxLayout(self)
|
|
||||||
layout.addWidget(self.solder_view, 3)
|
|
||||||
layout.addWidget(self.solder_controls, 1)
|
|
||||||
|
|
||||||
|
|
||||||
self.connect(
|
|
||||||
self.solder_controls.add_button,
|
|
||||||
QtCore.SIGNAL("clicked()"),
|
|
||||||
self.solder_model.create_solder)
|
|
||||||
|
|
||||||
self.solder_view.setCurrentIndex(self.solder_model.index(0,0))
|
|
||||||
|
|
||||||
|
|
||||||
class TempLevelWidget(QtGui.QWidget):
|
|
||||||
temp_level_removed = QtCore.pyqtSignal(TempLevel)
|
|
||||||
solder_changed = QtCore.pyqtSignal()
|
|
||||||
|
|
||||||
def __init__(self, parent, readonly=False):
|
|
||||||
super(TempLevelWidget, self).__init__(parent)
|
|
||||||
self.readonly = readonly
|
|
||||||
self.temp_level_model = TempLevelModel(self)
|
|
||||||
|
|
||||||
self.temp_level_view = QtGui.QTableView()
|
|
||||||
self.temp_level_view.setModel(self.temp_level_model)
|
|
||||||
self.temp_level_view.verticalHeader().setVisible(False)
|
|
||||||
self.temp_level_view.resizeColumnsToContents()
|
|
||||||
self.temp_level_view.horizontalHeader().setStretchLastSection(True)
|
|
||||||
self.temp_level_view.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows)
|
|
||||||
|
|
||||||
h = QtGui.QHBoxLayout()
|
|
||||||
h.addWidget(self.temp_level_view)
|
|
||||||
self.setLayout(h)
|
|
||||||
|
|
||||||
self.connect(
|
|
||||||
self.temp_level_view,
|
|
||||||
QtCore.SIGNAL("clicked(QModelIndex)"),
|
|
||||||
self.temp_level_selected)
|
|
||||||
|
|
||||||
if not readonly:
|
|
||||||
self.controls = AddRemoveWidget(self)
|
|
||||||
h.addWidget(self.controls)
|
|
||||||
|
|
||||||
self.connect(
|
|
||||||
self.controls.add_button,
|
|
||||||
QtCore.SIGNAL("clicked()"),
|
|
||||||
self.add_temp_level)
|
|
||||||
|
|
||||||
self.connect(
|
|
||||||
self.controls.remove_button,
|
|
||||||
QtCore.SIGNAL("clicked()"),
|
|
||||||
self.remove_temp_level)
|
|
||||||
|
|
||||||
self.connect(
|
|
||||||
self.controls.up_button,
|
|
||||||
QtCore.SIGNAL("clicked()"),
|
|
||||||
self.temp_level_up)
|
|
||||||
|
|
||||||
self.connect(
|
|
||||||
self.controls.down_button,
|
|
||||||
QtCore.SIGNAL("clicked()"),
|
|
||||||
self.temp_level_down)
|
|
||||||
|
|
||||||
self.connect(
|
|
||||||
self.temp_level_model,
|
|
||||||
QtCore.SIGNAL("solder_changed()"),
|
|
||||||
self._solder_changed)
|
|
||||||
|
|
||||||
def _solder_changed(self):
|
|
||||||
print self._solder_changed
|
|
||||||
self.solder_changed.emit()
|
|
||||||
|
|
||||||
|
|
||||||
def setData(self, solder):
|
|
||||||
self.temp_level_model.setTempLevels(solder.temp_levels)
|
|
||||||
self.temp_level_view.resizeColumnsToContents()
|
|
||||||
|
|
||||||
|
|
||||||
def add_temp_level(self):
|
|
||||||
index = self.temp_level_view.currentIndex()
|
|
||||||
self.temp_level_model.add_temp_level(index, TempLevel("new " + str(self.temp_level_model.rowCount(None)), 0))
|
|
||||||
self.temp_level_view.setCurrentIndex(self.temp_level_model.index(index.row() + 1, 0))
|
|
||||||
self.plotter.solder.changed = True
|
|
||||||
self.solder_changed.emit()
|
|
||||||
|
|
||||||
|
|
||||||
def remove_temp_level(self):
|
|
||||||
self.temp_level_removed.emit(
|
|
||||||
self.temp_level_model.remove_temp_level(
|
|
||||||
self.temp_level_view.currentIndex().row()))
|
|
||||||
self.solder_changed.emit()
|
|
||||||
|
|
||||||
def temp_level_up(self):
|
|
||||||
dst_row = self.temp_level_view.currentIndex().row()
|
|
||||||
self.temp_level_model.temp_levels[dst_row - 1], self.temp_level_model.temp_levels[dst_row] = self.temp_level_model.temp_levels[dst_row], self.temp_level_model.temp_levels[dst_row - 1]
|
|
||||||
self.temp_level_model.reset()
|
|
||||||
self.solder_changed.emit()
|
|
||||||
|
|
||||||
def temp_level_down(self):
|
|
||||||
dst_row = self.selected_temp_levels_view.currentIndex().row()
|
|
||||||
self.temp_level_model.temp_levels[dst_row], self.temp_level_model.temp_levels[dst_row + 1] = self.temp_level_model.temp_levels[dst_row + 1], self.temp_level_model.temp_levels[dst_row]
|
|
||||||
self.temp_level_model.reset()
|
|
||||||
self.solder_changed.emit()
|
|
||||||
|
|
||||||
|
|
||||||
def temp_level_selected(self, index):
|
|
||||||
if index.isValid():
|
|
||||||
row = index.row()
|
|
||||||
if not self.readonly:
|
|
||||||
is_env = self.temp_level_model.temp_levels[row].is_env
|
|
||||||
#is_end = row == len(self.temp_level_model.temp_levels) - 1
|
|
||||||
#self.controls.add_button.setEnabled(not is_end)
|
|
||||||
self.controls.remove_button.setEnabled(not is_env)
|
|
||||||
|
|
||||||
|
|
||||||
class Report(QtGui.QWidget):
|
class Report(QtGui.QWidget):
|
||||||
|
@ -1071,8 +1106,6 @@ class ApplicationWindow(QtGui.QMainWindow):
|
||||||
self.controls_widget = OvenControlsWidget(self)
|
self.controls_widget = OvenControlsWidget(self)
|
||||||
self.controls_widget.setVisible(False)
|
self.controls_widget.setVisible(False)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
self.connect(
|
self.connect(
|
||||||
self.duration_widget,
|
self.duration_widget,
|
||||||
QtCore.SIGNAL("solder_changed()"),
|
QtCore.SIGNAL("solder_changed()"),
|
||||||
|
@ -1131,7 +1164,7 @@ class ApplicationWindow(QtGui.QMainWindow):
|
||||||
|
|
||||||
self.setCentralWidget(self.splitter)
|
self.setCentralWidget(self.splitter)
|
||||||
|
|
||||||
self.statusBar().showMessage("I'm in reflow heaven", 2000)
|
self.statusBar().showMessage("Reflow GORE!1!", 10000)
|
||||||
|
|
||||||
self.temp_level_widget.temp_level_removed.connect(self.duration_widget.slot_temp_level_removed)
|
self.temp_level_widget.temp_level_removed.connect(self.duration_widget.slot_temp_level_removed)
|
||||||
self.temp_level_widget.temp_level_removed.connect(self.rate_widget.slot_temp_level_removed)
|
self.temp_level_widget.temp_level_removed.connect(self.rate_widget.slot_temp_level_removed)
|
||||||
|
@ -1161,14 +1194,7 @@ class ApplicationWindow(QtGui.QMainWindow):
|
||||||
solder.log_message.connect(self.profile_log.setPlainText)
|
solder.log_message.connect(self.profile_log.setPlainText)
|
||||||
|
|
||||||
def remove_solder(self):
|
def remove_solder(self):
|
||||||
index = self.solder_widget.solder_view.currentIndex()
|
self.solder_selected(self.solder_widget.remove_solder())
|
||||||
solder = self.solder_widget.solder_model.listdata[index.row()]
|
|
||||||
del self.solder_widget.solder_model.listdata[index.row()]
|
|
||||||
self.solder_widget.solder_model.reset()
|
|
||||||
new_index = self.solder_widget.solder_model.index(0)
|
|
||||||
self.solder_widget.solder_view.setCurrentIndex(new_index)
|
|
||||||
self.solder_selected(new_index)
|
|
||||||
os.remove(solder.filename)
|
|
||||||
|
|
||||||
def open_controls_view(self):
|
def open_controls_view(self):
|
||||||
self.controls_widget.show()
|
self.controls_widget.show()
|
||||||
|
@ -1186,7 +1212,9 @@ class ApplicationWindow(QtGui.QMainWindow):
|
||||||
|
|
||||||
def save_solder(self):
|
def save_solder(self):
|
||||||
self.plotter.solder.save()
|
self.plotter.solder.save()
|
||||||
self.solder_widget.solder_model.reload()
|
self.solder_widget.solder_model.reset()
|
||||||
|
new_index = self.solder_widget.solder_model.index(self.solder_widget.solder_model.listdata.index(self.plotter.solder))
|
||||||
|
self.solder_widget.solder_view.setCurrentIndex(new_index)
|
||||||
|
|
||||||
def reload_solder(self):
|
def reload_solder(self):
|
||||||
old_index = self.solder_widget.solder_view.currentIndex()
|
old_index = self.solder_widget.solder_view.currentIndex()
|
||||||
|
@ -1205,9 +1233,7 @@ class ApplicationWindow(QtGui.QMainWindow):
|
||||||
|
|
||||||
def about(self):
|
def about(self):
|
||||||
QtGui.QMessageBox.about(self, "About %s" % progname,
|
QtGui.QMessageBox.about(self, "About %s" % progname,
|
||||||
u"%(prog)s version %(version)s\n" \
|
QtCore.QString(u"<html>%(prog)s version %(version)s<br/>Copyright \N{COPYRIGHT SIGN} 2012 Stefan Kögl<br/><br/>reflowctl frontend<br/><br/>Special thanks to <a href='http://www.chaostreff-dortmund.de/'>Chaostreff Dortmund</a></html>" % {"prog": progname, "version": progversion}))
|
||||||
u"Copyright \N{COPYRIGHT SIGN} 2012 Stefan Kögl\n\n" \
|
|
||||||
u"reflowctl frontend" % {"prog": progname, "version": progversion})
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
|
Loading…
Reference in New Issue