diff --git a/.gitignore b/.gitignore
index caa5726..5a6c163 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,4 +2,7 @@
ubl-settings-resourcequota.glade~
ubl-settings-resourcequota_ru.po~
source/ubl-cmake.h
-ubl-settings-resourcequota
\ No newline at end of file
+ubl-settings-resourcequota
+build/
+compile
+vgcore.*
\ No newline at end of file
diff --git a/Makefile b/Makefile
index af4d520..c873688 100644
--- a/Makefile
+++ b/Makefile
@@ -8,10 +8,13 @@ MAKEFILE_PATH := $(dir $(MAKEFILE_FILEPATH))
CMAKE_COMMAND = cmake
CMAKE_SOURCE_DIR = $(MAKEFILE_PATH)source
CMAKE_BUILD_DIR = $(MAKEFILE_PATH)compile
+#CMAKE_SOURCE_DIR = ./source
+#CMAKE_BUILD_DIR = ./compile
DEPENDS = /bin/cmake
PREFIX ?= /usr
PKGNAME = $(MAKEFILE_DIR)
-
+#PKGNAME = ubl-settings-manager
+LATEST_TAG=
default_target: all
.PHONY: all init depend debug prepare check build uninstall install clean help
@@ -21,11 +24,11 @@ all: init build
init:
@echo "Initialize ..."; \
if [ -d ".git" ]; then \
- LATEST_TAG=$$(git describe --tags | sed 's/^v//'); \
+ LATEST_TAG=$$(git describe --tags | sed 's/^v//'|grep -oE "^[0-9]{1,}.[0-9]{1,}"); \
else \
LATEST_TAG="0.0"; \
fi; \
- sed -r "s/^(string version_application = ).*/\1\"$${LATEST_TAG}\";/" -i source/${PKGNAME}.h; \
+ sed -r "s/^(string version_application).*/\1=\"$${LATEST_TAG}\";/" -i source/${PKGNAME}.h; \
echo "-- Build path: ${CMAKE_BUILD_DIR}"
depend:
@@ -36,15 +39,16 @@ depend:
exit 1; \
fi; \
done; \
- $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B${CMAKE_BUILD_DIR} --check-build-system CMakeFiles/Makefile.cmake 1 || exit 1; \
echo "Check depends: OK"
+# $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
-debug:
- @echo "Debug ..."
+debug: init build
+ @echo "Debug ..."; \
if [ ! -d ${CMAKE_BUILD_DIR} ]; then \
$(CMAKE_COMMAND) -S${CMAKE_SOURCE_DIR} -B${CMAKE_BUILD_DIR} -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX="${PREFIX}"; \
-# @cc source/my_device.c source/my_device.h source/filters.c source/filters.h source/ubl-cmake.h source/view_edit.h source/view_edit.c source/view_add.h source/view_add.c source/ubl-utils.h source/ubl-utils.c source/ubl-strings.h source/ubl-settings-resourcequota.h source/ubl-settings-resourcequota.c -o ubl-settings-resourcequota `pkg-config --cflags --libs gtk+-3.0 vte-2.91 webkit2gtk-4.0 webkit2gtk-web-extension-4.0` -g
fi; \
+ echo "${CMAKE_BUILD_DIR}/${PKGNAME}"; \
+ cp ${CMAKE_BUILD_DIR}/${PKGNAME} ./; \
echo "Debug: OK"
prepare:
@@ -88,7 +92,9 @@ uninstall:
@$(RM) "${DESTDIR}${PREFIX}/bin/${PKGNAME}"
@$(RM) "${DESTDIR}${PREFIX}/share/applications/${PKGNAME}.desktop"
@$(RM) "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/apps/com.ublinux.${PKGNAME}.svg"
- @$(RM) -rd "${DESTDIR}${PREFIX}/share/${PKGNAME}"
+ @$(RM) "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/apps/com.ublinux.${PKGNAME}.checked.svg"
+ @$(RM) "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/apps/com.ublinux.${PKGNAME}.warning.svg"
+ @$(RM) "${DESTDIR}${PREFIX}/share/polkit-1/actions/com.ublinux.${PKGNAME}.policy"
@if [ -z ${DESTDIR} ]; then \
[ -d "${DESTDIR}${PREFIX}/share/icons/hicolor/" ] && gtk-update-icon-cache -fiq "${DESTDIR}${PREFIX}/share/icons/hicolor/" &>/dev/null || true; \
update-desktop-database --quiet &>/dev/null || true; \
@@ -112,14 +118,12 @@ install: check uninstall
done
@install -dm755 "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/apps"
@install -Dm644 -t "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/apps/" "com.ublinux.${PKGNAME}.svg"
+ @install -dm755 "${DESTDIR}${PREFIX}/share/polkit-1/actions"
+ @install -Dm644 -t "${DESTDIR}${PREFIX}/share/polkit-1/actions/" "com.ublinux.${PKGNAME}.policy"
@install -Dm755 -t "${DESTDIR}${PREFIX}/bin/" "${CMAKE_BUILD_DIR}/${PKGNAME}"
+ @install -dm755 "${DESTDIR}/etc/xdg"
@install -dm755 "${DESTDIR}${PREFIX}/share/applications"
@install -Dm644 -t "${DESTDIR}${PREFIX}/share/applications/" "${PKGNAME}.desktop"
- @install -dm755 "${DESTDIR}${PREFIX}/share/${PKGNAME}"/{ui,css,images}
- @install -Dm644 -t "${DESTDIR}${PREFIX}/share/${PKGNAME}/ui/" "${PKGNAME}.glade"
- @install -Dm644 -t "${DESTDIR}${PREFIX}/share/${PKGNAME}/css/" "${PKGNAME}.css"
- @install -dm755 -d "${DESTDIR}${PREFIX}/share/${PKGNAME}/images"
- @install -Dm644 -t "${DESTDIR}${PREFIX}/share/${PKGNAME}/images/" "${PKGNAME}-banner.png"
@install -Dm644 -t "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/status/" "com.ublinux.${PKGNAME}.checked.svg"
@install -Dm644 -t "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/status/" "com.ublinux.${PKGNAME}.warning.svg"
@install -Dm644 -t "${DESTDIR}${PREFIX}/share/icons/hicolor/scalable/status/" "com.ublinux.${PKGNAME}.funnel.svg"
@@ -129,6 +133,7 @@ install: check uninstall
[ -d "${DESTDIR}${PREFIX}/share/applications" ] && touch "${DESTDIR}${PREFIX}/share/applications" &>/dev/null || true; \
fi
@echo "Install: OK"
+ @sed -r "s/^(string version_application=\"*\").*/string version_application;/" -i source/${PKGNAME}.h; \
clean:
@echo "Clean ..."
@@ -139,6 +144,14 @@ clean:
echo "Clean: OK"; \
fi
+up_ver:
+ @CURRENT=$$(grep 'VERSION' ${FILE_VERSION} | cut -d" " -f2); \
+ MAJOR=$$(cut -d. -f1 <<< $${CURRENT}); \
+ MINOR=$$(cut -d. -f2 <<< $${CURRENT}); \
+ VER="$${MAJOR}.$$(($${MINOR}+1))"; \
+ sed "s/VERSION *[[:digit:]]*.*/VERSION $${VER}/" -i ${FILE_VERSION}; \
+ echo "Updated version to VERSION.md: $${CURRENT} to $${VER}"
+
help:
@echo "The following are some of the valid targets for this Makefile:"; \
echo "... all (the default if no target is provided)"; \
@@ -148,4 +161,5 @@ help:
echo "... compile"; \
echo "... install"; \
echo "... uninstall"; \
- echo "... clean"
+ echo "... clean"; \
+ echo "... up_ver"
\ No newline at end of file
diff --git a/gresource.xml b/gresource.xml
new file mode 100644
index 0000000..ed4693e
--- /dev/null
+++ b/gresource.xml
@@ -0,0 +1,12 @@
+
+
+
+ ubl-settings-resourcequota.glade
+
+
+ ubl-settings-resourcequota.css
+
+
+ ubl-settings-resourcequota-banner.png
+
+
\ No newline at end of file
diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt
index b61aca0..5202797 100644
--- a/source/CMakeLists.txt
+++ b/source/CMakeLists.txt
@@ -1,12 +1,12 @@
-cmake_minimum_required(VERSION 3.23)
+cmake_minimum_required(VERSION 3.7)
project(ubl-settings-resourcequota)
find_package(PkgConfig REQUIRED)
-pkg_check_modules(GTK3 REQUIRED gtk+-3.0)
-include_directories(${GTK3_INCLUDE_DIRS})
-link_directories(${GTK3_LIBRARY_DIRS})
-add_definitions(${GTK3_CFLAGS_OTHER})
+pkg_check_modules(GTK REQUIRED gtk+-3.0)
+include_directories(${GTK_INCLUDE_DIRS})
+link_directories(${GTK_LIBRARY_DIRS})
+add_definitions(${GTK_CFLAGS_OTHER})
pkg_check_modules(VTE291 REQUIRED vte-2.91)
include_directories(${VTE291_INCLUDE_DIRS})
@@ -24,7 +24,42 @@ if(WEBKIT_LIBRARIES_FOUND)
add_definitions(${WEBKIT_CFLAGS_OTHER})
endif()
-configure_file(ubl-cmake.h.in ubl-cmake.h)
+configure_file(ubl-cmake.in ubl-cmake.h)
+
+file(COPY ${CMAKE_CURRENT_BINARY_DIR}/ubl-cmake.h DESTINATION ./)
+
+set(GRESOURCE_C resources.c)
+set(GRESOURCE_XML gresource.xml)
+
+find_program(GLIB_COMPILE_RESOURCES NAMES glib-compile-resources REQUIRED)
+add_custom_target(GLADE ubl-settings-resourcequota.glade)
+
+set(DEPENDFILES
+ ../ubl-settings-resourcequota.glade
+ ../gresource.xml
+ ../ubl-settings-resourcequota-banner.png
+ ../ubl-settings-resourcequota.css
+ )
+
+file(COPY ${DEPENDFILES} DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
+
+add_custom_command(
+ OUTPUT ${GRESOURCE_C}
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ COMMAND ${GLIB_COMPILE_RESOURCES}
+ ARGS
+ --generate-source
+ --target=${CMAKE_CURRENT_BINARY_DIR}/${GRESOURCE_C}
+ ${GRESOURCE_XML}
+ VERBATIM
+ MAIN_DEPENDENCY ${GRESOURCE_XML}
+ DEPENDS
+ ${GLADE}
+)
+add_custom_target(
+ dummy-resource
+ DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${GRESOURCE_C}
+)
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissing-declarations -fdiagnostics-color=always -std=c++2a")
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissing-declarations -fdiagnostics-color=always -lm")
@@ -32,6 +67,7 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissin
-O2 -pipe -fno-plt -fexceptions \
-Wp,-D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security \
-fstack-clash-protection -fcf-protection")
+
set(SOURCE_FILES
ubl-settings-resourcequota.c
@@ -47,15 +83,25 @@ set(SOURCE_FILES
ubl-strings.h
ubl-utils.h
ubl-utils.c
- ubl-cmake.h)
+ ubl-cmake.h
+ philos_utils.c
+ philos_utils.h
+ ${CMAKE_CURRENT_BINARY_DIR}/ubl-cmake.h
+ )
set(LIBRARIES
- ${GTK3_LIBRARIES}
+ ${GTK_LIBRARIES}
${WEBKIT_LIBRARIES}
${VTE291_LIBRARIES}
pthread)
-add_executable(${PROJECT_NAME} ${SOURCE_FILES})
+
+add_executable(${PROJECT_NAME} ${SOURCE_FILES} ${CMAKE_CURRENT_BINARY_DIR}/${GRESOURCE_C})
target_link_libraries(${PROJECT_NAME} PUBLIC ${LIBRARIES})
target_include_directories(${PROJECT_NAME} PUBLIC ${PROJECT_BINARY_DIR})
-install(TARGETS ${PROJECT_NAME} DESTINATION bin)
\ No newline at end of file
+set_source_files_properties(
+ ${CMAKE_CURRENT_BINARY_DIR}/${GRESOURCE_C}
+ PROPERTIES GENERATED TRUE
+)
+install(TARGETS ${PROJECT_NAME} DESTINATION bin)
+add_dependencies(${PROJECT_NAME} dummy-resource)
\ No newline at end of file
diff --git a/source/filters.c b/source/filters.c
index c5f816e..f4397b9 100644
--- a/source/filters.c
+++ b/source/filters.c
@@ -5,7 +5,7 @@ gboolean flag_filters[8];
filters_window *filters_setup_window(char* glade_path){
if (filters_widgets == NULL) {
filters_widgets = malloc(sizeof(filters_window));
- GtkBuilder *builder = gtk_builder_new_from_file(glade_path);
+ GtkBuilder *builder = gtk_builder_new_from_resource(glade_path);
filters_widgets->Window = yon_gtk_builder_get_widget(builder,"wndFilters");
filters_widgets->chbFilterTypeQouota = yon_gtk_builder_get_widget(builder,"chbFilterTypeQouota");
filters_widgets->chbQuotaVolume = yon_gtk_builder_get_widget(builder,"chbQuotaVolume");
diff --git a/source/filters.h b/source/filters.h
index 96025df..8dd6a40 100644
--- a/source/filters.h
+++ b/source/filters.h
@@ -11,7 +11,7 @@
#include
#include
#include
-
+#include "philos_utils.h"
// Переменные
typedef struct {
diff --git a/source/my_device.c b/source/my_device.c
index 995306d..614a3ff 100644
--- a/source/my_device.c
+++ b/source/my_device.c
@@ -10,11 +10,10 @@ void device_disk_parsed() {
char* cmd = "lsblk --fs --raw --output PATH,FSTYPE --exclude 7,11,253";
int size = 0;
char** responce = yon_config_load(cmd, &size);
- char* disk = NULL;
obj_device_config.size_disk = 0;
char* split_simvol = " ";
for (int index = 1; index < size; index++ ) {
- disk = yon_char_divide_search(responce[index], "\n", -1);
+ char* disk = yon_char_divide_search(responce[index], "\n", -1);
if (yon_char_find_count(disk, " ") != 0) {
char* name_disk = yon_char_divide_search(disk, " ", -1);
obj_device_config.name_disk = yon_char_parsed_append(obj_device_config.name_disk, &obj_device_config.size_disk, name_disk);
@@ -25,34 +24,27 @@ void device_disk_parsed() {
obj_device_config.size_disk--;
obj_device_config.type_dick = yon_char_parsed_append(obj_device_config.type_dick, &obj_device_config.size_disk, "");
obj_device_config.size_disk--;
- char* description_disk = yon_char_unite(name_disk,
+ disk = yon_char_replace(disk," ", "");
+ if (strlen(disk)!=0) {
+ char* description_disk = yon_char_unite(name_disk,
split_simvol,
disk,
NULL);
- obj_device_config.description_disk = yon_char_parsed_append(obj_device_config.description_disk, &obj_device_config.size_disk, description_disk);
- free(description_disk);
+ obj_device_config.description_disk = yon_char_parsed_append(obj_device_config.description_disk, &obj_device_config.size_disk, description_disk);
+ free(description_disk);
+
+ }
free(name_disk);
}
- else {
- obj_device_config.name_disk = yon_char_parsed_append(obj_device_config.name_disk, &obj_device_config.size_disk, disk);
- obj_device_config.size_disk--;
- obj_device_config.file_system = yon_char_parsed_append(obj_device_config.file_system, &obj_device_config.size_disk, "");
- obj_device_config.size_disk--;
- obj_device_config.mounted = yon_char_parsed_append(obj_device_config.mounted, &obj_device_config.size_disk, "");
- obj_device_config.size_disk--;
- obj_device_config.type_dick = yon_char_parsed_append(obj_device_config.type_dick, &obj_device_config.size_disk, "");
- obj_device_config.size_disk--;
- char* description_disk = yon_char_unite(disk,
- split_simvol,
- NULL);
- obj_device_config.description_disk = yon_char_parsed_append(obj_device_config.description_disk, &obj_device_config.size_disk, description_disk);
- free(description_disk);
- }
+ free(disk);
}
+ philos_free_string_array(&responce, size);
}
void device_fill_disk(GtkWidget* combo_box_text) {
for (int index = 0; index < obj_device_config.size_disk; index++) {
gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo_box_text), obj_device_config.description_disk[index]);
}
-}
\ No newline at end of file
+}
+
+
diff --git a/source/my_device.h b/source/my_device.h
index 4b695a0..c2ef0e6 100644
--- a/source/my_device.h
+++ b/source/my_device.h
@@ -4,6 +4,7 @@
#include
#include
#include
+#include "philos_utils.h"
typedef struct {
char** name_disk;
char** file_system;
@@ -16,5 +17,8 @@ typedef struct {
void device_disk_parsed();
device_config* get_device_cfg();
void device_fill_disk(GtkWidget* combo_box_text);
+size_t get_mem_total();
+float get_size_pow_memory(size_t size_memory, int size);
+size_t get_resurs_total(char* cmd);
#endif
\ No newline at end of file
diff --git a/source/philos_utils.c b/source/philos_utils.c
new file mode 100644
index 0000000..b32822e
--- /dev/null
+++ b/source/philos_utils.c
@@ -0,0 +1,1138 @@
+#include "philos_utils.h"
+
+void philos_array_string_remove_char(char*** array, char* str_remove, int size) {
+ for (int index = 0; index < size; index++) {
+ (*array)[index] = yon_char_divide_search((*array)[index], str_remove, -1);
+ }
+
+}
+
+void philos_set_pow_size_memory(char* str_find, int** array_size,int index, char** array_size_pow) {
+ char* STR_KB = array_size_pow[0];
+ char* STR_MB = array_size_pow[1];
+ char* STR_GB = array_size_pow[2];
+ char* STR_TB = array_size_pow[3];
+ size_t length = strlen(str_find);
+ if (strstr(str_find,"K") != NULL) {
+ *array_size = philos_int_append(*array_size, &index, 0);
+ str_find = yon_char_divide(str_find, length-1);
+ str_find = yon_char_unite(str_find, " ", STR_KB, NULL);
+ index--;
+ }
+ else if (strstr(str_find,"M") != NULL) {
+ *array_size = philos_int_append(*array_size, &index, 1);
+ str_find = yon_char_divide(str_find, length-1);
+ str_find = yon_char_unite(str_find," ", STR_MB, NULL);
+ index--;
+ }
+ else if (strstr(str_find,"G") != NULL) {
+ *array_size = philos_int_append(*array_size, &index, 2);
+ str_find = yon_char_divide(str_find, length-1);
+ str_find = yon_char_unite(str_find," ", STR_GB, NULL);
+ index--;
+ }
+ else if (strstr(str_find,"T") != NULL) {
+ *array_size = philos_int_append(*array_size, &index, 3);
+ str_find = yon_char_divide(str_find, length-1);
+
+ str_find = yon_char_unite(str_find," ", STR_TB, NULL);
+ index--;
+ }
+ else if (strstr(str_find,"%%") != NULL) {
+ *array_size = philos_int_append(*array_size, &index, -1);
+ str_find = yon_char_divide(str_find, length-1);
+ index--;
+ }
+ else if (strstr(str_find,"-") != NULL) {
+ *array_size = philos_int_append(*array_size, &index, -1);
+ index--;
+ }
+
+}
+void philos_set_pow_size_memory_device(char* str_find, int** array_size,int index, char** array_size_pow) {
+ char* STR_KB = array_size_pow[0];
+ char* STR_MB = array_size_pow[1];
+ char* STR_GB = array_size_pow[2];
+ char* STR_TB = array_size_pow[3];
+ size_t length = strlen(str_find);
+ if (strstr(str_find,"K") != NULL) {
+ (*array_size)[index] = 0;
+ str_find = yon_char_divide(str_find, length-1);
+ str_find = yon_char_unite(str_find, " ", STR_KB, NULL);
+ index--;
+ }
+ else if (strstr(str_find,"M") != NULL) {
+ (*array_size)[index] = 1;
+ str_find = yon_char_divide(str_find, length-1);
+ str_find = yon_char_unite(str_find," ", STR_MB, NULL);
+ index--;
+ }
+ else if (strstr(str_find,"G") != NULL) {
+ (*array_size)[index] = 2;
+ str_find = yon_char_divide(str_find, length-1);
+ str_find = yon_char_unite(str_find," ", STR_GB, NULL);
+ index--;
+ }
+ else if (strstr(str_find,"T") != NULL) {
+ (*array_size)[index] = 3;
+ str_find = yon_char_divide(str_find, length-1);
+
+ str_find = yon_char_unite(str_find," ", STR_TB, NULL);
+ index--;
+ }
+ else if (strstr(str_find,"%%") != NULL) {
+ (*array_size)[index] = -1;
+ str_find = yon_char_divide(str_find, length-1);
+ index--;
+ }
+ else if (strstr(str_find,"-") != NULL) {
+ (*array_size)[index] = -1;
+ index--;
+ }
+
+}
+void philos_set_size_memory_integer_char(char* str_find, char*** array_data, int index) {
+ char* simv_del_array[10] = {"K","M","G","T","k","m","g","t"," ","%"};
+ for (size_t i = 0; i < 10; i++) {
+ if (strstr(str_find, simv_del_array[i])) {
+ str_find = yon_char_divide_search(str_find, simv_del_array[i], -1);
+ }
+ }
+ if (strstr(str_find, " ") != NULL) {
+ char* mem_s = yon_char_new(str_find);
+ yon_char_divide_search(mem_s, " ", -1);
+ *array_data = yon_char_parsed_append(*array_data, &index, mem_s);
+ }
+ if (strstr(str_find, "-") != NULL) {
+ *array_data = yon_char_parsed_append(*array_data, &index, "-");
+ }
+ else {
+ if (str_find[0] == '\"') {
+ yon_char_divide(str_find, 0);
+ size_t length = strlen(str_find);
+ str_find = yon_char_divide(str_find, length-2);
+ }
+ if (strstr(str_find, " ") == NULL) {
+ *array_data = yon_char_parsed_append(*array_data, &index, str_find);
+ }
+
+ }
+}
+
+void philos_free_string_array(char ***array, int size) {
+ if ((*array) == NULL) {
+ return;
+ }
+ for (int i = 0; i < size; i++){
+ free((*array)[i]);
+ }
+ if (size!= 0) {
+ free(*array);
+ (*array) = NULL;
+ }
+}
+
+void philos_free_string_array_n3(char ****array, int size) {
+ if ((*array) == NULL || size == 0) {
+ return;
+ }
+ int index_to_l2 = 0;
+ for (int i = 0; i < size; i++){
+ index_to_l2 = 0;
+ if ((*array)[i]!=NULL) {
+ while ((*array)[i][index_to_l2] != NULL) {
+ if ((*array)[i][index_to_l2] != NULL) {
+ free((*array)[i][index_to_l2]);
+ index_to_l2++;
+ }
+
+ }
+ }
+ free((*array)[i]);
+
+ }
+ if (size!= 0) {
+ free(*array);
+ (*array) = NULL;
+ }
+}
+
+void philos_free_int_array(int **array, int size) {
+ if (size!= 0) {
+ free(*array);
+ *array = NULL;
+ }
+}
+void philos_free_int_array_n2(int ***array, int size) {
+ if ((*array) == NULL || size == 0) {
+ return;
+ }
+ for (int i = 0; i < size; i++){
+ free((*array)[i]);
+ }
+ if (size!= 0) {
+ free(*array);
+ (*array) = NULL;
+ }
+}
+
+config_str philos_list_group(int* size) {
+ char* str_uid_min = "UID_MIN";
+ char* str_uid_max = "UID_MAX";
+ unsigned short uid_min = philos_read_uid_min_max(file_source_login_min_max, str_uid_min);
+ unsigned short uid_max = philos_read_uid_min_max(file_source_login_min_max, str_uid_max);
+ config_str str_users = malloc(1);
+ while (1) {
+ errno = 0;
+ struct passwd* entry = getpwent();
+ if (!entry) {
+ if (errno) {
+ return str_users;
+ }
+ break;
+ }
+ if ((entry->pw_uid >= uid_min && entry->pw_uid < uid_max) || entry->pw_uid == 0) {
+ str_users = yon_char_parsed_append(str_users, size, entry->pw_name);
+ }
+ }
+ endpwent();
+ return str_users;
+}
+
+unsigned short philos_read_uid_min_max(char* filename, char* search) {
+ int uid = 0;
+ char* remove_tab = "\t";
+ char* remove_space = " ";
+ char* search_uid_min = "UID_MIN";
+ int buff_size = 255;
+ char* line = g_malloc0(buff_size);
+ char* search_true = yon_char_get_augumented("SYS_", search);
+ FILE *fp = fopen(filename, "r");
+ if(fp) {
+ while((fgets(line, buff_size, fp)) != NULL) {
+ try{
+ if (yon_char_find_count(line, search) != 0 && yon_char_find_count(line, search_true) == 0) {
+ line = philos_str_remove(line, search);
+ line = philos_str_remove(line, remove_space);
+ line = philos_str_remove(line, remove_tab);
+ uid = atoi(line);
+
+ }
+ }
+ catch (...) {
+ if (yon_char_find_count(search, search_uid_min) != 0){
+ uid = 1000;
+ }
+ else{
+ uid = 65534;
+ }
+ }
+ }
+ }
+ else{
+ if (yon_char_find_count(search, search_uid_min) != 0) {
+ uid = 1000;
+ }
+ else{
+ uid = 65534;
+ }
+ }
+ fclose(fp);
+ free(line);
+ free(search_true);
+ return uid;
+
+}
+
+
+config_str philos_list_user(int* size) {
+ char* str_uid_min = "UID_MIN";
+ char* str_uid_max = "UID_MAX";
+ unsigned short uid_min = philos_read_uid_min_max(file_source_login_min_max, str_uid_min);
+ unsigned short uid_max = philos_read_uid_min_max(file_source_login_min_max, str_uid_max);
+ config_str str_users = malloc(1);
+ while (1) {
+ errno = 0;
+ struct passwd* entry = getpwent();
+ if (!entry) {
+ if (errno) {
+ return str_users;
+ }
+ break;
+ }
+ str_users = yon_char_parsed_append(str_users, size, entry->pw_name);
+ }
+ endpwent();
+ return str_users;
+}
+
+char* philos_str_size_pow_byte(GtkWidget *combo_box_text) {
+ int menu_id = gtk_combo_box_get_active(GTK_COMBO_BOX(combo_box_text));
+ if (menu_id == 0) {
+ return "K";
+ }
+ else if (menu_id == 1) {
+ return "M";
+ }
+ else if (menu_id == 2) {
+ return "G";
+ }
+ else if (menu_id == 3) {
+ return "T";
+ }
+ else {
+ return " ";
+ }
+}
+
+char* philos_str_remove(char *str, const char *sub) {
+ size_t len = strlen(sub);
+ if (len > 0) {
+ char *p = str;
+ size_t size = 0;
+ while ((p = strstr(p, sub)) != NULL) {
+ size = (size == 0) ? (p - str) + strlen(p + len) + 1 : size - len;
+ memmove(p, p + len, size - (p - str));
+ }
+ }
+ return str;
+}
+
+
+void philos_split_size_memory(char* str_value, int* size, char* pow_memory) {
+ (*size) = atoi(yon_char_divide_search(pow_memory, " ", -1));
+}
+
+char* philos_format_cfg_str_size_memory(char* str_key, int value, int pow_size_memory) {
+ if (value == -1 || value == -3 || pow_size_memory == -3) {
+ return yon_char_new("-");
+ }
+ char* str_value = yon_char_from_int(value);
+ if (pow_size_memory==0) {
+ return yon_char_unite(str_key, str_value, "K" ,NULL);
+ }
+ else if (pow_size_memory==1) {
+ return yon_char_unite(str_key, str_value, "M" ,NULL);
+ }
+ else if (pow_size_memory==2){
+ return yon_char_unite(str_key, str_value, "G" ,NULL);
+ }
+ else if (pow_size_memory== 3) {
+ return yon_char_unite(str_key, str_value, "T" ,NULL);
+ }
+ else if (pow_size_memory== -1) {
+ return yon_char_unite(str_key, str_value, "%" ,NULL);
+ }
+ else if (pow_size_memory== -3) {
+ return yon_char_new("-");
+ }
+ else {
+ return yon_char_new("-");
+ }
+}
+
+char** philos_str_split(char *parameters, int *size, char *divider) {
+ char** array_split = NULL;
+ char* ch= NULL;
+ ch = strtok(parameters, divider);
+ if (ch != NULL) {
+ array_split = yon_char_parsed_append(array_split, size, ch);
+ while (ch != NULL) {
+ ch = strtok(NULL, divider);
+ array_split = yon_char_parsed_append(array_split, size, ch);
+ }
+ }
+ (*size) -= 1;
+ return array_split;
+}
+
+void philos_array_str_copy(char*** source, char*** copy) {
+ int index = 0;
+ if (copy == NULL || source == NULL) {
+ return;
+ }
+ while (1) {
+ if ((*copy)[index] != NULL) {
+ (*source) = yon_char_parsed_append((*source), &index, yon_char_new((*copy)[index]));
+ }
+ else {
+ break;
+ }
+ }
+}
+void philos_array_int_copy(int** source, int** copy) {
+ int * new_int = g_malloc0(sizeof(int)*2);
+ if ((*copy)[0] != -2) {
+ new_int[0] = (*copy)[0];
+ new_int[1] = -2;
+ int i = 2;
+ for (i=1;(*copy)[i]!=-2;i++) {
+ yon_int_array_append(&new_int,(*copy)[i]);
+ }
+ *source=new_int;
+ }
+ else {
+ new_int[0] = (*copy)[0];
+ *source=new_int;
+ }
+
+}
+char** philos_pars_terminal_systemd_cgls(char* CMD_GET_SLICE_SERVICE, char* str_find, int* size_array_data) {
+ int size = 0;
+ char** terminal_print = yon_config_load(CMD_GET_SLICE_SERVICE, &size);
+ char** array_data = NULL;
+ for (int index = 0; index < size; index++) {
+ if (strstr(terminal_print[index], str_find) != NULL) {
+ yon_char_divide_search(terminal_print[index],"─",-1);
+ terminal_print[index] = yon_char_divide_search(terminal_print[index]," ", -1);
+ yon_char_divide(terminal_print[index],1);
+ array_data = yon_char_parsed_append(array_data, size_array_data, terminal_print[index]);
+
+ }
+ }
+ return array_data;
+}
+char* philos_pard_array_add_cmd(char* cmd, temp_config* _config, char* key, int* array_io, int* array_io_pow_size, char** disk, int size) {
+ char* split_simvol = g_malloc0(sizeof(char)*2);
+ int flag_format = 0;
+ char* cmd_old = yon_char_new(cmd);
+ char* cmd_new = "";
+ if (disk && size && array_io && array_io_pow_size) {
+ int index_find = 0;
+ for (int index = 0; index < size; index++) {
+ if (array_io_pow_size[index] >= 0 && array_io[index]>= 0 && !strstr(disk[index], "-")) {
+ char* num_and_pow_size = philos_format_cfg_str_size_memory(" ", array_io[index], array_io_pow_size[index]);
+ if (!strstr(num_and_pow_size, "-")) {
+ cmd_new = yon_char_unite(cmd_new,
+ split_simvol,
+ disk[index],
+ num_and_pow_size, NULL);
+ split_simvol[0] = ',';
+ split_simvol[1] = '\0';
+ flag_format = 1;
+ }
+ free(num_and_pow_size);
+ }
+ }
+ }
+ free(split_simvol);
+ if (flag_format) {
+ if (strlen(cmd_new)>2) {
+ if (strlen(cmd_old) > 3) {
+ cmd = yon_char_unite(cmd_old, ",", key, cmd_new, NULL);
+ }
+ else {
+ cmd = yon_char_unite(key, cmd_new, NULL);
+ }
+
+ }
+ return cmd;
+ }
+ else {
+ return cmd_old;
+ }
+
+}
+int philos_check_activ_disk(temp_set_window *widgets, temp_config* _config) {
+ char* disk = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(widgets->cbtTempDevice));
+ disk = yon_char_divide_search(disk," ", -1);
+ if (disk == NULL) {
+ return 0;
+ }
+ return 1;
+}
+
+void philos_temp_generate_cmd(temp_set_window *widgets, temp_config* _config) {
+ char* str_cmd = "";
+ char* split_simvol = g_malloc0(sizeof(char)*2);
+ int size_bite = 0;
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->chkSoftRestrictionTemp))) {
+ size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widgets->spiSevereRestrictionTemp));
+ str_cmd = yon_char_unite(str_cmd,
+ "MemoryHigh=",
+ yon_char_from_int(size_bite),
+ philos_str_size_pow_byte(widgets->cmSevereRestrictionTemp), NULL);
+ split_simvol[0] = ',';
+ split_simvol[1] = '\0';
+ }
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->chkSevereRestrictionTemp))) {
+ size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widgets->spinSevereRestrictionTemp));
+ str_cmd = yon_char_unite(str_cmd, split_simvol,
+ "MemoryMax=",
+ yon_char_from_int(size_bite),
+ philos_str_size_pow_byte(widgets->cmbSevereRestrictionTemp), NULL);
+ split_simvol[0] = ',';
+ split_simvol[1] = '\0';
+ }
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->chkPaddingFLTemp))) {
+ size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widgets->spinPaddingFLTemp));
+ str_cmd = yon_char_unite(str_cmd, split_simvol,
+ "MemorySwapMax=",
+ yon_char_from_int(size_bite),
+ philos_str_size_pow_byte(widgets->cmbPaddingFLTemp), NULL);
+ split_simvol[0] = ',';
+ split_simvol[1] = '\0';
+ }
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->chkCPULimitTemp))) {
+ size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widgets->spinCPULimitTemp));
+ str_cmd = yon_char_unite(str_cmd, split_simvol,
+ "CPUQuota=",
+ yon_char_from_int(size_bite),
+ "%", NULL);
+ split_simvol[0] = ',';
+ split_simvol[1] = '\0';
+ }
+ if (gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->cbtTempDevice))!=-1) {
+ if (_config->size_disk!=0) {
+ str_cmd = philos_pard_array_add_cmd(str_cmd, _config, "IOReadBandwidthMax=", _config->i_o_limit_read, _config->i_o_limit_read_size, _config->disk_read, _config->size_disk);
+
+ }
+ if (_config->size_disk!=0) {
+ str_cmd = philos_pard_array_add_cmd(str_cmd, _config, "IOWriteBandwidthMax=", _config->i_o_limit_write, _config->i_o_limit_write_size, _config->disk_write, _config->size_disk);
+ }
+
+ }
+ gtk_entry_set_text(GTK_ENTRY(widgets->entryTempCmd), str_cmd);
+ free(split_simvol);
+}
+// flag_check_array = 0 READ
+// flag_check_array = 1 WRITE
+void philos_temp_del_disk(temp_set_window *widgets, temp_config* _config, int flag_check_array) {
+ char* disk = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(widgets->cbtTempDevice));
+ disk = yon_char_divide_search(disk, " ", -1);
+ int bool_read = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->chbTempRead));
+ int bool_write = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->chbTempWrite));
+ char** ptr_disk = NULL;
+ int size = 0;
+
+ if (flag_check_array == 0) {
+ size = _config->size_disk;
+ if (philos_check_activ_disk(widgets, _config) == 0) {
+ return;
+ }
+ ptr_disk = _config->disk_read;
+ }
+ else if (flag_check_array == 1) {
+ size = _config->size_disk;
+ if (philos_check_activ_disk(widgets, _config) == 0) {
+ return;
+ }
+ ptr_disk = _config->disk_write;
+ }
+ int index_find = -1;
+ if (ptr_disk) {
+ for (int index = 0; index < size; index++) {
+ char* disk_cfg = ptr_disk[index];
+ if (disk_cfg) {
+ if (strstr(disk_cfg, disk) != NULL) {
+ index_find = index;
+ break;
+ }
+ }
+ }
+ }
+
+ if ((bool_read == 0 && bool_write == 0 && index_find != -1)) {
+ ptr_disk[index_find] = yon_char_new("-");
+ _config->i_o_limit_read_size[index_find] = -3;
+ _config->i_o_limit_write_size[index_find] = -3;
+ _config->i_o_limit_read[index_find] = -3;
+ _config->i_o_limit_write[index_find] = -3;
+ }
+ if (flag_check_array == 0) {
+ if (ptr_disk) {
+ yon_char_parsed_copy(&_config->disk_read, &ptr_disk);
+ }
+ }
+ else if (flag_check_array == 1) {
+ if (ptr_disk) {
+ yon_char_parsed_copy(&_config->disk_write, &ptr_disk);
+ }
+ }
+}
+
+void philos_temp_config_init(temp_config* _config) {
+ if (_config->size_disk != 0) {
+ philos_free_string_array(&_config->disk_read, _config->size_disk);
+ philos_free_int_array(&_config->i_o_limit_read, _config->size_disk);
+ philos_free_int_array(&_config->i_o_limit_read_size, _config->size_disk);
+ }
+ else if (_config->size_disk != 0) {
+ philos_free_string_array(&_config->disk_write, _config->size_disk);
+ philos_free_int_array(&_config->i_o_limit_write, _config->size_disk);
+ philos_free_int_array(&_config->i_o_limit_write_size, _config->size_disk);
+ }
+ _config->disk_read = NULL;
+ _config->disk_write = NULL;
+ _config->i_o_limit_read = NULL;
+ _config->i_o_limit_write = NULL;
+ _config->i_o_limit_read_size = NULL;
+ _config->i_o_limit_write_size = NULL;
+ _config->size_disk = 0;
+ _config->size_disk = 0;
+}
+
+// flag_check_array = 0 READ
+// flag_check_array = 1 WRITE
+void philos_update_device_to_entry(temp_set_window *widgets, temp_config* _config, int flag_check_array) {
+ int disk_id = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->cbtTempDevice));
+ char* disk = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(widgets->cbtTempDevice));
+ disk = yon_char_divide_search(disk, " ", -1);
+ if (disk_id != -1) {
+ int index_find = -1;
+ if (flag_check_array == 0) {
+ if (_config->disk_read) {
+ for (int index = 0; index < _config->size_disk; index++) {
+ char* disk_cfg = _config->disk_read[index];
+ if (disk_cfg) {
+ if (strstr(disk_cfg, disk)) {
+ index_find = index;
+ break;
+ }
+ }
+ }
+ }
+ }
+ else if (flag_check_array == 1) {
+ if (_config->disk_write) {
+ for (int index = 0; index < _config->size_disk; index++) {
+ char* disk_cfg = _config->disk_write[index];
+ if (disk_cfg) {
+ if (strstr(disk_cfg, disk)) {
+ index_find = index;
+ break;
+ }
+ }
+ }
+ }
+ }
+ if (index_find != -1) {
+ if (flag_check_array==0) {
+ if (_config->i_o_limit_read[index_find]<0 || _config->i_o_limit_read_size[index_find]<0) {
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widgets->chbTempRead), 0);
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(widgets->spinTempRead), 0);
+ gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->cbtTempRead), 0);
+ }
+ else {
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(widgets->spinTempRead), _config->i_o_limit_read[index_find]);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widgets->chbTempRead), 1);
+ gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->cbtTempRead), _config->i_o_limit_read_size[index_find]);
+
+ }
+ }
+ else if (flag_check_array==1) {
+ if (_config->i_o_limit_write[index_find]<0 || _config->i_o_limit_write_size[index_find]<0) {
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widgets->chbTempWrite), 0);
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(widgets->spinTempWrite), 0);
+ gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->cbtTempWrite), 0);
+ }
+ else {
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(widgets->spinTempWrite), _config->i_o_limit_write[index_find]);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widgets->chbTempWrite), 1);
+ gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->cbtTempWrite), _config->i_o_limit_write_size[index_find]);
+ }
+ }
+ else {
+ if (flag_check_array==0) {
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widgets->chbTempRead), 0);
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(widgets->spinTempRead), 0);
+ gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->cbtTempRead), 0);
+ }
+ else if (flag_check_array==1) {
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widgets->chbTempWrite), 0);
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(widgets->spinTempWrite), 0);
+ gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->cbtTempWrite), 0);
+ }
+ }
+ }
+ else {
+ if (flag_check_array==0) {
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widgets->chbTempRead), 0);
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(widgets->spinTempRead), 0);
+ gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->cbtTempRead), 0);
+ }
+ else if (flag_check_array==1) {
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widgets->chbTempWrite), 0);
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(widgets->spinTempWrite), 0);
+ gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->cbtTempWrite), 0);
+ }
+ }
+ }
+ else {
+ if (flag_check_array==0) {
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widgets->chbTempRead), 0);
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(widgets->spinTempRead), 0);
+ gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->cbtTempRead), 0);
+ }
+ else if (flag_check_array==1) {
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widgets->chbTempWrite), 0);
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(widgets->spinTempWrite), 0);
+ gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->cbtTempWrite), 0);
+ }
+ }
+}
+// flag_check_array = 0 READ
+// flag_check_array = 1 WRITE
+void philos_temp_add_disk(temp_set_window *widgets, temp_config* _config, int flag_check_array) {
+ char* disk = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(widgets->cbtTempDevice));
+ disk = yon_char_divide_search(disk, " ", -1);
+ int disk_id = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->cbtTempDevice));
+ int bool_read = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->chbTempRead));
+ int bool_write = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->chbTempWrite));
+ char** ptr_disk = NULL;
+ int size = 0;
+ if (flag_check_array == 0) {
+ ptr_disk = _config->disk_read;
+ size = _config->size_disk;
+ }
+ else if (flag_check_array == 1) {
+ ptr_disk = _config->disk_write;
+ size = _config->size_disk;
+ }
+ if (disk_id >= 0 && size !=0) {
+ int index_find = -1;
+ if (ptr_disk){
+ for (int index = 0; index < size; index++) {
+ char* disk_cfg = ptr_disk[index];
+ if (disk_cfg) {
+ if (strstr(disk_cfg, disk) != NULL) {
+ index_find = index;
+ break;
+ }
+ }
+ }
+ }
+
+ if (index_find == -1 || index_find>=0) {
+ if (index_find == -1) {
+ index_find = find_null_array(_config);
+ }
+ // Редактирование
+ if (flag_check_array == 0) {
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->chbTempRead))) {
+ ptr_disk[index_find] = yon_char_new(disk);
+ _config->i_o_limit_read_size[index_find] = (int)gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->cbtTempRead));
+ _config->i_o_limit_read[index_find] = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widgets->spinTempRead));
+ }
+ else {
+ ptr_disk[index_find] = yon_char_new("-");
+ _config->i_o_limit_read_size[index_find] = -3;
+ _config->i_o_limit_read[index_find] = -3;
+ }
+ }
+ if (flag_check_array == 1) {
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->chbTempWrite))) {
+ ptr_disk[index_find] = yon_char_new(disk);
+ _config->i_o_limit_write_size[index_find] = (int)gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->cbtTempWrite));
+ _config->i_o_limit_write[index_find] = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widgets->spinTempWrite));
+ }
+ else {
+ _config->i_o_limit_write_size[index_find] = -3;
+ _config->i_o_limit_write[index_find] = -3;
+ ptr_disk[index_find] = yon_char_new("-");
+ }
+ }
+ }
+ }
+ else {
+ if (bool_read == 1 || bool_write == 1) {
+ int index_find = find_null_array(_config);
+ if (flag_check_array == 0) {
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->chbTempRead))) {
+ ptr_disk[index_find] = yon_char_new(disk);
+ _config->i_o_limit_read_size[index_find] = (int)gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->cbtTempRead));
+ _config->i_o_limit_read[index_find] = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widgets->spinTempRead));
+
+ }
+ }
+ if (flag_check_array == 1) {
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->chbTempWrite))) {
+ ptr_disk[index_find] = yon_char_new(disk);
+ _config->i_o_limit_write_size[index_find] = (int)gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->cbtTempWrite));
+ _config->i_o_limit_write[index_find] = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widgets->spinTempWrite));
+ }
+ }
+ }
+ }
+ if (flag_check_array == 0) {
+ if (ptr_disk) {
+ yon_char_parsed_copy(&_config->disk_read, &ptr_disk);
+
+ }
+ }
+ else if (flag_check_array == 1) {
+ if (ptr_disk) {
+ yon_char_parsed_copy(&_config->disk_write, &ptr_disk);
+ }
+ }
+}
+int find_null_array(temp_config* _config) {
+ int index = 0;
+ for (index = 0; (_config->disk_read[index]!=NULL && _config->disk_write[index]!=NULL); index++) {
+ if (strcmp(_config->disk_read[index], "-") == 0 && strcmp(_config->disk_write[index], "-") == 0) {
+ break;
+ }
+ }
+ return index;
+
+
+}
+int* philos_int_append(int* array, int* size, int value) {
+ array = yon_remalloc(array, (*size+1)*sizeof(int));
+ array[(*size)] = value;
+ (*size)++;
+ return array;
+
+}
+
+int* remove_element_int_array(int* array, int* size, int item_to_delete) {
+ int *new_int_parsed=NULL;
+ new_int_parsed=malloc(sizeof(int)*((*size)-1));
+ int flag = 0;
+ for (int i=0;i < (*size);i++){
+ if (i==item_to_delete) {
+ flag = 1;
+ }
+ if (flag == 0) {
+ memcpy(&(new_int_parsed[i]),&(array[i]),sizeof(int));
+ }
+ else if (flag == 1 && i!=item_to_delete) {
+ memcpy(&(new_int_parsed[i-1]),&(array[i]),sizeof(int));
+ }
+ }
+ (*size)=(*size)-1;
+ return new_int_parsed;
+}
+
+int** remove_element_int_array_n3(int** array, int* size, int item_to_delete) {
+ int **new_int_parsed=NULL;
+ new_int_parsed=malloc(sizeof(int*)*((*size)-1));
+ int flag = 0;
+ for (int i=0;i < (*size);i++){
+ if (i==item_to_delete) {
+ flag = 1;
+ }
+ if (flag == 0) {
+ philos_array_int_copy(&new_int_parsed[i],&array[i]);
+ }
+ else if (flag == 1 && i!=item_to_delete) {
+ philos_array_int_copy(&new_int_parsed[i-1],&array[i]);
+ }
+ }
+ (*size)=(*size)-1;
+ return new_int_parsed;
+}
+char* philos_get_size_bite(GtkWidget* chk_button, GtkWidget* spin, GtkWidget* combo_box_text) {
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(chk_button))) {
+ char* size_prifics = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(combo_box_text));
+ int size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spin));
+ char* str_size_bute = yon_char_unite(yon_char_from_int(size_bite), " ", size_prifics, NULL);
+ return str_size_bute;
+ }
+ else {
+ char* str = (char*)malloc(sizeof(char*)*2);
+ str[0] = '-';
+ str[1] = '\0';
+ return str;
+ }
+}
+void philos_fill_combo_box_text(GtkWidget *cbt, config_str list_data, int size) {
+ for (int index = 0; index < size; index++) {
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(cbt), list_data[index]);
+ }
+}
+
+void philos_set_spin_adjustment(GtkWidget *check, GtkWidget *spin, GtkWidget *combo, size_t value) {
+ gboolean active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check));
+ guint value_spin = gtk_spin_button_get_digits(GTK_SPIN_BUTTON(spin));
+ if (active != -1) {
+ GtkAdjustment* adjustment = NULL;
+ adjustment = gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(spin));
+ gtk_adjustment_set_lower(adjustment, 0.0);
+ gtk_adjustment_set_page_increment(adjustment, 1.0);
+ if (combo == NULL) {
+ gtk_adjustment_set_upper(adjustment, (gdouble)(value*100));
+ if ((value*100)0) {
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check),1);
+ }
+ else if (active == 0) {
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin), 0);
+ }
+ if (flag_cpu == 0) {
+ philos_set_spin_adjustment(check, spin, combo, resurs);
+ if (value_spin>resurs) {
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin), resurs);
+ }
+ }
+ else {
+ philos_set_spin_adjustment(check, spin, NULL, resurs);
+ }
+
+}
+
+size_t get_resurs_total(char* cmd) {
+ int size = 0;
+ size_t size_memory = 0;
+ char **responce = yon_config_load(cmd, &size);
+ for (int index = 0; index < size; index++ ) {
+ char* mem_size_kb = yon_char_divide_search(responce[index], "\n", -1);
+ size_memory = atoll(mem_size_kb);
+ free(mem_size_kb);
+ }
+ philos_free_string_array(&responce, size);
+ return size_memory;
+}
+
+float get_size_pow_memory(size_t size_memory, int size) {
+ float res = size_memory;
+ for (size_t index = 0; index < size; index++) {
+ res = res/1024;
+ }
+ return res;
+}
+
+void philos_set_active_widgets_device_io(GtkWidget* combo_to_l2,GtkWidget *check, GtkWidget *spin, GtkWidget *combo) {
+ int menu_id = gtk_combo_box_get_active(GTK_COMBO_BOX(combo_to_l2));
+ if (menu_id != -1) {
+ gboolean active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check));
+ if (active == 0) {
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin), 0);
+ }
+ else if (gtk_spin_button_get_digits(GTK_SPIN_BUTTON(spin))>0) {
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check),1);
+ }
+ gtk_widget_set_sensitive(spin, active);
+ gtk_widget_set_sensitive(combo, active);
+ }
+ else {
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin), 0);
+ gtk_widget_set_sensitive(spin, 0);
+ gtk_widget_set_sensitive(combo, 0);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), 0);
+ }
+ philos_set_spin_adjustment(check, spin, combo, 12582912);
+}
+char *yon_char_get_augumented(char *source, char *append)
+{
+ if (source && append)
+ {
+ int size = strlen(source) + strlen(append) + 1;
+ char *final = malloc(size);
+ memset(final, 0, size);
+ if (strstr(source, "%%"))
+ sprintf(final, source, append);
+ else
+ sprintf(final, "%s%s", source, append);
+ return final;
+ }
+ else
+ return NULL;
+}
+dictionary *yon_dictionary_create_with_data_connected(dictionary *dict, char *key, void *data) {
+ dictionary *dct = yon_dictionary_create_conneced(dict);
+ dct->key = yon_char_new(key);
+ dct->data = data;
+ dct->data_type = DICTIONARY_OTHER_TYPE;
+ return dct;
+}
+char **yon_char_parsed_shrink(char **char_string, int *size, int item_to_delete) {
+ char **new_char_parsed=NULL;
+ new_char_parsed=malloc(sizeof(char*)*((*size)-1));
+ int flag = 0;
+ for (int i=0;i < (*size);i++){
+ if (i==item_to_delete) {
+ flag = 1;
+ }
+ if (flag == 0) {
+ new_char_parsed[i]=yon_char_new(char_string[i]);
+ }
+ else if (flag == 1 && i!=item_to_delete) {
+ new_char_parsed[i-1]=yon_char_new(char_string[i]);
+ }
+ }
+ (*size)=(*size)-1;
+ return new_char_parsed;
+}
+char*** yon_char_parsed_shrink_n3(char ***char_string, int *size, int item_to_delete) {
+ char ***new_char_parsed=NULL;
+ new_char_parsed=malloc(sizeof(char**)*((*size)-1));
+ int flag = 0;
+ for (int i=0;i < (*size);i++){
+ if (i==item_to_delete) {
+ flag = 1;
+ }
+ if (flag == 0) {
+ yon_char_parsed_copy(&new_char_parsed[i],&char_string[i]);
+ }
+ else if (flag == 1 && i!=item_to_delete) {
+ yon_char_parsed_copy(&new_char_parsed[i-1], &char_string[i]);
+ }
+ }
+ (*size)=(*size)-1;
+ return new_char_parsed;
+}
+dictionary *yon_dictionary_create_empty() {
+ dictionary *dict = malloc(sizeof(dictionary));
+ dict->data = NULL;
+ dict->key = NULL;
+ dict->next = NULL;
+ dict->prev = NULL;
+ dict->first = dict;
+ dict->data_type = DICTIONARY_OTHER_TYPE;
+ return dict;
+}
+void yon_terminal_integrated_launch(GtkWidget *terminal, char* command, void *endwork_function, void* endwork_function_argument){
+ char **commands=new_arr(char*,2);
+ gchar **envp = g_get_environ();
+ commands[0]=(gchar *)g_strdup(g_environ_getenv(envp, "SHELL"));
+ commands[1]=NULL;
+ char **env=new_arr(char*,2);
+ env[0]="";
+ env[1]=NULL;
+ vte_terminal_set_size(VTE_TERMINAL(terminal),10,15);
+ VtePty *pty = vte_pty_new_sync(VTE_PTY_DEFAULT,NULL,NULL);
+ vte_terminal_set_pty(VTE_TERMINAL(terminal),pty);
+ char *install_command=yon_char_unite("tput cup 0 0 && tput ed; ",command, "; exit 0\n",NULL);
+ if(endwork_function)
+ g_signal_connect(G_OBJECT(terminal), "child-exited", G_CALLBACK(endwork_function), endwork_function_argument);
+ vte_terminal_spawn_async(VTE_TERMINAL(terminal),
+ VTE_PTY_DEFAULT,
+ NULL,
+ commands,
+ NULL,
+ 0,
+ NULL, NULL,
+ NULL,
+ -1,
+ NULL,
+ child_ready,
+ install_command);
+ vte_pty_spawn_async(pty,
+ NULL,
+ commands,
+ NULL,
+ 0,
+ NULL, NULL,
+ NULL,
+ -1,
+ NULL,
+ NULL,
+ NULL);
+ vte_terminal_set_scrollback_lines(VTE_TERMINAL(terminal), -1);
+ vte_terminal_set_scroll_on_output(VTE_TERMINAL(terminal), TRUE);
+ vte_terminal_set_scroll_on_keystroke(VTE_TERMINAL(terminal), TRUE);
+ gtk_widget_show_all(terminal);
+}
+dictionary *yon_dictionary_create_conneced(dictionary *targetdict)
+{
+ targetdict = yon_dictionary_get_last(targetdict);
+ targetdict->next = yon_dictionary_create_empty();
+ targetdict->next->prev = targetdict;
+ targetdict->next->first = targetdict->first;
+ targetdict->next->data_type = DICTIONARY_OTHER_TYPE;
+ return targetdict->next;
+}
+void yon_int_array_append(int **source, int append){
+ int size=0;
+ for (size=0;(*source)[size]!=-2;size++);
+ *source = realloc(*source,(size+2)*sizeof(int));
+ (*source)[size] = append;
+ (*source)[size+1] = -2;
+}
+static void child_ready(VteTerminal *terminal, GPid pid, GError *error, gpointer user_data)
+{
+ if (!terminal) return;
+ if (pid == -1) printf("Error\n\n\n");
+ else vte_terminal_feed_child(VTE_TERMINAL(terminal),(char*)user_data,strlen((char*)user_data));
+}
+/**[EN]
+ * int yon_config_save(char *command)
+ * Saves config with [command]
+ * [RU]
+*/
+int philos_config_save(char *command)
+{
+ FILE *output = popen(command, "r");
+ return 1;
+}
+
+void philos_array_int_pars_to(int** array, int to) {
+ int flag = 0;
+ int i = 0;
+ for (i = 0; (*array)[i] != -2; i++) {
+ if ((*array)[i]==-3) {
+ (*array)[i] = to;
+ flag = 1;
+ break;
+ }
+ }
+}
+
+void philos_array_char_pars_to(char*** array, char* to) {
+ int flag = 0;
+ int i = 0;
+ for (i = 0; (*array)[i] != NULL; i++) {
+ if (strcmp((*array)[i], "-") == 0) {
+ (*array)[i] = yon_char_new(to);
+ flag = 1;
+ break;
+ }
+ }
+}
+void init_device_disk(temp_config* _config) {
+ for (int index = 0;index< (get_device_cfg()->size_disk*2);index++){
+ _config->disk_read = yon_char_parsed_append(_config->disk_read,&_config->size_disk, "-");
+ _config->size_disk--;
+ _config->i_o_limit_write_size = philos_int_append(_config->i_o_limit_write_size, &_config->size_disk, -3);
+ _config->size_disk--;
+ _config->i_o_limit_write = philos_int_append(_config->i_o_limit_write, &_config->size_disk, -3);
+ _config->size_disk--;
+ _config->i_o_limit_read_size = philos_int_append(_config->i_o_limit_read_size, &_config->size_disk, -3);
+ _config->size_disk--;
+ _config->disk_write = yon_char_parsed_append(_config->disk_write,&_config->size_disk, "-");
+ _config->size_disk--;
+ _config->i_o_limit_read = philos_int_append(_config->i_o_limit_read, &_config->size_disk, -3);
+ }
+ _config->i_o_limit_write_size = philos_int_append(_config->i_o_limit_write_size, &_config->size_disk, -2);
+ _config->size_disk--;
+ _config->disk_write = yon_char_parsed_append(_config->disk_write, &_config->size_disk, NULL);
+ _config->size_disk--;
+ _config->disk_read = yon_char_parsed_append(_config->disk_read, &_config->size_disk, NULL);
+ _config->size_disk--;
+ _config->i_o_limit_write = philos_int_append(_config->i_o_limit_write, &_config->size_disk, -2);
+ _config->size_disk--;
+ _config->i_o_limit_read = philos_int_append(_config->i_o_limit_read, &_config->size_disk, -2);
+ _config->size_disk--;
+ _config->i_o_limit_read_size = philos_int_append(_config->i_o_limit_read_size, &_config->size_disk, -2);
+}
\ No newline at end of file
diff --git a/source/philos_utils.h b/source/philos_utils.h
new file mode 100644
index 0000000..8ec5af6
--- /dev/null
+++ b/source/philos_utils.h
@@ -0,0 +1,120 @@
+#ifndef PHILOS_UTILS_H
+#define PHILOS_UTILS_H
+#include "ubl-utils.h"
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include "my_device.h"
+
+#define catch(x) ExitJmp:if(__HadError)
+#define throw(x) {__HadError=true;goto ExitJmp;}
+#define file_source_login_min_max "/etc/login.defs"
+static char** array_size_pow;
+typedef struct {
+ char** disk_read;
+ char** disk_write;
+ int* i_o_limit_read;
+ int* i_o_limit_write;
+ int* i_o_limit_read_size;
+ int* i_o_limit_write_size;
+ int size;
+ int size_disk;
+} temp_config;
+
+typedef struct {
+
+ GtkWidget* Window;
+ GtkWidget* btnSaveTempSave;
+ GtkWidget* btnTempCancel;
+
+ GtkWidget* entryTempCmd;
+ GtkWidget* chbTempRead;
+ GtkWidget* spinTempRead;
+ GtkWidget* cbtTempRead;
+
+ GtkWidget* chbTempWrite;
+ GtkWidget* spinTempWrite;
+ GtkWidget* cbtTempWrite;
+
+ GtkWidget* chkSoftRestrictionTemp;
+ GtkWidget* spiSevereRestrictionTemp;
+ GtkWidget* cmSevereRestrictionTemp;
+
+ GtkWidget* chkSevereRestrictionTemp;
+ GtkWidget* spinSevereRestrictionTemp;
+ GtkWidget* cmbSevereRestrictionTemp;
+
+ GtkWidget* chkPaddingFLTemp;
+ GtkWidget* spinPaddingFLTemp;
+ GtkWidget* cmbPaddingFLTemp;
+
+ GtkWidget* chkCPULimitTemp;
+ GtkWidget* spinCPULimitTemp;
+ GtkWidget* lblCPULimitTemp;
+
+ GtkWidget* cbtTempDevice;
+ GtkWidget* cbxTempQuotaObj;
+ GtkWidget* cbxTempQuotaLevel2;
+ GtkWidget* boxBlockGui;
+} temp_set_window;
+void philos_array_string_remove_char(char*** array, char* str_remove, int size);
+void philos_set_pow_size_memory(char* str_find, int** array_size,int index, char** array_size_pow);
+void philos_set_size_memory_integer_char(char* str_find, char*** array_data, int index);
+void philos_free_string_array(char ***array, int size);
+void philos_free_string_array_n3(char ****array, int size);
+void philos_free_int_array(int **array, int size);
+void philos_free_int_array_n2(int ***array, int size);
+config_str philos_list_group(int* size);
+unsigned short philos_read_uid_min_max(char* filename, char* search);
+config_str philos_list_user(int* size);
+char* philos_str_size_pow_byte(GtkWidget *combo_box_text);
+char* philos_str_remove(char *str, const char *sub);
+void philos_split_size_memory(char* str_value, int* size, char* pow_memory);
+char* philos_format_cfg_str_size_memory(char* str_key, int value, int pow_size_memory);
+char** philos_str_split(char *parameters, int *size, char *divider);
+void philos_array_str_copy(char*** source, char*** copy);
+void philos_set_pow_size_memory_device(char* str_find, int** array_size,int index, char** array_size_pow);
+void philos_array_int_copy(int** source, int** copy);
+char** philos_pars_terminal_systemd_cgls(char* CMD_GET_SLICE_SERVICE, char* str_find, int* size_array_data);
+char* philos_pard_array_add_cmd(char* cmd, temp_config* _config, char* key, int* array_io, int* array_io_pow_size, char** disk, int size);
+int philos_check_activ_disk(temp_set_window *widgets, temp_config* _config);
+void philos_temp_generate_cmd(temp_set_window *widgets, temp_config* _config);
+void philos_temp_del_disk(temp_set_window *widgets, temp_config* _config, int flag_check_array);
+void philos_temp_config_init(temp_config* _config);
+void philos_update_device_to_entry(temp_set_window *widgets, temp_config* _config, int flag_check_array);
+void philos_temp_add_disk(temp_set_window *widgets, temp_config* _config, int flag_check_array);
+int* philos_int_append(int* array, int* size, int value);
+int* remove_element_int_array(int* array, int* size, int item_to_delete);
+int** remove_element_int_array_n3(int** array, int* size, int item_to_delete);
+char* philos_get_size_bite(GtkWidget* chk_button, GtkWidget* spin, GtkWidget* combo_box_text);
+void philos_fill_combo_box_text(GtkWidget *cbt, config_str list_data, int size);
+void philos_set_spin_adjustment(GtkWidget *check, GtkWidget *spin, GtkWidget *combo, size_t value);
+void philos_set_active_widgets(GtkWidget *check, GtkWidget *spin, GtkWidget *combo, int flag_cpu, char* cmd);
+size_t get_resurs_total(char* cmd);
+float get_size_pow_memory(size_t size_memory, int size);
+void philos_set_active_widgets_device_io(GtkWidget* combo_to_l2,GtkWidget *check, GtkWidget *spin, GtkWidget *combo);
+char *yon_char_get_augumented(char *source, char *append);
+dictionary *yon_dictionary_create_with_data_connected(dictionary *dict, char *key, void *data);
+char **yon_char_parsed_shrink(char **char_string, int *size, int item_to_delete);
+char*** yon_char_parsed_shrink_n3(char ***char_string, int *size, int item_to_delete);
+dictionary *yon_dictionary_create_empty();
+void yon_terminal_integrated_launch(GtkWidget *terminal, char* command, void *endwork_function, void* endwork_function_argument);
+dictionary *yon_dictionary_create_conneced(dictionary *targetdict);
+void yon_int_array_append(int **source, int append);
+static void child_ready(VteTerminal *terminal, GPid pid, GError *error, gpointer user_data);
+int philos_config_save(char *command);
+void philos_array_int_pars_to(int** array, int to);
+void philos_array_char_pars_to(char*** array, char* to);
+int find_null_array(temp_config* _config);
+void init_device_disk(temp_config* _config);
+#endif
\ No newline at end of file
diff --git a/source/ubl-cmake.h.in b/source/ubl-cmake.h.in
deleted file mode 100644
index 17ba454..0000000
--- a/source/ubl-cmake.h.in
+++ /dev/null
@@ -1 +0,0 @@
-#cmakedefine WEBKIT_FOUND
\ No newline at end of file
diff --git a/source/ubl-cmake.in b/source/ubl-cmake.in
new file mode 100644
index 0000000..d4623a7
--- /dev/null
+++ b/source/ubl-cmake.in
@@ -0,0 +1 @@
+#cmakedefine WEBKIT_FOUND
diff --git a/source/ubl-settings-resourcequota.c b/source/ubl-settings-resourcequota.c
index 613dbc6..45ba5ff 100644
--- a/source/ubl-settings-resourcequota.c
+++ b/source/ubl-settings-resourcequota.c
@@ -1,4 +1,5 @@
#include "ubl-settings-resourcequota.h"
+#include "ubl-utils.h"
config main_config;
main_window *widgets;
@@ -30,7 +31,7 @@ void yon_open_browser(GtkWidget *self, char *link){
*/
void on_open_documentation_confirmation(GtkWidget *self, char *link){
if (main_config.always_open_documentation==0){
- GtkBuilder *builder = gtk_builder_new_from_file(glade_path);
+ GtkBuilder *builder = gtk_builder_new_from_resource(glade_path);
documentation_confirmation_window *widgets = malloc(sizeof(documentation_confirmation_window));
widgets->Window = yon_gtk_builder_get_widget(builder,"helpConfirmationWindow");
widgets->AcceptButton = yon_gtk_builder_get_widget(builder,"ReadHelpButton");
@@ -84,13 +85,12 @@ void on_link(GtkWidget *self, char* uri, gpointer user_data){
* Присоединять к сигналу "activate" кнопки справки типа MenuItem.
*/
void on_about(){
- GtkBuilder *builder=gtk_builder_new_from_file(glade_path);
+ GtkBuilder *builder=gtk_builder_new_from_resource(glade_path);
GtkWidget *window=yon_gtk_builder_get_widget(builder,"AboutWindow");
GtkWidget *title=yon_gtk_builder_get_widget(builder,"headerAboutTopic");
GtkWidget *hideButtonBox=yon_gtk_builder_get_widget(builder,"buttonBoxHide");
gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(window),version_application);
gtk_about_dialog_set_website_label(GTK_ABOUT_DIALOG(window),PROJECT_HOME_LABEL);
- // gtk_about_dialog_set_comments(GTK_ABOUT_DIALOG(window),TITLE_LABEL);
gtk_label_set_text(GTK_LABEL(title),TITLE_LABEL);
g_signal_connect(G_OBJECT(window),"activate-link",G_CALLBACK(on_link),NULL);
gtk_widget_set_visible(hideButtonBox,0);
@@ -113,12 +113,20 @@ void config_init(){
main_config.lock_save_global=0;
main_config.lock_save_local=0;
main_config.size_tree_view = 0;
+ main_config.flag_load = 0;
+ main_config.size_array_del_line = 0;
+ main_config.flag_set_data = 0;
+ main_config.flag_save=0;
+ main_config.i_o_limit_read_size=NULL;
+ main_config.i_o_limit_write_size=NULL;
+ main_config.i_o_limit_write=NULL;
+ main_config.i_o_limit_read=NULL;
}
main_window *setup_window(){
/* Widgets getting | Получение виджетов */
widgets = malloc(sizeof(main_window));
- GtkBuilder *builder = gtk_builder_new_from_file(glade_path);
+ GtkBuilder *builder = gtk_builder_new_from_resource(glade_path);
widgets->Window = yon_gtk_builder_get_widget(builder,"MainWindow");
widgets->btnDelQuotas = yon_gtk_builder_get_widget(builder,"btnDelQuotas");
@@ -132,6 +140,7 @@ main_window *setup_window(){
widgets->tvc6 = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(builder,"tvc6"));
widgets->tvc7 = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(builder,"tvc7"));
+ widgets->scrollDispatcher = yon_gtk_builder_get_widget(builder,"scrollDispatcher");
widgets->btnMainShowAllEmpty = yon_gtk_builder_get_widget(builder,"btnMainShowAllEmpty");
widgets->btnMainShowCoreStream = yon_gtk_builder_get_widget(builder,"btnMainShowCoreStream");
@@ -173,8 +182,11 @@ main_window *setup_window(){
widgets->LoadLocalMenuItem = yon_gtk_builder_get_widget(builder,"LoadLocalConfigurationMenuItem");
widgets->LeftBox = yon_gtk_builder_get_widget(builder,"HeaderLeftBox");
- widgets->DocumentationMenuItem = yon_gtk_builder_get_widget(builder,"DocumentationMenuItem");
- widgets->AboutMenuItem = yon_gtk_builder_get_widget(builder,"AboutMenuItem");
+ widgets->DocumentationMenuItem = yon_ubl_menu_item_documentation_new(DOCUMENTATION_LABEL);
+ widgets->AboutMenuItem = yon_ubl_menu_item_about_new(ABOUT_LABEL);
+ GtkWidget *menu = yon_gtk_builder_get_widget(builder,"menuAbout");
+ gtk_menu_shell_append(GTK_MENU_SHELL(menu),widgets->DocumentationMenuItem);
+ gtk_menu_shell_append(GTK_MENU_SHELL(menu),widgets->AboutMenuItem);
widgets->btnShowFilters = yon_gtk_builder_get_widget(builder,"btnShowFilters");
if (main_config.lock_load_global == 1){
@@ -189,21 +201,23 @@ main_window *setup_window(){
gtk_widget_set_sensitive(widgets->SaveMenuItem,0);
}
if (main_config.lock_save_global == 1 && main_config.lock_save_local == 1) {
- gtk_widget_set_sensitive(widgets->btnSaveCfg,0);
+ gtk_widget_set_sensitive(widgets->btnSaveCfg,0);
+ gtk_widget_set_sensitive(widgets->btnAdd,0);
}
-
-
gtk_widget_show_all(widgets->Window);
return widgets;
}
void main_update_dispatcher() {
int second = gtk_spin_button_get_value(GTK_SPIN_BUTTON(widgets->spinUpdateDispatcher));
- char* str_second = yon_char_from_int(second);
- char *cmd = yon_char_get_augumented("systemd-cgtop -d ", str_second);
- yon_terminal_integrated_launch(widgets->vteDispatcher, cmd, NULL, NULL);
- free(str_second);
- free(cmd);
+ if (second>0) {
+ char* str_second = yon_char_from_int(second);
+ char *cmd = yon_char_get_augumented("systemd-cgtop -d ", str_second);
+ yon_terminal_integrated_launch(widgets->vteDispatcher, cmd, NULL, NULL);
+ free(str_second);
+ free(cmd);
+ }
+
}
void main_update_processes() {
@@ -235,33 +249,72 @@ void main_update_information() {
}
else if (menu_id == 1) {
-
+ fill_cmb_2 = philos_pars_terminal_systemd_cgls(CMD_GET_SLICE_SERVICE, ".service", &size);
+ philos_array_string_remove_char(&fill_cmb_2, "\n", size);
}
else if (menu_id == 2) {
-
- }
- else if (menu_id == 3) {
-
+ fill_cmb_2 = philos_pars_terminal_systemd_cgls(CMD_GET_SLICE_SERVICE, ".slice", &size);
+ philos_array_string_remove_char(&fill_cmb_2, "\n", size);
}
if (menu_id >= 0) {
+ g_signal_handlers_disconnect_by_func(G_OBJECT(widgets->cbtMainInfoLevel2), main_cbx_2_event, NULL);
gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(widgets->cbtMainInfoLevel2));
philos_fill_combo_box_text(widgets->cbtMainInfoLevel2, fill_cmb_2, size);
- // yon_terminal_integrated_launch(widgets->vteProcesses, cmd, NULL, NULL);
+ g_signal_connect(G_OBJECT(widgets->cbtMainInfoLevel2),"changed",G_CALLBACK(main_cbx_2_event), NULL);
}
}
void load_system_cfg() {
- template_cfg(CMD_LOAD_SYSTEM);
+ main_config.flag_load = 0;
+ template_load_cfg(CMD_LOAD_SYSTEM);
+ yon_ubl_status_box_render(LOCAL_LOAD_SUCCESS, BACKGROUND_IMAGE_SUCCESS_TYPE);
}
void load_global_cfg() {
- template_cfg(CMD_LOAD_GLOBAL);
+ main_config.flag_load = 1;
+ template_load_cfg(CMD_LOAD_GLOBAL);
+ yon_ubl_status_box_render(GLOBAL_LOAD_SUCCESS,BACKGROUND_IMAGE_SUCCESS_TYPE);
+}
+
+void clear_array() {
+ philos_free_string_array(&main_config.type_quota, main_config.size_tree_view);
+ philos_free_string_array(&main_config.quota_volume , main_config.size_tree_view);
+ philos_free_int_array(&main_config.soft_raw_limit, main_config.size_tree_view);
+ philos_free_int_array(&main_config.hard_raw_limit, main_config.size_tree_view);
+ philos_free_int_array(&main_config.swap , main_config.size_tree_view);
+ philos_free_int_array(&main_config.cpu_limit, main_config.size_tree_view);
+ philos_free_int_array_n2(&main_config.i_o_limit_read, main_config.size_tree_view);
+ philos_free_int_array_n2(&main_config.i_o_limit_write, main_config.size_tree_view);
+ philos_free_string_array_n3(&main_config.disk_read, main_config.size_tree_view);
+ philos_free_string_array_n3(&main_config.disk_write, main_config.size_tree_view);
+
+ philos_free_string_array(&main_config.array_del_line, main_config.size_array_del_line);
+ main_config.size_array_del_line = 0;
+
+ philos_free_int_array(&main_config.type_quota_size, main_config.size_tree_view);
+ philos_free_int_array(&main_config.quota_volume_size, main_config.size_tree_view);
+ philos_free_int_array(&main_config.soft_raw_limit_size, main_config.size_tree_view);
+ philos_free_int_array(&main_config.hard_raw_limit_size, main_config.size_tree_view);
+ philos_free_int_array(&main_config.swap_size, main_config.size_tree_view);
+ philos_free_int_array(&main_config.cpu_limit_size, main_config.size_tree_view);
+ philos_free_int_array_n2(&main_config.i_o_limit_read_size, main_config.size_tree_view);
+ philos_free_int_array_n2(&main_config.i_o_limit_write_size, main_config.size_tree_view);
+ gtk_list_store_clear(main_config.list);
+ main_config.i_o_limit_read = NULL;
+ main_config.i_o_limit_read_size = NULL;
+ main_config.i_o_limit_write = NULL;
+ main_config.i_o_limit_write_size = NULL;
+ main_config.disk_write = NULL;
+ main_config.disk_read = NULL;
+
+ main_config.size_tree_view = 0;
}
-void template_cfg(char* cmd) {
+void template_load_cfg(char* cmd) {
+ clear_array();
int size = 0;
- int index_quotas = 0;
char** cfg = yon_config_load(cmd, &size);
+ philos_array_string_remove_char(&cfg, "\n", size);
for (int index = 0; index < size; index++) {
char* str_key_value = yon_char_new(cfg[index]);
char* str_key = yon_char_divide_search(str_key_value, "=",-1);
@@ -269,45 +322,93 @@ void template_cfg(char* cmd) {
if (str_key_value[0] == '\"') {
yon_char_divide(str_key_value, 0);
size_t length = strlen(str_key_value);
- str_key_value = yon_char_divide(str_key_value, length-2);
+ str_key_value = yon_char_divide(str_key_value, length-1);
}
- str_split_key(str_key, index_quotas);
- str_split_value(str_key_value, index);
- index_quotas++;
+ str_split_value(str_key_value, main_config.size_tree_view);
+ str_split_key(str_key, main_config.size_tree_view);
+ main_config.size_tree_view++;
}
}
- if (index_quotas != 0) {
- fill_tree_view(0, size);
+
+ if (main_config.size_tree_view != 0) {
+ fill_tree_view(0, main_config.size_tree_view, 0);
}
-
-
+ main_config.flag_set_data = 0;
+}
+
+void init_cfg_array(int index) {
+ philos_set_pow_size_memory("-", &main_config.type_quota_size, index, array_size_pow);
+ philos_set_size_memory_integer_char("-", &main_config.type_quota, index);
+
+ philos_set_pow_size_memory("-", &main_config.quota_volume_size, index, array_size_pow);
+ philos_set_size_memory_integer_char("-", &main_config.quota_volume, index);
+
+ philos_set_pow_size_memory("-", &main_config.cpu_limit_size, index, array_size_pow);
+ set_size_memory_integer("-", &main_config.cpu_limit, index);
+
+ philos_set_pow_size_memory("-", &main_config.soft_raw_limit_size, index, array_size_pow);
+ set_size_memory_integer("-", &main_config.soft_raw_limit, index);
+
+ philos_set_pow_size_memory("-", &main_config.hard_raw_limit_size, index, array_size_pow);
+ set_size_memory_integer("-", &main_config.hard_raw_limit, index);
+
+ philos_set_pow_size_memory("-", &main_config.swap_size, index, array_size_pow);
+ set_size_memory_integer("-",&main_config.swap , index);
+
+ int* array_limit = NULL;
+ char** array_disk = NULL;
+ int index_n2 = 0;
+ for (int index = 0; index < (get_device_cfg()->size_disk*2); index++) {
+ array_limit = philos_int_append(array_limit, &index_n2, -3);
+ }
+ array_limit = philos_int_append(array_limit, &index_n2, -2);
+ index_n2 = 0;
+ for (int index = 0; index < (get_device_cfg()->size_disk*2); index++) {
+ array_disk = yon_char_parsed_append(array_disk, &index_n2, "-");
+ }
+ array_disk = yon_char_parsed_append(array_disk, &index_n2, NULL);
+ index_n2 = 0;
+ main_config.i_o_limit_read = yon_remalloc(main_config.i_o_limit_read, (index + 1) * sizeof(int*));
+ main_config.i_o_limit_read_size = yon_remalloc(main_config.i_o_limit_read_size, (index + 1) * sizeof(int*));
+ main_config.i_o_limit_write = yon_remalloc(main_config.i_o_limit_write, (index + 1) * sizeof(int*));
+ main_config.i_o_limit_write_size = yon_remalloc(main_config.i_o_limit_write_size, (index + 1) * sizeof(int*));
+ main_config.disk_write = yon_remalloc(main_config.disk_write, (index + 1) * sizeof(char**));
+ main_config.disk_read = yon_remalloc(main_config.disk_read, (index + 1) * sizeof(char**));
+ philos_array_int_copy(&main_config.i_o_limit_read[index], &array_limit);
+ philos_array_int_copy(&main_config.i_o_limit_read_size[index], &array_limit);
+ yon_char_parsed_copy(&main_config.disk_read[index], &array_disk);
+ philos_array_int_copy(&main_config.i_o_limit_write[index], &array_limit);
+ philos_array_int_copy(&main_config.i_o_limit_write_size[index], &array_limit);
+ yon_char_parsed_copy(&main_config.disk_write[index], &array_disk);
+ philos_free_int_array(&array_limit, 1);
+ philos_free_string_array(&array_disk, 1);
}
-void str_split_key(char* value, int index) {
+
+void str_split_key(char* source_value, int index) {
+ char* value = yon_char_new(source_value);
yon_char_divide_search(value, "[", -1);
value = yon_char_divide_search(value, "]", -1);
if (strstr(value, ".") != NULL) {
if (strstr(value, ".slice") != NULL) {
main_config.quota_volume = yon_char_parsed_append(main_config.quota_volume, &index, value);
index--;
- main_config.type_quota_size = philos_int_append(main_config.type_quota_size, &index, 4);
+ main_config.type_quota_size = philos_int_append(main_config.type_quota_size, &index, 2);
index--;
- main_config.quota_volume = yon_char_parsed_append(main_config.type_quota, &index, STR_PROCESS);
+ main_config.type_quota = yon_char_parsed_append(main_config.type_quota, &index, STR_SLICE);
index--;
}
else if (strstr(value, ".service") != NULL) {
main_config.quota_volume = yon_char_parsed_append(main_config.quota_volume, &index, value);
index--;
- main_config.type_quota_size = philos_int_append(main_config.type_quota_size, &index, 3);
+ main_config.type_quota_size = philos_int_append(main_config.type_quota_size, &index, 1);
index--;
- main_config.quota_volume = yon_char_parsed_append(main_config.type_quota, &index, STR_SLICE);
+ main_config.type_quota = yon_char_parsed_append(main_config.type_quota, &index, STR_PROCESS);
index--;
}
else {
main_config.quota_volume = yon_char_parsed_append(main_config.quota_volume, &index, value);
index--;
- main_config.type_quota_size = philos_int_append(main_config.type_quota_size, &index, -1);
- index--;
- main_config.quota_volume = yon_char_parsed_append(main_config.type_quota, &index, "-");
+ main_config.type_quota = yon_char_parsed_append(main_config.type_quota, &index, "-");
index--;
}
@@ -317,25 +418,17 @@ void str_split_key(char* value, int index) {
char** arr_users = philos_list_user(&user_size);
for (int user_index = 0; user_index < user_size; user_index++) {
// Пользователь
- if (strcmp(arr_users[user_index], value) != 0) {
+ if (strstr(arr_users[user_index], value) != NULL) {
main_config.type_quota_size = philos_int_append(main_config.type_quota_size, &index, 0);
index--;
main_config.quota_volume = yon_char_parsed_append(main_config.quota_volume, &index, value);
index--;
- main_config.quota_volume = yon_char_parsed_append(main_config.type_quota, &index, STR_USER);
- index--;
- }
- // Группа
- else {
- main_config.type_quota_size = philos_int_append(main_config.type_quota_size, &index, 1);
- index--;
- main_config.quota_volume = yon_char_parsed_append(main_config.quota_volume, &index, value);
- index--;
- main_config.quota_volume = yon_char_parsed_append(main_config.type_quota, &index, STR_GROUP);
+ main_config.type_quota = yon_char_parsed_append(main_config.type_quota, &index, STR_USER);
index--;
}
}
}
+
}
void str_split_value(char* values, int index) {
@@ -347,114 +440,202 @@ void str_split_value(char* values, int index) {
if (arr_values == NULL) {
return;
}
+ init_cfg_array(index);
char* value_i = NULL;
- for (int index_1 = 0; index_1 < size; index_1++) {
- value = arr_values[index_1];
+ int index_1 = 0;
+ int read_index = -1;
+ int write_index = -1;
+ for (index_1=0; index_1 < size; index_1++) {
+ value = yon_char_new(arr_values[index_1]);
key = yon_char_divide_search(value, "=", -1);
- if (yon_char_find_count(key, "MemoryHigh") != 0) {
- set_pow_size(value, main_config.soft_raw_limit_size, main_config.soft_raw_limit, index);
+ if (strstr(key, "IOReadBandwidthMax")) {
+ read_index = index_1;
}
- else {
- set_pow_size("-", main_config.soft_raw_limit_size, main_config.soft_raw_limit, index);
+ if (strstr(key, "IOWriteBandwidthMax")) {
+ write_index = index_1;
}
- if (yon_char_find_count(key, "MemoryMax") != 0) {
- set_pow_size(value, main_config.hard_raw_limit_size, main_config.hard_raw_limit, index);
+ if (yon_char_find_count(key, "MemoryHigh") != 0) {
+ philos_set_pow_size_memory(yon_char_new(value), &main_config.soft_raw_limit_size, index, array_size_pow);
+ set_size_memory_integer(yon_char_new(value), &main_config.soft_raw_limit, index);
}
- else {
- set_pow_size("-", main_config.hard_raw_limit_size, main_config.hard_raw_limit, index);
+ if (yon_char_find_count(key, "MemoryMax") != 0) {
+ philos_set_pow_size_memory(yon_char_new(value), &main_config.hard_raw_limit_size, index, array_size_pow);
+ set_size_memory_integer(yon_char_new(value), &main_config.hard_raw_limit, index);
}
if (yon_char_find_count(key, "MemorySwapMax") != 0) {
- set_pow_size(value, main_config.swap_size, main_config.swap, index);
- }
- else {
- set_pow_size("-", main_config.swap_size, main_config.swap, index);
+ philos_set_pow_size_memory(yon_char_new(value), &main_config.swap_size, index, array_size_pow);
+ set_size_memory_integer(yon_char_new(value), &main_config.swap, index);
}
if (yon_char_find_count(key, "CPUQuota") != 0) {
- set_pow_size(value, main_config.cpu_limit_size, main_config.cpu_limit, index);
+ philos_set_pow_size_memory(yon_char_new(value), &main_config.cpu_limit_size, index, array_size_pow);
+ set_size_memory_integer(yon_char_new(value), &main_config.cpu_limit, index);
}
- else {
- set_pow_size("-", main_config.cpu_limit_size, main_config.cpu_limit, index);
+ }
+ if (read_index != -1 || write_index != -1) {
+ if (read_index != -1 && write_index != -1) {
+ if (write_index > read_index) {
+ get_param_io_limit(arr_values, read_index, write_index, index, "IOReadBandwidthMax");
+ get_param_io_limit(arr_values, write_index, size , index, "IOWriteBandwidthMax");
+
+ }
+ else {
+ get_param_io_limit(arr_values, write_index, read_index,index, "IOWriteBandwidthMax");
+ get_param_io_limit(arr_values, read_index, size , index, "IOReadBandwidthMax");
+ }
}
- if (yon_char_find_count(key, "IOReadBandwidthMax") != 0) {
- set_pow_size(value, main_config.i_o_limit_read_size, main_config.i_o_limit_read, index);
+ else if (read_index != -1) {
+ get_param_io_limit(arr_values, read_index, size,index, "IOReadBandwidthMax");
}
- else {
- set_pow_size("-", main_config.i_o_limit_read_size, main_config.i_o_limit_read, index);
+ else if (write_index != -1) {
+ get_param_io_limit(arr_values, write_index, size,index, "IOWriteBandwidthMax");
}
- if (yon_char_find_count(key, "IOWriteBandwidthMax") != 0) {
- set_pow_size(value, main_config.i_o_limit_write_size, main_config.i_o_limit_write, index);
+ }
+
+
+
+}
+
+void write_value_and_null_config(int index_n1, int* index_n2, char* key_find, char* str_disk) {
+ char* array_disk = NULL;
+ if (strstr(key_find, "IOReadBandwidthMax")!=NULL) {
+ array_disk = main_config.disk_write[index_n1][*index_n2];
+ if (strcmp(array_disk, str_disk)!=0 && strcmp(array_disk, "-")!=0) {
+ (*index_n2)++;
}
- else {
- set_pow_size("-", main_config.i_o_limit_write_size, main_config.i_o_limit_write, index);
+ }
+ else if (strstr(key_find, "IOWriteBandwidthMax")!=NULL) {
+ array_disk = main_config.disk_read[index_n1][*index_n2];
+ if (strcmp(array_disk, str_disk)!=0 && strcmp(array_disk, "-")!=0) {
+ (*index_n2)++;
}
}
}
-void set_pow_size(char* str_find, int* array_size, char** array_data , int index) {
- if (strstr(str_find,"K") != NULL) {
- array_size = philos_int_append(array_size, &index, 0);
- index--;
+void get_param_io_limit(char** arr_values, int index_start, int size, int index_n1, char *key_find) {
+ int* array_limit = NULL;
+ char** array_disk = NULL;
+ int* array_limit_size = NULL;
+ if (strstr(key_find, "IOReadBandwidthMax")!=NULL) {
+ array_limit = main_config.i_o_limit_read[index_n1];
+ array_limit_size = main_config.i_o_limit_read_size[index_n1];
+ array_disk = main_config.disk_read[index_n1];
}
- else if (strstr(str_find,"M") != NULL) {
- array_size = philos_int_append(array_size, &index, 1);
- index--;
+ else if (strstr(key_find, "IOWriteBandwidthMax")!=NULL) {
+ array_limit = main_config.i_o_limit_write[index_n1];
+ array_limit_size = main_config.i_o_limit_write_size[index_n1];
+ array_disk = main_config.disk_write[index_n1];
}
- else if (strstr(str_find,"G") != NULL) {
- array_size = philos_int_append(array_size, &index, 2);
- index--;
+ else {
+ return;
}
- else if (strstr(str_find,"T") != NULL) {
- array_size = philos_int_append(array_size, &index, 3);
- index--;
+ int index_n2 = 0;
+ int flag_parsed = 0;
+ int flag_exit = 0;
+ for (int i = index_start; i < size; i++) {
+ if (strstr(arr_values[i], "BandwidthMax")!=NULL ) {
+ char* value = yon_char_new(arr_values[i]);
+ yon_char_divide_search(value, "=", -1);
+ if (strstr(arr_values[i], key_find)!=NULL) {
+ // Найден ключ в массив
+ char* disk = yon_char_divide_search(yon_char_new(value), " ", -1);
+ write_value_and_null_config(index_n1,&index_n2,key_find, disk);
+ array_disk[index_n2] = yon_char_new(disk);
+ philos_set_pow_size_memory_device(yon_char_new(value), &array_limit_size, index_n2, array_size_pow);
+ set_size_memory_integer_device(yon_char_new(value), &array_limit, index_n2);
+ flag_parsed = 1;
+ index_n2++;
+ }
+ else if (strstr(arr_values[i], "BandwidthMax")!=NULL &&
+ strstr(arr_values[i], key_find)==NULL && flag_parsed == 1) {
+ // Найден ключ в массив, но не тот
+ flag_exit = 1;
+ }
+ free(value);
+ }
+ else if (flag_parsed == 1) {
+ char* disk = yon_char_divide_search(yon_char_new(arr_values[i]), " ", -1);
+ write_value_and_null_config(index_n1,&index_n2,key_find, disk);
+ array_disk[index_n2] = yon_char_new(disk);
+ philos_set_pow_size_memory_device(yon_char_new(arr_values[i]), &array_limit_size, index_n2, array_size_pow);
+ set_size_memory_integer_device(yon_char_new(arr_values[i]), &array_limit, index_n2);
+ index_n2++;
+ }
+ else if (flag_exit == 1) {
+ break;
+ }
}
- else if (strstr(str_find,"\%") != NULL) {
- array_size = philos_int_append(array_size, &index, -1);
- index--;
+ if (index_n2 != 0) {
+ if (strstr(key_find, "BandwidthMax")!=NULL) {
+ if (strstr(key_find, "IOReadBandwidthMax")!=NULL) {
+ philos_array_int_copy(&main_config.i_o_limit_read[index_n1], &array_limit);
+ philos_array_int_copy(&main_config.i_o_limit_read_size[index_n1], &array_limit_size);
+ yon_char_parsed_copy(&main_config.disk_read[index_n1], &array_disk);
+ }
+ else if (strstr(key_find, "IOWriteBandwidthMax")!=NULL) {
+ philos_array_int_copy(&main_config.i_o_limit_write[index_n1], &array_limit);
+ philos_array_int_copy(&main_config.i_o_limit_write_size[index_n1], &array_limit_size);
+ yon_char_parsed_copy(&main_config.disk_write[index_n1], &array_disk);
+ }
+ }
+ philos_free_int_array(&array_limit, index_n2);
+ philos_free_string_array(&array_disk, index_n2);
+ philos_free_int_array(&array_limit_size, index_n2);
}
- else if (strstr(str_find,"\"") != NULL) {
-
+ else {
+
}
- else if (strstr(str_find,"-") != NULL) {
- array_size = philos_int_append(array_size, &index, -1);
- index--;
+
+}
+
+void set_size_memory_integer(char* str_find, int** array_data, int index) {
+ if (strstr(str_find, " ")) {
+ yon_char_divide_search(str_find, " ", -1);
}
- if (strstr(str_find,"-") == NULL) {
- if (str_find[0] == '\"') {
- yon_char_divide(str_find, 0);
- size_t length = strlen(str_find);
- str_find = yon_char_divide(str_find, length-2);
+ char* simv_del_array[9] = {"K","M","G","T","k","m","g","t","%"};
+ for (size_t i = 0; i < 9; i++) {
+ if (strstr(str_find, simv_del_array[i])) {
+ str_find = yon_char_divide_search(str_find, simv_del_array[i], -1);
}
- size_t length = strlen(str_find);
- str_find = yon_char_divide(str_find, length-2);
- array_data = yon_char_parsed_append(array_data, &index, str_find);
+ }
+ if (strstr(str_find, "-")==NULL) {
+ *array_data = philos_int_append(*array_data, &index, atoi(str_find));
}
else {
- array_data = yon_char_parsed_append(array_data, &index, "-");
+ *array_data = philos_int_append(*array_data, &index, -1);
}
}
-
-void main_cbx_2_event() {
- int menu_id = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->cbtMainInfo));
- char* cmd_text_param = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(widgets->cbtMainInfo));
- if (menu_id == 0) {
-
+void set_size_memory_integer_device(char* str_find, int** array_data, int index) {
+ if (strstr(str_find, " ")) {
+ yon_char_divide_search(str_find, " ", -1);
}
- else if (menu_id == 1) {
-
+ char* simv_del_array[9] = {"K","M","G","T","k","m","g","t","%"};
+ for (size_t i = 0; i < 9; i++) {
+ if (strstr(str_find, simv_del_array[i])) {
+ str_find = yon_char_divide_search(str_find, simv_del_array[i], -1);
+ }
}
- else if (menu_id == 2) {
-
+ if (strstr(str_find, "-")==NULL) {
+ (*array_data)[index] = atoi(str_find);
+ }
+ else {
+ (*array_data)[index] = -1;
}
- else if (menu_id == 3) {
+}
+void main_cbx_2_event() {
+ int menu_id = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->cbtMainInfoLevel2));
+ char* cmd_text_param = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(widgets->cbtMainInfoLevel2));
+ char* cmd = NULL;
+ if (menu_id >= 0) {
+ cmd = yon_char_unite("systemctl status ", cmd_text_param ," --no-pager", NULL);
+ yon_terminal_integrated_launch(widgets->vteInformation, cmd, NULL, NULL);
+
}
if (menu_id >= 0) {
-
+ free(cmd_text_param);
+ free(cmd);
}
- //char *cmd = yon_char_get_augumented("systemd-cgtop -d ", str_second);
- //yon_terminal_integrated_launch(widgets->vteDispatcher, cmd, NULL, NULL);
-
}
void tree_view_select(GtkWidget *self, main_window *widgets) {
@@ -468,63 +649,130 @@ void tree_view_select(GtkWidget *self, main_window *widgets) {
gtk_widget_set_sensitive(widgets->btnInfo,1);
}
else {
- gtk_widget_set_sensitive(widgets->btnAdd,1);
+ if (main_config.lock_save_global == 0 || main_config.lock_save_local == 0) {
+ gtk_widget_set_sensitive(widgets->btnAdd,1);
+ }
gtk_widget_set_sensitive(widgets->btnDelQuotas,0);
gtk_widget_set_sensitive(widgets->btnEdit,0);
gtk_widget_set_sensitive(widgets->btnInfo,0);
- }
-
+ }
}
void tree_view_add(int index) {
- main_config.type_quota = yon_char_parsed_append(main_config.type_quota, &main_config.size_tree_view, add_get_quota_object());
- main_config.size_tree_view--;
- main_config.quota_volume = yon_char_parsed_append(main_config.quota_volume, &main_config.size_tree_view, add_get_select_device_to_level_2());
- main_config.size_tree_view--;
- main_config.soft_raw_limit = yon_char_parsed_append(main_config.soft_raw_limit, &main_config.size_tree_view, add_get_soft());
- main_config.size_tree_view--;
- main_config.hard_raw_limit = yon_char_parsed_append(main_config.hard_raw_limit, &main_config.size_tree_view, add_get_hard());
- main_config.size_tree_view--;
- main_config.swap = yon_char_parsed_append(main_config.swap, &main_config.size_tree_view, add_get_limit_swap());
- main_config.size_tree_view--;
- main_config.cpu_limit = yon_char_parsed_append(main_config.cpu_limit, &main_config.size_tree_view, add_get_limit_cpu());
- main_config.size_tree_view--;
- main_config.i_o_limit_read = yon_char_parsed_append(main_config.i_o_limit_read, &main_config.size_tree_view, add_get_read_device());
- main_config.size_tree_view--;
- main_config.i_o_limit_write = yon_char_parsed_append(main_config.i_o_limit_write, &main_config.size_tree_view, add_get_write_device());
- main_config.size_tree_view--;
+ init_cfg_array(index);
+ main_config.type_quota_size[index] = add_get_quota_object_size();
+ main_config.quota_volume_size[index] = -1;
+ main_config.type_quota[index] = add_get_quota_object();
+ main_config.quota_volume[index] = add_get_select_device_to_level_2();
+
+ main_config.soft_raw_limit[index] = add_get_soft();
+ main_config.hard_raw_limit[index] = add_get_hard();
+ main_config.swap[index] = add_get_limit_swap();
+ main_config.cpu_limit[index] = add_get_limit_cpu();
+ main_config.soft_raw_limit_size[index] = add_get_soft_size();
+ main_config.hard_raw_limit_size[index] = add_get_hard_size();
+ main_config.swap_size[index] = add_get_limit_swap_size();
+ main_config.cpu_limit_size[index] = add_get_limit_cpu_size();
+ philos_free_string_array(&main_config.disk_read[index],(get_device_cfg()->size_disk*2));
+ philos_free_string_array(&main_config.disk_write[index],(get_device_cfg()->size_disk*2));
+ philos_free_int_array(&main_config.i_o_limit_write[index],(get_device_cfg()->size_disk*2));
+ philos_free_int_array(&main_config.i_o_limit_read[index],(get_device_cfg()->size_disk*2));
+ philos_free_int_array(&main_config.i_o_limit_read_size[index],(get_device_cfg()->size_disk*2));
+ philos_free_int_array(&main_config.i_o_limit_write_size[index],(get_device_cfg()->size_disk*2));
- main_config.type_quota_size = philos_int_append(main_config.type_quota_size, &main_config.size_tree_view, add_get_quota_object_size());
- main_config.size_tree_view--;
- main_config.quota_volume_size = philos_int_append(main_config.quota_volume_size, &main_config.size_tree_view, -1);
- main_config.size_tree_view--;
- main_config.soft_raw_limit_size = philos_int_append(main_config.soft_raw_limit_size, &main_config.size_tree_view, add_get_soft_size());
- main_config.size_tree_view--;
- main_config.hard_raw_limit_size = philos_int_append(main_config.hard_raw_limit_size, &main_config.size_tree_view, add_get_hard_size());
- main_config.size_tree_view--;
- main_config.swap_size = philos_int_append(main_config.swap_size, &main_config.size_tree_view, add_get_limit_swap_size());
- main_config.size_tree_view--;
- main_config.cpu_limit_size = philos_int_append(main_config.cpu_limit_size, &main_config.size_tree_view, add_get_limit_cpu_size());
- main_config.size_tree_view--;
- main_config.i_o_limit_read_size = philos_int_append(main_config.i_o_limit_read_size, &main_config.size_tree_view, add_get_read_device_size());
- main_config.size_tree_view--;
- main_config.i_o_limit_write_size = philos_int_append(main_config.i_o_limit_write_size, &main_config.size_tree_view, add_get_write_device_size());
- fill_tree_view(main_config.size_tree_view-1, main_config.size_tree_view);
-}
-
-void fill_tree_view(int start, int size) {
+ philos_array_int_copy(&main_config.i_o_limit_read[index], add_get_read_device());
+ philos_array_int_copy(&main_config.i_o_limit_write[index], add_get_write_device());
+ philos_array_int_copy(&main_config.i_o_limit_read_size[index], add_get_read_device_size_pow());
+ philos_array_int_copy(&main_config.i_o_limit_write_size[index], add_get_write_device_size_pow());
+ yon_char_parsed_copy(&main_config.disk_read[index], add_get_select_read_device());
+ yon_char_parsed_copy(&main_config.disk_write[index], add_get_select_write_device());
+ main_config.size_tree_view += 1;
+ fill_tree_view(main_config.size_tree_view-1, main_config.size_tree_view, 1);
+ main_config.flag_set_data = 1;
+ main_config.flag_save = 2;
+
+}
+
+void fill_tree_view(int start, int size, int flag_gui_add) {
+ GtkTreeModel *model = GTK_TREE_MODEL(main_config.list);
+ if (flag_gui_add == 0) {
+ g_object_ref(main_config.list);
+ gtk_list_store_clear(main_config.list);
+ }
for (int index = start; index < size; index++) {
- GtkTreeIter iter;
- gtk_list_store_append(main_config.list,&iter);
- gtk_list_store_set(main_config.list,&iter,0,main_config.type_quota[index],
- 1,main_config.quota_volume[index],
- 2,main_config.soft_raw_limit[index],
- 3,main_config.hard_raw_limit[index],
- 4,main_config.swap[index],
- 5,main_config.cpu_limit[index],
- 6,main_config.i_o_limit_read[index],
- 7,main_config.i_o_limit_write[index],-1);
+ GtkTreeIter iter;
+ gtk_list_store_append(main_config.list,&iter);
+ char* str_io_read = format_io_limit_in_tree_view(main_config.disk_read, main_config.i_o_limit_read, main_config.i_o_limit_read_size, index);
+ char* str_io_write = format_io_limit_in_tree_view(main_config.disk_write, main_config.i_o_limit_write, main_config.i_o_limit_write_size, index);
+ gtk_list_store_set(main_config.list,&iter,
+ 0,main_config.type_quota[index],
+ 1,main_config.quota_volume[index],
+ 2,philos_format_cfg_str_size_memory("", main_config.soft_raw_limit[index],main_config.soft_raw_limit_size[index]),
+ 3,philos_format_cfg_str_size_memory("", main_config.hard_raw_limit[index],main_config.hard_raw_limit_size[index]),
+ 4,philos_format_cfg_str_size_memory("", main_config.swap[index],main_config.swap_size[index]),
+ 5,philos_format_cfg_str_size_memory("", main_config.cpu_limit[index], -1),
+ 6,str_io_read,
+ 7,str_io_write,-1);
+ free(str_io_read);
+ free(str_io_write);
+ }
+ if (flag_gui_add != 0) {
+ gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->treeViewMain), model);
+ }
+}
+
+char* format_io_limit_in_tree_view(config_str* disk, int** i_o_limit, int** i_o_limit_size, int index) {
+ int index_to_n2 = 0;
+ char* str = "";
+ while (1) {
+ if (i_o_limit == NULL) {break;}
+ if (i_o_limit[index]!= NULL) {
+ if (i_o_limit[index][index_to_n2] != -2) {
+ if (index_to_n2!=0) {
+ if (!strstr(str, "-")) {
+ char* num_and_pow_size = philos_format_cfg_str_size_memory(" ", i_o_limit[index][index_to_n2] , i_o_limit_size[index][index_to_n2]);
+ if (!strstr(num_and_pow_size, "-")) {
+ if (strlen(str)>3) {
+ str = yon_char_unite(str, ",",
+ disk[index][index_to_n2],
+ num_and_pow_size, NULL);
+ }
+ else {
+ str = yon_char_unite(disk[index][index_to_n2],
+ num_and_pow_size, NULL);
+ }
+
+ }
+ free(num_and_pow_size);
+ }
+
+ }
+ else {
+ if (!strstr(str, "-")) {
+ char* num_and_pow_size = philos_format_cfg_str_size_memory(" ", i_o_limit[index][index_to_n2], i_o_limit_size[index][index_to_n2]);
+ if (!strstr(num_and_pow_size, "-")) {
+ str = yon_char_unite(str,
+ disk[index][index_to_n2],
+ num_and_pow_size, NULL);
+ }
+ free(num_and_pow_size);
+ }
+ }
+
+ }
+ else {
+ break;
+ }
+ index_to_n2++;
+ }
+ else {
+ break;
+ }
+ }
+ if (strlen(str)==0) {
+ return yon_char_new("-");
}
+ return str;
}
int tree_view_edit() {
@@ -534,29 +782,39 @@ int tree_view_edit() {
GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->treeViewMain));
if(gtk_tree_selection_get_selected(selection, &model, &iter)) {
+ main_config.flag_set_data = 1;
+ main_config.flag_save = 2;
char* str_iter = gtk_tree_model_get_string_from_iter(model, &iter);
index = atoi(str_iter);
main_config.soft_raw_limit[index] = edit_get_soft();
main_config.hard_raw_limit[index] = edit_get_hard();
main_config.swap[index] = edit_get_limit_swap();
main_config.cpu_limit[index] = edit_get_limit_cpu();
- main_config.i_o_limit_read[index] = edit_get_read_device();
- main_config.i_o_limit_write[index] = edit_get_write_device();
+ philos_array_int_copy(&main_config.i_o_limit_read[index], edit_get_read_device());
+ philos_array_int_copy(&main_config.i_o_limit_read_size[index], edit_get_read_device_size_pow());
+ yon_char_parsed_copy(&main_config.disk_read[index], edit_get_select_read_device());
+ yon_char_parsed_copy(&main_config.disk_write[index], edit_get_select_write_device());
+
+ philos_array_int_copy(&main_config.i_o_limit_write[index], edit_get_write_device());
+ philos_array_int_copy(&main_config.i_o_limit_write_size[index], edit_get_write_device_size_pow());
+
main_config.soft_raw_limit_size[index] = edit_get_soft_size();
main_config.hard_raw_limit_size[index] = edit_get_hard_size();
main_config.swap_size[index] = edit_get_limit_swap_size();
main_config.cpu_limit_size[index] = edit_get_limit_cpu_size();
- main_config.i_o_limit_read_size[index] = edit_get_read_device_size();
- main_config.i_o_limit_write_size[index] = edit_get_write_device_size();
- gtk_list_store_set(main_config.list,&iter,0,main_config.type_quota[index],
+
+ char* str_io_read = format_io_limit_in_tree_view(main_config.disk_read, main_config.i_o_limit_read, main_config.i_o_limit_read_size, index);
+ char* str_io_write = format_io_limit_in_tree_view(main_config.disk_write, main_config.i_o_limit_write, main_config.i_o_limit_write_size, index);
+ gtk_list_store_set(main_config.list,&iter,
+ 0,main_config.type_quota[index],
1,main_config.quota_volume[index],
- 2,main_config.soft_raw_limit[index],
- 3,main_config.hard_raw_limit[index],
- 4,main_config.swap[index],
- 5,main_config.cpu_limit[index],
- 6,main_config.i_o_limit_read[index],
- 7,main_config.i_o_limit_write[index],-1);
+ 2,philos_format_cfg_str_size_memory("",main_config.soft_raw_limit[index],main_config.soft_raw_limit_size[index]),
+ 3,philos_format_cfg_str_size_memory("",main_config.hard_raw_limit[index],main_config.hard_raw_limit_size[index]),
+ 4,philos_format_cfg_str_size_memory("",main_config.swap[index],main_config.swap_size[index]),
+ 5,philos_format_cfg_str_size_memory("",main_config.cpu_limit[index], -1),
+ 6,str_io_read,
+ 7,str_io_write,-1);
return 1;
}
else {
@@ -587,7 +845,6 @@ void info_show(GtkWidget *self) {
int index = atoi(str_iter);
char* t_quota = main_config.type_quota[index];
if (yon_char_find_count(t_quota, "-") == 0) {
- // TODO: add code
}
}
gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->notebookMain), 3);
@@ -597,9 +854,17 @@ void event_all(main_window *widgets) {
}
+void fn_scroll(GdkEventScroll self) {
+
+}
+
void main_event(main_window *widgets) {
/* Signal connection | Присоединение сигналов */
+ g_signal_connect(G_OBJECT(widgets->vteDispatcher), "scroll-event", G_CALLBACK(fn_scroll), NULL);
g_signal_connect(G_OBJECT(widgets->Window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
+
+ g_signal_connect(G_OBJECT(widgets->notebookMain), "switch-page", G_CALLBACK(select_page_notebook), NULL);
+
g_signal_connect(G_OBJECT(widgets->DocumentationMenuItem),"activate",G_CALLBACK(on_open_documentation_confirmation),WIKI_LINK);
g_signal_connect(G_OBJECT(widgets->AboutMenuItem),"activate",G_CALLBACK(on_about),NULL);
@@ -611,23 +876,29 @@ void main_event(main_window *widgets) {
g_signal_connect(G_OBJECT(widgets->btnMainShowAllEmpty), "toggled", G_CALLBACK(main_update_processes), NULL);
g_signal_connect(G_OBJECT(widgets->btnMainShowCoreStream), "toggled", G_CALLBACK(main_update_processes), NULL);
g_signal_connect(G_OBJECT(widgets->cbtMainInfo),"changed",G_CALLBACK(main_update_information), NULL);
- g_signal_connect(G_OBJECT(widgets->cbtMainInfoLevel2),"changed",G_CALLBACK(main_cbx_2_event), NULL);
g_signal_connect(G_OBJECT(widgets->btnDelQuotas), "clicked", G_CALLBACK(tree_view_del_line), widgets);
g_signal_connect(G_OBJECT(widgets->treeViewMain), "cursor-changed", G_CALLBACK(tree_view_select), widgets);
g_signal_connect(G_OBJECT(widgets->LoadGlobalMenuItem), "activate", G_CALLBACK(load_global_cfg), widgets);
g_signal_connect(G_OBJECT(widgets->LoadLocalMenuItem), "activate", G_CALLBACK(load_system_cfg), widgets);
-/*
- g_signal_connect(G_OBJECT(widgets->LoadGlobalMenuItem),"activate",G_CALLBACK(),NULL);
- g_signal_connect(G_OBJECT(widgets->LoadLocalMenuItem),"activate",G_CALLBACK(),NULL);
- g_signal_connect(G_OBJECT(widgets->SaveMenuItem),"activate",G_CALLBACK(),NULL);
- g_signal_connect(G_OBJECT(widgets->SaveGlobalMenuItem),"activate",G_CALLBACK(),NULL);
- g_signal_connect(G_OBJECT(widgets->SaveLocalMenuItem),"activate",G_CALLBACK(),NULL);
-*/
+ g_signal_connect(G_OBJECT(widgets->SaveGlobalMenuItem), "activate", G_CALLBACK(wrapper_global_save), widgets);
+ g_signal_connect(G_OBJECT(widgets->SaveLocalMenuItem), "activate", G_CALLBACK(wrapper_system_save), widgets);
+ g_signal_connect(G_OBJECT(widgets->SaveMenuItem), "activate", G_CALLBACK(wrapper_all_save), widgets);
+}
+gboolean select_page_notebook(
+ GtkNotebook* self,
+ gboolean object,
+ gpointer user_data
+) {
+ int menu = gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->notebookMain));
+ if (menu == 0 || menu == 2) {
+ yon_terminal_integrated_launch(widgets->vteDispatcher, "clear", NULL, NULL);
+ main_update_dispatcher();
+ }
}
void wrapper_add_show(GtkWidget *self) {
add_show(NULL, glade_path);
- g_signal_connect(G_OBJECT(get_widget_add()->btnSaveAddSave), "clicked", G_CALLBACK(main_add_btn_save), NULL);
+ g_signal_connect(G_OBJECT(get_widget_add()->btnSaveTempSave), "clicked", G_CALLBACK(main_add_btn_save), NULL);
}
void main_add_btn_save() {
tree_view_add(main_config.size_tree_view);
@@ -646,25 +917,30 @@ void wrapper_edit_show() {
if(gtk_tree_selection_get_selected(selection, &model, &iter)) {
char* str_iter = gtk_tree_model_get_string_from_iter(model, &iter);
int index = atoi(str_iter);
+ size_t size_disk_read_array = 0;
+ size_t size_disk_write_array = 0;
edit_show(NULL, glade_path);
+ edit_set_size_arrays((get_device_cfg()->size_disk*2)+1);
+ edit_set_select_read_device(&main_config.disk_read[index]);
+ edit_set_read_device(main_config.i_o_limit_read[index], main_config.i_o_limit_read_size[index]);
+ edit_set_select_write_device(&main_config.disk_write[index]);
+ edit_set_write_device(main_config.i_o_limit_write[index], main_config.i_o_limit_write_size[index]);
edit_set_hard(main_config.hard_raw_limit[index], main_config.hard_raw_limit_size[index]);
edit_set_limit_cpu(main_config.cpu_limit[index], main_config.cpu_limit_size[index]);
edit_set_soft(main_config.soft_raw_limit[index], main_config.soft_raw_limit_size[index]);
- edit_set_write_device(main_config.i_o_limit_write[index], main_config.i_o_limit_write_size[index]);
- edit_set_read_device(main_config.i_o_limit_read[index], main_config.i_o_limit_read_size[index]);
edit_set_limit_swap(main_config.swap[index], main_config.swap_size[index]);
- // edit_set_select_device(main_config.cpu_limit[index]);
- g_signal_connect(G_OBJECT(get_widget_edit()->btnSaveEditSave), "clicked", G_CALLBACK(main_edit_btn_save), NULL);
+ set_gui_device();
+ edit_event(get_widget_edit());
+ g_signal_connect(G_OBJECT(get_widget_edit()->btnSaveTempSave), "clicked", G_CALLBACK(main_edit_btn_save), NULL);
+ edit_init_windows();
}
}
void main_edit_btn_save() {
if (tree_view_edit(main_config.size_tree_view)) {
+ edit_init_windows();
add_on_destroy_subwindow(get_widget_edit()->Window);
}
- else {
-
- }
}
@@ -674,25 +950,41 @@ void tree_view_del_line() {
GtkTreeModel *model = GTK_TREE_MODEL(main_config.list);
GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->treeViewMain));
if(gtk_tree_selection_get_selected(selection, &model, &iter)) {
- char* str_iter = gtk_tree_model_get_string_from_iter(model, &iter);
+ char* str_iter = yon_char_new(gtk_tree_model_get_string_from_iter(model, &iter));
index = atoi(str_iter);
+ g_object_ref(main_config.list);
+ gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->treeViewMain), NULL);
+ gtk_list_store_clear(main_config.list);
+ char* key_del = save_format_key(index);
+ if (key_del != NULL) {
+ main_config.array_del_line = yon_char_parsed_append(main_config.array_del_line, &main_config.size_array_del_line, yon_char_new(key_del));
+ free(key_del);
+ }
main_config.type_quota = yon_char_parsed_shrink(main_config.type_quota, &main_config.size_tree_view,index);
main_config.size_tree_view++;
main_config.quota_volume = yon_char_parsed_shrink(main_config.quota_volume, &main_config.size_tree_view,index);
main_config.size_tree_view++;
- main_config.soft_raw_limit = yon_char_parsed_shrink(main_config.soft_raw_limit, &main_config.size_tree_view,index);
+ main_config.soft_raw_limit = remove_element_int_array(main_config.soft_raw_limit, &main_config.size_tree_view,index);
main_config.size_tree_view++;
- main_config.hard_raw_limit = yon_char_parsed_shrink(main_config.hard_raw_limit, &main_config.size_tree_view,index);
+ main_config.hard_raw_limit = remove_element_int_array(main_config.hard_raw_limit, &main_config.size_tree_view,index);
main_config.size_tree_view++;
- main_config.swap = yon_char_parsed_shrink(main_config.swap, &main_config.size_tree_view,index);
+ main_config.swap = remove_element_int_array(main_config.swap, &main_config.size_tree_view,index);
main_config.size_tree_view++;
- main_config.cpu_limit = yon_char_parsed_shrink(main_config.cpu_limit, &main_config.size_tree_view,index);
+ main_config.cpu_limit = remove_element_int_array(main_config.cpu_limit, &main_config.size_tree_view,index);
main_config.size_tree_view++;
- main_config.i_o_limit_read = yon_char_parsed_shrink(main_config.i_o_limit_read, &main_config.size_tree_view,index);
+ main_config.i_o_limit_read = remove_element_int_array_n3(main_config.i_o_limit_read, &main_config.size_tree_view,index);
main_config.size_tree_view++;
- main_config.i_o_limit_write = yon_char_parsed_shrink(main_config.i_o_limit_write, &main_config.size_tree_view,index);
+ main_config.i_o_limit_write = remove_element_int_array_n3(main_config.i_o_limit_write, &main_config.size_tree_view,index);
+ main_config.size_tree_view++;
+ main_config.disk_read = yon_char_parsed_shrink_n3(main_config.disk_read, &main_config.size_tree_view,index);
+ main_config.size_tree_view++;
+ main_config.disk_write = yon_char_parsed_shrink_n3(main_config.disk_write, &main_config.size_tree_view,index);
+ main_config.size_tree_view++;
+
+ main_config.i_o_limit_read_size = remove_element_int_array_n3(main_config.i_o_limit_read_size, &main_config.size_tree_view,index);
+ main_config.size_tree_view++;
+ main_config.i_o_limit_write_size = remove_element_int_array_n3(main_config.i_o_limit_write_size, &main_config.size_tree_view,index);
main_config.size_tree_view++;
-
main_config.type_quota_size = remove_element_int_array(main_config.type_quota_size, &main_config.size_tree_view,index);
main_config.size_tree_view++;
main_config.quota_volume_size = remove_element_int_array(main_config.quota_volume_size, &main_config.size_tree_view,index);
@@ -704,33 +996,233 @@ void tree_view_del_line() {
main_config.swap_size = remove_element_int_array(main_config.swap_size, &main_config.size_tree_view,index);
main_config.size_tree_view++;
main_config.cpu_limit_size = remove_element_int_array(main_config.cpu_limit_size, &main_config.size_tree_view,index);
- main_config.size_tree_view++;
- main_config.i_o_limit_read_size = remove_element_int_array(main_config.i_o_limit_read_size, &main_config.size_tree_view,index);
- main_config.size_tree_view++;
- main_config.i_o_limit_write_size = remove_element_int_array(main_config.i_o_limit_write_size, &main_config.size_tree_view,index);
- g_object_ref(main_config.list);
- gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->treeViewMain), NULL);
- gtk_list_store_clear(main_config.list);
+
main_fill_tree_view_after_remove();
gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->treeViewMain), model);
+ free(str_iter);
+ main_config.flag_set_data = 1;
+ main_config.flag_save = 2;
+ }
+}
+
+void wrapper_all_save() {
+ int flag_mess_save = 0;
+
+ if (main_config.flag_load == 0) {
+ flag_mess_save = template_format_str_save(CMD_ALL_SAVE, CMD_ALL_REMOVE);
+ }
+ else {
+ flag_mess_save = template_format_str_save(CMD_ALL_SAVE, CMD_ALL_REMOVE);
+ }
+ if (flag_mess_save) {
+ yon_ubl_status_box_render(GLOBAL_LOCAL_SAVE_SUCCESS,BACKGROUND_IMAGE_SUCCESS_TYPE);
+ main_config.flag_save=0;
+ }
+ else {
+ yon_ubl_status_box_render(MESS_NOTHING_SAVE, BACKGROUND_IMAGE_SUCCESS_TYPE);
+ }
+
+
+}
+
+void wrapper_global_save() {
+ if (template_format_str_save(CMD_SAVE_GLOBAL, CMD_REMOVE_GLOBAL)) {
+ yon_ubl_status_box_render(GLOBAL_SAVE_SUCCESS,BACKGROUND_IMAGE_SUCCESS_TYPE);
+ main_config.flag_save-=1;
+ }
+ else {
+ yon_ubl_status_box_render(MESS_NOTHING_SAVE, BACKGROUND_IMAGE_SUCCESS_TYPE);
+ }
+
+
+}
+
+void wrapper_system_save() {
+ if (template_format_str_save(CMD_SAVE_SYSTEM, CMD_REMOVE_SYSTEM)) {
+ yon_ubl_status_box_render(LOCAL_SAVE_SUCCESS,BACKGROUND_IMAGE_SUCCESS_TYPE);
+ main_config.flag_save-=1;
+ }
+ else {
+ yon_ubl_status_box_render(MESS_NOTHING_SAVE, BACKGROUND_IMAGE_SUCCESS_TYPE);
+ }
+
+}
+
+
+char* save_format_key(int index) {
+ return yon_char_unite("CGROUP_QUOTA[", main_config.quota_volume[index] , "]", NULL);
+}
+
+char* save_format_value(int index) {
+ char* value = yon_char_new("");
+ char split_simvol[2] = {0};
+ split_simvol[0] = 0;
+ split_simvol[1] = 0;
+ if (main_config.soft_raw_limit[index]>=0) {
+ char* value_size = philos_format_cfg_str_size_memory("MemoryHigh=", main_config.soft_raw_limit[index],main_config.soft_raw_limit_size[index]);
+ if (!strstr(value_size,"-")) {
+ value = yon_char_unite(value ,split_simvol, value_size, NULL);
+ split_simvol[0] = ',';
+ split_simvol[1] = '\0';
+ }
+ free(value_size);
+ }
+ if (main_config.hard_raw_limit[index]>=0) {
+ char* value_size = philos_format_cfg_str_size_memory("MemoryMax=", main_config.hard_raw_limit[index],main_config.hard_raw_limit_size[index]);
+ if (!strstr(value_size,"-")) {
+ value = yon_char_unite(value ,split_simvol, value_size, NULL);
+ split_simvol[0] = ',';
+ split_simvol[1] = '\0';
+ }
+ free(value_size);
+ }
+ if (main_config.swap[index]>=0) {
+ char* value_size = philos_format_cfg_str_size_memory("MemorySwapMax=", main_config.swap[index],main_config.swap_size[index]);
+ if (!strstr(value_size,"-")) {
+ value = yon_char_unite(value ,split_simvol, value_size, NULL);
+ split_simvol[0] = ',';
+ split_simvol[1] = '\0';
+ }
+ free(value_size);
+ }
+ if (main_config.cpu_limit[index]>=0) {
+ value = yon_char_unite(value ,split_simvol,"CPUQuota=", yon_char_from_int(main_config.cpu_limit[index]), "%", NULL);
+ split_simvol[0] = ',';
+ split_simvol[1] = '\0';
+ }
+
+ char* value_read = add_io_str_format_ubconfig("IOReadBandwidthMax", main_config.i_o_limit_read, main_config.i_o_limit_read_size, main_config.disk_read, index);
+ char* value_write = add_io_str_format_ubconfig("IOWriteBandwidthMax", main_config.i_o_limit_write, main_config.i_o_limit_write_size, main_config.disk_write, index);
+ if (strlen(value_read) > 5){
+ if (strlen(value) > 5) {
+ value = yon_char_unite(value, ",", value_read, NULL);
+ }
+ else {
+ value = yon_char_unite(value_read, NULL);
+ }
+
+ }
+ if (strlen(value_write)> 5) {
+ if (strlen(value) > 5) {
+ value = yon_char_unite(value, ",", value_write, NULL);
+ }
+ else {
+ value = yon_char_unite(value_write, NULL);
+ }
+ }
+ return value;
+}
+char* add_io_str_format_ubconfig(char* key, int** i_o_limit, int** i_o_limit_size, char*** disk, int index) {
+ char split_simvol[2] = {0};
+ char* cmd_io = "";
+ if (i_o_limit== NULL) {return NULL;}
+ if (i_o_limit_size[index] == NULL) {return NULL;}
+ if (i_o_limit[index] == NULL) {return NULL;}
+ int len_array = 0;
+ cmd_io = format_io_limit_in_tree_view(disk, i_o_limit, i_o_limit_size, index);
+ if (strlen(cmd_io) > 5) {
+ return yon_char_unite(key, "=", cmd_io, NULL);
}
else {
+ return yon_char_new("");
+ }
+ return cmd_io;
+
+}
+
+int check_save() {
+ if (main_config.flag_set_data == 1 || main_config.flag_save>0) {
+ return 0;
}
+ else if (main_config.flag_set_data == 0 || main_config.flag_save<=0) {
+ return 1;
+ }
+ return 0;
+}
+int template_format_str_save(char* source_set_cmd, char* source_remove_cmd) {
+ char* cmd_remove = template_format_str_remove_save(source_remove_cmd);
+ char* cmd_set = template_format_str_set_save(source_set_cmd);
+ if (cmd_set != NULL && cmd_remove != NULL) {
+ philos_config_save(yon_char_unite(cmd_set, "; " , cmd_remove, NULL));
+ }
+ else if (cmd_remove != NULL) {
+ philos_config_save(cmd_remove);
+ }
+ else if (cmd_set != NULL) {
+ philos_config_save(cmd_set);
+ }
+ else {
+ return 0;
+ }
+ if (cmd_remove != NULL) {
+ free(cmd_remove);
+ }
+ if (cmd_set != NULL) {
+ free(cmd_set);
+ }
+ main_config.flag_set_data = 0;
+ return 1;
+
+}
+
+char* template_format_str_set_save(char* source_set_cmd) {
+ char* cmd = yon_char_new("");
+ for (size_t index = 0; index < main_config.size_tree_view; index++) {
+ char* key = save_format_key(index);
+ char* value = save_format_value(index);
+ if (strlen(key)>4 && strlen(value) > 4) {
+ cmd = yon_char_unite(cmd, " " , key, "=\"" , value, "\" ", NULL);
+ }
+ if (key != NULL) {
+ free(key);
+ }
+ if (value != NULL) {
+ free(value);
+ }
+ }
+ if (strlen(cmd) > 8 && check_save()== 0) {
+ cmd = yon_char_unite(source_set_cmd, " " ,cmd, NULL);
+ return cmd;
+ }
+ free(cmd);
+ return NULL;
+
+}
+
+char* template_format_str_remove_save(char* source_remove_cmd) {
+ char* cmd = yon_char_new(source_remove_cmd);
+ if (main_config.size_array_del_line == 0) {
+ return NULL;
+ }
+ for (size_t index = 0; index < main_config.size_array_del_line; index++) {
+ char* key = main_config.array_del_line[index];
+ if (key != NULL) {
+ cmd = yon_char_unite(cmd, " " , key, " ", NULL);
+ }
+ }
+ if (strlen(cmd) > strlen(source_remove_cmd) && check_save()== 0) {
+ return cmd;
+ }
+ free(cmd);
+ return NULL;
}
void main_fill_tree_view_after_remove() {
for (int index= 0; index < main_config.size_tree_view; index++) {
GtkTreeIter iter;
gtk_list_store_append(main_config.list,&iter);
- gtk_list_store_set(main_config.list,&iter,0,main_config.type_quota[index],
+ char* str_io_read = format_io_limit_in_tree_view(main_config.disk_read, main_config.i_o_limit_read, main_config.i_o_limit_read_size, index);
+ char* str_io_write = format_io_limit_in_tree_view(main_config.disk_write, main_config.i_o_limit_write, main_config.i_o_limit_write_size, index);
+ gtk_list_store_set(main_config.list,&iter,
+ 0,main_config.type_quota[index],
1,main_config.quota_volume[index],
- 2,main_config.soft_raw_limit[index],
- 3,main_config.hard_raw_limit[index],
- 4,main_config.swap[index],
- 5,main_config.cpu_limit[index],
- 6,main_config.i_o_limit_read[index],
- 7,main_config.i_o_limit_write[index],-1);
+ 2,philos_format_cfg_str_size_memory("",main_config.soft_raw_limit[index],main_config.soft_raw_limit_size[index]),
+ 3,philos_format_cfg_str_size_memory("",main_config.hard_raw_limit[index],main_config.hard_raw_limit_size[index]),
+ 4,philos_format_cfg_str_size_memory("",main_config.swap[index],main_config.swap_size[index]),
+ 5,philos_format_cfg_str_size_memory("",main_config.cpu_limit[index], -1),
+ 6,str_io_read,
+ 7,str_io_write,-1);
}
}
@@ -750,12 +1242,23 @@ void main_localization(main_window *widgets) {
gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->AboutMenuItem),ABOUT_LABEL);
}
+void yon_load_proceed(char *command){
+ if (yon_config_load_register(command))
+ yon_ubl_status_box_render(LOCAL_SAVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
+ else
+ yon_ubl_status_box_render(LOAD_FAILED_LABEL,BACKGROUND_IMAGE_FAIL_TYPE);
+}
int main(int argc, char *argv[]){
local=setlocale(LC_ALL, "");
textdomain (LocaleName);
config_init();
+ int size_array_size_pow = 0;
+ array_size_pow = yon_char_parsed_append(array_size_pow,&size_array_size_pow, STR_KB);
+ array_size_pow = yon_char_parsed_append(array_size_pow,&size_array_size_pow, STR_MB);
+ array_size_pow = yon_char_parsed_append(array_size_pow,&size_array_size_pow, STR_GB);
+ array_size_pow = yon_char_parsed_append(array_size_pow,&size_array_size_pow, STR_TB);
int option_index=0;
- int show_help=0;
+ int show_help=0;
{
struct option long_options[] = {
{"help", 0, 0, 'h'},
@@ -768,11 +1271,11 @@ int main(int argc, char *argv[]){
{"socket-id", 1, 0, 's'},
{"socket-ext-id", 1,0, 'e'},
{"socket-trd-id", 1,0, 't'},
+ {"debug", 0,0, 'd'},
{ NULL, 0, NULL, 0 }
};
-
for (int i=0;iHeadOverlay,widgets->HeadBox,widgets->HeadImage,banner_path);
+ yon_ubl_header_setup_resource(widgets->HeadOverlay,widgets->HeadBox,widgets->HeadImage,banner_path);
- if (yon_ubl_status_box_setup(widgets->StatusIcon,widgets->StatusBox,widgets->StatusLabel))
- yon_ubl_status_box_render(GLOBAL_LOAD_SUCCESS,BACKGROUND_IMAGE_SUCCESS_TYPE);
+ yon_ubl_status_box_setup(widgets->StatusIcon,widgets->StatusBox,widgets->StatusLabel);
+ if (getuid()!=0) {
+ load_system_cfg();
+ yon_ubl_status_box_render(ROOT_WARNING_LABEL,BACKGROUND_IMAGE_FAIL_TYPE);
+ }
+ else {
+ yon_ubl_status_box_render(LOAD_LOCAL_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
+ if (main_config.lock_load_global == 0) {
+ load_global_cfg();
+ }
+ if (main_config.lock_save_local == 0) {
+ load_system_cfg();
+ }
+ }
yon_ubl_setup_sockets(widgets->PlugBox,widgets->LeftBox,widgets->RightBox,main_config.socket_id,main_config.load_socket_id,main_config.save_socket_id);
-
+ yon_window_config_setup(GTK_WINDOW(widgets->Window));
+ yon_window_config_load(config_path);
GtkCssProvider *css=gtk_css_provider_new();
- gtk_css_provider_load_from_path(css,CssPath,NULL);
+ gtk_css_provider_load_from_resource(css,CssPath);
gtk_style_context_add_provider_for_screen(gdk_screen_get_default(),
- GTK_STYLE_PROVIDER(css),
- -1);
+ GTK_STYLE_PROVIDER(css),
+ -1);
+
+ event_all(widgets);
+ main_event(widgets);
gtk_main();
-}
-
+ philos_free_string_array(&array_size_pow, size_array_size_pow);
+}
\ No newline at end of file
diff --git a/source/ubl-settings-resourcequota.h b/source/ubl-settings-resourcequota.h
index 57a56b5..ab3726e 100755
--- a/source/ubl-settings-resourcequota.h
+++ b/source/ubl-settings-resourcequota.h
@@ -14,32 +14,41 @@
#include "filters.h"
#include "view_edit.h"
#include "my_device.h"
-
-
+#include "philos_utils.h"
#ifdef WEBKIT_FOUND
- #include
-#endif
+#include
+#endif
#include "ubl-strings.h"
-
+#define config_path yon_char_unite("/home/",yon_ubl_root_user_get(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL)
#define WIKI_LINK "https://wiki.ublinux.ru/ru/Программное_обеспечение/Программы_и_утилиты/Все/ubl-settings-resourcequota"
#define _(String) gettext(String)
-#define glade_path "/usr/share/ubl-settings-resourcequota/ui/ubl-settings-resourcequota.glade"
-#define banner_path "/usr/share/ubl-settings-resourcequota/images/ubl-settings-resourcequota-banner.png"
-#define CssPath "/usr/share/ubl-settings-resourcequota/css/ubl-settings-resourcequota.css"
+#define glade_path "/com/ublinux/ui/ubl-settings-resourcequota.glade"
+#define banner_path "/com/ublinux/images/ubl-settings-resourcequota-banner.png"
+#define CssPath "/com/ublinux/css/ubl-settings-resourcequota.css"
-#define LocalePath "/usr/share/locale"
+#define LocalePath "/usr/share/locale"
#define LocaleName "ubl-settings-resourcequota"
-#define CMD_LOAD_GLOBAL "ubconfig --default --source global get security"
-#define CMD_LOAD_SYSTEM "ubconfig --default --source system get security"
-typedef char* string;
-string version_application = "1.0";
+
+#define CMD_LOAD_GLOBAL "ubconfig --default --source global get security CGROUP_QUOTA[*]"
+#define CMD_LOAD_SYSTEM "ubconfig --default --source system get security CGROUP_QUOTA[*]"
+#define CMD_SAVE_GLOBAL "ubconfig --default --target global set security"
+#define CMD_SAVE_SYSTEM "ubconfig --default --target system set security"
+#define CMD_ALL_SAVE "ubconfig set security "
+#define CMD_ALL_REMOVE "ubconfig remove security "
+#define CMD_REMOVE_GLOBAL "ubconfig --target global --noexecute remove security "
+#define CMD_REMOVE_SYSTEM "ubconfig --target system remove security "
+#define CMD_GET_SLICE_SERVICE "systemd-cgls --no-page"
+
+typedef char *string;
+string version_application;
static char *local;
-typedef struct {
+typedef struct
+{
int always_open_documentation;
int win_pos_x;
int win_pos_y;
@@ -49,7 +58,7 @@ typedef struct {
int socket_id;
int load_socket_id;
int save_socket_id;
-
+
int lock_help;
int lock_save_local;
int lock_save_global;
@@ -62,30 +71,38 @@ typedef struct {
config_str load_system_key;
config_str load_global_key;
- config_str cfg_gui_key;
render_data status_render;
config_str type_quota;
config_str quota_volume;
- config_str soft_raw_limit;
- config_str hard_raw_limit;
- config_str swap;
- config_str cpu_limit;
- config_str i_o_limit_read;
- config_str i_o_limit_write;
-
- int* type_quota_size;
- int* quota_volume_size;
- int* soft_raw_limit_size;
- int* hard_raw_limit_size;
- int* swap_size;
- int* cpu_limit_size;
- int* i_o_limit_read_size;
- int* i_o_limit_write_size;
+ int* soft_raw_limit;
+ int* hard_raw_limit;
+ int* swap;
+ int* cpu_limit;
+ int** i_o_limit_read;
+ int** i_o_limit_write;
+ config_str* disk_read;
+ config_str* disk_write;
+ config_str array_del_line;
+ int size_array_del_line;
+
+ int *type_quota_size;
+ int *quota_volume_size;
+ int *soft_raw_limit_size;
+ int *hard_raw_limit_size;
+ int *swap_size;
+ int *cpu_limit_size;
+ int** i_o_limit_read_size;
+ int** i_o_limit_write_size;
int size_tree_view;
+
+ int flag_set_data;
+ int flag_save;
+ int flag_load; // flag_load = 0 -> system // flag_load = 1 -> global
} config;
-typedef struct {
+typedef struct
+{
GtkWidget *Window;
GtkTreeViewColumn *tvc0;
@@ -96,7 +113,7 @@ typedef struct {
GtkTreeViewColumn *tvc5;
GtkTreeViewColumn *tvc6;
GtkTreeViewColumn *tvc7;
-
+ GtkWidget *scrollDispatcher;
GtkWidget *btnDelQuotas;
GtkWidget *cbtMainInfoLevel2;
GtkWidget *cbtMainInfo;
@@ -142,8 +159,8 @@ typedef struct {
GtkWidget *AboutMenuItem;
} main_window;
-
-typedef struct {
+typedef struct
+{
GtkWidget *Window;
GtkWidget *HatText;
@@ -153,7 +170,7 @@ typedef struct {
GtkWidget *CloseButton;
GtkWidget *AcceptButton;
-
+
} documentation_confirmation_window;
main_window *setup_window();
@@ -179,8 +196,25 @@ void tree_view_del_line();
void main_fill_tree_view_after_remove();
void load_system_cfg();
void load_global_cfg();
-void template_cfg(char* cmd);
-void str_split_value(char* values, int index);
-void set_pow_size(char* str_find, int* array_size, char** array_data, int index);
-void str_split_key(char* value, int index);
-void fill_tree_view(int start, int size);
\ No newline at end of file
+void template_load_cfg(char *cmd);
+int template_format_str_save(char* source_set_cmd, char* source_remove_cmd);
+void str_split_value(char *values, int index);
+void set_size_memory_integer_device(char* str_find, int** array_data, int index);
+void set_size_memory_integer(char* str_find, int** array_data, int index);
+void set_size_memory_integer_char(char* str_find, char*** array_data, int index);
+void set_pow_size_memory(char* str_find, int** array_size, int index);
+void str_split_key(char *source_value, int index);
+void fill_tree_view(int start, int size, int flag_gui_add);
+void clear_array();
+void init_cfg_array(int index);
+void wrapper_template_save(char *check_flag);
+void wrapper_system_save();
+void wrapper_global_save();
+void wrapper_all_save();
+char* template_format_str_remove_save(char* source_remove_cmd);
+char* template_format_str_set_save(char* source_set_cmd);
+char* save_format_key(int index);
+void get_param_io_limit(char** arr_values, int index_start, int size, int index_n1, char *key_find);
+char* add_io_str_format_ubconfig(char* key, int** i_o_limit, int** i_o_limit_size, char*** disk_read, int index);
+char* format_io_limit_in_tree_view(config_str* disk, int** i_o_limit, int** i_o_limit_size, int index);
+gboolean select_page_notebook(GtkNotebook* self, gboolean object, gpointer user_data);
\ No newline at end of file
diff --git a/source/ubl-strings.h b/source/ubl-strings.h
index 2d732c4..13a9fa0 100644
--- a/source/ubl-strings.h
+++ b/source/ubl-strings.h
@@ -1,6 +1,6 @@
#define VERSION_LABEL yon_char_unite(_("Version:")," ",version_application,"\n",NULL)
#define HELP_LABEL yon_char_unite(_("ubl-settings-resourcequota version:")," ", version_application,"\n",_("CPU and RAM quotas settings"),"\n",_("Usage:"), " ubl-settings-resourcequota ",_("[OPTIONS]"),"\n",_("Options:"),"\n\t--help, -h\t\t\t",_("Show this help"),"\n\t--version, -V\t\t\t",_("Show package version"),"\n\t--lock-help\t\t\t",_("Lock this help menu"),"\n\t--lock-save\t\t\t",_("Lock configuration saving"),"\n\t--lock-save-local\t\t",_("Lock local configration saving"),"\n\t--lock-save-global\t\t",_("Lock global configration saving"),"\n\t--lock-load-global\t\t",_("Lock global configration loading"),"\n",NULL)
-
+#define ROOT_WARNING_LABEL _("Warning! Application was launched without root - root-dependent actions are locked")
#define TITLE_LABEL _("CPU and RAM quotas")
#define TITLE_INFO_LABEL _("System resource quota settings management")
@@ -28,6 +28,11 @@
#define STR_PROCESS _("Process")
#define STR_SLICE _("Slice")
+#define STR_KB _("Kb")
+#define STR_MB _("Mb")
+#define STR_GB _("Gb")
+#define STR_TB _("Tb")
+
#define GLOBAL_LOAD_SUCCESS _("Global configuration loading succseeded.")
#define LOCAL_LOAD_SUCCESS _("Local configuration loading succseeded.")
@@ -36,4 +41,8 @@
#define LOCAL_SAVE_SUCCESS _("Local configuration saving succseeded.")
#define STR_DEL_TABLE _("Quota deleted")
#define STR_NO_SELECT_TABLE _("Quota deleted")
-#define STR_QUOTAS_ADD _("Quota deleted")
\ No newline at end of file
+#define STR_QUOTAS_ADD _("Quota deleted")
+#define ALL_SAVE_SUCCESS _("Save configuration")
+#define MESS_NOTHING_SAVE _("Nothing to save!")
+#define LOCAL_SAVE_SUCCESS_LABEL _("Local configuration saving succseeded.")
+#define LOAD_FAILED_LABEL _("Config loading failed")
\ No newline at end of file
diff --git a/source/ubl-utils.c b/source/ubl-utils.c
index dd61852..4def2f6 100644
--- a/source/ubl-utils.c
+++ b/source/ubl-utils.c
@@ -2,11 +2,13 @@
// dictionary functions
-/**[EN]
- * yon_dictionary_create_empty():
+/**yon_dictionary_create_empty():
+ * [EN]
* Creates and returns empty dictionary
+ * [RU]
+ * Создаёт и возвращает пустой словарь.
*/
-dictionary *yon_dictionary_create_empty()
+dictionary *yon_dictionary_new()
{
dictionary *dict = malloc(sizeof(dictionary));
dict->data = NULL;
@@ -18,34 +20,105 @@ dictionary *yon_dictionary_create_empty()
return dict;
}
+/**yon_dictionary_copy_deep(dictionary *dict)
+ * [EN]
+ *
+ * [RU]
+ * Создаёт и возвращает копию элемента словаря [dict]
+*/
+dictionary *yon_dictinoary_copy(dictionary *dict){
+ dictionary *dct = yon_dictionary_new_with_data(dict->key,dict->data);
+ dct->data_type= dict->data_type;
+}
+
+/**yon_dictionary_copy_deep(dictionary *dict)
+ * [EN]
+ *
+ * [RU]
+ * Создаёт полную копию словаря [dict] и возвращает первый элемент
+*/
+dictionary *yon_dictionary_copy_deep(dictionary *dict){
+ dictionary *dct = NULL;
+ dictionary *newone=NULL;
+ for_dictionaries(dct,dict){
+ yon_dictionary_add_or_create_if_exists_with_data(newone,dct->key,dct->data);
+ newone->data_type=dct->data_type;
+ }
+ return newone->first;
+}
+
+int yon_dictionary_set_data(dictionary *dict, void *data){
+ dict->data=data;
+}
+
+int yon_dictionary_set_key(dictionary *dict, char *key){
+ dict->key=key;
+}
+
+int yon_dictionary_set(dictionary *dict, char *key, void *data){
+ dict->key=key;
+ dict->data=data;
+}
+
+int yon_dictionary_empty(dictionary *dict){
+ dict->data=NULL;
+ dict->data_type=DICTIONARY_OTHER_TYPE;
+}
+
+/**yon_dictionary_switch_to_last(dictionary **dict)
+ * [EN]
+ *
+ * [RU]
+ * Переключает словарь [dict] на последний элемент.
+*/
void yon_dictionary_switch_to_last(dictionary **dict)
{
- if ((*dict)->next != NULL)
- for ((*dict) = (*dict)->first; (*dict)->next != NULL; (*dict) = (*dict)->next)
- {
- }
+ dictionary *dct=NULL, *dact=*dict;
+ for_dictionaries(dct,dact);
}
-dictionary *yon_dictionary_create_conneced(dictionary *targetdict)
+/**yon_dictionary_create_conneced(dictionary *targetdict)
+ * [EN]
+ *
+ * [RU]
+ * Создаёт новый элемент словаря [targetdict]
+*/
+dictionary *yon_dictionary_append(dictionary *targetdict)
{
targetdict = yon_dictionary_get_last(targetdict);
- targetdict->next = yon_dictionary_create_empty();
+ targetdict->next = yon_dictionary_new();
targetdict->next->prev = targetdict;
targetdict->next->first = targetdict->first;
targetdict->next->data_type = DICTIONARY_OTHER_TYPE;
return targetdict->next;
}
+/**yon_dictionary_get_last(dictionary *dict)
+ * [EN]
+ *
+ * [RU]
+ * Возвращает последний элемент словаря [dict].
+ * В отличае от yon_dictionary_switch_to_last()
+ * словарь [dict] остаётся на прежнем элементе.
+*/
dictionary *yon_dictionary_get_last(dictionary *dict)
{
- dictionary *dct = NULL;
- for (dct = dict->first; dct->next != NULL; dct = dct->next)
- {
- }
- return dct;
+ if (dict->next){
+ dictionary *dct = NULL;
+ for_dictionaries(dct,dict);
+ return dct;
+ } else return dict;
}
-dictionary *yon_dictionary_switch_places(dictionary *dict, int aim)
+/**yon_dictionary_switch_places(dictionary *dict, int aim)
+ * [EN]
+ *
+ * [RU]
+ * Меняет элемент словаря [dict] местами с другим элементом.
+ * если [aim]<0 элемент меняется местами с левым элементом;
+ * если [aim]>0 элемент меняется местами с правым элементом;
+*/
+dictionary *yon_dictionary_swap(dictionary *dict, int aim)
{
if (aim < 0)
{
@@ -146,6 +219,13 @@ dictionary *yon_dictionary_switch_places(dictionary *dict, int aim)
}
}
+/**yon_dictionary_make_first(dictionary *dict)
+ * [EN]
+ *
+ * [RU]
+ * Устанавливает указатель первого элемента словаря [dict]
+ * на текущий элемент. Не использовать.
+*/
void yon_dictionary_make_first(dictionary *dict)
{
for (dictionary *dct = dict->first; dct != NULL; dct = dct->next)
@@ -154,6 +234,12 @@ void yon_dictionary_make_first(dictionary *dict)
}
}
+/**yon_dictionary_make_nth(dictionary *dict, int nth)
+ * [EN]
+ *
+ * [RU]
+ * Перемещает элемент словаря [dict] на позицию [nth].
+*/
void yon_dictionary_make_nth(dictionary *dict, int nth)
{
dictionary *dct = dict->first;
@@ -172,9 +258,15 @@ void yon_dictionary_make_nth(dictionary *dict, int nth)
dct->prev = dict;
}
-dictionary *yon_dictionary_create_with_data(char *key, void *data)
+/**yon_dictionary_create_with_data(char *key, void *data)
+ * [EN]
+ *
+ * [RU]
+ * Создаёт новый словарь с ключом [key] и указателем на данные [data]
+*/
+dictionary *yon_dictionary_new_with_data(char *key, void *data)
{
- dictionary *dct = yon_dictionary_create_empty();
+ dictionary *dct = yon_dictionary_new();
dct->key = yon_char_new(key);
dct->data = data;
dct->data_type = DICTIONARY_OTHER_TYPE;
@@ -199,15 +291,28 @@ void *yon_dictionary_free_all(dictionary *dictionary_to_free,void (*data_manipul
return NULL;
}
-dictionary *yon_dictionary_create_with_data_connected(dictionary *dict, char *key, void *data)
+/**yon_dictionary_create_with_data_connected(dictionary *dict, char *key, void *data)
+ * [EN]
+ *
+ * [RU]
+ * Создаёт новый элемент словаря, присоединяемый в конец словаря [dict]
+ * с ключом [key] и указателем на данные [data]
+*/
+dictionary *yon_dictionary_append_with_data(dictionary *dict, char *key, void *data)
{
- dictionary *dct = yon_dictionary_create_conneced(dict);
+ dictionary *dct = yon_dictionary_append(dict);
dct->key = yon_char_new(key);
dct->data = data;
dct->data_type = DICTIONARY_OTHER_TYPE;
return dct;
}
+/**yon_dictionary_connect(dictionary *old, dictionary *toconnect)
+ * [EN]
+ *
+ * [RU]
+ * Присоединяет словарь [toconnect] в конец словаря [old].
+*/
dictionary *yon_dictionary_connect(dictionary *old, dictionary *toconnect)
{
dictionary *dict = yon_dictionary_get_last(old);
@@ -217,7 +322,14 @@ dictionary *yon_dictionary_connect(dictionary *old, dictionary *toconnect)
return toconnect;
}
-dictionary *yon_dictionary_find(dictionary **dict, char *key)
+/**yon_dictionary_get(dictionary **dict, char *key)
+ * [EN]
+ *
+ * [RU]
+ * Возвращает элемент словаря [dict] с ключом [key].
+ * Если такого элемента не было обнаружено, возвращается NULL
+*/
+dictionary *yon_dictionary_get(dictionary **dict, char *key)
{
dictionary *dct = *dict;
for (dictionary *pointer = dct->first; pointer != NULL; pointer = pointer->next)
@@ -231,6 +343,12 @@ dictionary *yon_dictionary_find(dictionary **dict, char *key)
return NULL;
}
+/**yon_dictionary_rip(dictionary *dict)
+ * [EN]
+ *
+ * [RU]
+ * Вырезает элемент из словаря и возвращает вырезанный элемент.
+*/
dictionary *yon_dictionary_rip(dictionary *dict)
{
if (!dict->next&&!dict->prev) return NULL;
@@ -266,6 +384,12 @@ dictionary *yon_dictionary_rip(dictionary *dict)
}
}
+/**yon_dictionary_get_nth(dictionary *dict, int place)
+ * [EN]
+ *
+ * [RU]
+ * Возвращает [place]-й элемент словаря [dict]
+*/
dictionary *yon_dictionary_get_nth(dictionary *dict, int place)
{
if (dict){
@@ -289,7 +413,7 @@ dictionary *yon_dictionary_get_nth(dictionary *dict, int place)
*
* creates new char string by combining two char strings.
*/
-char *yon_char_get_augumented(char *source, char *append)
+char *yon_char_append(char *source, char *append)
{
if (source && append)
{
@@ -331,15 +455,15 @@ char *yon_char_unite(char *source, ...){
va_start(arglist,source);
unite_char = va_arg(arglist,char*);
while(unite_char){
- new_char = yon_char_get_augumented(new_char,unite_char);
+ new_char = yon_char_append(new_char,unite_char);
unite_char = va_arg(arglist,char*);
}
va_end(arglist);
return new_char;
}
-/**[EN]
- *
+/**yon_cut(char *source, int size, int startpos)
+ * [EN]
* cuts source string by size length from startpos position.
*/
char *yon_cut(char *source, int size, int startpos)
@@ -350,8 +474,9 @@ char *yon_cut(char *source, int size, int startpos)
memcpy(cut, source + startpos, size);
return cut;
}
-/**[EN]
- *
+
+/**yon_char_divide(char *source, int dividepos)
+ * [EN]
* divides source string in dividepos position,
* returning left part of divided string and
* inserting right part to source string.
@@ -369,129 +494,6 @@ char *yon_char_divide(char *source, int dividepos)
return cut;
}
-config_str philos_list_user(int* size) {
- char* str_uid_min = "UID_MIN";
- char* str_uid_max = "UID_MAX";
- unsigned short uid_min = philos_read_uid_min_max(file_source_login_min_max, str_uid_min);
- unsigned short uid_max = philos_read_uid_min_max(file_source_login_min_max, str_uid_max);
- config_str str_users = malloc(1);
- while (1) {
- errno = 0; // so we can distinguish errors from no more entries
- struct passwd* entry = getpwent();
- if (!entry) {
- if (errno) {
- return str_users;
- }
- break;
- }
- if ((entry->pw_uid >= uid_min && entry->pw_uid < uid_max) || entry->pw_uid == 0) {
- str_users = yon_char_parsed_append(str_users, size, entry->pw_name);
- }
- }
- endpwent();
- return str_users;
-}
-
-char* philos_str_size_pow_byte(GtkWidget *combo_box_text) {
- int menu_id = gtk_combo_box_get_active(GTK_COMBO_BOX(combo_box_text));
- if (menu_id == 0) {
- return "K";
- }
- else if (menu_id == 1) {
- return "M";
- }
- else if (menu_id == 2) {
- return "G";
- }
- else if (menu_id == 3) {
- return "T";
- }
- else {
- return " ";
- }
-}
-
-config_str philos_list_group(int* size) {
- char* str_uid_min = "UID_MIN";
- char* str_uid_max = "UID_MAX";
- unsigned short uid_min = philos_read_uid_min_max(file_source_login_min_max, str_uid_min);
- unsigned short uid_max = philos_read_uid_min_max(file_source_login_min_max, str_uid_max);
- config_str str_users = malloc(1);
- while (1) {
- errno = 0; // so we can distinguish errors from no more entries
- struct passwd* entry = getpwent();
- if (!entry) {
- if (errno) {
- return str_users;
- }
- break;
- }
- if ((entry->pw_uid >= uid_min && entry->pw_uid < uid_max) || entry->pw_uid == 0) {
- str_users = yon_char_parsed_append(str_users, size, entry->pw_name);
- }
- }
- endpwent();
- return str_users;
-}
-
-unsigned short philos_read_uid_min_max(char* filename, char* search) {
- int uid = 0;
- char* remove_tab = "\t";
- char* remove_space = " ";
- char* search_uid_min = "UID_MIN";
- int buff_size = 255;
- char* line = g_malloc0(buff_size);
- char* search_true = yon_char_get_augumented("SYS_", search);
- FILE *fp = fopen(filename, "r");
- if(fp) {
- while((fgets(line, buff_size, fp)) != NULL) {
- try{
- if (yon_char_find_count(line, search) != 0 && yon_char_find_count(line, search_true) == 0) {
- line = philos_str_remove(line, search);
- line = philos_str_remove(line, remove_space);
- line = philos_str_remove(line, remove_tab);
- uid = atoi(line);
-
- }
- }
- catch (...) {
- if (yon_char_find_count(search, search_uid_min) != 0){
- uid = 1000;
- }
- else{
- uid = 65534;
- }
- }
- }
- }
- else{
- if (yon_char_find_count(search, search_uid_min) != 0) {
- uid = 1000;
- }
- else{
- uid = 65534;
- }
- }
- fclose(fp);
- free(line);
- free(search_true);
- return uid;
-
-}
-
-char* philos_str_remove(char *str, const char *sub) {
- size_t len = strlen(sub);
- if (len > 0) {
- char *p = str;
- size_t size = 0;
- while ((p = strstr(p, sub)) != NULL) {
- size = (size == 0) ? (p - str) + strlen(p + len) + 1 : size - len;
- memmove(p, p + len, size - (p - str));
- }
- }
- return str;
-}
-
int yon_char_find_count(char *source, char *find){
char *working_string=yon_char_new(source);
int i=0;
@@ -505,7 +507,8 @@ int yon_char_find_count(char *source, char *find){
return i;
}
-/**[EN]
+/**yon_char_divide_search(char *source, char *dividepos, int delete_divider)
+ * [EN]
* char *yon_char_divide_search(char *source, char *dividepos, int delete_divider)
* searches string [dividepos] in [source] string and divides it,
* returning left part of divided string and
@@ -537,7 +540,8 @@ char *yon_char_divide_search(char *source, char *dividepos, int delete_divider)
}
}
-/**[EN]
+/**yon_char_from_int(int int_to_convert)
+ * [EN]
* char *yon_char_from_int(int int_to_convert)
* converts int to char*.
*
@@ -549,15 +553,21 @@ char *yon_char_from_int(int int_to_convert)
{
int i = 1;
float convert_check = (float)int_to_convert;
- for (i = 1; convert_check > 10; i++)
+ for (i = 1; convert_check >= 10; i++)
{
convert_check = convert_check / 10;
}
- char *ch = malloc(i * sizeof(char) + 1);
+ char *ch = g_malloc0(i * sizeof(char) + 1);
sprintf(ch, "%d", int_to_convert);
return ch;
}
+/**yon_char_replace(char *source, char *find, char*replace)
+ * [EN]
+ *
+ * [RU]
+ * Заменяет в строке [source] все вхождения строки [find] на [replace]
+*/
char *yon_char_replace(char *source, char *find, char*replace){
char *final=NULL;
char *temp=NULL;
@@ -566,16 +576,13 @@ char *yon_char_replace(char *source, char *find, char*replace){
temp=malloc(strlen(source)-strlen(final));
memset(temp,0,strlen(source)-strlen(final)+strlen(replace));
memcpy(temp,source,strlen(source)-strlen(final));
- temp=yon_char_get_augumented(temp,replace);
- source=yon_char_get_augumented(temp,final+1);
+ temp=yon_char_append(temp,replace);
+ source=yon_char_append(temp,final+1);
}
return source;
}
}
-void philos_split_size_memory(char* str_value, int* size, char* pow_memory) {
- // pow_memory = yon_char_new(str_value);
- (*size) = atoi(yon_char_divide_search(pow_memory, " ", -1));
-}
+
/**[EN]
* char **yon_char_parse(char *parameters, int *size, char *divider)
* Parses string [parameters], divided by [divider],
@@ -601,26 +608,16 @@ char **yon_char_parse(char *parameters, int *size, char *divider){
*size=i-1;
return string;
-
-
}
-char** philos_str_split(char *parameters, int *size, char *divider) {
- char** array_split = NULL;
- char* ch= NULL;
- ch = strtok(parameters, divider);
- if (ch != NULL) {
- array_split = yon_char_parsed_append(array_split, size, ch);
- while (ch != NULL) {
- ch = strtok(NULL, divider);
- array_split = yon_char_parsed_append(array_split, size, ch);
- }
- }
- (*size) -= 1;
- return array_split;
-}
-
-char **yon_char_parsed_shrink(char **char_string, int *size, int item_to_delete){
+/**yon_char_parsed_rip(char **char_string, int *size, int item_to_delete)
+ * [EN]
+ *
+ * [RU]
+ * Удаляет элемент [item_to_delete] из массива строк [char_string], размера [size]
+ * Возвращает получившийся массив, в [size] загружается размер нового массива.
+*/
+char **yon_char_parsed_rip(char **char_string, int *size, int item_to_delete){
char **new_char_parsed=NULL;
new_char_parsed=malloc(sizeof(char*)*((*size)-1));
int flag = 0;
@@ -639,22 +636,33 @@ char **yon_char_parsed_shrink(char **char_string, int *size, int item_to_delete)
return new_char_parsed;
}
-/**[EN]
- *
+/**yon_char_parsed_check_exist(char **parameters, int size, char *param)
+ * [EN]
* Checks if [parameters] string array of length [size]
* has [param] element;
+ * [RU]
+ * Проверяет есть ли в массиве строк [parameters], размера [size]
+ * элемент [param]
*/
int yon_char_parsed_check_exist(char **parameters, int size, char *param){
for (int i=0;id_name);
+ char *path = yon_char_append(DesktopPath, de->d_name);
file = fopen(path, "r");
if (strlen(de->d_name) > 9)
{
@@ -822,15 +868,197 @@ apps *yon_apps_get_by_name(apps *applist, char *name, int size)
return NULL;
};
-config_str yon_config_load(char *command, int *str_len)
-{
+//config functions
+
+/**yon_config_load_register(char *command)
+ * [EN]
+ *
+ * [RU]
+ * Выполняет команду [command].
+ * Полученные данные парсятся и регистрируются в конфиг.
+*/
+int yon_config_load_register(char *command){
+ if (__yon__config__strings){
+ __yon__config__strings = yon_dictionary_free_all(__yon__config__strings,NULL);
+ }
FILE *output = popen(command, "r");
char **output_strings = NULL;
output_strings = malloc(sizeof(char));
int i = 0;
- char str[1000];
- memset(str, 0, 1000);
- while (fgets(str, 1000, output))
+ char str[4096];
+ memset(str, 0, 4096);
+ while (fgets(str, 4096, output))
+ {
+ if (strcmp(str, "") != 0&& strcmp(str,"(null)\n")!=0)
+ {
+ char *key = yon_char_divide_search(str,"=",-1);
+ yon_dictionary_add_or_create_if_exists_with_data(__yon__config__strings,key,str);
+ __yon__config__strings->data_type=DICTIONARY_CHAR_TYPE;
+ }
+ }
+ check_config
+ return 0;
+ else return 1;
+}
+
+/**yon_config_remove_by_key(char *key)
+ * [EN]
+ *
+ * [RU]
+ * Удаляет параметр конфига по ключу [key]
+*/
+int yon_config_remove_by_key(char *key){
+ check_config{
+ dictionary *dict = yon_dictionary_get(&__yon__config__strings,key);
+ if (dict){
+ yon_dictionary_rip(dict);
+ return 1;
+ }else return 0;
+ }
+ return 0;
+}
+
+/**yon_config_remove_by_data(void *data)
+ * [EN]
+ *
+ * [RU]
+ * Производит поиск по конфигу на наличие параметра со значением [data] и удаляет найденное значение из конфига.
+*/
+int yon_config_remove_by_data(void *data){
+ check_config{
+ dictionary *dict = NULL;
+ for_dictionaries(dict,__yon__config__strings){
+ if (dict->data==data){
+ yon_dictionary_rip(dict);
+ return 1;
+ }
+ }
+ return 0;
+ }
+ return 0;
+}
+
+/**yon_config_remove_element(char *key, char *deleted)
+ * [EN]
+ *
+ * [RU]
+ * Удаляет элемент [deleted] из массива параметров с ключом [key]
+*/
+int yon_config_remove_element(char *key, char *deleted){
+ check_config{
+ dictionary *dict = yon_dictionary_get(&__yon__config__strings,key);
+ char *data = (char*)dict->data;
+ char *found = strstr(data,deleted);
+ int size=strlen(data)-strlen(found)+1;
+ char *new_data = malloc(size);
+ memset(new_data,0,size);
+ if (strlen(found)!=strlen(deleted)){
+ memcpy(new_data,data,size-1);
+ new_data = yon_char_append(new_data,found+strlen(deleted)+1);
+ } else {
+ memcpy(new_data,data,size-2);
+ new_data = yon_char_append(new_data,found+strlen(deleted));
+ }
+ dict->data=(void*)(new_data);
+ free(data);
+ dict->flag1=1;
+ return 1;
+ } else return 0;
+}
+
+/**yon_config_get_by_key(char *key)
+ * [EN]
+ *
+ * [RU]
+ * Возвращает значение параметра конфига с ключом [key]
+*/
+void *yon_config_get_by_key(char *key){
+ check_config{
+ dictionary *dict = NULL;
+ for_dictionaries(dict, __yon__config__strings){
+ if (strcmp(dict->key,key)==0){
+ return dict->data;
+ }
+ }
+ }
+ return NULL;
+}
+
+/**yon_config_get_key_by_data(char *data)
+ * [EN]
+ *
+ * [RU]
+ * Возвращает ключ параметра конфига со значением [data].
+ * Если параметр с таким значением не найден, возвращается NULL
+*/
+char *yon_config_get_key_by_data(char *data){
+ check_config{
+ dictionary *dict = NULL;
+ for_dictionaries(dict, __yon__config__strings){
+ if (strcmp(((char*)dict->data),data)==0){
+ return dict->key;
+ }
+ }
+ }
+ return NULL;
+}
+
+/**yon_config_set(char *key, void *data)
+ * [EN]
+ *
+ * [RU]
+ * Производит поиск по конфигу и заменяет значение параметра с ключом [key] на новое значение [data];
+*/
+int yon_config_set(char *key, void *data){
+ check_config{
+ dictionary *dict = yon_dictionary_get(&__yon__config__strings,key);
+ dict->data=data;
+ return 1;
+ } else return 0;
+}
+
+/**yon_config_clean()
+ * [EN]
+ * Erase all parameters from config;
+ * [RU]
+ * Удаляет все параметры из конфига;
+*/
+int yon_config_clean(){
+ check_config{
+ __yon__config__strings = yon_dictionary_free_all(__yon__config__strings, NULL);
+ return 1;
+ }
+ else return 0;
+}
+
+/**yon_config_register(char *key, void *data)
+ * [EN]
+ *
+ * [RU]
+ * Регистрирует новый параметр конфига.
+ * [key] - ключ параметра;
+ * [data] - значение параметра;
+*/
+void yon_config_register(char *key, void *data){
+ yon_dictionary_add_or_create_if_exists_with_data(__yon__config__strings,key,data);
+ __yon__config__strings->data_type=DICTIONARY_CHAR_TYPE;
+}
+
+/**yon_config_load(char *command, int *str_len)
+ * [EN]
+ *
+ * [RU]
+ * Выполняет команду [command] и возвращает распаршеный результат выполнения команды.
+ * В [str_len] возвращается длина возвращаемого массива
+*/
+config_str yon_config_load(char *command, int *str_len){
+ FILE *output = popen(command, "r");
+ char **output_strings = NULL;
+ output_strings = malloc(sizeof(char));
+ int i = 0;
+ char str[4096];
+ memset(str, 0, 4096);
+ while (fgets(str, 4096, output))
{
if (strcmp(str, "") != 0)
{
@@ -838,7 +1066,7 @@ config_str yon_config_load(char *command, int *str_len)
// printf("%s\n", str);
output_strings[i] = NULL;
output_strings[i] = yon_char_new(str);
- memset(str, 0, 1000);
+ memset(str, 0, 4096);
i++;
}
}
@@ -851,22 +1079,66 @@ config_str yon_config_load(char *command, int *str_len)
}
}
-/**[EN]
- * int yon_config_save(char *command)
+/**int yon_config_save(char *command)
+ * [EN]
* Saves config with [command]
* [RU]
+ * Выполняет команду [command], добавляя в конец все записи конфига в таком виде:
+ * [ПАРАМЕТР1]="[значения1]" [ПАРАМЕТР2]="[значения2]"
*/
-int yon_config_save(char *command)
-{
- FILE *output = popen(command, "r");
- return 1;
+int yon_config_save(char *command){
+ check_config{
+ dictionary *dict = NULL;
+ for_dictionaries(dict,__yon__config__strings){
+ command = yon_char_unite(command, " ", yon_dictionary_get_data(dict,char*), NULL);
+ }
+ if (popen(command, "r")) return 1;
+ else return 0;
+ } else return 0;
}
-/**[EN]
- * char *yon_config_get_parameter(config parameters, int size, char *param)
- * Gets parameter from parameter list;
+/**yon_config_get_all(int *size)
+ * [EN]
*
+ * [RU]
+ * Возвращает массив со всеми параметрами конфига, оканчивающаяся NULL
+ * [size] - указатель, в который выгружается длина массива
+*/
+config_str yon_config_get_all(int *size){
+ check_config{
+ *size = 1;
+ config_str conf = NULL;
+ dictionary *dict = NULL;
+ for_dictionaries(dict,__yon__config__strings){
+ conf = yon_remalloc(conf,sizeof(char*)*(*size));
+ conf[(*size)-1] = yon_char_unite(dict->key,"=",(char*)dict->data,NULL);
+ size++;
+ }
+ conf = yon_remalloc(conf,sizeof(char*)*(*size+1));
+ conf[*size] = NULL;
+ return conf;
+ } else return NULL;
+}
+
+/**[EN]
+ * int yon_config_save(char *command)
+ * Saves config with [command]
+ * [RU]
+ * Выполняет команду [command]
+*/
+// int yon_config_save(char *command)
+// {
+// FILE *output = popen(command, "r");
+// return 1;
+// }
+
+/**char *yon_config_get_parameter(config parameters, int size, char *param)
+ * [EN]
+ * Gets parameter [param] from parameter list [parameters] of size [size];
+ * or NULL if nothing were found
* [RU]
+ * Возвращает параметр [param] из массива строк [parameters] размером [size]
+ * или NULL если такой не был найден
*/
char *yon_config_get_parameter(config_str parameters, int size, char *param)
{
@@ -893,92 +1165,36 @@ char *yon_config_get_parameter(config_str parameters, int size, char *param)
return NULL;
}
-/**[EN]
- * Parses, modifies and connects string to use it as one of arguments,
- * sended to ubconfig.
- *
- * [RU]
- */
-char *yon_config_make_save_parameter_with_multiple_arguments(char *parameter_string, char *config_parameter, char *divider){
- char *final="";
- int done=0;
- char *cur=yon_char_new(parameter_string);
- yon_char_divide_search(cur,"=",1);
- char *cur_param=NULL;
- while (cur_param=yon_char_divide_search(cur,",",1)){
- if (done==0){
- final=yon_char_get_augumented(final,yon_char_get_augumented(yon_char_get_augumented(config_parameter,"="), yon_char_get_augumented(cur_param,", ")));
- done=1;
- } else {
- final=yon_char_get_augumented(final,yon_char_get_augumented(yon_char_get_augumented(config_parameter,"+="), yon_char_get_augumented(cur_param,", ")));
- }
- }
- if (cur&&strcmp(cur,"")!=0)
- if (done==0)
- final=yon_char_get_augumented(final,yon_char_get_augumented(yon_char_get_augumented(config_parameter,"="), yon_char_get_augumented(cur,", ")));
- else
- final=yon_char_get_augumented(final,yon_char_get_augumented(yon_char_get_augumented(config_parameter,"+="), yon_char_get_augumented(cur,", ")));
- return final;
-}
-// terminal-using functions
-int yon_launch_app(char *name)
-{
- char *path = name;
- thread_output *thread = malloc(sizeof(thread_output));
- thread->command = path;
- thread->exitcode = malloc(sizeof(int));
- pthread_t thread_id;
- pthread_create(&thread_id, NULL, (void *)yon_launch, thread);
- return *thread->exitcode;
-};
+// terminal-using functions
+/**yon_launch_app_with_arguments(char *name, char *args)
+ * [EN]
+ * Execute [command] in separate thread;
+ * [RU]
+ * Выполнить команду [command] в отдельном потоке;
+*/
int yon_launch_app_with_arguments(char *name, char *args)
{
- char *path = yon_char_get_augumented("/usr/bin/", name);
- path = yon_char_get_augumented(path, " ");
- path = yon_char_get_augumented(path, args);
+ char *path = yon_char_unite("/usr/bin/", name, " ", args,NULL);
pthread_t thread_id;
- thread_output *thread = malloc(sizeof(thread_output));
- thread->command = path;
- thread->exitcode = malloc(sizeof(int));
- pthread_create(&thread_id, NULL, (void *)yon_launch, thread);
- return *thread->exitcode;
+ char *command = NULL;
+ command = path;
+ pthread_create(&thread_id, NULL, (void *)yon_launch, command);
};
-int yon_launch(thread_output *thread)
+/**yon_launch(char *command)
+ * [EN]
+ * Execute command [command]
+ * [RU]
+ * Выполнить команду [command]
+*/
+void yon_launch(char *command)
{
- int a = 0;
- a = system(thread->command);
- *thread->exitcode = a;
- return *thread->exitcode;
+ system(command);
}
-int* philos_int_append(int* array, int* size, int value) {
- if (array == NULL) {
- array = (int*) malloc((*size+1) * sizeof(int));
- }
- else {
- array = (int*) realloc(array, ((*size)+1)*sizeof(int));
- }
- array[(*size)] = value;
- (*size)++;
- return array;
-
-}
-
-int* remove_element_int_array(int* array, int* size, int index) {
- int* temp = malloc(((*size) - 1) * sizeof(int));
- if (index != 0)
- memcpy(temp, array, index * sizeof(int));
-
- if (index != ((*size) - 1))
- memcpy(temp+index, array+index+1, ((*size) - index - 1) * sizeof(int));
-
- free (array);
- return temp;
-}
// Gtk functions
@@ -1007,7 +1223,63 @@ static void child_ready(VteTerminal *terminal, GPid pid, GError *error, gpointer
* терминал добавляется в контейнер [place_to_show] виджета,
* после завершения работы терминала вызывается функция [endwork_function] с аргументом [endwork_function_argument].
*/
-void yon_terminal_integrated_launch(GtkWidget *terminal, char* command, void *endwork_function, void* endwork_function_argument){
+void yon_terminal_integrated_launch(GtkWidget *place_to_show, char* command, void *endwork_function, void* endwork_function_argument){
+ char **commands=new_arr(char*,2);
+ gchar **envp = g_get_environ();
+ commands[0]=(gchar *)g_strdup(g_environ_getenv(envp, "SHELL"));
+ commands[1]=NULL;
+ char **env=new_arr(char*,2);
+ env[0]="";
+ env[1]=NULL;
+ GtkWidget *terminal = vte_terminal_new();
+ vte_terminal_set_size(VTE_TERMINAL(terminal),10,15);
+ VtePty *pty = vte_pty_new_sync(VTE_PTY_DEFAULT,NULL,NULL);
+ vte_terminal_set_pty(VTE_TERMINAL(terminal),pty);
+ gtk_container_add(GTK_CONTAINER(place_to_show),terminal);
+ char *install_command=yon_char_unite("tput cup 0 0 && tput ed; ",command," ;exit 0","\n",NULL);
+ printf("%s\n",install_command);
+ if(endwork_function)
+ g_signal_connect(G_OBJECT(terminal), "child-exited", G_CALLBACK(endwork_function), endwork_function_argument);
+ vte_terminal_spawn_async(VTE_TERMINAL(terminal),
+ VTE_PTY_DEFAULT,
+ NULL,
+ commands,
+ NULL,
+ 0,
+ NULL, NULL,
+ NULL,
+ -1,
+ NULL,
+ child_ready,
+ install_command);
+ vte_pty_spawn_async(pty,
+ NULL,
+ commands,
+ NULL,
+ 0,
+ NULL, NULL,
+ NULL,
+ -1,
+ NULL,
+ NULL,
+ NULL);
+ vte_terminal_set_scrollback_lines(VTE_TERMINAL(terminal), -1);
+ vte_terminal_set_scroll_on_output(VTE_TERMINAL(terminal), TRUE);
+ vte_terminal_set_scroll_on_keystroke(VTE_TERMINAL(terminal), TRUE);
+ gtk_widget_show_all(terminal);
+ }
+
+/**yon_terminal_integrated_start(GtkWidget *terminal, char* command, void *endwork_function, void* endwork_function_argument)
+ * [EN]
+ * launches terminal with specific [command],
+ * terminal is shown in [place_to_show] container,
+ * after terminal done its work [endwork_function] is called with [endwork_function_argument] argument.
+ * [RU]
+ * Запускает терминал с командой [command],
+ * терминал добавляется в контейнер [place_to_show] виджета,
+ * после завершения работы терминала вызывается функция [endwork_function] с аргументом [endwork_function_argument].
+*/
+void yon_terminal_integrated_start(GtkWidget *terminal, char* command, void *endwork_function, void* endwork_function_argument){
char **commands=new_arr(char*,2);
gchar **envp = g_get_environ();
commands[0]=(gchar *)g_strdup(g_environ_getenv(envp, "SHELL"));
@@ -1018,7 +1290,7 @@ void yon_terminal_integrated_launch(GtkWidget *terminal, char* command, void *en
vte_terminal_set_size(VTE_TERMINAL(terminal),10,15);
VtePty *pty = vte_pty_new_sync(VTE_PTY_DEFAULT,NULL,NULL);
vte_terminal_set_pty(VTE_TERMINAL(terminal),pty);
- char *install_command=yon_char_unite("tput cup 0 0 && tput ed; ",command,"\n",NULL);
+ char *install_command=yon_char_unite("tput cup 0 0 && tput ed; ",command," ; sleep 5;exit 0","\n",NULL);
if(endwork_function)
g_signal_connect(G_OBJECT(terminal), "child-exited", G_CALLBACK(endwork_function), endwork_function_argument);
vte_terminal_spawn_async(VTE_TERMINAL(terminal),
@@ -1049,29 +1321,126 @@ void yon_terminal_integrated_launch(GtkWidget *terminal, char* command, void *en
vte_terminal_set_scroll_on_keystroke(VTE_TERMINAL(terminal), TRUE);
gtk_widget_show_all(terminal);
}
+#endif
+ // Window config functions
+ #define check_window_config_setup if(__yon_window_config_target_window)
+ struct {
+ int x;
+ int y;
+ int width;
+ int height;
+ int fullscreen;
+ } __yon_main_window_config;
+ static GtkWindow *__yon_window_config_target_window = NULL;
+ static GKeyFile *__yon_window_config_file = NULL;
+ static char *__yon_window_config_path = NULL;
+
+ void yon_window_config_save(){
+ g_key_file_set_integer(__yon_window_config_file,"window","WindowPosX",__yon_main_window_config.x);
+ g_key_file_set_integer(__yon_window_config_file,"window","WindowPosY",__yon_main_window_config.y);
+ g_key_file_set_integer(__yon_window_config_file,"window","WindowWidth",__yon_main_window_config.width);
+ g_key_file_set_integer(__yon_window_config_file,"window","WindowHeight",__yon_main_window_config.height);
+ g_key_file_set_integer(__yon_window_config_file,"window","fullscreen",__yon_main_window_config.fullscreen);
+ g_key_file_save_to_file(__yon_window_config_file,__yon_window_config_path,NULL);
+ }
-char* philos_get_size_bite(GtkWidget* chk_button, GtkWidget* spin, GtkWidget* combo_box_text) {
- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(chk_button))) {
- char* size_prifics = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(combo_box_text));
- int size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spin));
- char* str_size_bute = yon_char_unite(yon_char_from_int(size_bite), " ", size_prifics, NULL);
- return str_size_bute;
+ void yon_get_is_fullscreen(){
+ gtk_window_is_maximized(__yon_window_config_target_window);
+ __yon_main_window_config.fullscreen = gtk_window_is_maximized(__yon_window_config_target_window);
}
- else {
- char* str = (char*)malloc(sizeof(char*)*2);
- str[0] = '-';
- str[1] = '\0';
- return str;
+
+
+ void yon_on_configured_window_destroy(GtkWidget* self,GdkEvent* event){
+ check_window_config_setup{
+ yon_get_is_fullscreen();
+ yon_window_config_save();
+ }
+ gtk_main_quit();
}
-}
-void philos_fill_combo_box_text(GtkWidget *cbt, config_str list_data, int size) {
- for (int index = 0; index < size; index++) {
- gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(cbt), list_data[index]);
+
+ void __yon_window_config_on_resize(){
+ int max=0;
+ max=gtk_window_is_maximized(__yon_window_config_target_window);
+ if(max==0){
+ gtk_window_get_size(__yon_window_config_target_window,&__yon_main_window_config.width,&__yon_main_window_config.height);
+ gtk_window_get_position(__yon_window_config_target_window,&__yon_main_window_config.x,&__yon_main_window_config.y);
+ }
+ }
+
+ void yon_window_config_setup(GtkWindow *window){
+ __yon_window_config_target_window = window;
+ g_signal_connect(G_OBJECT(window),"delete-event",G_CALLBACK(yon_on_configured_window_destroy),NULL);
+ g_signal_connect(G_OBJECT(window),"check-resize"/*"configure-event"*/,G_CALLBACK(__yon_window_config_on_resize),NULL);
+ }
+
+ void _yon_maximize(void *data){
+ g_usleep(G_USEC_PER_SEC/10);
+ if(__yon_main_window_config.fullscreen ==1) gtk_window_maximize(__yon_window_config_target_window);
+ }
+
+ int yon_window_config_load(char *path){
+ __yon_window_config_file = g_key_file_new();
+ __yon_window_config_path=yon_char_new(path);
+ if (!g_key_file_load_from_file(__yon_window_config_file,__yon_window_config_path,G_KEY_FILE_NONE,NULL)){
+ struct stat st;
+ int size;
+ config_str conf = yon_char_parse(yon_char_new(__yon_window_config_path),&size,"/");
+ char *path = yon_char_unite(conf[0],"/",conf[1],"/",conf[2],"/",conf[3],"/",conf[4],"/",NULL);
+ if (stat(path, &st) == -1) {
+ mkdir(path, 0777);
+ }
+ FILE *fp;
+ fp=fopen(__yon_window_config_path,"w");
+ fclose(fp);
+ g_key_file_load_from_file(__yon_window_config_file,__yon_window_config_path,G_KEY_FILE_NONE,NULL);
+ }
+ __yon_main_window_config.x = g_key_file_get_integer(__yon_window_config_file,"window","WindowPosX",NULL);
+ __yon_main_window_config.y = g_key_file_get_integer(__yon_window_config_file,"window","WindowPosY",NULL);
+ __yon_main_window_config.width = g_key_file_get_integer(__yon_window_config_file,"window","WindowWidth",NULL);
+ __yon_main_window_config.height = g_key_file_get_integer(__yon_window_config_file,"window","WindowHeight",NULL);
+ __yon_main_window_config.fullscreen = g_key_file_get_integer(__yon_window_config_file,"window","fullscreen",NULL);
+ if (__yon_main_window_config.width==0) __yon_main_window_config.width=800;
+ if (__yon_main_window_config.height==0) __yon_main_window_config.height=600;
+ gtk_window_resize(__yon_window_config_target_window,__yon_main_window_config.width,__yon_main_window_config.height);
+ gtk_window_move(__yon_window_config_target_window,__yon_main_window_config.x,__yon_main_window_config.y);
+ pthread_t tid;
+ pthread_create(&tid,NULL,(void *)_yon_maximize,NULL);
+ return 1;
}
+
+ void yon_window_config_apply(){
+ dictionary *dict=NULL;
+ gtk_window_move(__yon_window_config_target_window,__yon_main_window_config.x,__yon_main_window_config.y);
+ gtk_window_resize(__yon_window_config_target_window,__yon_main_window_config.width,__yon_main_window_config.height);
+ }
+GtkWidget *yon_ubl_menu_item_about_new(char *buttonname){
+ GtkWidget *menu_item = gtk_menu_item_new();
+ gtk_style_context_add_class(gtk_widget_get_style_context(menu_item),"menuitembottom");
+ GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,0);
+ GtkWidget *label = gtk_label_new(buttonname);
+ GtkWidget *image = gtk_image_new_from_icon_name("dialog-information-symbolic",GTK_ICON_SIZE_BUTTON);
+ gtk_label_set_xalign(GTK_LABEL(label),0.0);
+ gtk_box_pack_start(GTK_BOX(box),image,0,0,5);
+ gtk_box_pack_start(GTK_BOX(box),label,0,0,5);
+ gtk_container_add(GTK_CONTAINER(menu_item),box);
+ gtk_widget_show_all(menu_item);
+ return menu_item;
}
-#endif
-int yon_gtk_combo_box_fill(GtkWidget *combo, config_str parameters,int size){
+GtkWidget *yon_ubl_menu_item_documentation_new(char *buttonname){
+ GtkWidget *menu_item = gtk_menu_item_new();
+ gtk_style_context_add_class(gtk_widget_get_style_context(menu_item),"menuitemtop");
+ GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,0);
+ GtkWidget *label = gtk_label_new(buttonname);
+ GtkWidget *image = gtk_image_new_from_icon_name("dialog-question-symbolic",GTK_ICON_SIZE_BUTTON);
+ gtk_label_set_xalign(GTK_LABEL(label),0.0);
+ gtk_box_pack_start(GTK_BOX(box),image,0,0,5);
+ gtk_box_pack_start(GTK_BOX(box),label,0,0,5);
+ gtk_container_add(GTK_CONTAINER(menu_item),box);
+ gtk_widget_show_all(menu_item);
+ return menu_item;
+}
+int yon_gtk_combo_box_text_fill(GtkWidget *combo, config_str parameters,int size){
if (combo&¶meters){
for (int i=0;ifirst; dct != NULL; dct = dct->next)
- {
- gtk_box_pack_start(GTK_BOX(destination), (GtkWidget *)dct->data, expand, fill, padding);
+/**yon_dictionary_gtk_pack_start_multiple_widgets(GtkBox *destination, gboolean expand, gboolean fill, int padding, ...)
+ * [EN]
+ *
+ * [RU]
+ * Добвляет в [destination] все виджеты, прописанные после [padding]
+ * [expand] - расширяемость выделенного для виджетов места
+ * [fill] - заполнять ли виджетом всё ему выделенное место
+ * [padding] - отступ од других элементов
+*/
+int yon_dictionary_gtk_pack_start_multiple_widgets(GtkBox *destination, gboolean expand, gboolean fill, int padding, ...){
+ va_list args;
+ va_start(args,padding);
+ GtkWidget *widget = va_arg(args,GtkWidget*);
+ while (widget){
+ gtk_box_pack_start(GTK_BOX(destination), widget, expand, fill, padding);
}
+ va_end(args);
return 1;
- }else return 0;
}
-int yon_dictionary_gtk_pack_end_multiple_widgets(dictionary *dict, GtkWidget *destination, gboolean expand, gboolean fill, int padding)
-{
- for (dictionary *dct = dict->first; dct != NULL; dct = dct->next)
- {
- gtk_box_pack_end(GTK_BOX(destination), (GtkWidget *)dct->data, expand, fill, padding);
- }
+int yon_dictionary_gtk_pack_end_multiple_widgets(GtkBox *destination, gboolean expand, gboolean fill, int padding, ...){
+ va_list args;
+ va_start(args,padding);
+ GtkWidget *widget = va_arg(args,GtkWidget*);
+ while (widget){
+ gtk_box_pack_end(GTK_BOX(destination), widget, expand, fill, padding);
+ }
+ va_end(args);
return 1;
}
+
void _yon_ubl_header_setup(GtkWidget *Overlay, GtkWidget *Head, GtkWidget *Image, char *image_path)
{
gtk_overlay_add_overlay(GTK_OVERLAY(Overlay), Head);
gtk_image_set_from_file(GTK_IMAGE(Image), image_path);
}
+void _yon_ubl_header_setup_resource(GtkWidget *Overlay, GtkWidget *Head, GtkWidget *Image, char *image_path)
+{
+ gtk_overlay_add_overlay(GTK_OVERLAY(Overlay), Head);
+ gtk_image_set_from_resource(GTK_IMAGE(Image), image_path);
+}
+
int yon_ubl_status_box_setup(GtkWidget *icon, GtkWidget *box, GtkWidget *label)
{
if(icon&&box&&label){
@@ -1130,9 +1517,6 @@ int yon_ubl_status_box_setup(GtkWidget *icon, GtkWidget *box, GtkWidget *label)
} else return 0;
}
-/**
- *
-*/
void _yon_ubl_status_box_render(char *text, BACKGROUND_IMAGE_TYPE type)
{
render_data data = render;
@@ -1159,7 +1543,6 @@ void _yon_ubl_status_box_render(char *text, BACKGROUND_IMAGE_TYPE type)
gtk_label_set_text(GTK_LABEL(data.label), text);
}
-
void yon_ubl_status_box_render(char *text, BACKGROUND_IMAGE_TYPE type){
_yon_ubl_status_box_render(text,type);
}
@@ -1282,7 +1665,7 @@ void yon_ubl_browser_window_open(char *link, char *browser_window_name){
if (!user)
user=getlogin();
char *command=yon_char_unite("sudo -u ",user," xdg-open ", link,NULL);
- yon_launch_app(command);
+ yon_launch(command);
}
#endif
diff --git a/source/ubl-utils.h b/source/ubl-utils.h
index acd60c5..bf783eb 100644
--- a/source/ubl-utils.h
+++ b/source/ubl-utils.h
@@ -7,12 +7,12 @@
#include
#include
#include
+#include
+#include
#include
#include
#include
-#include
-#include
-#include
+
#include "ubl-cmake.h"
#ifdef WEBKIT_FOUND
#include
@@ -20,38 +20,25 @@
#define DesktopPath "/usr/share/applications/"
#define for_dictionaries(obj, obj1) for (obj = obj1->first; obj != NULL; obj = obj->next)
-
-#define new(type) malloc(sizeof(type))
-#define new_arr(type,size) malloc(sizeof(type)*size)
-
-#define yon_ubl_set_config_save_data_pointer(command) config_commands.config_save_data = command
-
-#define yon_ubl_load_global_config(command, size_pointer) yon_config_load(command, size_pointer)
-#define yon_ubl_load_local_config(command, size_pointer) yon_config_load(command, size_pointer)
-#define yon_ubl_save_global_config(command) yon_config_save(command)
-#define yon_ubl_save_local_config(command) yon_config_save(command)
-
#define try bool __HadError=false;
#define catch(x) ExitJmp:if(__HadError)
#define throw(x) {__HadError=true;goto ExitJmp;}
-#define file_source_login_min_max "/etc/login.defs"
+#define new(type) malloc(sizeof(type))
+#define new_arr(type,size) malloc(sizeof(type)*size)
+
typedef enum
{
#ifdef __GTK_H__
DICTIONARY_GTK_WIDGETS_TYPE,
#endif
- DICTIONARY_OTHER_TYPE
+ DICTIONARY_OTHER_TYPE=0,
+ DICTIONARY_CHAR_TYPE,
+ DICTIONARY_INT_TYPE,
+ DICTIONARY_BOOL_TYPE,
} DICT_TYPE;
-typedef struct
-{
- char *command;
- int *exitcode;
-} thread_output;
-
-
typedef struct dictionary
{
char *key;
@@ -60,6 +47,7 @@ typedef struct dictionary
struct dictionary *prev;
struct dictionary *first;
DICT_TYPE data_type;
+ int flag1;
} dictionary;
typedef struct apps
@@ -74,6 +62,15 @@ typedef struct apps
} apps;
typedef char** config_str;
+
+static dictionary *__yon__config__strings = NULL;
+#define check_config if(__yon__config__strings&&__yon__config__strings->data_type==DICTIONARY_CHAR_TYPE)
+
+#define config(key) yon_config_get_by_key(key)
+
+#define for_config dictionary temp = NULL; for_dictionary(temp,__yon__config__strings)
+
+#define yon_remalloc(pointer, size) (!pointer) ? malloc(size) : realloc(pointer, size)
// dictionary functions
/**yon_dictionary_get_data(dictionary, type)
@@ -87,28 +84,36 @@ typedef char** config_str;
* [type] - тип данных, хранящихся в словаре [dictionary].
*/
#define yon_dictionary_get_data(dictionary, type) ((type)dictionary->data)
-#define yon_dictionary_add_or_create_if_exists_with_data(dict,key,data) {if (!dict) dict=yon_dictionary_create_with_data(key,data); \
- else dict=yon_dictionary_create_with_data_connected(dict,key,data);}
-dictionary *yon_dictionary_create_empty();
+/**yon_dictionary_add_or_create_if_exists_with_data(dict,key,data)
+ * [EN]
+ *
+ * [RU]
+ * Добавляет элемент словаря в конец словаря [dict] c ключом [key] и данными [data].
+ * Если словарь не существует, создаёт его
+*/
+#define yon_dictionary_add_or_create_if_exists_with_data(dict,key,data) {if (!dict) dict=yon_dictionary_new_with_data(key,data); \
+ else dict=yon_dictionary_append_with_data(dict,key,data);}
+
+dictionary *yon_dictionary_new();
-dictionary *yon_dictionary_create_conneced(dictionary *targetdict);
+dictionary *yon_dictionary_append(dictionary *targetdict);
dictionary *yon_dictionary_get_last(dictionary *dict);
-dictionary *yon_dictionary_switch_places(dictionary *dict, int aim);
+dictionary *yon_dictionary_swap(dictionary *dict, int aim);
void yon_dictionary_make_first(dictionary *dict);
void yon_dictionary_make_nth(dictionary *dict, int nth);
-dictionary *yon_dictionary_create_with_data(char *key, void *data);
+dictionary *yon_dictionary_new_with_data(char *key, void *data);
-dictionary *yon_dictionary_create_with_data_connected(dictionary *dict, char *key, void *data);
+dictionary *yon_dictionary_append_with_data(dictionary *dict, char *key, void *data);
dictionary *yon_dictionary_connect(dictionary *old, dictionary *toconnect);
-dictionary *yon_dictionary_find(dictionary **dict, char *key);
+dictionary *yon_dictionary_get(dictionary **dict, char *key);
dictionary *yon_dictionary_rip(dictionary *dict);
@@ -117,8 +122,8 @@ dictionary *yon_dictionary_get_nth(dictionary *dict, int place);
void *yon_dictionary_free_all(dictionary *dictionary,void (data_manipulation)(void*));
// char functions
-char* philos_str_remove(char *str, const char *sub);
-char *yon_char_get_augumented(char *source, char *append);
+
+char *yon_char_append(char *source, char *append);
char *yon_char_new(char *chr);
@@ -134,13 +139,9 @@ char *yon_char_from_int(int int_to_convert);
char *yon_char_replace(char *source, char *find, char*replace);
-void philos_split_size_memory(char* str_value, int* size, char* pow_memory);
-
char **yon_char_parse(char *parameters, int *size, char *divider);
-char** philos_str_split(char *parameters, int *size, char *divider);
-
-char **yon_char_parsed_shrink(char **char_string, int *size, int item_to_delete);
+char **yon_char_parsed_rip(char **char_string, int *size, int item_to_delete);
int yon_char_parsed_check_exist(char **parameters, int size, char *param);
@@ -148,17 +149,19 @@ int yon_char_find_count(char *source, char *find);
int yon_char_parsed_includes_char_parsed (config_str source, config_str to_check, int source_size, int check_size);
-config_str yon_char_parsed_new (config_str old, int *old_size, ...);
+config_str yon_char_parsed_new (int *size, ...);
+
+void yon_char_parsed_copy(config_str *source, config_str *to_copy);
+
config_str yon_char_parsed_append(config_str parsed, int *size, char *string);
-// parsing functions
-config_str philos_list_user(int* size);
+int yon_ubl_check_root();
-char* philos_str_size_pow_byte(GtkWidget *combo_box_text);
+char *yon_ubl_root_user_get();
-config_str philos_list_group(int* size);
+// parsing functions
-unsigned short philos_read_uid_min_max(char* filename, char* search);
+config_str philos_list_user(int* size);
apps *yon_apps_scan_and_parse_desktops(int *sizef);
@@ -172,30 +175,40 @@ int yon_config_save(char *command);
char *yon_config_get_parameter(config_str parameters, int size, char *param);
-char *yon_config_make_save_parameter_with_multiple_arguments(char *parameter_string, char *config_parameter, char *divider);
+int yon_config_load_register(char *command);
-// terminal-using functions
+int yon_config_remove_by_key(char *key);
-int yon_launch_app(char *name);
+int yon_config_remove_by_data(void *data);
-int yon_launch_app_with_arguments(char *name, char *args);
+int yon_config_remove_element(char *key, char *deleted);
+
+void *yon_config_get_by_key(char *key);
+
+char *yon_config_get_key_by_data(char *data);
+
+int yon_config_set(char *key, void *data);
-int yon_launch(thread_output *thread);
+int yon_config_clean();
-int* philos_int_append(int* array, int* size, int value);
+void yon_config_register(char *key, void *data);
+
+config_str yon_config_get_all();
+
+// terminal-using functions
+
+int yon_launch_app_with_arguments(char *name, char *args);
+
+void yon_launch(char *command);
-int* remove_element_int_array(int* array, int* size, int index);
// Gtk functions
#ifdef __GTK_H__
#ifdef VTE_TERMINAL
+void yon_terminal_integrated_launch(GtkWidget *place_to_show, char* command, void *endwork_function, void* endwork_function_argument);
+
+void yon_terminal_integrated_start(GtkWidget *terminal, char* command, void *endwork_function, void* endwork_function_argument);
-/**
- *
-*/
-void yon_terminal_integrated_launch(GtkWidget *terminal, char* command, void *endwork_function, void* endwork_function_argument);
-char* philos_get_size_bite(GtkWidget* chk_button, GtkWidget* spin, GtkWidget* combo_box_text);
-void philos_fill_combo_box_text(GtkWidget *cbt, config_str list_data, int size);
#endif
/**yon_gtk_builder_get_widget(builder, widget_name)
@@ -214,11 +227,13 @@ typedef struct
GtkListStore *List;
} expander_icon_view;
-// GtkWidget *yon_gtk_app_chooser_apps_create();
+void yon_window_config_setup(GtkWindow *window);
-// dictionary *yon_gtk_app_chooser_create();
+int yon_window_config_load(char *path);
-// expander_icon_view yon_gtk_icon_view_expander_create(GtkWidget *pack, ...);
+GtkWidget *yon_ubl_menu_item_about_new(char *buttonname);
+
+GtkWidget *yon_ubl_menu_item_documentation_new(char *buttonname);
int yon_gtk_combo_box_fill(GtkWidget *combo, char **parameters,int size);
@@ -226,8 +241,9 @@ int yon_gtk_combo_box_text_find(GtkWidget *combo_box, char *text_to_find);
int yon_gtk_icon_view_hide_empty(dictionary *icon_view_segment);
-int yon_dictionary_gtk_pack_start_multiple_widgets(dictionary *dict, GtkWidget *destination, gboolean expand, gboolean fill, int padding);
-int yon_dictionary_gtk_pack_end_multiple_widgets(dictionary *dict, GtkWidget *destination, gboolean expand, gboolean fill, int padding);
+int yon_dictionary_gtk_pack_start_multiple_widgets(GtkBox *destination, gboolean expand, gboolean fill, int padding, ...);
+
+int yon_dictionary_gtk_pack_end_multiple_widgets(GtkBox *destination, gboolean expand, gboolean fill, int padding, ...);
@@ -311,10 +327,13 @@ void yon_ubl_status_box_render(char *text, BACKGROUND_IMAGE_TYPE type);
* [imag_path] - путь до картинки, загружаемой в [image]
*/
#define yon_ubl_header_setup(overlay, head, image, imag_path) _yon_ubl_header_setup(GTK_WIDGET(overlay), GTK_WIDGET(head), GTK_WIDGET(image), (char *)imag_path)
+#define yon_ubl_header_setup_resource(overlay, head, image, imag_path) _yon_ubl_header_setup_resource(GTK_WIDGET(overlay), GTK_WIDGET(head), GTK_WIDGET(image), (char *)imag_path)
#endif
void _yon_ubl_header_setup(GtkWidget *Overlay, GtkWidget *Head, GtkWidget *Image, char *image_path);
+void _yon_ubl_header_setup_resource(GtkWidget *Overlay, GtkWidget *Head, GtkWidget *Image, char *image_path);
+
void yon_ubl_setup_sockets(GtkWidget *main_window, GtkWidget *left_window, GtkWidget *right_window, int socket_main_id, int socket_left_id, int socket_right_id);
#ifdef WEBKIT_FOUND
diff --git a/source/view_add.c b/source/view_add.c
index c478654..f9e7628 100644
--- a/source/view_add.c
+++ b/source/view_add.c
@@ -1,100 +1,142 @@
#include "view_add.h"
-add_window *add_widgets = NULL;
+temp_set_window *add_widgets = NULL;
+temp_config obj_add_config;
+temp_config* get_add_config() {
+ return &obj_add_config;
+}
-add_window *add_setup_window(char* glade_path) {
+temp_set_window *add_setup_window(char* glade_path) {
if (add_widgets == NULL) {
- add_widgets = malloc(sizeof(add_window));
- GtkBuilder *builder = gtk_builder_new_from_file(glade_path);
+ add_widgets = malloc(sizeof(temp_set_window));
+ GtkBuilder *builder = gtk_builder_new_from_resource(glade_path);
add_widgets->Window = yon_gtk_builder_get_widget(builder,"wndQuotasAdding");
- add_widgets->btnSaveAddSave = yon_gtk_builder_get_widget(builder,"btnSaveAddSave");
- add_widgets->btnAddCancel = yon_gtk_builder_get_widget(builder,"btnAddCancel");
+ add_widgets->btnSaveTempSave = yon_gtk_builder_get_widget(builder,"btnSaveAddSave");
+ add_widgets->btnTempCancel = yon_gtk_builder_get_widget(builder,"btnAddCancel");
- add_widgets->entryAddCmd = yon_gtk_builder_get_widget(builder,"entryAddCmd");
- add_widgets->cbxAddQuotaObj = yon_gtk_builder_get_widget(builder,"cbxAddQuotaObj");
- add_widgets->cbxAddQuotaLevel2 = yon_gtk_builder_get_widget(builder,"cbxAddQuotaLevel2");
- add_widgets->cbtAddDevice = yon_gtk_builder_get_widget(builder,"cbtAddDevice");
- add_widgets->lblCPULimitAdd = yon_gtk_builder_get_widget(builder,"lblCPULimitAdd");
- add_widgets->spinCPULimitAdd = yon_gtk_builder_get_widget(builder,"spinCPULimitAdd");
- add_widgets->chkCPULimitAdd = yon_gtk_builder_get_widget(builder,"chkCPULimitAdd");
+ add_widgets->entryTempCmd = yon_gtk_builder_get_widget(builder,"entryAddCmd");
+ add_widgets->cbxTempQuotaObj = yon_gtk_builder_get_widget(builder,"cbxAddQuotaObj");
+ add_widgets->cbxTempQuotaLevel2 = yon_gtk_builder_get_widget(builder,"cbxAddQuotaLevel2");
+ add_widgets->cbtTempDevice = yon_gtk_builder_get_widget(builder,"cbtAddDevice");
+ add_widgets->lblCPULimitTemp = yon_gtk_builder_get_widget(builder,"lblCPULimitAdd");
+ add_widgets->spinCPULimitTemp = yon_gtk_builder_get_widget(builder,"spinCPULimitAdd");
+ add_widgets->chkCPULimitTemp = yon_gtk_builder_get_widget(builder,"chkCPULimitAdd");
- add_widgets->chkPaddingFLAdd = yon_gtk_builder_get_widget(builder,"chkPaddingFLAdd");
- add_widgets->spinPaddingFLAdd = yon_gtk_builder_get_widget(builder,"spinPaddingFLAdd");
- add_widgets->cmbPaddingFLAdd = yon_gtk_builder_get_widget(builder,"cmbPaddingFLAdd");
+ add_widgets->chkPaddingFLTemp = yon_gtk_builder_get_widget(builder,"chkPaddingFLAdd");
+ add_widgets->spinPaddingFLTemp = yon_gtk_builder_get_widget(builder,"spinPaddingFLAdd");
+ add_widgets->cmbPaddingFLTemp = yon_gtk_builder_get_widget(builder,"cmbPaddingFLAdd");
- add_widgets->chkSevereRestrictionAdd = yon_gtk_builder_get_widget(builder,"chkSevereRestrictionAdd");
- add_widgets->spinSevereRestrictionAdd = yon_gtk_builder_get_widget(builder,"spinSevereRestrictionAdd");
- add_widgets->cmbSevereRestrictionAdd = yon_gtk_builder_get_widget(builder,"cmbSevereRestrictionAdd");
+ add_widgets->chkSevereRestrictionTemp = yon_gtk_builder_get_widget(builder,"chkSevereRestrictionAdd");
+ add_widgets->spinSevereRestrictionTemp = yon_gtk_builder_get_widget(builder,"spinSevereRestrictionAdd");
+ add_widgets->cmbSevereRestrictionTemp = yon_gtk_builder_get_widget(builder,"cmbSevereRestrictionAdd");
- add_widgets->chkSoftRestrictionAdd = yon_gtk_builder_get_widget(builder,"chkSoftRestrictionAdd");
- add_widgets->spiSevereRestrictionAdd = yon_gtk_builder_get_widget(builder,"spiSevereRestrictionAdd");
- add_widgets->cmSevereRestrictionAdd = yon_gtk_builder_get_widget(builder,"cmSevereRestrictionAdd");
+ add_widgets->chkSoftRestrictionTemp = yon_gtk_builder_get_widget(builder,"chkSoftRestrictionAdd");
+ add_widgets->spiSevereRestrictionTemp = yon_gtk_builder_get_widget(builder,"spiSevereRestrictionAdd");
+ add_widgets->cmSevereRestrictionTemp = yon_gtk_builder_get_widget(builder,"cmSevereRestrictionAdd");
- add_widgets->chbAddRead = yon_gtk_builder_get_widget(builder,"chbAddRead");
- add_widgets->spinAddRead = yon_gtk_builder_get_widget(builder,"spinAddRead");
- add_widgets->cbtAddRead = yon_gtk_builder_get_widget(builder,"cbtAddRead");
+ add_widgets->chbTempRead = yon_gtk_builder_get_widget(builder,"chbAddRead");
+ add_widgets->spinTempRead = yon_gtk_builder_get_widget(builder,"spinAddRead");
+ add_widgets->cbtTempRead = yon_gtk_builder_get_widget(builder,"cbtAddRead");
- add_widgets->spinAddWrite = yon_gtk_builder_get_widget(builder,"spinAddWrite");
- add_widgets->chbAddWrite = yon_gtk_builder_get_widget(builder,"chbAddWrite");
- add_widgets->cbtAddWrite = yon_gtk_builder_get_widget(builder,"cbtAddWrite");
-
- device_fill_disk(add_widgets->cbtAddDevice);
+ add_widgets->spinTempWrite = yon_gtk_builder_get_widget(builder,"spinAddWrite");
+ add_widgets->chbTempWrite = yon_gtk_builder_get_widget(builder,"chbAddWrite");
+ add_widgets->cbtTempWrite = yon_gtk_builder_get_widget(builder,"cbtAddWrite");
+ add_widgets->boxBlockGui = yon_gtk_builder_get_widget(builder,"boxBlockGui");
+ device_fill_disk(add_widgets->cbtTempDevice);
add_event(add_widgets);
add_init_windows();
add_localization(add_widgets);
+ philos_temp_config_init(&obj_add_config);
+ init_device_disk(&obj_add_config);
}
-
return add_widgets;
}
void add_init_windows() {
- add_set_active_widgets(add_widgets->chkSoftRestrictionAdd, add_widgets->spiSevereRestrictionAdd, add_widgets->cmSevereRestrictionAdd);
- add_set_active_widgets(add_widgets->chkSevereRestrictionAdd, add_widgets->spinSevereRestrictionAdd, add_widgets->cmbSevereRestrictionAdd);
- add_set_active_widgets(add_widgets->chkPaddingFLAdd, add_widgets->spinPaddingFLAdd, add_widgets->cmbPaddingFLAdd);
- add_set_active_widgets(add_widgets->chkCPULimitAdd, add_widgets->spinCPULimitAdd, add_widgets->lblCPULimitAdd);
- add_set_active_widgets(add_widgets->chbAddWrite, add_widgets->spinAddWrite, add_widgets->cbtAddWrite);
- add_set_active_widgets(add_widgets->chbAddRead, add_widgets->spinAddRead, add_widgets->cbtAddRead);
- add_generate_cmd();
+ if (gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cbxTempQuotaLevel2)) != -1) {
+ gtk_widget_set_sensitive(add_widgets->boxBlockGui, 1);
+ gtk_widget_set_sensitive(add_widgets->btnSaveTempSave, 1);
+ philos_set_active_widgets(add_widgets->chkSoftRestrictionTemp, add_widgets->spiSevereRestrictionTemp, add_widgets->cmSevereRestrictionTemp, 0 , CMD_RAW);
+ philos_set_active_widgets(add_widgets->chkSevereRestrictionTemp, add_widgets->spinSevereRestrictionTemp, add_widgets->cmbSevereRestrictionTemp,0 , CMD_RAW);
+ philos_set_active_widgets(add_widgets->chkPaddingFLTemp, add_widgets->spinPaddingFLTemp, add_widgets->cmbPaddingFLTemp,0 , CMD_SWAP);
+ philos_set_active_widgets(add_widgets->chkCPULimitTemp, add_widgets->spinCPULimitTemp, add_widgets->lblCPULimitTemp,1 , CMD_CPU);
+ philos_set_active_widgets_device_io(add_widgets->cbtTempDevice,add_widgets->chbTempWrite, add_widgets->spinTempWrite, add_widgets->cbtTempWrite);
+ philos_set_active_widgets_device_io(add_widgets->cbtTempDevice,add_widgets->chbTempRead, add_widgets->spinTempRead, add_widgets->cbtTempRead);
+ }
+ else {
+ gtk_widget_set_sensitive(add_widgets->boxBlockGui, 0);
+ gtk_widget_set_sensitive(add_widgets->btnSaveTempSave, 0);
+ }
+ philos_temp_generate_cmd(add_widgets, &obj_add_config);
+}
+
+void event_check_io_device() {
+ add_init_windows();
+ philos_temp_add_disk(add_widgets, &obj_add_config, 0);
+ philos_temp_add_disk(add_widgets, &obj_add_config, 1);
+ philos_temp_generate_cmd(add_widgets, &obj_add_config);
}
-void add_event(add_window *widgets) {
- g_signal_connect(G_OBJECT(widgets->btnAddCancel),"clicked",G_CALLBACK(add_on_destroy_subwindow),NULL);
+void combo_box_device() {
+ g_signal_handlers_block_by_func(G_OBJECT(add_widgets->cbtTempDevice), G_CALLBACK(combo_box_device), NULL);
+ g_signal_handlers_block_by_func(G_OBJECT(add_widgets->cbtTempRead), G_CALLBACK(event_check_io_device), NULL);
+ g_signal_handlers_block_by_func(G_OBJECT(add_widgets->cbtTempWrite), G_CALLBACK(event_check_io_device), NULL);
+ g_signal_handlers_block_by_func(G_OBJECT(add_widgets->spinTempRead), G_CALLBACK(event_check_io_device), NULL);
+ g_signal_handlers_block_by_func(G_OBJECT(add_widgets->spinTempWrite), G_CALLBACK(event_check_io_device), NULL);
+ g_signal_handlers_block_by_func(G_OBJECT(add_widgets->chbTempRead), G_CALLBACK(event_check_io_device), NULL);
+ g_signal_handlers_block_by_func(G_OBJECT(add_widgets->chbTempWrite), G_CALLBACK(event_check_io_device), NULL);
+ philos_update_device_to_entry(add_widgets, &obj_add_config, 0);
+ philos_update_device_to_entry(add_widgets, &obj_add_config, 1);
+ add_init_windows();
+ g_signal_handlers_unblock_by_func(G_OBJECT(add_widgets->cbtTempDevice), G_CALLBACK(combo_box_device), NULL);
+ g_signal_handlers_unblock_by_func(G_OBJECT(add_widgets->cbtTempRead), G_CALLBACK(event_check_io_device), NULL);
+ g_signal_handlers_unblock_by_func(G_OBJECT(add_widgets->cbtTempWrite), G_CALLBACK(event_check_io_device), NULL);
+ g_signal_handlers_unblock_by_func(G_OBJECT(add_widgets->spinTempRead), G_CALLBACK(event_check_io_device), NULL);
+ g_signal_handlers_unblock_by_func(G_OBJECT(add_widgets->spinTempWrite), G_CALLBACK(event_check_io_device), NULL);
+ g_signal_handlers_unblock_by_func(G_OBJECT(add_widgets->chbTempRead), G_CALLBACK(event_check_io_device), NULL);
+ g_signal_handlers_unblock_by_func(G_OBJECT(add_widgets->chbTempWrite), G_CALLBACK(event_check_io_device), NULL);
+}
+
+void add_event(temp_set_window *widgets) {
+ g_signal_connect(G_OBJECT(widgets->btnTempCancel),"clicked",G_CALLBACK(add_on_destroy_subwindow),NULL);
g_signal_connect(G_OBJECT(widgets->Window), "destroy", G_CALLBACK(add_destroy), NULL);
- g_signal_connect(G_OBJECT(widgets->chkSoftRestrictionAdd), "toggled", G_CALLBACK(add_init_windows), NULL);
- g_signal_connect(G_OBJECT(widgets->chkSevereRestrictionAdd), "toggled", G_CALLBACK(add_init_windows), NULL);
- g_signal_connect(G_OBJECT(widgets->chkPaddingFLAdd), "toggled", G_CALLBACK(add_init_windows), NULL);
- g_signal_connect(G_OBJECT(widgets->chkCPULimitAdd), "toggled", G_CALLBACK(add_init_windows), NULL);
- g_signal_connect(G_OBJECT(widgets->chbAddRead), "toggled", G_CALLBACK(add_init_windows), NULL);
- g_signal_connect(G_OBJECT(widgets->chbAddWrite), "toggled", G_CALLBACK(add_init_windows), NULL);
- g_signal_connect(G_OBJECT(widgets->cbxAddQuotaObj),"changed",G_CALLBACK(add_update_combo_box), NULL);
+ g_signal_connect(G_OBJECT(widgets->chkSoftRestrictionTemp), "toggled", G_CALLBACK(add_init_windows), NULL);
+ g_signal_connect(G_OBJECT(widgets->chkSevereRestrictionTemp), "toggled", G_CALLBACK(add_init_windows), NULL);
+ g_signal_connect(G_OBJECT(widgets->chkPaddingFLTemp), "toggled", G_CALLBACK(add_init_windows), NULL);
+ g_signal_connect(G_OBJECT(widgets->chkCPULimitTemp), "toggled", G_CALLBACK(add_init_windows), NULL);
- g_signal_connect(G_OBJECT(widgets->spiSevereRestrictionAdd),"value-changed",G_CALLBACK(add_generate_cmd), NULL);
- g_signal_connect(G_OBJECT(widgets->spinSevereRestrictionAdd),"value-changed",G_CALLBACK(add_generate_cmd), NULL);
- g_signal_connect(G_OBJECT(widgets->spinPaddingFLAdd),"value-changed",G_CALLBACK(add_generate_cmd), NULL);
- g_signal_connect(G_OBJECT(widgets->spinCPULimitAdd),"value-changed",G_CALLBACK(add_generate_cmd), NULL);
- g_signal_connect(G_OBJECT(widgets->spinAddRead),"value-changed",G_CALLBACK(add_generate_cmd), NULL);
- g_signal_connect(G_OBJECT(widgets->spinAddWrite),"value-changed",G_CALLBACK(add_generate_cmd), NULL);
- g_signal_connect(G_OBJECT(widgets->cmSevereRestrictionAdd),"changed",G_CALLBACK(add_generate_cmd), NULL);
- g_signal_connect(G_OBJECT(widgets->cmbSevereRestrictionAdd),"changed",G_CALLBACK(add_generate_cmd), NULL);
- g_signal_connect(G_OBJECT(widgets->cmbPaddingFLAdd),"changed",G_CALLBACK(add_generate_cmd), NULL);
- g_signal_connect(G_OBJECT(widgets->cbtAddRead),"changed",G_CALLBACK(add_generate_cmd), NULL);
- g_signal_connect(G_OBJECT(widgets->cbtAddWrite),"changed",G_CALLBACK(add_generate_cmd), NULL);
- g_signal_connect(G_OBJECT(widgets->cbtAddDevice),"changed",G_CALLBACK(add_generate_cmd), NULL);
+ g_signal_connect(G_OBJECT(widgets->cbxTempQuotaObj),"changed",G_CALLBACK(add_update_combo_box), NULL);
+ g_signal_connect(G_OBJECT(widgets->cbxTempQuotaLevel2),"changed",G_CALLBACK(add_init_windows), NULL);
+
+ g_signal_connect(G_OBJECT(widgets->spiSevereRestrictionTemp),"value-changed",G_CALLBACK(add_init_windows), NULL);
+ g_signal_connect(G_OBJECT(widgets->spinSevereRestrictionTemp),"value-changed",G_CALLBACK(add_init_windows), NULL);
+ g_signal_connect(G_OBJECT(widgets->spinPaddingFLTemp),"value-changed",G_CALLBACK(add_init_windows), NULL);
+ g_signal_connect(G_OBJECT(widgets->spinCPULimitTemp),"value-changed",G_CALLBACK(add_init_windows), NULL);
+
+
+ g_signal_connect(G_OBJECT(widgets->cmSevereRestrictionTemp),"changed",G_CALLBACK(add_init_windows), NULL);
+ g_signal_connect(G_OBJECT(widgets->cmbSevereRestrictionTemp),"changed",G_CALLBACK(add_init_windows), NULL);
+ g_signal_connect(G_OBJECT(widgets->cmbPaddingFLTemp),"changed",G_CALLBACK(add_init_windows), NULL);
+ g_signal_connect(G_OBJECT(widgets->cbtTempDevice),"changed",G_CALLBACK(combo_box_device), NULL);
+ g_signal_connect(G_OBJECT(widgets->cbtTempRead),"changed",G_CALLBACK(event_check_io_device), NULL);
+ g_signal_connect(G_OBJECT(widgets->cbtTempWrite),"changed",G_CALLBACK(event_check_io_device), NULL);
+ g_signal_connect(G_OBJECT(widgets->spinTempRead),"value-changed",G_CALLBACK(event_check_io_device), NULL);
+ g_signal_connect(G_OBJECT(widgets->spinTempWrite),"value-changed",G_CALLBACK(event_check_io_device), NULL);
+ g_signal_connect(G_OBJECT(widgets->chbTempRead), "toggled", G_CALLBACK(event_check_io_device), NULL);
+ g_signal_connect(G_OBJECT(widgets->chbTempWrite), "toggled", G_CALLBACK(event_check_io_device), NULL);
}
-void add_destroy(GtkWidget *self) {
- add_widgets = NULL;
+void add_get_systemd_cgls(char* cmd_systemd_cgls) {
+ CMD_GET_SLICE_SERVICE = cmd_systemd_cgls;
}
-void add_set_active_widgets(GtkWidget *self, GtkWidget *entry, GtkWidget *label) {
- gboolean active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(self));
- gtk_widget_set_sensitive(entry, active);
- gtk_widget_set_sensitive(label, active);
+void add_destroy(GtkWidget *self) {
+ add_widgets = NULL;
}
-void add_localization(add_window *widgets) {
+void add_localization(temp_set_window *widgets) {
}
@@ -104,7 +146,7 @@ void add_on_destroy_subwindow(GtkWidget *self) {
}
-add_window *get_widget_add() {
+temp_set_window *get_widget_add() {
return add_widgets;
}
@@ -112,18 +154,20 @@ void add_show(GtkWidget *self, char* glade_path) {
if (add_widgets != NULL) {
add_update_combo_box();
gtk_widget_show_all(add_widgets->Window);
-
+ add_init_windows();
}
else {
add_setup_window(glade_path);
add_update_combo_box();
gtk_widget_show_all(add_widgets->Window);
+ add_init_windows();
}
}
char* add_get_select_device_to_level_2() {
- char* text = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(add_widgets->cbxAddQuotaLevel2));
- if (text != NULL) {
+ char* text = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(add_widgets->cbxTempQuotaLevel2));
+ int disk_id = gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cbxTempQuotaLevel2));
+ if (disk_id >= 0) {
return text;
}
else {
@@ -134,76 +178,66 @@ char* add_get_select_device_to_level_2() {
}
}
-char* add_get_select_device() {
- char* text = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(add_widgets->cbtAddDevice));
- if (text != NULL) {
- return text;
+
+int add_get_soft_size() {
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(add_widgets->chkSoftRestrictionTemp))) {
+ return gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cmSevereRestrictionTemp));
}
else {
- char* str = (char*)malloc(sizeof(char*)*2);
- str[0] = '-';
- str[1] = '\0';
- return str;
+ return -3;
}
-}
-int add_get_read_device_size() {
- return gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cbtAddRead));
-}
-int add_get_write_device_size() {
- return gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cbtAddWrite));
-}
-int add_get_soft_size() {
- return gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cmSevereRestrictionAdd));
+
}
int add_get_hard_size() {
- return gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cmbSevereRestrictionAdd));
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(add_widgets->chkSevereRestrictionTemp))) {
+ return gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cmbSevereRestrictionTemp));
+ }
+ else {
+ return -3;
+ }
}
int add_get_limit_cpu_size() {
return -1;
}
int add_get_limit_swap_size() {
- return gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cmbPaddingFLAdd));
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(add_widgets->chkPaddingFLTemp))) {
+ return gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cmbPaddingFLTemp));
+ }
+ else {
+ return -3;
+ }
}
int add_get_quota_object_size() {
- return gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cbxAddQuotaObj));
-}
-char* add_get_read_device() {
- return philos_get_size_bite(add_widgets->chbAddRead, add_widgets->spinAddRead,
- add_widgets->cbtAddRead);
-}
-char* add_get_write_device() {
- return philos_get_size_bite(add_widgets->chbAddWrite, add_widgets->spinAddWrite,
- add_widgets->cbtAddWrite);
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(add_widgets->chkPaddingFLTemp))) {
+ return gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cbxTempQuotaObj));
+ }
+ else {
+ return -3;
+ }
}
-char* add_get_soft() {
- return philos_get_size_bite(add_widgets->chkSoftRestrictionAdd, add_widgets->spiSevereRestrictionAdd,
- add_widgets->cmSevereRestrictionAdd);
+
+int add_get_soft() {
+ return gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(add_widgets->spiSevereRestrictionTemp));
}
-char* add_get_hard() {
- return philos_get_size_bite(add_widgets->chkSevereRestrictionAdd, add_widgets->spinSevereRestrictionAdd,
- add_widgets->cmbSevereRestrictionAdd);
+int add_get_hard() {
+ return gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(add_widgets->spinSevereRestrictionTemp));
}
-char* add_get_limit_cpu() {
- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(add_widgets->chkCPULimitAdd))) {
- int size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(add_widgets->spinCPULimitAdd));
- return yon_char_from_int(size_bite);
+int add_get_limit_cpu() {
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(add_widgets->chkCPULimitTemp))) {
+ return gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(add_widgets->spinCPULimitTemp));
}
else {
- char* str = (char*)malloc(sizeof(char*)*2);
- str[0] = '-';
- str[1] = '\0';
- return str;
+ return -3;
}
}
-char* add_get_limit_swap() {
- return philos_get_size_bite(add_widgets->chkPaddingFLAdd, add_widgets->spinPaddingFLAdd,
- add_widgets->cmbPaddingFLAdd);
+int add_get_limit_swap() {
+ return gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(add_widgets->spinPaddingFLTemp));
}
char* add_get_quota_object() {
- return gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(add_widgets->cbxAddQuotaObj));
+ return gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(add_widgets->cbxTempQuotaObj));
}
void add_update_combo_box() {
- int menu_id = gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cbxAddQuotaObj));
+ int menu_id = gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cbxTempQuotaObj));
char* cmd = NULL;
config_str fill_cmb_2 = NULL;
int size = 0;
@@ -212,87 +246,36 @@ void add_update_combo_box() {
}
else if (menu_id == 1) {
-
+ fill_cmb_2 = philos_pars_terminal_systemd_cgls(CMD_GET_SLICE_SERVICE, ".service", &size);
+ philos_array_string_remove_char(&fill_cmb_2, "\n", size);
}
else if (menu_id == 2) {
-
- }
- else if (menu_id == 3) {
-
+ fill_cmb_2 = philos_pars_terminal_systemd_cgls(CMD_GET_SLICE_SERVICE, ".slice", &size);
+ philos_array_string_remove_char(&fill_cmb_2, "\n", size);
}
if (menu_id >= 0) {
- gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(add_widgets->cbxAddQuotaLevel2));
- philos_fill_combo_box_text(add_widgets->cbxAddQuotaLevel2, fill_cmb_2, size);
- // yon_terminal_integrated_launch(widgets->vteProcesses, cmd, NULL, NULL);
+ gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(add_widgets->cbxTempQuotaLevel2));
+ philos_fill_combo_box_text(add_widgets->cbxTempQuotaLevel2, fill_cmb_2, size);
}
}
-void add_generate_cmd() {
- char* str_cmd = "";
- char* split_simvol = g_malloc0(sizeof(char)*2);
- int size_bite = 0;
- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(add_widgets->chkSoftRestrictionAdd))) {
- size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(add_widgets->spiSevereRestrictionAdd));
- str_cmd = yon_char_unite(str_cmd,
- "MemoryHigh=",
- yon_char_from_int(size_bite),
- philos_str_size_pow_byte(add_widgets->cmSevereRestrictionAdd), NULL);
- split_simvol[0] = ',';
- split_simvol[1] = '\0';
- }
- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(add_widgets->chkSevereRestrictionAdd))) {
- size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(add_widgets->spinSevereRestrictionAdd));
- str_cmd = yon_char_unite(str_cmd, split_simvol,
- "MemoryMax=",
- yon_char_from_int(size_bite),
- philos_str_size_pow_byte(add_widgets->cmbSevereRestrictionAdd), NULL);
- split_simvol[0] = ',';
- split_simvol[1] = '\0';
- }
- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(add_widgets->chkPaddingFLAdd))) {
- size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(add_widgets->spinPaddingFLAdd));
- str_cmd = yon_char_unite(str_cmd, split_simvol,
- "MemorySwapMax=",
- yon_char_from_int(size_bite),
- philos_str_size_pow_byte(add_widgets->cmbPaddingFLAdd), NULL);
- split_simvol[0] = ',';
- split_simvol[1] = '\0';
- }
- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(add_widgets->chkCPULimitAdd))) {
- size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(add_widgets->spinCPULimitAdd));
- str_cmd = yon_char_unite(str_cmd, split_simvol,
- "CPUQuota=",
- yon_char_from_int(size_bite),
- "\%", NULL);
- split_simvol[0] = ',';
- split_simvol[1] = '\0';
- }
- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(add_widgets->chbAddRead))) {
- int menu_id = gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cbtAddDevice));
- if (menu_id != -1) {
- size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(add_widgets->spinAddRead));
- str_cmd = yon_char_unite(str_cmd, split_simvol,
- "IOReadBandwidthMax=\"",
- get_device_cfg()->name_disk[menu_id],
- " ",
- yon_char_from_int(size_bite),
- philos_str_size_pow_byte(add_widgets->cbtAddRead),"\"", NULL);
- }
- split_simvol[0] = ',';
- split_simvol[1] = '\0';
-
- }
- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(add_widgets->chbAddWrite))) {
- int menu_id = gtk_combo_box_get_active(GTK_COMBO_BOX(add_widgets->cbtAddDevice));
- if (menu_id != -1) {
- size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(add_widgets->spinAddWrite));
- str_cmd = yon_char_unite(str_cmd, split_simvol,
- "IOWriteBandwidthMax=\"",
- get_device_cfg()->name_disk[menu_id],
- " ",
- yon_char_from_int(size_bite),
- philos_str_size_pow_byte(add_widgets->cbtAddWrite),"\"", NULL);
- }
- }
- gtk_entry_set_text(GTK_ENTRY(add_widgets->entryAddCmd), str_cmd);
- free(split_simvol);
+
+int** add_get_read_device() {
+ return &obj_add_config.i_o_limit_read;
+}
+
+int** add_get_read_device_size_pow() {
+ return &obj_add_config.i_o_limit_read_size;
+}
+int** add_get_write_device() {
+ return &obj_add_config.i_o_limit_write;
}
+int** add_get_write_device_size_pow() {
+ return &obj_add_config.i_o_limit_write_size;
+}
+char*** add_get_select_read_device() {
+ return &obj_add_config.disk_read;
+}
+char*** add_get_select_write_device() {
+ return &obj_add_config.disk_write;
+}
+
diff --git a/source/view_add.h b/source/view_add.h
index 261d998..790d323 100644
--- a/source/view_add.h
+++ b/source/view_add.h
@@ -12,70 +12,49 @@
#include
#include
#include "my_device.h"
+#include "philos_utils.h"
-// Переменные
-typedef struct {
- GtkWidget* Window;
- GtkWidget* btnSaveAddSave;
- GtkWidget* btnAddCancel;
- GtkWidget* entryAddCmd;
- GtkWidget* chbAddRead;
- GtkWidget* spinAddRead;
- GtkWidget* cbtAddRead;
+#define CMD_CPU "lscpu | grep \"CPU(s):\" |grep -oE \"[0-9]{1,}\""
+#define CMD_SWAP "grep '^Swap' /proc/meminfo | grep \"SwapTotal\" |grep -oE \"[0-9]{1,}\""
+#define CMD_RAW "cat /proc/meminfo | grep \"MemTotal\" |grep -oE \"[0-9]{1,}\""
- GtkWidget* chbAddWrite;
- GtkWidget* spinAddWrite;
- GtkWidget* cbtAddWrite;
+static char* CMD_GET_GROUP;
+static char* CMD_GET_SLICE_SERVICE;
- GtkWidget* chkSoftRestrictionAdd;
- GtkWidget* spiSevereRestrictionAdd;
- GtkWidget* cmSevereRestrictionAdd;
-
- GtkWidget* chkSevereRestrictionAdd;
- GtkWidget* spinSevereRestrictionAdd;
- GtkWidget* cmbSevereRestrictionAdd;
- GtkWidget* chkPaddingFLAdd;
- GtkWidget* spinPaddingFLAdd;
- GtkWidget* cmbPaddingFLAdd;
-
- GtkWidget* chkCPULimitAdd;
- GtkWidget* spinCPULimitAdd;
- GtkWidget* lblCPULimitAdd;
-
- GtkWidget* cbtAddDevice;
- GtkWidget* cbxAddQuotaObj;
- GtkWidget* cbxAddQuotaLevel2;
-} add_window;
-// Функции
-add_window *add_setup_window(char* glade_path);
-void add_event(add_window *widgets);
-void add_localization(add_window *widgets);
+temp_set_window *add_setup_window(char* glade_path);
+void add_event(temp_set_window *widgets);
+void add_localization(temp_set_window *widgets);
void add_on_destroy_subwindow(GtkWidget *self);
-add_window *get_widget_add();
+temp_set_window *get_widget_add();
void add_show(GtkWidget *self, char* glade_path);
void add_destroy(GtkWidget *self);
-void add_set_active_widgets(GtkWidget *self, GtkWidget *entry, GtkWidget *label);
+void add_set_active_widgets(GtkWidget *check, GtkWidget *spin, GtkWidget *combo, int flag_cpu, char* cmd);
void add_init_windows();
void add_update_combo_box();
-char* add_get_select_device();
-char* add_get_read_device();
-char* add_get_write_device();
-char* add_get_soft();
-char* add_get_hard();
-char* add_get_limit_cpu();
-char* add_get_limit_swap();
+char*** add_get_select_read_device();
+int** add_get_read_device();
+int** add_get_write_device();
+int add_get_soft();
+int add_get_hard();
+int add_get_limit_cpu();
+int add_get_limit_swap();
char* add_get_quota_object();
-
-int add_get_read_device_size();
-int add_get_write_device_size();
+char*** add_get_select_write_device();
+char*** add_get_select_read_device();
+void combo_box_device();
+int** add_get_write_device_size_pow();
+int** add_get_read_device_size_pow();
int add_get_soft_size();
int add_get_hard_size();
int add_get_limit_cpu_size();
int add_get_limit_swap_size();
int add_get_quota_object_size();
-
+temp_config* get_add_config();
+void add_set_active_widgets_device_io(GtkWidget *check, GtkWidget *spin, GtkWidget *combo);
+void add_get_cmd_group(char* cmd_get_group);
char* add_get_select_device_to_level_2();
-void add_generate_cmd();
+void add_get_systemd_cgls(char* cmd_systemd_cgls);
+void add_set_spin_adjustment(GtkWidget *check, GtkWidget *spin, GtkWidget *combo, size_t value);
#endif
\ No newline at end of file
diff --git a/source/view_edit.c b/source/view_edit.c
index 7127154..6e7659c 100644
--- a/source/view_edit.c
+++ b/source/view_edit.c
@@ -1,76 +1,80 @@
#include "view_edit.h"
-edit_window *edit_widgets = NULL;
+temp_set_window *edit_widgets = NULL;
+temp_config obj_edit_config;
-edit_window *edit_setup_window(char* glade_path){
+temp_config* get_edit_config() {
+ return &obj_edit_config;
+}
+temp_set_window *edit_setup_window(char* glade_path){
if (edit_widgets == NULL) {
- edit_widgets = malloc(sizeof(edit_window));
- GtkBuilder *builder = gtk_builder_new_from_file(glade_path);
+ edit_widgets = malloc(sizeof(temp_set_window));
+ GtkBuilder *builder = gtk_builder_new_from_resource(glade_path);
edit_widgets->Window = yon_gtk_builder_get_widget(builder,"wndQuotasEdit");
- edit_widgets->btnEditCancel = yon_gtk_builder_get_widget(builder,"btnEditCancel");
- edit_widgets->btnSaveEditSave = yon_gtk_builder_get_widget(builder,"btnSaveEditSave");
+ edit_widgets->btnTempCancel = yon_gtk_builder_get_widget(builder,"btnEditCancel");
+ edit_widgets->btnSaveTempSave = yon_gtk_builder_get_widget(builder,"btnSaveEditSave");
- edit_widgets->cbtEditDevice = yon_gtk_builder_get_widget(builder,"cbtEditDevice");
- edit_widgets->lblCPULimitEdit = yon_gtk_builder_get_widget(builder,"lblCPULimitEdit");
- edit_widgets->spinCPULimitEdit = yon_gtk_builder_get_widget(builder,"spinCPULimitEdit");
- edit_widgets->chkCPULimitEdit = yon_gtk_builder_get_widget(builder,"chkCPULimitEdit");
+ edit_widgets->cbtTempDevice = yon_gtk_builder_get_widget(builder,"cbtEditDevice");
+ edit_widgets->lblCPULimitTemp = yon_gtk_builder_get_widget(builder,"lblCPULimitEdit");
+ edit_widgets->spinCPULimitTemp = yon_gtk_builder_get_widget(builder,"spinCPULimitEdit");
+ edit_widgets->chkCPULimitTemp = yon_gtk_builder_get_widget(builder,"chkCPULimitEdit");
- edit_widgets->chkPaddingFLEdit = yon_gtk_builder_get_widget(builder,"chkPaddingFLEdit");
- edit_widgets->spinPaddingFLEdit = yon_gtk_builder_get_widget(builder,"spinPaddingFLEdit");
- edit_widgets->cmbPaddingFLEdit = yon_gtk_builder_get_widget(builder,"cmbPaddingFLEdit");
+ edit_widgets->chkPaddingFLTemp = yon_gtk_builder_get_widget(builder,"chkPaddingFLEdit");
+ edit_widgets->spinPaddingFLTemp = yon_gtk_builder_get_widget(builder,"spinPaddingFLEdit");
+ edit_widgets->cmbPaddingFLTemp = yon_gtk_builder_get_widget(builder,"cmbPaddingFLEdit");
- edit_widgets->chkSevereRestrictionEdit = yon_gtk_builder_get_widget(builder,"chkSevereRestrictionEdit");
- edit_widgets->spinSevereRestrictionEdit = yon_gtk_builder_get_widget(builder,"spinSevereRestrictionEdit");
- edit_widgets->cmbSevereRestrictionEdit = yon_gtk_builder_get_widget(builder,"cmbSevereRestrictionEdit");
+ edit_widgets->chkSevereRestrictionTemp = yon_gtk_builder_get_widget(builder,"chkSevereRestrictionEdit");
+ edit_widgets->spinSevereRestrictionTemp = yon_gtk_builder_get_widget(builder,"spinSevereRestrictionEdit");
+ edit_widgets->cmbSevereRestrictionTemp = yon_gtk_builder_get_widget(builder,"cmbSevereRestrictionEdit");
- edit_widgets->chkSoftRestrictionEdit = yon_gtk_builder_get_widget(builder,"chkSoftRestrictionEdit");
- edit_widgets->spiSevereRestrictionEdit = yon_gtk_builder_get_widget(builder,"spiSevereRestrictionEdit");
- edit_widgets->cmSevereRestrictionEdit = yon_gtk_builder_get_widget(builder,"cmSevereRestrictionEdit");
+ edit_widgets->chkSoftRestrictionTemp = yon_gtk_builder_get_widget(builder,"chkSoftRestrictionEdit");
+ edit_widgets->spiSevereRestrictionTemp = yon_gtk_builder_get_widget(builder,"spiSevereRestrictionEdit");
+ edit_widgets->cmSevereRestrictionTemp = yon_gtk_builder_get_widget(builder,"cmSevereRestrictionEdit");
- edit_widgets->chbEditRead = yon_gtk_builder_get_widget(builder,"chbEditRead");
- edit_widgets->spinEditRead = yon_gtk_builder_get_widget(builder,"spinEditRead");
- edit_widgets->cbtEditRead = yon_gtk_builder_get_widget(builder,"cbtEditRead");
+ edit_widgets->chbTempRead = yon_gtk_builder_get_widget(builder,"chbEditRead");
+ edit_widgets->spinTempRead = yon_gtk_builder_get_widget(builder,"spinEditRead");
+ edit_widgets->cbtTempRead = yon_gtk_builder_get_widget(builder,"cbtEditRead");
- edit_widgets->spinEditWrite = yon_gtk_builder_get_widget(builder,"spinEditWrite");
- edit_widgets->chbEditWrite = yon_gtk_builder_get_widget(builder,"chbEditWrite");
- edit_widgets->cbtEditWrite = yon_gtk_builder_get_widget(builder,"cbtEditWrite");
- edit_widgets->entryEditCmd = yon_gtk_builder_get_widget(builder,"entryEditCmd");
- device_fill_disk(edit_widgets->cbtEditDevice);
- edit_event(edit_widgets);
+ edit_widgets->spinTempWrite = yon_gtk_builder_get_widget(builder,"spinEditWrite");
+ edit_widgets->chbTempWrite = yon_gtk_builder_get_widget(builder,"chbEditWrite");
+ edit_widgets->cbtTempWrite = yon_gtk_builder_get_widget(builder,"cbtEditWrite");
+ edit_widgets->entryTempCmd = yon_gtk_builder_get_widget(builder,"entryEditCmd");
+ device_fill_disk(edit_widgets->cbtTempDevice);
edit_localization(edit_widgets);
+ philos_temp_config_init(&obj_edit_config);
}
return edit_widgets;
}
-void edit_event(edit_window *widgets) {
- g_signal_connect(G_OBJECT(widgets->btnEditCancel),"clicked",G_CALLBACK(edit_on_hide_subwindow),NULL);
+void edit_event(temp_set_window *widgets) {
+ g_signal_connect(G_OBJECT(widgets->btnTempCancel),"clicked",G_CALLBACK(edit_on_hide_subwindow),NULL);
g_signal_connect(G_OBJECT(widgets->Window), "destroy", G_CALLBACK(edit_destroy), NULL);
- g_signal_connect(G_OBJECT(widgets->chkSoftRestrictionEdit), "toggled", G_CALLBACK(edit_init_windows), NULL);
- g_signal_connect(G_OBJECT(widgets->chkSevereRestrictionEdit), "toggled", G_CALLBACK(edit_init_windows), NULL);
- g_signal_connect(G_OBJECT(widgets->chkPaddingFLEdit), "toggled", G_CALLBACK(edit_init_windows), NULL);
- g_signal_connect(G_OBJECT(widgets->chkCPULimitEdit), "toggled", G_CALLBACK(edit_init_windows), NULL);
- g_signal_connect(G_OBJECT(widgets->chbEditRead), "toggled", G_CALLBACK(edit_init_windows), NULL);
- g_signal_connect(G_OBJECT(widgets->chbEditWrite), "toggled", G_CALLBACK(edit_init_windows), NULL);
+ g_signal_connect(G_OBJECT(widgets->chkSoftRestrictionTemp), "toggled", G_CALLBACK(edit_init_windows), NULL);
+ g_signal_connect(G_OBJECT(widgets->chkSevereRestrictionTemp), "toggled", G_CALLBACK(edit_init_windows), NULL);
+ g_signal_connect(G_OBJECT(widgets->chkPaddingFLTemp), "toggled", G_CALLBACK(edit_init_windows), NULL);
+ g_signal_connect(G_OBJECT(widgets->chkCPULimitTemp), "toggled", G_CALLBACK(edit_init_windows), NULL);
+ g_signal_connect(G_OBJECT(widgets->chbTempRead), "toggled", G_CALLBACK(edit_init_windows), NULL);
+ g_signal_connect(G_OBJECT(widgets->chbTempWrite), "toggled", G_CALLBACK(edit_init_windows), NULL);
- g_signal_connect(G_OBJECT(widgets->spiSevereRestrictionEdit),"value-changed",G_CALLBACK(edit_generate_cmd), NULL);
- g_signal_connect(G_OBJECT(widgets->spinSevereRestrictionEdit),"value-changed",G_CALLBACK(edit_generate_cmd), NULL);
- g_signal_connect(G_OBJECT(widgets->spinPaddingFLEdit),"value-changed",G_CALLBACK(edit_generate_cmd), NULL);
- g_signal_connect(G_OBJECT(widgets->spinCPULimitEdit),"value-changed",G_CALLBACK(edit_generate_cmd), NULL);
- g_signal_connect(G_OBJECT(widgets->spinEditRead),"value-changed",G_CALLBACK(edit_generate_cmd), NULL);
- g_signal_connect(G_OBJECT(widgets->spinEditWrite),"value-changed",G_CALLBACK(edit_generate_cmd), NULL);
- g_signal_connect(G_OBJECT(widgets->cmSevereRestrictionEdit),"changed",G_CALLBACK(edit_generate_cmd), NULL);
- g_signal_connect(G_OBJECT(widgets->cmbSevereRestrictionEdit),"changed",G_CALLBACK(edit_generate_cmd), NULL);
- g_signal_connect(G_OBJECT(widgets->cmbPaddingFLEdit),"changed",G_CALLBACK(edit_generate_cmd), NULL);
- g_signal_connect(G_OBJECT(widgets->cbtEditRead),"changed",G_CALLBACK(edit_generate_cmd), NULL);
- g_signal_connect(G_OBJECT(widgets->cbtEditWrite),"changed",G_CALLBACK(edit_generate_cmd), NULL);
- g_signal_connect(G_OBJECT(widgets->cbtEditDevice),"changed",G_CALLBACK(edit_generate_cmd), NULL);
+ g_signal_connect(G_OBJECT(widgets->spiSevereRestrictionTemp),"value-changed",G_CALLBACK(edit_init_windows), NULL);
+ g_signal_connect(G_OBJECT(widgets->spinSevereRestrictionTemp),"value-changed",G_CALLBACK(edit_init_windows), NULL);
+ g_signal_connect(G_OBJECT(widgets->spinPaddingFLTemp),"value-changed",G_CALLBACK(edit_init_windows), NULL);
+ g_signal_connect(G_OBJECT(widgets->spinCPULimitTemp),"value-changed",G_CALLBACK(edit_init_windows), NULL);
+ g_signal_connect(G_OBJECT(widgets->spinTempRead),"value-changed",G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL);
+ g_signal_connect(G_OBJECT(widgets->spinTempWrite),"value-changed",G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL);
+ g_signal_connect(G_OBJECT(widgets->cmSevereRestrictionTemp),"changed",G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL);
+ g_signal_connect(G_OBJECT(widgets->cmbSevereRestrictionTemp),"changed",G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL);
+ g_signal_connect(G_OBJECT(widgets->cmbPaddingFLTemp),"changed",G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL);
+ g_signal_connect(G_OBJECT(widgets->cbtTempRead),"changed",G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL);
+ g_signal_connect(G_OBJECT(widgets->cbtTempWrite),"changed",G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL);
+ g_signal_connect(G_OBJECT(widgets->cbtTempDevice),"changed",G_CALLBACK(combo_box_device_edit), NULL);
}
void edit_destroy(GtkWidget *self) {
edit_widgets = NULL;
}
-void edit_localization(edit_window *widgets) {
+void edit_localization(temp_set_window *widgets) {
}
@@ -79,7 +83,7 @@ void edit_on_hide_subwindow(GtkWidget *self) {
edit_widgets = NULL;
}
-edit_window *get_widget_edit() {
+temp_set_window *get_widget_edit() {
return edit_widgets;
}
@@ -93,206 +97,213 @@ void edit_show(GtkWidget *self, char* glade_path) {
}
}
+void wrapper_edit_init_windows_size_memory() {
+ philos_temp_add_disk(edit_widgets, &obj_edit_config, 0);
+ philos_temp_add_disk(edit_widgets, &obj_edit_config, 1);
+ edit_init_windows();
+}
void edit_init_windows() {
- edit_generate_cmd();
- edit_set_active_widgets(edit_widgets->chkSoftRestrictionEdit, edit_widgets->spiSevereRestrictionEdit, edit_widgets->cmSevereRestrictionEdit);
- edit_set_active_widgets(edit_widgets->chkSevereRestrictionEdit, edit_widgets->spinSevereRestrictionEdit, edit_widgets->cmbSevereRestrictionEdit);
- edit_set_active_widgets(edit_widgets->chkPaddingFLEdit, edit_widgets->spinPaddingFLEdit, edit_widgets->cmbPaddingFLEdit);
- edit_set_active_widgets(edit_widgets->chkCPULimitEdit, edit_widgets->spinCPULimitEdit, edit_widgets->lblCPULimitEdit);
- edit_set_active_widgets(edit_widgets->chbEditWrite, edit_widgets->spinEditWrite, edit_widgets->cbtEditWrite);
- edit_set_active_widgets(edit_widgets->chbEditRead, edit_widgets->spinEditRead, edit_widgets->cbtEditRead);
+ philos_set_active_widgets(edit_widgets->chkSoftRestrictionTemp, edit_widgets->spiSevereRestrictionTemp, edit_widgets->cmSevereRestrictionTemp,0 ,CMD_RAW);
+ philos_set_active_widgets(edit_widgets->chkSevereRestrictionTemp, edit_widgets->spinSevereRestrictionTemp, edit_widgets->cmbSevereRestrictionTemp,0 , CMD_RAW);
+ philos_set_active_widgets(edit_widgets->chkPaddingFLTemp, edit_widgets->spinPaddingFLTemp, edit_widgets->cmbPaddingFLTemp,0 , CMD_SWAP);
+ philos_set_active_widgets(edit_widgets->chkCPULimitTemp, edit_widgets->spinCPULimitTemp, edit_widgets->lblCPULimitTemp,1 ,CMD_CPU);
+ philos_set_active_widgets_device_io(edit_widgets->cbtTempDevice,edit_widgets->chbTempWrite, edit_widgets->spinTempWrite, edit_widgets->cbtTempWrite);
+ philos_set_active_widgets_device_io(edit_widgets->cbtTempDevice,edit_widgets->chbTempRead, edit_widgets->spinTempRead, edit_widgets->cbtTempRead);
+ philos_temp_generate_cmd(edit_widgets, &obj_edit_config);
}
-void edit_set_active_widgets(GtkWidget *self, GtkWidget *entry, GtkWidget *label) {
- gboolean active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(self));
- gtk_widget_set_sensitive(entry, active);
- gtk_widget_set_sensitive(label, active);
+void combo_box_device_edit() {
+ g_signal_handlers_block_by_func(G_OBJECT(edit_widgets->cbtTempDevice), G_CALLBACK(combo_box_device_edit), NULL);
+ g_signal_handlers_block_by_func(G_OBJECT(edit_widgets->cbtTempRead), G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL);
+ g_signal_handlers_block_by_func(G_OBJECT(edit_widgets->cbtTempWrite), G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL);
+ g_signal_handlers_block_by_func(G_OBJECT(edit_widgets->spinTempRead), G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL);
+ g_signal_handlers_block_by_func(G_OBJECT(edit_widgets->spinTempWrite), G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL);
+ g_signal_handlers_block_by_func(G_OBJECT(edit_widgets->chbTempRead), G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL);
+ g_signal_handlers_block_by_func(G_OBJECT(edit_widgets->chbTempWrite), G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL);
+ philos_update_device_to_entry(edit_widgets, &obj_edit_config, 0);
+ philos_update_device_to_entry(edit_widgets, &obj_edit_config, 1);
+ edit_init_windows();
+ g_signal_handlers_unblock_by_func(G_OBJECT(edit_widgets->cbtTempDevice), G_CALLBACK(combo_box_device_edit), NULL);
+ g_signal_handlers_unblock_by_func(G_OBJECT(edit_widgets->cbtTempRead), G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL);
+ g_signal_handlers_unblock_by_func(G_OBJECT(edit_widgets->cbtTempWrite), G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL);
+ g_signal_handlers_unblock_by_func(G_OBJECT(edit_widgets->spinTempRead), G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL);
+ g_signal_handlers_unblock_by_func(G_OBJECT(edit_widgets->spinTempWrite), G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL);
+ g_signal_handlers_unblock_by_func(G_OBJECT(edit_widgets->chbTempRead), G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL);
+ g_signal_handlers_unblock_by_func(G_OBJECT(edit_widgets->chbTempWrite), G_CALLBACK(wrapper_edit_init_windows_size_memory), NULL);
}
-char* edit_get_select_device() {
- char* text = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(edit_widgets->cbtEditDevice));
- if (text != NULL) {
- return text;
+int edit_get_soft_size() {
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(edit_widgets->chkSoftRestrictionTemp))) {
+ return gtk_combo_box_get_active(GTK_COMBO_BOX(edit_widgets->cmSevereRestrictionTemp));
}
else {
- char* str = (char*)malloc(sizeof(char*)*2);
- str[0] = '-';
- str[1] = '\0';
- return str;
+ return -3;
}
-}
-int edit_get_read_device_size() {
- return gtk_combo_box_get_active(GTK_COMBO_BOX(edit_widgets->cbtEditRead));
-}
-int edit_get_write_device_size() {
- return gtk_combo_box_get_active(GTK_COMBO_BOX(edit_widgets->cbtEditWrite));
-}
-int edit_get_soft_size() {
- return gtk_combo_box_get_active(GTK_COMBO_BOX(edit_widgets->cmSevereRestrictionEdit));
+
}
int edit_get_hard_size() {
- return gtk_combo_box_get_active(GTK_COMBO_BOX(edit_widgets->cmbSevereRestrictionEdit));
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(edit_widgets->chkSevereRestrictionTemp))) {
+ return gtk_combo_box_get_active(GTK_COMBO_BOX(edit_widgets->cmbSevereRestrictionTemp));
+ }
+ else {
+ return -3;
+ }
}
int edit_get_limit_cpu_size() {
return -1;
}
int edit_get_limit_swap_size() {
- return gtk_combo_box_get_active(GTK_COMBO_BOX(edit_widgets->cmbPaddingFLEdit));
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(edit_widgets->chkPaddingFLTemp))) {
+ return gtk_combo_box_get_active(GTK_COMBO_BOX(edit_widgets->cmbPaddingFLTemp));
+ }
+ else {
+ return -3;
+ }
+}
+int edit_get_quota_object_size() {
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(edit_widgets->chkPaddingFLTemp))) {
+ return gtk_combo_box_get_active(GTK_COMBO_BOX(edit_widgets->cbxTempQuotaObj));
+ }
+ else {
+ return -3;
+ }
}
-char* edit_get_read_device() {
- return philos_get_size_bite(edit_widgets->chbEditRead, edit_widgets->spinEditRead,
- edit_widgets->cbtEditRead);
-}
-char* edit_get_write_device() {
- return philos_get_size_bite(edit_widgets->chbEditWrite, edit_widgets->spinEditWrite,
- edit_widgets->cbtEditWrite);
-}
-char* edit_get_soft() {
- return philos_get_size_bite(edit_widgets->chkSoftRestrictionEdit, edit_widgets->spiSevereRestrictionEdit,
- edit_widgets->cmSevereRestrictionEdit);
-}
-char* edit_get_hard() {
- return philos_get_size_bite(edit_widgets->chkSevereRestrictionEdit, edit_widgets->spinSevereRestrictionEdit,
- edit_widgets->cmbSevereRestrictionEdit);
-}
-char* edit_get_limit_cpu() {
- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(edit_widgets->chkCPULimitEdit))) {
- int size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(edit_widgets->spinCPULimitEdit));
- return yon_char_from_int(size_bite);
+int** edit_get_read_device() {
+ return &obj_edit_config.i_o_limit_read;
+}
+int** edit_get_read_device_size_pow() {
+ return &obj_edit_config.i_o_limit_read_size;
+}
+int** edit_get_write_device() {
+ return &obj_edit_config.i_o_limit_write;
+}
+int** edit_get_write_device_size_pow() {
+ return &obj_edit_config.i_o_limit_write_size;
+}
+char*** edit_get_select_write_device() {
+ return &obj_edit_config.disk_write;
+}
+char*** edit_get_select_read_device() {
+ return &obj_edit_config.disk_read;
+}
+int edit_get_soft() {
+ return gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(edit_widgets->spiSevereRestrictionTemp));
+}
+int edit_get_hard() {
+ return gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(edit_widgets->spinSevereRestrictionTemp));
+}
+int edit_get_limit_cpu() {
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(edit_widgets->chkCPULimitTemp))) {
+ return gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(edit_widgets->spinCPULimitTemp));
}
else {
- char* str = (char*)malloc(sizeof(char*)*2);
- str[0] = '-';
- str[1] = '\0';
- return str;
+ return -3;
}
}
-char* edit_get_limit_swap() {
- return philos_get_size_bite(edit_widgets->chkPaddingFLEdit, edit_widgets->spinPaddingFLEdit,
- edit_widgets->cmbPaddingFLEdit);
+int edit_get_limit_swap() {
+ return gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(edit_widgets->spinPaddingFLTemp));
}
-// =================================================================
-void edit_set_select_device(char* str_value, int pow_mem) {
- puts(str_value);
-}
-void edit_set_read_device(char* str_value, int pow_mem) {
- edit_temp_set(str_value,pow_mem, edit_widgets->chbEditRead,
- edit_widgets->spinEditRead,
- edit_widgets->cbtEditRead);
-}
-void edit_set_write_device(char* str_value, int pow_mem) {
- edit_temp_set(str_value,pow_mem, edit_widgets->chbEditWrite,
- edit_widgets->spinEditWrite,
- edit_widgets->cbtEditWrite);
-}
-void edit_set_soft(char* str_value, int pow_mem) {
- edit_temp_set(str_value,pow_mem, edit_widgets->chkSoftRestrictionEdit,
- edit_widgets->spiSevereRestrictionEdit,
- edit_widgets->cmSevereRestrictionEdit);
-}
-void edit_set_hard(char* str_value, int pow_mem) {
- edit_temp_set(str_value,pow_mem, edit_widgets->chkSevereRestrictionEdit,
- edit_widgets->spinSevereRestrictionEdit,
- edit_widgets->cmbSevereRestrictionEdit);
-}
-void edit_set_limit_cpu(char* str_value, int pow_mem) {
- edit_temp_set(str_value,pow_mem, edit_widgets->chkCPULimitEdit,
- edit_widgets->spinCPULimitEdit,
- edit_widgets->lblCPULimitEdit);
-}
-void edit_set_limit_swap(char* str_value, int pow_mem) {
- edit_temp_set(str_value,pow_mem, edit_widgets->chkPaddingFLEdit,
- edit_widgets->spinPaddingFLEdit,
- edit_widgets->cmbPaddingFLEdit);
-}
-void edit_temp_set(char* str_value, int pow_mem, GtkWidget* cheek, GtkWidget* spin, GtkWidget* combo_box_text) {
- char* search = "-";
- char* mem_size_pow = yon_char_new(str_value);
- if (yon_char_find_count(mem_size_pow, search) == 0) {
- int value = atoi(yon_char_divide_search(mem_size_pow, " ", -1));
- gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin), value);
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cheek), 1);
- if (combo_box_text != NULL) {
- // Todo: add code
- gtk_combo_box_set_active(GTK_COMBO_BOX(combo_box_text), pow_mem);
-
+void edit_set_select_read_device(char*** str_value) {
+ if (str_value) {
+ if ((*str_value)) {
+ yon_char_parsed_copy(&obj_edit_config.disk_read, str_value);
}
}
- else {
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cheek), 0);
- }
}
-void edit_generate_cmd() {
- char* str_cmd = "";
- char* split_simvol = g_malloc0(sizeof(char)*2);
- int size_bite = 0;
- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(edit_widgets->chkSoftRestrictionEdit))) {
- size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(edit_widgets->spiSevereRestrictionEdit));
- str_cmd = yon_char_unite(str_cmd,
- "MemoryHigh=",
- yon_char_from_int(size_bite),
- philos_str_size_pow_byte(edit_widgets->cmSevereRestrictionEdit), NULL);
- split_simvol[0] = ',';
- split_simvol[1] = '\0';
+void edit_set_select_write_device(char*** str_value) {
+ if (str_value) {
+ if ((*str_value)) {
+ yon_char_parsed_copy(&obj_edit_config.disk_write, str_value);
+ }
}
- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(edit_widgets->chkSevereRestrictionEdit))) {
- size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(edit_widgets->spinSevereRestrictionEdit));
- str_cmd = yon_char_unite(str_cmd, split_simvol,
- "MemoryMax=",
- yon_char_from_int(size_bite),
- philos_str_size_pow_byte(edit_widgets->cmbSevereRestrictionEdit), NULL);
- split_simvol[0] = ',';
- split_simvol[1] = '\0';
+}
+int set_template_gui_device(int flag_check_array) {
+ int index = -1;
+ if (flag_check_array==0) {
+ index = yon_gtk_combo_box_text_find(edit_widgets->cbtTempDevice, obj_edit_config.disk_read[0]);
+ gtk_combo_box_set_active(GTK_COMBO_BOX(edit_widgets->cbtTempDevice), index);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(edit_widgets->chbTempRead), 1);
+ edit_temp_set(obj_edit_config.i_o_limit_read[0],
+ obj_edit_config.i_o_limit_read_size[0], edit_widgets->chbTempRead,
+ edit_widgets->spinTempRead,
+ edit_widgets->cbtTempRead);
}
- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(edit_widgets->chkPaddingFLEdit))) {
- size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(edit_widgets->spinPaddingFLEdit));
- str_cmd = yon_char_unite(str_cmd, split_simvol,
- "MemorySwapMax=",
- yon_char_from_int(size_bite),
- philos_str_size_pow_byte(edit_widgets->cmbPaddingFLEdit), NULL);
- split_simvol[0] = ',';
- split_simvol[1] = '\0';
+ else if (flag_check_array==1) {
+ index = yon_gtk_combo_box_text_find(edit_widgets->cbtTempDevice, obj_edit_config.disk_write[0]);
+ gtk_combo_box_set_active(GTK_COMBO_BOX(edit_widgets->cbtTempDevice), index);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(edit_widgets->chbTempWrite), 1);
+ edit_temp_set(obj_edit_config.i_o_limit_write[0],
+ obj_edit_config.i_o_limit_write_size[0],
+ edit_widgets->chbTempWrite,
+ edit_widgets->spinTempWrite,
+ edit_widgets->cbtTempWrite);
}
- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(edit_widgets->chkCPULimitEdit))) {
- size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(edit_widgets->spinCPULimitEdit));
- str_cmd = yon_char_unite(str_cmd, split_simvol,
- "CPUQuota=",
- yon_char_from_int(size_bite),
- "\%", NULL);
- split_simvol[0] = ',';
- split_simvol[1] = '\0';
+ return index;
+}
+void set_gui_device() {
+ int flag = -1;
+ if (obj_edit_config.disk_read) {
+ if (obj_edit_config.disk_read[0] != NULL && strstr(obj_edit_config.disk_read[0], "-") == NULL) {
+ flag = set_template_gui_device(0);
+ }
}
- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(edit_widgets->chbEditRead))) {
- int menu_id = gtk_combo_box_get_active(GTK_COMBO_BOX(edit_widgets->cbtEditDevice));
- if (menu_id != -1) {
- size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(edit_widgets->spinEditRead));
- str_cmd = yon_char_unite(str_cmd, split_simvol,
- "IOReadBandwidthMax=\"",
- get_device_cfg()->name_disk[menu_id],
- " ",
- yon_char_from_int(size_bite),
- philos_str_size_pow_byte(edit_widgets->cbtEditRead),"\"", NULL);
+ if (obj_edit_config.disk_write) {
+ if (obj_edit_config.disk_write[0] != NULL && strstr(obj_edit_config.disk_write[0], "-") == NULL) {
+ flag = set_template_gui_device(1);
}
- split_simvol[0] = ',';
- split_simvol[1] = '\0';
-
+
+ }
+}
+void edit_set_read_device(int* str_value, int* pow_mem) {
+ if (str_value && pow_mem) {
+ philos_array_int_copy(&obj_edit_config.i_o_limit_read, &str_value);
+ philos_array_int_copy(&obj_edit_config.i_o_limit_read_size, &pow_mem);
+ }
+}
+void edit_set_write_device(int* str_value, int* pow_mem) {
+ if (str_value && pow_mem) {
+ philos_array_int_copy(&obj_edit_config.i_o_limit_write, &str_value);
+ philos_array_int_copy(&obj_edit_config.i_o_limit_write_size, &pow_mem);
}
- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(edit_widgets->chbEditWrite))) {
- int menu_id = gtk_combo_box_get_active(GTK_COMBO_BOX(edit_widgets->cbtEditDevice));
- if (menu_id != -1) {
- size_bite = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(edit_widgets->spinEditWrite));
- str_cmd = yon_char_unite(str_cmd, split_simvol,
- "IOWriteBandwidthMax=\"",
- get_device_cfg()->name_disk[menu_id],
- " ",
- yon_char_from_int(size_bite),
- philos_str_size_pow_byte(edit_widgets->cbtEditWrite),"\"", NULL);
+
+}
+void edit_set_size_arrays(size_t size_array) {
+ obj_edit_config.size_disk = size_array;
+}
+
+void edit_set_soft(int value, int pow_mem) {
+ edit_temp_set(value,pow_mem, edit_widgets->chkSoftRestrictionTemp,
+ edit_widgets->spiSevereRestrictionTemp,
+ edit_widgets->cmSevereRestrictionTemp);
+}
+void edit_set_hard(int value, int pow_mem) {
+ edit_temp_set(value,pow_mem, edit_widgets->chkSevereRestrictionTemp,
+ edit_widgets->spinSevereRestrictionTemp,
+ edit_widgets->cmbSevereRestrictionTemp);
+}
+void edit_set_limit_cpu(int value, int pow_mem) {
+ edit_temp_set(value,pow_mem, edit_widgets->chkCPULimitTemp,
+ edit_widgets->spinCPULimitTemp,
+ NULL);
+}
+void edit_set_limit_swap(int value, int pow_mem) {
+ edit_temp_set(value,pow_mem, edit_widgets->chkPaddingFLTemp,
+ edit_widgets->spinPaddingFLTemp,
+ edit_widgets->cmbPaddingFLTemp);
+}
+void edit_temp_set(int value, int pow_mem, GtkWidget* cheek, GtkWidget* spin, GtkWidget* combo_box_text) {
+ if (pow_mem>=-1 && value>=0) {
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin), value);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cheek), 1);
+ if (combo_box_text) {
+ gtk_combo_box_set_active(GTK_COMBO_BOX(combo_box_text), pow_mem);
}
}
- gtk_entry_set_text(GTK_ENTRY(edit_widgets->entryEditCmd), str_cmd);
- free(split_simvol);
+ else {
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cheek), 0);
+ }
}
diff --git a/source/view_edit.h b/source/view_edit.h
index 32fd5f9..e8bf8da 100644
--- a/source/view_edit.h
+++ b/source/view_edit.h
@@ -12,72 +12,53 @@
#include
#include
#include "my_device.h"
+#include "philos_utils.h"
-// Переменные
-typedef struct {
- GtkWidget* Window;
- GtkWidget* btnSaveEditSave;
- GtkWidget* btnEditCancel;
-
- GtkWidget* entryEditCmd;
- GtkWidget* chbEditRead;
- GtkWidget* spinEditRead;
- GtkWidget* cbtEditRead;
-
- GtkWidget* chbEditWrite;
- GtkWidget* spinEditWrite;
- GtkWidget* cbtEditWrite;
-
- GtkWidget* chkSoftRestrictionEdit;
- GtkWidget* spiSevereRestrictionEdit;
- GtkWidget* cmSevereRestrictionEdit;
-
- GtkWidget* chkSevereRestrictionEdit;
- GtkWidget* spinSevereRestrictionEdit;
- GtkWidget* cmbSevereRestrictionEdit;
-
- GtkWidget* chkPaddingFLEdit;
- GtkWidget* spinPaddingFLEdit;
- GtkWidget* cmbPaddingFLEdit;
-
- GtkWidget* chkCPULimitEdit;
- GtkWidget* spinCPULimitEdit;
- GtkWidget* lblCPULimitEdit;
- GtkWidget* cbtEditDevice;
-} edit_window;
+#define CMD_CPU "lscpu | grep \"CPU(s):\" |grep -oE \"[0-9]{1,}\""
+#define CMD_SWAP "grep '^Swap' /proc/meminfo | grep \"SwapTotal\" |grep -oE \"[0-9]{1,}\""
+#define CMD_RAW "cat /proc/meminfo | grep \"MemTotal\" |grep -oE \"[0-9]{1,}\""
// Функции
-edit_window *edit_setup_window(char* glade_path);
-void edit_event(edit_window *widgets);
-void edit_localization(edit_window *widgets);
+temp_set_window *edit_setup_window(char* glade_path);
+void edit_event(temp_set_window *widgets);
+void edit_localization(temp_set_window *widgets);
void edit_on_hide_subwindow(GtkWidget *self);
-edit_window *get_widget_edit();
+temp_set_window *get_widget_edit();
+void combo_box_device_edit();
void edit_show(GtkWidget *self, char* glade_path);
void edit_destroy(GtkWidget *self);
void edit_init_windows();
-void edit_set_active_widgets(GtkWidget *self, GtkWidget *entry, GtkWidget *label);
-char* edit_get_select_device();
-char* edit_get_read_device();
-char* edit_get_write_device();
-char* edit_get_soft();
-char* edit_get_hard();
-char* edit_get_limit_cpu();
-char* edit_get_limit_swap();
-void edit_generate_cmd();
+void wrapper_edit_init_windows_size_memory();
+void edit_set_active_widgets(GtkWidget *check, GtkWidget *spin, GtkWidget *combo, int flag_cpu, char* cmd);
+char*** edit_get_select_read_device();
+char*** edit_get_select_write_device();
+int** edit_get_read_device();
+int** edit_get_write_device();
+int edit_get_soft();
+int edit_get_hard();
+int edit_get_limit_cpu();
+int edit_get_limit_swap();
void wrapper_edit_show();
-void edit_set_select_device(char* str_value, int pow_mem);
-void edit_set_read_device(char* str_value, int pow_mem);
-void edit_set_write_device(char* str_value, int pow_mem);
-void edit_set_soft(char* str_value, int pow_mem);
-void edit_set_hard(char* str_value, int pow_mem);
-void edit_set_limit_cpu(char* str_value, int pow_mem);
-void edit_set_limit_swap(char* str_value, int pow_mem);
-void edit_temp_set(char* str_value, int pow_mem, GtkWidget* cheek, GtkWidget* spin, GtkWidget* combo_box_text);
+void edit_set_select_write_device(char*** str_value);
+void edit_set_select_read_device(char*** str_value);
+void edit_set_read_device(int* str_value, int* pow_mem);
+void edit_set_write_device(int* str_value, int* pow_mem);
+void edit_set_soft(int value, int pow_mem);
+void edit_set_hard(int value, int pow_mem);
+void edit_set_limit_cpu(int value, int pow_mem);
+void edit_set_limit_swap(int value, int pow_mem);
+void edit_temp_set(int value, int pow_mem, GtkWidget* cheek, GtkWidget* spin, GtkWidget* combo_box_text);
+int** edit_get_read_device_size_pow();
+int** edit_get_write_device_size_pow();
-int edit_get_read_device_size();
-int edit_get_write_device_size();
+void edit_set_size_arrays(size_t size_array);
int edit_get_soft_size();
int edit_get_hard_size();
int edit_get_limit_cpu_size();
int edit_get_limit_swap_size();
+void edit_config_init();
+void set_gui_device();
+temp_config* get_edit_config();
+void edit_set_active_widgets_device_io(GtkWidget *check, GtkWidget *spin, GtkWidget *combo);
+void edit_set_spin_adjustment(GtkWidget *check, GtkWidget *spin, GtkWidget *combo, size_t value);
#endif
\ No newline at end of file
diff --git a/ubl-settings-resourcequota.css b/ubl-settings-resourcequota.css
index 34e17f4..49019ef 100644
--- a/ubl-settings-resourcequota.css
+++ b/ubl-settings-resourcequota.css
@@ -51,68 +51,93 @@
}
.menu:hover >* {
border-color:alpha(@theme_text_color, 0.01);
-}
-.menuitembottom{
- margin-top:0px;
- margin-bottom:3px;
-}
-.menuitemmiddle{
- margin-top:0px;
- margin-bottom:0px;
-}
-
-.menuitemtop{
- margin-bottom:0px;
-}
-.menuitemtop *{
- margin:2px 2px 0 2px;
- padding: 5px 10px 3px 5px;
-}
-.menuitemmiddle *{
- margin:0 2px 0 2px;
- padding: 3px 10px 3px 5px;
-}
-.menuitembottom *{
- margin:0 2px 2px 2px;
- padding: 3px 10px 5px 5px;
-}
-.menuitemtop:hover {
- background:@theme_bg_color;
- border-color:inherit;
- border-left-width:inherit;
- border-right-width:inherit;
-}
-.menuitemmiddle:hover {
- background:@theme_bg_color;
- border-color:inherit;
- border-left-width:inherit;
- border-right-width:inherit;
-}
-.menuitembottom:hover {
- background:@theme_bg_color;
- border-color:inherit;
- border-left-width:inherit;
- border-right-width:inherit;
+}.menuitembottom{
+ margin-top:0px;
+ margin-bottom:3px;
+ border-color:inherit;
+ border-left-width:inherit;
+ border-right-width:inherit;
+ }
+ .menuitemmiddle{
+ margin-top:0px;
+ margin-bottom:0px;
+ border-color:inherit;
+ border-left-width:inherit;
+ border-right-width:inherit;
+ }
-}
-.menuitemtop:hover* {
- margin:2px 2px 0 2px;
- padding: 5px 10px 3px 5px;
- background:@theme_selected_bg_color;
- border-radius:2px;
-}
-.menuitemmiddle:hover* {
- margin:0 2px 0 2px;
- padding: 3px 10px 3px 5px;
- background:@theme_selected_bg_color;
- border-radius:2px;
-}
-.menuitembottom:hover* {
- margin:0 2px 2px 2px;
- padding: 3px 10px 5px 5px;
- background:@theme_selected_bg_color;
- border-radius:2px;
-}
+ .menuitemtop{
+ margin-bottom:0px;
+ border-color:inherit;
+ border-top-width:inherit;
+ border-left-width:inherit;
+ border-right-width:inherit;
+ }
+ .menuitemtop *{
+ margin:2px 2px 0 2px;
+ padding-top:2px;
+ padding-bottom:2px;
+ /* padding: 5px 0px 3px 5px; */
+ border:transparent;
+ }
+ .menuitemmiddle *{
+ margin:0 2px 0 2px;
+ padding-top:2px;
+ padding-bottom:2px;
+ /* padding: 3px 0px 3px 5px; */
+ border:transparent;
+ }
+ .menuitembottom *{
+ margin:0 2px 2px 2px;
+ padding-top:2px;
+ padding-bottom:2px;
+ /* padding: 3px 0px 5px 5px; */
+ }
+ .menuitemtop:hover {
+ background:@theme_bg_color;
+ border-color:inherit;
+ border-top-width:inherit;
+ border-left-width:inherit;
+ border-right-width:inherit;
+ }
+ .menuitemmiddle:hover {
+ background:@theme_bg_color;
+ border-color:inherit;
+ border-left-width:inherit;
+ border-right-width:inherit;
+ }
+ .menuitembottom:hover {
+ background:@theme_bg_color;
+ border-color:inherit;
+ border-bottom-width:0px;
+ border-left-width:inherit;
+ border-right-width:inherit;
+
+ }
+ .menuitemtop:hover* {
+ margin:2px 2px 0 2px;
+ padding-top:2px;
+ padding-bottom:2px;
+ /* padding: 5px 0 3px 5px; */
+ background:@theme_selected_bg_color;
+ border-radius:2px;
+ }
+ .menuitemmiddle:hover* {
+ margin:0 2px 0px 2px;
+ padding-top:2px;
+ padding-bottom:2px;
+ /* padding: 3px 0px 3px 5px; */
+ background:@theme_selected_bg_color;
+ border-radius:2px;
+ }
+ .menuitembottom:hover* {
+ margin:0 2px 2px 2px;
+ padding-top:2px;
+ padding-bottom:2px;
+ /* padding: 3px 0px 5px 5px; */
+ background:@theme_selected_bg_color;
+ border-radius:2px;
+ }
.workingbg, #workingbg {
background-color:@theme_base_color;
diff --git a/ubl-settings-resourcequota.desktop b/ubl-settings-resourcequota.desktop
index 9d7483e..32ab4e6 100644
--- a/ubl-settings-resourcequota.desktop
+++ b/ubl-settings-resourcequota.desktop
@@ -7,7 +7,7 @@ GenericName[ru]=Квоты процессора и ОЗУ
Comment=Configuring CPU and RAM quota settings for groups and users of the system
Comment[ru]=Настройка параметров квот процессорного времени и ОЗУ для групп и пользователей системы
Type=Application
-Exec=ubl-settings-resourcequota
+Exec=pkexec ubl-settings-resourcequota
Icon=com.ublinux.ubl-settings-resourcequota
Terminal=false
X-XfcePluggable=true
diff --git a/ubl-settings-resourcequota.glade b/ubl-settings-resourcequota.glade
index c9045b9..06150b9 100644
--- a/ubl-settings-resourcequota.glade
+++ b/ubl-settings-resourcequota.glade
@@ -72,6 +72,7 @@
-
-