#include <gtk/gtk.h> 
#include <gtk/gtkx.h> 
#include <locale.h> 
#include <stdio.h> 
#include <unistd.h> 
#include <stdlib.h> 
#include <libintl.h> 
#include <getopt.h> 
#include <libintl.h> 
#include <json-c/json.h> 
#include <sys/statvfs.h>
#include <libublsettings.h>
#include <libublsettings-gtk3.h>
#ifdef WEBKIT_FOUND 
    #include <webkit2/webkit2.h> 
#endif  
#include "ubl-strings.h" 
 
#define WIKI_LINK "https://wiki.ublinux.ru/ru/Программное_обеспечение/Программы_и_утилиты/Все/ubinstall-gtk" 
 
#define _(String) gettext(String) 
 
#define glade_path "/com/ublinux/ui/ubinstall-gtk.glade"
#define glade_path_ubinstall_keyboard "/com/ublinux/ui/ubinstall-gtk-keyboard.glade"
#define glade_path_ubinstall_language "/com/ublinux/ui/ubinstall-gtk-language.glade"
#define glade_path_log_view "/com/ublinux/ui/ubinstall-gtk-log-view.glade"
#define ui_glade_path_about "/com/ublinux/ui/ubinstall-gtk-about.glade"
#define ui_glade_path_documentation "/com/ublinux/ui/ubinstall-gtk-documentation.glade"
#define glade_path_confirmation "/com/ublinux/ui/ubinstall-gtk-warning.glade"
 
#define CssPath "/com/ublinux/css/ubinstall-gtk.css" 
#define config_path yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL) 
#define icon_path "com.ublinux.ubinstall-gtk"

#define LocalePath "/usr/share/locale"  
#define LocaleName "ubinstall-gtk" 
 
#define clear_config_both_command "ubconfig remove TEMP_SECTION TEMP_PATAMETER" 
#define clear_config_global_command "ubconfig --target global remove TEMP_SECTION TEMP_PATAMETER" 
#define clear_config_local_command "ubconfig --target system remove TEMP_SECTION TEMP_PATAMETER" 
 
#define regions_path "/com/ublinux/images/map-time-zone.png"
#define keyboard_path "/com/ublinux/images/keyboard.png"

#define licence_path "/usr/share/ublinux/agreement/EULA.txt"

#define languages_path "/usr/share/ubinstall-gtk/csv/locales.csv"

#define zone_path "/usr/share/zoneinfo/"

#define additional_software_path "resource:///com/ublinux/csv/modules.csv"

#define slide_0_path "/com/ublinux/images/slide-0.png"

#define slide_repeat_path "/com/ublinux/images/slide-1.png", \
"/com/ublinux/images/slide-2.png", \
"/com/ublinux/images/slide-3.png", \
"/com/ublinux/images/slide-4.png", \
"/com/ublinux/images/slide-5.png", \
"/com/ublinux/images/slide-6.png", \
"/com/ublinux/images/slide-7.png", \
"/com/ublinux/images/slide-8.png", \
"/com/ublinux/images/slide-9.png", \
"/com/ublinux/images/slide-10.png", \
"/com/ublinux/images/slide-11.png", \
"/com/ublinux/images/slide-12.png", \
NULL

#define get_models_command "sed '/<\\/modelList>/q' /usr/share/X11/xkb/rules/base.xml | grep -E '^ {8,8}<name>|^ {8,8}<description>'|sed -e 's/  *<name>//g' -e 's,</name>,,g' -e 's/  *<description>//g' -e 's,</description>,,g'"

#define check_is_password_hash(password) system(yon_char_unite("/lib/ublinux/functions is_hash_password '", password,"'",NULL))

