]> O.S.I.I.S - jp/crow.git/commitdiff
divers debug, templated group selection, label double click,...
authorjpbruyere <jp.bruyere@hotmail.com>
Thu, 9 Feb 2017 07:52:22 +0000 (08:52 +0100)
committerjpbruyere <jp.bruyere@hotmail.com>
Thu, 9 Feb 2017 07:52:22 +0000 (08:52 +0100)
Crow.csproj
Templates/FileDialog.template
Templates/ScrollBar.template
Tests/Interfaces/colorItem.crow
src/CrowThread.cs
src/GraphicObjects/FileDialog.cs
src/GraphicObjects/Group.cs
src/GraphicObjects/Label.cs
src/GraphicObjects/Scroller.cs
src/GraphicObjects/TemplatedGroup.cs

index 4e5b52ff55846169cd849f450d022ab477993c17..98790caee9db16edadff7f227a3008baca5f72ff 100644 (file)
@@ -21,8 +21,6 @@
     <Description>C# Rapid Open Widget</Description>
     <BaseAddress>4194304</BaseAddress>
     <ReleaseVersion>0.5</ReleaseVersion>
-    <ProductVersion>8.0.30703</ProductVersion>
-    <SchemaVersion>2.0</SchemaVersion>
     <OutputPath>$(SolutionDir)build\$(Configuration)</OutputPath>
     <IntermediateOutputPath>$(SolutionDir)build\obj\$(Configuration)</IntermediateOutputPath>
     <AssemblyOriginatorKeyFile>crow.key</AssemblyOriginatorKeyFile>
index 018df8f6e44b04894da4a256f246d04a088b9ac2..7972b58304b3cc02eae4c8216ec4ebb8f960dfcd 100644 (file)
@@ -20,8 +20,7 @@
                        <VerticalStack Margin="1">
                                <TextBox Text="{²./CurrentDirectory}"/>
                                <HorizontalStack Spacing="1">
-                                       <DirectoryView ShowFiles="false" Name="dv" CurrentDirectory="{²./CurrentDirectory}" SelectedItemChanged="./Tv_SelectedItemChanged"
-                                               Width="50%" Margin="0">
+                                       <DirectoryView ShowFiles="false" Name="dv" CurrentDirectory="{²./CurrentDirectory}"    Width="50%" Margin="0">
                                                <Template>
                                                        <TreeView IsRoot="true" Name="treeView" Data="{./FileSystemEntries}"
                                                                        SelectedItemChanged="./onSelectedItemChanged">
                                                </Template>
                                        </DirectoryView>
                                        <Splitter/>
-                                       <DirectoryView ShowFiles="true" Name="dv" CurrentDirectory="{../dv.SelectedItem}
+                                       <DirectoryView ShowFiles="true" Name="fv" CurrentDirectory="{../dv.SelectedItem}" SelectedItemChanged="./onSelectedItemChanged
                                                Width="100%" Margin="0">
                                                <Template>
-                                                       <ListBox Name="fileView" Data="{./FileSystemEntries}">
+                                                       <ListBox Name="fileView" Data="{./FileSystemEntries}" SelectedItemChanged="./onSelectedItemChanged">
                                                                <Template>
                                                                        <Border BorderWidth="1" Margin="0" MinimumSize="10,10">
                                                                                <VerticalStack>
                                                </Template>
                                        </DirectoryView>
                                </HorizontalStack>
-                               <TextBox Text="{../../dv.SelectedItem}"/>
+                               <TextBox Text="{./SelectedFile}"/>
                                <HorizontalStack Fit="true" HorizontalAlignment="Right">
-                                       <Button Caption="Ok" MouseClick="onFileSelect"/>
-                                       <Button Caption="Cancel"/>
+                                       <Button Caption="Ok" MouseClick="./onFileSelect"/>
+                                       <Button Caption="Cancel" MouseClick="./onCancel"/>
                                </HorizontalStack>
                        </VerticalStack>
                </Container>
