OSDN Git Service

Value,Hex入力時のバイナリ表現更新に対応
authorkimikage <kimikage_ceo@hotmail.com>
Mon, 3 Jan 2011 17:52:43 +0000 (02:52 +0900)
committerkimikage <kimikage_ceo@hotmail.com>
Mon, 3 Jan 2011 17:52:43 +0000 (02:52 +0900)
Fugashi/BitSwitch.cs
Fugashi/MainForm.Designer.cs
Fugashi/MainForm.cs

index 62a1ff3..344abfb 100755 (executable)
@@ -58,6 +58,7 @@ namespace Fugashi
 \r
         private void label_Click(object sender, EventArgs e)\r
         {\r
+            Focus();\r
             State = !state;\r
         }\r
 \r
index ddf30a4..0a5469b 100755 (executable)
@@ -207,6 +207,7 @@ namespace Fugashi
             this.textValue.Size = new System.Drawing.Size(255, 23);\r
             this.textValue.TabIndex = 87;\r
             this.textValue.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;\r
+            this.textValue.TextChanged += new System.EventHandler(this.textValue_TextChanged);\r
             // \r
             // textHex\r
             // \r
@@ -216,6 +217,7 @@ namespace Fugashi
             this.textHex.Size = new System.Drawing.Size(255, 23);\r
             this.textHex.TabIndex = 88;\r
             this.textHex.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;\r
+            this.textHex.TextChanged += new System.EventHandler(this.textHex_TextChanged);\r
             // \r
             // bits0\r
             // \r
index cd9e244..2a7cd63 100755 (executable)
@@ -44,8 +44,9 @@ namespace Fugashi
             Font mono = new Font(FontFamily.GenericMonospace, textHex.Font.Size);\r
             textHex.Font = mono;\r
             textValue.Font = mono;\r
-\r
+            BitChanged(null, null);\r
         }\r
+\r
         private void radioUint_CheckedChanged(object sender, EventArgs e)\r
         {\r
             if (radioUint.Checked)\r
@@ -111,7 +112,6 @@ namespace Fugashi
             }\r
         }\r
 \r
-\r
         private byte[] GetBytes()\r
         {\r
             byte[] b = new Byte[length];\r
@@ -181,26 +181,32 @@ namespace Fugashi
             {\r
                 bits[i].Enabled = false;\r
             }\r
+            textValue_TextChanged(null, null);\r
         }\r
 \r
         private void BitChanged(object sender, EventArgs e)\r
         {\r
             byte[] b = GetBytes();\r
+            UpdateValue(b);\r
+            UpdateHex(b);\r
+        }\r
+\r
+        private void UpdateValue(byte[] bytes)\r
+        {\r
             if (radioUint.Checked)\r
             {\r
-                UpdateUint(b);\r
+                UpdateUint(bytes);\r
             }\r
             else if (radioInt.Checked)\r
             {\r
-                UpdateInt(b);\r
+                UpdateInt(bytes);\r
             }\r
             else if (radioFloat.Checked)\r
             {\r
-                UpdateFloat(b);\r
+                UpdateFloat(bytes);\r
             }\r
-            UpdateHex(b);\r
         }\r
-        \r
+\r
         private void UpdateUint(byte[] bytes)\r
         {\r
             ulong value = 0;\r
@@ -266,5 +272,73 @@ namespace Fugashi
             }\r
         }\r
 \r
+        private void UpdateBits(byte[] bytes)\r
+        {\r
+            int i = 0;\r
+            for (int j = 0; j < length; ++j)\r
+            {\r
+                int mask = 1;\r
+                for (int k = 0; k < 8; ++k)\r
+                {\r
+                    bits[i++].SetStateWithoutEvent((bytes[j] & mask) != 0);\r
+                    mask <<= 1;\r
+                }\r
+            }\r
+        }\r
+\r
+        private void textHex_TextChanged(object sender, EventArgs e)\r
+        {\r
+            if (!textHex.Focused)\r
+            {\r
+                return;\r
+            }\r
+            ulong value;\r
+            UInt64.TryParse(textHex.Text,\r
+                System.Globalization.NumberStyles.HexNumber, null, out value);\r
+            byte[] b = BitConverter.GetBytes(value);\r
+            UpdateBits(b);\r
+            UpdateValue(b);\r
+        }\r
+\r
+        private void textValue_TextChanged(object sender, EventArgs e)\r
+        {\r
+            string text = textValue.Text;\r
+            if (!textValue.Focused && e == EventArgs.Empty)\r
+            {\r
+                return;\r
+            }\r
+            byte[] b;\r
+            if (radioUint.Checked)\r
+            {\r
+                ulong value;\r
+                UInt64.TryParse(text, out value);\r
+                b = BitConverter.GetBytes(value);\r
+            }\r
+            else if (radioInt.Checked)\r
+            {\r
+                long value;\r
+                Int64.TryParse(text, out value);\r
+                b = BitConverter.GetBytes(value);\r
+            }\r
+            else if (radioFloat.Checked && length == 4)\r
+            {\r
+                float value;\r
+                Single.TryParse(text, out value);\r
+                b = BitConverter.GetBytes(value);\r
+            }\r
+            else if (radioFloat.Checked && length == 8)\r
+            {\r
+                double value;\r
+                Double.TryParse(text, out value);\r
+                b = BitConverter.GetBytes(value);\r
+            }\r
+            else\r
+            {\r
+                throw new Exception();\r
+            }\r
+            UpdateBits(b);\r
+            UpdateHex(b);\r
+        }\r
+\r
     }\r
 }\r