/unmaintained/drills/deployed/deployed.factor

http://github.com/abeaumont/factor · Factor · 36 lines · 33 code · 3 blank · 0 comment · 3 complexity · e2df91ba04ca6cb08356d915a408f0c7 MD5 · raw file

  1. USING: arrays cocoa.dialogs combinators continuations
  2. fry grouping io.encodings.utf8 io.files io.styles kernel math
  3. math.parser models models.arrow models.history namespaces random
  4. sequences splitting ui ui.gadgets.alerts ui.gadgets.book-extras
  5. ui.gadgets.books ui.gadgets.buttons ui.gadgets.frames
  6. ui.gadgets.grids ui.gadgets.labels ui.gadgets.tracks fonts
  7. wrap.strings system ;
  8. EXCLUDE: accessors => change-model ;
  9. IN: drills.deployed
  10. SYMBOLS: it startLength ;
  11. : big ( gadget -- gadget ) T{ font { name "sans-serif" } { size 30 } } >>font ;
  12. : card ( model quot -- button ) <arrow> <label-control> big [ next ] <book-btn> ;
  13. : op ( quot str -- gadget ) <label> big swap <book-bevel-btn> ;
  14. : show ( model -- gadget ) dup it set-global [ random ] <arrow>
  15. { [ [ first ] card ]
  16. [ [ second ] card ]
  17. [ '[ |<< it get _ model-changed ] "No" op ]
  18. [ '[ |<< [ it get [
  19. _ value>> swap remove
  20. [ [ it get go-back ] "Drill Complete" alert return ] when-empty
  21. ] change-model ] with-return ] "Yes" op ]
  22. } cleave
  23. 2array { 1 0 } <track> swap [ 0.5 track-add ] each
  24. 3array <book*> 3 3 <frame> { 1 1 } >>filled-cell { 450 175 } >>pref-dim swap { 1 1 } grid-add
  25. it get [ length startLength get swap - number>string "/" startLength get number>string 3append ] <arrow> <label-control> { 1 2 } grid-add ;
  26. : drill ( -- ) [
  27. open-panel [
  28. [ utf8 file-lines [ "\t" split [ 25 wrap-string ] map ] map dup [ first2 swap 2array ] map append ] map concat
  29. [ length startLength set-global ] keep <history> [ add-history ] [ show ] bi
  30. "Got it?" open-window
  31. ] [ 0 exit ] if*
  32. ] with-ui ;
  33. MAIN: drill