浏览代码

first commit

Kr Younger 6 年前
当前提交
df8e3f2c13

+ 16
- 0
.idea/compiler.xml 查看文件

@@ -0,0 +1,16 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<project version="4">
3
+  <component name="CompilerConfiguration">
4
+    <annotationProcessing>
5
+      <profile name="Maven default annotation processors profile" enabled="true">
6
+        <sourceOutputDir name="target/generated-sources/annotations" />
7
+        <sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
8
+        <outputRelativeToContentRoot value="true" />
9
+        <module name="calcskin" />
10
+      </profile>
11
+    </annotationProcessing>
12
+    <bytecodeTargetLevel>
13
+      <module name="calcskin" target="1.7" />
14
+    </bytecodeTargetLevel>
15
+  </component>
16
+</project>

+ 13
- 0
.idea/libraries/Maven__junit_junit_4_0.xml 查看文件

@@ -0,0 +1,13 @@
1
+<component name="libraryTable">
2
+  <library name="Maven: junit:junit:4.0">
3
+    <CLASSES>
4
+      <root url="jar://$MAVEN_REPOSITORY$/junit/junit/4.0/junit-4.0.jar!/" />
5
+    </CLASSES>
6
+    <JAVADOC>
7
+      <root url="jar://$MAVEN_REPOSITORY$/junit/junit/4.0/junit-4.0-javadoc.jar!/" />
8
+    </JAVADOC>
9
+    <SOURCES>
10
+      <root url="jar://$MAVEN_REPOSITORY$/junit/junit/4.0/junit-4.0-sources.jar!/" />
11
+    </SOURCES>
12
+  </library>
13
+</component>

+ 13
- 0
.idea/misc.xml 查看文件

@@ -0,0 +1,13 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<project version="4">
3
+  <component name="MavenProjectsManager">
4
+    <option name="originalFiles">
5
+      <list>
6
+        <option value="$PROJECT_DIR$/pom.xml" />
7
+      </list>
8
+    </option>
9
+  </component>
10
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK">
11
+    <output url="file://$PROJECT_DIR$/out" />
12
+  </component>
13
+</project>

+ 8
- 0
.idea/modules.xml 查看文件

@@ -0,0 +1,8 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<project version="4">
3
+  <component name="ProjectModuleManager">
4
+    <modules>
5
+      <module fileurl="file://$PROJECT_DIR$/calcskin.iml" filepath="$PROJECT_DIR$/calcskin.iml" />
6
+    </modules>
7
+  </component>
8
+</project>

+ 124
- 0
.idea/uiDesigner.xml 查看文件

@@ -0,0 +1,124 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<project version="4">
3
+  <component name="Palette2">
4
+    <group name="Swing">
5
+      <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
6
+        <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
7
+      </item>
8
+      <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
9
+        <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
10
+      </item>
11
+      <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
12
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
13
+      </item>
14
+      <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
15
+        <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
16
+      </item>
17
+      <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
18
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
19
+        <initial-values>
20
+          <property name="text" value="Button" />
21
+        </initial-values>
22
+      </item>
23
+      <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
24
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
25
+        <initial-values>
26
+          <property name="text" value="RadioButton" />
27
+        </initial-values>
28
+      </item>
29
+      <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
30
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
31
+        <initial-values>
32
+          <property name="text" value="CheckBox" />
33
+        </initial-values>
34
+      </item>
35
+      <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
36
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
37
+        <initial-values>
38
+          <property name="text" value="Label" />
39
+        </initial-values>
40
+      </item>
41
+      <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
42
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
43
+          <preferred-size width="150" height="-1" />
44
+        </default-constraints>
45
+      </item>
46
+      <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
47
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
48
+          <preferred-size width="150" height="-1" />
49
+        </default-constraints>
50
+      </item>
51
+      <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
52
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
53
+          <preferred-size width="150" height="-1" />
54
+        </default-constraints>
55
+      </item>
56
+      <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
57
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
58
+          <preferred-size width="150" height="50" />
59
+        </default-constraints>
60
+      </item>
61
+      <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
62
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
63
+          <preferred-size width="150" height="50" />
64
+        </default-constraints>
65
+      </item>
66
+      <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
67
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
68
+          <preferred-size width="150" height="50" />
69
+        </default-constraints>
70
+      </item>
71
+      <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
72
+        <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
73
+      </item>
74
+      <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
75
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
76
+          <preferred-size width="150" height="50" />
77
+        </default-constraints>
78
+      </item>
79
+      <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
80
+        <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
81
+          <preferred-size width="150" height="50" />
82
+        </default-constraints>
83
+      </item>
84
+      <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
85
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
86
+          <preferred-size width="150" height="50" />
87
+        </default-constraints>
88
+      </item>
89
+      <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
90
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
91
+          <preferred-size width="200" height="200" />
92
+        </default-constraints>
93
+      </item>
94
+      <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
95
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
96
+          <preferred-size width="200" height="200" />
97
+        </default-constraints>
98
+      </item>
99
+      <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
100
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
101
+      </item>
102
+      <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
103
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
104
+      </item>
105
+      <item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
106
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
107
+      </item>
108
+      <item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
109
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
110
+      </item>
111
+      <item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
112
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
113
+          <preferred-size width="-1" height="20" />
114
+        </default-constraints>
115
+      </item>
116
+      <item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
117
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
118
+      </item>
119
+      <item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
120
+        <default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
121
+      </item>
122
+    </group>
123
+  </component>
124
+</project>

+ 678
- 0
.idea/workspace.xml 查看文件