#define get_layouts_command "xkbcli list --load-exotic | awk \"layout && /description:/ {match(\\$0,/: *(.*)/,matches);description=matches[1];printf \\\"%s|%s\\n\\\",layout,description;layout=\\\"\\\"} /layout:/ {match(\\$0, /: *'([^']+)'/,matches);l=matches[1];if (layouts[l]) next;layout=layouts[l]=l}\" | sort -u"
#define get_layouts_local_command(layout) yon_char_unite("xkbcli list --load-exotic | awk -v layout=\"",layout,"\" \"BEGIN {layout_pattern = sprintf(\\\"^ *- *layout: *'%s'\\\",layout);matched=0} matched && /variant:/ {match(\\$0, /: *'([^']+)'/, matches);variant = matches[1]} matched && /description:/ {match(\\$0, /: *(.+)/, matches);description = matches[1]} matched && /^ *-/{matched=0; if (variant) printf \\\"%s|%s\\n\\\",variant,description} \\$0 ~ layout_pattern {matched=1;variant=\\\"\\\";description=\\\"\\\";next}\" | sort -u",NULL)
#define get_devices_command "lsblk --noheadings --nodeps -Jo PATH,SIZE,MODEL,VENDOR,SERIAL --exclude 7,253"
#define get_parts_and_devices_command "lsblk --noheadings -Jo TYPE,PATH,SIZE,FSTYPE,LABEL,PARTLABEL,MOUNTPOINT,FSUSED,FSUSE% --exclude 7,253"

#define AUTOINSTALL_TYPE_INSTALL "AUTOINSTALL[install_type]"
#define AUTOINSTALL_DEVICE "AUTOINSTALL[device]"
#define part_parameter "AUTOINSTALL[part]"

#define user_name_parameter "AUTOINSTALL[user_name]"
#define user_name_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[user_name]"
#define user_gecos_parameter "AUTOINSTALL[user_gecos]"
#define user_gecos_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[user_gecos]"
#define user_password_parameter "AUTOINSTALL[user_password]"
#define user_password_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[user_password]"
#define root_password_parameter "AUTOINSTALL[root_password]"
#define root_password_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[root_password]"
#define autologin_parameter "AUTOINSTALL[autologin]"
#define autologin_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[autologin]"
#define xkbmodel_parameter "AUTOINSTALL[xkbmodel]"
#define xkbmodel_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[xkbmodel]"
#define xkblayout_parameter "AUTOINSTALL[xkblayout]"
#define xkblayout_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[xkblayout]"
#define xkbvariant_parameter "AUTOINSTALL[xkbvariant]"
#define xkbvariant_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[xkbvariant]"
#define xkboptions_parameter "AUTOINSTALL[xkboptions]"
#define xkboptions_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[xkboptions]"
#define hostname_parameter "AUTOINSTALL[hostname]"
#define hostname_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[hostname]"
#define zone_parameter "AUTOINSTALL[zone]"
#define zone_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[zone]"
#define lang_parameter "AUTOINSTALL[lang]"
#define lang_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[lang]"
#define locale_parameter "AUTOINSTALL[locale]"
#define locale_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[locale]"
#define device_format_parameter "AUTOINSTALL[device_format]"
#define device_format_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[device_format]"
#define device_label_parameter "AUTOINSTALL[part_label]"
#define device_label_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[part_label]"
#define part_size_parameter "AUTOINSTALL[part_size]"
#define part_size_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[part_size]"
#define part_type_parameter "AUTOINSTALL[part_fs_type]"
#define part_type_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[part_fs_type]"

#define save_config_command(parameters) yon_char_unite("pkexec bash -c 'ubconfig --target system set [autoinstall] AUTOINSTALL[log]=yes ",parameters, "; nice ubinstall2 --debug autoinstall'", NULL)

#define set_user_config_command(parameters) yon_char_unite("pkexec bash -c 'ubconfig --target system set [autoinstall] ",parameters,";nice ubinstall2 autoconfig'",NULL)
#define save_additional_config_command(parameters) yon_char_unite("pkexec bash -c 'ubconfig --target system set [autoinstall] ",parameters,"'",NULL)

#define open_gparted_command "gparted"

#define AUTOINSTALL_TYPE_INSTALL_command "ubconfig --source global get [autoinstall] AUTOINSTALL[install_type]"
#define AUTOINSTALL_DEVICE_command "ubconfig --source global get [autoinstall] AUTOINSTALL[device]"
#define part_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[part]"

#define PASSWORD_DEFAULT "ublinux"

#define start_fast_install_command "ubinstall2 --autoinstall"

