diff --git a/dokogen/dictionaries/net_categories.json b/dokogen/dictionaries/net_categories.json new file mode 100644 index 0000000..7f7204f --- /dev/null +++ b/dokogen/dictionaries/net_categories.json @@ -0,0 +1,9 @@ +[ + "общего пользования", + "выделенная", + "технологическая", + "присоединенная к сети связи общего пользования", + "специального назначения", + "другая сеть связи для передачи информации при помощи электромагнитных систем", + "взаимодействие с сетями электросвязи отсутствует" +] diff --git a/dokogen/dictionaries/net_methods.json b/dokogen/dictionaries/net_methods.json new file mode 100644 index 0000000..f706102 --- /dev/null +++ b/dokogen/dictionaries/net_methods.json @@ -0,0 +1,4 @@ +[ + "проводной", + "беспроводной" +] diff --git a/dokogen/dictionaries/net_purposes.json b/dokogen/dictionaries/net_purposes.json new file mode 100644 index 0000000..a550adb --- /dev/null +++ b/dokogen/dictionaries/net_purposes.json @@ -0,0 +1,7 @@ +[ + "передача (прием) информации", + "оказание услуг", + "управление", + "контроль за технологическим производственным оборудованием (исполнительными устройствами)", + "иная цель" +] diff --git a/dokogen/ui.py b/dokogen/ui.py index dfd4381..1bfd7d4 100644 --- a/dokogen/ui.py +++ b/dokogen/ui.py @@ -859,9 +859,9 @@ class DokoGenApp: setattr(self, attr, entry) subj_frame.columnconfigure(1, weight=1) - # ===== Вкладка «Сети и ПО» ===== + # ===== Вкладка «Сеть» ===== net_tab = ttk.Frame(nb2) - nb2.add(net_tab, text="Сети и ПО") + nb2.add(net_tab, text="Сеть") net_frame = ttk.Frame(net_tab, padding=8) net_frame.pack(fill=tk.BOTH, expand=True) @@ -873,26 +873,68 @@ class DokoGenApp: self.is_internet_var = tk.BooleanVar() ttk.Checkbutton(chk, text="Интернет", variable=self.is_internet_var).pack(side=tk.LEFT, padx=5) - net_fields = [ - ("Категория сети электросвязи:", "is_net_category_entry", 1), - ("Оператор связи/провайдер хостинга:", "is_net_operator_entry", 2), - ("Цель взаимодействия с сетью:", "is_net_purpose_entry", 3), - ("Способ взаимодействия/тип доступа:", "is_net_method_entry", 4), - ("ПО и аппаратные средства:", "is_hw_sw_entry", 5), - ("Общесистемное ПО (ОС, виртуализация):", "is_os_sw_entry", 6), - ("Прикладные программы:", "is_app_sw_entry", 7), - ("Программное обеспечение:", "is_software_entry", 8), - ] - for label, attr, row in net_fields: - ttk.Label(net_frame, text=label).grid(row=row, column=0, sticky=tk.W, pady=2) - entry = ttk.Entry(net_frame, width=70) - entry.grid(row=row, column=1, padx=8, sticky=tk.EW, pady=1) - setattr(self, attr, entry) + # Категория сети — словарик + ttk.Label(net_frame, text="Категория сети электросвязи:").grid(row=1, column=0, sticky=tk.W, pady=2) + self.is_net_category_combo = ttk.Combobox(net_frame, width=68) + self.is_net_category_combo.grid(row=1, column=1, padx=8, sticky=tk.EW, pady=1) + try: + import json as _json + _nc = os.path.join(os.path.dirname(__file__), 'dictionaries', 'net_categories.json') + with open(_nc, encoding='utf-8') as _f: + self.is_net_category_combo['values'] = _json.load(_f) + except Exception: + pass + + # Провайдер + ttk.Label(net_frame, text="Наименование провайдера:").grid(row=2, column=0, sticky=tk.W, pady=2) + self.is_net_operator_entry = ttk.Entry(net_frame, width=70) + self.is_net_operator_entry.grid(row=2, column=1, padx=8, sticky=tk.EW, pady=1) + + # Цель взаимодействия — словарик + ttk.Label(net_frame, text="Цель взаимодействия с сетью электросвязи:").grid(row=3, column=0, sticky=tk.W, pady=2) + self.is_net_purpose_combo = ttk.Combobox(net_frame, width=68) + self.is_net_purpose_combo.grid(row=3, column=1, padx=8, sticky=tk.EW, pady=1) + try: + _np = os.path.join(os.path.dirname(__file__), 'dictionaries', 'net_purposes.json') + with open(_np, encoding='utf-8') as _f: + self.is_net_purpose_combo['values'] = _json.load(_f) + except Exception: + pass + + # Способ взаимодействия — словарик + ttk.Label(net_frame, text="Способ взаимодействия (тип доступа):").grid(row=4, column=0, sticky=tk.W, pady=2) + self.is_net_method_combo = ttk.Combobox(net_frame, width=68) + self.is_net_method_combo.grid(row=4, column=1, padx=8, sticky=tk.EW, pady=1) + try: + _nm = os.path.join(os.path.dirname(__file__), 'dictionaries', 'net_methods.json') + with open(_nm, encoding='utf-8') as _f: + self.is_net_method_combo['values'] = _json.load(_f) + except Exception: + pass + net_frame.columnconfigure(1, weight=1) + # ===== Вкладка «ПО» ===== + sw_tab = ttk.Frame(nb2) + nb2.add(sw_tab, text="ПО") + sw_frame = ttk.Frame(sw_tab, padding=8) + sw_frame.pack(fill=tk.BOTH, expand=True) + + sw_fields = [ + ("ПО и аппаратные средства (модели, производители, количество):", "is_hw_sw_entry"), + ("Операционные системы:", "is_os_sw_entry"), + ("Прикладные программы (MS Office, OpenOffice и пр.):", "is_app_sw_entry"), + ] + for i, (label, attr) in enumerate(sw_fields): + ttk.Label(sw_frame, text=label).grid(row=i, column=0, sticky=tk.W, pady=2) + entry = ttk.Entry(sw_frame, width=70) + entry.grid(row=i, column=1, padx=8, sticky=tk.EW, pady=1) + setattr(self, attr, entry) + sw_frame.columnconfigure(1, weight=1) + # ===== Вкладка «Безопасность (236)» ===== sec_tab = ttk.Frame(nb2) - nb2.add(sec_tab, text="Безопасность (236)") + nb2.add(sec_tab, text="Безопасность") sec_frame = ttk.Frame(sec_tab, padding=8) sec_frame.pack(fill=tk.BOTH, expand=True) sec_fields = [ @@ -1172,10 +1214,10 @@ class DokoGenApp: ('is_subject_element_entry', 'subject_element'), ('is_subject_inn_entry', 'subject_inn'), ('is_subject_kpp_entry', 'subject_kpp'), - ('is_net_category_entry', 'net_category'), + ('is_net_category_combo', 'net_category'), ('is_net_operator_entry', 'net_operator'), - ('is_net_purpose_entry', 'net_purpose'), - ('is_net_method_entry', 'net_method'), + ('is_net_purpose_combo', 'net_purpose'), + ('is_net_method_combo', 'net_method'), ('is_hw_sw_entry', 'hw_sw'), ('is_os_sw_entry', 'os_sw'), ('is_app_sw_entry', 'app_sw'), @@ -1405,10 +1447,10 @@ class DokoGenApp: ('is_subject_element_entry', 'subject_element'), ('is_subject_inn_entry', 'subject_inn'), ('is_subject_kpp_entry', 'subject_kpp'), - ('is_net_category_entry', 'net_category'), + ('is_net_category_combo', 'net_category'), ('is_net_operator_entry', 'net_operator'), - ('is_net_purpose_entry', 'net_purpose'), - ('is_net_method_entry', 'net_method'), + ('is_net_purpose_combo', 'net_purpose'), + ('is_net_method_combo', 'net_method'), ('is_hw_sw_entry', 'hw_sw'), ('is_os_sw_entry', 'os_sw'), ('is_app_sw_entry', 'app_sw'),