index 3cd4d0a4243541c151fbaaea3f614a64561bb145..70dce93ef9ed12c580f42e8b96106b8aab8e8090 100755 (executable)
@@ -7,13 +7,12 @@
                </Button>
                <Slider Name="Slider"
                        Orientation="{./Orientation}"
-                       Value="{./Value}"
+                       Value="{²./Value}"
                        Maximum="{./Maximum}"
                        Height="{./HeightPolicy}" Width="{./WidthPolicy}"
                        LargeIncrement="{./LargeIncrement}"
                        SmallIncrement="{./SmallIncrement}"
-                       Background="hgradient|0:DimGray|0.1:Gray|0.95:Gray|1:White"
-                       ValueChanged="./onSliderValueChange"/>
+                       Background="hgradient|0:DimGray|0.1:Gray|0.95:Gray|1:White"/>
                <Button MouseRepeat="true" Width="12" Height="12" MouseClick="./onScrollForth"
                        Template="#Crow.Templates.ArrowButTemplate.crow">
                        <Image Margin="1" Path="#Crow.Images.Icons.updown.svg" SvgSub="down"/>
index 99c8d224e7501c0d8d20e98c0826d252bee0d447..e3e54827c332b3ae7350b96890941a52fa46eaf0 100755 (executable)
@@ -1,10 +1,10 @@
 <?xml version="1.0"?>
-<HorizontalStack
-                       HorizontalAlignment="Left"
-                       Height="Fit" Width="200" Margin="1" Focusable="true"
-                       MouseEnter="{Background=hgradient|0:DarkRed|1:Transparent}"
-                       MouseLeave="{Background=Transparent}">
-       <GraphicObject Height="12" Width="20" Background="{}" Margin="0" CornerRadius="3"/>
-       <Label Text="{}" Margin="0" Width="Stretched"/>
-</HorizontalStack>
+<Border Foreground="Transparent" Focusable="true" HorizontalAlignment="Left" Height="Fit" Width="200">
+       <HorizontalStack Margin="0"
+                               MouseEnter="{Background=hgradient|0:DarkRed|1:Transparent}"
+                               MouseLeave="{Background=Transparent}">
+               <GraphicObject Height="12" Width="20" Background="{}" Margin="0" CornerRadius="3"/>
+               <Label Text="{}" Margin="0" Width="Stretched"/>
+       </HorizontalStack>
+</Border>
 
index dfdeda00aa0807b1202d19172c3aaad6f7f5a4f4..fcfc0647a3df4f607335d7466fe9f3aa1a283f1b 100644 (file)
@@ -51,7 +51,8 @@ namespace Crow
                                thread.Join ();
                                //cancelLoading = false;
                        }
-                       Host.CurrentInterface.CrowThreads.Remove (this);
+                       lock (Host.CurrentInterface.CrowThreads)
+                               Host.CurrentInterface.CrowThreads.Remove (this);
                }
        }
 }
