aboutsummaryrefslogtreecommitdiffstatsci
path: root/src/GraphicObjects
diff options
context:
space:
mode:
authorjpbruyere <jp.bruyere@hotmail.com>2015-10-21 18:55:33 +0200
committerjpbruyere <jp.bruyere@hotmail.com>2015-10-21 18:55:33 +0200
commitf31ffd683210c50b777dce4e76d0d9912ca925a8 (patch)
treede0783b77f39de9fa7ccf04fbd8b53bb17db9905 /src/GraphicObjects
parent671366cd56e7d6b2a2afb0839e7fb0f895cb2df3 (diff)
file dialog
Diffstat (limited to 'src/GraphicObjects')
-rw-r--r--src/GraphicObjects/FileDialog.cs141
-rwxr-xr-xsrc/GraphicObjects/Image.cs1
-rw-r--r--src/GraphicObjects/Scroller.cs15
3 files changed, 156 insertions, 1 deletions
diff --git a/src/GraphicObjects/FileDialog.cs b/src/GraphicObjects/FileDialog.cs
new file mode 100644
index 00000000..3a5e6cb3
--- /dev/null
+++ b/src/GraphicObjects/FileDialog.cs
@@ -0,0 +1,141 @@
+//
+// FileDialog.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.Xml.Serialization;
+using System.ComponentModel;
+using System.IO;
+using System.Collections.Generic;
+using System.Diagnostics;
+using OpenTK.Input;
+using System.Linq;
+using System.Text.RegularExpressions;
+
+namespace go
+{
+ public class FileDialog: IValueChange
+ {
+ #region IValueChange implementation
+ public event EventHandler<ValueChangeEventArgs> ValueChanged;
+ public virtual void NotifyValueChanged(string MemberName, object _value)
+ {
+ ValueChanged.Raise(this, new ValueChangeEventArgs(MemberName, _value));
+ }
+ #endregion
+
+ Window window;
+ DirectoryInfo currentDir;
+ FileInfo selectedFile;
+ string searchPattern = "*";
+
+ #region CTOR
+ public FileDialog ()
+ {
+ currentDir = new DirectoryInfo (Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments));
+ window = Interface.Load("#go.Templates.FileDialog.goml") as Window;
+ window.DataSource = this;
+ }
+ #endregion
+
+ public string CurrentPath {
+ get { return currentDir.FullName; }
+ set {
+ currentDir = new DirectoryInfo (value);
+ NotifyValueChanged ("CurrentPath", CurrentPath);
+ }
+ }
+ public string SearchPattern {
+ get { return searchPattern; }
+ set {
+ searchPattern = value;
+ NotifyValueChanged ("Files", Files);
+ }
+ }
+
+ public DirectoryInfo[] Directories
+ {
+ get {
+ //currentDir.GetDirectories
+ List<DirectoryInfo> tmp = currentDir.GetDirectories ().Where(fi => !fi.Attributes.HasFlag(FileAttributes.Hidden)).ToList();
+ if (currentDir.Parent != null)
+ tmp.Insert (0, currentDir.Parent);
+ return tmp.ToArray ();
+ }
+ }
+ public FileInfo[] Files
+ {
+ get {
+ string[] exts = searchPattern.Replace("*","").Split ('|');
+ //return currentDir.GetFiles (searchPattern).Where(fi => !fi.Attributes.HasFlag(FileAttributes.Hidden)).ToArray();
+ return currentDir.GetFiles().Where(f => exts.Any
+ (x => f.Name.EndsWith (x, StringComparison.InvariantCultureIgnoreCase))).ToArray();
+ }
+ }
+
+ public void Show(){
+ OpenTKGameWindow.currentWindow.AddWidget(window);
+ }
+
+ void OnSelectedItemChanged (object sender, SelectionChangeEventArgs e)
+ {
+ currentDir = e.NewValue as DirectoryInfo;
+ NotifyValueChanged ("CurrentPath", CurrentPath);
+ NotifyValueChanged ("Directories", Directories);
+ NotifyValueChanged ("Files", Files);
+
+ }
+ void onFileListItemChanged (object sender, SelectionChangeEventArgs e)
+ {
+ selectedFile = e.NewValue as FileInfo;
+ }
+ void onFileSelect(object sender, OpenTK.Input.MouseButtonEventArgs e){
+ OpenTKGameWindow.currentWindow.DeleteWidget(window);
+ }
+ }
+ public class DirContainer: IValueChange
+ {
+ #region IValueChange implementation
+ public event EventHandler<ValueChangeEventArgs> ValueChanged;
+ public void NotifyValueChanged(string name, object value)
+ {
+ ValueChanged.Raise (this, new ValueChangeEventArgs (name, value));
+ }
+ #endregion
+
+ public DirectoryInfo CurDir;
+ public DirContainer(DirectoryInfo _dir){
+ CurDir = _dir;
+ }
+ public string Name {
+ get { return CurDir.Name; }
+ }
+
+ void onDirUp(object sender, MouseButtonEventArgs e)
+ {
+
+ }
+ public void onMouseDown(object sender, MouseButtonEventArgs e)
+ {
+ Debug.WriteLine (sender.ToString ());
+ }
+
+ }
+}
+
diff --git a/src/GraphicObjects/Image.cs b/src/GraphicObjects/Image.cs
index 10631835..71d568fd 100755
--- a/src/GraphicObjects/Image.cs
+++ b/src/GraphicObjects/Image.cs
@@ -76,6 +76,7 @@ namespace go
_pic = new BmpPicture ();
_pic.LoadImage (path);
+ registerForGraphicUpdate ();
}
#endregion
diff --git a/src/GraphicObjects/Scroller.cs b/src/GraphicObjects/Scroller.cs
index 8c2303cc..3f78b598 100644
--- a/src/GraphicObjects/Scroller.cs
+++ b/src/GraphicObjects/Scroller.cs
@@ -22,6 +22,8 @@ namespace go
bool _scrollbarVisible;
double _scrollX = 0.0;
double _scrollY = 0.0;
+ int scrollSpeed;
+
#region public properties
@@ -92,7 +94,14 @@ namespace go
}
}
- public static int ScrollSpeed = 10;
+ [XmlAttributeAttribute][DefaultValue(30)]
+ public int ScrollSpeed {
+ get { return scrollSpeed; }
+ set {
+ scrollSpeed = value;
+ ValueChanged.Raise(this, new ValueChangeEventArgs("ScrollSpeed", scrollSpeed));
+ }
+ }
#endregion
@@ -147,6 +156,10 @@ namespace go
#region Mouse handling
public override bool MouseIsIn (Point m)
{
+ Debug.WriteLine ("Mouse in scroller: {0} scr coord:{1} mouse:{2}",
+ base.ScreenCoordinates (Slot).ContainsOrIsEqual (m),
+ base.ScreenCoordinates (Slot), m);
+
return Visible ? base.ScreenCoordinates(Slot).ContainsOrIsEqual (m) : false;
}
public override void checkHoverWidget (MouseMoveEventArgs e)