Tag and Permission editing of File Permissions is functional.
authorpkanavos <pkanavos@gmail.com>
Fri, 11 May 2012 17:17:24 +0000 (20:17 +0300)
committerpkanavos <pkanavos@gmail.com>
Fri, 11 May 2012 17:17:24 +0000 (20:17 +0300)
trunk/Pithos.Client.WPF/FileProperties/FilePropertiesView.xaml
trunk/Pithos.Client.WPF/FileProperties/FilePropertiesViewModel.cs
trunk/Pithos.Client.WPF/FileProperties/MetaValue.cs
trunk/Pithos.Client.WPF/FileProperties/Permission.cs

index 90e1244..d19aeb3 100644 (file)
                 <TabItem Header="Metadata">
                     <StackPanel>
                         <StackPanel Orientation="Horizontal">
-                            <TextBox x:Name="CurrentTag_Name" Width="150" Margin="5" Grid.Row="6"/>
-                            <TextBox x:Name="CurrentTag_Value" Width="150" Margin="5" Grid.Row="6"/>
-                            <Button x:Name="AddTag" Content="Add" Margin="5"/>
+                            <TextBox x:Name="CurrentTag_Name" Width="145" Margin="5" Grid.Row="6"/>
+                            <TextBox x:Name="CurrentTag_Value" Width="145" Margin="5" Grid.Row="6"/>
+                            <Button x:Name="AddTag" Content="Update" Margin="5"/>
                         </StackPanel>
                         <DataGrid ItemsSource="{Binding Tags}" x:Name="Tags"
-                    AutoGenerateColumns="False" GridLinesVisibility="None" IsReadOnly="True" >
+                    AutoGenerateColumns="False" GridLinesVisibility="None" 
+                                  IsReadOnly="False"
+                                  CanUserDeleteRows="True"
+                                  CanUserAddRows="False">
                             <DataGrid.Columns>
-                                <DataGridTextColumn Binding="{Binding Name}" Header="Key" MinWidth="150" />
-                                <DataGridTextColumn Binding="{Binding Value}" Header="Value"  MinWidth="100"/>
+                                <DataGridTextColumn Binding="{Binding Name}" Header="Key" MinWidth="150" IsReadOnly="True"/>
+                                <DataGridTextColumn Binding="{Binding Value}" Header="Value"  MinWidth="100" IsReadOnly="True"/>
                             </DataGrid.Columns>
                         </DataGrid>
+                        <Button x:Name="DeleteTag" Content="Delete" 
+                                Command="DataGrid.DeleteCommand" CommandTarget="{Binding ElementName=Tags}"
+                                Style="{StaticResource ResourceKey=ButtonStyle}" HorizontalAlignment="Left" />
                     </StackPanel>
                 </TabItem>
                 <TabItem Header="Permissions">
                     <StackPanel>
                         <CheckBox x:Name="IsPublic" Content="Public" Margin="5"/>
                         <StackPanel Orientation="Horizontal">
-                            <TextBox x:Name="PermissionName" Width="200" Margin="5" Grid.Row="6"/>
-                            <RadioButton x:Name="PermissionRead" Content="Read" Margin="5" Grid.Row="7"/>
-                            <RadioButton x:Name="PermissionWrite" Content="Write" Margin="5" Grid.Row="8"/>
-                            <Button x:Name="AddPermission" Content="Add" Margin="5"/>
+                            <TextBox x:Name="CurrentPermission_UserName" Width="195" Margin="5" Grid.Row="6"/>
+                            <RadioButton x:Name="CurrentPermission_Read" Content="Read" Margin="5" Grid.Row="7"/>
+                            <RadioButton x:Name="CurrentPermission_Write" Content="Write" Margin="5" Grid.Row="8"/>
+                            <Button x:Name="AddPermission" Content="Update" Margin="5"/>
                         </StackPanel>
                         <TextBlock Margin="5" Visibility="{Binding Path=IsPublic,FallbackValue=Collapsed, Converter={StaticResource BoolToVisible}}">
                 <Run Text="Public URL:" />
                 <Run Text="{Binding PublicUrl,FallbackValue='http://someurl'}" />
                         </TextBlock>
-                        <DataGrid x:Name="Permissions" AutoGenerateColumns="False" GridLinesVisibility="None" IsReadOnly="True" >
+                        <DataGrid x:Name="Permissions" AutoGenerateColumns="False" GridLinesVisibility="None" 
+                                  IsReadOnly="False" 
+                                  CanUserDeleteRows="True"
+                                  CanUserAddRows="False"
+                                  >
                             <DataGrid.Columns>
-                                <DataGridTextColumn Binding="{Binding UserName}" Header="Name"  MinWidth="150" />
-                                <DataGridTextColumn Binding="{Binding Value}" Header="Permission"/>
+                                <DataGridTextColumn Binding="{Binding UserName}" Header="Name"  MinWidth="150" IsReadOnly="True" />
+                                <DataGridTextColumn Binding="{Binding Value}" Header="Permission" IsReadOnly="True"/>
                             </DataGrid.Columns>
                         </DataGrid>
+                        <Button x:Name="DeletePermission" Content="Delete" 
+                                Command="DataGrid.DeleteCommand" CommandTarget="{Binding ElementName=Permissions}"
+                                Style="{StaticResource ResourceKey=ButtonStyle}" HorizontalAlignment="Left" />
                     </StackPanel>
                 </TabItem>
                 <!--<TabItem Header="Other">
index dfadea3..a954673 100644 (file)
  * -----------------------------------------------------------------------
  */
 #endregion
-using System.Collections;
-using System.Collections.Concurrent;
+
 using System.Collections.ObjectModel;
-using System.Collections.Specialized;
 using System.ComponentModel.Composition;