@@ -0,0 +1,678 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<project version="4">
3
+  <component name="ChangeListManager">
4
+    <list default="true" id="9ba4e23f-0f5b-4161-994f-6f2b16f9e056" name="Default" comment="" />
5
+    <ignored path="$PROJECT_DIR$/out/" />
6
+    <ignored path="$PROJECT_DIR$/target/" />
7
+    <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
8
+    <option name="TRACKING_ENABLED" value="true" />
9
+    <option name="SHOW_DIALOG" value="false" />
10
+    <option name="HIGHLIGHT_CONFLICTS" value="true" />
11
+    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
12
+    <option name="LAST_RESOLUTION" value="IGNORE" />
13
+  </component>
14
+  <component name="FileEditorManager">
15
+    <leaf>
16
+      <file leaf-file-name="pom.xml" pinned="false" current-in-tab="false">
17
+        <entry file="file://$PROJECT_DIR$/pom.xml">
18
+          <provider selected="true" editor-type-id="text-editor">
19
+            <state relative-caret-position="0">
20
+              <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
21
+              <folding />
22
+            </state>
23
+          </provider>
24
+        </entry>
25
+      </file>
26
+      <file leaf-file-name="MainApplication.java" pinned="false" current-in-tab="false">
27
+        <entry file="file://$PROJECT_DIR$/src/main/java/rocks/zipcode/calcskin/MainApplication.java">
28
+          <provider selected="true" editor-type-id="text-editor">
29
+            <state relative-caret-position="136">
30
+              <caret line="8" column="32" lean-forward="false" selection-start-line="8" selection-start-column="32" selection-end-line="8" selection-end-column="32" />
31
+              <folding />
32
+            </state>
33
+          </provider>
34
+        </entry>
35
+      </file>
36
+      <file leaf-file-name="Application.java" pinned="false" current-in-tab="false">
37
+        <entry file="jar:///Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/javafx-src.zip!/javafx/application/Application.java">
38
+          <provider selected="true" editor-type-id="text-editor">
39
+            <state relative-caret-position="314">
40
+              <caret line="222" column="44" lean-forward="false" selection-start-line="222" selection-start-column="30" selection-end-line="222" selection-end-column="44" />
41
+              <folding />
42
+            </state>
43
+          </provider>
44
+        </entry>
45
+      </file>
46
+      <file leaf-file-name="CalcSkin.java" pinned="false" current-in-tab="false">
47
+        <entry file="file://$PROJECT_DIR$/src/main/java/rocks/zipcode/calcskin/CalcSkin.java">
48
+          <provider selected="true" editor-type-id="text-editor">
49
+            <state relative-caret-position="2856">
50
+              <caret line="186" column="47" lean-forward="false" selection-start-line="186" selection-start-column="35" selection-end-line="186" selection-end-column="47" />
51
+              <folding>
52
+                <element signature="imports" expanded="true" />
53
+                <element signature="e#630#631#0" expanded="true" />
54
+                <element signature="e#658#659#0" expanded="true" />
55
+                <element signature="e#1309#1310#0" expanded="true" />
56
+                <element signature="e#1337#1338#0" expanded="true" />
57
+              </folding>
58
+            </state>
59
+          </provider>
60
+        </entry>
61
+      </file>
62
+      <file leaf-file-name="README.md" pinned="false" current-in-tab="true">
63
+        <entry file="file://$PROJECT_DIR$/README.md">
64
+          <provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
65
+            <state split_layout="SPLIT">
66
+              <first_editor relative-caret-position="34">
67
+                <caret line="2" column="48" lean-forward="false" selection-start-line="2" selection-start-column="48" selection-end-line="2" selection-end-column="48" />
68
+                <folding />
69
+              </first_editor>
70
+              <second_editor />
71
+            </state>
72
+          </provider>
73
+        </entry>
74
+      </file>
75
+      <file leaf-file-name="CalcEngine.java" pinned="false" current-in-tab="false">
76
+        <entry file="file://$PROJECT_DIR$/src/main/java/rocks/zipcode/calcskin/CalcEngine.java">
77
+          <provider selected="true" editor-type-id="text-editor">
78
+            <state relative-caret-position="357">
79
+              <caret line="21" column="0" lean-forward="false" selection-start-line="21" selection-start-column="0" selection-end-line="21" selection-end-column="0" />
80
+              <folding>
81
+                <element signature="e#129#130#0" expanded="true" />
82
+                <element signature="e#162#163#0" expanded="true" />
83
+                <element signature="e#213#214#0" expanded="true" />
84
+                <element signature="e#246#247#0" expanded="true" />
85
+                <element signature="e#297#298#0" expanded="true" />
86
+                <element signature="e#330#331#0" expanded="true" />
87
+                <element signature="e#379#380#0" expanded="true" />
88
+              </folding>
89
+            </state>
90
+          </provider>
91
+        </entry>
92
+      </file>
93
+      <file leaf-file-name="DoubleProperty.java" pinned="false" current-in-tab="false">
94
+        <entry file="jar:///Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/javafx-src.zip!/javafx/beans/property/DoubleProperty.java">
95
+          <provider selected="true" editor-type-id="text-editor">
96
+            <state relative-caret-position="493">
97
+              <caret line="66" column="22" lean-forward="false" selection-start-line="66" selection-start-column="22" selection-end-line="66" selection-end-column="22" />
98
+              <folding />
99
+            </state>
100
+          </provider>
101
+        </entry>
102
+      </file>
103
+    </leaf>
104
+  </component>
105
+  <component name="FileTemplateManagerImpl">
106
+    <option name="RECENT_TEMPLATES">
107
+      <list>
108
+        <option value="Class" />
109
+        <option value="Arquillian JUnit Test Class" />
110
+        <option value="JUnit4 Test Class" />
111
+      </list>
112
+    </option>
113
+  </component>
114
+  <component name="FindInProjectRecents">
115
+    <findStrings>
116
+      <find>stackValue</find>
117
+    </findStrings>
118
+  </component>
119
+  <component name="GradleLocalSettings">
120
+    <option name="externalProjectsViewState">
121
+      <projects_view />
122
+    </option>
123
+    <option name="projectSyncType">
124
+      <map>
125
+        <entry key="$USER_HOME$/GitHub/gs-gradle/initial" value="PREVIEW" />
126
+      </map>
127
+    </option>
128
+  </component>
129
+  <component name="IdeDocumentHistory">
130
+    <option name="CHANGED_PATHS">
131
+      <list>
132
+        <option value="$PROJECT_DIR$/src/main/java/MainApplication.java" />
133
+        <option value="$PROJECT_DIR$/src/main/java/CalcSkin.java" />
134
+        <option value="$PROJECT_DIR$/src/main/java/CalcEngine.java" />
135
+        <option value="$PROJECT_DIR$/src/test/java/rocks/zipcode/calcskin/CalcEngineTest.java" />
136
+        <option value="$PROJECT_DIR$/src/main/java/rocks/zipcode/calcskin/MainApplication.java" />
137
+        <option value="$PROJECT_DIR$/src/main/java/rocks/zipcode/calcskin/CalcSkin.java" />
138
+        <option value="$PROJECT_DIR$/src/main/java/rocks/zipcode/calcskin/CalcEngine.java" />
139
+        <option value="$PROJECT_DIR$/README.md" />
140
+      </list>
141
+    </option>
142
+  </component>
143
+  <component name="JsBuildToolGruntFileManager" detection-done="true" sorting="DEFINITION_ORDER" />
144
+  <component name="JsBuildToolPackageJson" detection-done="true" sorting="DEFINITION_ORDER" />
145
+  <component name="JsGulpfileManager">
146
+    <detection-done>true</detection-done>
147
+    <sorting>DEFINITION_ORDER</sorting>
148
+  </component>
149
+  <component name="MavenImportPreferences">
150
+    <option name="importingSettings">
151
+      <MavenImportingSettings>
152
+        <option name="importAutomatically" value="true" />
153
+      </MavenImportingSettings>
154
+    </option>
155
+  </component>
156
+  <component name="ProjectFrameBounds">
157
+    <option name="x" value="484" />
158
+    <option name="y" value="26" />
159
+    <option name="width" value="1674" />
160
+    <option name="height" value="1001" />
161
+  </component>
162
+  <component name="ProjectView">
163
+    <navigator currentView="ProjectPane" proportions="" version="1">
164
+      <flattenPackages />
165
+      <showMembers />
166
+      <showModules />
167
+      <showLibraryContents />
168
+      <hideEmptyPackages />
169
+      <abbreviatePackageNames />
170
+      <autoscrollToSource />
171
+      <autoscrollFromSource />
172
+      <sortByType />
173
+      <manualOrder />
174
+      <foldersAlwaysOnTop value="true" />
175
+    </navigator>
176
+    <panes>
177
+      <pane id="PackagesPane" />
178
+      <pane id="Scratches" />
179
+      <pane id="AndroidView" />
180
+      <pane id="ProjectPane">
181
+        <subPane>
182
+          <expand>
183
+            <path>
184
+              <item name="calcskin" type="b2602c69:ProjectViewProjectNode" />
185
+              <item name="calcskin" type="462c0819:PsiDirectoryNode" />
186
+            </path>
187
+            <path>
188
+              <item name="calcskin" type="b2602c69:ProjectViewProjectNode" />
189
+              <item name="calcskin" type="462c0819:PsiDirectoryNode" />
190
+              <item name="src" type="462c0819:PsiDirectoryNode" />
191
+            </path>
192
+            <path>
193
+              <item name="calcskin" type="b2602c69:ProjectViewProjectNode" />
194
+              <item name="calcskin" type="462c0819:PsiDirectoryNode" />
195
+              <item name="src" type="462c0819:PsiDirectoryNode" />
196
+              <item name="main" type="462c0819:PsiDirectoryNode" />
197
+            </path>
198
+            <path>
199
+              <item name="calcskin" type="b2602c69:ProjectViewProjectNode" />
200
+              <item name="calcskin" type="462c0819:PsiDirectoryNode" />
201
+              <item name="src" type="462c0819:PsiDirectoryNode" />
202
+              <item name="main" type="462c0819:PsiDirectoryNode" />
203
+              <item name="java" type="462c0819:PsiDirectoryNode" />
204
+            </path>
205
+            <path>
206
+              <item name="calcskin" type="b2602c69:ProjectViewProjectNode" />
207
+              <item name="calcskin" type="462c0819:PsiDirectoryNode" />
208
+              <item name="src" type="462c0819:PsiDirectoryNode" />
209
+              <item name="main" type="462c0819:PsiDirectoryNode" />
210
+              <item name="java" type="462c0819:PsiDirectoryNode" />
211
+              <item name="calcskin" type="462c0819:PsiDirectoryNode" />
212
+            </path>
213
+            <path>
214
+              <item name="calcskin" type="b2602c69:ProjectViewProjectNode" />
215
+              <item name="calcskin" type="462c0819:PsiDirectoryNode" />
216
+              <item name="src" type="462c0819:PsiDirectoryNode" />
217
+              <item name="test" type="462c0819:PsiDirectoryNode" />
218
+            </path>
219
+            <path>
220
+              <item name="calcskin" type="b2602c69:ProjectViewProjectNode" />
221
+              <item name="calcskin" type="462c0819:PsiDirectoryNode" />
222
+              <item name="src" type="462c0819:PsiDirectoryNode" />
223
+              <item name="test" type="462c0819:PsiDirectoryNode" />
224
+              <item name="java" type="462c0819:PsiDirectoryNode" />
225
+            </path>
226
+            <path>
227
+              <item name="calcskin" type="b2602c69:ProjectViewProjectNode" />
228
+              <item name="calcskin" type="462c0819:PsiDirectoryNode" />
229
+              <item name="src" type="462c0819:PsiDirectoryNode" />
230
+              <item name="test" type="462c0819:PsiDirectoryNode" />
231
+              <item name="java" type="462c0819:PsiDirectoryNode" />
232
+              <item name="calcskin" type="462c0819:PsiDirectoryNode" />
233
+            </path>
234
+          </expand>
235
+          <select />
236
+        </subPane>
237
+      </pane>
238
+      <pane id="Scope" />
239
+    </panes>
240
+  </component>
241
+  <component name="PropertiesComponent">
242
+    <property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
243
+    <property name="settings.editor.selected.configurable" value="reference.projectsettings.compiler.javacompiler" />
244
+    <property name="WebServerToolWindowFactoryState" value="false" />
245
+    <property name="aspect.path.notification.shown" value="true" />
246
+    <property name="project.structure.last.edited" value="Project" />
247
+    <property name="project.structure.proportion" value="0.15" />
248
+    <property name="project.structure.side.proportion" value="0.2" />
249
+    <property name="com.intellij.testIntegration.createTest.CreateTestDialog.defaultLibrary" value="JUnit4" />
250
+  </component>
251
+  <component name="RecentsManager">
252
+    <key name="CreateTestDialog.RecentsKey">
253
+      <recent name="rocks.zipcode.calcskin" />
254
+    </key>
255
+    <key name="CreateTestDialog.Recents.Supers">
256
+      <recent name="" />
257
+    </key>
258
+  </component>
259
+  <component name="RunDashboard">
260
+    <option name="ruleStates">
261
+      <list>
262
+        <RuleState>
263
+          <option name="name" value="ConfigurationTypeDashboardGroupingRule" />
264
+        </RuleState>
265
+        <RuleState>
266
+          <option name="name" value="StatusDashboardGroupingRule" />
267
+        </RuleState>
268
+      </list>
269
+    </option>
270
+  </component>
271
+  <component name="RunManager" selected="Application.MainApplication">
272
+    <configuration default="true" type="Applet" factoryName="Applet">
273
+      <option name="WIDTH" value="400" />
274
+      <option name="HEIGHT" value="300" />
275
+      <option name="POLICY_FILE" value="$APPLICATION_HOME_DIR$/bin/appletviewer.policy" />
276
+      <module />
277
+    </configuration>
278
+    <configuration name="CalcSkin" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
279
+      <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
280
+      <option name="MAIN_CLASS_NAME" value="rocks.zipcode.calcskin.CalcSkin" />
281
+      <option name="VM_PARAMETERS" />
282
+      <option name="PROGRAM_PARAMETERS" />
283
+      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
284
+      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
285
+      <option name="ALTERNATIVE_JRE_PATH" />
286
+      <option name="ENABLE_SWING_INSPECTOR" value="false" />
287
+      <option name="ENV_VARIABLES" />
288
+      <option name="PASS_PARENT_ENVS" value="true" />
289
+      <module name="calcskin" />
290
+      <envs />
291
+    </configuration>
292
+    <configuration name="MainApplication" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
293
+      <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
294
+      <option name="MAIN_CLASS_NAME" value="rocks.zipcode.calcskin.MainApplication" />
295
+      <option name="VM_PARAMETERS" />
296
+      <option name="PROGRAM_PARAMETERS" />
297
+      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
298
+      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
299
+      <option name="ALTERNATIVE_JRE_PATH" />
300
+      <option name="ENABLE_SWING_INSPECTOR" value="false" />
301
+      <option name="ENV_VARIABLES" />
302
+      <option name="PASS_PARENT_ENVS" value="true" />
303
+      <module name="calcskin" />
304
+      <envs />
305
+    </configuration>
306
+    <configuration default="true" type="Application" factoryName="Application">
307
+      <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
308
+      <option name="MAIN_CLASS_NAME" />
309
+      <option name="VM_PARAMETERS" />
310
+      <option name="PROGRAM_PARAMETERS" />
311
+      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
312
+      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
313
+      <option name="ALTERNATIVE_JRE_PATH" />
314
+      <option name="ENABLE_SWING_INSPECTOR" value="false" />
315
+      <option name="ENV_VARIABLES" />
316
+      <option name="PASS_PARENT_ENVS" value="true" />
317
+      <module name="" />
318
+      <envs />
319
+    </configuration>
320
+    <configuration name="CalcEngineTest" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
321
+      <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea">
322
+        <pattern>
323
+          <option name="PATTERN" value="rocks.zipcode.calcskin.*" />
324
+          <option name="ENABLED" value="true" />
325
+        </pattern>
326
+      </extension>
327
+      <module name="calcskin" />
328
+      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
329
+      <option name="ALTERNATIVE_JRE_PATH" />
330
+      <option name="PACKAGE_NAME" value="rocks.zipcode.calcskin" />
331
+      <option name="MAIN_CLASS_NAME" value="rocks.zipcode.calcskin.CalcEngineTest" />
332
+      <option name="METHOD_NAME" />
333
+      <option name="TEST_OBJECT" value="class" />
334
+      <option name="VM_PARAMETERS" value="-ea" />
335
+      <option name="PARAMETERS" />
336
+      <option name="WORKING_DIRECTORY" value="%MODULE_WORKING_DIR%" />
337
+      <option name="ENV_VARIABLES" />
338
+      <option name="PASS_PARENT_ENVS" value="true" />
339
+      <option name="TEST_SEARCH_SCOPE">
340
+        <value defaultName="singleModule" />
341
+      </option>
342
+      <envs />
343
+      <patterns />
344
+    </configuration>
345
+    <configuration default="true" type="JUnit" factoryName="JUnit">
346
+      <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
347
+      <module name="" />
348
+      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
349
+      <option name="ALTERNATIVE_JRE_PATH" />
350
+      <option name="PACKAGE_NAME" />
351
+      <option name="MAIN_CLASS_NAME" />
352
+      <option name="METHOD_NAME" />
353
+      <option name="TEST_OBJECT" value="class" />
354
+      <option name="VM_PARAMETERS" value="-ea" />
355
+      <option name="PARAMETERS" />
356
+      <option name="WORKING_DIRECTORY" value="%MODULE_WORKING_DIR%" />
357
+      <option name="ENV_VARIABLES" />
358
+      <option name="PASS_PARENT_ENVS" value="true" />
359
+      <option name="TEST_SEARCH_SCOPE">
360
+        <value defaultName="singleModule" />
361
+      </option>
362
+      <envs />
363
+      <patterns />
364
+    </configuration>
365
+    <configuration default="true" type="Remote" factoryName="Remote">
366
+      <option name="USE_SOCKET_TRANSPORT" value="true" />
367
+      <option name="SERVER_MODE" value="false" />
368
+      <option name="SHMEM_ADDRESS" value="javadebug" />
369
+      <option name="HOST" value="localhost" />
370
+      <option name="PORT" value="5005" />
371
+    </configuration>
372
+    <configuration default="true" type="TestNG" factoryName="TestNG">
373
+      <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
374
+      <module name="" />
375
+      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
376
+      <option name="ALTERNATIVE_JRE_PATH" />
377
+      <option name="SUITE_NAME" />
378
+      <option name="PACKAGE_NAME" />
379
+      <option name="MAIN_CLASS_NAME" />
380
+      <option name="METHOD_NAME" />
381
+      <option name="GROUP_NAME" />
382
+      <option name="TEST_OBJECT" value="CLASS" />
383
+      <option name="VM_PARAMETERS" value="-ea" />
384
+      <option name="PARAMETERS" />
385
+      <option name="WORKING_DIRECTORY" value="%MODULE_WORKING_DIR%" />
386
+      <option name="OUTPUT_DIRECTORY" />
387
+      <option name="ANNOTATION_TYPE" />
388
+      <option name="ENV_VARIABLES" />
389
+      <option name="PASS_PARENT_ENVS" value="true" />
390
+      <option name="TEST_SEARCH_SCOPE">
391
+        <value defaultName="singleModule" />
392
+      </option>
393
+      <option name="USE_DEFAULT_REPORTERS" value="false" />
394
+      <option name="PROPERTIES_FILE" />
395
+      <envs />
396
+      <properties />
397
+      <listeners />
398
+    </configuration>
399
+    <configuration default="true" type="#org.jetbrains.idea.devkit.run.PluginConfigurationType" factoryName="Plugin">
400
+      <module name="" />
401
+      <option name="VM_PARAMETERS" value="-Xmx512m -Xms256m -XX:MaxPermSize=250m -ea" />
402
+      <option name="PROGRAM_PARAMETERS" />
403
+      <predefined_log_file id="idea.log" enabled="true" />
404
+    </configuration>
405
+    <list size="3">
406
+      <item index="0" class="java.lang.String" itemvalue="Application.MainApplication" />
407
+      <item index="1" class="java.lang.String" itemvalue="Application.CalcSkin" />
408
+      <item index="2" class="java.lang.String" itemvalue="JUnit.CalcEngineTest" />
409
+    </list>
410
+    <recent_temporary>
411
+      <list size="3">
412
+        <item index="0" class="java.lang.String" itemvalue="Application.MainApplication" />
413
+        <item index="1" class="java.lang.String" itemvalue="JUnit.CalcEngineTest" />
414
+        <item index="2" class="java.lang.String" itemvalue="Application.CalcSkin" />
415
+      </list>
416
+    </recent_temporary>
417
+  </component>
418
+  <component name="ShelveChangesManager" show_recycled="false">
419
+    <option name="remove_strategy" value="false" />
420
+  </component>
421
+  <component name="SvnConfiguration">
422
+    <configuration />
423
+  </component>
424
+  <component name="TaskManager">
425
+    <task active="true" id="Default" summary="Default task">
426
+      <changelist id="9ba4e23f-0f5b-4161-994f-6f2b16f9e056" name="Default" comment="" />
427
+      <created>1540386738802</created>
428
+      <option name="number" value="Default" />
429
+      <option name="presentableId" value="Default" />
430
+      <updated>1540386738802</updated>
431
+      <workItem from="1540386743709" duration="5014000" />
432
+    </task>
433
+    <servers />
434
+  </component>
435
+  <component name="TestHistory">
436
+    <history-entry file="CalcEngineTest - 2018.10.25 at 11h 57m 28s.xml">
437
+      <configuration name="CalcEngineTest" configurationId="JUnit" />
438
+    </history-entry>
439
+    <history-entry file="CalcEngineTest - 2018.10.25 at 11h 58m 26s.xml">
440
+      <configuration name="CalcEngineTest" configurationId="JUnit" />
441
+    </history-entry>
442
+  </component>
443
+  <component name="TimeTrackingManager">
444
+    <option name="totallyTimeSpent" value="5014000" />
445
+  </component>
446
+  <component name="ToolWindowManager">
447
+    <frame x="484" y="26" width="1674" height="1001" extended-state="0" />
448
+    <layout>
449
+      <window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
450
+      <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
451
+      <window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.329602" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
452
+      <window_info id="Palette&#9;" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
453
+      <window_info id="Image Layers" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
454
+      <window_info id="Capture Analysis" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
455
+      <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="true" content_ui="tabs" />
456
+      <window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
457
+      <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
458
+      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.29943502" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
459
+      <window_info id="Terminal" active="true" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.3299435" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
460
+      <window_info id="Capture Tool" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
461
+      <window_info id="Designer" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
462
+      <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.21393341" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
463
+      <window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
464
+      <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
465
+      <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
466
+      <window_info id="UI Designer" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
467
+      <window_info id="Theme Preview" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
468
+      <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="true" content_ui="tabs" />
469
+      <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
470
+      <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
471
+      <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
472
+      <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
473
+      <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
474
+      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
475
+      <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
476
+    </layout>
477
+  </component>
478
+  <component name="TypeScriptGeneratedFilesManager">
479
+    <option name="version" value="1" />
480
+  </component>
481
+  <component name="VcsContentAnnotationSettings">
482
+    <option name="myLimit" value="2678400000" />
483
+  </component>
484
+  <component name="XDebuggerManager">
485
+    <breakpoint-manager />
486
+    <watches-manager />
487
+  </component>
488
+  <component name="editorHistoryManager">
489
+    <entry file="file://$PROJECT_DIR$/pom.xml">
490
+      <provider selected="true" editor-type-id="text-editor">
491
+        <state relative-caret-position="0">
492
+          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
493
+          <folding />
494
+        </state>
495
+      </provider>
496
+    </entry>
497
+    <entry file="jar:///Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/javafx-src.zip!/javafx/beans/property/SimpleDoubleProperty.java">
498
+      <provider selected="true" editor-type-id="text-editor">
499
+        <state relative-caret-position="185">
500
+          <caret line="62" column="11" lean-forward="false" selection-start-line="62" selection-start-column="11" selection-end-line="62" selection-end-column="11" />
501
+          <folding>
502
+            <element signature="e#963#964#0" expanded="false" />
503
+            <element signature="e#1011#1012#0" expanded="false" />
504
+          </folding>
505
+        </state>
506
+      </provider>
507
+    </entry>
508
+    <entry file="file://$PROJECT_DIR$/src/test/java/rocks/zipcode/calcskin/CalcEngineTest.java">
509
+      <provider selected="true" editor-type-id="text-editor">
510
+        <state relative-caret-position="561">
511
+          <caret line="38" column="47" lean-forward="false" selection-start-line="38" selection-start-column="47" selection-end-line="38" selection-end-column="47" />
512
+          <folding>
513
+            <element signature="e#422#423#0" expanded="false" />
514
+            <element signature="e#492#493#0" expanded="false" />
515
+            <element signature="e#532#533#0" expanded="false" />
516
+            <element signature="e#609#610#0" expanded="false" />
517
+            <element signature="e#649#650#0" expanded="false" />
518
+            <element signature="e#725#726#0" expanded="false" />
519
+            <element signature="e#763#764#0" expanded="false" />
520
+            <element signature="e#837#838#0" expanded="false" />
521
+          </folding>
522
+        </state>
523
+      </provider>
524
+    </entry>
525
+    <entry file="jar:///Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/javafx-src.zip!/javafx/beans/property/DoubleProperty.java">
526
+      <provider selected="true" editor-type-id="text-editor">
527
+        <state relative-caret-position="493">
528
+          <caret line="66" column="22" lean-forward="false" selection-start-line="66" selection-start-column="22" selection-end-line="66" selection-end-column="22" />
529
+          <folding />
530
+        </state>
531
+      </provider>
532
+    </entry>
533
+    <entry file="jar:///Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/javafx-src.zip!/javafx/application/Application.java">
534
+      <provider selected="true" editor-type-id="text-editor">
535
+        <state relative-caret-position="314">
536
+          <caret line="222" column="44" lean-forward="false" selection-start-line="222" selection-start-column="30" selection-end-line="222" selection-end-column="44" />
537
+          <folding />
538
+        </state>
539
+      </provider>
540
+    </entry>
541
+    <entry file="file://$PROJECT_DIR$/src/main/java/rocks/zipcode/calcskin/CalcEngine.java">
542
+      <provider selected="true" editor-type-id="text-editor">
543
+        <state relative-caret-position="357">
544
+          <caret line="21" column="0" lean-forward="false" selection-start-line="21" selection-start-column="0" selection-end-line="21" selection-end-column="0" />
545
+          <folding>
546
+            <element signature="e#129#130#0" expanded="true" />
547
+            <element signature="e#162#163#0" expanded="true" />
548
+            <element signature="e#213#214#0" expanded="true" />
549
+            <element signature="e#246#247#0" expanded="true" />
550
+            <element signature="e#297#298#0" expanded="true" />
551
+            <element signature="e#330#331#0" expanded="true" />
552
+            <element signature="e#379#380#0" expanded="true" />
553
+          </folding>
554
+        </state>
555
+      </provider>
556
+    </entry>
557
+    <entry file="file://$PROJECT_DIR$/src/main/java/rocks/zipcode/calcskin/MainApplication.java">
558
+      <provider selected="true" editor-type-id="text-editor">
559
+        <state relative-caret-position="136">
560
+          <caret line="8" column="32" lean-forward="false" selection-start-line="8" selection-start-column="32" selection-end-line="8" selection-end-column="32" />
561
+          <folding />
562
+        </state>
563
+      </provider>
564
+    </entry>
565
+    <entry file="file://$PROJECT_DIR$/src/main/java/rocks/zipcode/calcskin/CalcSkin.java">
566
+      <provider selected="true" editor-type-id="text-editor">
567
+        <state relative-caret-position="2856">
568
+          <caret line="186" column="47" lean-forward="false" selection-start-line="186" selection-start-column="35" selection-end-line="186" selection-end-column="47" />
569
+          <folding>
570
+            <element signature="imports" expanded="true" />
571
+            <element signature="e#630#631#0" expanded="true" />
572
+            <element signature="e#658#659#0" expanded="true" />
573
+            <element signature="e#1309#1310#0" expanded="true" />
574
+            <element signature="e#1337#1338#0" expanded="true" />
575
+          </folding>
576
+        </state>
577
+      </provider>
578
+    </entry>
579
+    <entry file="file://$PROJECT_DIR$/README.md">
580
+      <provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
581
+        <state split_layout="SPLIT">
582
+          <first_editor relative-caret-position="34">
583
+            <caret line="2" column="48" lean-forward="false" selection-start-line="2" selection-start-column="48" selection-end-line="2" selection-end-column="48" />
584
+            <folding />
585
+          </first_editor>
586
+          <second_editor />
587
+        </state>
588
+      </provider>
589
+    </entry>
590
+  </component>
591
+  <component name="masterDetails">
592
+    <states>
593
+      <state key="ArtifactsStructureConfigurable.UI">
594
+        <settings>
595
+          <artifact-editor />
596
+          <splitter-proportions>
597
+            <option name="proportions">
598
+              <list>
599
+                <option value="0.2" />
600
+              </list>
601
+            </option>
602
+          </splitter-proportions>
603
+        </settings>
604
+      </state>
605
+      <state key="FacetStructureConfigurable.UI">
606
+        <settings>
607
+          <last-edited>No facets are configured</last-edited>
608
+          <splitter-proportions>
609
+            <option name="proportions">
610
+              <list>
611
+                <option value="0.2" />
612
+              </list>
613
+            </option>
614
+          </splitter-proportions>
615
+        </settings>
616
+      </state>
617
+      <state key="GlobalLibrariesConfigurable.UI">
618
+        <settings>
619
+          <splitter-proportions>
620
+            <option name="proportions">
621
+              <list>
622
+                <option value="0.2" />
623
+              </list>
624
+            </option>
625
+          </splitter-proportions>
626
+        </settings>
627
+      </state>
628
+      <state key="JdkListConfigurable.UI">
629
+        <settings>
630
+          <last-edited>1.8</last-edited>
631
+          <splitter-proportions>
632
+            <option name="proportions">
633
+              <list>
634
+                <option value="0.2" />
635
+              </list>
636
+            </option>
637
+          </splitter-proportions>
638
+        </settings>
639
+      </state>
640
+      <state key="ModuleStructureConfigurable.UI">
641
+        <settings>
642
+          <last-edited>calcskin</last-edited>
643
+          <splitter-proportions>
644
+            <option name="proportions">
645
+              <list>
646
+                <option value="0.2" />
647
+                <option value="0.6" />
648
+              </list>
649
+            </option>
650
+          </splitter-proportions>
651
+        </settings>
652
+      </state>
653
+      <state key="ProjectJDKs.UI">
654
+        <settings>
655
+          <last-edited>1.8</last-edited>
656
+          <splitter-proportions>
657
+            <option name="proportions">
658
+              <list>
659
+                <option value="0.2" />
660
+              </list>
661
+            </option>
662
+          </splitter-proportions>
663
+        </settings>
664
+      </state>
665
+      <state key="ProjectLibrariesConfigurable.UI">
666
+        <settings>
667
+          <splitter-proportions>
668
+            <option name="proportions">
669
+              <list>
670
+                <option value="0.2" />
671
+              </list>
672
+            </option>
673
+          </splitter-proportions>
674
+        </settings>
675
+      </state>
676
+    </states>
677
+  </component>
678
+</project>

