Seems to work

This commit is contained in:
Arti Zirk 2017-01-26 19:32:16 +02:00
parent 077fda732a
commit f2bb4b3e5c
10 changed files with 184 additions and 34 deletions

View File

@ -2,7 +2,8 @@
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Päevaküsimus" xmlns:local="clr-namespace:Päevaküsimus"
StartupUri="MainWindow.xaml"> StartupUri="MainWindow.xaml"
Exit="App_OnExit">
<Application.Resources> <Application.Resources>
</Application.Resources> </Application.Resources>

View File

@ -13,5 +13,15 @@ namespace Päevaküsimus
/// </summary> /// </summary>
public partial class App : Application public partial class App : Application
{ {
public static MainWindowVM mwvm;
private void App_OnExit(object sender, ExitEventArgs e)
{
if (App.mwvm != null)
{
SerializationService.Serialize(App.mwvm.questions);
}
}
} }
} }

View File

@ -19,15 +19,16 @@
<ColumnDefinition /> <ColumnDefinition />
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<Label Grid.Column="0" Grid.Row="0" Content="Päevaküsimus on:"/> <Label Grid.Column="0" Grid.Row="0" Content="Päevaküsimus on:"/>
<Label Grid.Column="1" Grid.Row="0" Content="Placeholder"/> <Label Grid.Column="1" Grid.Row="0" Content="{Binding dayQuestion.question}"/>
<Label Grid.Column="0" Grid.Row="1" Content="Vali õige vastuse variant"/> <Label Grid.Column="0" Grid.Row="1" Content="Vali õige vastuse variant"/>
<ListBox Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2"> <ListBox Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2" ItemsSource="{Binding dayQuestion.answers}" x:Name="gameAnswerSelectionListBox" SelectionChanged="GameAnswerSelectionListBox_OnSelectionChanged">
<ListBox.ItemTemplate> <ListBox.ItemTemplate>
<DataTemplate> <DataTemplate>
<Label Content="Bla" /> <Label Content="{Binding answer}" />
</DataTemplate> </DataTemplate>
</ListBox.ItemTemplate> </ListBox.ItemTemplate>
</ListBox> </ListBox>
<Button x:Name="displayNewQuestion" Content="Kuva uus küsimus" Grid.Column="1" HorizontalAlignment="Right" Margin="0,0,0,0" Grid.Row="1" Padding="7,0" Click="DisplayNewQuestion_OnClick"/>
</Grid> </Grid>
</TabItem> </TabItem>
<TabItem Header="Admin"> <TabItem Header="Admin">
@ -42,7 +43,7 @@
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<Label Grid.Row="0" Grid.Column="0" Content="Küsimused"></Label> <Label Grid.Row="0" Grid.Column="0" Content="Küsimused"></Label>
<Label Grid.Row="0" Grid.Column="1" Content="Vaata/Muuda"></Label> <Label Grid.Row="0" Grid.Column="1" Content="Vaata/Muuda"></Label>
<ListBox x:Name="allQuestionsListBox" Grid.Column="0" Grid.Row="1" ItemsSource="{Binding questions}" SelectionChanged="AllQuestionsListBox_OnSelectionChanged"> <ListBox x:Name="allQuestionsListBox" Grid.Column="0" Grid.Row="1" ItemsSource="{Binding questions}" SelectionChanged="AllQuestionsListBox_OnSelectionChanged" Width="150">
<ListBox.ItemTemplate> <ListBox.ItemTemplate>
<DataTemplate> <DataTemplate>
<Label Content="{Binding question}" /> <Label Content="{Binding question}" />
@ -57,14 +58,25 @@
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"></ColumnDefinition> <ColumnDefinition Width="Auto"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition> <ColumnDefinition></ColumnDefinition>
<ColumnDefinition Width="Auto"></ColumnDefinition>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<Label Grid.Row="0" Grid.Column="0" Content="Küsimus:"></Label> <Label Grid.Row="0" Grid.Column="0" Content="Küsimus:"></Label>
<TextBox Grid.Row="0" Grid.Column="1" Text="Uus Küsimus?"></TextBox> <TextBox Grid.Row="0" Grid.Column="1" Text="{Binding selectedQuestion.question}" KeyUp="QuestionQuestionTextBox_OnKeyUp" x:Name="questionQuestionTextBox"/>
<DataGrid Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="3" ItemsSource="{Binding selectedQuestion.answers}" AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False">
<DataGrid Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" x:Name="dataGrid" ItemsSource="{Binding selectedQuestion.answers}"> <DataGrid.Columns>
<DataGridTextColumn Header="Vastus" IsReadOnly="False" Binding="{Binding answer}" Width="*">
</DataGridTextColumn>
<DataGridCheckBoxColumn Header="Õige?" IsReadOnly="False" Binding="{Binding correct}">
</DataGridCheckBoxColumn>
<DataGridTemplateColumn Header="Vastanuid" IsReadOnly="True">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Label Content="{Binding selectionCount}" Margin="0" Padding="0" HorizontalContentAlignment="Center"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid> </DataGrid>
</Grid> </Grid>
</Grid> </Grid>
</TabItem> </TabItem>

