diff --git a/clicket.rkt b/clicket.rkt index eed9062..93b3d6b 100644 --- a/clicket.rkt +++ b/clicket.rkt @@ -3,14 +3,30 @@ ; setup main frame layout (define frame (new (class frame% (super-new) (define/augment (on-close) - (send timer stop))) + (send timer stop))) ;on release - change to (exit)? [label "Clicket"] [border 5])) (define panel (new horizontal-panel% [parent frame] [spacing 15])) (define left-side (new vertical-pane% [parent panel])) -(define right-side (new vertical-pane% [parent panel])) + +; janky terrible tab switcher, only works for two tabs, do not copy this +(define selected-tab #t) +(define (switch-tab tp e) + (send tp change-children + (λ (c) + (if selected-tab + (list builtins) + (list definitions)))) + (set! selected-tab (not selected-tab))) +(define right-side (new tab-panel% [parent panel] + [choices '("Builtins" "Definitions")] + [callback switch-tab])) +(define builtins (new vertical-panel% [parent right-side])) +(define definitions (new vertical-panel% [parent right-side])) +(define tabs (list builtins definitions)) +(switch-tab right-side #f) ; setup click var and associated display text (define clicks 0) @@ -26,19 +42,18 @@ [label (cps-str)] [auto-resize #t])) -; helper procedure +; helper procedures (define-syntax-rule (new-inc-button container name counter) (new button% [parent container] [label name] [callback (λ (b e) (set! counter (add1 counter)))])) -; assume we're placing all buy buttons in the right-side container -(define-syntax-rule (new-buy-button cl) - (let* ([button-pane (new horizontal-pane% [parent right-side])] +(define-syntax-rule (new-buy-button tab cl) + (let* ([button-panel (new horizontal-panel% [parent tab])] [counter-msg (new message% - [parent button-pane] + [parent button-panel] [label "Owned: 0"] [auto-resize #t])]) - (new button% [parent button-pane] + (new button% [parent button-panel] [label (~a "Buy " (clicker-name cl) " (" (clicker-price cl) "¢)")] [callback (λ (b e) (when (>= clicks (clicker-price cl)) @@ -56,7 +71,35 @@ (clicker "mouse" 10 1 0) (clicker "coder" 150 5 0) (clicker "paren farm" 1000 10 0))) -(for ([cl all-clickers]) (new-buy-button cl)) +(for ([cl all-clickers]) (new-buy-button builtins cl)) + +; define your own clickers +(define definer-panel (new group-box-panel% + [parent definitions] + [label "Define custom clicker"])) +(define name-field (new text-field% + [parent definer-panel] + [label "Name"] + [style '(single vertical-label)])) +(define clicks-field (new text-field% + [parent definer-panel] + [label "Clicks per second"] + [style '(single vertical-label)])) +(define price-panel (new group-box-panel% + [parent definer-panel] + [label "Prices"])) +(define init-price (new message% + [parent price-panel] + [label "Init price: 0"] + [auto-resize #t])) +(define cl-price (new message% + [parent price-panel] + [label "Clicker price: 0"] + [auto-resize #t])) +(new button% [parent definer-panel] + [label "Define"]) +; TODO implement callback + ; setup timer (define timer-ctr 0)