+ 29
- 0
README.md 查看文件

@@ -0,0 +1,29 @@
1
+# CalcSkin: Add a Calculator UI!
2
+
3
+Add a calculator "skin" UI to your calc project.
4
+
5
+_ScientificCalculator_ can move to Release 2.0!!
6
+
7
+Using the classes you had for the scientific calculator, 
8
+add this JavaFX UI to the front of it.
9
+
10
+Run this project to see what you're going to be working with.
11
+
12
+The best way to integrate this skin class might just be adding the __CalcSkin__ 
13
+class to your project, and moving Console 
14
+out of the way and wiring it up.
15
+CalcEngine is a "fails all tests" class, and you should use the one from your project anyway.
16
+See the MainApplication class to see how to call it from your __main__ method.
17
+
18
+Making a simple 4-function calculator should be trivial for you at this stage.
19
+
20
+*BUT*, how about adding a column of buttons for x-squared, square-root, inverse (1/x), and
21
+exponent (x^y).
22
+
23
+Then you might add a column of buttons that do the Memory functions.
24
+(What should you add to the UI to make this easier??)
25
+
26
+Finally, work on adding the trig and log functions from the original lab.
27
+
28
+Feel free to work in your original groups, get everyone up to speed on this!
29
+

+ 16
- 0
calcskin.iml 查看文件

