-
Notifications
You must be signed in to change notification settings - Fork 7
/
tab.clj
83 lines (79 loc) · 3.37 KB
/
tab.clj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
(ns sketchpad.editor.tab
(:use [seesaw core color border graphics meta]
[sketchpad.util.option-windows]
[clojure.pprint])
(:import (javax.swing JPanel JLabel BorderFactory AbstractButton JButton)
(javax.swing.plaf.basic.BasicButtonUI)
(java.awt.event ActionListener MouseListener)
(java.awt.BasicStoke)
(java.awt Color Dimension Graphics2D FlowLayout))
(:require [seesaw.bind :as bind]
[sketchpad.state.state :as state]
[seesaw.font :as font]
[sketchpad.project.project :as project]
[sketchpad.config.prefs :as sketchpad.config.prefs]))
(defn text-area-from-index [tabbed-panel i]
(select (.getComponentAt tabbed-panel i) [:#editor]))
(defn paint-tab-button [buffer c g]
(let [clean? (@(:state buffer) :clean)
w (width c)
h (height c)
button-base-color (color 255 255 255)
line-style (style :foreground button-base-color :stroke 2 :cap :round)
project-color (project/buffer-color buffer)
border-style (if project-color
(style :foreground @project-color :stroke 0.5)
(style :foreground (color 255 255 255) :stroke 0.5))
ellipse-style (style :foreground button-base-color :background button-base-color :stroke 1 :cap :round)
d 3
lp 7]
(when @sketchpad.config.prefs/show-tabs?
(cond
clean?
(do
(draw g
(line lp lp (- w lp) (- h lp)) line-style
(line lp (- h lp) (- w lp) lp) line-style
(rounded-rect d d (- w d d) (- h d d) 5 5) border-style))
(not clean?)
(do
(draw g
(ellipse lp lp (- w lp lp) (- h lp lp)) ellipse-style
(rounded-rect d d (- w d d) (- h d d) 5 5) border-style))))))
(defn tab-button
([buffer]
(let [button (button :focusable? false
:tip "close this tab"
:minimum-size [20 :by 20]
:size [20 :by 20]
:id :close-button
:paint (partial paint-tab-button buffer))]
(doto button
(.setBorderPainted false)
(.setRolloverEnabled false)
(.setFocusable false))
button)))
(defn button-tab
[buffer]
(let [button (tab-button buffer)
label (label :text @(get-in buffer [:component :title])
:foreground (color :white)
:focusable? false
:class :tab-label
:font (font/font "MENLO-12"))
container (flow-panel :align :right
:items [label button]
:maximum-size [300 :by 100]
:class :button-tab)]
(bind/bind sketchpad.config.prefs/show-tabs? (bind/transform (fn [s] s)) (bind/property container :visible?))
(bind/bind sketchpad.config.prefs/show-tabs? (bind/transform (fn [s] s)) (bind/property label :visible?))
(bind/bind (:title buffer) (bind/transform (fn [s] s)) (bind/property label :text))
(doto container
(.setOpaque false)
(.setBorder (javax.swing.BorderFactory/createEmptyBorder 0 0 0 0))
(.setMinimumSize (Dimension. 300 20)))
{:type :tab
:container container
:button button
:label label
:label-color (atom (color :white))}))