;; Copyright © 2023, Jaidyn Ann ;; ;; This program is free software: you can redistribute it and/or ;; modify it under the terms of the GNU General Public License as ;; published by the Free Software Foundation, either version 3 of ;; the License, or (at your option) any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . (import (chicken io) (chicken string) qt-light) ;; Start & run the application. (define (init) (let ([qt-app (qt:init)] [qt-win (create-window)]) (init-window qt-win) (qt:run))) ;; Create the application window. (define (create-window) (qt:widget (window-contents))) ;; Return the UI’s XML, read from “contacts.ui”. ;; We could generate this XML ourselves, and write a nice s-expr front-end, ;; maybe… `o` (define (window-contents) (call-with-input-file "contact.ui" (lambda (in-port) (read-string #f in-port)))) ;; Initialize the window. (define (init-window window) (window-callbacks window) (qt:show window)) ;; Connect callback functions to widgets’ signals. (define (window-callbacks window) (let* ([file→exit (qt:find window "actionQuit")]) ;; We connect to https://doc.qt.io/qt-6/qaction.html#triggered (if file→exit (qt:connect file→exit "triggered()" (qt:receiver exit)))) (textbox-callbacks window)) ;; Connect a text-printing callback to each textbox. (define (textbox-callbacks window) (let* ([property-names '("address" "city" "company" "county" "eMail" "fax" "homePhone" "name" "nickname" "state" "url" "workPhone" "zip")] [textboxes ;; The texbox widgets are all named like “countryLineEdit”. (map (lambda (property) (qt:find window (conc property "LineEdit"))) property-names)]) ;; Cycle through each textbox, connecting them to a callback that prints ;; their contents each time you type in text. (map (lambda (textbox) (if textbox ;; We connect to https://doc.qt.io/qt-6/qlineedit.html#textChanged ;; … and print the value of https://doc.qt.io/qt-6/qlineedit.html#text-prop (qt:connect textbox "textChanged(QString)" (qt:receiver (lambda () (print (qt:property textbox "text"))))))) textboxes))) (init)