@@ -0,0 +1,16 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
3
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7">
4
+    <output url="file://$MODULE_DIR$/target/classes" />
5
+    <output-test url="file://$MODULE_DIR$/target/test-classes" />
6
+    <content url="file://$MODULE_DIR$">
7
+      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
8
+      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
9
+      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
10
+      <excludeFolder url="file://$MODULE_DIR$/target" />
11
+    </content>
12
+    <orderEntry type="inheritedJdk" />
13
+    <orderEntry type="sourceFolder" forTests="false" />
14
+    <orderEntry type="library" name="Maven: junit:junit:4.0" level="project" />
15
+  </component>
16
+</module>

+ 31
- 0
pom.xml 查看文件

@@ -0,0 +1,31 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<project xmlns="http://maven.apache.org/POM/4.0.0"
3
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5
+    <modelVersion>4.0.0</modelVersion>
6
+
7
+    <groupId>rocks.zipcode.calcskin</groupId>
8
+    <artifactId>calcskin</artifactId>
9
+    <version>1.0-SNAPSHOT</version>
10
+    <build>
11
+        <plugins>
12
+            <plugin>
13
+                <groupId>org.apache.maven.plugins</groupId>
14
+                <artifactId>maven-compiler-plugin</artifactId>
15
+                <configuration>
16
+                    <source>1.7</source>
17
+                    <target>1.7</target>
18
+                </configuration>
19
+            </plugin>
20
+        </plugins>
21
+    </build>
22
+    <dependencies>
23
+        <dependency>
24
+            <groupId>junit</groupId>
25
+            <artifactId>junit</artifactId>
26
+            <version>4.0</version>
27
+        </dependency>
28
+    </dependencies>
29
+
30
+
31
+</project>