index 543b27cc218d7ddb0edd21172e856ddff4e1d56c..0ee78e130d31318ff10a7d33f8edc5012e9229a7 100644 (file)
@@ -33,23 +33,27 @@ namespace Crow
        {
                string searchPattern, curDirectory;
 
+               #region events
+               public event EventHandler OkClicked;
+               #endregion
+
                #region CTOR
                public FileDialog () : base()
                {
                }
                #endregion
-               //[DefaultValue(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments))]
+
                [XmlAttributeAttribute][DefaultValue("/home")]
                public virtual string CurrentDirectory {
                        get { return curDirectory; }
                        set {
                                if (curDirectory == value)
                                        return;
-                               curDirectory = value; 
+                               curDirectory = value;
                                NotifyValueChanged ("CurrentDirectory", curDirectory);
 
                        }
-               } 
+               }
 
                [XmlAttributeAttribute()][DefaultValue("*")]
                public virtual string SearchPattern {
@@ -57,75 +61,43 @@ namespace Crow
                        set {
                                if (searchPattern == value)
                                        return;
-                               searchPattern = value; 
+                               searchPattern = value;
                                NotifyValueChanged ("SearchPattern", searchPattern);
 
                        }
-               } 
-
-//             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();
-//                     }
-//             }
+               }
+               string _selectedFile;
+               [XmlIgnore]public string SelectedFile {
+                       get {
+                               return _selectedFile;
+                       }
+                       set {
+                               if (value == _selectedFile)
+                                       return;
+                               _selectedFile = value;
+                               NotifyValueChanged ("SelectedFile", _selectedFile);
+                       }
+               }
+               public void onSelectedItemChanged (object sender, SelectionChangeEventArgs e){
 
-//             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, MouseButtonEventArgs e){
-//                     //OpenTKGameWindow.currentWindow.DeleteWidget(window);
-//             }
+                       string tmp = "";
+                       if (e.NewValue != null)
+                               tmp = e.NewValue.ToString();
+                       if (tmp == SelectedFile)
+                               return;
+                       SelectedFile = tmp;
+                       //SelectedItemChanged.Raise (this, e);
+               }
+               void onFileSelect(object sender, MouseButtonEventArgs e){
+                       OkClicked.Raise (this, null);
+                       unloadDialog ((sender as GraphicObject).CurrentInterface);
+               }
+               void onCancel(object sender, MouseButtonEventArgs e){
+                       unloadDialog ((sender as GraphicObject).CurrentInterface);
+               }
+               void unloadDialog(Interface host){
+                       host.DeleteWidget (this);
+               }
        }
-//     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 ());
-//             }
-//
-//     }
 }
 
