Skip to content

Commit

Permalink
Dont use a stack
Browse files Browse the repository at this point in the history
  • Loading branch information
leolost2605 committed Dec 3, 2023
1 parent f95f3a0 commit 077a1f7
Show file tree
Hide file tree
Showing 3 changed files with 100 additions and 82 deletions.
7 changes: 5 additions & 2 deletions src/subject-manager.vala
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,12 @@ public class SubjectManager : Object {
public signal void subject_added (Subject subject);

public HashTable<string, Subject> subjects;
public ListStore subjects_model;

construct {
subjects = new HashTable<string, Subject> (str_hash, str_equal);

subjects_model = new ListStore (typeof (Subject));
}

public void write_to_file (File file, string write_data) {
Expand Down Expand Up @@ -48,7 +51,7 @@ public class SubjectManager : Object {
var parser = new SubjectParser ();
Subject sub = parser.to_object (read_from_file (file));
subjects[sub.name] = sub;
subject_added (sub);
subjects_model.append (sub);
}
}

Expand Down Expand Up @@ -83,6 +86,6 @@ public class SubjectManager : Object {
subjects[name].categories_by_name[cat.name] = cat;
}

subject_added (subjects[name]);
subjects_model.append (subjects[name]);
}
}
133 changes: 71 additions & 62 deletions src/subject-page.vala
Original file line number Diff line number Diff line change
@@ -1,10 +1,26 @@
public class SubjectPage : Gtk.Box {
public Subject subject { get; construct; }
private Subject _subject;
public Subject subject {
get {
return _subject;
} set {
if (_subject != null) {
_subject.grades_model.items_changed.disconnect (on_items_changed);
}

_subject = value;
_subject.grades_model.items_changed.connect (on_items_changed);
list_box.bind_model (_subject.grades_model, widget_create_func);

public SubjectPage (Subject subject) {
Object (subject: subject);
on_items_changed ();
}
}

private Gtk.Label avg_label;
private Gtk.Box content_box;
private Gtk.ListBox list_box;
private Adw.StatusPage status_page;

construct {
var menu = new Menu ();
var menu_section1 = new Menu ();
Expand Down Expand Up @@ -41,31 +57,12 @@ public class SubjectPage : Gtk.Box {

header_bar.pack_start (toggle_button);

//SUBJECT BOX
var nyttbox = new Gtk.Box (VERTICAL, 0) {
vexpand = true,
margin_start = 1,
margin_end = 1
};
var gtk_sw = new Gtk.ScrolledWindow ();
var adw_c = new Adw.Clamp () {
margin_start = 19,
margin_end = 19,
margin_top = 20,
margin_bottom = 20,
maximum_size = 600,
tightening_threshold = 400
};
gtk_sw.set_child (adw_c);
adw_c.set_child (nyttbox);

//TOP BOX
var top_box = new Gtk.Box (HORIZONTAL, 0) {
height_request = 40,
hexpand = true,
homogeneous = true
};
nyttbox.append (top_box);

//AVERAGE LABEL
var average_box = new Gtk.Box (HORIZONTAL, 10) {
Expand All @@ -76,7 +73,7 @@ public class SubjectPage : Gtk.Box {
var average_label = new Gtk.Label (_("Average:")) { css_classes = { "title-3" } };
average_box.append (average_label);

var avg_label = new Gtk.Label ("0.00") { css_classes = { "title-3" } };
avg_label = new Gtk.Label ("0.00") { css_classes = { "title-3" } };
average_box.append (avg_label);

//NEW GRADE BUTTON
Expand All @@ -90,21 +87,36 @@ public class SubjectPage : Gtk.Box {

top_box.append (new_grade_button);

var status_page = new Adw.StatusPage () {
status_page = new Adw.StatusPage () {
title = _("No Grades"),
description = _("Add new grades by clicking theNew Grade…” button."),
vexpand = true
};

var list_box = new Gtk.ListBox () {vexpand = false, margin_top = 20};
list_box = new Gtk.ListBox () {vexpand = false, margin_top = 20};
list_box.add_css_class ("boxed-list");
list_box.bind_model (subject.grades_model, widget_create_func);

if (subject.grades_model.get_n_items () > 0) {
nyttbox.append (list_box);
} else {
nyttbox.append (status_page);
}
content_box = new Gtk.Box (VERTICAL, 0) {
vexpand = true,
margin_start = 1,
margin_end = 1
};
content_box.append (top_box);
content_box.append (status_page);

var adw_c = new Adw.Clamp () {
margin_start = 19,
margin_end = 19,
margin_top = 20,
margin_bottom = 20,
maximum_size = 600,
tightening_threshold = 400,
child = content_box
};

var gtk_sw = new Gtk.ScrolledWindow () {
child = adw_c
};

var toolbar_view = new Adw.ToolbarView () {
hexpand = true,
Expand All @@ -118,43 +130,41 @@ public class SubjectPage : Gtk.Box {
edit_subject_button.clicked.connect (() => {
edit_subject_dialog ();
});
}

void calculate_average () {
if (subject.grades_model.get_n_items () == 0) {
avg_label.label = "0.00";
return;
}

var table = new HashTable<string, double?> (str_hash, str_equal);
var table2 = new HashTable<string, int?> (str_hash, str_equal);
private void calculate_average () {
if (subject.grades_model.get_n_items () == 0) {
avg_label.label = "0.00";
return;
}

for (int i = 0; i < subject.grades_model.get_n_items (); i++) {
var grade = (Grade) subject.grades_model.get_item (i);
table[grade.category_name] = table[grade.category_name] == null ? double.parse (grade.grade) : table[grade.category_name] + double.parse (grade.grade);
table2[grade.category_name] += table2[grade.category_name] == null ? 1 : table2[grade.category_name] + 1;
}
var table = new HashTable<string, double?> (str_hash, str_equal);
var table2 = new HashTable<string, int?> (str_hash, str_equal);

double percentage_divider = 0;
double avg = 0;
foreach (var cat in table.get_keys ()) {
avg += (table[cat] / table2[cat]) * subject.categories_by_name[cat].percentage;
percentage_divider += subject.categories_by_name[cat].percentage;
}
for (int i = 0; i < subject.grades_model.get_n_items (); i++) {
var grade = (Grade) subject.grades_model.get_item (i);
table[grade.category_name] = table[grade.category_name] == null ? double.parse (grade.grade) : table[grade.category_name] + double.parse (grade.grade);
table2[grade.category_name] += table2[grade.category_name] == null ? 1 : table2[grade.category_name] + 1;
}

avg_label.label = "%.2f".printf (avg / percentage_divider);
double percentage_divider = 0;
double avg = 0;
foreach (var cat in table.get_keys ()) {
avg += (table[cat] / table2[cat]) * subject.categories_by_name[cat].percentage;
percentage_divider += subject.categories_by_name[cat].percentage;
}

subject.grades_model.items_changed.connect (() => {
if (subject.grades_model.get_n_items () > 0 && nyttbox.get_last_child () == status_page) {
nyttbox.remove (status_page);
nyttbox.append (list_box);
} else if (subject.grades_model.get_n_items () == 0 && nyttbox.get_last_child () == list_box) {
nyttbox.remove (list_box);
nyttbox.append (status_page);
}
avg_label.label = "%.2f".printf (avg / percentage_divider);
}

calculate_average ();
});
private void on_items_changed () {
if (subject.grades_model.get_n_items () > 0 && content_box.get_last_child () == status_page) {
content_box.remove (status_page);
content_box.append (list_box);
} else if (subject.grades_model.get_n_items () == 0 && content_box.get_last_child () == list_box) {
content_box.remove (list_box);
content_box.append (status_page);
}

calculate_average ();
}
Expand All @@ -171,7 +181,6 @@ public class SubjectPage : Gtk.Box {
}
}


public void edit_subject_dialog () {
new EditSubjectDialog ((Window) get_root (), subject).present ();
}
Expand Down
42 changes: 24 additions & 18 deletions src/window.vala
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
public class Window : Adw.ApplicationWindow {
public Adw.OverlaySplitView split_view;
public Adw.Breakpoint bpoint;
private Gtk.Stack stack;
private SubjectPage subject_page;

public Window (MyApp app) {
Object (
Expand All @@ -15,7 +15,7 @@ public class Window : Adw.ApplicationWindow {
}

construct {
stack = new Gtk.Stack ();
var subject_manager = SubjectManager.get_default ();

var new_subject_button = new Gtk.Button () {
icon_name = "list-add-symbolic",
Expand All @@ -28,24 +28,28 @@ public class Window : Adw.ApplicationWindow {
};
header_bar.pack_end (new_subject_button);

var stack_sidebar = new Gtk.StackSidebar () {
stack = stack
};
stack_sidebar.set_css_classes ({ "" });
var navigation_sidebar = new Gtk.ListBox ();
navigation_sidebar.add_css_class ("navigation-sidebar");
navigation_sidebar.bind_model (subject_manager.subjects_model, (obj) => {
var sub = (Subject) obj;
return new Gtk.Label (sub.name) { xalign = 0 };
});

var scrolled_window = new Gtk.ScrolledWindow () {
vexpand = true,
child = stack_sidebar
child = navigation_sidebar
};

var sidebar = new Adw.ToolbarView () {
content = scrolled_window
};
sidebar.add_top_bar (header_bar);

subject_page = new SubjectPage ();

split_view = new Adw.OverlaySplitView () {
sidebar = sidebar,
content = stack
content = subject_page
};

bpoint = new Adw.Breakpoint (Adw.BreakpointCondition.parse ("max-width: 530px"));
Expand All @@ -55,18 +59,20 @@ public class Window : Adw.ApplicationWindow {

content = split_view;

var subject_manager = SubjectManager.get_default ();

subject_manager.subject_added.connect ((subject) => {
subject.notify["deleted"].connect (() => {
if (subject.deleted) {
//TODO: Remove without crash
}
warning ("removed");
});
stack.add_titled (new SubjectPage (subject), subject.name, subject.name);
navigation_sidebar.row_activated.connect ((row) => {
subject_page.subject = (Subject) subject_manager.subjects_model.get_item (row.get_index ());
});

// subject_manager.subject_added.connect ((subject) => {
// subject.notify["deleted"].connect (() => {
// if (subject.deleted) {
// //TODO: Remove without crash
// }
// warning ("removed");
// });
// stack.add_titled (new SubjectPage (), subject.name, subject.name);
// });

subject_manager.read_data ();

close_request.connect (() => {
Expand Down

0 comments on commit 077a1f7

Please sign in to comment.