View File

@ -31,14 +31,34 @@ namespace Päevaküsimus
private void AllQuestionsListBox_OnSelectionChanged(object sender, SelectionChangedEventArgs e) private void AllQuestionsListBox_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{ {
if (this.allQuestionsListBox.SelectedIndex > -1) if (this.allQuestionsListBox.SelectedIndex > 0)
{ {
_vm.selectedQuestion = allQuestionsListBox.SelectedItem as Question; _vm.selectedQuestion = allQuestionsListBox.SelectedItem as Question;
} }
else else if (this.allQuestionsListBox.SelectedIndex == 0)
{ {
_vm.selectedQuestion = new Question("Uus küsimus"); this.allQuestionsListBox.SelectedItem = _vm.CreateNewQuestion();
} }
this.questionQuestionTextBox.SelectAll();
this.questionQuestionTextBox.Focus();
}
private void QuestionQuestionTextBox_OnKeyUp(object sender, KeyEventArgs e)
{
_vm.selectedQuestion.question = questionQuestionTextBox.Text;
}
private void DisplayNewQuestion_OnClick(object sender, RoutedEventArgs e)
{
_vm.dayQuestion = _vm.GetQuestionOfTheDay();
}
private void GameAnswerSelectionListBox_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
var answer = gameAnswerSelectionListBox.SelectedItem as Answer;
var winText = answer.correct ? "You WON!" : "Vale vastus :(";
MessageBox.Show($"Peale sinu on selle vastuse valinud veel {answer.selectionCount} inimest.", winText);
answer.selectionCount++;
} }
} }
} }

View File

