mirror of
				https://github.com/chibicitiberiu/rainmeter-studio.git
				synced 2024-02-24 04:33:31 +00:00 
			
		
		
		
	Implemented project manager
This commit is contained in:
		@@ -24,11 +24,11 @@ namespace RainmeterStudio.UI.Dialogs
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Gets or sets the currently selected file format
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public DocumentFormat SelectedFormat
 | 
			
		||||
        public DocumentTemplate SelectedFormat
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
                return listFormats.SelectedItem as DocumentFormat;
 | 
			
		||||
                return listFormats.SelectedItem as DocumentTemplate;
 | 
			
		||||
            }
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										102
									
								
								RainmeterStudio/UI/Dialogs/CreateProjectDialog.xaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								RainmeterStudio/UI/Dialogs/CreateProjectDialog.xaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,102 @@
 | 
			
		||||
<Window x:Class="RainmeterStudio.UI.Dialogs.CreateProjectDialog"
 | 
			
		||||
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 | 
			
		||||
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 | 
			
		||||
        xmlns:r="clr-namespace:RainmeterStudio.Resources"
 | 
			
		||||
        xmlns:toremove="clr-namespace:RainmeterStudio.Model"
 | 
			
		||||
        Title="{x:Static r:Strings.ProjectCreateDialog_Title}" Height="320" Width="480"
 | 
			
		||||
        WindowStartupLocation="CenterOwner"
 | 
			
		||||
        WindowStyle="ToolWindow" ShowInTaskbar="False">
 | 
			
		||||
 | 
			
		||||
    <Grid Background="WhiteSmoke">
 | 
			
		||||
        <Grid.RowDefinitions>
 | 
			
		||||
            <RowDefinition />
 | 
			
		||||
            <RowDefinition Height="Auto" />
 | 
			
		||||
            <RowDefinition Height="Auto" />
 | 
			
		||||
        </Grid.RowDefinitions>
 | 
			
		||||
 | 
			
		||||
        <ListView Name="listTemplates" Grid.Row="0" SelectedIndex="0"
 | 
			
		||||
                  IsEnabled="False">
 | 
			
		||||
            <!-- TODO: remove -->
 | 
			
		||||
            <toremove:DocumentTemplate Name="Empty project" 
 | 
			
		||||
                                       Description="Create a new empty project" >
 | 
			
		||||
            </toremove:DocumentTemplate>
 | 
			
		||||
            
 | 
			
		||||
            <ListView.ItemTemplate>
 | 
			
		||||
                <DataTemplate>
 | 
			
		||||
                    <DockPanel>
 | 
			
		||||
                        <Image DockPanel.Dock="Left" Source="{Binding Icon}" 
 | 
			
		||||
                               Width="32" Height="32" Margin="2"
 | 
			
		||||
                               Stretch="Uniform" VerticalAlignment="Top" />
 | 
			
		||||
                        <StackPanel Orientation="Vertical" VerticalAlignment="Center">
 | 
			
		||||
                            <TextBlock Text="{Binding Name}" FontWeight="Bold" />
 | 
			
		||||
                            <TextBlock Text="{Binding Description}" />
 | 
			
		||||
                        </StackPanel>
 | 
			
		||||
                    </DockPanel>
 | 
			
		||||
                </DataTemplate>
 | 
			
		||||
            </ListView.ItemTemplate>
 | 
			
		||||
            <ListView.GroupStyle>
 | 
			
		||||
                <GroupStyle>
 | 
			
		||||
                    <GroupStyle.HeaderTemplate>
 | 
			
		||||
                        <DataTemplate>
 | 
			
		||||
                            <TextBlock FontWeight="Bold" FontSize="13pt" Text="{Binding Name}" />
 | 
			
		||||
                        </DataTemplate>
 | 
			
		||||
                    </GroupStyle.HeaderTemplate>
 | 
			
		||||
                </GroupStyle>
 | 
			
		||||
            </ListView.GroupStyle>
 | 
			
		||||
        </ListView>
 | 
			
		||||
 | 
			
		||||
        <Grid Grid.Row="1">
 | 
			
		||||
            <Grid.RowDefinitions>
 | 
			
		||||
                <RowDefinition />
 | 
			
		||||
                <RowDefinition />
 | 
			
		||||
                <RowDefinition />
 | 
			
		||||
                <RowDefinition />
 | 
			
		||||
            </Grid.RowDefinitions>
 | 
			
		||||
            <Grid.ColumnDefinitions>
 | 
			
		||||
                <ColumnDefinition Width="Auto" />
 | 
			
		||||
                <ColumnDefinition />
 | 
			
		||||
                <ColumnDefinition Width="Auto" />
 | 
			
		||||
                <ColumnDefinition Width="Auto" />
 | 
			
		||||
            </Grid.ColumnDefinitions>
 | 
			
		||||
 | 
			
		||||
            <!-- Name -->
 | 
			
		||||
            <TextBlock Grid.Row="0" Text="{x:Static r:Strings.ProjectCreateDialog_Name}" />
 | 
			
		||||
 | 
			
		||||
            <TextBox Name="textName" 
 | 
			
		||||
                     Grid.Row="0" Grid.Column="1"
 | 
			
		||||
                     TextChanged="textName_TextChanged"/>
 | 
			
		||||
            
 | 
			
		||||
            <!-- Location -->
 | 
			
		||||
            <TextBlock Grid.Row="1" Text="{x:Static r:Strings.ProjectCreateDialog_Location}" />
 | 
			
		||||
            <ComboBox Name="textLocation" IsEditable="True"
 | 
			
		||||
                      Grid.Row="1" Grid.Column="1" />
 | 
			
		||||
            <Button Grid.Row="1" Grid.Column="2" Content="{x:Static r:Strings.Dialog_Browse}"/>
 | 
			
		||||
            <CheckBox Name="checkLocationDefault" 
 | 
			
		||||
                      Grid.Row="1" Grid.Column="3" 
 | 
			
		||||
                      Content="{x:Static r:Strings.ProjectCreateDialog_LocationDefault}" 
 | 
			
		||||
                      VerticalAlignment="Center"/>
 | 
			
		||||
 | 
			
		||||
            <!-- Path -->
 | 
			
		||||
            <TextBlock Grid.Row="2" Text="{x:Static r:Strings.ProjectCreateDialog_Path}"/>
 | 
			
		||||
            <ComboBox Name="textPath" 
 | 
			
		||||
                      IsEditable="True"
 | 
			
		||||
                     Grid.Row="2" Grid.Column="1" />
 | 
			
		||||
            <Button Grid.Row="2" Grid.Column="2" Content="{x:Static r:Strings.Dialog_Browse}" />
 | 
			
		||||
            <CheckBox Name="checkCreateDirectory" 
 | 
			
		||||
                      Grid.Row="2" Grid.Column="3" 
 | 
			
		||||
                      Content="{x:Static r:Strings.ProjectCreateDialog_PathCreateFolder}"
 | 
			
		||||
                      IsChecked="True"
 | 
			
		||||
                      Checked="checkCreateDirectory_CheckChanged"
 | 
			
		||||
                      Unchecked="checkCreateDirectory_CheckChanged"
 | 
			
		||||
                      VerticalAlignment="Center"/>
 | 
			
		||||
 | 
			
		||||
        </Grid>
 | 
			
		||||
 | 
			
		||||
        <StackPanel Grid.Row="2" Orientation="Horizontal"
 | 
			
		||||
                    HorizontalAlignment="Right">
 | 
			
		||||
            <Button Command="{Binding CreateCommand}" IsDefault="True" Content="{x:Static r:Strings.Dialog_Create}" />
 | 
			
		||||
            <Button Command="{Binding CancelCommand}" IsCancel="True" Content="{x:Static r:Strings.Dialog_Cancel}" />
 | 
			
		||||
        </StackPanel>
 | 
			
		||||
 | 
			
		||||
    </Grid>
 | 
			
		||||
