Changeset 6562


Ignore:
Timestamp:
Oct 1, 2015, 6:28:34 PM (6 years ago)
Author:
konze
Message:

CrypCloudManager:

  • added "download" Button
  • added progressbar for epoch to job detailview
  • fix visualization of bitmask
  • i am pretty sure, i did more. oh yeah, here it comes
  • job list's width now depends on the viewport
  • disabled resize for joblist's columns
  • added vertical scrollbar to joblist
Location:
trunk
Files:
3 added
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/CrypCloud/CrypCloudCore/CrypCloudCore.cs

    r6559 r6562  
    1717using voluntLib.common.interfaces;
    1818using voluntLib.logging;
     19using voluntLib.managementLayer.localStateManagement.states;
    1920using WorkspaceManager.Model;
    2021
     
    371372
    372373        #endregion
     374
     375        public BigInteger GetEpochOfJob(NetworkJob job)
     376        {
     377            var stateOfJob = voluntLib.GetStateOfJob(job.JobID);
     378            return (stateOfJob != null) ? stateOfJob.EpochNumber : 0;
     379        }
    373380    }
    374381}
  • trunk/CrypCloud/CrypCloudManager/CrypCloudManager.csproj

    r6561 r6562  
    9898      <DependentUpon>Resources.resx</DependentUpon>
    9999    </Compile>
     100    <Compile Include="Screens\Converter\InvertBoolConverter.cs" />
     101    <Compile Include="Screens\Converter\AddMarginForProgressBarConverter.cs" />
    100102    <Compile Include="Screens\Converter\BoolToVisibilityConverter.cs" />
    101103    <Compile Include="Screens\Converter\StringNullOrEmptyToVisibilityConverter .cs" />
     
    264266    <Resource Include="Images\ButtonIcons\chevron-right.png" />
    265267    <Resource Include="DetailedDescription\doc.xml" />
     268    <Resource Include="Images\ButtonIcons\download.png" />
    266269    <Content Include="Images\ButtonIcons\license.txt" />
    267270  </ItemGroup>
     
    270273  </ItemGroup>
    271274  <ItemGroup>
    272     <None Include="app.config" />
    273275    <None Include="Settings.settings">
    274276      <Generator>SettingsSingleFileGenerator</Generator>
  • trunk/CrypCloud/CrypCloudManager/Properties/Resources.Designer.cs

    r6554 r6562  
    224224       
    225225        /// <summary>
     226        ///   Sucht eine lokalisierte Zeichenfolge, die Load ähnelt.
     227        /// </summary>
     228        public static string _JobList_btn_download {
     229            get {
     230                return ResourceManager.GetString("_JobList_btn_download", resourceCulture);
     231            }
     232        }
     233       
     234        /// <summary>
    226235        ///   Sucht eine lokalisierte Zeichenfolge, die Logout ähnelt.
    227236        /// </summary>
     
    260269       
    261270        /// <summary>
     271        ///   Sucht eine lokalisierte Zeichenfolge, die Date ähnelt.
     272        /// </summary>
     273        public static string _JobList_col_Date {
     274            get {
     275                return ResourceManager.GetString("_JobList_col_Date", resourceCulture);
     276            }
     277        }
     278       
     279        /// <summary>
    262280        ///   Sucht eine lokalisierte Zeichenfolge, die Job ID ähnelt.
    263281        /// </summary>
     
    283301            get {
    284302                return ResourceManager.GetString("_JobList_col_Progress", resourceCulture);
     303            }
     304        }
     305       
     306        /// <summary>
     307        ///   Sucht eine lokalisierte Zeichenfolge, die Epoch: ähnelt.
     308        /// </summary>
     309        public static string _JobList_EpochProgress {
     310            get {
     311                return ResourceManager.GetString("_JobList_EpochProgress", resourceCulture);
    285312            }
    286313        }
  • trunk/CrypCloud/CrypCloudManager/Properties/Resources.de.resx

    r6554 r6562  
    288288    <value>CrypCloud Einstellungen</value>
    289289  </data>
     290  <data name="_JobList_btn_download" xml:space="preserve">
     291    <value>Laden</value>
     292  </data>
     293  <data name="_JobList_col_Date" xml:space="preserve">
     294    <value>Datum</value>
     295  </data>
     296  <data name="_JobList_EpochProgress" xml:space="preserve">
     297    <value>Epoche:</value>
     298  </data>
    290299</root>
  • trunk/CrypCloud/CrypCloudManager/Properties/Resources.resx

    r6554 r6562  
    287287    <value>CrypCloud Settings</value>
    288288  </data>
     289  <data name="_JobList_btn_download" xml:space="preserve">
     290    <value>Load</value>
     291  </data>
     292  <data name="_JobList_col_Date" xml:space="preserve">
     293    <value>Date</value>
     294  </data>
     295  <data name="_JobList_EpochProgress" xml:space="preserve">
     296    <value>Epoch:</value>
     297  </data>
    289298</root>
  • trunk/CrypCloud/CrypCloudManager/Screens/Converter/StringNullOrEmptyToVisibilityConverter .cs

    r6449 r6562  
    1010    public class StringNullOrEmptyToVisibilityConverter : System.Windows.Markup.MarkupExtension, IValueConverter
    1111    {
     12        public StringNullOrEmptyToVisibilityConverter()
     13        {
     14        }
     15
    1216        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    1317        {
  • trunk/CrypCloud/CrypCloudManager/Screens/JobList.xaml

    r6549 r6562  
    77             xmlns:converter="clr-namespace:CrypCloud.Manager.Screens.Converter"
    88             xmlns:pocos="clr-namespace:CrypCloud.Manager.ViewModels.Pocos"
    9              mc:Ignorable="d">
     9             mc:Ignorable="d" >
    1010
    1111    <UserControl.Resources>
     
    1313            <converter:BoolToVisibilityConverter FalseValue="Collapsed" x:Key="show" />
    1414            <converter:BoolToVisibilityConverter TrueValue="Collapsed" FalseValue="Visible" x:Key="hide" />
     15            <converter:InvertBoolConverter x:Key="not" />
    1516            <ResourceDictionary.MergedDictionaries>
    1617                <ResourceDictionary Source="Styles/Button.xaml" />
     
    2425    </UserControl.DataContext>
    2526
    26     <StackPanel Visibility="{Binding Path=IsActive, Converter={StaticResource show}}" VerticalAlignment="Stretch"
     27    <!-- Visibility="{Binding IsActive, Converter={converter:BoolToVisibilityConverter}, FallbackValue=Visible, TargetNullValue=Visible}"-->
     28    <StackPanel VerticalAlignment="Stretch"  Visibility="{Binding IsActive, Converter={converter:BoolToVisibilityConverter}, FallbackValue=Visible, TargetNullValue=Visible}"
    2729                HorizontalAlignment="Stretch" Margin="30">
    2830        <!-- bottom controls -->
     
    5052                    <ColumnDefinition />
    5153                </Grid.ColumnDefinitions>
    52                 <Image Name="Erroricon" Width="25" Grid.Row="1" Source="..\..\images\error.png"
     54                <Image Name="Erroricon" Width="25" Grid.Row="1"
    5355                       HorizontalAlignment="Left" />
    5456                <TextBlock Text="{Binding Path=ErrorMessage}" Foreground="Red" Margin="35,0,0,0" Grid.Row="1"
     
    6264                <ColumnDefinition Width="300"/>
    6365            </Grid.ColumnDefinitions>
    64             <ListView ItemsSource="{Binding RunningJobs}"
    65                       SelectedItem="{Binding SelectedJob, Mode=TwoWay}"
    66                       Grid.Column="0"
    67                       Height="470" x:Name="JobListView"
    68                       ScrollViewer.HorizontalScrollBarVisibility="Auto"
    69                       ScrollViewer.VerticalScrollBarVisibility="Disabled">
     66
     67            <!--This is the hidden helper Grid which does the resizing -->
     68            <Grid  Grid.Column="0">
     69                <Grid.ColumnDefinitions>
     70                    <ColumnDefinition Width="{Binding ElementName=CreationDate, Path=ActualWidth}"/>
     71                    <ColumnDefinition Width="{Binding ElementName=PrintableID, Path=ActualWidth}"/>
     72                    <ColumnDefinition Width="{Binding ElementName=Name, Path=ActualWidth}"/>
     73                    <ColumnDefinition Width="{Binding ElementName=Creator, Path=ActualWidth}"/>
     74                    <ColumnDefinition Width="*"/>
     75                    <ColumnDefinition Width="10"/>
     76                    <ColumnDefinition Width="{Binding ElementName=OpenJobCommand, Path=ActualWidth}"/>
     77                    <ColumnDefinition Width="{Binding ElementName=DeleteJobCommand, Path=ActualWidth}"/>
     78                </Grid.ColumnDefinitions>
     79                <Grid Grid.Column="4" x:Name="helperField"/>
     80            </Grid>
     81           
     82            <ListView ItemsSource="{Binding RunningJobs}" SelectedItem="{Binding SelectedJob, Mode=TwoWay}" Grid.Column="0"
     83                      Height="470" x:Name="JobListView" ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollBarVisibility="Auto">
    7084                <ListView.View>
    7185                    <GridView>
    72                         <GridViewColumn Header="{Loc  _JobList_col_Date}" DisplayMemberBinding="{Binding CreationDate}"
    73                                         Width="150" />
    74                         <GridViewColumn Header="{Loc _JobList_col_Id}" DisplayMemberBinding="{Binding PrintableID}"
    75                                         Width="250" />
    76                         <GridViewColumn Header="{Loc  _JobList_col_Name}" DisplayMemberBinding="{Binding Name}"
    77                                         Width="100" />
    78                         <GridViewColumn Header="{Loc  _JobList_col_Creator}" DisplayMemberBinding="{Binding Creator}"
    79                                         Width="100" />
    80                         <GridViewColumn Header="{Loc _JobList_col_Progress}" Width="330">
     86                        <GridView.ColumnHeaderContainerStyle>
     87                            <Style TargetType="{x:Type GridViewColumnHeader}">
     88                                <Setter Property="IsEnabled" Value="False"/>
     89                            </Style>
     90                        </GridView.ColumnHeaderContainerStyle>
     91
     92                        <GridViewColumn x:Name="CreationDate" Header="{Loc  _JobList_col_Date}" DisplayMemberBinding="{Binding CreationDate}" Width="175" />
     93                        <GridViewColumn x:Name="PrintableID" Header="{Loc _JobList_col_Id}" DisplayMemberBinding="{Binding PrintableID}" Width="250" />
     94                        <GridViewColumn x:Name="Name" Header="{Loc  _JobList_col_Name}" DisplayMemberBinding="{Binding Name}" Width="100" />
     95                        <GridViewColumn x:Name="Creator" Header="{Loc  _JobList_col_Creator}" DisplayMemberBinding="{Binding Creator}" Width="100" />
     96                        <GridViewColumn x:Name="Progress" Header="{Loc _JobList_col_Progress}" Width="{Binding ElementName=helperField, Path=ActualWidth}">
    8197                            <GridViewColumn.CellTemplate>
    8298                                <DataTemplate>
    8399                                    <Grid>
    84100                                        <ProgressBar Name="progress" DataContext="{Binding}" Minimum="0" Maximum="100"
    85                                                      Value="{Binding ProgressPercentage}" Width="340" Height="25" />
     101                                                     Value="{Binding ProgressPercentage}"
     102                                                     Width="{Binding ElementName=helperField, Path=ActualWidth,
     103                                            Converter={converter:AddMarginForProgressBarConverter}}" Height="25" />
     104                                       
    86105                                        <TextBlock DataContext="{Binding}" Text="{Binding ProgressTotal}"
    87106                                                   HorizontalAlignment="Center"
     
    90109                                </DataTemplate>
    91110                            </GridViewColumn.CellTemplate>
    92                         </GridViewColumn>
    93 
    94                         <GridViewColumn Header="" Width="110">
     111                         </GridViewColumn>
     112                       
     113                        <GridViewColumn x:Name="OpenJobCommand" Header="" Width="120">
    95114                            <GridViewColumn.CellTemplate>
    96115                                <DataTemplate>
    97116                                    <StackPanel Orientation="Horizontal">
    98117                                        <Button Command="{Binding DataContext.OpenJobCommand, ElementName=JobListView}"
    99                                                 CommandParameter="{Binding}" DataContext="{Binding}"
    100                                                 Width="80" Margin="10, 5">
     118                                                CommandParameter="{Binding}" DataContext="{Binding}"
     119                                                Visibility="{Binding HasWorkspace, Converter={StaticResource show}}"
     120                                                Width="90" Margin="10, 5">
    101121                                            <StackPanel Orientation="Horizontal">
    102122                                                <Image Source="../Images/ButtonIcons/external-link.png" Width="16" />
    103123                                                <Label Content="{Loc _JobList_btn_open}" />
     124                                            </StackPanel>
     125
     126                                        </Button>
     127                                       
     128                                        <Button Command="{Binding DataContext.DownloadWorkspaceCommand, ElementName=JobListView}"
     129                                                CommandParameter="{Binding}" DataContext="{Binding}"
     130                                                Visibility="{Binding HasWorkspace, Converter={StaticResource hide}}"
     131                                                Width="90" Margin="10, 5">
     132                                            <StackPanel Orientation="Horizontal">
     133                                                <Image Source="../Images/ButtonIcons/download.png" Width="16" />
     134                                                <Label Content="{Loc _JobList_btn_download}" />
    104135                                            </StackPanel>
    105136                                        </Button>
     
    109140                        </GridViewColumn>
    110141
    111                         <GridViewColumn Header="" Width="110">
     142                        <GridViewColumn x:Name="DeleteJobCommand" Header="" Width="120">
    112143                            <GridViewColumn.CellTemplate>
    113144                                <DataTemplate>
     
    117148                                            Command="{Binding DataContext.DeleteJobCommand, ElementName=JobListView}"
    118149                                            CommandParameter="{Binding}" DataContext="{Binding}"
    119                                             Width="80" Margin="10, 5">
     150                                            Width="90" Margin="10, 5">
    120151                                            <StackPanel Orientation="Horizontal">
    121152                                                <Image Source="../Images/ButtonIcons/trash-o.png" Width="16" />
     
    135166                </ListView.ItemContainerStyle>
    136167            </ListView>
    137            
     168
    138169            <StackPanel Grid.Column="2" Background="White" >
    139170                <Grid>
     
    144175                    <Grid.RowDefinitions>
    145176                        <RowDefinition Height="5"/>
     177                        <RowDefinition/>
     178                        <RowDefinition Height="*" MaxHeight="200" />
    146179                        <RowDefinition />
    147                         <RowDefinition Height="*" MaxHeight="200" />
    148180                    </Grid.RowDefinitions>
    149181
     
    152184
    153185                    <Label Grid.Column="0" Grid.Row="2" FontWeight="Bold" Content="{Loc _JobList_jobDescription}" />
    154                     <TextBlock TextWrapping="Wrap" Width="200"  Grid.Column="1" Grid.Row="2" Text="{Binding ElementName=JobListView, Path=SelectedItem.Description}"></TextBlock>
    155 
     186                    <TextBlock TextWrapping="Wrap" Width="200"  Grid.Column="1" Grid.Row="2"
     187                               Text="{Binding ElementName=JobListView, Path=SelectedItem.Description}"></TextBlock>
    156188                </Grid>
    157 
     189               
     190                <Label FontWeight="Bold" Content="{Loc _JobList_EpochProgress}"  />
     191                <Grid>
     192                    <ProgressBar Minimum="0" Maximum="{Binding ElementName=JobListView, Path=SelectedItem.MaxEpoch}"
     193                                  Value="{Binding ElementName=JobListView, Path=SelectedItem.Epoch}" Width="200" Height="25" />
     194                    <TextBlock  Text="{Binding ElementName=JobListView, Path=SelectedItem.EpochProgress}"
     195                                HorizontalAlignment="Center" VerticalAlignment="Center" />
     196                </Grid>
     197               
    158198                <Label FontWeight="Bold" Content="{Loc _JobList_bitmask}"  />
    159                 <Border BorderThickness="1" Width="200" BorderBrush="#FF000000" VerticalAlignment="Top">
    160                     <Image  Width="200" Height="200" Source="{Binding ElementName=JobListView, Path=SelectedItem.Visualization}" />
     199                <Border BorderThickness="1" Width="199" Height="199" BorderBrush="#FF000000" VerticalAlignment="Top">
     200                    <Image Width="200" Height="200" Source="{Binding ElementName=JobListView, Path=SelectedItem.Visualization}" />
    161201                </Border>
    162202
  • trunk/CrypCloud/CrypCloudManager/ViewModels/JobListVM.cs

    r6549 r6562  
    4949            OpenJobCommand = new RelayCommand(OpenJob);
    5050            DeleteJobCommand = new RelayCommand(DeleteJob);
     51            DownloadWorkspaceCommand = new RelayCommand(DownloadJob);
    5152
    5253            RunningJobs = new ObservableCollection<NetworkJobItem>();
     
    119120        #region open job
    120121
    121         private void OpenJob(object it)
     122        private void DownloadJob(object it)
    122123        {
    123124            var jobItem = it as NetworkJobItem;
    124125            if (jobItem == null) return; // shoudnt happen anyways
    125126
    126             crypCloudCore.JobListChanged += WaitForWorkspaceAndOpenIt(jobItem.Id);
    127127            crypCloudCore.DownloadWorkspaceOfJob(jobItem.Id);
    128128        }
    129129
    130         private EventHandler WaitForWorkspaceAndOpenIt(BigInteger id)
    131         {
    132             EventHandler waitForWorkspace = null;
    133             waitForWorkspace = (s, e) =>
    134             {
    135                 var workspaceModel = crypCloudCore.GetWorkspaceOfJob(id);
    136                 if (workspaceModel == null) return;
    137                
    138                 crypCloudCore.JobListChanged -= waitForWorkspace;
    139                 UiContext.StartNew(() => Manager.OpenWorkspaceInNewTab(workspaceModel));
    140             };
    141 
    142             return waitForWorkspace;
     130
     131        private void OpenJob(object it)
     132        {
     133            var jobItem = it as NetworkJobItem;
     134            if (jobItem == null) return; // shoudnt happen anyways
     135
     136            if ( ! jobItem.HasWorkspace)
     137            {
     138                ErrorMessage = "Cannot open job, without downloding it first";
     139                return;
     140            }
     141
     142            var workspaceModel = crypCloudCore.GetWorkspaceOfJob(jobItem.Id);
     143            UiContext.StartNew(() => Manager.OpenWorkspaceInNewTab(workspaceModel));
    143144        }
    144145
     
    167168                UserCanDeleteJob = crypCloudCore.UserCanDeleteJob(job),
    168169                HasWorkspace = job.HasPayload(),
    169                 CreationDate = crypCloudCore.GetCreationDateOfJob(job.JobID)
     170                CreationDate = crypCloudCore.GetCreationDateOfJob(job.JobID),
     171                Epoch = crypCloudCore.GetEpochOfJob(job),
     172                MaxEpoch = job.StateConfig.MaximumEpoch
    170173            };
    171174
  • trunk/CrypCloud/CrypCloudManager/ViewModels/Pocos/NetworkJobItem.cs

    r6549 r6562  
    2222        public string Name { get; set; }
    2323        public string Description { get; set; }
     24        public BigInteger Epoch { get; set; }
    2425        public BitmapSource Visualization{ get; set; }
    2526        public bool UserCanDeleteJob { get; set; }
     
    5455        }
    5556
     57        public string EpochProgress
     58        {
     59            get
     60            {
     61                return Epoch + "/" + MaxEpoch;
     62            }
     63            set{} //for binding only
     64        }
     65
    5666        public string ProgressTotal
    5767        {
     
    6171            }
    6272            set { } //for binding only
    63         } 
     73        }
     74
     75        public BigInteger MaxEpoch { get; set; }
    6476    }
    6577}
  • trunk/LibSource/voluntLib/VoluntLib.cs

    r6559 r6562  
    732732        }
    733733
     734        public EpochState GetStateOfJob(BigInteger jobId)
     735        {
     736            ThrowErrorIfNotInitialized();
     737            var localStates = ManagementLayer.LocalStates.Values;
     738            var localStateManager = localStates.FirstOrDefault(state => state.JobID == jobId);
     739            if (localStateManager != null)
     740            {
     741                return localStateManager.LocalState;
     742            }
     743
     744            return null;
     745        }
     746
    734747        #region jobID overloads
    735748
     
    9961009        #endregion
    9971010
     1011       
    9981012    }
    9991013}
Note: See TracChangeset for help on using the changeset viewer.