EQL5/examples/9-simple-lisp-editor/debug-dialog.lisp
2016-11-25 23:30:38 +01:00

43 lines
1.4 KiB
Common Lisp

(defpackage :debug-dialog
(:use :common-lisp :eql)
(:export
#:command))
(provide :debug-dialog)
(in-package :debug-dialog)
(defun command (messages font)
(qlet ((dlg "QDialog(QWidget*,Qt::WindowFlags)" nil |Qt.WindowStaysOnTopHint|
"windowTitle" (tr "Debug Dialog")
"size" '(600 400))
(msg "QTextEdit")
(lb "QLabel" "text" (tr "Enter debug command (:h for help)"))
(cmd "QLineEdit")
(box "QDialogButtonBox")
(lay "QVBoxLayout(QWidget*)" dlg))
(x:do-with (qset msg)
("readOnly" t)
("font" font)
("tabStopWidth" (qlet ((fm "QFontMetrics(QFont)" font))
(* 8 (! "width(QChar)" fm #\Space)))))
(x:do-with (! "addButton" box)
|QDialogButtonBox.Ok|
|QDialogButtonBox.Cancel|)
(x:do-with (! "addWidget" lay)
msg lb cmd box)
(qset-color msg |QPalette.Base| "lightyellow")
(qconnect box "accepted()" dlg "accept()")
(qconnect box "rejected()" dlg "reject()")
(! "setFocus" cmd)
(qlater (lambda () (x:do-with dlg "activateWindow" "raise")))
(add-messages msg messages)
(if (= |QDialog.Accepted| (! "exec" dlg))
(qget cmd "text")
":r1")))
(defun add-messages (text-edit messages)
(dolist (msg messages)
(x:do-with text-edit
("setTextColor" (cdr msg))
("insertPlainText" (car msg)))))