#define progress_path "/var/log/ubinstall_progress.log"

#define password_limits_path "/etc/security/pwquiality.conf"

#define short_log_path "/var/log/ubinstall_progress.log"

#define full_log_path "/var/log/ubinstall.log"

#define yon_config_get_custom_command(target) yon_char_unite("ubconfig --source ",target," get [autoinstall] AUTOINSTALL[installer_lang] AUTOINSTALL[install_type] AUTOINSTALL[device] AUTOINSTALL[part] AUTOINSTALL[part_size] AUTOINSTALL[part_label] AUTOINSTALL[part_fs_type] AUTOINSTALL[part_format] UTOINSTALL[locale] AUTOINSTALL[lang] AUTOINSTALL[zone] AUTOINSTALL[user_name] AUTOINSTALL[user_gecos] AUTOINSTALL[user_password] AUTOINSTALL[root_password] AUTOINSTALL[autologin] AUTOINSTALL[xkbmodel] AUTOINSTALL[xkblayout] AUTOINSTALL[xkbvariant] AUTOINSTALL[xkboptions] AUTOINSTALL[hostname] AUTOINSTALL[modules] AUTOINSTALL[modules_extra] AUTOINSTALL[device_label] AUTOINSTALL[locale]",NULL)
#define config_get_local_command "ubconfig --source system get [autoinstall] AUTOINSTALL[installer_lang] AUTOINSTALL[install_type] AUTOINSTALL[device] AUTOINSTALL[part] AUTOINSTALL[part_size] AUTOINSTALL[part_label] AUTOINSTALL[part_fs_type] AUTOINSTALL[part_format] UTOINSTALL[locale] AUTOINSTALL[lang] AUTOINSTALL[zone] AUTOINSTALL[user_name] AUTOINSTALL[user_gecos] AUTOINSTALL[user_password] AUTOINSTALL[root_password] AUTOINSTALL[autologin] AUTOINSTALL[xkbmodel] AUTOINSTALL[xkblayout] AUTOINSTALL[xkbvariant] AUTOINSTALL[xkboptions] AUTOINSTALL[hostname] AUTOINSTALL[modules] AUTOINSTALL[modules_extra] AUTOINSTALL[device_label] AUTOINSTALL[locale]"
#define config_get_global_command yon_char_new("ubconfig --source global get [autoinstall] AUTOINSTALL[installer_lang] AUTOINSTALL[install_type] AUTOINSTALL[device] AUTOINSTALL[part] AUTOINSTALL[part_size] AUTOINSTALL[part_label] AUTOINSTALL[part_fs_type] AUTOINSTALL[part_format] UTOINSTALL[locale] AUTOINSTALL[lang] AUTOINSTALL[zone] AUTOINSTALL[user_name] AUTOINSTALL[user_gecos] AUTOINSTALL[user_password] AUTOINSTALL[root_password] AUTOINSTALL[autologin] AUTOINSTALL[xkbmodel] AUTOINSTALL[xkblayout] AUTOINSTALL[xkbvariant] AUTOINSTALL[xkboptions] AUTOINSTALL[hostname] AUTOINSTALL[modules] AUTOINSTALL[modules_extra] AUTOINSTALL[device_label] AUTOINSTALL[locale]")
#define config_get_default_command "ubconfig --source default get [autoinstall] AUTOINSTALL[installer_lang] AUTOINSTALL[install_type] AUTOINSTALL[device] AUTOINSTALL[part] AUTOINSTALL[part_size] AUTOINSTALL[part_label] AUTOINSTALL[part_fs_type] AUTOINSTALL[part_format] UTOINSTALL[locale] AUTOINSTALL[lang] AUTOINSTALL[zone] AUTOINSTALL[user_name] AUTOINSTALL[user_gecos] AUTOINSTALL[user_password] AUTOINSTALL[root_password] AUTOINSTALL[autologin] AUTOINSTALL[xkbmodel] AUTOINSTALL[xkblayout] AUTOINSTALL[xkbvariant] AUTOINSTALL[xkboptions] AUTOINSTALL[hostname] AUTOINSTALL[modules] AUTOINSTALL[modules_extra] AUTOINSTALL[device_label] AUTOINSTALL[locale]"

