]> O.S.I.I.S - jp/crow.git/commitdiff
EventHandler extension method for handling test if null
authorjpbruyere <jp.bruyere@hotmail.com>
Thu, 23 Apr 2015 11:58:00 +0000 (13:58 +0200)
committerjpbruyere <jp.bruyere@hotmail.com>
Thu, 23 Apr 2015 11:58:00 +0000 (13:58 +0200)
.gitignore
GOLib.csproj
src/ExtensionsMethods.cs [new file with mode: 0644]
src/GraphicObjects/GraphicObject.cs
src/GraphicObjects/ListBox.cs [new file with mode: 0644]
src/GraphicObjects/NumericControl.cs
src/GraphicObjects/TextBox.cs
src/GraphicObjects/WrappedWidgetGroup.cs [new file with mode: 0755]
src/OpenTKGameWindow.cs

index 5ad7b9700804ece10c3938b7c81f2de09806e3a9..6a4d9ce086fc59a1e7e7f886acc84d9caf9c283e 100644 (file)
@@ -8,3 +8,11 @@ Debug
 /GOLib.userprefs
 /Tests/obj/*
 /Tests/bin/*
+MonoDevelop.GOLib/bin/
+MonoDevelop.GOLib/build/
+MonoDevelop.GOLib/obj/
+Tests/Tests.sln
+Tests/Tests.userprefs
+src/GraphicObjects/Panel.cs
+src/GraphicObjects/VerticalWrappingWidget.cs
+src/GraphicObjects/HorizontalWrappingWidget.cs
index af75b9e267bbc17030102f9d0a56ff2b98c6cfc1..e30f357348f5f941c4998de9049818076a18329e 100644 (file)
       <LogicalName>\r
       </LogicalName>\r
     </Compile>\r
+    <Compile Include="src\GraphicObjects\ListBox.cs">\r
+      <LogicalName>\r
+      </LogicalName>\r
+    </Compile>\r
+    <Compile Include="src\ExtensionsMethods.cs">\r
+      <LogicalName>\r
+      </LogicalName>\r
+    </Compile>\r
   </ItemGroup>\r
   <ItemGroup>\r
     <Reference Include="System" />\r
     </Reference>\r
     <Reference Include="Microsoft.CSharp" />\r
     <Reference Include="Mono.Cairo" />\r
-    <Reference Include="OpenTK">\r
-      <HintPath>..\..\src\opentk-git\Binaries\OpenTK\Release\OpenTK.dll</HintPath>\r
-    </Reference>\r
   </ItemGroup>\r
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />\r
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \r
       <LogicalName>go.image.icons.question_mark</LogicalName>\r
     </EmbeddedResource>\r
   </ItemGroup>\r
+  <ItemGroup>\r
+    <ProjectReference Include="..\..\..\data\Developpements\Magic3D\OpenTK\Source\OpenTK\OpenTK.csproj">\r
+      <Project>{A37A7E14-0000-0000-0000-000000000000}</Project>\r
+      <Name>OpenTK</Name>\r
+    </ProjectReference>\r
+  </ItemGroup>\r
 </Project>\r
diff --git a/src/ExtensionsMethods.cs b/src/ExtensionsMethods.cs
new file mode 100644 (file)
index 0000000..71be8ba
--- /dev/null
@@ -0,0 +1,43 @@
+//
+//  ExtensionsMethods.cs
+//
+//  Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+//  Copyright (c) 2015 jp
+//
+//  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 go
+{
+       public static class ExtensionsMethods
+       {
+               public static void Raise(this EventHandler handler, object sender, EventArgs e)
+               {
+                       if(handler != null)
+                       {
+                               handler(sender, e);
+                       }
+               }
+               public static void Raise<T>(this EventHandler<T> handler, object sender, T e)
+               {
+                       if(handler != null)
+                       {
+                               handler(sender, e);
+                       }
+               }
+       }
+}
+
index aa108e22f3fe42cb4e9f68375b684a2247dde647..3f6bbc85ca1ed43bee52672cc0cc52fa377f4e88 100755 (executable)
@@ -150,17 +150,17 @@ namespace go
                #endregion\r
 \r
                #region EVENT HANDLERS\r
-               public event EventHandler<MouseWheelEventArgs> MouseWheelChanged = delegate { };\r
-               public event EventHandler<MouseButtonEventArgs> MouseButtonUp = delegate { };\r
-               public event EventHandler<MouseButtonEventArgs> MouseButtonDown = delegate { };\r
-               public event EventHandler<MouseButtonEventArgs> MouseClick = delegate { };\r
-               public event EventHandler<MouseMoveEventArgs> MouseMove = delegate { };\r
-               public event EventHandler<MouseMoveEventArgs> MouseEnter = delegate { };\r
-               public event EventHandler<MouseMoveEventArgs> MouseLeave = delegate { };\r
-               public event EventHandler<KeyboardKeyEventArgs> KeyDown = delegate { };\r
-               public event EventHandler<KeyboardKeyEventArgs> KeyUp = delegate { };\r
-               public event EventHandler Focused = delegate { };\r
-               public event EventHandler Unfocused = delegate { };\r
+               public event EventHandler<MouseWheelEventArgs> MouseWheelChanged;\r
+               public event EventHandler<MouseButtonEventArgs> MouseButtonUp;\r
+               public event EventHandler<MouseButtonEventArgs> MouseButtonDown;\r
+               public event EventHandler<MouseButtonEventArgs> MouseClick;\r
+               public event EventHandler<MouseMoveEventArgs> MouseMove;\r
+               public event EventHandler<MouseMoveEventArgs> MouseEnter;\r
+               public event EventHandler<MouseMoveEventArgs> MouseLeave;\r
+               public event EventHandler<KeyboardKeyEventArgs> KeyDown;\r
+               public event EventHandler<KeyboardKeyEventArgs> KeyUp;\r
+               public event EventHandler Focused;\r
+               public event EventHandler Unfocused;\r
                #endregion\r
 \r
                #region public properties\r
@@ -550,46 +550,46 @@ namespace go
                                onMouseEnter (sender, e);\r
                        }\r
                                \r
-                       MouseMove (this, e);\r
+                       MouseMove.Raise (this, e);\r
                }\r
                public virtual void onMouseButtonUp(object sender, MouseButtonEventArgs e){\r
                        if (MouseIsIn (e.Position))\r
                                onMouseClick (sender, e);\r
 \r
-                       MouseButtonUp (this, e);\r
+                       MouseButtonUp.Raise (this, e);\r
                }\r
                public virtual void onMouseButtonDown(object sender, MouseButtonEventArgs e){\r
                        TopContainer.FocusedWidget = this;\r
 \r
-                       MouseButtonDown (this, e);\r
+                       MouseButtonDown.Raise (this, e);\r
                }\r
                public virtual void onMouseClick(object sender, MouseButtonEventArgs e){        \r
-                       MouseClick(this,e);\r
+                       MouseClick.Raise (this,e);\r
                }\r
                public virtual void onMouseWheel(object sender, MouseWheelEventArgs e){\r
                        GraphicObject p = Parent as GraphicObject;\r
                        if (p != null)\r
                                p.onMouseWheel(this,e);\r
                                \r
-                       MouseWheelChanged (this, e);\r
+                       MouseWheelChanged.Raise (this, e);\r
                }\r
                public virtual void onFocused(object sender, EventArgs e){\r
-                       Focused (this, e);\r
+                       Focused.Raise (this, e);\r
                        this.HasFocus = true;\r
                }\r
                public virtual void onUnfocused(object sender, EventArgs e){\r
-                       Unfocused (this, e);\r
+                       Unfocused.Raise (this, e);\r
                        this.HasFocus = false;\r
                }\r
                public virtual void onMouseEnter(object sender, MouseMoveEventArgs e)\r
                {\r
                        Debug.WriteLine ("Mouse enter: " + this.Name);\r
-                       MouseEnter (this, e);\r
+                       MouseEnter.Raise (this, e);\r
                }\r
                public virtual void onMouseLeave(object sender, MouseMoveEventArgs e)\r
                {\r
                        Debug.WriteLine ("Mouse leave: " + this.Name);\r
-                       MouseLeave (this, e);\r
+                       MouseLeave.Raise (this, e);\r
                }\r
                #endregion\r
 \r
diff --git a/src/GraphicObjects/ListBox.cs b/src/GraphicObjects/ListBox.cs
new file mode 100644 (file)
index 0000000..970606c
--- /dev/null
@@ -0,0 +1,51 @@
+//
+//  ListBox.cs
+//
+//  Author:
+//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
+//
+//  Copyright (c) 2015 jp
+//
+//  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;
+using System.Collections;
+
+namespace go
+{
+       public class ListBox : GraphicObject
+       {
+               IEnumerable data;
+
+               public IEnumerable Data {
+                       get {
+                               return data;
+                       }
+                       set {
+                               if (data == value)
+                                       return;
+                               
+                               data = value;
+
+                               foreach (var item in data) {
+                                       
+                               }
+                       }
+               }
+
+               public ListBox ()
+               {
+               }
+       }
+}
+
index 1d4336e2caceb5841a76ceaea9bdcbccc90f4018..51a3fdc5348f3843f7cb55b1d10e781aadb39174 100644 (file)
@@ -24,9 +24,8 @@ namespace go
                public EventHandler<ValueChangeEventArgs> ValueChanged;
 
                public virtual void onValueChanged(object sender, ValueChangeEventArgs e)
-               {
-                       if (ValueChanged != null)
-                               ValueChanged (sender, e);
+               {                       
+                       ValueChanged.Raise (sender, e);
                }
                #endregion
 
index be7cdab9476ce73c988be67a3c222d9883034645..2040378919aba1ec81d4cc4804f48abc71173f43 100644 (file)
@@ -91,11 +91,11 @@ namespace go
                }\r
                #endregion\r
 \r
-               public event EventHandler<TextChangeEventArgs> TextChanged = delegate { };\r
+               public event EventHandler<TextChangeEventArgs> TextChanged;\r
 \r
                public virtual void onTextChanged(Object sender, TextChangeEventArgs e)\r
                {\r
-                       TextChanged (this, e);\r
+                       TextChanged.Raise (this, e);\r
                }\r
                        \r
         #region Keyboard handling\r
diff --git a/src/GraphicObjects/WrappedWidgetGroup.cs b/src/GraphicObjects/WrappedWidgetGroup.cs
new file mode 100755 (executable)
index 0000000..afd54e6
--- /dev/null
@@ -0,0 +1,154 @@
+using System;\r
+using System.Collections.Generic;\r
+using System.Linq;\r
+using System.Text;\r
+using System.Drawing;\r
+using OpenTK.Graphics.OpenGL;\r
+using System.Diagnostics;\r
+\r
+namespace go\r
+{\r
+    public class WrappedWidgetGroup : Group\r
+    {\r
+\r
+        public int widgetSpacing = 2;\r
+\r
+        public Orientation Orientation = Orientation.Horizontal;\r
+\r
+\r
+        public WrappedWidgetGroup()\r
+            : base()\r
+        {\r
+            BorderWidth = 0;\r
+        }\r
+\r
+        int currentXForWidget = 0;\r
+        int currentYForWidget = 0;\r
+\r
+        int highestWidget = 0;\r
+        int largestWidget = 0;\r
+\r
+\r
+        public override void UpdateLayout()\r
+        {\r
+            //while (!layoutIsValid)\r
+            //{\r
+            //if (!(sizeIsValid && positionIsValid))\r
+            base.UpdateLayout();\r
+\r
+            //if (!base.layoutIsValid)\r
+            //    return;\r
+\r
+            currentXForWidget = ClientRectangle.X;\r
+            currentYForWidget = ClientRectangle.Y;\r
+\r
+            highestWidget = 0;\r
+            largestWidget = 0;\r
+\r
+            Rectangle contentBounds = Rectangle.Zero;\r
+\r
+            GraphicObject[] widgets = new GraphicObject[Children.Count];\r
+            Children.CopyTo(widgets);\r
+            foreach (GraphicObject w in widgets)\r
+            {\r
+                if (w.renderBounds.Width > largestWidget)\r
+                    largestWidget = w.renderBounds.Width;\r
+                if (w.renderBounds.Height > highestWidget)\r
+                    highestWidget = w.renderBounds.Height;\r
+\r
+                if (!enoughtSpaceForWidget(w))\r
+                    advance(w);\r
+\r
+                if (enoughtSpaceForWidget(w))\r
+                {\r
+                    w.renderBounds.X = currentXForWidget;\r
+                    w.renderBounds.Y = currentYForWidget;\r
+\r
+                    w.positionIsValid = true;\r
+\r
+                    contentBounds += w.renderBounds;\r
+\r
+                    advance(w);\r
+                }\r
+                else\r
+                    break;\r
+            }\r
+\r
+            contentBounds.Width += BorderWidth + Margin;\r
+            contentBounds.Height += BorderWidth + Margin;\r
+\r
+            if (SizeToContent)\r
+                renderBounds.Size = contentBounds.Size;\r
+            else if (VerticalScrolling)\r
+                renderBounds.Size = new Size(renderBounds.Size.Width, contentBounds.Size.Height);\r
+            else if (HorizontalScrolling)\r
+                renderBounds.Size = new Size(contentBounds.Size.Width, renderBounds.Size.Height);\r
+\r
+            if (layoutIsValid)\r
+                registerForRedraw();\r
+        }\r
+\r
+\r
+        bool enoughtSpaceForWidget(GraphicObject w)\r
+        {\r
+            int nextXForWidget = 0;\r
+            int nextYForWidget = 0;\r
+\r
+            if (Orientation == Orientation.Horizontal)\r
+                nextXForWidget = currentXForWidget + w.renderBounds.Width;\r
+            else\r
+                nextYForWidget = nextYForWidget + w.renderBounds.Height;\r
+\r
+            if (!SizeToContent)\r
+            {\r
+                if (nextXForWidget > ClientRectangle.Right && !HorizontalScrolling)\r
+                    return false;\r
+                if (currentYForWidget > ClientRectangle.Bottom && !VerticalScrolling)\r
+                    return false;\r
+            }\r
+            return true;\r
+        }\r
+        void advance(GraphicObject w)\r
+        {\r
+            if (Orientation == Orientation.Horizontal)\r
+            {\r
+                //if (w is LabelWidget)\r
+                //    Debugger.Break();\r
+                currentXForWidget = currentXForWidget + widgetSpacing + w.renderBounds.Width;\r
+            }\r
+            else\r
+                currentYForWidget = currentYForWidget + widgetSpacing + w.renderBounds.Height;\r
+\r
+            if (!SizeToContent)\r
+            {\r
+                if (currentXForWidget > ClientRectangle.Right && !HorizontalScrolling)\r
+                {\r
+                    if (Orientation == Orientation.Vertical)\r
+                    {\r
+                        //not scrolling\r
+                    }\r
+                    else\r
+                    {\r
+                        currentXForWidget = ClientRectangle.X;\r
+                        currentYForWidget += widgetSpacing + highestWidget;\r
+                        highestWidget = 0;\r
+                    }\r
+                }\r
+                if (currentYForWidget > ClientRectangle.Bottom && !VerticalScrolling)\r
+                {\r
+                    if (Orientation == Orientation.Horizontal)\r
+                    {\r
+                        //not scrolling\r
+                    }\r
+                    else\r
+                    {\r
+                        currentXForWidget += widgetSpacing + largestWidget;\r
+                        currentYForWidget = ClientRectangle.Y;\r
+                        largestWidget = 0;\r
+                    }\r
+\r
+                }\r
+            }\r
+        }\r
+    }\r
+}\r
index 1e5b5d86063e7b6862f964757fc66bc337feca89..234c4be20d996b4b4889ff758da835665595f880 100755 (executable)
@@ -87,11 +87,11 @@ namespace go
 \r
                #region Events\r
                //those events are raised only if mouse isn't in a graphic object\r
-               public event EventHandler<MouseWheelEventArgs> MouseWheelChanged = delegate { };\r
-               public event EventHandler<MouseButtonEventArgs> MouseButtonUp = delegate { };\r
-               public event EventHandler<MouseButtonEventArgs> MouseButtonDown = delegate { };\r
-               public event EventHandler<MouseButtonEventArgs> MouseClick = delegate { };\r
-               public event EventHandler<MouseMoveEventArgs> MouseMove = delegate { };\r
+               public event EventHandler<MouseWheelEventArgs> MouseWheelChanged;\r
+               public event EventHandler<MouseButtonEventArgs> MouseButtonUp;\r
+               public event EventHandler<MouseButtonEventArgs> MouseButtonDown;\r
+               public event EventHandler<MouseButtonEventArgs> MouseClick;\r
+               public event EventHandler<MouseMoveEventArgs> MouseMove;\r
                #endregion\r
 \r
                #region focus\r
@@ -407,7 +407,7 @@ namespace go
                                }\r
                        }\r
                        _hoverWidget = null;\r
-                       MouseMove (this, e);\r
+                       MouseMove.Raise (this, e);\r
         }\r
         void Mouse_ButtonUp(object sender, MouseButtonEventArgs e)\r
         {\r
@@ -416,12 +416,12 @@ namespace go
 \r
                        _activeWidget.onMouseButtonUp (this, e);\r
                        _activeWidget = null;\r
-                       MouseButtonUp (this, e);\r
+                       MouseButtonUp.Raise (this, e);\r
         }\r
         void Mouse_ButtonDown(object sender, MouseButtonEventArgs e)\r
         {\r
                        if (_hoverWidget == null) {\r
-                               MouseButtonDown (this, e);\r
+                               MouseButtonDown.Raise (this, e);\r
                                return;\r
                        }\r
 \r
@@ -439,7 +439,7 @@ namespace go
         void Mouse_WheelChanged(object sender, MouseWheelEventArgs e)\r
         {\r
                        if (_hoverWidget == null) {\r
-                               MouseWheelChanged (this, e);\r
+                               MouseWheelChanged.Raise (this, e);\r
                                return;\r
                        }\r
                        _hoverWidget.onMouseWheel (this, e);\r