@ -8,7 +8,7 @@ using Päevaküsimus.Models;
namespace Päevaküsimus namespace Päevaküsimus
{ {
class MainWindowVM:NotificationBase public class MainWindowVM : NotificationBase
{ {
public ObservableCollection<Question> questions { get; set; } public ObservableCollection<Question> questions { get; set; }
private Question _seleceQuestion; private Question _seleceQuestion;
@ -17,39 +17,59 @@ namespace Päevaküsimus
set set
{ {
_seleceQuestion = value; _seleceQuestion = value;
selectedQuestionAnswers = value.answers;
NotifyPropertyChanged(); NotifyPropertyChanged();
} }
} }
private ObservableCollection<Answer> _selectedQuestionAnswers; private Question _dayQuestion;
public ObservableCollection<Answer> selectedQuestionAnswers { public Question dayQuestion
get { return _selectedQuestionAnswers; } {
get { return _dayQuestion; }
set set
{ {
_selectedQuestionAnswers = value; _dayQuestion = value;
NotifyPropertyChanged(); NotifyPropertyChanged();
} }
} }
private Random _rnd; private Random _rnd;
public MainWindowVM() public MainWindowVM()
{ {
this._rnd = new Random(); this._rnd = new Random();
this.questions = new ObservableCollection<Question>(); this.questions = SerializationService.DeSerialize();
var question = new Question("Mis värvi on armastus?"); if (this.questions == null)
question.AddAnswer(new Answer("Punane", true));
foreach (var color in new [] {"Roheline", "Sinine", "Roosa", "Lilla"})
{ {
question.AddAnswer(new Answer(color)); this.questions = new ObservableCollection<Question>();
} var question = new Question("Lisa uus küsimus");
this.questions.Add(question); this.questions.Add(question);
this.questions.Add(new Question("Test")); }
App.mwvm = this;
}
public Question CreateNewQuestion()
{
var question = new Question("Ja minu uueks küsimuseks on?");
question.AddAnswer(new Answer("Õige vastus 1", true));
foreach (var answer in new[] { "Vale vastus 1", "Vale vastus 2", "Vale vastus 3", "Vale vastus 4" })
{
question.AddAnswer(new Answer(answer));
}
this.questions.Insert(1, question);
this.selectedQuestion = question;
return question;
} }
public Question GetQuestionOfTheDay() public Question GetQuestionOfTheDay()
{ {
return this.questions.ElementAt(this._rnd.Next(0, this.questions.Count)); try
{
return this.questions.ElementAt(this._rnd.Next(1, this.questions.Count));
}
catch (ArgumentOutOfRangeException e)
{
return new Question("Palun lisa süsteemi mõni küsimus!");
}
} }

View File

@ -3,11 +3,30 @@ using System.Collections;
namespace Päevaküsimus.Models namespace Päevaküsimus.Models
{ {
public class Answer [Serializable()]
public class Answer : NotificationBase, ICloneable
{ {
public string answer { get; set; } private string _answer;
public string answer {
get { return _answer; }
set
{
_answer = value;
NotifyPropertyChanged();
}
}
public bool correct { get; set; } public bool correct { get; set; }
public int selectionCount { get; set; } private int _selectionCount;
public int selectionCount
{
get { return _selectionCount; }
set
{
_selectionCount = value;
NotifyPropertyChanged();
}
}
public Answer(string answer) public Answer(string answer)
{ {
@ -20,5 +39,12 @@ namespace Päevaküsimus.Models
this.answer = answer; this.answer = answer;
this.correct = correct; this.correct = correct;
} }
public object Clone()
{
var c = new Answer(answer.Clone() as string, correct);
c.selectionCount = selectionCount;
return c;
}
} }
} }

View File

@ -4,10 +4,20 @@ using System.Collections.ObjectModel;
namespace Päevaküsimus.Models namespace Päevaküsimus.Models
{ {
public class Question [Serializable()]
public class Question : NotificationBase, ICloneable
{ {
public string question { get; set; } private string _question;
public string question {
get { return _question; }
set
{
_question = value;
NotifyPropertyChanged();
}
}
private ObservableCollection<Answer> _answers; private ObservableCollection<Answer> _answers;
public ObservableCollection<Answer> answers { get { return _answers; } }
public Question(string question) public Question(string question)
{ {
@ -15,11 +25,19 @@ namespace Päevaküsimus.Models
this._answers = new ObservableCollection<Answer>(); this._answers = new ObservableCollection<Answer>();
} }
public ObservableCollection<Answer> answers { get { return _answers; } }
public void AddAnswer(Answer answer) public void AddAnswer(Answer answer)
{ {
_answers.Add(answer); _answers.Add(answer);
} }
public object Clone()
{
var q = new Question(_question.Clone() as string);
foreach (var answer in _answers)
{
q.AddAnswer(answer.Clone() as Answer);
}
return q;
}
} }
} }

View File

@ -4,6 +4,7 @@ using System.Runtime.CompilerServices;
namespace Päevaküsimus namespace Päevaküsimus
{ {
[Serializable()]
public class NotificationBase : INotifyPropertyChanged public class NotificationBase : INotifyPropertyChanged
{ {

View File

@ -57,6 +57,7 @@
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType> <SubType>Designer</SubType>
</ApplicationDefinition> </ApplicationDefinition>
<Compile Include="SerializationService.cs" />
<Page Include="MainWindow.xaml"> <Page Include="MainWindow.xaml">
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType> <SubType>Designer</SubType>

View File

@ -0,0 +1,41 @@
using System;
using System.Collections;
using System.Collections.ObjectModel;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using Päevaküsimus.Models;
namespace Päevaküsimus
{
public class SerializationService
{
static private string _fileName = "data.bin";
public static void Serialize(object o)
{
using (Stream stream = new FileStream(_fileName, FileMode.Create, FileAccess.Write, FileShare.Write))
{
BinaryFormatter binaryFormatter = new BinaryFormatter();
binaryFormatter.Serialize(stream, o);
}
}
public static ObservableCollection<Question> DeSerialize ()
{
try
{
using (Stream stream = new FileStream(_fileName, FileMode.OpenOrCreate, FileAccess.Read, FileShare.Read))
{
BinaryFormatter binaryFormatter = new BinaryFormatter();
ObservableCollection<Question> questions = binaryFormatter.Deserialize(stream) as ObservableCollection<Question>;
return questions;
}
}
catch (Exception ex)
{
System.Diagnostics.Trace.WriteLine("Error: " + ex.Message);
return null;
}
}
}
}