#define config_get_global_only_parameters ""
#define config_get_local_only_parameters ""

#define ubconfig_file_create(target) yon_char_unite("ubconfig --target \"",target,"\" create",NULL)

typedef char* string; 
string version_application;
 
char *local; 
 
enum YON_PAGES {
	YON_PAGE_WELCOME = 0,
	YON_PAGE_LICENCE,
	YON_PAGE_SECTIONS,
	YON_PAGE_OS_COMPONENTS,
	YON_PAGE_SOFTWARE,
	YON_PAGE_INSTALLATION_BEGIN,
	YON_PAGE_INSTALLATION,
	YON_PAGE_REGION,
	YON_PAGE_KEYBOARD,
	YON_PAGE_USERS,
	YON_PAGE_COMPLETION,
	YON_PAGE_COMPLETED,
	YON_PAGE_INSTALL_COMMON,
	YON_PAGE_INSTALL_SEPARATE,
	YON_PAGE_INSTALL_SAME_PARTITION,
	YON_PAGE_INSTALL_OPTIONS,
	YON_PAGE_OPTIONS_GRUB_INSTALL,
	YON_PAGE_OPTIONS_GRUB_UPDATE,
	YON_PAGE_OPTIONS_SEPARATE,
	YON_PAGE_OPTIONS_SEPARATE_USRDATA,
	YON_PAGE_OPTIONS_OS_ONLY,
	YON_PAGE_OPTIONS_USRDATA_ONLY,
	YON_PAGE_INSTALL_ERROR,
	YON_PAGE_CONFIGURE_END
};

typedef struct { 
    int socket_id; 
    int load_socket_id; 
    int save_socket_id; 
     
    int lock_help; 
    int lock_save_local; 
    int lock_save_global; 
    int lock_load_global; 
 
    int always_open_documentation; 

	int password_min_length;

	int save_done;
	int load_mode;
 
	int install_complete;
    int debug_mode;
	guint slider_thread;
	int install_mode;
	GThread *config_save_thread;
	unsigned long install_thread;
	guint progress_thread;
	int configure_mode;
	int log_progress_buzy;
	int autologin_default;
	int format_default;
	int log_end;
	int exit_accepted;
} config; 
 
