| | |
| | |
| |
|
| | from PyQt4 import QtCore, QtGui |
| |
|
| | import DIMputs as my_DI |
| |
|
| |
|
| | |
| | class MainWindow(QtGui.QWidget): |
| | updateSignal = QtCore.pyqtSignal() |
| | def __init__(self, parent=None): |
| | |
| | |
| | self.path = "" |
| | self.cur_rein_num = 0 |
| | self.data = None |
| | self.format = "" |
| | self.cell_limit = float("inf") |
| |
|
| | super(MainWindow, self).__init__(parent) |
| |
|
| | |
| | pathLabel = QtGui.QLabel("Path:") |
| | self.pathLabel = QtGui.QLabel(self.path) |
| | self.pathLabel.setFrameStyle(QtGui.QFrame.StyledPanel | |
| | QtGui.QFrame.Sunken) |
| | self.pathLabel.setToolTip("Current File") |
| | self.pathButton = QtGui.QPushButton("P&ath...") |
| | self.pathButton.setToolTip("Set the item you want to inspect") |
| | self.connect(self.pathButton, QtCore.SIGNAL("clicked()"), self.setPath) |
| | |
| |
|
| | |
| | cell_limit_label = QtGui.QLabel("Cell Limit:") |
| | self.cell_limit_chooser = QtGui.QSpinBox() |
| | self.cell_limit_chooser.setMaximum(99999) |
| | cell_limit_label.setToolTip("Limits the number of elements per cell") |
| | self.cell_limit_chooser.setToolTip("Set to zero to show all elements") |
| |
|
| | |
| | self.format_drop = QtGui.QToolButton(self) |
| | self.format_drop.setPopupMode(QtGui.QToolButton.MenuButtonPopup) |
| | self.format_drop.setMenu(QtGui.QMenu(self.format_drop)) |
| | self.format_drop.setText("Format") |
| |
|
| | self.format_syntax = QtGui.QPushButton("Syntax") |
| | self.format_phrase = QtGui.QPushButton("Phrase") |
| | self.format_syntaxCube = QtGui.QPushButton("Syntax Cube (-Tall flag)") |
| | self.format_phraseStackFlag = QtGui.QPushButton("Phrase Stack (search-graph)") |
| | self.format_phraseStackVerbose = QtGui.QPushButton("Phrase Stack (verbose)") |
| | self.format_syntaxCubeFlag = QtGui.QPushButton("Syntax Cube (search-graph)") |
| | self.format_mbot = QtGui.QPushButton("MBOT") |
| | |
| |
|
| | format_action_syntax = QtGui.QWidgetAction(self.format_drop) |
| | format_action_syntax.setDefaultWidget(self.format_syntax) |
| |
|
| | format_action_phrase = QtGui.QWidgetAction(self.format_drop) |
| | format_action_phrase.setDefaultWidget(self.format_phrase) |
| | |
| | format_action_syntaxCube = QtGui.QWidgetAction(self.format_drop) |
| | format_action_syntaxCube.setDefaultWidget(self.format_syntaxCube) |
| | |
| | format_action_phraseStackFlag = QtGui.QWidgetAction(self.format_drop) |
| | format_action_phraseStackFlag.setDefaultWidget(self.format_phraseStackFlag) |
| | |
| | format_action_phraseStackVerbose = QtGui.QWidgetAction(self.format_drop) |
| | format_action_phraseStackVerbose.setDefaultWidget(self.format_phraseStackVerbose) |
| |
|
| | format_action_syntaxCubeFlag = QtGui.QWidgetAction(self.format_drop) |
| | format_action_syntaxCubeFlag.setDefaultWidget(self.format_syntaxCubeFlag) |
| | |
| | format_action_mbot = QtGui.QWidgetAction(self.format_drop) |
| | format_action_mbot.setDefaultWidget(self.format_mbot) |
| |
|
| | self.format_drop.menu().addAction(format_action_syntax) |
| | self.format_drop.menu().addAction(format_action_phrase) |
| | self.format_drop.menu().addAction(format_action_syntaxCube) |
| | self.format_drop.menu().addAction(format_action_phraseStackFlag) |
| | self.format_drop.menu().addAction(format_action_phraseStackVerbose) |
| | self.format_drop.menu().addAction(format_action_syntaxCubeFlag) |
| | self.format_drop.menu().addAction(format_action_mbot) |
| |
|
| | |
| | self.format_syntax.clicked.connect(self.set_format_syntax) |
| | self.format_phrase.clicked.connect(self.set_format_phrase) |
| | self.format_syntaxCube.clicked.connect(self.set_format_syntaxCube) |
| | self.format_phraseStackFlag.clicked.connect(self.set_format_phraseStackFlag) |
| | self.format_phraseStackVerbose.clicked.connect(self.set_format_phraseStackVerbose) |
| | self.format_syntaxCubeFlag.clicked.connect(self.set_format_syntaxCubeFlag) |
| | self.format_mbot.clicked.connect(self.set_format_mbot) |
| |
|
| |
|
| |
|
| | |
| | self.table_widget = HoverTable(self) |
| | self.w = [] |
| | |
| |
|
| | |
| | self.buttonBox = QtGui.QDialogButtonBox() |
| | self.sentence_spinbox = QtGui.QSpinBox(parent=self.buttonBox) |
| | self.sentence_spinbox.setMaximum(999999) |
| |
|
| | self.goto_button = self.buttonBox.addButton( |
| | "&GoTo", QtGui.QDialogButtonBox.ActionRole) |
| | self.next_button = self.buttonBox.addButton( |
| | "&Next", QtGui.QDialogButtonBox.ActionRole) |
| | self.prev_button = self.buttonBox.addButton( |
| | "&Prev", QtGui.QDialogButtonBox.ActionRole) |
| | self.next_button.clicked.connect(self.next_parse) |
| | self.prev_button.clicked.connect(self.prev_parse) |
| | self.goto_button.clicked.connect(self.cur_parse) |
| | self.quit_button = self.buttonBox.addButton( |
| | "&Quit", QtGui.QDialogButtonBox.ActionRole) |
| | self.quit_button.clicked.connect( |
| | QtCore.QCoreApplication.instance().quit) |
| |
|
| |
|
| | |
| | |
| | self.goto_button.setDisabled(True) |
| | self.next_button.setDisabled(True) |
| | self.prev_button.setDisabled(True) |
| | |
| |
|
| | |
| |
|
| |
|
| | |
| |
|
| | layout = QtGui.QVBoxLayout() |
| |
|
| | topLayout = QtGui.QHBoxLayout() |
| | topLayout.addWidget(self.format_drop) |
| | topLayout.addWidget(cell_limit_label) |
| | topLayout.addWidget(self.cell_limit_chooser) |
| | self.cell_limit_chooser.valueChanged.connect(self.setCellLimit) |
| | topLayout.addWidget(pathLabel) |
| | topLayout.addWidget(self.pathLabel, 1) |
| | topLayout.addWidget(self.pathButton) |
| |
|
| | bottomLayout = QtGui.QHBoxLayout() |
| | bottomLayout.addWidget(self.buttonBox) |
| |
|
| | layout.addLayout(topLayout) |
| | layout.addWidget(self.table_widget) |
| | layout.addLayout(bottomLayout) |
| |
|
| | self.sentence_spinbox.valueChanged.connect(self.set_cur_rein_num) |
| |
|
| | self.setLayout(layout) |
| | self.updateSignal.connect(self.update_table) |
| | |
| | QtCore.QObject.connect( |
| | self.table_widget, |
| | QtCore.SIGNAL("cellDoubleClicked(int, int)"), |
| | self.popup) |
| | |
| |
|
| | def closeEvent(self, *args, **kwargs): |
| | |
| | |
| | QtCore.QCoreApplication.quit() |
| | return QtGui.QWidget.closeEvent(self, *args, **kwargs) |
| | |
| | |
| | def setCellLimit(self, value): |
| | if value == 0: |
| | value = float("inf") |
| | self.cell_limit = value |
| | |
| | |
| | def setPath(self): |
| | path = QtGui.QFileDialog.getOpenFileName(self, |
| | "Select File", self.pathLabel.text()) |
| | if path: |
| | self.goto_button.setDisabled(False) |
| | self.prev_button.setDisabled(False) |
| | self.next_button.setDisabled(False) |
| | self.pathLabel.setText(QtCore.QDir.toNativeSeparators(path)) |
| | self.path = unicode(path) |
| | self.data = my_DI.DataInput(self.path) |
| | try: |
| | if self.format == "syntax": |
| | self.data.read_syntax() |
| | elif self.format == "phrase": |
| | self.data.read_phrase() |
| | elif self.format == "syntaxCube": |
| | self.data.read_syntax_cubes(self.cell_limit) |
| | elif self.format == "phraseStackFlag": |
| | self.data.read_phrase_stack_flag(self.cell_limit) |
| | elif self.format == "phraseStackVerbose": |
| | self.data.read_phrase_stack_verbose(self.cell_limit) |
| | elif self.format == "syntaxCubeFlag": |
| | self.data.read_syntax_cube_flag(self.cell_limit) |
| | elif self.format == "mbot": |
| | self.data.read_mbot(self.cell_limit) |
| | self.populate(0) |
| | self.sentence_spinbox.setValue(0) |
| | except (ValueError, IndexError) as exc: |
| | self.error_dialog = QtGui.QDialog() |
| | self.error_dialog.setModal(True) |
| | layout = QtGui.QVBoxLayout() |
| | text = QtGui.QLabel( |
| | """Something went wrong when choosing your input format/file |
| | \n""") |
| | button = QtGui.QPushButton("Ok") |
| | button.clicked.connect(self.error_dialog.close) |
| | layout.addWidget(text) |
| | layout.addWidget(button) |
| | self.error_dialog.setLayout(layout) |
| | self.error_dialog.show() |
| | |
| |
|
| |
|
| | def next_parse(self): |
| | self.cur_rein_num += 1 |
| | if self.cur_rein_num < 0: |
| | self.cur_rein_num = len(self.data.sentences) + self.cur_rein_num |
| | if self.cur_rein_num >= len(self.data.sentences): |
| | self.cur_rein_num = 0 |
| | self.sentence_spinbox.setValue(self.cur_rein_num) |
| | self.populate(self.cur_rein_num) |
| | |
| | def prev_parse(self): |
| | self.cur_rein_num -= 1 |
| | if self.cur_rein_num < 0: |
| | self.cur_rein_num = len(self.data.sentences) + self.cur_rein_num |
| | if self.cur_rein_num >= len(self.data.sentences): |
| | self.cur_rein_num = 0 |
| | self.sentence_spinbox.setValue(self.cur_rein_num) |
| | self.populate(self.cur_rein_num) |
| | |
| | def cur_parse(self): |
| | if self.cur_rein_num >= len(self.data.sentences): |
| | self.cur_rein_num = 0 |
| | self.sentence_spinbox.setValue(self.cur_rein_num) |
| | self.populate(self.cur_rein_num) |
| | |
| | |
| | def set_cur_rein_num(self, value): |
| | self.cur_rein_num = value |
| |
|
| | def populate(self, cur_rein_num): |
| | cur_sent = self.data.sentences[cur_rein_num] |
| | nrows, ncols = cur_sent.length + 1, cur_sent.length + 1 |
| | nrows, ncols = ncols, nrows |
| | self.table_widget.setSortingEnabled(False) |
| | self.table_widget.setRowCount(nrows) |
| | self.table_widget.setColumnCount(ncols) |
| | |
| | self.table_widget.setHorizontalHeaderLabels([str(x) for x in range(ncols)]) |
| | self.table_widget.setVerticalHeaderLabels([str(x) for x in range(nrows)]) |
| | for i in range(nrows): |
| | for j in range(ncols): |
| | try: |
| | |
| | |
| | item = str(i) + ".." + str(j) + " \n" |
| | if isinstance(cur_sent.spans[(i, j)], basestring): |
| | item += cur_sent.spans[(i, j)] + "\n" |
| | else: |
| | for rule in cur_sent.spans[(i, j)]: |
| | item += str(rule) + "\n" |
| | if cur_sent.spans[(i, j)] == []: |
| | if j - i < 0: |
| | item = "" |
| | else: |
| | item = "-" |
| | item = TableItem(item.decode("utf-8")) |
| | |
| |
|
| | except KeyError: |
| | if j - i < 0: |
| | item = QtGui.QTableWidgetItem("") |
| | else: |
| | item = QtGui.QTableWidgetItem("-") |
| | self.table_widget.setItem(i, j, item) |
| | self.table_widget.setColumnWidth(j, 40) |
| | |
| | |
| | |
| |
|
| | self.updateSignal.emit() |
| | self.table_widget.setSortingEnabled(True) |
| | |
| | def update_table(self): |
| | self.table_widget.sortItems(0, QtCore.Qt.DescendingOrder) |
| |
|
| |
|
| |
|
| |
|
| | def set_format_syntax(self): |
| | self.format = "syntax" |
| | self.format_drop.setText("Syntax") |
| | self.format_drop.menu().hide() |
| |
|
| | def set_format_phrase(self): |
| | self.format = "phrase" |
| | self.format_drop.setText("Phrase") |
| | self.format_drop.menu().hide() |
| | |
| | def set_format_syntaxCube(self): |
| | self.format = "syntaxCube" |
| | self.format_drop.setText("Syntax Cube (-Tall flag)") |
| | self.format_drop.menu().hide() |
| | |
| | def set_format_phraseStackFlag(self): |
| | self.format = "phraseStackFlag" |
| | self.format_drop.setText("Phrase Stack (search-graph)") |
| | self.format_drop.menu().hide() |
| | |
| | def set_format_phraseStackVerbose(self): |
| | self.format = "phraseStackVerbose" |
| | self.format_drop.setText("Phrase Stack (verbose)") |
| | self.format_drop.menu().hide() |
| | |
| | def set_format_syntaxCubeFlag(self): |
| | self.format = "syntaxCubeFlag" |
| | self.format_drop.setText("Syntax Cube (search-graph)") |
| | self.format_drop.menu().hide() |
| | |
| | def set_format_mbot(self): |
| | self.format = "mbot" |
| | self.format_drop.setText("MBOT") |
| | self.format_drop.menu().hide() |
| | |
| | |
| | |
| | |
| | |
| | |
| | def popup(self, r, c): |
| | |
| | |
| | self.w.append(PopUpCell(self.table_widget.item(r, c).text())) |
| | |
| | self.w[-1].show() |
| | |
| |
|
| | class HoverTable(QtGui.QTableWidget): |
| | |
| | def __init__(self, parent=None): |
| | super(HoverTable, self).__init__(parent) |
| | self.setMouseTracking(True) |
| | self.horizontalHeader().setClickable(False) |
| | |
| | |
| |
|
| |
|
| | class PopUpCell(QtGui.QWidget): |
| | def __init__(self, cell_text): |
| | QtGui.QWidget.__init__(self) |
| | layout = QtGui.QHBoxLayout() |
| | text_list = map(lambda x: x, cell_text.split("\n")) |
| | wind_cont = QtGui.QTextEdit() |
| | wind_cont.setReadOnly(True) |
| | wind_cont.setWindowTitle(text_list[0]) |
| | wind_cont.setPlainText(cell_text) |
| | layout.addWidget(wind_cont) |
| | self.setWindowTitle(text_list[0]) |
| | self.setLayout(layout) |
| | self.resize(960, 320) |
| |
|
| |
|
| | |
| |
|
| | |
| | class TableItem(QtGui.QTableWidgetItem): |
| | |
| | def __init__(self, cell_text, type=1000): |
| | super(TableItem, self).__init__(cell_text) |
| | if len(cell_text.split("\n")) > 20: |
| | self.setToolTip("\n".join(cell_text.split("\n")[:19])) |
| | else: |
| | self.setToolTip(cell_text) |
| | self.cell_text = cell_text |
| |
|
| |
|
| |
|