-using System.Diagnostics;
 using System.Diagnostics.Contracts;
 using System.Drawing;
 using System.IO;
@@ -55,7 +52,6 @@ using System.Windows.Interop;
 using System.Windows.Media.Imaging;
 using Caliburn.Micro;
 using Pithos.Client.WPF.FileProperties;
-using Pithos.Client.WPF.Properties;
 using Pithos.Core;
 using Pithos.Interfaces;
 using Pithos.Network;
@@ -63,9 +59,7 @@ using Pithos.Network;
 namespace Pithos.Client.WPF
 {
     using System;
-    using System.Collections.Generic;
     using System.Linq;
-    using System.Text;
 
     /// <summary>
     /// TODO: Update summary.
@@ -272,79 +266,51 @@ namespace Pithos.Client.WPF
                 NotifyOfPropertyChange(()=>SynchStatus);
             }
         }
-
-        private string _permissionName;
-        public string PermissionName
-        {
-            get { return _permissionName; }
-            set
-            {
-                _permissionName = value;
-                NotifyOfPropertyChange(()=>PermissionName);
-                NotifyOfPropertyChange(() => CanAddPermission);
-            }
-        }
-
+        
         private Permission _currentPermission;
         public Permission CurrentPermission
         {
             get { return _currentPermission; }
             set
-            {
-                _currentPermission = value;
-                PermissionName = CurrentPermission.UserName;
-                PermissionRead = CurrentPermission.Read;
+            {                
+                _currentPermission = (value==null)?new Permission() : value.Clone();
+                _currentPermission.PropertyChanged += (o, e) => NotifyOfPropertyChange(() => CanAddPermission);
 
                 NotifyOfPropertyChange(()=>CurrentPermission);
-                NotifyOfPropertyChange(() => PermissionName);
-            }
-        }
-
-
-        private bool _permissionRead=true;
-        public bool PermissionRead
-        {
-            get { return _permissionRead; }
-            set
-            {
-                _permissionRead = value;
-                NotifyOfPropertyChange(()=>PermissionRead);
-                NotifyOfPropertyChange(() => PermissionWrite);
-            }
-        }
-
-        public bool PermissionWrite
-        {
-            get
-            {
-                return !PermissionRead;
-            }
-            set
-            {
-                _permissionRead = !value;
-                NotifyOfPropertyChange(() => PermissionRead);
-                NotifyOfPropertyChange(()=>PermissionWrite);
+                NotifyOfPropertyChange(() => CanAddPermission);
             }
         }
 
         public bool CanAddPermission
         {
-            get { return !String.IsNullOrWhiteSpace(PermissionName); }
+            get { return !String.IsNullOrWhiteSpace(CurrentPermission.UserName); }
         }
 
         public void AddPermission()
         {
-            Permissions.Add(new Permission{Read=PermissionRead,UserName=PermissionName,Write=!PermissionRead});   
+            var existingPermission = Permissions.FirstOrDefault(perm => perm.UserName == CurrentPermission.UserName);
+            if (existingPermission==null)
+                Permissions.Add(CurrentPermission.Clone());
+            else
+            {
+                existingPermission.Read = CurrentPermission.Read;
+            }
         }
 
         public bool CanAddTag
         {
-            get { return CurrentTag!=null && !String.IsNullOrWhiteSpace(CurrentTag.Name); }
+            get { return !String.IsNullOrWhiteSpace(CurrentTag.Name); }
         }
 
         public void AddTag()
         {
-            Tags.Add(CurrentTag);   
+            var existingTag = Tags.FirstOrDefault(tag => tag.Name == CurrentTag.Name);           
+            if (existingTag == null)
+                Tags.Add(CurrentTag.Clone());
+            else
+            {
+                existingTag.Value = CurrentTag.Value;
+            }
         }
 
 
@@ -379,6 +345,11 @@ namespace Pithos.Client.WPF
             _permissions = new ObservableCollection<Permission>();
             _permissions.CollectionChanged += (sender, evt) => { PermissionsChanged = true; };
             
+
+            CurrentPermission=new Permission();
+            CurrentTag=new MetaValue();
+
+
             Shell = shell;
             LocalFileName = localFileName;
             pithosFile.ContinueWith(t =>
@@ -398,7 +369,7 @@ namespace Pithos.Client.WPF
 
         private void ShowError(AggregateException exception)
         {
-            MessageView view = null;
+            MessageView view;
             if (exception.InnerException is RetryException)
                 view = new MessageView(exception.InnerException as RetryException);
             else if (exception.InnerException is WebException)
@@ -476,8 +447,11 @@ namespace Pithos.Client.WPF
             get { return _currentTag; }
             set
             {
-                _currentTag = value;
+                _currentTag = (value==null)?new MetaValue() : value.Clone();
+                _currentTag.PropertyChanged += (o, e) => NotifyOfPropertyChange(() => CanAddTag);
+
                 NotifyOfPropertyChange(()=>CurrentTag);
+                NotifyOfPropertyChange(() => CanAddTag);
             }
         }
 
index e974f60..c59effd 100644 (file)
@@ -79,5 +79,9 @@ namespace Pithos.Client.WPF
         }
 
 
+        public MetaValue Clone()
+        {
+            return new MetaValue {Name = Name, Value = Value};
+        }
     }
 }
\ No newline at end of file
index aca98f3..480d70d 100644 (file)
@@ -58,7 +58,7 @@ namespace Pithos.Client.WPF
             }
         }
 
-        private bool _read;
+        private bool _read=true;
         public bool Read
         {
             get { return _read; }
@@ -115,5 +115,9 @@ namespace Pithos.Client.WPF
             
         }
 
+        public Permission Clone()
+        {
+            return new Permission {UserName = UserName, Read = Read};
+        }
     }
 }
\ No newline at end of file