+ 23
- 0
src/main/java/rocks/zipcode/calcskin/CalcEngine.java 查看文件

@@ -0,0 +1,23 @@
1
+package rocks.zipcode.calcskin;
2
+
3
+public class CalcEngine {
4
+
5
+    CalcEngine() {
6
+    }
7
+
8
+    public double add(double v, double v1) {
9
+        return Double.NaN;
10
+    }
11
+
12
+    public double subtract(double v, double v1) {
13
+        return Double.NaN;
14
+    }
15
+
16
+    public double multiply(double v, double v1) {
17
+        return Double.NaN;
18
+    }
19
+
20
+    public double divide(double v, double v1) {
21
+        return Double.NaN;
22
+    }
23
+}

+ 194
- 0
src/main/java/rocks/zipcode/calcskin/CalcSkin.java 查看文件

@@ -0,0 +1,194 @@
1
+package rocks.zipcode.calcskin;
2
+
3
+import javafx.application.Application;
4
+import javafx.beans.binding.Bindings;
5
+import javafx.beans.property.*;
6
+import javafx.event.ActionEvent;
7
+import javafx.event.EventHandler;
8
+import javafx.geometry.Pos;
9
+import javafx.scene.Scene;
10
+import javafx.scene.control.*;
11
+import javafx.scene.input.KeyEvent;
12
+import javafx.scene.layout.*;
13
+import javafx.stage.Stage;
14
+import javafx.stage.StageStyle;
15
+import rocks.zipcode.calcskin.CalcEngine;
16
+
17
+import java.util.HashMap;
18
+import java.util.Map;
19
+
20
+// a simple JavaFX calculator.
21
+public class CalcSkin extends Application {
22
+
23
+    public static void main(String[] args){
24
+        launch(args);
25
+    }
26
+    private static final String[][] template = {
27
+            { "7", "8", "9", "/" },
28
+            { "4", "5", "6", "*" },
29
+            { "1", "2", "3", "-" },
30
+            { "0", "c", "=", "+" }
31
+    };
32
+
33
+    private final Map<String, Button> accelerators = new HashMap<>();
34
+
35
+    private DoubleProperty previousValue = new SimpleDoubleProperty();
36
+    private DoubleProperty currentValue = new SimpleDoubleProperty();
37
+    private CalcEngine calcEngine = new CalcEngine();
38
+
39
+    private enum Op { NOOP, ADD, SUBTRACT, MULTIPLY, DIVIDE }
40
+
41
+    private Op curOp   = Op.NOOP;
42
+    private Op stackOp = Op.NOOP;
43
+
44
+    public static void launchCalc(String... args) {
45
+        launch(args);
46
+    }
47
+
48
+    @Override
49
+    public void start(Stage stage) {
50
+        final TextField screen  = createScreen();
51
+        final TilePane  buttons = createButtons();
52
+
53
+        stage.setTitle("Calc");
54
+        stage.initStyle(StageStyle.UTILITY);
55
+        stage.setResizable(false);
56
+        stage.setScene(new Scene(createLayout(screen, buttons)));
57
+        stage.show();
58
+    }
59
+
60
+    private VBox createLayout(TextField screen, TilePane buttons) {
61
+        final VBox layout = new VBox(20);
62
+        layout.setAlignment(Pos.CENTER);
63
+        layout.setStyle("-fx-background-color: silver; -fx-padding: 20; -fx-font-size: 20;");
64
+        layout.getChildren().setAll(screen, buttons);
65
+        handleAccelerators(layout);
66
+        screen.prefWidthProperty().bind(buttons.widthProperty());
67
+        return layout;
68
+    }
69
+
70
+    private void handleAccelerators(VBox layout) {
71
+        layout.addEventFilter(KeyEvent.KEY_PRESSED, new EventHandler<KeyEvent>() {
72
+            @Override
73
+            public void handle(KeyEvent keyEvent) {
74
+                Button activated = accelerators.get(keyEvent.getText());
75
+                if (activated != null) {
76
+                    activated.fire();
77
+                }
78
+            }
79
+        });
80
+    }
81
+
82
+    private TextField createScreen() {
83
+        final TextField screen = new TextField();
84
+        screen.setStyle("-fx-background-color: aquamarine;");
85
+        screen.setAlignment(Pos.CENTER_RIGHT);
86
+        screen.setEditable(false);
87
+        screen.textProperty().bind(Bindings.format("%.0f", currentValue));
88
+        return screen;
89
+    }
90
+
91
+    private TilePane createButtons() {
92
+        TilePane buttons = new TilePane();
93
+        buttons.setVgap(7);
94
+        buttons.setHgap(7);
95
+        buttons.setPrefColumns(template[0].length);
96
+        for (String[] r: template) {
97
+            for (String s: r) {
98
+                buttons.getChildren().add(createButton(s));
99
+            }
100
+        }
101
+        return buttons;
102
+    }
103
+
104
+    private Button createButton(final String s) {
105
+        Button button = makeStandardButton(s);
106
+
107
+        if (s.matches("[0-9]")) {
108
+            makeNumericButton(s, button);
109
+        } else {
110
+            final ObjectProperty<Op> triggerOp = determineOperand(s);
111
+            if (triggerOp.get() != Op.NOOP) {
112
+                makeOperandButton(button, triggerOp);
113
+            } else if ("c".equals(s)) {
114
+                makeClearButton(button);
115
+            } else if ("=".equals(s)) {
116
+                makeEqualsButton(button);
117
+            }
118
+        }
119
+
120
+        return button;
121
+    }
122
+
123
+    private ObjectProperty<Op> determineOperand(String s) {
124
+        final ObjectProperty<Op> triggerOp = new SimpleObjectProperty<>(Op.NOOP);
125
+        switch (s) {
126
+            case "+": triggerOp.set(Op.ADD);      break;
127
+            case "-": triggerOp.set(Op.SUBTRACT); break;
128
+            case "*": triggerOp.set(Op.MULTIPLY); break;
129
+            case "/": triggerOp.set(Op.DIVIDE);   break;
130
+        }
131
+        return triggerOp;
132
+    }
133
+
134
+    private void makeOperandButton(Button button, final ObjectProperty<Op> triggerOp) {
135
+        button.setStyle("-fx-base: lightgray;");
136
+        button.setOnAction(new EventHandler<ActionEvent>() {
137
+            @Override
138
+            public void handle(ActionEvent actionEvent) {
139
+                curOp = triggerOp.get();
140
+            }
141
+        });
142
+    }
143
+
144
+    private Button makeStandardButton(String s) {
145
+        Button button = new Button(s);
146
+        button.setStyle("-fx-base: beige;");
147
+        accelerators.put(s, button);
148
+        button.setMaxSize(Double.MAX_VALUE, Double.MAX_VALUE);
149
+        return button;
150
+    }
151
+
152
+    private void makeNumericButton(final String s, Button button) {
153
+        button.setOnAction(new EventHandler<ActionEvent>() {
154
+            @Override
155
+            public void handle(ActionEvent actionEvent) {
156
+                if (curOp == Op.NOOP) {
157
+                    currentValue.set(currentValue.get() * 10 + Integer.parseInt(s));
158
+                } else {
159
+                    previousValue.set(currentValue.get());
160
+                    currentValue.set(Integer.parseInt(s));
161
+                    stackOp = curOp;
162
+                    curOp = Op.NOOP;
163
+                }
164
+            }
165
+        });
166
+    }
167
+
168
+    private void makeClearButton(Button button) {
169
+        button.setStyle("-fx-base: mistyrose;");
170
+        button.setOnAction(new EventHandler<ActionEvent>() {
171
+            @Override
172
+            public void handle(ActionEvent actionEvent) {
173
+                currentValue.set(0);
174
+            }
175
+        });
176
+    }
177
+
178
+    private void makeEqualsButton(Button button) {
179
+        button.setStyle("-fx-base: ghostwhite;");
180
+        button.setOnAction(new EventHandler<ActionEvent>() {
181
+            @Override
182
+            public void handle(ActionEvent actionEvent) {
183
+                switch (stackOp) {
184
+                    case ADD:      currentValue.set(calcEngine.add(previousValue.get(), currentValue.get())); break;
185
+                    case SUBTRACT: currentValue.set(calcEngine.subtract(previousValue.get(), currentValue.get())); break;
186
+                    case MULTIPLY: currentValue.set(calcEngine.multiply(previousValue.get(), currentValue.get())); break;
187
+                    case DIVIDE:   currentValue.set(calcEngine.divide(previousValue.get(), currentValue.get())); break;
188
+                }
189
+            }
190
+        });
191
+    }
192
+}
193
+
194
+

