@@ -5,12 +5,13 @@ import {
55 Setting ,
66 ValueComponent ,
77} from "obsidian" ;
8- import ObsidianFunctionPlot from "../main" ;
9- import { DEFAULT_PLOT_PLUGIN_SETTINGS } from "../types" ;
8+ import ObsidianFunctionPlot from "../main.js" ;
9+ import { DEFAULT_PLUGIN_SETTINGS , rendererOptions } from "../common/defaults" ;
10+ import { PluginSettings , rendererType } from "../common/types" ;
1011
1112export default class SettingsTab extends PluginSettingTab {
1213 plugin : ObsidianFunctionPlot ;
13- settingsInputs : Map < string , ValueComponent < string | number > > ;
14+ settingsInputs : Map < keyof PluginSettings , ValueComponent < unknown > > ;
1415
1516 constructor ( app : App , plugin : ObsidianFunctionPlot ) {
1617 super ( app , plugin ) ;
@@ -23,6 +24,31 @@ export default class SettingsTab extends PluginSettingTab {
2324 containerEl . empty ( ) ;
2425
2526 containerEl . createEl ( "h1" , { text : "Settings" } ) ;
27+
28+ /*
29+ * Default Plot Options
30+ */
31+
32+ containerEl . createEl ( "h3" , { text : "Default Plot Options" } ) ;
33+
34+ new Setting ( containerEl )
35+ . setName ( "Default Render Type" )
36+ . setDesc ( "The default renderer to use." )
37+ . addDropdown ( ( com ) => {
38+ this . settingsInputs . set ( "defaultRenderer" , com ) ;
39+ com
40+ . addOptions ( rendererOptions )
41+ . setValue ( this . plugin . settings . defaultRenderer )
42+ . onChange ( async ( value : rendererType ) => {
43+ this . plugin . settings . defaultRenderer = value ;
44+ await this . plugin . saveSettings ( ) ;
45+ } ) ;
46+ } ) ;
47+
48+ /*
49+ * Font Sizes
50+ */
51+
2652 containerEl . createEl ( "h3" , { text : "Font Sizes" } ) ;
2753
2854 new Setting ( containerEl )
@@ -70,6 +96,10 @@ export default class SettingsTab extends PluginSettingTab {
7096 . setDynamicTooltip ( ) ;
7197 } ) ;
7298
99+ /*
100+ * Line Widths
101+ */
102+
73103 containerEl . createEl ( "h3" , { text : "Line Widths" } ) ;
74104
75105 new Setting ( containerEl )
@@ -102,6 +132,10 @@ export default class SettingsTab extends PluginSettingTab {
102132 . setDynamicTooltip ( ) ;
103133 } ) ;
104134
135+ /*
136+ * Colors
137+ */
138+
105139 containerEl . createEl ( "h3" , {
106140 attr : { style : "margin-bottom: 0" } ,
107141 text : "Colors" ,
@@ -115,7 +149,7 @@ export default class SettingsTab extends PluginSettingTab {
115149
116150 new Setting ( containerEl )
117151 . setName ( "Font Color" )
118- . setDesc ( "Color used for the title and labels. " )
152+ . setDesc ( "Color used for the title and labels." )
119153 . addText ( ( text ) => {
120154 this . settingsInputs . set ( "fontColor" , text ) ;
121155 text
@@ -128,7 +162,7 @@ export default class SettingsTab extends PluginSettingTab {
128162
129163 new Setting ( containerEl )
130164 . setName ( "Line Color" )
131- . setDesc ( "Color used for the domain- and origin-lines. " )
165+ . setDesc ( "Color used for the domain- and origin-lines." )
132166 . addText ( ( text ) => {
133167 this . settingsInputs . set ( "lineColor" , text ) ;
134168 text
@@ -141,7 +175,7 @@ export default class SettingsTab extends PluginSettingTab {
141175
142176 new Setting ( containerEl )
143177 . setName ( "Grid Color" )
144- . setDesc ( "Color used for the gridlines. " )
178+ . setDesc ( "Color used for the gridlines." )
145179 . addText ( ( text ) => {
146180 this . settingsInputs . set ( "gridColor" , text ) ;
147181 text
@@ -152,27 +186,23 @@ export default class SettingsTab extends PluginSettingTab {
152186 } ) ;
153187 } ) ;
154188
155- new Setting ( containerEl )
156- . addButton ( ( btn ) => {
157- btn
158- . setButtonText ( "Reset Settings to Default" )
159- . setWarning ( )
160- . onClick ( ( _ ) => {
161- Object . assign ( this . plugin . settings , DEFAULT_PLOT_PLUGIN_SETTINGS ) ;
162- this . settingsInputs . forEach ( ( input , key ) => {
163- input . setValue ( this . plugin . settings [ key ] ) ;
164- } ) ;
165- this . plugin . saveSettings ( ) ;
166- new Notice ( "Obsidian Functionplot: Settings reset to default." ) ;
167- } ) ;
168- } )
169- . addButton ( ( btn ) => {
170- btn
171- . setButtonText ( "Save" )
172- . setCta ( )
173- . onClick ( ( _ ) => {
174- new Notice ( "Obsidian Functionplot: Settings saved." ) ;
175- } ) ;
176- } ) ;
189+ /*
190+ * Reset Settings
191+ */
192+
193+ new Setting ( containerEl ) . addButton ( ( btn ) => {
194+ btn
195+ . setButtonText ( "Reset Settings to Default" )
196+ . setWarning ( )
197+ . onClick ( ( ) => {
198+ Object . assign ( this . plugin . settings , DEFAULT_PLUGIN_SETTINGS ) ;
199+ for ( const [ key , input ] of this . settingsInputs ) {
200+ if ( key === "telemetry" ) continue ; // don't reset telemetry
201+ input . setValue ( this . plugin . settings [ key ] ) ;
202+ }
203+ this . plugin . saveSettings ( ) ;
204+ new Notice ( "Settings reset to default" ) ;
205+ } ) ;
206+ } ) ;
177207 }
178208}
0 commit comments