Skip to content

Commit

Permalink
распланировал интерфейс
Browse files Browse the repository at this point in the history
  • Loading branch information
optozorax committed Jul 29, 2021
1 parent b79f219 commit 0cab890
Show file tree
Hide file tree
Showing 4 changed files with 102 additions and 34 deletions.
10 changes: 3 additions & 7 deletions Cargo.toml
Expand Up @@ -6,12 +6,8 @@ edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
macroquad = "0.3.3"
egui-macroquad = "0.4.0"
glam = { version = "0.13.0", features = ["serde"] }
macroquad = "0.3.7"
egui-macroquad = "0.5.0"
serde = "1.0.124"
ron = "0.6.4"
egui = "0.12.0"
fasteval = "0.2.4"
quad-url = "0.1.0"
egui_demo_lib = "0.12.0"
egui = "0.13.1"
3 changes: 2 additions & 1 deletion ideas.md
Expand Up @@ -51,6 +51,7 @@

Реализовать потом

* Есть кнопки для считывания всех данных, и для того чтобы загрузить их в программу
* Интерфейс получения слов из текста или субтитров
* Программа всегда видит буфер обмена, если открыто это окно
* Внизу серым написан текст, который сейчас находится в буфере обмена
Expand Down Expand Up @@ -96,4 +97,4 @@
* Считывание слов из текста
* Ввод слова вручную
* Окно, которое знает все слова из текста или субтитров, и предлагает для всех них сказать что с ними делать
* Окно где можно вводить слова
* Окно где можно вводить слова
118 changes: 93 additions & 25 deletions src/main.rs
Expand Up @@ -58,16 +58,8 @@ impl WordStatus {
}
}

/// Все слова в программе, это используется для хранения информации
struct WordsSaved(BTreeMap<String, WordStatus>);

/// Все слова в программе, это используется для вычислений
struct WordsOptimized {
all: BTreeMap<String, Vec<WordStatus>>,

/// Известные, мусорные, выученные, добавленные слова, необходимо для фильтрации после добавления слова
not_show: BTreeSet<String>,
}
/// Все слова в программе
struct Words(BTreeMap<String, WordStatus>);

enum WordsToAdd {
KnowPreviously,
Expand All @@ -84,21 +76,7 @@ struct WordsToLearn {
words_to_guess: Vec<String>,
}

impl WordsOptimized {
fn new(saved: WordsSaved) -> Self {
// to_type_today shuffle'ится после создания
todo!()
}

fn save(&self) -> WordsSaved {
//self.all.clone()
todo!()
}

fn is_unknown_word(&self, word: &str) -> bool {
todo!()
}

impl Words {
fn add_word(&mut self, word: String, info: WordsToAdd, settings: &Settings) {
// Слово добавляется не только word->translations, а ещё
todo!()
Expand Down Expand Up @@ -142,13 +120,103 @@ mod gui {
use super::*;

struct Program {
data: Words,
/// Известные, мусорные, выученные, добавленные слова, необходимо для фильтрации после добавления слова
known_words: BTreeSet<String>,
learn_window: LearnWordsWindow,
load_text_window: Option<LoadTextWindow>,
add_words_window: Option<AddWordsWindow>,
add_custom_words_window: Option<AddCustomWordsWindow>
}

enum ProgramAction {
Save,
}

impl Program {
fn new(words: Words) -> Self {
// так же вычисляет все слова что сегодня надо изучить
todo!()
}

fn ui(&mut self, ctx: &CtxRef, known_words: &BTreeSet<String>) -> Option<ProgramAction> {
todo!()
}
}

struct LoadTextWindow {
load_subtitles: bool,
text: Result<String, String>,
}

enum LoadTextAction {
CloseSelf,
CreateAddWordWindow(Vec<String>),
}

impl LoadTextWindow {
fn new(load_subtitles: bool) -> Self {
// Считать текст из буфера обмена сразу, если получилось вернуть Ok(...), иначе Err(...), на второй вариант пользователь должен сам ввести текст или вставить его из буфера обмена
todo!()
}

fn ui(&mut self, ctx: &CtxRef, known_words: &BTreeSet<String>) -> Option<LoadTextAction> {
// Есть кнопка "обновить информацию из буфера обмена"
todo!()
}
}

struct AddWordsWindow {
words: Vec<String>,
translations: String,
}

enum AddWordsAction {
CloseSelf,
AddWord(WordsToAdd),
}

impl AddWordsWindow {
fn new(words: Vec<String>) -> Self {
todo!()
}

fn ui(&mut self, ctx: &CtxRef) -> Option<AddWordsAction> {
todo!()
}
}

struct AddCustomWordsWindow {
word: String,
translations: String,
}

impl AddCustomWordsWindow {
fn new(words: Vec<String>) -> Self {
todo!()
}

fn ui(&mut self, ctx: &CtxRef, known_words: &BTreeSet<String>) -> Option<AddWordsAction> {
todo!()
}
}

// Это окно нельзя закрыть
struct LearnWordsWindow {
/// То что надо ввести несколько раз повторяется, слово повторяется максимальное число из всех под-слов что с ним связано. Если слово уже известно, то надо
to_type_today: Vec<String>,
current_type: Option<WordsToLearn>,
}

impl LearnWordsWindow {
fn new(words: &Words, today: Day) -> Self {
// to_type_today shuffle'ится после создания
todo!()
}

fn ui(&mut self, ctx: &CtxRef, words: &mut Words) {
todo!()
}
}

fn word_to_add(ui: &mut Ui, word: &mut String, translations: &mut String) -> Option<WordsToAdd> {
Expand Down
5 changes: 4 additions & 1 deletion video.md
Expand Up @@ -12,10 +12,13 @@
* время написания первых идей: 20 минут
* время их ситематизации: 20 минут
* планирование структур данных, связанных с основной логикой, без учёта интерфейса: 1 час 20 минут
* планирование структур и методов интерфейса: 30 минут (2:32)

# идеи

* Чтобы код был проще, надо не только заранее продумать структуры данных, а ещё и создать такие структуры данных, которые позволят решать задачу намного проще, без копипасты кода и лишних вычислений. Например, такой структурой является `WordsOptimized`, потому что там заранее вычислится массив `to_type_today`.
* Этот способ планирования программы не идеал, вам следует это адаптировать под себя.
* Я так делаю не только над всей программой, но и когда её нужно отрефакторить.
* Чтобы набрасывать функции и структуры данных я очень много сижу над идеями, перечитываю их и пытаюсь понять как они должны выглядеть в коде.
* Чтобы набрасывать функции и структуры данных я очень много сижу над идеями, перечитываю их и пытаюсь понять как они должны выглядеть в коде.
* Сначала надо делать как можно меньше фич, а затем добавлять новые фичи только если они прям горят
* Посмотрите на весь этот процесс, вы считаете что такое серьёзно можно заменить какой-то там нейросетью? Нет, только Сильный ИИ способен на такое.

0 comments on commit 0cab890

Please sign in to comment.