71 lines
No EOL
2.3 KiB
Python
Executable file
71 lines
No EOL
2.3 KiB
Python
Executable file
#!/usr/bin/env python2
|
|
|
|
import sys, os, json
|
|
from PyQt4 import QtGui, QtCore
|
|
|
|
settings = QtCore.QSettings("net.jeena", "jsonpretty")
|
|
|
|
|
|
class MainWindow(QtGui.QMainWindow):
|
|
def __init__(self):
|
|
QtGui.QMainWindow.__init__(self)
|
|
self.addAction(QtGui.QAction("Full Screen", self, checkable=True, toggled=lambda v: self.showFullScreen() if v else self.showNormal(), shortcut="F11"))
|
|
self.restoreGeometry(QtCore.QByteArray.fromRawData(settings.value("geometry").toByteArray()))
|
|
self.restoreState(QtCore.QByteArray.fromRawData(settings.value("state").toByteArray()))
|
|
|
|
self.textInput = QtGui.QPlainTextEdit(self)
|
|
self.textInput.textChanged.connect(self.prettyfy)
|
|
self.textInput.setLineWrapMode(QtGui.QPlainTextEdit.NoWrap)
|
|
self.textInput.setFont(QtGui.QFont("Monospace"))
|
|
self.setCentralWidget(self.textInput)
|
|
|
|
runAction = QtGui.QAction("&Prittyfy", self)
|
|
runAction.setShortcut("Ctrl+P")
|
|
runAction.setStatusTip("Prittyfy")
|
|
runAction.triggered.connect(self.prettyfy)
|
|
|
|
exitAction = QtGui.QAction("&Exit", self)
|
|
exitAction.setShortcut("Ctrl+Q")
|
|
exitAction.setStatusTip("Exit jsonpretty")
|
|
exitAction.triggered.connect(QtGui.qApp.quit)
|
|
|
|
menubar = self.menuBar()
|
|
fileMenu = menubar.addMenu("&File")
|
|
fileMenu.addAction(runAction)
|
|
fileMenu.addAction(exitAction)
|
|
|
|
self.manually = True
|
|
|
|
def closeEvent(self, ev):
|
|
settings.setValue("geometry", self.saveGeometry())
|
|
settings.setValue("state", self.saveState())
|
|
return QtGui.QMainWindow.closeEvent(self, ev)
|
|
|
|
def put(self, key, value):
|
|
"Persist an object somewhere under a given key"
|
|
settings.setValue(key, json.dumps(value))
|
|
settings.sync()
|
|
|
|
def get(self, key, default=None):
|
|
"Get the object stored under 'key' in persistent storage, or the default value"
|
|
v = settings.value(key)
|
|
return json.loads(unicode(v.toString())) if v.isValid() else default
|
|
|
|
def prettyfy(self):
|
|
if self.manually:
|
|
try:
|
|
j = json.loads(unicode(self.textInput.toPlainText()))
|
|
except ValueError:
|
|
self.statusBar().showMessage('JSON Syntax Error')
|
|
else:
|
|
s = json.dumps(j, indent=4, separators=(',', ': '))
|
|
self.manually = False
|
|
self.textInput.setPlainText(s)
|
|
self.manually = True
|
|
self.statusBar().showMessage('JSON Ok')
|
|
|
|
if __name__ == "__main__":
|
|
app = QtGui.QApplication(sys.argv)
|
|
wb = MainWindow()
|
|
wb.show()
|
|
sys.exit(app.exec_()) |