Got configurables done through DrawConfigurables. This might be hackish?
Got configurables done through DrawConfigurables. This might be hackish?

--- /dev/null
+++ b/AVOID_Configurable.cs
@@ -1,1 +1,29 @@
+//
+//  AVOID_Configurable.cs
+//
+//  Author:
+//       toadicus <>
+//
+//  Copyright (c) 2013 toadicus
+//
+//  This program is free software: you can redistribute it and/or modify
+//  it under the terms of the GNU General Public License as published by
+//  the Free Software Foundation, either version 3 of the License, or
+//  (at your option) any later version.
+//
+//  This program is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//  GNU General Public License for more details.
+//
+//  You should have received a copy of the GNU General Public License
+//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+using System;
 
+namespace VOID
+{
+	[AttributeUsage(AttributeTargets.Method)]
+	public class AVOID_Configurable : Attribute { }
+}
+
+

--- a/IVOID_Module.cs
+++ b/IVOID_Module.cs
@@ -24,7 +24,7 @@
 {
 	public interface IVOID_Module
 	{
-		bool hasGUIConfig { get; }
+		bool hasConfigurables { get; }
 		bool toggleActive { get; }
 		bool guiRunning { get; }
 
@@ -32,6 +32,8 @@
 		void StartGUI();
 		void StopGUI();
 
+		void DrawConfigurables();
+
 		void LoadConfig();
 
 		void SaveConfig();

--- a/VOID_Core.cs
+++ b/VOID_Core.cs
@@ -21,6 +21,7 @@
 using System;
 using System.Collections.Generic;
 using System.Linq;
+using System.Reflection;
 using KSP;
 using UnityEngine;
 
@@ -66,6 +67,8 @@
 		protected List<VOID_Module> _modules = new List<VOID_Module>();
 		protected bool _modulesLoaded = false;
 
+		protected List<Callback> _configurableCallbacks = new List<Callback>();
+
 		[AVOID_ConfigValue("mainWindowPos")]
 		protected VOID_ConfigValue<Rect> mainWindowPos = new Rect(Screen.width / 2, Screen.height / 2, 10f, 10f);
 
@@ -196,7 +199,8 @@
 				));
 				return;
 			}
-			this._modules.Add (Activator.CreateInstance (T) as VOID_Module);
+			VOID_Module module = Activator.CreateInstance (T) as VOID_Module;
+			this._modules.Add (module);
 		}
 
 		public void Update()
@@ -287,10 +291,20 @@
 		{
 			GUILayout.BeginVertical ();
 
-			this.consumeResource = GUILayout.Toggle (this.consumeResource, "Consume Resources");
+			this.DrawConfigurables ();
 
 			GUILayout.EndVertical ();
 			GUI.DragWindow ();
+		}
+
+		public override void DrawConfigurables()
+		{
+			this.consumeResource = GUILayout.Toggle (this.consumeResource, "Consume Resources");
+
+			foreach (VOID_Module mod in this.Modules)
+			{
+				mod.DrawConfigurables ();
+			}
 		}
 
 		public override void DrawGUI()
@@ -324,7 +338,7 @@
 					GUILayout.Height (50)
 				);
 
-				if (_mainWindowPos != this.mainWindowPos.value)
+				if (_mainWindowPos != this.mainWindowPos)
 				{
 					this.mainWindowPos = _mainWindowPos;
 				}
@@ -334,7 +348,7 @@
 			{
 				Rect _configWindowPos = this.configWindowPos;
 
-				this.configWindowPos = GUILayout.Window (
+				_configWindowPos = GUILayout.Window (
 					++windowID,
 					_configWindowPos,
 					this.VOIDConfigWindow,
@@ -343,9 +357,9 @@
 					GUILayout.Height (50)
 				);
 
-				if (_configWindowPos != this.configWindowPos.value)
-				{
-					this.mainWindowPos = _configWindowPos;
+				if (_configWindowPos != this.configWindowPos)
+				{
+					this.configWindowPos = _configWindowPos;
 				}
 			}
 		}

--- a/VOID_HUD.cs
+++ b/VOID_HUD.cs
@@ -32,12 +32,14 @@
 		/*
 		 * Fields
 		 * */
+		protected bool _hasConfigurables = true;
+
+		[AVOID_ConfigValue("colorIndex")]
+		protected VOID_ConfigValue<int> _colorIndex = 0;
+
 		protected List<Color> textColors = new List<Color>();
 
 		protected GUIStyle labelStyle;
-
-		[AVOID_ConfigValue("colorIndex")]
-		protected VOID_ConfigValue<int> _colorIndex = 0;
 
 		protected Vessel vessel = null;
 
@@ -135,6 +137,14 @@
 				GUI.Label (new Rect ((Screen.width * .625f), 0, 300f, 70f), "-- POWER LOST --", labelStyle);
 			}
 		}
+
+		public override void DrawConfigurables()
+		{
+			if (GUILayout.Button ("Change HUD color", GUILayout.ExpandWidth (false)))
+			{
+				++this.ColorIndex;
+			}
+		}
 	}
 }
 

--- a/VOID_Module.cs
+++ b/VOID_Module.cs
@@ -25,7 +25,7 @@
 
 namespace VOID
 {
-	public abstract class VOID_Module
+	public abstract class VOID_Module : IVOID_Module
 	{
 		/*
 		 * Fields
@@ -33,18 +33,18 @@
 		[AVOID_ConfigValue("Active")]
 		protected VOID_ConfigValue<bool> _Active = true;
 		protected bool _Running = false;
-		protected bool _hasGUICfg = false;
+		protected bool _hasConfigurables = false;
 
 		protected string _Name;
 
 		/*
 		 * Properties
 		 * */
-		public virtual bool hasGUIConfig
+		public virtual bool hasConfigurables
 		{
 			get
 			{
-				return this._hasGUICfg;
+				return this._hasConfigurables;
 			}
 		}
 
@@ -99,6 +99,8 @@
 		}
 
 		public abstract void DrawGUI();
+
+		public virtual void DrawConfigurables() {}
 
 		public virtual void LoadConfig()
 		{