+ 12
- 0
src/main/java/rocks/zipcode/calcskin/MainApplication.java 查看文件

@@ -0,0 +1,12 @@
1
+package rocks.zipcode.calcskin;
2
+
3
+import rocks.zipcode.calcskin.CalcSkin;
4
+
5
+// You probably should make NO changes here. Keep it simple.
6
+public class MainApplication {
7
+    public static void main(String[] args){
8
+
9
+        CalcSkin.launchCalc(args);
10
+    }
11
+
12
+}

+ 41
- 0
src/test/java/rocks/zipcode/calcskin/CalcEngineTest.java 查看文件

@@ -0,0 +1,41 @@
1
+package rocks.zipcode.calcskin;
2
+
3
+import org.junit.After;
4
+import org.junit.Assert;
5
+import org.junit.Before;
6
+import org.junit.Test;
7
+
8
+import static org.junit.Assert.*;
9
+
10
+public class CalcEngineTest {
11
+    CalcEngine testCalc;
12
+
13
+    @Before
14
+    public void setUp() throws Exception {
15
+        this.testCalc = new CalcEngine();
16
+    }
17
+
18
+    @After
19
+    public void tearDown() throws Exception {
20
+    }
21
+
22
+    @Test
23
+    public void add() {
24
+        Assert.assertTrue("", (testCalc.add(1.0, 1.0) == 2.0));
25
+    }
26
+
27
+    @Test
28
+    public void subtract() {
29
+        Assert.assertTrue("", (testCalc.subtract(17.0, 13.0) == 4.0));
30
+    }
31
+
32
+    @Test
33
+    public void multiply() {
34
+        Assert.assertTrue("", (testCalc.multiply(8.0, 3.0) == 24.0));
35
+    }
36
+
37
+    @Test
38
+    public void divide() {
39
+        Assert.assertTrue("", (testCalc.divide(10.0, 2.0) == 5.0));
40
+    }
41
+}

二进制
target/classes/rocks/zipcode/calcskin/CalcEngine.class 查看文件


二进制
target/classes/rocks/zipcode/calcskin/CalcSkin$1.class 查看文件


二进制
target/classes/rocks/zipcode/calcskin/CalcSkin$2.class 查看文件


二进制
target/classes/rocks/zipcode/calcskin/CalcSkin$3.class 查看文件


二进制
target/classes/rocks/zipcode/calcskin/CalcSkin$4.class 查看文件


二进制
target/classes/rocks/zipcode/calcskin/CalcSkin$5.class 查看文件


二进制
target/classes/rocks/zipcode/calcskin/CalcSkin$6.class 查看文件


二进制
target/classes/rocks/zipcode/calcskin/CalcSkin$Op.class 查看文件


二进制
target/classes/rocks/zipcode/calcskin/CalcSkin.class 查看文件


二进制
target/classes/rocks/zipcode/calcskin/MainApplication.class 查看文件


二进制
target/test-classes/rocks/zipcode/calcskin/CalcEngineTest.class 查看文件