EQL5/examples/M-modules/quick/table-view/table-view.lisp

62 lines
2.2 KiB
Common Lisp
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;;; this is (kind of) a simplified port of the "tableview" C++/QML example
;;; (see also README.txt)
(si::trap-fpe t nil) ; ignore floating point overflows
(qrequire :quick)
(require :properties "properties")
(defpackage :table-view
(:nicknames :table)
(:use :cl :eql :qml))
(in-package :table)
(require :source-model "source-model")
(defvar *sort-filter-model* (qnew "QSortFilterProxyModel"))
(defun filter (text) ; called from QML
(|setFilterWildcard| *sort-filter-model* text))
(defun sort-column (role-name &optional (order |Qt.AscendingOrder|)) ; called from QML
(let ((role (car (find role-name (|roleNames| *sort-filter-model*)
:key 'cdr :test 'string=))))
(x:do-with *sort-filter-model*
(|setSortRole| role)
(|sort| 0 order))))
(defun add-books ()
(add-book "Moby-Dick" "Herman Melville")
(add-book "The Adventures of Tom Sawyer" "Mark Twain")
(add-book "Cats Cradle" "Kurt Vonnegut")
(add-book "Farenheit 451" "Ray Bradbury")
(add-book "It" "Stephen King")
(add-book "On the Road" "Jack Kerouac")
(add-book "Of Mice and Men" "John Steinbeck")
(add-book "Do Androids Dream of Electric Sheep?" "Philip K. Dick")
(add-book "Uncle Toms Cabin" "Harriet Beecher Stowe")
(add-book "The Call of the Wild" "Jack London")
(add-book "The Old Man and the Sea" "Ernest Hemingway")
(add-book "A Streetcar Named Desire" "Tennessee Williams")
(add-book "Catch-22" "Joseph Heller")
(add-book "One Flew Over the Cuckoos Nest" "Ken Kesey")
(add-book "The Murders in the Rue Morgue" "Edgar Allan Poe")
(add-book "Breakfast at Tiffanys" "Truman Capote")
(add-book "Death of a Salesman" "Arthur Miller")
(add-book "Post Office" "Charles Bukowski")
(add-book "Herbert West—Reanimator" "H. P. Lovecraft"))
(defun run ()
;; model & data
(make-book-model)
(add-books)
(|setFilterCaseSensitivity| *sort-filter-model* |Qt.CaseInsensitive|)
(|setSourceModel| *sort-filter-model* *book-model*)
;; view
(setf qml:*quick-view* (qnew "QQmlApplicationEngine")) ; because of QML ApplicationWindow
(|setContextProperty| (|rootContext| qml:*quick-view*) "sortFilterModel" *sort-filter-model*)
(|load| qml:*quick-view* "qml/table-view.qml"))
(run)