book details form now has a way for user to toggle is vs is-not liberated for book and pdf. NOT yet wired up

This commit is contained in:
Robert McRackan 2021-08-20 15:21:43 -04:00
parent c9f988acf8
commit 35b5d7370c
3 changed files with 172 additions and 34 deletions

View file

@ -9,7 +9,16 @@ namespace LibationWinForms.Dialogs
{
public partial class BookDetailsDialog : Form
{
public class liberatedComboBoxItem
{
public LiberatedStatus Status { get; set; }
public string Text { get; set; }
public override string ToString() => Text;
}
public string NewTags { get; private set; }
public LiberatedStatus BookLiberatedStatus { get; private set; }
public LiberatedStatus? PdfLiberatedStatus { get; private set; }
private LibraryBook _libraryBook { get; }
private Book Book => _libraryBook.Book;
@ -23,7 +32,7 @@ namespace LibationWinForms.Dialogs
_libraryBook = ArgumentValidator.EnsureNotNull(libraryBook, nameof(libraryBook));
initDetails();
initTags();
//initLiberated();
initLiberated();
}
// 1st draft: lazily cribbed from GridEntry.ctor()
private void initDetails()
@ -56,10 +65,60 @@ Purchase Date: {_libraryBook.DateAdded.ToString("d")}
this.detailsTb.Text = t;
}
private void initTags() => this.newTagsTb.Text = Book.UserDefinedItem.Tags;
private void initLiberated()
{
{
var status = Book.UserDefinedItem.BookStatus;
this.bookLiberatedCb.Items.Add(new liberatedComboBoxItem { Status = LiberatedStatus.Liberated, Text = "Downloaded" });
this.bookLiberatedCb.Items.Add(new liberatedComboBoxItem { Status = LiberatedStatus.NotLiberated, Text = "Not Downloaded" });
// this should only appear if is already an error. User should not be able to set status to error, only away from error
if (status == LiberatedStatus.Error)
this.bookLiberatedCb.Items.Add(new liberatedComboBoxItem { Status = LiberatedStatus.Error, Text = "Error" });
setDefaultComboBox(this.bookLiberatedCb, status);
}
{
var status = Book.UserDefinedItem.PdfStatus;
if (status is null)
this.pdfLiberatedCb.Enabled = false;
else
{
this.pdfLiberatedCb.Items.Add(new liberatedComboBoxItem { Status = LiberatedStatus.Liberated, Text = "Downloaded" });
this.pdfLiberatedCb.Items.Add(new liberatedComboBoxItem { Status = LiberatedStatus.NotLiberated, Text = "Not Downloaded" });
setDefaultComboBox(this.pdfLiberatedCb, status);
}
}
}
private static void setDefaultComboBox(ComboBox comboBox, LiberatedStatus? status)
{
if (!status.HasValue)
{
comboBox.SelectedIndex = 0;
return;
}
var item = comboBox.Items.Cast<liberatedComboBoxItem>().SingleOrDefault(item => item.Status == status.Value);
if (item is not null)
comboBox.SelectedItem = item;
else
comboBox.SelectedIndex = 0;
}
private void saveBtn_Click(object sender, EventArgs e)
{
NewTags = this.newTagsTb.Text;
BookLiberatedStatus = ((liberatedComboBoxItem)this.bookLiberatedCb.SelectedItem).Status;
if (this.pdfLiberatedCb.Enabled)
PdfLiberatedStatus = ((liberatedComboBoxItem)this.pdfLiberatedCb.SelectedItem).Status;
this.DialogResult = DialogResult.OK;
}