index 3c5091855de872fa07226c53c0921eb501fce1c3..0defeabd174ed4b90acdbb03d9c960967026dd4f 100644 (file)
@@ -37,9 +37,10 @@ namespace Crow
             set { _multiSelect = value; }
         }
                public virtual void AddChild(GraphicObject g){
-                       lock (children)
-                               Children.Add(g);
-                       g.Parent = this;
+                       lock (children) {
+                               Children.Add (g);
+                               g.Parent = this;
+                       }
                        g.RegisteredLayoutings = LayoutingType.None;
                        g.RegisterForLayouting (LayoutingType.Sizing | LayoutingType.ArrangeChildren);
                        g.LayoutChanged += OnChildLayoutChanges;
@@ -202,11 +203,13 @@ namespace Crow
                                        CairoHelpers.CairoRectangle (gr, ClientRectangle, CornerRadius);
                                        gr.Clip ();
 
-                                       foreach (GraphicObject c in Children) {
-                                               if (!c.Visible)
-                                                       continue;
-                                               if (Clipping.intersect(c.Slot + ClientRectangle.Position))
-                                                       c.Paint (ref gr);
+                                       lock (Children) {
+                                               foreach (GraphicObject c in Children) {
+                                                       if (!c.Visible)
+                                                               continue;
+                                                       if (Clipping.intersect (c.Slot + ClientRectangle.Position))
+                                                               c.Paint (ref gr);
+                                               }
                                        }
 
                                        #if DEBUG_CLIP_RECTANGLE
index 38367348d61a2fb07b9a6cb651a385d084be3a89..1cf9e6ef5bf45110b9889ac7f7024e55c3d43bea 100644 (file)
@@ -335,22 +335,22 @@ namespace Crow
                public void GotoWordStart(){
                        CurrentColumn--;
                        //skip white spaces
-                       while (char.IsWhiteSpace (this.CurrentChar) && CurrentColumn > 0)
+                       while (!char.IsLetterOrDigit (this.CurrentChar) && CurrentColumn > 0)
                                CurrentColumn--;
-                       while (!char.IsWhiteSpace (lines [CurrentLine] [CurrentColumn]) && CurrentColumn > 0)
+                       while (char.IsLetterOrDigit (lines [CurrentLine] [CurrentColumn]) && CurrentColumn > 0)
                                CurrentColumn--;
-                       if (char.IsWhiteSpace (this.CurrentChar))
+                       if (!char.IsLetterOrDigit (this.CurrentChar))
                                CurrentColumn++;
                }
                public void GotoWordEnd(){
                        //skip white spaces
                        if (CurrentColumn >= lines [CurrentLine].Length - 1)
                                return;
-                       while (char.IsWhiteSpace (this.CurrentChar) && CurrentColumn < lines [CurrentLine].Length-1)
+                       while (!char.IsLetterOrDigit (this.CurrentChar) && CurrentColumn < lines [CurrentLine].Length-1)
                                CurrentColumn++;
-                       while (!char.IsWhiteSpace (this.CurrentChar) && CurrentColumn < lines [CurrentLine].Length-1)
+                       while (char.IsLetterOrDigit (this.CurrentChar) && CurrentColumn < lines [CurrentLine].Length-1)
                                CurrentColumn++;
-                       if (!char.IsWhiteSpace (this.CurrentChar))
+                       if (char.IsLetterOrDigit (this.CurrentChar))
                                CurrentColumn++;
                }
                public void DeleteChar()
@@ -448,14 +448,17 @@ namespace Crow
 
                                                return (int)Math.Ceiling(fe.Height * lc) + Margin * 2;
                                        }
+                                       try {
+                                               foreach (string s in lines) {
+                                                       string l = s.Replace("\t", new String (' ', Interface.TabSize));
 
-                                       foreach (string s in lines) {
-                                               string l = s.Replace("\t", new String (' ', Interface.TabSize));
+                                                       TextExtents tmp = gr.TextExtents (l);
 
-                                               TextExtents tmp = gr.TextExtents (l);
-
-                                               if (tmp.XAdvance > te.XAdvance)
-                                                       te = tmp;
+                                                       if (tmp.XAdvance > te.XAdvance)
+                                                               te = tmp;
+                                               }
+                                       } catch (Exception ex) {
+                                               return -1;
                                        }
                                        return (int)Math.Ceiling (te.XAdvance) + Margin * 2;
                                }
@@ -561,7 +564,8 @@ namespace Crow
                                                        else
                                                                SelEndCursorPos = textCursorPos;
                                                }
-                                       }
+                                       }else
+                                               computeTextCursorPosition(gr);
                                }else
                                        computeTextCursorPosition(gr);
 
@@ -575,21 +579,21 @@ namespace Crow
 
                        //****** debug selection *************
 //                     if (SelRelease >= 0) {
-//                             gr.Color = Color.Green;
+//                             new SolidColor(Color.DarkGreen).SetAsSource(gr);
 //                             Rectangle R = new Rectangle (
-//                                                  rText.X + (int)SelEndCursorPos - 2,
+//                                                  rText.X + (int)SelEndCursorPos - 3,
 //                                                  rText.Y + (int)(SelRelease.Y * fe.Height),
-//                                                  4,
+//                                                  6,
 //                                                  (int)fe.Height);
 //                             gr.Rectangle (R);
 //                             gr.Fill ();
 //                     }
 //                     if (SelBegin >= 0) {
-//                             gr.Color = Color.UnmellowYellow;
+//                             new SolidColor(Color.DarkRed).SetAsSource(gr);
 //                             Rectangle R = new Rectangle (
-//                                     rText.X + (int)SelStartCursorPos - 2,
+//                                     rText.X + (int)SelStartCursorPos - 3,
 //                                     rText.Y + (int)(SelBegin.Y * fe.Height),
-//                                     4,
+//                                     6,
 //                                     (int)fe.Height);
 //                             gr.Rectangle (R);
 //                             gr.Fill ();
