def test_backspace_RemoveIndent_on_LineBegin(self): editor = CodeEditor() editor.setPlainText(" if x == 1:") editor.moveCursor(QTextCursor.StartOfLine) editor.moveCursor(QTextCursor.Right) editor.moveCursor(QTextCursor.Right) editor.moveCursor(QTextCursor.Right) editor.moveCursor(QTextCursor.Right) QTest.keyClick(editor, Qt.Key_Backspace) self.assertEqual(editor.toPlainText(), "if x == 1:")
class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.setWindowTitle("SUN - Risc-V Editor & Simulator ") MainWindow.resize(1417, 820) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( MainWindow.sizePolicy().hasHeightForWidth()) MainWindow.setSizePolicy(sizePolicy) MainWindow.setMinimumSize(QtCore.QSize(1200, 800)) MainWindow.setTabShape(QtWidgets.QTabWidget.Rounded) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.gridLayout = QtWidgets.QGridLayout(self.centralwidget) self.gridLayout.setObjectName("gridLayout") self.tabs = QtWidgets.QTabWidget(self.centralwidget) self.tabs.setTabShape(QtWidgets.QTabWidget.Triangular) self.tabs.setObjectName("tabs") self.tab = QtWidgets.QWidget() self.tab.setObjectName("tab") self.verticalLayout = QtWidgets.QVBoxLayout(self.tab) self.verticalLayout.setObjectName("verticalLayout") self.uploadButton = QtWidgets.QPushButton(self.tab) self.uploadButton.setMaximumSize(QtCore.QSize(200, 50)) self.uploadButton.setObjectName("uploadButton") self.verticalLayout.addWidget(self.uploadButton) self.codeEditor = CodeEditor(self.tab) self.codeEditor.setObjectName("codeEditor") self.verticalLayout.addWidget(self.codeEditor) self.errorBox = QtWidgets.QPlainTextEdit(self.tab) self.errorBox.setStyleSheet("color: rgb(255,0,0);") self.errorBox.setObjectName("errorBox") self.errorBox.setMaximumHeight(150) self.verticalLayout.addWidget(self.errorBox) self.errorBox.setReadOnly(True) self.errorBox.setPlaceholderText("Errors will be displayed here") self.tabs.addTab(self.tab, "") self.tab_2 = QtWidgets.QWidget() self.tab_2.setObjectName("tab_2") self.horizontalLayout = QtWidgets.QHBoxLayout(self.tab_2) self.horizontalLayout.setObjectName("horizontalLayout") self.widget = QtWidgets.QWidget(self.tab_2) self.widget.setObjectName("widget") self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.widget) self.verticalLayout_2.setObjectName("verticalLayout_2") self.horizontalWidget = QtWidgets.QWidget(self.widget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.horizontalWidget.sizePolicy().hasHeightForWidth()) self.horizontalWidget.setSizePolicy(sizePolicy) self.horizontalWidget.setMinimumSize(QtCore.QSize(20, 50)) self.horizontalWidget.setMaximumSize(QtCore.QSize(16777215, 75)) self.horizontalWidget.setObjectName("horizontalWidget") self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.horizontalWidget) self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.runButton = QtWidgets.QPushButton(self.horizontalWidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.runButton.sizePolicy().hasHeightForWidth()) self.runButton.setSizePolicy(sizePolicy) self.runButton.setObjectName("runButton") self.horizontalLayout_2.addWidget(self.runButton) self.stepButton = QtWidgets.QPushButton(self.horizontalWidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.stepButton.sizePolicy().hasHeightForWidth()) self.stepButton.setSizePolicy(sizePolicy) self.stepButton.setObjectName("stepButton") self.horizontalLayout_2.addWidget(self.stepButton) self.prevButton = QtWidgets.QPushButton(self.horizontalWidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.prevButton.sizePolicy().hasHeightForWidth()) self.prevButton.setSizePolicy(sizePolicy) self.prevButton.setObjectName("prevButton") self.horizontalLayout_2.addWidget(self.prevButton) self.resetButton = QtWidgets.QPushButton(self.horizontalWidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.resetButton.sizePolicy().hasHeightForWidth()) self.resetButton.setSizePolicy(sizePolicy) self.resetButton.setObjectName("resetButton") self.horizontalLayout_2.addWidget(self.resetButton) self.verticalLayout_2.addWidget(self.horizontalWidget) self.horizontalLayout_3 = QtWidgets.QHBoxLayout() self.horizontalLayout_3.setObjectName("horizontalLayout_3") self.codeTable = QtWidgets.QTableWidget(self.widget) self.codeTable.setGridStyle(QtCore.Qt.DashDotLine) self.codeTable.setObjectName("codeTable") self.codeTable.setColumnCount(4) self.codeTable.setRowCount(100) item = QtWidgets.QTableWidgetItem() item.setTextAlignment(QtCore.Qt.AlignCenter) font = QtGui.QFont() font.setPointSize(12) item.setFont(font) self.codeTable.setEditTriggers(QtWidgets.QTableWidget.NoEditTriggers) self.codeTable.setHorizontalHeaderItem(0, item) item = QtWidgets.QTableWidgetItem() item.setTextAlignment(QtCore.Qt.AlignCenter) font = QtGui.QFont() font.setPointSize(12) font.setBold(False) font.setWeight(50) item.setFont(font) self.codeTable.setHorizontalHeaderItem(1, item) item = QtWidgets.QTableWidgetItem() item.setTextAlignment(QtCore.Qt.AlignCenter) font = QtGui.QFont() font.setPointSize(12) font.setBold(False) font.setWeight(50) item.setFont(font) self.codeTable.setHorizontalHeaderItem(2, item) item = QtWidgets.QTableWidgetItem() item.setTextAlignment(QtCore.Qt.AlignCenter) font = QtGui.QFont() font.setPointSize(12) font.setBold(False) font.setWeight(50) item.setFont(font) self.codeTable.setHorizontalHeaderItem(3, item) item = QtWidgets.QTableWidgetItem() self.codeTable.setItem(0, 0, item) item = QtWidgets.QTableWidgetItem() self.codeTable.setItem(0, 1, item) item = QtWidgets.QTableWidgetItem() self.codeTable.setItem(0, 2, item) item = QtWidgets.QTableWidgetItem() self.codeTable.setItem(1, 0, item) item = QtWidgets.QTableWidgetItem() self.codeTable.setItem(1, 1, item) item = QtWidgets.QTableWidgetItem() self.codeTable.setItem(1, 2, item) self.codeTable.horizontalHeader().setCascadingSectionResizes(True) self.codeTable.horizontalHeader().setDefaultSectionSize(200) self.codeTable.horizontalHeader().setMinimumSectionSize(100) self.codeTable.horizontalHeader().setSortIndicatorShown(False) self.codeTable.horizontalHeader().setStretchLastSection(True) self.codeTable.verticalHeader().setVisible(False) self.codeTable.verticalHeader().setCascadingSectionResizes(True) self.codeTable.verticalHeader().setHighlightSections(True) self.codeTable.verticalHeader().setStretchLastSection(True) self.horizontalLayout_3.addWidget(self.codeTable) self.verticalLayout_2.addLayout(self.horizontalLayout_3) self.horizontalLayout.addWidget(self.widget) self.widget_2 = QtWidgets.QWidget(self.tab_2) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.widget_2.sizePolicy().hasHeightForWidth()) self.widget_2.setSizePolicy(sizePolicy) self.widget_2.setMinimumSize(QtCore.QSize(550, 0)) self.widget_2.setMaximumSize(QtCore.QSize(600, 16777215)) self.widget_2.setObjectName("widget_2") self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.widget_2) self.verticalLayout_3.setObjectName("verticalLayout_3") self.splitter = QtWidgets.QSplitter(self.widget_2) self.splitter.setOrientation(QtCore.Qt.Horizontal) self.splitter.setObjectName("splitter") self.label_2 = QtWidgets.QLabel(self.splitter) self.label_2.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter) self.label_2.setObjectName("label_2") self.regMemDisplayTypeDrop = QtWidgets.QComboBox(self.splitter) self.regMemDisplayTypeDrop.setObjectName("regMemDisplayTypeDrop") self.regMemDisplayTypeDrop.addItem("") self.regMemDisplayTypeDrop.addItem("") self.regMemDisplayTypeDrop.addItem("") self.regMemDisplayTypeDrop.addItem("") self.verticalLayout_3.addWidget(self.splitter) self.regMemTab = QtWidgets.QTabWidget(self.widget_2) self.regMemTab.setTabShape(QtWidgets.QTabWidget.Rounded) self.regMemTab.setObjectName("regMemTab") self.tab_4 = QtWidgets.QWidget() self.tab_4.setObjectName("tab_4") self.gridLayout_2 = QtWidgets.QGridLayout(self.tab_4) self.gridLayout_2.setObjectName("gridLayout_2") self.registerTable = QtWidgets.QTableWidget(self.tab_4) self.tab_6 = QtWidgets.QWidget() self.tab_6.setObjectName("tab_6") self.gridLayout_3 = QtWidgets.QGridLayout(self.tab_6) self.gridLayout_3.setObjectName("gridLayout_3") self.registerTable = QtWidgets.QTableWidget(self.tab_6) self.registerTable.setGridStyle(QtCore.Qt.DashLine) self.registerTable.setObjectName("registerTable") self.registerTable.setEditTriggers( QtWidgets.QTableWidget.NoEditTriggers) self.registerTable.setColumnCount(1) self.registerTable.setRowCount(32) self.pipeTable = QtWidgets.QTableWidget(self.tab_6) self.pipeTable.setGridStyle(QtCore.Qt.DashLine) self.pipeTable.setObjectName("pipeTable") self.pipeTable.setEditTriggers(QtWidgets.QTableWidget.NoEditTriggers) self.pipeTable.setColumnCount(1) self.pipeTable.setRowCount(20) item = QtWidgets.QTableWidgetItem() self.pipeTable.setVerticalHeaderItem(0, item) item = QtWidgets.QTableWidgetItem() self.pipeTable.setVerticalHeaderItem(1, item) item = QtWidgets.QTableWidgetItem() self.pipeTable.setVerticalHeaderItem(2, item) item = QtWidgets.QTableWidgetItem() self.pipeTable.setVerticalHeaderItem(3, item) item = QtWidgets.QTableWidgetItem() self.pipeTable.setVerticalHeaderItem(4, item) item = QtWidgets.QTableWidgetItem() self.pipeTable.setVerticalHeaderItem(5, item) item = QtWidgets.QTableWidgetItem() self.pipeTable.setVerticalHeaderItem(6, item) item = QtWidgets.QTableWidgetItem() self.pipeTable.setVerticalHeaderItem(7, item) item = QtWidgets.QTableWidgetItem() self.pipeTable.setVerticalHeaderItem(8, item) item = QtWidgets.QTableWidgetItem() self.pipeTable.setVerticalHeaderItem(9, item) item = QtWidgets.QTableWidgetItem() self.pipeTable.setVerticalHeaderItem(10, item) item = QtWidgets.QTableWidgetItem() self.pipeTable.setVerticalHeaderItem(11, item) item = QtWidgets.QTableWidgetItem() self.pipeTable.setVerticalHeaderItem(12, item) item = QtWidgets.QTableWidgetItem() self.pipeTable.setVerticalHeaderItem(13, item) item = QtWidgets.QTableWidgetItem() self.pipeTable.setVerticalHeaderItem(14, item) item = QtWidgets.QTableWidgetItem() self.pipeTable.setVerticalHeaderItem(15, item) item = QtWidgets.QTableWidgetItem() self.pipeTable.setVerticalHeaderItem(16, item) item = QtWidgets.QTableWidgetItem() self.pipeTable.setVerticalHeaderItem(17, item) item = QtWidgets.QTableWidgetItem() self.pipeTable.setVerticalHeaderItem(18, item) item = QtWidgets.QTableWidgetItem() self.pipeTable.setVerticalHeaderItem(19, item) item = QtWidgets.QTableWidgetItem() self.pipeTable.setVerticalHeaderItem(20, item) item = QtWidgets.QTableWidgetItem() self.pipeTable.setHorizontalHeaderItem(0, item) item = QtWidgets.QTableWidgetItem() self.pipeTable.setItem(0, 0, item) item = QtWidgets.QTableWidgetItem() self.pipeTable.setItem(1, 0, item) self.pipeTable.horizontalHeader().setCascadingSectionResizes(True) self.pipeTable.horizontalHeader().setDefaultSectionSize(150) self.pipeTable.horizontalHeader().setMinimumSectionSize(80) self.pipeTable.horizontalHeader().setStretchLastSection(True) self.pipeTable.verticalHeader().setCascadingSectionResizes(False) self.pipeTable.verticalHeader().setDefaultSectionSize(37) self.pipeTable.verticalHeader().setStretchLastSection(False) item = QtWidgets.QTableWidgetItem() self.registerTable.setVerticalHeaderItem(0, item) item = QtWidgets.QTableWidgetItem() self.registerTable.setVerticalHeaderItem(1, item) item = QtWidgets.QTableWidgetItem() self.registerTable.setVerticalHeaderItem(2, item) item = QtWidgets.QTableWidgetItem() self.registerTable.setVerticalHeaderItem(3, item) item = QtWidgets.QTableWidgetItem() self.registerTable.setVerticalHeaderItem(4, item) item = QtWidgets.QTableWidgetItem() self.registerTable.setVerticalHeaderItem(5, item) item = QtWidgets.QTableWidgetItem() self.registerTable.setVerticalHeaderItem(6, item) item = QtWidgets.QTableWidgetItem() self.registerTable.setVerticalHeaderItem(7, item) item = QtWidgets.QTableWidgetItem() self.registerTable.setVerticalHeaderItem(8, item) item = QtWidgets.QTableWidgetItem() self.registerTable.setVerticalHeaderItem(9, item) item = QtWidgets.QTableWidgetItem() self.registerTable.setVerticalHeaderItem(10, item) item = QtWidgets.QTableWidgetItem() self.registerTable.setVerticalHeaderItem(11, item) item = QtWidgets.QTableWidgetItem() self.registerTable.setVerticalHeaderItem(12, item) item = QtWidgets.QTableWidgetItem() self.registerTable.setVerticalHeaderItem(13, item) item = QtWidgets.QTableWidgetItem() self.registerTable.setVerticalHeaderItem(14, item) item = QtWidgets.QTableWidgetItem() self.registerTable.setVerticalHeaderItem(15, item) item = QtWidgets.QTableWidgetItem() self.registerTable.setVerticalHeaderItem(16, item) item = QtWidgets.QTableWidgetItem() self.registerTable.setVerticalHeaderItem(17, item) item = QtWidgets.QTableWidgetItem() self.registerTable.setVerticalHeaderItem(18, item) item = QtWidgets.QTableWidgetItem() self.registerTable.setVerticalHeaderItem(19, item) item = QtWidgets.QTableWidgetItem() self.registerTable.setVerticalHeaderItem(20, item) item = QtWidgets.QTableWidgetItem() self.registerTable.setVerticalHeaderItem(21, item) item = QtWidgets.QTableWidgetItem() self.registerTable.setVerticalHeaderItem(22, item) item = QtWidgets.QTableWidgetItem() self.registerTable.setVerticalHeaderItem(23, item) item = QtWidgets.QTableWidgetItem() self.registerTable.setVerticalHeaderItem(24, item) item = QtWidgets.QTableWidgetItem() self.registerTable.setVerticalHeaderItem(25, item) item = QtWidgets.QTableWidgetItem() self.registerTable.setVerticalHeaderItem(26, item) item = QtWidgets.QTableWidgetItem() self.registerTable.setVerticalHeaderItem(27, item) item = QtWidgets.QTableWidgetItem() self.registerTable.setVerticalHeaderItem(28, item) item = QtWidgets.QTableWidgetItem() self.registerTable.setVerticalHeaderItem(29, item) item = QtWidgets.QTableWidgetItem() self.registerTable.setVerticalHeaderItem(30, item) item = QtWidgets.QTableWidgetItem() self.registerTable.setVerticalHeaderItem(31, item) item = QtWidgets.QTableWidgetItem() self.registerTable.setHorizontalHeaderItem(0, item) item = QtWidgets.QTableWidgetItem() self.registerTable.setItem(0, 0, item) item = QtWidgets.QTableWidgetItem() self.registerTable.setItem(1, 0, item) self.registerTable.horizontalHeader().setCascadingSectionResizes(True) self.registerTable.horizontalHeader().setDefaultSectionSize(150) self.registerTable.horizontalHeader().setMinimumSectionSize(80) self.registerTable.horizontalHeader().setStretchLastSection(True) self.registerTable.verticalHeader().setCascadingSectionResizes(False) self.registerTable.verticalHeader().setDefaultSectionSize(37) self.registerTable.verticalHeader().setStretchLastSection(False) self.gridLayout_2.addWidget(self.registerTable, 0, 0, 1, 1) self.gridLayout_3.addWidget(self.pipeTable, 0, 0, 1, 1) self.regMemTab.addTab(self.tab_4, "") self.tab_5 = QtWidgets.QWidget() self.tab_5.setObjectName("tab_5") self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.tab_5) self.verticalLayout_4.setObjectName("verticalLayout_4") self.horizontalLayout_4 = QtWidgets.QHBoxLayout() self.horizontalLayout_4.setObjectName("horizontalLayout_4") self.label = QtWidgets.QLabel(self.tab_5) self.label.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter) self.label.setObjectName("label") self.horizontalLayout_4.addWidget(self.label) self.memJumpDropDown = QtWidgets.QComboBox(self.tab_5) self.memJumpDropDown.setObjectName("memJumpDropDown") self.memJumpDropDown.addItem("") self.memJumpDropDown.addItem("") self.memJumpDropDown.addItem("") self.memJumpDropDown.addItem("") self.horizontalLayout_4.addWidget(self.memJumpDropDown) self.memUp = QtWidgets.QPushButton(self.tab_5) self.memUp.setObjectName("memUp") self.horizontalLayout_4.addWidget(self.memUp) self.memDown = QtWidgets.QPushButton(self.tab_5) self.memDown.setObjectName("memDown") self.horizontalLayout_4.addWidget(self.memDown) self.verticalLayout_4.addLayout(self.horizontalLayout_4) self.memoryTable = QtWidgets.QTableWidget(self.tab_5) self.memoryTable.setAlternatingRowColors(True) self.memoryTable.setObjectName("memoryTable") self.memoryTable.setEditTriggers(QtWidgets.QTableWidget.NoEditTriggers) self.memoryTable.setColumnCount(5) self.memoryTable.setRowCount(0) item = QtWidgets.QTableWidgetItem() self.memoryTable.setHorizontalHeaderItem(0, item) item = QtWidgets.QTableWidgetItem() self.memoryTable.setHorizontalHeaderItem(1, item) item = QtWidgets.QTableWidgetItem() self.memoryTable.setHorizontalHeaderItem(2, item) item = QtWidgets.QTableWidgetItem() self.memoryTable.setHorizontalHeaderItem(3, item) item = QtWidgets.QTableWidgetItem() self.memoryTable.setHorizontalHeaderItem(4, item) self.memoryTable.horizontalHeader().setCascadingSectionResizes(True) self.memoryTable.horizontalHeader().setDefaultSectionSize(100) self.memoryTable.horizontalHeader().setStretchLastSection(True) self.memoryTable.verticalHeader().setCascadingSectionResizes(True) self.verticalLayout_4.addWidget(self.memoryTable) self.regMemTab.addTab(self.tab_5, "") self.regMemTab.addTab(self.tab_6, "") self.verticalLayout_3.addWidget(self.regMemTab) self.horizontalLayout.addWidget(self.widget_2) self.tabs.addTab(self.tab_2, "") self.tab_3 = QtWidgets.QWidget() self.tab_3.setObjectName("tab_3") self.tabs.addTab(self.tab_3, "") #self.horizontalLayout = QtWidgets.QHBoxLayout(self.tab_2) #self.horizontalLayout.setObjectName("horizontalLayout") self.tab_3.layout = QtWidgets.QGridLayout() self.temp1 = QtWidgets.QLabel("") self.cb1 = QtWidgets.QCheckBox('Enable Pipelining') self.cb1.toggle() self.cb1.toggled.connect(lambda: self.knobs(self.cb1, 0)) self.cb2 = QtWidgets.QCheckBox('Enable Data Forwarding') self.cb2.toggle() self.cb2.toggled.connect(lambda: self.knobs(self.cb2, 1)) self.cb3 = QtWidgets.QCheckBox('Enable Printing Register File') self.cb3.toggled.connect(lambda: self.knobs(self.cb3, 2)) self.cb4 = QtWidgets.QCheckBox('Enable Printing Pipelining Registers') self.cb4.toggled.connect(lambda: self.knobs(self.cb4, 3)) #cb.stateChanged.connect(self.changeTitle) #TODO self.pushButton1 = QtWidgets.QPushButton("PyQt5 button") self.tab_3.layout.addWidget(self.cb1, 1, 1) self.tab_3.layout.addWidget(self.cb2, 2, 1) self.tab_3.layout.addWidget(self.cb3, 3, 1) self.tab_3.layout.addWidget(self.cb4, 4, 1) self.tab_3.layout.addWidget(self.temp1, 5, 0) self.tab_3.setLayout(self.tab_3.layout) self.gridLayout.addWidget(self.tabs, 0, 0, 1, 1) MainWindow.setCentralWidget(self.centralwidget) self.uploadButton.clicked.connect(self.file_open) self.tabs.currentChanged.connect(self.onTabChange) self.runButton.clicked.connect(self.runCodeClick) self.stepButton.clicked.connect(self.stepForward) self.resetButton.clicked.connect(self.reset) self.prevButton.clicked.connect(self.stepBack) # self.regMemDisplayTypeDrop.currentIndexChanged.connect(self.displayTypeChange) self.regMemDisplayTypeDrop.activated[str].connect( self.displayTypeChange) self.memJumpDropDown.activated[str].connect(self.memoryTypeChange) self.retranslateUi(MainWindow) self.tabs.setCurrentIndex(0) self.regMemTab.setCurrentIndex(0) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate self.translate = _translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) self.uploadButton.setText(_translate("MainWindow", "Upload Code")) self.tabs.setTabText(self.tabs.indexOf(self.tab), _translate("MainWindow", "Editor")) self.runButton.setText(_translate("MainWindow", "Run")) self.stepButton.setText(_translate("MainWindow", "Step")) self.prevButton.setText(_translate("MainWindow", "Prev")) self.resetButton.setText(_translate("MainWindow", "Reset")) item = self.codeTable.horizontalHeaderItem(0) item.setText(_translate("MainWindow", "PC")) item = self.codeTable.horizontalHeaderItem(1) item.setText(_translate("MainWindow", "Machine Code")) item = self.codeTable.horizontalHeaderItem(2) item.setText(_translate("MainWindow", "Basic Code")) item = self.codeTable.horizontalHeaderItem(3) item.setText(_translate("MainWindow", "Original Code")) __sortingEnabled = self.codeTable.isSortingEnabled() self.codeTable.setSortingEnabled(False) self.codeTable.setSortingEnabled(__sortingEnabled) self.label_2.setText(_translate("MainWindow", "Display Setting ")) self.regMemDisplayTypeDrop.setItemText(0, _translate("MainWindow", "Hex")) self.regMemDisplayTypeDrop.setItemText( 1, _translate("MainWindow", "Decimal")) self.regMemDisplayTypeDrop.setItemText( 2, _translate("MainWindow", "Unsigned")) self.regMemDisplayTypeDrop.setItemText( 3, _translate("MainWindow", "Ascii")) item = self.pipeTable.verticalHeaderItem(0) item.setText(_translate("MainWindow", "Fetch (PC Value)")) item = self.pipeTable.verticalHeaderItem(1) item.setText(_translate("MainWindow", "Decode (PC Value)")) item = self.pipeTable.verticalHeaderItem(2) item.setText(_translate("MainWindow", "Execute (PC Value)")) item = self.pipeTable.verticalHeaderItem(3) item.setText(_translate("MainWindow", "Memory Access (PC Value)")) item = self.pipeTable.verticalHeaderItem(4) item.setText(_translate("MainWindow", "Writeback (PC Value)")) item = self.pipeTable.verticalHeaderItem(5) item.setText(_translate("MainWindow", "Total number of cycles")) item = self.pipeTable.verticalHeaderItem(6) item.setText(_translate("MainWindow", "Total instructions executed")) item = self.pipeTable.verticalHeaderItem(7) item.setText(_translate("MainWindow", "CPI")) item = self.pipeTable.verticalHeaderItem(8) item.setText(_translate("MainWindow", "Number of Data-transfer")) item = self.pipeTable.verticalHeaderItem(9) item.setText(_translate("MainWindow", "ALU instructions executed")) item = self.pipeTable.verticalHeaderItem(10) item.setText(_translate("MainWindow", "Control instructions executed")) item = self.pipeTable.verticalHeaderItem(11) item.setText(_translate("MainWindow", "Number of stalls/bubbles")) item = self.pipeTable.verticalHeaderItem(12) item.setText(_translate("MainWindow", "Number of data hazards")) item = self.pipeTable.verticalHeaderItem(13) item.setText(_translate("MainWindow", "Number of control hazards")) item = self.pipeTable.verticalHeaderItem(14) item.setText( _translate("MainWindow", "Number of branch mispredictions")) item = self.pipeTable.verticalHeaderItem(15) item.setText( _translate("MainWindow", "Number of stalls due to data hazards")) item = self.pipeTable.verticalHeaderItem(16) item.setText( _translate("MainWindow", "Number of stalls due to control hazards")) item = self.pipeTable.horizontalHeaderItem(0) item.setText(_translate("MainWindow", "Status / Values")) __sortingEnabled = self.pipeTable.isSortingEnabled() self.pipeTable.setSortingEnabled(False) self.pipeTable.setSortingEnabled(__sortingEnabled) item = self.registerTable.verticalHeaderItem(0) item.setText(_translate("MainWindow", "zero(x0)")) item = self.registerTable.verticalHeaderItem(1) item.setText(_translate("MainWindow", "ra(x1)")) item = self.registerTable.verticalHeaderItem(2) item.setText(_translate("MainWindow", "sp(x2)")) item = self.registerTable.verticalHeaderItem(3) item.setText(_translate("MainWindow", "gp(x3)")) item = self.registerTable.verticalHeaderItem(4) item.setText(_translate("MainWindow", "tp(x4)")) item = self.registerTable.verticalHeaderItem(5) item.setText(_translate("MainWindow", "t0(x5)")) item = self.registerTable.verticalHeaderItem(6) item.setText(_translate("MainWindow", "t1(x6)")) item = self.registerTable.verticalHeaderItem(7) item.setText(_translate("MainWindow", "t2(x7)")) item = self.registerTable.verticalHeaderItem(8) item.setText(_translate("MainWindow", "s0(x8)")) item = self.registerTable.verticalHeaderItem(9) item.setText(_translate("MainWindow", "s1(x9)")) item = self.registerTable.verticalHeaderItem(10) item.setText(_translate("MainWindow", "a0(x10)")) item = self.registerTable.verticalHeaderItem(11) item.setText(_translate("MainWindow", "a1(x11)")) item = self.registerTable.verticalHeaderItem(12) item.setText(_translate("MainWindow", "a2(x12)")) item = self.registerTable.verticalHeaderItem(13) item.setText(_translate("MainWindow", "a3(x13)")) item = self.registerTable.verticalHeaderItem(14) item.setText(_translate("MainWindow", "a4(x14)")) item = self.registerTable.verticalHeaderItem(15) item.setText(_translate("MainWindow", "a5(x15)")) item = self.registerTable.verticalHeaderItem(16) item.setText(_translate("MainWindow", "a6(x16)")) item = self.registerTable.verticalHeaderItem(17) item.setText(_translate("MainWindow", "a7(x17)")) item = self.registerTable.verticalHeaderItem(18) item.setText(_translate("MainWindow", "s2(x18)")) item = self.registerTable.verticalHeaderItem(19) item.setText(_translate("MainWindow", "s3(x19)")) item = self.registerTable.verticalHeaderItem(20) item.setText(_translate("MainWindow", "s4(x20)")) item = self.registerTable.verticalHeaderItem(21) item.setText(_translate("MainWindow", "s5(x21)")) item = self.registerTable.verticalHeaderItem(22) item.setText(_translate("MainWindow", "s6(x22)")) item = self.registerTable.verticalHeaderItem(23) item.setText(_translate("MainWindow", "s7(x23)")) item = self.registerTable.verticalHeaderItem(24) item.setText(_translate("MainWindow", "s8(x24)")) item = self.registerTable.verticalHeaderItem(25) item.setText(_translate("MainWindow", "s9(x25)")) item = self.registerTable.verticalHeaderItem(26) item.setText(_translate("MainWindow", "s10(x26)")) item = self.registerTable.verticalHeaderItem(27) item.setText(_translate("MainWindow", "s11(x27)")) item = self.registerTable.verticalHeaderItem(28) item.setText(_translate("MainWindow", "t3(x28)")) item = self.registerTable.verticalHeaderItem(29) item.setText(_translate("MainWindow", "t4(x29)")) item = self.registerTable.verticalHeaderItem(30) item.setText(_translate("MainWindow", "t5(x30)")) item = self.registerTable.verticalHeaderItem(31) item.setText(_translate("MainWindow", "t6(x31)")) item = self.registerTable.horizontalHeaderItem(0) item.setText(_translate("MainWindow", "Values")) __sortingEnabled = self.registerTable.isSortingEnabled() self.registerTable.setSortingEnabled(False) self.registerTable.setSortingEnabled(__sortingEnabled) self.regMemTab.setTabText(self.regMemTab.indexOf(self.tab_4), _translate("MainWindow", "Registers")) self.regMemTab.setTabText(self.regMemTab.indexOf(self.tab_6), _translate("MainWindow", "Pipelining Info")) self.label.setText(_translate("MainWindow", "Jump To")) self.memJumpDropDown.setItemText(0, _translate("MainWindow", "Text")) self.memJumpDropDown.setItemText(1, _translate("MainWindow", "Data")) self.memJumpDropDown.setItemText(2, _translate("MainWindow", "Heap")) self.memJumpDropDown.setItemText(3, _translate("MainWindow", "Stack")) self.memUp.setText(_translate("MainWindow", "Up")) self.memDown.setText(_translate("MainWindow", "Down")) item = self.memoryTable.horizontalHeaderItem(0) item.setText(_translate("MainWindow", "Address")) item = self.memoryTable.horizontalHeaderItem(1) item.setText(_translate("MainWindow", "+0")) item = self.memoryTable.horizontalHeaderItem(2) item.setText(_translate("MainWindow", "+1")) item = self.memoryTable.horizontalHeaderItem(3) item.setText(_translate("MainWindow", "+2")) item = self.memoryTable.horizontalHeaderItem(4) item.setText(_translate("MainWindow", "+3")) self.regMemTab.setTabText(self.regMemTab.indexOf(self.tab_5), _translate("MainWindow", "Memory")) self.tabs.setTabText(self.tabs.indexOf(self.tab_2), _translate("MainWindow", "Simulator")) self.tabs.setTabText(self.tabs.indexOf(self.tab_3), _translate("MainWindow", "Customize Options")) def file_open(self): name = QtWidgets.QFileDialog.getOpenFileName(None, 'Open File') if (len(name[0]) == 0): return code_file = open(name[0], 'r') with code_file: text = code_file.read() self.codeEditor.clear() self.codeEditor.appendPlainText(text) def file_save(self): file = open("../lib/Files/assemblyCode.asm", 'w+') text = self.codeEditor.toPlainText() file.write(text) file.close() def reset(self): self.currentPC = 0 self.displayTypeChange(0) self.tableReColor() def onTabChange(self, i): self.currentPC = 0 if (i == 0): self.codeTable.setRowCount(0) self.memoryTable.setRowCount(0) # self.errorBox.clear() from Phase2.registers import RegisterTable RegisterTable.Initialize(file_path="../lib/Phase2/") self.doRegisterUpdate() if (i == 1): self.file_save() mydir = os.getcwd() mydir_tmp = "../lib/" mydir_new = os.chdir(mydir_tmp) exec(open("first_half_controller.py").read(), locals(), locals()) mydir = os.chdir(mydir) from Phase1.detectError import detectError error_list = detectError() if (len(error_list) > 0): self.errorBox.setPlainText(error_list) self.tabs.setCurrentIndex(0) return self.errorBox.clear() mydir = os.getcwd() mydir_tmp = "../lib/" mydir_new = os.chdir(mydir_tmp) exec(open("second_half_controller.py").read()) mydir = os.chdir(mydir) self.showProcessedCode() self.memJumpDropDown.setCurrentIndex(0) self.doMemoryUpdate() self.tableReColor() from Phase2.registers import RegisterTable RegisterTable.Initialize(file_path="../lib/Phase2/") self.doRegisterUpdate() self.doPipeUpdate() self.allInfo() def showProcessedCode(self): ori = open("../lib/Files/assemblyCodeFinal.asm") mac = open("../lib/Files/machine_code.mc") bas = open("../lib/Files/assemblyCodeFinal_BasicVersion.asm") ori = ori.readlines() mac = mac.readlines() bas = bas.readlines() self.codeTable.setRowCount(len(ori) + 2) self.maxPC = 1 auipc_count = 0 for ind in range(len(bas) + 1): # print(ind) # item = self.codeTable.verticalHeaderItem(ind) item = QtWidgets.QTableWidgetItem() item.setTextAlignment(QtCore.Qt.AlignHCenter) self.codeTable.setItem(ind, 0, item) item = QtWidgets.QTableWidgetItem() item.setTextAlignment(QtCore.Qt.AlignHCenter) self.codeTable.setItem(ind, 1, item) item = QtWidgets.QTableWidgetItem() item.setTextAlignment(QtCore.Qt.AlignHCenter) self.codeTable.setItem(ind, 2, item) item = QtWidgets.QTableWidgetItem() item.setTextAlignment(QtCore.Qt.AlignHCenter) self.codeTable.setItem(ind, 3, item) if (ind == len(bas)): continue item.setText(self.translate("MainWindow", "New Row")) item = self.codeTable.item(ind, 0) item.setText( self.translate("MainWindow", mac[ind].strip().split()[0])) item = self.codeTable.item(ind, 1) item.setText( self.translate("MainWindow", mac[ind].strip().split()[1])) item = self.codeTable.item(ind, 2) item.setText(self.translate("MainWindow", bas[ind].strip())) item = self.codeTable.item(ind, 3) item.setText( self.translate("MainWindow", ori[ind - auipc_count].strip())) if bas[ind].split()[0] == "auipc": auipc_count += 1 def displayTypeChange(self, i): self.doRegisterUpdate() self.doMemoryUpdate() self.doPipeUpdate() self.allInfo() def memoryTypeChange(self, i): self.doMemoryUpdate() def stepForward(self): if self.currentPC == 0: self.runCode() if self.currentPC < self.maxPC: self.currentPC += 1 self.displayTypeChange(0) self.tableReColor() def stepBack(self): if self.currentPC > 0: self.currentPC -= 1 self.displayTypeChange(0) self.tableReColor() def getVal(self, val): if (self.regMemDisplayTypeDrop.currentIndex() == 0): val = (val & 0xffffffff) val = hex(val) elif (self.regMemDisplayTypeDrop.currentIndex() == 1): pass elif (self.regMemDisplayTypeDrop.currentIndex() == 2): val = (val & 0xffffffff) elif (self.regMemDisplayTypeDrop.currentIndex() == 3): try: val = chr(val) except: val = chr(1) return val def selectMemory(self, index): if (index == 0): dmt = open('../lib/Phase3/Snapshot/memory_instructions.txt', 'r+').readlines() return dmt if (self.currentPC == 0 or self.currentPC > self.maxPC): return [] if (index == 1): dmt = open( '../lib/Phase3/Snapshot/Files/memory_after_cycle' + str(self.currentPC) + '.txt', 'r+').readlines() return dmt if (index == 2): dmt = open('../lib/Files/heap_memory_table.txt', 'r+').readlines() return dmt if (index == 3): dmt = open( '../lib/Phase3/Snapshot/Files/memory_after_cycle' + str(self.currentPC) + '.txt', 'r+').readlines() return dmt def doRegisterUpdate(self): rt = [] if self.currentPC == 0 or self.currentPC > self.maxPC: rt = ["0"] * 32 rt[2] = "2147483632" else: rt = open( '../lib/Phase3/Snapshot/Files/registers_after_cycle' + str(self.currentPC) + '.txt', 'r+') rt = rt.readlines() for ind in range(len(rt)): item = QtWidgets.QTableWidgetItem() val = int(rt[ind].strip()) val = self.getVal(val) item.setText(str(val)) self.registerTable.setItem(ind, 0, item) def doPipeUpdate(self): rt = [] if self.currentPC == 0 or self.currentPC > self.maxPC: rt = ["0"] * 10 else: rt = open( '../lib/Phase3/Snapshot/Files/instruction_details_after_cycle' + str(self.currentPC) + '.txt', 'r+') rt = rt.readlines() for ind in range(len(rt)): item = QtWidgets.QTableWidgetItem() val = int(rt[ind].strip(), 16) val = self.getVal(val) item.setText(str(val)) self.pipeTable.setItem(ind, 0, item) def allInfo(self): rt = [] if self.currentPC == 0: rt = ["0"] * 10 else: rt = open('../lib/Phase3/Files/summary.txt', 'r+') rt = rt.readlines() for ind in range(len(rt)): item = QtWidgets.QTableWidgetItem() val = rt[ind].strip() #val = self.getVal(val) item.setText(str(val)) self.pipeTable.setItem(5 + ind, 0, item) def knobs(self, but, ind): rt = open('../lib/Phase3/Files/knobs.txt', 'r+') rt = rt.readlines() if (len(rt) == 0): rt = ['1 1 0 0'] lis = rt[0].strip().split() if but.isChecked() == True: lis[ind] = '1' else: lis[ind] = '0' rt = open('../lib/Phase3/Files/knobs.txt', 'w') rt.write(" ".join(lis)) #print(lis) def tableReColor(self): for j in range(self.codeTable.rowCount() - 1): self.codeTable.item(j, 0).setBackground(QtGui.QColor(255, 255, 255)) if self.currentPC != 0 and self.currentPC <= self.maxPC: self.codeTable.item((int(self.PCList[self.currentPC - 1]) // 4), 0).setBackground(QtGui.QColor(144, 238, 144)) def doMemoryUpdate(self): memList = self.selectMemory(self.memJumpDropDown.currentIndex()) self.memoryTable.setRowCount((len(memList) + 3) // 4) for ind in range(0, len(memList) // 4): item = QtWidgets.QTableWidgetItem() item.setTextAlignment(QtCore.Qt.AlignHCenter) self.memoryTable.setItem(ind, 0, item) item = QtWidgets.QTableWidgetItem() item.setTextAlignment(QtCore.Qt.AlignHCenter) self.memoryTable.setItem(ind, 1, item) item = QtWidgets.QTableWidgetItem() item.setTextAlignment(QtCore.Qt.AlignHCenter) self.memoryTable.setItem(ind, 2, item) item = QtWidgets.QTableWidgetItem() item.setTextAlignment(QtCore.Qt.AlignHCenter) self.memoryTable.setItem(ind, 3, item) item = QtWidgets.QTableWidgetItem() item.setTextAlignment(QtCore.Qt.AlignHCenter) self.memoryTable.setItem(ind, 4, item) item.setText("New Row") item = self.memoryTable.item(ind, 0) item.setText(memList[ind * 4].strip().split()[0]) item = self.memoryTable.item(ind, 1) item.setText( str(self.getVal(int(memList[ind * 4].strip().split()[1])))) item = self.memoryTable.item(ind, 2) item.setText( str(self.getVal(int(memList[ind * 4 + 1].strip().split()[1])))) item = self.memoryTable.item(ind, 3) item.setText( str(self.getVal(int(memList[ind * 4 + 2].strip().split()[1])))) item = self.memoryTable.item(ind, 4) item.setText( str(self.getVal(int(memList[ind * 4 + 3].strip().split()[1])))) def runCodeClick(self): self.runCode() self.currentPC = self.maxPC self.displayTypeChange(0) self.tableReColor() def runCode(self): mydir = os.getcwd() mydir_tmp = "../lib/" mydir_new = os.chdir(os.path.join(mydir, mydir_tmp)) exec(open("Main_Controller.py").read()) mydir = os.chdir(mydir) self.PCList = open( '../lib/Phase3/Snapshot/Files/pcs_after_each_cycle.txt', 'r+').readlines() self.maxPC = len(self.PCList) - 1 self.doRegisterUpdate() self.doPipeUpdate() self.doMemoryUpdate() self.allInfo() def init(self): self.knobs(self.cb1, 0) self.knobs(self.cb2, 1) self.knobs(self.cb3, 2) self.knobs(self.cb4, 3)
class GeneralWidget(QWidget): def __init__(self, parent=None): super(QWidget, self).__init__(parent) self.model = Model() self.type = 'simple' self.prev = '' self.window = None self.tab = QtWidgets.QWidget() self.tab.setObjectName("tab") self.gridLayout_4 = QtWidgets.QGridLayout(self.tab) self.gridLayout_4.setObjectName("gridLayout_4") self.widget = QtWidgets.QWidget(self.tab) self.widget.setObjectName("widget") self.gridLayout_3 = QtWidgets.QGridLayout(self.widget) self.gridLayout_3.setContentsMargins(-1, 0, -1, -1) self.gridLayout_3.setObjectName("gridLayout_3") self.splitter = QtWidgets.QSplitter(self.widget) self.splitter.setOrientation(QtCore.Qt.Vertical) self.splitter.setObjectName("splitter") self.frame = QtWidgets.QFrame(self.splitter) self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel) self.frame.setFrameShadow(QtWidgets.QFrame.Raised) self.frame.setObjectName("frame") self.gridLayout = QtWidgets.QGridLayout(self.frame) self.gridLayout.setContentsMargins(0, 0, 0, 3) self.gridLayout.setObjectName("gridLayout") self.verticalLayout_3 = QtWidgets.QVBoxLayout() self.verticalLayout_3.setObjectName("verticalLayout_3") self.verticalLayout_2 = QtWidgets.QVBoxLayout() self.verticalLayout_2.setObjectName("verticalLayout_2") self.verticalLayout = QtWidgets.QVBoxLayout() self.verticalLayout.setSpacing(0) self.verticalLayout.setObjectName("verticalLayout") self.horizontalLayout = QtWidgets.QHBoxLayout() self.horizontalLayout.setContentsMargins(-1, -1, -1, 4) self.horizontalLayout.setObjectName("horizontalLayout") self.label = QtWidgets.QLabel(self.frame) font = QtGui.QFont() font.setFamily("MS Shell Dlg 2") font.setPointSize(10) font.setBold(False) font.setItalic(False) font.setWeight(50) self.label.setFont(font) self.label.setStyleSheet( "font: 10pt \"MS Shell Dlg 2\";color: rgb(255, 255, 255);") self.label.setObjectName("label") self.horizontalLayout.addWidget(self.label) self.lineEdit = DragLineEdit(self.frame) self.lineEdit.setObjectName("lineEdit") self.horizontalLayout.addWidget(self.lineEdit) self.pushButton = QtWidgets.QPushButton(self.frame) self.pushButton.setStyleSheet("font: 10pt \"MS Shell Dlg 2\";") self.pushButton.setObjectName("pushButton") self.horizontalLayout.addWidget(self.pushButton) self.pushButton_5 = QtWidgets.QPushButton(self.frame) self.pushButton_5.setStyleSheet("font: 10pt \"MS Shell Dlg 2\";") self.pushButton_5.setObjectName("pushButton_5") self.horizontalLayout.addWidget(self.pushButton_5) self.verticalLayout.addLayout(self.horizontalLayout) self.horizontalLayout_3 = QtWidgets.QHBoxLayout() self.horizontalLayout_3.setObjectName("horizontalLayout_3") self.label_2 = QtWidgets.QLabel(self.frame) font = QtGui.QFont() font.setBold(False) font.setWeight(50) self.label_2.setFont(font) self.label_2.setObjectName("label_2") self.horizontalLayout_3.addWidget(self.label_2) spacerItem = QtWidgets.QSpacerItem(188, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_3.addItem(spacerItem) self.label_3 = QtWidgets.QLabel(self.frame) font = QtGui.QFont() font.setBold(False) font.setWeight(50) self.label_3.setFont(font) self.label_3.setObjectName("label_3") self.horizontalLayout_3.addWidget(self.label_3) spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_3.addItem(spacerItem1) self.verticalLayout.addLayout(self.horizontalLayout_3) self.verticalLayout_2.addLayout(self.verticalLayout) self.horizontalLayout_4 = QtWidgets.QHBoxLayout() self.horizontalLayout_4.setObjectName("horizontalLayout_4") self.plainTextEdit = CodeEditor(self.frame) self.plainTextEdit.setStyleSheet("font: 10pt \"Courier New\";") self.plainTextEdit.setObjectName("plainTextEdit") self.horizontalLayout_4.addWidget(self.plainTextEdit) self.plainTextEdit_2 = CodeEditor(self.frame) self.plainTextEdit_2.setStyleSheet("font: 10pt \"Courier New\";") self.plainTextEdit_2.setObjectName("plainTextEdit_2") self.horizontalLayout_4.addWidget(self.plainTextEdit_2) self.verticalLayout_2.addLayout(self.horizontalLayout_4) self.verticalLayout_3.addLayout(self.verticalLayout_2) self.horizontalLayout_2 = QtWidgets.QHBoxLayout() self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.label_4 = QtWidgets.QLabel(self.frame) self.label_4.setObjectName("label_4") self.horizontalLayout_2.addWidget(self.label_4) spacerItem2 = QtWidgets.QSpacerItem(173, 22, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_2.addItem(spacerItem2) self.pushButton_3 = QtWidgets.QPushButton(self.frame) self.pushButton_3.setStyleSheet("font: 10pt \"MS Shell Dlg 2\";") self.pushButton_3.setObjectName("pushButton_3") self.horizontalLayout_2.addWidget(self.pushButton_3) self.pushButton_4 = QtWidgets.QPushButton(self.frame) self.pushButton_4.setStyleSheet("font: 10pt \"MS Shell Dlg 2\";") self.pushButton_4.setObjectName("pushButton_4") self.horizontalLayout_2.addWidget(self.pushButton_4) self.pushButton_2 = QtWidgets.QPushButton(self.frame) self.pushButton_2.setStyleSheet("font: 10pt \"MS Shell Dlg 2\";") self.pushButton_2.setObjectName("pushButton_2") self.horizontalLayout_2.addWidget(self.pushButton_2) self.verticalLayout_3.addLayout(self.horizontalLayout_2) self.gridLayout.addLayout(self.verticalLayout_3, 0, 0, 1, 1) self.plainTextEdit_3 = CodeEditor(self.splitter) self.splitter.setSizes([300, 100]) self.plainTextEdit_3.setStyleSheet("font: 10pt \"MS Shell Dlg 2\";") self.plainTextEdit_3.setObjectName("plainTextEdit_3") self.gridLayout_3.addWidget(self.splitter, 0, 0, 1, 1) self.gridLayout_4.addWidget(self.widget, 0, 0, 1, 1) self.plainTextEdit.setAcceptDrops(False) self.plainTextEdit_3.setAcceptDrops(False) self.preview_thread = PreviewThread() self.preview_thread.signal.connect(self.loadPreview) self.label.setText("File Name : ") self.label_2.setText("Tikz : ") self.label_3.setText("GraphML : ") self.label_4.setText("Debug Logs : ") self.label_2.setStyleSheet( "font: 10pt \"MS Shell Dlg 2\";color: rgb(255, 255, 255);") self.label_3.setStyleSheet( "font: 10pt \"MS Shell Dlg 2\";color: rgb(255, 255, 255);") self.label_4.setStyleSheet( "font: 10pt \"MS Shell Dlg 2\";color: rgb(255, 255, 255);") self.pushButton.setText("Browse") self.pushButton_3.setText("Simple-Tikz") self.pushButton_2.setText("Save") self.pushButton_4.setText("Refresh") self.pushButton_5.setIcon(QtGui.QIcon('../Images/refresh.png')) self.pushButton.clicked.connect(self.browseSlot) self.lineEdit.returnPressed.connect(self.returnedPressedSlot) self.pushButton_3.clicked.connect(self.convertSlot) self.pushButton_4.clicked.connect(self.reloadSlot) self.pushButton_2.clicked.connect(self.saveSlot) #self.lineEdit.textChanged.connect(self.draganddrop) self.pushButton_5.clicked.connect(self.refreshSlot) self.setLayout(self.gridLayout_4) def debugPrint(self, msg): '''Print the message in the text edit at the bottom of the horizontal splitter. ''' if self.prev != msg: self.prev = msg self.plainTextEdit_3.appendPlainText(str(msg)) @pyqtSlot() def returnedPressedSlot(self): ''' Called when the user enters a string in the line edit and presses the ENTER key. ''' fileName = self.lineEdit.text() extension = os.path.splitext(fileName)[1] self.debugPrint("Converting file : " + fileName) if self.model.isValid(fileName) and extension == '.graphml': self.model.setFileName(self.lineEdit.text()) if self.type == 'simple': self.refreshAll() elif self.type == 'advance': self.refreshAllSimple() else: m = QtWidgets.QMessageBox() m.setText("File not supported or invalid path!\n" + fileName) m.setIcon(QtWidgets.QMessageBox.Warning) m.setStandardButtons(QtWidgets.QMessageBox.Ok | QtWidgets.QMessageBox.Cancel) m.setDefaultButton(QtWidgets.QMessageBox.Cancel) m.exec_() self.lineEdit.setText("") self.plainTextEdit.setPlainText("") self.plainTextEdit_2.setPlainText("") self.debugPrint("Invalid file specified: " + fileName) @pyqtSlot() def convertSlot(self): ''' Called when the user presses the convert button. ''' if self.model.getFileName(): if self.type == 'simple': self.refreshAllSimple() _translate = QtCore.QCoreApplication.translate self.pushButton_3.setText(_translate("MainWindow", "Adv-Tikz")) self.type = 'advance' self.debugPrint("Simple mode chosen.Output modified.") elif self.type == 'advance': self.refreshAll() _translate = QtCore.QCoreApplication.translate self.pushButton_3.setText( _translate("MainWindow", "Simple Tikz")) self.debugPrint("Advanced mode chosen.Output modified.") self.type = 'simple' else: self.debugPrint("No file specified.") @pyqtSlot() def browseSlot(self): ''' Called when the user presses the Browse button ''' options = QtWidgets.QFileDialog.Options() options |= QtWidgets.QFileDialog.DontUseNativeDialog fileName, _ = QtWidgets.QFileDialog.getOpenFileName( None, "Select GraphMl Files", "", filter="*.graphml", options=options) if fileName: self.debugPrint("Converting file : " + fileName) self.model.setFileName(fileName) try: self.window.close() except: pass self.refreshAll() @pyqtSlot() def saveSlot(self): ''' Called when the user presses the Save button ''' if self.model.getFileName(): options = QtWidgets.QFileDialog.Options() options |= QtWidgets.QFileDialog.DontUseNativeDialog fileName, _ = QtWidgets.QFileDialog.getSaveFileName( None, "QFileDialog.getSaveFileName()", "", ".tex", options=options) if fileName: content = self.plainTextEdit.toPlainText() with open(fileName + '.tex', 'w') as out: out.write(content) self.debugPrint("File " + fileName + '.tex saved.') else: self.debugPrint("No file specified to save.") @pyqtSlot() def reloadSlot(self): ''' Called when the user presses the Refresh button. ''' self.debugPrint('Refreshing preview....') if self.plainTextEdit.toPlainText() != '': fileName = self.model.getFileName() flin = os.path.splitext(fileName)[0] fileName = self.model.getFileName() flin = os.path.splitext(fileName)[0] fileout = flin + '.tex' tout = open(fileout, 'w') tout.write( '\\documentclass[11pt]{article}\n\\usepackage{tikz}\n\\thispagestyle{empty}\n\\usetikzlibrary{arrows,shapes}\n\\begin{document}\n' ) tout.write(self.plainTextEdit.toPlainText()) tout.write('\\end{document}') tout.close() self.preview(flin) @pyqtSlot() def refreshSlot(self): ''' Called when the user presses the Reload symbol. ''' self.debugPrint('Reloaded file.') self.returnedPressedSlot() @pyqtSlot() def draganddrop(self): ''' Called when the user drags and drops file on the line edit. ''' if self.lineEdit.text() != '': try: self.window.close() except: pass self.returnedPressedSlot() def loadPreview(self, flag): ''' This function loads the preview in a different window. ''' self.preview_thread.stop() fileName = self.model.getFileName() flin = os.path.splitext(fileName)[0] _, tail = os.path.split(flin) if flag: cwd = os.getcwd() img_path = cwd + '\\' + tail + '.jpg' img = QImage(img_path) self.window = PreviewWindow(cwd + '\\' + tail) pixmap = QPixmap(img_path) self.window.setPicSize(img.width(), img.height()) self.window.label.setPixmap( pixmap.scaled(self.window.label.size(), QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)) icon = QIcon() icon.addFile('../Images/python.png', QSize(256, 256)) self.window.setWindowIcon(icon) self.window.show() self.debugPrint("Preview loaded.") try: os.remove(flin + '.tex') os.remove(tail + '.log') os.remove(tail + '.aux') os.remove(tail + '.pdf') os.remove(tail + '-crop.pdf') except: pass else: try: self.window.close() os.remove(flin + '.tex') os.remove(tail + '.log') os.remove(tail + '.aux') os.remove(tail + '.pdf') os.remove(tail + '-crop.pdf') except: pass self.debugPrint("Preview failed due to latex compilation error.") def refreshAllSimple(self): ''' Updates the widgets whenever an interaction happens. Typically some interaction takes place, the UI responds, and informs the model of the change. Then this method is called, pulling from the model information that is updated in the GUI. ''' self.lineEdit.setText(self.model.getFileName()) flag, exception, contents = self.model.convertSlot() if flag == True: self.debugPrint(exception + ' in ' + str(self.model.getFileName())) self.debugPrint('Conversion for file : ' + str(self.model.getFileName()) + ' failed.') self.plainTextEdit.setPlainText('') self.plainTextEdit_2.setPlainText('') else: fileName = self.model.getFileName() flin = os.path.splitext(fileName)[0] fileout = flin + '.tex' tout = open(fileout, 'w') tout.write( '\\documentclass[11pt]{article}\n\\usepackage{tikz}\n\\thispagestyle{empty}\n\\usetikzlibrary{arrows,shapes}\n\\begin{document}\n' ) tout.write(contents) tout.write('\\end{document}') tout.close() self.plainTextEdit.setPlainText(contents) self.plainTextEdit_2.setPlainText(self.model.getGraphML()) self.debugPrint('Conversion for file : ' + str(self.model.getFileName()) + ' successful.') self.debugPrint('Loading Preview....') self.preview(flin) def refreshAll(self): ''' Updates the widgets for simple mode. ''' self.lineEdit.setText(self.model.getFileName()) flag, exception, contents = self.model.getFileContents() if flag == True: self.debugPrint(exception + ' in ' + str(self.model.getFileName())) self.debugPrint('Conversion for file : ' + str(self.model.getFileName()) + ' failed.') self.plainTextEdit.setPlainText('') self.plainTextEdit_2.setPlainText('') else: fileName = self.model.getFileName() flin = os.path.splitext(fileName)[0] fileout = flin + '.tex' tout = open(fileout, 'w') tout.write( '\\documentclass[11pt]{article}\n\\usepackage{tikz}\n\\thispagestyle{empty}\n\\usetikzlibrary{arrows,shapes}\n\\begin{document}\n' ) tout.write(contents) tout.write('\\end{document}') tout.close() self.plainTextEdit.setPlainText(contents) self.plainTextEdit_2.setPlainText(self.model.getGraphML()) self.debugPrint('Conversion for file : ' + str(self.model.getFileName()) + ' successful.') self.debugPrint('Loading Preview....') self.preview(flin) def preview(self, flin): ''' This function is called before previewing which initialises threads. ''' self.preview_thread.set_file(flin) self.preview_thread.start()
def test_return_to_indentedPlusOne_onNewBlock(self): editor = CodeEditor() QTest.keyClicks(editor, "if x > 10:") QTest.keyClick(editor, Qt.Key_Return) QTest.keyClicks(editor, "pass") self.assertEqual(editor.toPlainText(), "if x > 10:\n pass")
def test_return_to_indented(self): editor = CodeEditor() QTest.keyClicks(editor, " hello world") QTest.keyClick(editor, Qt.Key_Return) QTest.keyClicks(editor, "I'm indented") self.assertEqual(editor.toPlainText(), " hello world\n I'm indented")
def test_backspace_beginToPreviousLine(self): editor = CodeEditor() QTest.keyClicks(editor, "hello world") QTest.keyClick(editor, Qt.Key_Return) QTest.keyClick(editor, Qt.Key_Backspace) self.assertEqual(editor.toPlainText(), "hello world")
def test_backspace_RemovePrevious(self): editor = CodeEditor() QTest.keyClicks(editor, "hello worlde") QTest.keyClick(editor, Qt.Key_Backspace) self.assertEqual(editor.toPlainText(), "hello world")
def test_tabkey_middle_twospaces(self): editor = CodeEditor() QTest.keyClicks(editor, "he") QTest.keyClick(editor, Qt.Key_Tab) QTest.keyClicks(editor, "llo") self.assertEqual(editor.toPlainText(), "he llo")
def test_simpleTyping(self): editor = CodeEditor() QTest.keyClicks(editor, "hello world") self.assertEqual(editor.toPlainText(), "hello world")