omni_git/
git_app_renders.rs

1use egui::Ui;
2
3use crate::{
4    git_app::{GitApps, TagSymbol},
5    GitApp,
6};
7
8pub fn render_git_app(app: &mut GitApp, ui: &mut Ui) {
9    egui::Grid::new("git_apps_grid").show(ui, |ui| {
10        ui.horizontal(|ui| {
11            ui.heading("Git Apps");
12
13            egui::ComboBox::from_label("")
14                .selected_text(format!("{:?}", app.selected_gits_app))
15                .show_ui(ui, |ui| {
16                    ui.selectable_value(
17                        &mut app.selected_gits_app,
18                        GitApps::TagDiffWeb,
19                        "Web Diff",
20                    );
21                    ui.selectable_value(
22                        &mut app.selected_gits_app,
23                        GitApps::TagDiffCommand,
24                        "Command Diff",
25                    );
26                });
27        });
28
29        ui.end_row();
30
31        ui.vertical(|ui| match app.selected_gits_app {
32            GitApps::TagDiffWeb => render_web_diff(app, ui),
33            GitApps::TagDiffCommand => render_tag_diff(app, ui),
34        });
35
36        ui.end_row();
37    });
38}
39
40fn render_tag_diff(app: &mut GitApp, ui: &mut Ui) {
41    ui.vertical(|ui| {
42        ui.add_space(20.0);
43        actions(app, ui);
44        ui.end_row();
45        settings(app, ui);
46
47        ui.end_row();
48    });
49}
50
51fn combine_choosen(app: &GitApp) -> String {
52    let base = app.base_url.clone();
53
54    let delimiter = "/".to_owned();
55
56    let owner = app.owner.clone();
57
58    let repo = app.repo.clone();
59
60    let compare = "compare".to_owned();
61
62    let one = app.choosen.get_choosen_symbol_chain();
63
64    let points = "...".to_owned();
65
66    let two = app.choosen_other.get_choosen_symbol_chain();
67
68    let pre = vec![
69        base,
70        delimiter.clone(),
71        owner,
72        delimiter.clone(),
73        repo,
74        delimiter.clone(),
75        compare,
76        delimiter,
77        one,
78        points,
79        two,
80    ];
81    pre.concat()
82}
83
84fn render_web_diff(app: &mut GitApp, ui: &mut Ui) {
85    ui.vertical(|ui| {
86        ui.add_space(20.0);
87        actions(app, ui);
88        ui.end_row();
89        settings(app, ui);
90        ui.end_row();
91        ui.label(combine_choosen(app));
92        ui.hyperlink(combine_choosen(app))
93    });
94}
95
96fn actions(app: &mut GitApp, ui: &mut Ui) {
97    ui.horizontal(|ui| {
98        ui.collapsing("Actions", |ui| {
99            ui.horizontal(|ui| {
100                if ui.button("create new").clicked() {
101                    app.choosen.choose(TagSymbol::new(1, "prefix", "something"));
102                    app.choosen.choose(TagSymbol::new(2, "delitmiter1", "/"));
103                    app.choosen
104                        .choose(TagSymbol::new(3, "inner", "someversion"));
105                    app.choosen.choose(TagSymbol::new(4, "delitmiter11", "/"));
106                    app.choosen
107                        .choose(TagSymbol::new(5, "delimiter", "someversion"));
108                };
109            });
110
111            if ui.button("take over").clicked() {
112                app.choosen_other.take_over(&app.choosen)
113            };
114        });
115    });
116}
117
118fn settings(app: &mut GitApp, ui: &mut Ui) {
119    ui.horizontal(|ui| {
120        ui.collapsing("Settings", |ui| {
121            ui.vertical(|ui| {
122                ui.text_edit_singleline(&mut app.base_url);
123                ui.text_edit_singleline(&mut app.owner);
124                ui.text_edit_singleline(&mut app.repo);
125            });
126
127            ui.vertical(|ui| {
128                ui.horizontal(|ui| {
129                    let mut cloned = app.choosen.get_choosen_symbols();
130                    for choosen in &mut cloned {
131                        ui.text_edit_singleline(&mut choosen.symbol);
132                        ui.add_space(1.0);
133                    }
134                    for new in cloned.clone() {
135                        app.choosen.choose(new)
136                    }
137                });
138
139                ui.add_space(5.0);
140                ui.horizontal(|ui| {
141                    let mut cloned_other = app.choosen_other.get_choosen_symbols();
142                    for choosen_other in &mut cloned_other {
143                        ui.text_edit_singleline(&mut choosen_other.symbol);
144                        ui.add_space(2.0);
145                    }
146                    for new in cloned_other.clone() {
147                        app.choosen_other.choose(new)
148                    }
149                });
150            });
151        })
152    });
153}