Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: m-labs/artiq
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 58f55fc63060
Choose a base ref
...
head repository: m-labs/artiq
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: b61eb866b6eb
Choose a head ref
  • 2 commits
  • 2 files changed
  • 1 contributor

Commits on Oct 30, 2015

  1. fix typo

    sbourdeauducq committed Oct 30, 2015
    Copy the full SHA
    f3ee97a View commit details
  2. Copy the full SHA
    b61eb86 View commit details
Showing with 44 additions and 19 deletions.
  1. +1 −1 artiq/gui/datasets.py
  2. +43 −18 artiq/gui/log.py
2 changes: 1 addition & 1 deletion artiq/gui/datasets.py
Original file line number Diff line number Diff line change
@@ -58,7 +58,7 @@ def __init__(self, dialog_parent, dock_area):
self.search = QtGui.QLineEdit()
self.search.setPlaceholderText("search...")
self.search.editingFinished.connect(self._search_datasets)
grid.addWidget(self.search, 0, )
grid.addWidget(self.search, 0, 0)

self.table = QtGui.QTableView()
self.table.setSelectionMode(QtGui.QAbstractItemView.NoSelection)
61 changes: 43 additions & 18 deletions artiq/gui/log.py
Original file line number Diff line number Diff line change
@@ -72,21 +72,39 @@ def convert(self, v, column):
return v[3]


class _LevelFilterProxyModel(QSortFilterProxyModel):
def __init__(self, min_level):
class _LogFilterProxyModel(QSortFilterProxyModel):
def __init__(self, min_level, freetext):
QSortFilterProxyModel.__init__(self)
self.min_level = min_level
self.freetext = freetext

def filterAcceptsRow(self, sourceRow, sourceParent):
model = self.sourceModel()

index = model.index(sourceRow, 0, sourceParent)
data = model.data(index, QtCore.Qt.DisplayRole)
return getattr(logging, data) >= self.min_level
accepted_level = getattr(logging, data) >= self.min_level

if self.freetext:
index = model.index(sourceRow, 1, sourceParent)
data_source = model.data(index, QtCore.Qt.DisplayRole)
index = model.index(sourceRow, 3, sourceParent)
data_message = model.data(index, QtCore.Qt.DisplayRole)
accepted_freetext = (self.freetext in data_source
or self.freetext in data_message)
else:
accepted_freetext = True

return accepted_level and accepted_freetext

def set_min_level(self, min_level):
self.min_level = min_level
self.invalidateFilter()

def set_freetext(self, freetext):
self.freetext = freetext
self.invalidateFilter()


class LogDock(dockarea.Dock):
def __init__(self):
@@ -96,14 +114,17 @@ def __init__(self):
self.addWidget(grid)

grid.addWidget(QtGui.QLabel("Minimum level: "), 0, 0)
grid.layout.setColumnStretch(0, 0)
grid.layout.setColumnStretch(1, 0)
grid.layout.setColumnStretch(2, 1)
self.filterbox = QtGui.QComboBox()
self.filterbox.addItems(["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"])
self.filterbox.setToolTip("Display entries at or above this level")
grid.addWidget(self.filterbox, 0, 1)
self.filterbox.currentIndexChanged.connect(self.filter_changed)
self.filter_level = QtGui.QComboBox()
self.filter_level.addItems(["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"])
self.filter_level.setToolTip("Display entries at or above this level")
grid.addWidget(self.filter_level, 0, 1)
self.filter_level.currentIndexChanged.connect(
self.filter_level_changed)
self.filter_freetext = QtGui.QLineEdit()
self.filter_freetext.setPlaceholderText("freetext filter...")
self.filter_freetext.editingFinished.connect(
self.filter_freetext_changed)
grid.addWidget(self.filter_freetext, 0, 2)

self.log = QtGui.QTableView()
self.log.setSelectionMode(QtGui.QAbstractItemView.NoSelection)
@@ -113,7 +134,7 @@ def __init__(self):
QtGui.QAbstractItemView.ScrollPerPixel)
self.log.setShowGrid(False)
self.log.setTextElideMode(QtCore.Qt.ElideNone)
grid.addWidget(self.log, 1, 0, colspan=3)
grid.addWidget(self.log, 1, 0, colspan=4)
self.scroll_at_bottom = False

async def sub_connect(self, host, port):
@@ -123,9 +144,12 @@ async def sub_connect(self, host, port):
async def sub_close(self):
await self.subscriber.close()

def filter_changed(self):
def filter_level_changed(self):
self.table_model_filter.set_min_level(
getattr(logging, self.filterbox.currentText()))
getattr(logging, self.filter_level.currentText()))

def filter_freetext_changed(self):
self.table_model_filter.set_freetext(self.filter_freetext.text())

def rows_inserted_before(self):
scrollbar = self.log.verticalScrollBar()
@@ -137,21 +161,22 @@ def rows_inserted_after(self):

def init_log_model(self, init):
table_model = _LogModel(self.log, init)
self.table_model_filter = _LevelFilterProxyModel(
getattr(logging, self.filterbox.currentText()))
self.table_model_filter = _LogFilterProxyModel(
getattr(logging, self.filter_level.currentText()),
self.filter_freetext.text())
self.table_model_filter.setSourceModel(table_model)
self.log.setModel(self.table_model_filter)
self.table_model_filter.rowsAboutToBeInserted.connect(self.rows_inserted_before)
self.table_model_filter.rowsInserted.connect(self.rows_inserted_after)
return table_model

def save_state(self):
return {"min_level_idx": self.filterbox.currentIndex()}
return {"min_level_idx": self.filter_level.currentIndex()}

def restore_state(self, state):
try:
idx = state["min_level_idx"]
except KeyError:
pass
else:
self.filterbox.setCurrentIndex(idx)
self.filter_level.setCurrentIndex(idx)