From 2b51460f8ac922e6069d03a10563eb66abcc8c00 Mon Sep 17 00:00:00 2001 From: Igor Belitskiy Date: Fri, 28 Jul 2023 11:55:36 +0600 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=B7=D0=B0=D1=89=D0=B8=D1=82=D1=83=20=D0=BE=D1=82=20=D0=BF?= =?UTF-8?q?=D1=83=D1=81=D1=82=D1=8B=D1=85=20=D0=B8=20=D0=BD=D0=B5=D0=B2?= =?UTF-8?q?=D0=B5=D1=80=D0=BD=D1=8B=D1=85=20=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B?= =?UTF-8?q?=D0=B5=20=D0=B2=20=D0=BE=D0=BA=D0=BD=D0=BE=20=D1=80=D0=B5=D0=B4?= =?UTF-8?q?=D0=B0=D0=BA=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/model/model.c | 9 +- source/model/philos_utils.h | 3 + source/view_temp_u_g_p.c | 110 ++++++++++++++++++++--- ubl-settings-diskquota.glade | 165 ++++++++++++++++++++++++++++++++++- ubl-settings-diskquota.pot | 12 ++- ubl-settings-diskquota_ru.po | 8 ++ 6 files changed, 287 insertions(+), 20 deletions(-) diff --git a/source/model/model.c b/source/model/model.c index c9fb03c..e14e4e9 100644 --- a/source/model/model.c +++ b/source/model/model.c @@ -33,12 +33,13 @@ void model_clear_cfg_device(disk_status* _config) { } void model_free_vector_string(vector* vec_str) { - if (vec_str->vectorList.total> 0) { - for (int i = 0; i < vec_str->vectorList.total; i++) { - vectorDelete(vec_str, i); + if (vec_str) { + if (vec_str->vectorList.total> 0) { + for (int i = 0; i < vec_str->vectorList.total; i++) { + vectorDelete(vec_str, i); + } } } - } void model_tree_view_add(config_u_g_p* _config) { diff --git a/source/model/philos_utils.h b/source/model/philos_utils.h index 66c295b..43a8926 100644 --- a/source/model/philos_utils.h +++ b/source/model/philos_utils.h @@ -74,6 +74,9 @@ typedef struct { GtkWidget* entryUser; GtkWidget* UserDeviceCombo; GtkWidget* lblSetQuotasStatus; + GtkWidget* lblWarningText; + GtkWidget* WarrningWindow; + GtkWidget* CancelWarrningButton; } temp_set_window; typedef struct { diff --git a/source/view_temp_u_g_p.c b/source/view_temp_u_g_p.c index 079015a..414f618 100644 --- a/source/view_temp_u_g_p.c +++ b/source/view_temp_u_g_p.c @@ -9,7 +9,45 @@ config_all* _all_config_temp = NULL; int table_index = 0; char* disk = NULL; -vector* temp_vec_actors; +vector* temp_vec_actors = NULL; + +void temp_check_activ_disk() { + int menu_id = gtk_combo_box_get_active(GTK_COMBO_BOX(temp_widgets->UserDeviceCombo)); + if (menu_id == -1) { + gtk_widget_set_sensitive(temp_widgets->entryCatalogProject, 0); + gtk_widget_set_sensitive(temp_widgets->btnReviewProject, 0); + } + else { + gtk_widget_set_sensitive(temp_widgets->entryCatalogProject, 1); + gtk_widget_set_sensitive(temp_widgets->btnReviewProject, 1); + } +} +void destroy_show_warning(GtkWidget *self) { + gtk_widget_destroy(gtk_widget_get_toplevel(self)); + temp_widgets->WarrningWindow = NULL; + temp_widgets->CancelWarrningButton = NULL; + temp_widgets->lblWarningText = NULL; + block_btn_save(); +} +void show_warning() { + GtkBuilder *builder = gtk_builder_new_from_resource(_glade_path); + char* text_mess = yon_char_new(""); + temp_widgets->WarrningWindow = yon_gtk_builder_get_widget(builder,"WarrningWindow"); + temp_widgets->lblWarningText = yon_gtk_builder_get_widget(builder,"lblWarningText"); + temp_widgets->CancelWarrningButton = yon_gtk_builder_get_widget(builder,"CancelWarrningButton"); + char* str_disk = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(temp_widgets->UserDeviceCombo)); + for (int i = 0; i < _all_config_temp->v_disk_status.vectorList.total; i++) { + disk_status* _config = (disk_status*)_all_config_temp->v_disk_status.pfVectorGet(&_all_config_temp->v_disk_status, i); + if (strstr(str_disk, _config->device)) { + text_mess = _("The selected directory is not located on the target device"); + text_mess = yon_char_unite(text_mess, " ", _config->device, NULL); + } + } + gtk_label_set_label(GTK_LABEL(temp_widgets->lblWarningText), text_mess); + gtk_widget_show(temp_widgets->WarrningWindow); + g_signal_connect(G_OBJECT(temp_widgets->WarrningWindow), "destroy", G_CALLBACK(destroy_show_warning), temp_widgets->WarrningWindow); + g_signal_connect(G_OBJECT(temp_widgets->CancelWarrningButton),"clicked",G_CALLBACK(destroy_show_warning),temp_widgets->WarrningWindow); +} void set_disk(char* _disk) { disk = yon_char_new(_disk); @@ -27,8 +65,6 @@ void set_vector(vector* _vec_temp) { vec_temp = _vec_temp; } - - void temp_set_index(int _index) { table_index = _index; } @@ -49,6 +85,23 @@ temp_set_window *temp_setup_window_base(char* __glade_path) { return temp_widgets; } +void temp_check_path() { + char* str_disk = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(temp_widgets->UserDeviceCombo)); + for (int i = 0; i < _all_config_temp->v_disk_status.vectorList.total; i++) { + disk_status* _config = (disk_status*)_all_config_temp->v_disk_status.pfVectorGet(&_all_config_temp->v_disk_status, i); + if (strstr(str_disk, _config->device)) { + const char* str_path = gtk_entry_get_text(GTK_ENTRY(temp_widgets->entryCatalogProject)); + if (strstr(str_path,_config->mount_point)) { + } + else { + gtk_widget_set_sensitive(temp_widgets->btnSaveTempSave, 0); + show_warning(); + } + } + } + block_btn_save(); +} + temp_set_window *temp_setup_window_custom(temp_set_window* temp_widgets, GtkBuilder *builder) { temp_vec_actors = malloc(sizeof(vector)); vector_init(temp_vec_actors); @@ -89,6 +142,27 @@ temp_set_window *temp_setup_window_custom(temp_set_window* temp_widgets, GtkBuil table_u_g_set_glade_path(_glade_path); temp_settings(); } + +void temp_select_disk() { + block_btn_save(); + char* str_disk = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(temp_widgets->UserDeviceCombo)); + for (int i = 0; i < _all_config_temp->v_disk_status.vectorList.total; i++) { + disk_status* _config = (disk_status*)_all_config_temp->v_disk_status.pfVectorGet(&_all_config_temp->v_disk_status, i); + if (strstr(str_disk, _config->device)) { + if (_config->status == 2) { + gtk_label_set_label(GTK_LABEL(temp_widgets->lblSetQuotasStatus), _("On")); + } + else if (_config->status == 1){ + gtk_label_set_label(GTK_LABEL(temp_widgets->lblSetQuotasStatus), _("Off")); + } + else { + gtk_label_set_label(GTK_LABEL(temp_widgets->lblSetQuotasStatus), _("Not set")); + } + } + + } +} + void temp_settings() { char *split_simvol = " "; for (int i = 0; i < _all_config_temp->v_disk_status.vectorList.total; i++) { @@ -106,7 +180,6 @@ void temp_settings() { gtk_widget_hide(temp_widgets->lblSetUGP); gtk_widget_hide(temp_widgets->lblSetUGPData); gtk_widget_hide(temp_widgets->btnOpenUserGroup); - gtk_widget_hide(temp_widgets->boxTempDevice); gtk_widget_hide(temp_widgets->entryUser); if (strcmp(set_add_edit, "add")==0) { gtk_widget_hide(temp_widgets->lblCatalogProjectEdit); @@ -148,8 +221,7 @@ void temp_settings() { gtk_widget_hide(temp_widgets->entryUser); gtk_widget_hide(temp_widgets->UserDeviceCombo); gtk_label_set_label(GTK_LABEL(temp_widgets->lblHeadQuotasEditWindow), _("Settings disk quotas - Editing")); - } - + } } } @@ -200,12 +272,12 @@ void temp_event(temp_set_window* temp_widgets) { g_signal_connect(G_OBJECT(temp_widgets->quotegroupFilesHardLimitSpin), "changed", G_CALLBACK(block_btn_save), NULL); g_signal_connect(G_OBJECT(temp_widgets->quotegroupSizeSoftLimitCombo), "changed", G_CALLBACK(block_btn_save), NULL); g_signal_connect(G_OBJECT(temp_widgets->quotegroupSizeHardLimitCombo), "changed", G_CALLBACK(block_btn_save), NULL); - + g_signal_connect(G_OBJECT(temp_widgets->UserDeviceCombo), "changed", G_CALLBACK(temp_select_disk), NULL); if (strstr(flag_temp_u_g_p,"prjquota")) { g_signal_connect(G_OBJECT(temp_widgets->btnReviewProject),"clicked",G_CALLBACK(wrapper_show_file_manager),NULL); g_signal_connect(G_OBJECT(temp_widgets->btnGenerateProject),"clicked",G_CALLBACK(generate_id),NULL); g_signal_connect(G_OBJECT(temp_widgets->chbAuto),"toggled",G_CALLBACK(set_activ_project_id),NULL); - g_signal_connect(G_OBJECT(temp_widgets->entryCatalogProject), "changed", G_CALLBACK(block_btn_save), NULL); + g_signal_connect(G_OBJECT(temp_widgets->entryCatalogProject), "changed", G_CALLBACK(temp_check_path), NULL); g_signal_connect(G_OBJECT(temp_widgets->entryProjectId), "changed", G_CALLBACK(block_btn_save), NULL); g_signal_connect(G_OBJECT(temp_widgets->entryProjectName), "changed", G_CALLBACK(block_btn_save), NULL); } @@ -258,17 +330,25 @@ void wrapper_show_file_manager() { GtkBuilder *builder = gtk_builder_new_from_resource(_glade_path); show_file_manger(temp_widgets, builder); gtk_widget_show(temp_widgets->wndChooseFileWallpaper); - gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(temp_widgets->wndChooseFileWallpaper),"/home/"); + gtk_window_set_title(GTK_WINDOW(temp_widgets->wndChooseFileWallpaper), _("Please select folder")); + char* str_disk = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(temp_widgets->UserDeviceCombo)); + for (int i = 0; i < _all_config_temp->v_disk_status.vectorList.total; i++) { + disk_status* _config = (disk_status*)_all_config_temp->v_disk_status.pfVectorGet(&_all_config_temp->v_disk_status, i); + if (strstr(str_disk, _config->device)) { + gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(temp_widgets->wndChooseFileWallpaper),_config->mount_point); + } + } } void temp_destroy(GtkWidget *self) { if (self) { gtk_widget_destroy(gtk_widget_get_toplevel(self)); - model_free_vector_string(temp_vec_actors); - vectorFree(temp_vec_actors); - temp_vec_actors = NULL; + if (temp_vec_actors) { + model_free_vector_string(temp_vec_actors); + vectorFree(temp_vec_actors); + temp_vec_actors = NULL; + } temp_widgets = NULL; - temp_vec_actors = NULL; } } @@ -439,10 +519,11 @@ int check_save() { char* value2 = (char*)gtk_entry_get_text(GTK_ENTRY(temp_widgets->quotegroupSizeHardLimitSpin)); char* value3 = (char*)gtk_entry_get_text(GTK_ENTRY(temp_widgets->quotegroupFilesSoftLimitSpin)); char* value4 = (char*)gtk_entry_get_text(GTK_ENTRY(temp_widgets->quotegroupFilesHardLimitSpin)); + int menu_id = gtk_combo_box_get_active(GTK_COMBO_BOX(temp_widgets->UserDeviceCombo)); if (!active1 && !active2 && !active3 && !active4) { return 0; } - if (((!strcmp(value1, "0") || !strcmp(value1, "")) && active1) + if (menu_id == -1 || ((!strcmp(value1, "0") || !strcmp(value1, "")) && active1) || ((!strcmp(value2, "0") || !strcmp(value2, "")) && active2) || ((!strcmp(value3, "0") || !strcmp(value3, "")) && active3) || ((!strcmp(value4, "0") || !strcmp(value4, "")) && active4)) { @@ -475,6 +556,7 @@ int check_save_project() { int wrapper_check_save() { if (strstr(flag_temp_u_g_p,"prjquota")) { + temp_check_activ_disk(); int flag_save_project = check_save_project(); int flag_save = check_save(); if (flag_save_project && flag_save) { diff --git a/ubl-settings-diskquota.glade b/ubl-settings-diskquota.glade index 4194fdd..988f65d 100644 --- a/ubl-settings-diskquota.glade +++ b/ubl-settings-diskquota.glade @@ -194,6 +194,163 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + False + False + 450 + dialog-question-symbolic + + + True + False + 5 + 5 + 5 + 5 + 5 + 5 + vertical + 10 + + + True + False + + + True + False + start + 20 + 20 + dialog-information-symbolic + 6 + + + False + True + 0 + + + + + True + False + vertical + + + True + False + start + 10 + 5 + Warning + True + 0 + + + + + + + + False + True + 0 + + + + + True + False + start + start + 10 + 10 + The selected directory is not located on the target device + True + 0 + + + + False + True + 1 + + + + + + True + True + 1 + + + + + + True + True + 0 + + + + + True + False + 30 + True + + + Cancel + True + True + True + image1 + + + + True + True + 0 + + + + + False + True + 1 + + + + + + + True + False + True + + + True + False + Disk quotas + + + + + + + + 1000000 1 @@ -2174,6 +2331,11 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + True + False + process-stop-symbolic + True False @@ -4693,7 +4855,7 @@ limit False - Please select File + Please select folder True center 500 @@ -4704,6 +4866,7 @@ limit True True a + select-folder False diff --git a/ubl-settings-diskquota.pot b/ubl-settings-diskquota.pot index 060b37b..d64074e 100644 --- a/ubl-settings-diskquota.pot +++ b/ubl-settings-diskquota.pot @@ -399,4 +399,14 @@ msgid "Postponing the hard limit (files)" msgstr "" msgid "On" -msgstr "" \ No newline at end of file +msgstr "" + +msgid "Please select folder" +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "The selected directory is not located on the target device" +msgstr "" + diff --git a/ubl-settings-diskquota_ru.po b/ubl-settings-diskquota_ru.po index 0de235d..f2ab9db 100644 --- a/ubl-settings-diskquota_ru.po +++ b/ubl-settings-diskquota_ru.po @@ -403,3 +403,11 @@ msgstr "Отсрочка жёсткого ограничения (файлы)" msgid "On" msgstr "Включено" +msgid "Please select folder" +msgstr "Выберите каталог" + +msgid "Warning" +msgstr "Внимание" + +msgid "The selected directory is not located on the target device" +msgstr "Выбранный каталог не расположен на целевом устройстве" \ No newline at end of file