index d14f74b0cf6ed7c96b46ae9ef6d15e2d54cf7033..b906cbf5b41391cd360188c4e53ebf70a883d676 100644 (file)
@@ -136,14 +136,14 @@ namespace Crow
                                if (arg.LayoutType == LayoutingType.Height) {
                                        if (maxScroll < ScrollY) {
                                                //Debug.WriteLine ("scrolly={0} maxscroll={1}", ScrollY, maxScroll);
-                                               ScrollY = 0;
+                                               ScrollY = maxScroll;
                                        }
                                        NotifyValueChanged("MaximumScroll", maxScroll);
                                }
                        } else if (arg.LayoutType == LayoutingType.Width) {
                                if (maxScroll < ScrollX) {
                                        //Debug.WriteLine ("scrolly={0} maxscroll={1}", ScrollY, maxScroll);
-                                       ScrollX = 0;
+                                       ScrollX = maxScroll;
                                }
                                NotifyValueChanged("MaximumScroll", maxScroll);
                        }
index 336308cb1f7cbe8f91416628fd8dd8a58f0608db..2e2eef47696a7215cb63a600a3ce0988a53e9245 100644 (file)
@@ -26,6 +26,7 @@ using System.Collections.Generic;
 using System.ComponentModel;
 using System.Collections;
 using System.Threading;
+using System.Linq;
 
 namespace Crow
 {
@@ -44,13 +45,15 @@ namespace Crow
                #endregion
 
                IList data;
-               int _selectedIndex;
+               int _selectedIndex = -1;
                Color selBackground, selForeground;
 
                int itemPerPage = 50;
                CrowThread loadingThread = null;
                volatile bool cancelLoading = false;
 
+               bool isPaged = false;
+
                #region Templating
                //TODO: dont instantiate ItemTemplates if not used
                //but then i should test if null in msil gen
@@ -104,15 +107,30 @@ namespace Crow
                }
                #endregion
 
-               public virtual List<GraphicObject> Items{ get { return items.Children; }}
+               public virtual List<GraphicObject> Items{
+                       get {
+                               return isPaged ? items.Children.SelectMany(x => (x as Group).Children).ToList()
+                               : items.Children;
+                       }
+               }
                [XmlAttributeAttribute][DefaultValue(-1)]public int SelectedIndex{
                        get { return _selectedIndex; }
                        set {
                                if (value == _selectedIndex)
                                        return;
 
+                               if (_selectedIndex >= 0) {
+                                       Items[_selectedIndex].Foreground = Color.Transparent;
+                                       Items[_selectedIndex].Background = Color.Transparent;
+                               }
+
                                _selectedIndex = value;
 
+                               if (_selectedIndex >= 0) {
+                                       Items[_selectedIndex].Foreground = SelectionForeground;
+                                       Items[_selectedIndex].Background = SelectionBackground;
+                               }
+
                                NotifyValueChanged ("SelectedIndex", _selectedIndex);
                                NotifyValueChanged ("SelectedItem", SelectedItem);
                                SelectedItemChanged.Raise (this, new SelectionChangeEventArgs (SelectedItem));
@@ -197,6 +215,10 @@ namespace Crow
 
                public virtual void ClearItems()
                {
+                       _selectedIndex = -1;
+                       NotifyValueChanged ("SelectedIndex", _selectedIndex);
+                       NotifyValueChanged ("SelectedItem", null);
+
                        items.ClearChildren ();
                        NotifyValueChanged ("HasChildren", false);
                }
@@ -338,9 +360,11 @@ namespace Crow
                                gs.HorizontalAlignment = items.HorizontalAlignment;
                                page = gs;
                                page.Name = "page" + pageNum;
+                               isPaged = true;
                        } else {
                                page = Activator.CreateInstance (items.GetType ()) as Group;
                                page.Name = "page" + pageNum;
+                               isPaged = true;
                        }
 
                        for (int i = (pageNum - 1) * itemPerPage; i < pageNum * itemPerPage; i++) {