</Window>
 | 
			
		||||
							
								
								
									
										207
									
								
								RainmeterStudio/UI/Dialogs/CreateProjectDialog.xaml.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										207
									
								
								RainmeterStudio/UI/Dialogs/CreateProjectDialog.xaml.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,207 @@
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Windows;
 | 
			
		||||
using System.Windows.Controls;
 | 
			
		||||
using System.Windows.Controls.Primitives;
 | 
			
		||||
using System.Windows.Data;
 | 
			
		||||
using System.Windows.Documents;
 | 
			
		||||
using System.Windows.Input;
 | 
			
		||||
using System.Windows.Media;
 | 
			
		||||
using System.Windows.Media.Imaging;
 | 
			
		||||
using System.Windows.Shapes;
 | 
			
		||||
using RainmeterStudio.Business;
 | 
			
		||||
using RainmeterStudio.Model;
 | 
			
		||||
 | 
			
		||||
namespace RainmeterStudio.UI.Dialogs
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Interaction logic for CreateProjectDialog.xaml
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public partial class CreateProjectDialog : Window
 | 
			
		||||
    {
 | 
			
		||||
        #region Commands
 | 
			
		||||
 | 
			
		||||
        private Command _createCommand;
 | 
			
		||||
        public Command CreateCommand
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
                if (_createCommand == null)
 | 
			
		||||
                    _createCommand = new Command("CreateCommand", Create, Validate);
 | 
			
		||||
 | 
			
		||||
                return _createCommand;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private Command _cancelCommand;
 | 
			
		||||
        public Command CancelCommand
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
                if (_cancelCommand == null)
 | 
			
		||||
                    _cancelCommand = new Command("CancelCommand", Cancel);
 | 
			
		||||
 | 
			
		||||
                return _cancelCommand;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Properties
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Gets or sets the currently selected file format
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public DocumentTemplate SelectedTemplate
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
                return listTemplates.SelectedItem as DocumentTemplate;
 | 
			
		||||
            }
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                listTemplates.SelectedItem = value;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Gets or sets the path
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string SelectedName
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
                return textName.Text;
 | 
			
		||||
            }
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                textName.Text = value;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Gets or sets the path
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string SelectedLocation
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
                return textLocation.Text;
 | 
			
		||||
            }
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                textLocation.Text = value;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Gets or sets the path
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string SelectedPath
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
                return textPath.Text;
 | 
			
		||||
            }
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                textPath.Text = value;
 | 
			
		||||
                _pathUserSet = true;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Private fields
 | 
			
		||||
 | 
			
		||||
        private bool _pathUserSet = false;
 | 
			
		||||
        private bool _ignoreNextChange = false;
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        public CreateProjectDialog()
 | 
			
		||||
        {
 | 
			
		||||
            InitializeComponent();
 | 
			
		||||
 | 
			
		||||
            textLocation.AddHandler(TextBoxBase.TextChangedEvent, new TextChangedEventHandler(textLocation_TextChanged));
 | 
			
		||||
            textPath.AddHandler(TextBoxBase.TextChangedEvent, new TextChangedEventHandler(textPath_TextChanged));
 | 
			
		||||
 | 
			
		||||
            DataContext = this;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void Create()
 | 
			
		||||
        {
 | 
			
		||||
            DialogResult = true;
 | 
			
		||||
            Close();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void Cancel()
 | 
			
		||||
        {
 | 
			
		||||
            DialogResult = false;
 | 
			
		||||
            Close();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private bool Validate()
 | 
			
		||||
        {
 | 
			
		||||
            bool res = true;
 | 
			
		||||
            res &= !String.IsNullOrWhiteSpace(textPath.Text);
 | 
			
		||||
            res &= (listTemplates.SelectedItem != null);
 | 
			
		||||
            return res;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void UpdatePath()
 | 
			
		||||
        {
 | 
			
		||||
            if (!_pathUserSet)
 | 
			
		||||
            {
 | 
			
		||||
                // Start with location
 | 
			
		||||
                string path = textLocation.Text;
 | 
			
		||||
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
                    // Combine with project directory
 | 
			
		||||
                    if (checkCreateDirectory.IsChecked.HasValue && checkCreateDirectory.IsChecked.Value)
 | 
			
		||||
                        path = System.IO.Path.Combine(path, textName.Text);
 | 
			
		||||
 | 
			
		||||
                    // Combine with project file name
 | 
			
		||||
                    path = System.IO.Path.Combine(path, textName.Text + ".rsproj");
 | 
			
		||||
 | 
			
		||||
                    // Set new value
 | 
			
		||||
                    _ignoreNextChange = true;
 | 
			
		||||
                    textPath.Text = path;
 | 
			
		||||
                }
 | 
			
		||||
                catch (ArgumentException)
 | 
			
		||||
                {
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void textName_TextChanged(object sender, TextChangedEventArgs e)
 | 
			
		||||
        {
 | 
			
		||||
            UpdatePath();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void textLocation_TextChanged(object sender, TextChangedEventArgs e)
 | 
			
		||||
        {
 | 
			
		||||
            UpdatePath();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void textPath_TextChanged(object sender, TextChangedEventArgs e)
 | 
			
		||||
        {
 | 
			
		||||
            if (_ignoreNextChange)
 | 
			
		||||
            {
 | 
			
		||||
                _ignoreNextChange = false;
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                _pathUserSet = true;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void checkCreateDirectory_CheckChanged(object sender, RoutedEventArgs e)
 | 
			
		||||
        {
 | 
			
		||||
            UpdatePath();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user