typedef struct { 
	GtkBuilder *builder;
    GtkListStore *DevicesList;
	GtkListStore *LanguagesList;
	GtkTreeStore *LayoutList;
	GtkListStore *AdditionalSoftwareList;
	GtkListStore *PartitionsList;

	GtkWidget *LoadGlobalConfigurationMenuItem;
	GtkWidget *LoadLocalConfigurationMenuItem;
	GtkWidget *LoadExternalConfigurationMenuItem;

	GtkWidget *SaveGlobalLocalConfigurationMenuItem;
	GtkWidget *SaveGlobalConfigurationMenuItem;
	GtkWidget *SaveLocalConfigurationMenuItem;
	GtkWidget *SaveExternalConfigurationMenuItem;

	GtkWidget *SaveButton;

	GtkWidget *MainWindow;

	GtkWidget *StatusBox;
	GtkWidget *WelcomeToggle;
	GtkWidget *LicenceToggle;
	GtkWidget *LocationToggle;
	GtkWidget *KeyboardToggle;
	GtkWidget *SectionsToggle;
	GtkWidget *UsersToggle;
	GtkWidget *SummaryToggle;
	GtkWidget *CompletionToggle;
	GtkWidget *InstallationToggle;
	GtkWidget *LanguageCombo;
	GtkWidget *RegionCombo;
	GtkWidget *ZoneCombo;
	GtkWidget *AvailableLanguagesEntry;
	GtkWidget *AvailableLanguagesButton;
	GtkWidget *LanguagesCombo;
	GtkWidget *KeyboardModelCombo;
	GtkWidget *LayoutBindingCombo;
	GtkWidget *DefaultLayoutRadio;
	GtkWidget *ManualLayoutRadio;
	GtkWidget *LayoutTree;
	GtkWidget *AddButton;
	GtkWidget *RemoveButton;
	GtkWidget *InstallationRadio;
	GtkWidget *InstallationNearRadio;
	GtkWidget *InstallationLinuxRadio;
	GtkWidget *InstallationWindowsRadio;
	GtkWidget *InstallationOptionsRadio;
	GtkWidget *UserNameEntry;
	GtkWidget *LoginEntry;
	GtkWidget *PasswordCombo;
	GtkWidget *PasswordEntry;
	GtkWidget *PasswordButton;
	GtkWidget *AutologinCheck;
	GtkWidget *AdminPasswordCombo;
	GtkWidget *AdminPasswordEntry;
	GtkWidget *AdminPasswordButton;
	GtkWidget *HotnameEntry;
	GtkWidget *AutoHostnameCheck;
	GtkWidget *CancelInstallButton;
	GtkWidget *BackButton;
	GtkWidget *NextButton;
	GtkWidget *mainSettingsButton;
	GtkWidget *menu1;
	GtkWidget *menu2;
	GtkWidget *RegionImage;
	GtkWidget *RegionBox;
	GtkWidget *RegionAspect;
	GtkWidget *KeyboardImage;
	GtkWidget *KeyboardBox;
	GtkWidget *Notebook;
	GtkWidget *LicenceLabel;
	GtkWidget *SlidesImage;

	GtkWidget *SameInstallationFilesystemTypeCombo;
	GtkWidget *SameInstallationFormatCheck;
	GtkWidget *SameInstallationSectionNameEntry;
	GtkWidget *NextInstallationFilesystemTypeCombo;
	GtkWidget *NextInstallationFormatCheck;
	GtkWidget *NextInstallationSectionNameEntry;
	GtkWidget *CommonInstallationFilesystemTypeCombo;
	GtkWidget *CommonInstallationSectionNameEntry;

	GtkWidget *InstallationNearSysDevicesTree;
	GtkWidget *InstallationNearSysSectionTree;
	GtkWidget *InstallationNearSizeSpin;
	GtkWidget *InstallationNearSizeTypeSpin;

	GtkWidget *SamePlaceDeviceTree;
	GtkWidget *SamePlacePartTree;

	GtkWidget *InstallationProgress;
	GtkWidget *InstallationLabel;
	GtkWidget *ReadShortLogButton;
	GtkWidget *PackageInstallationProgress;
	GtkWidget *PackageInstallationLabel;
	GtkWidget *ReadFullLogButton;

	GtkWidget *GpartedCommonButton;
	GtkWidget *GpartedNearButton;
	GtkWidget *GpartedSameButton;

	GtkWidget *ConfigurationModeMenuItem;
	GtkWidget *AboutMenuItem;
	GtkWidget *DocumentationMenuItem;

	GtkCellRenderer *AdditionalSoftwareCell;

	GtkWidget *CommonInstallationDevicesTree;
	GtkWidget *AdditionalSoftwareTree;
	
	GtkWidget *GrubInstallRadio;
	GtkWidget *GrubUpdateRadio;
	GtkWidget *SeparateRadio;
	GtkWidget *OSRadio;
	GtkWidget *UserDataOnlyRadio;

	GtkWidget *GpartedGrubInstallButton;
	GtkWidget *GrubInstallDevicesTree;

	GtkWidget *GpartedGrubUpdateButton;
	GtkWidget *GrubUpdateDevicesTree;

	GtkWidget *GpartedSeparateButton;
	GtkWidget *SeparateDevicesTree;
	GtkWidget *SeparateSysSectionTree;
	GtkWidget *GpartedSeparateUserButton;
	GtkWidget *SeparateUserDevicesTree;
	GtkWidget *SeparateUserSysSectionTree;

	GtkWidget *GpartedOSButton;
	GtkWidget *OSDevicesTree;
	GtkWidget *OSSysSectionTree;

	GtkWidget *GpartedUserdataButton;
	GtkWidget *UserdataDevicesTree;
	GtkWidget *UserdataSysSectionTree;

	GtkTreeModel *LanguagesFilter;
	GtkTreeModel *LayoutsFilter;

    GdkPixbuf *regions_original;
    GdkPixbuf *keyboard_original;
    GdkPixbuf **slides_original;
    float region_height_mult;
 
	GtkWidget *RegionSensitiveCheck;
	GtkWidget *LanguagesSensitiveCheck;
	GtkWidget *MainLanguageSensitiveCheck;
	GtkWidget *KeyboardModelSensitiveCheck;
	GtkWidget *OptionsSensitiveCheck;
	GtkWidget *LayoutSensitiveCheck;
	GtkWidget *UsernameSensitiveCheck;
	GtkWidget *LoginSensitiveCheck;
	GtkWidget *PasswordSensitiveCheck;
	GtkWidget *AutologinSensitiveCheck;
	GtkWidget *RootPasswordSensitiveCheck;
	GtkWidget *HostnameSensitiveCheck;
	GtkWidget *CommonFilesystemSensitiveCheck;
	GtkWidget *CommonSectionSensitiveCheck;
	GtkWidget *NextSizeSensitiveCheck;
	GtkWidget *NextFSTypeSensitiveCheck;
	GtkWidget *NextLabelSensitiveCheck;
	GtkWidget *SameFSTypeSensitiveCheck;
	GtkWidget *SameLabelSensitiveCheck;

} main_window; 
 
 
typedef struct { 
    GtkWidget *Window; 
    GtkWidget *HeaderLabel;
    GtkWidget *AlwaysOpenCheck; 
 
    GtkWidget *CloseButton; 
    GtkWidget *AcceptButton; 
} documentation_confirmation_window; 
 
