student_ctrl 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 12e4983fbc30c2f3918251185cb288197e745f2f7828db489a70a31a30b692a5
4
+ data.tar.gz: c992c2cf02e96d406937f7ab9c41e2877a789d634332cfa6a2205210c9bebecf
5
+ SHA512:
6
+ metadata.gz: 54c119a04e17ecd5605b0d97ee19544b79c769bff49ac3d1ead41f40d82bef99bbe4a8cad37c4bd5698f7148042f8d0c02e5d989d6766ad5e61458c487264c04
7
+ data.tar.gz: 95730087425eff6e3af30346161eabd95e02f018fa37308b53ccf20dcd5d962fd61b8501cae53594abeeb15a570aa599aaeb4491b252fb421baa0f68239e09c7
@@ -0,0 +1,97 @@
1
+ require_relative "window.rb"
2
+ require_relative 'Basic_list'
3
+ require_relative 'Student_list_DB'
4
+
5
+ class StudentListController
6
+ private
7
+ attr_accessor :view, :list, :data_list_student_short
8
+
9
+ public
10
+ def initialize(view)
11
+ self.view = view
12
+ self.list = Basic_list.new
13
+ self.list.format = Student_list_DB.new
14
+ self.load_list
15
+ self.data_list_student_short = self.list.get_k_n_student_short_list(k:0, n:self.table_row_count)
16
+ self.data_list_student_short.view = self.view
17
+ end
18
+
19
+ def cur_page
20
+ if @cur_page.nil? or @cur_page <= 1 or @cur_page > self.page_count then @cur_page = 1 end
21
+
22
+ @cur_page
23
+ end
24
+
25
+ def del_selected
26
+ id_array = self.data_list_student_short.get_selected
27
+ id_array.each do |id|
28
+ self.list.delete_byID(id: id)
29
+ end
30
+ end
31
+
32
+ def unselect
33
+ self.data_list_student_short.unselect
34
+ end
35
+
36
+ def select(id)
37
+ self.data_list_student_short.select(id)
38
+ end
39
+
40
+ def page_count
41
+ if not self.list.nil? then
42
+ (self.list.get_student_short_count.to_f / self.table_row_count).ceil
43
+ else
44
+ 1
45
+ end
46
+ end
47
+
48
+ def next_page
49
+ self.cur_page += 1
50
+ end
51
+
52
+ def prev_page
53
+ self.cur_page -= 1
54
+ end
55
+
56
+ def refresh_data(reload: false)
57
+ if (reload) then
58
+ self.load_list()
59
+ end
60
+
61
+ self.list.get_k_n_student_short_list(k:self.cur_page - 1, n:self.table_row_count, data_list: data_list_student_short)
62
+
63
+ self.data_list_student_short.notify
64
+ end
65
+
66
+ def sort
67
+ self.list.sort_si
68
+ end
69
+
70
+
71
+ private
72
+
73
+ def table_row_count; 10 end
74
+
75
+ def last_page?(page)
76
+ page >= self.page_count
77
+ end
78
+
79
+ def first_page?(page)
80
+ page <= 1
81
+ end
82
+
83
+ def cur_page=(value)
84
+ if last_page?(value) then
85
+ @cur_page = self.page_count
86
+ elsif first_page?(value) then
87
+ @cur_page = 1
88
+ else
89
+ @cur_page = value
90
+ end
91
+ end
92
+
93
+ def load_list
94
+ self.list.read_list
95
+ end
96
+
97
+ end
@@ -0,0 +1,139 @@
1
+ require_relative "main_window"
2
+ require_relative "student_list_controller"
3
+
4
+ class Student_List_View
5
+ def set_table_params(column_names, whole_entities_count)
6
+ self.window.table.setTableSize(whole_entities_count, 4)
7
+ self.window.set_table_headers(column_names)
8
+ end
9
+
10
+ def set_table_data(data_table)
11
+ table = self.window.table
12
+
13
+ self.erase_table
14
+
15
+ (0...data_table.get_rows_number).each do |x|
16
+ if data_table.get_element(row:x, col:0).nil? then break end
17
+
18
+ (0...data_table.get_cols_number).each do |y|
19
+ value = data_table.get_element(row:x, col:y)
20
+ puts value
21
+ table.setItemText(x, y, value.to_s)
22
+ end
23
+ end
24
+ end
25
+
26
+ def initialize
27
+
28
+ app = FXApp.new
29
+
30
+ self.window = MainWindow.new(app)
31
+
32
+ self.set_table_handlers
33
+ self.set_lcr_handlers
34
+ self.set_tab_book_handler
35
+
36
+ app.create
37
+
38
+ self.controller = StudentListController.new(self)
39
+
40
+ self.window.del_button.connect(SEL_COMMAND) do
41
+ self.controller.del_selected
42
+ self.refresh
43
+ end
44
+
45
+ self.refresh
46
+
47
+ app.run
48
+
49
+
50
+ end
51
+
52
+ def set_table_handlers
53
+ table = self.window.table
54
+ chg_button = self.window.chg_button
55
+ del_button = self.window.del_button
56
+
57
+ cells_selected_handler = Proc.new do
58
+ all_cols_selected = table.selEndColumn - table.selStartColumn + 1 == table.numColumns
59
+ num_selected_rows = table.selEndRow - table.selStartRow + 1
60
+
61
+ self.controller.unselect
62
+
63
+ (table.selStartRow..table.selEndRow).each do |row|
64
+ self.controller.select(row)
65
+ end
66
+
67
+ if num_selected_rows == 1 and all_cols_selected
68
+ chg_button.enable
69
+ del_button.enable
70
+ elsif num_selected_rows > 1 and all_cols_selected
71
+ chg_button.disable
72
+ del_button.enable
73
+ else
74
+ chg_button.disable
75
+ del_button.disable
76
+ end
77
+ end
78
+
79
+ table.connect(SEL_SELECTED, &cells_selected_handler)
80
+ table.connect(SEL_CHANGED, &cells_selected_handler)
81
+
82
+ table.columnHeader.connect(SEL_COMMAND) do |_, _, index|
83
+ if(index == 1)
84
+ puts("Сортировка")
85
+ self.sort
86
+ else
87
+ puts("Сортировочки пока нет...")
88
+ end
89
+ end
90
+ end
91
+
92
+ attr_accessor :window
93
+
94
+ private
95
+ attr_accessor :controller
96
+
97
+ def set_tab_book_handler
98
+ window.tabBook.connect(SEL_COMMAND) do |sender, selector, data|
99
+ if(sender.current == 0) then
100
+ self.refresh(reload: true)
101
+ end
102
+ end
103
+ end
104
+
105
+ def sort
106
+ self.controller.sort
107
+ self.refresh
108
+ end
109
+
110
+ def set_lcr_handlers
111
+ self.window.go_left_button.connect(SEL_COMMAND) do
112
+ self.controller.prev_page
113
+ self.refresh
114
+ end
115
+
116
+ self.window.go_right_button.connect(SEL_COMMAND) do
117
+ self.controller.next_page
118
+ self.refresh
119
+ end
120
+ end
121
+
122
+
123
+ def erase_table
124
+ for i in 0...self.window.table.numRows
125
+ for j in 0...self.window.table.numColumns
126
+ self.window.table.setItemText(i, j, "")
127
+ end
128
+ end
129
+ end
130
+
131
+ def refresh(reload: false)
132
+ self.controller.refresh_data(reload: reload)
133
+
134
+ self.window.page_count_label.text = self.controller.page_count.to_s
135
+ self.window.cur_page_label.text = self.controller.cur_page.to_s
136
+ end
137
+
138
+
139
+ end
metadata ADDED
@@ -0,0 +1,46 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: student_ctrl
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Aleksandr
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2023-05-27 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: This gem contains models and controllers for students app. You need to
14
+ make your own views.
15
+ email: aleksandr.ivanishev@bk.ru
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - C:/Users/Asus/Documents/GitHub/PP/laba2/laba2.1/student_list_controller.rb
21
+ - C:/Users/Asus/Documents/GitHub/PP/laba2/laba2.1/window.rb
22
+ homepage: ''
23
+ licenses:
24
+ - MIT
25
+ metadata:
26
+ source_code_uri: https://github.com/shurasikk/PP
27
+ post_install_message:
28
+ rdoc_options: []
29
+ require_paths:
30
+ - lib
31
+ required_ruby_version: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: '3.0'
36
+ required_rubygems_version: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ requirements: []
42
+ rubygems_version: 3.3.7
43
+ signing_key:
44
+ specification_version: 4
45
+ summary: Models and controllers for students app
46
+ test_files: []