typedef struct{
	GtkWidget *MainWindow;
	GtkWidget *StatusBox;
	GtkWidget *headerBar;
	GtkWidget *CancelButton;
	GtkWidget *SaveButton;
	GtkWidget *LayoutsTree;
	GtkCellRenderer *ActiveToggle;
} ubinstall_keyboard_window;

typedef struct{
	GtkListStore *liststore1;
	GtkWidget *MainWindow;
	GtkWidget *StatusBox;
	GtkWidget *DefaultCheck;
	GtkWidget *headerBar;
	GtkWidget *CancelButton;
	GtkWidget *SaveButton;
	GtkWidget *LanguagesTree;

	GtkCellRenderer *ToggleRenderer;
} ubinstall_language_window;

typedef struct{
	GtkWidget *CreateGroupWindow;
	GtkWidget *StatusBox;
	GtkWidget *UserCancelButton;
	GtkWidget *UserOkButton;
	GtkWidget *PasswordEntry;
	GtkWidget *RepeatPasswordEntry;
	GtkWidget *PasswordHashEntry;
	GtkWidget *HashBox;
	GtkWidget *PasswordBox;
	GtkWidget *NoEncriptionCheck;
} password_window;

typedef struct {
	GtkWidget *Window;
	GtkWidget *ScrollWindow;
	GtkWidget *StatusBox;
	GtkWidget *HeadLabel;
	GtkWidget *LogLabel;
	GtkWidget *ScrollToEndCheck;
	char *command;
} log_window;

typedef struct {
	GtkWidget *Window;
	GtkWidget *AcceptButton;
	GtkWidget *CancelButton;
} confirmation_window;

void config_init();
main_window *yon_main_window_complete();
ubinstall_language_window *yon_ubinstall_language_new();
void NewFunction(ubinstall_language_window *window, GtkBuilder *builder);
ubinstall_keyboard_window *yon_ubinstall_keyboard_new();

password_window *yon_password_new();
void on_password_accept(GtkWidget *self, dictionary *dict);

char* yon_debug_output(char *pattern,char*text);

char *yon_save_command_prepare(char *command, char *target);
void yon_interface_update(main_window *widgets);

void on_summary_log_view(GtkWidget *,main_window *widgets);
void on_near_installation_device_changed(GtkWidget *self, main_window *widgets);

void on_toggle_button_switch_on(GtkWidget *, GtkToggleButton *toggle);

void on_autohostname_sensitiveness_check(GtkWidget *, main_window *widgets);
void on_autohostname_check(GtkWidget *, main_window *widgets);
void on_hostname_entry_changed (GtkWidget *, main_window *widgets);