Installation sliders rework

pull/168/head
parent 1752f7dc46
commit 601d3880fa

@ -21,6 +21,7 @@
<file>ubinstall-gtk-source-element.glade</file> <file>ubinstall-gtk-source-element.glade</file>
<file>ubinstall-gtk-layouts.glade</file> <file>ubinstall-gtk-layouts.glade</file>
<file>ubinstall-gtk-keyboard-layouts.glade</file> <file>ubinstall-gtk-keyboard-layouts.glade</file>
<file>ubinstall-gtk-slider.glade</file>
</gresource> </gresource>
<gresource prefix="/com/ublinux/css"> <gresource prefix="/com/ublinux/css">
<file>ubinstall-gtk.css</file> <file>ubinstall-gtk.css</file>

@ -74,6 +74,7 @@ set(DEPENDFILES
../ubinstall-gtk-source-element.glade ../ubinstall-gtk-source-element.glade
../ubinstall-gtk-layouts.glade ../ubinstall-gtk-layouts.glade
../ubinstall-gtk-keyboard-layouts.glade ../ubinstall-gtk-keyboard-layouts.glade
../ubinstall-gtk-slider.glade
../gresource.xml ../gresource.xml
../ubinstall-gtk.css ../ubinstall-gtk.css
../modules.csv ../modules.csv

@ -155,10 +155,10 @@ void yon_configuration_hub_add(GtkFlowBox *target, char *name, char *icon, enum
gtk_container_add(GTK_CONTAINER(flow),cur_icon->MainBox); gtk_container_add(GTK_CONTAINER(flow),cur_icon->MainBox);
gtk_box_pack_start(GTK_BOX(cur_icon->MainBox),cur_icon->Image,0,0,0); gtk_box_pack_start(GTK_BOX(cur_icon->MainBox),cur_icon->Image,0,0,0);
gtk_box_pack_start(GTK_BOX(cur_icon->MainBox),cur_icon->Label,0,0,0); gtk_box_pack_start(GTK_BOX(cur_icon->MainBox),cur_icon->Label,0,0,0);
gtk_widget_set_margin_bottom(cur_icon->MainBox,5); gtk_widget_set_margin_bottom(cur_icon->MainBox,10);
gtk_widget_set_margin_top(cur_icon->MainBox,5); gtk_widget_set_margin_top(cur_icon->MainBox,10);
gtk_widget_set_margin_start(cur_icon->MainBox,5); gtk_widget_set_margin_start(cur_icon->MainBox,10);
gtk_widget_set_margin_end(cur_icon->MainBox,5); gtk_widget_set_margin_end(cur_icon->MainBox,10);
gtk_flow_box_insert(target,flow,-1); gtk_flow_box_insert(target,flow,-1);
gtk_widget_show_all(flow); gtk_widget_show_all(flow);
free(name_wrapped); free(name_wrapped);

@ -102,21 +102,143 @@
// return 1; // return 1;
// } // }
gboolean on_image_slide(void *data){ gboolean on_install_slider_hover_highlight(GtkWidget *, GdkEvent *, main_window *widgets){
main_window *widgets = (main_window*)data; gtk_widget_show(widgets->NextInstallationSliderImage);
int size; gtk_widget_show(widgets->PrevInstallationSliderImage);
config_str target = yon_char_parsed_new(&size,slide_repeat_path); return 0;
if (size) }
yon_char_parsed_free(target,size);
gtk_image_set_from_pixbuf(GTK_IMAGE(widgets->SlidesImage),(GdkPixbuf*)g_list_nth_data(widgets->slides_original,main_config.cur_slide)); gboolean on_install_slider_hover_highlight_end(GtkWidget *, GdkEvent *, main_window *widgets){
// gtk_widget_queue_draw(widgets->SlidesImage); gtk_widget_hide(widgets->NextInstallationSliderImage);
if ((int)main_config.cur_slide<size-1) main_config.cur_slide++; else main_config.cur_slide=1; gtk_widget_hide(widgets->PrevInstallationSliderImage);
g_mutex_lock(&main_config.install_mutex); return 0;
if (!main_config.install_complete){ }
g_mutex_unlock(&main_config.install_mutex);
return 1;
} else{ void on_install_slider_next(GtkWidget* ,GdkEventButton *,main_window *widgets){
g_mutex_unlock(&main_config.install_mutex); main_config.chosen_slide=main_config.chosen_slide->next?main_config.chosen_slide->next:g_list_first(main_config.chosen_slide);
return 0; yon_install_slider_update(widgets);
}
void on_install_slider_prev(GtkWidget* ,GdkEventButton *,main_window *widgets){
main_config.chosen_slide=main_config.chosen_slide->prev?main_config.chosen_slide->prev:g_list_last(main_config.chosen_slide);
yon_install_slider_update(widgets);
}
void yon_install_slider_update(main_window *widgets){
slider_object *cur_slider = (slider_object*)main_config.chosen_slide->data;
slider_object *next_slider = main_config.chosen_slide->next?((slider_object*)main_config.chosen_slide->next->data):(slider_object*)(g_list_first(main_config.chosen_slide)->data);
GtkWidget *prevleft = gtk_bin_get_child(GTK_BIN(widgets->ScrollLeftEventBox));
GtkWidget *prevright = gtk_bin_get_child(GTK_BIN(widgets->ScrollRightEventBox));
if (cur_slider->MainBox==prevleft) return;
if (prevleft&&prevright) {
g_object_ref(G_OBJECT(prevleft));
g_object_ref(G_OBJECT(prevright));
gtk_container_remove(GTK_CONTAINER(widgets->ScrollLeftEventBox),prevleft);
gtk_container_remove(GTK_CONTAINER(widgets->ScrollRightEventBox),prevright);
}
gtk_container_add(GTK_CONTAINER(widgets->ScrollLeftEventBox),cur_slider->MainBox);
gtk_container_add(GTK_CONTAINER(widgets->ScrollRightEventBox),next_slider->MainBox);
gtk_container_check_resize(GTK_CONTAINER(widgets->ScrollLeftEventBox));
gtk_container_check_resize(GTK_CONTAINER(widgets->ScrollRightEventBox));
GList *dots = gtk_container_get_children(GTK_CONTAINER(widgets->SliderProgressBox));
GList *iter;
for (iter=dots;iter;iter=iter->next){
gtk_widget_destroy(GTK_WIDGET(iter->data));
}
for (iter=main_config.slides;iter;iter=iter->next){
GtkWidget *Image = NULL;
int chosen = iter==main_config.chosen_slide||(main_config.chosen_slide->next&&iter==main_config.chosen_slide->next)||(!main_config.chosen_slide->next&&iter==g_list_first(main_config.chosen_slide));
if (chosen){
GtkIconInfo *info = gtk_icon_theme_lookup_icon_for_scale(gtk_icon_theme_get_default(),toggled_icon_path,8,1,GTK_ICON_LOOKUP_FORCE_SIZE);
Image = gtk_image_new_from_pixbuf(gtk_icon_info_load_icon(info,NULL));
} else {
GtkIconInfo *info = gtk_icon_theme_lookup_icon_for_scale(gtk_icon_theme_get_default(),untoggled_icon_path,8,1,GTK_ICON_LOOKUP_FORCE_SIZE);
Image = gtk_image_new_from_pixbuf(gtk_icon_info_load_icon(info,NULL));
}
gtk_box_pack_start(GTK_BOX(widgets->SliderProgressBox),Image,0,0,0);
gtk_widget_show(Image);
} }
} }
slider_object *yon_slider_object_new(){
slider_object *slider = malloc(sizeof(slider_object));
memset(slider,0,sizeof(slider_object));
GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_slider);
slider->MainBox = yon_gtk_builder_get_widget(builder,"MainBox");
slider->TitleImage = yon_gtk_builder_get_widget(builder,"TitleImage");
slider->TitleLabel = yon_gtk_builder_get_widget(builder,"TitleLabel");
slider->TextLabel = yon_gtk_builder_get_widget(builder,"TextLabel");
g_object_set_data(G_OBJECT(slider->MainBox),"slider_object",slider);
return slider;
}
void yon_slider_setup(slider_object *slider, char *title, char *icon, char *text_markup){
gtk_label_set_text(GTK_LABEL(slider->TitleLabel),title);
gtk_label_set_markup(GTK_LABEL(slider->TextLabel),text_markup);
gtk_image_set_from_icon_name(GTK_IMAGE(slider->TitleImage),icon,GTK_ICON_SIZE_DND);
}
slider_object *yon_slider_new_full(char *title, char *icon, char *text_markup){
slider_object *slider = yon_slider_object_new();
yon_slider_setup(slider,title,icon,text_markup);
return slider;
}
void yon_install_slider_init(main_window *widgets){
if (main_config.slides) return;
slider_object *slider1 = yon_slider_new_full(slide_1_title, icon_path,slide_1_text);
slider_object *slider2 = yon_slider_new_full(slide_2_title, icon_path,slide_2_text);
slider_object *slider3 = yon_slider_new_full(slide_3_title, icon_path,slide_3_text);
slider_object *slider4 = yon_slider_new_full(slide_4_title, icon_path,slide_4_text);
slider_object *slider5 = yon_slider_new_full(slide_5_title, icon_path,slide_5_text);
slider_object *slider6 = yon_slider_new_full(slide_6_title, icon_path,slide_6_text);
slider_object *slider7 = yon_slider_new_full(slide_7_title, icon_path,slide_7_text);
slider_object *slider8 = yon_slider_new_full(slide_8_title, icon_path,slide_8_text);
slider_object *slider9 = yon_slider_new_full(slide_9_title, icon_path,slide_9_text);
slider_object *slider10 = yon_slider_new_full(slide_10_title, icon_path,slide_10_text);
slider_object *slider11 = yon_slider_new_full(slide_11_title, icon_path,slide_11_text);
slider_object *slider12 = yon_slider_new_full(slide_12_title, icon_path,slide_12_text);
slider_object *slider13 = yon_slider_new_full(slide_13_title, icon_path,slide_13_text);
slider_object *slider14 = yon_slider_new_full(slide_14_title, icon_path,slide_14_text);
slider_object *slider15 = yon_slider_new_full(slide_15_title, icon_path,slide_15_text);
slider_object *slider16 = yon_slider_new_full(slide_16_title, icon_path,slide_16_text);
slider_object *slider17 = yon_slider_new_full(slide_17_title, icon_path,slide_17_text);
slider_object *slider18 = yon_slider_new_full(slide_18_title, icon_path,slide_18_text);
slider_object *slider19 = yon_slider_new_full(slide_19_title, icon_path,slide_19_text);
slider_object *slider20 = yon_slider_new_full(slide_20_title, icon_path,slide_20_text);
slider_object *slider21 = yon_slider_new_full(slide_21_title, icon_path,slide_21_text);
slider_object *slider22 = yon_slider_new_full(slide_22_title, icon_path,slide_22_text);
main_config.slides = g_list_prepend(main_config.slides,slider22);
main_config.slides = g_list_prepend(main_config.slides,slider21);
main_config.slides = g_list_prepend(main_config.slides,slider20);
main_config.slides = g_list_prepend(main_config.slides,slider19);
main_config.slides = g_list_prepend(main_config.slides,slider18);
main_config.slides = g_list_prepend(main_config.slides,slider17);
main_config.slides = g_list_prepend(main_config.slides,slider16);
main_config.slides = g_list_prepend(main_config.slides,slider15);
main_config.slides = g_list_prepend(main_config.slides,slider14);
main_config.slides = g_list_prepend(main_config.slides,slider13);
main_config.slides = g_list_prepend(main_config.slides,slider12);
main_config.slides = g_list_prepend(main_config.slides,slider11);
main_config.slides = g_list_prepend(main_config.slides,slider10);
main_config.slides = g_list_prepend(main_config.slides,slider9);
main_config.slides = g_list_prepend(main_config.slides,slider8);
main_config.slides = g_list_prepend(main_config.slides,slider7);
main_config.slides = g_list_prepend(main_config.slides,slider6);
main_config.slides = g_list_prepend(main_config.slides,slider5);
main_config.slides = g_list_prepend(main_config.slides,slider4);
main_config.slides = g_list_prepend(main_config.slides,slider3);
main_config.slides = g_list_prepend(main_config.slides,slider2);
main_config.slides = g_list_prepend(main_config.slides,slider1);
main_config.slides = g_list_reverse(main_config.slides);
main_config.chosen_slide = g_list_first(main_config.slides);
yon_install_slider_update(widgets);
gtk_overlay_add_overlay(GTK_OVERLAY(widgets->InstallationSliderArrowsOverlay),widgets->NextInstallationSliderImage);
gtk_overlay_add_overlay(GTK_OVERLAY(widgets->InstallationSliderArrowsOverlay),widgets->PrevInstallationSliderImage);
}
// void *on_install_slider_slide(){
// }

@ -421,6 +421,7 @@ void yon_page_init(main_window *widgets, enum YON_PAGES page){
yon_install_init(widgets,page); yon_install_init(widgets,page);
break; break;
case YON_PAGE_INSTALLATION: case YON_PAGE_INSTALLATION:
yon_install_slider_init(widgets);
main_config.save_configured=1; main_config.save_configured=1;
g_mutex_lock(&main_config.install_mutex); g_mutex_lock(&main_config.install_mutex);
if (main_config.install_complete){ if (main_config.install_complete){

@ -558,7 +558,9 @@ void config_init(){
main_config.dry_run=0; main_config.dry_run=0;
main_config.force_ini=NULL; main_config.force_ini=NULL;
main_config.network_types = g_hash_table_new(g_str_hash,g_str_equal); main_config.network_types = g_hash_table_new(g_str_hash,g_str_equal);
main_config.cur_slide=0;
main_config.slides = NULL;
main_config.chosen_slide = NULL;
main_config.languages = g_hash_table_new(g_str_hash,g_str_equal); main_config.languages = g_hash_table_new(g_str_hash,g_str_equal);
int size; int size;
@ -1092,6 +1094,13 @@ void yon_main_window_create(main_window *widgets){
widgets->HubSystemListBox = yon_gtk_builder_get_widget(builder,"HubSystemListBox"); widgets->HubSystemListBox = yon_gtk_builder_get_widget(builder,"HubSystemListBox");
widgets->HubPackagesListBox = yon_gtk_builder_get_widget(builder,"HubPackagesListBox"); widgets->HubPackagesListBox = yon_gtk_builder_get_widget(builder,"HubPackagesListBox");
widgets->ScrollLeftEventBox = yon_gtk_builder_get_widget(builder,"ScrollLeftEventBox");
widgets->ScrollRightEventBox = yon_gtk_builder_get_widget(builder,"ScrollRightEventBox");
widgets->SliderProgressBox = yon_gtk_builder_get_widget(builder,"SliderProgressBox");
widgets->InstallationSliderArrowsOverlay = yon_gtk_builder_get_widget(builder,"InstallationSliderArrowsOverlay");
widgets->NextInstallationSliderImage = yon_gtk_builder_get_widget(builder,"NextInstallationSliderImage");
widgets->PrevInstallationSliderImage = yon_gtk_builder_get_widget(builder,"PrevInstallationSliderImage");
widgets->network_connections = NULL; widgets->network_connections = NULL;
widgets->pacmanchosen = g_hash_table_new_full(g_str_hash,g_str_equal,free,NULL); widgets->pacmanchosen = g_hash_table_new_full(g_str_hash,g_str_equal,free,NULL);
@ -1234,6 +1243,12 @@ void yon_main_window_create(main_window *widgets){
g_signal_connect(G_OBJECT(widgets->HubSystemListBox),"selected-children-changed",G_CALLBACK(on_configuration_hub_selected),widgets); g_signal_connect(G_OBJECT(widgets->HubSystemListBox),"selected-children-changed",G_CALLBACK(on_configuration_hub_selected),widgets);
g_signal_connect(G_OBJECT(widgets->HubPackagesListBox),"selected-children-changed",G_CALLBACK(on_configuration_hub_selected),widgets); g_signal_connect(G_OBJECT(widgets->HubPackagesListBox),"selected-children-changed",G_CALLBACK(on_configuration_hub_selected),widgets);
g_signal_connect(G_OBJECT(widgets->ScrollLeftEventBox),"button-release-event",G_CALLBACK(on_install_slider_prev),widgets);
g_signal_connect(G_OBJECT(widgets->ScrollRightEventBox),"button-release-event",G_CALLBACK(on_install_slider_next),widgets);
g_signal_connect(G_OBJECT(widgets->ScrollLeftEventBox),"enter-notify-event",G_CALLBACK(on_install_slider_hover_highlight),widgets);
g_signal_connect(G_OBJECT(widgets->ScrollRightEventBox),"enter-notify-event",G_CALLBACK(on_install_slider_hover_highlight),widgets);
g_signal_connect(G_OBJECT(widgets->ScrollLeftEventBox),"leave-notify-event",G_CALLBACK(on_install_slider_hover_highlight_end),widgets);
g_signal_connect(G_OBJECT(widgets->ScrollRightEventBox),"leave-notify-event",G_CALLBACK(on_install_slider_hover_highlight_end),widgets);
g_signal_connect(G_OBJECT(widgets->AboutMenuItem),"activate",G_CALLBACK(on_about),widgets); g_signal_connect(G_OBJECT(widgets->AboutMenuItem),"activate",G_CALLBACK(on_about),widgets);
g_signal_connect(G_OBJECT(widgets->DocumentationMenuItem),"activate",G_CALLBACK(on_open_documentation_confirmation),WIKI_LINK); g_signal_connect(G_OBJECT(widgets->DocumentationMenuItem),"activate",G_CALLBACK(on_open_documentation_confirmation),WIKI_LINK);

@ -40,11 +40,14 @@
#define glade_path_source_element "/com/ublinux/ui/ubinstall-gtk-source-element.glade" #define glade_path_source_element "/com/ublinux/ui/ubinstall-gtk-source-element.glade"
#define glade_locales_path "/com/ublinux/ui/ubinstall-gtk-layouts.glade" #define glade_locales_path "/com/ublinux/ui/ubinstall-gtk-layouts.glade"
#define glade_layouts_path "/com/ublinux/ui/ubinstall-gtk-keyboard-layouts.glade" #define glade_layouts_path "/com/ublinux/ui/ubinstall-gtk-keyboard-layouts.glade"
#define glade_path_slider "/com/ublinux/ui/ubinstall-gtk-slider.glade"
#define CssPath "/com/ublinux/css/ubinstall-gtk.css" #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 config_path yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL)
#define icon_path "com.ublinux.ubinstall-gtk" #define icon_path "com.ublinux.ubinstall-gtk"
#define kernel_icon_path "com.ublinux.ubl-settings-kernel" #define kernel_icon_path "com.ublinux.ubl-settings-kernel"
#define untoggled_icon_path "com.ublinux.libublsettingsui-gtk3.untoggled-symbolic"
#define toggled_icon_path "com.ublinux.libublsettingsui-gtk3.toggled-symbolic"
#define LocalePath "/usr/share/locale" #define LocalePath "/usr/share/locale"
#define LocaleName "ubinstall-gtk" #define LocaleName "ubinstall-gtk"
@ -422,7 +425,7 @@ typedef struct {
GHashTable *network_types; GHashTable *network_types;
GtkWidget *kernel_unchosen_radio; GtkWidget *kernel_unchosen_radio;
unsigned int cur_slide; // unsigned int cur_slide;
gboolean dry_run; gboolean dry_run;
GtkTreeStore *layouts_store; GtkTreeStore *layouts_store;
@ -432,6 +435,9 @@ typedef struct {
int variants_size; int variants_size;
config_str layouts_list; config_str layouts_list;
int layouts_size; int layouts_size;
GList *slides;
GList *chosen_slide;
} config; } config;
extern config main_config; extern config main_config;
@ -733,6 +739,13 @@ typedef struct {
dictionary *advanced_sections; dictionary *advanced_sections;
GSequence *advanced_partition_order; GSequence *advanced_partition_order;
GtkWidget *ScrollLeftEventBox;
GtkWidget *ScrollRightEventBox;
GtkWidget *SliderProgressBox;
GtkWidget *InstallationSliderArrowsOverlay;
GtkWidget *PrevInstallationSliderImage;
GtkWidget *NextInstallationSliderImage;
GtkTreeStore *PackagesList; GtkTreeStore *PackagesList;
GtkCellRenderer *PackagesChosenCell; GtkCellRenderer *PackagesChosenCell;
GtkWidget *PackagesTree; GtkWidget *PackagesTree;
@ -1093,6 +1106,13 @@ typedef struct {
enum YON_PAGES page; enum YON_PAGES page;
} config_hub_icon; } config_hub_icon;
typedef struct {
GtkWidget *MainBox;
GtkWidget *TitleImage;
GtkWidget *TitleLabel;
GtkWidget *TextLabel;
}slider_object;
void config_init(); void config_init();
main_window *yon_main_window_complete(); main_window *yon_main_window_complete();
ubinstall_language_window *yon_ubinstall_language_new(); ubinstall_language_window *yon_ubinstall_language_new();
@ -1147,7 +1167,18 @@ void on_page_changed(GtkWidget *,GtkWidget *,int page, main_window *widgets);
void yon_installation_progress_update(GFileMonitor *,GFile *,GFile *,GFileMonitorEvent ,main_window *widgets); void yon_installation_progress_update(GFileMonitor *,GFile *,GFile *,GFileMonitorEvent ,main_window *widgets);
void *on_config_save(void *data); void *on_config_save(void *data);
void *on_setup_system_configuration(void * data); void *on_setup_system_configuration(void * data);
gboolean on_image_slide(void *data); void yon_install_slider_init(main_window *widgets);
void on_install_slider_next(GtkWidget* ,GdkEventButton *,main_window *widgets);
void on_install_slider_prev(GtkWidget* ,GdkEventButton *,main_window *widgets);
void yon_install_slider_update(main_window *widgets);
slider_object *yon_slider_object_new();
void yon_slider_setup(slider_object *slider, char *title, char *icon, char *text_markup);
slider_object *yon_slider_new_full(char *title, char *icon, char *text_markup);
gboolean on_install_slider_hover_highlight(GtkWidget *self, GdkEvent *, main_window *);
gboolean on_install_slider_hover_highlight(GtkWidget *self, GdkEvent *, main_window *);
gboolean on_install_slider_hover_highlight_end(GtkWidget *self, GdkEvent *, main_window *);
gboolean on_install_slider_hover_highlight_end(GtkWidget *self, GdkEvent *, main_window *);
// gboolean on_image_slide(void *data);
// void on_region_resized(GtkWidget *,main_window *widgets); // void on_region_resized(GtkWidget *,main_window *widgets);
// int yon_image_resize_from_container(GtkImage *target, GdkPixbuf *pixbuf_unscaled); // int yon_image_resize_from_container(GtkImage *target, GdkPixbuf *pixbuf_unscaled);
void on_configuration_mode_switch(GtkWidget *self,main_window *widgets); void on_configuration_mode_switch(GtkWidget *self,main_window *widgets);

@ -391,4 +391,113 @@ NULL)
// #define _LABEL _("Recovery section") // #define _LABEL _("Recovery section")
// #define _LABEL _("Start installation scenario") // #define _LABEL _("Start installation scenario")
// #define _LABEL _("Source") // #define _LABEL _("Source")
// #define _LABEL _("Skip configuration") // #define _LABEL _("Skip configuration")
#define slide_1_title _("Product ecosystem")
#define slide_1_text _("Developed by a team of professionals and successfully presented on the market.\n\
Includes:\n\
- modern versions of the Linux kernel,\n\
- wide range of software,\n\
- IT infrastructure management system,\n\
- virtualization system")
#define slide_2_title _("System Usage")
#define slide_2_text _("It has been successfully used in both government agencies and commercial companies of various sizes.")
#define slide_3_title _("System Editions")
#define slide_3_text _("- UBLinux Desktop Enterprise for workstations (PCs, laptops, thin clients, dashboards, including interactive touchscreens, industrial computers, and hardware and software systems),\n\
- UBLinux Server for server hardware and storage systems,\n\
- UBLinux Network for network equipment,\n\
- UBLinux Education for educational institutions,\n\
- UBLinux Desktop Basic for personal (home) use")
#define slide_4_title _("Device Support")
#define slide_4_text _("A wide range of devices is supported: printing equipment, scanners, webcams, etc.\n\
\n\
Support for multitouch input systems with detection of up to 20 simultaneous touch points")
#define slide_5_title _("Modular secure architecture")
#define slide_5_text _("- each OS component is represented by a separate module with signature and integrity control\n\
- connecting and disconnecting modules does not require stopping the system\n\
- allows flexible adaptation of the system to the customer's workflows\n\
- ensures high performance")
#define slide_6_title _("Flexible Adaptation")
#define slide_6_text _("By changing the system's modules, its capabilities are tailored to the needs of each user.\n\
\n\
From a minimal configuration (a thin client that only allows remote connection to the server) to a configuration that includes the full range of system capabilities.")
#define slide_7_title _("Domain architecture support")
#define slide_7_text _("A UBLinux-based domain controller allows you to:\n\
- use group policies,\n\
- centralized software deployment across your fleet,\n\
- organize network resources and provide flexible access to them\n\
\n\
Allows you to integrate your workstation with Microsoft Active Directory, FreeIPA, and Samba DC, applying the necessary domain settings to your workstation.")
#define slide_8_title _("Native compatibility with Windows applications")
#define slide_8_text _("Using Wine or the Winix integration module, you can launch and work with most Windows applications.")
#define slide_9_title _("High level of optimization")
#define slide_9_text _("The system is lightweight. This allows for comfortable operation when booting from USB drives, on diskless workstations, and on thin clients. It also allows for the use of workstations with low performance.")
#define slide_10_title _("Intuitive interface")
#define slide_10_text _("Support for XFCE, KDE Plasma, GNOME, MATE, LXQt, and other graphical environments allows you to choose and flexibly customize the most convenient desktop environment.\n\
\n\
This allows users to easily get started with the system, including when switching from Windows.")
#define slide_11_title _("Multi-workstation (multi-seat)")
#define slide_11_text _("The ability for multiple users to work simultaneously at a single workstation.\n\
\n\
Each user has a separate profile (desktop), monitor, and keyboard/mouse. This can be implemented using the built-in video outputs without the need for a separate graphics card.")
#define slide_12_title _("Application Software")
#define slide_12_text _("The system comes with a comprehensive set of software out of the box to solve most common problems.\n\
\n\
The graphical package manager allows for quick and intuitive installation of additional software and hardware drivers.")
#define slide_13_title _("Corporate Services")
#define slide_13_text _("The system allows you to deploy and manage or connect to a variety of centralized corporate services: email, group chats, video conferencing, collaboration systems, etc.")
#define slide_14_title _("Security and Resiliency, Sandbox Mode")
#define slide_14_text _("A robust application package management system and built-in information security mechanisms ensure a high level of security and resiliency for the workstation.\n\
\n\
Sandbox modes protect the workstation from failures and incorrect operations. Upon reboot, the system will return to its default state.")
#define slide_15_title _("Custom repositories")
#define slide_15_text _("- repositories are developed and maintained by the system developer,\n\
- hosted within the Russian Federation,\n\
- contain the most popular and modern software tools\n\
\n\
The creation of service repositories is also supported, which users can create and adapt to their needs.")
#define slide_16_title _("Quick deployment")
#define slide_16_text _("- System installation on modern hardware takes 3-5 minutes.\n\
- Ability to install the system over a network\n\
- Ability to create a custom ISO image from one of the configured workstations, including the necessary settings and a pre-installed set of required application software.")
#define slide_17_title _("Modular graphical administration interface")
#define slide_17_text _("- A graphical administration interface that includes a comprehensive set of system utilities for system configuration\n\
- Web-based tools for administering local and remote workstations")
#define slide_18_title _("UBPile Infrastructure Monitoring and Management System")
#define slide_18_text _("Includes automation and orchestration mechanisms for comprehensive information infrastructure management.\n\
\n\
Used to automate deployment and configuration of workstations and servers, as well as manage computing equipment.")
#define slide_19_title _("UBLinux Server virtualization tools")
#define slide_19_text _("The server and workstation virtualization system enables efficient deployment and management of virtual IT infrastructure in data centers.\n\
\n\
- Supports Microsoft Windows, GNU/Linux, and FreeBSD guest operating systems\n\
- Backup, data protection, and VDI mechanisms.")
#define slide_20_title _("Professional technical support")
#define slide_20_text _("You can choose the most appropriate level of system support for your situation.\n\
\n\
For more information, visit our website ublinux.ru in the \"Support Levels\" section.")
#define slide_21_title _("Interactive Knowledge Base")
#define slide_21_text _("Continuously evolving and clearly describes the installation and configuration of the system, as well as the use of its features. Located at wiki.ublinux.ru")
#define slide_22_title _("Network Boot")
#define slide_22_text _("Allows system booting for diskless and standard workstations over a local network or the Internet (even over slow connection channels).")

@ -2,7 +2,8 @@
<!-- Generated with glade 3.40.0 --> <!-- Generated with glade 3.40.0 -->
<interface> <interface>
<requires lib="gtk+" version="3.24"/> <requires lib="gtk+" version="3.24"/>
<object class="GtkFrame"> <object class="GtkFrame" id="MainBox">
<property name="height-request">350</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="label-xalign">0</property> <property name="label-xalign">0</property>
@ -16,13 +17,68 @@
<property name="left-padding">5</property> <property name="left-padding">5</property>
<property name="right-padding">5</property> <property name="right-padding">5</property>
<child> <child>
<object class="GtkLabel"> <object class="GtkBox">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="label" translatable="yes">label</property> <property name="orientation">vertical</property>
<property name="use-markup">True</property> <property name="spacing">5</property>
<property name="xalign">0</property> <child>
<property name="yalign">0</property> <object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkImage" id="TitleImage">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="valign">start</property>
<property name="stock">gtk-missing-image</property>
<property name="icon_size">5</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="TitleLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="wrap">True</property>
<property name="xalign">0</property>
<attributes>
<attribute name="weight" value="bold"/>
<attribute name="size" value="13312"/>
</attributes>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="TextLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="use-markup">True</property>
<property name="wrap">True</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object> </object>
</child> </child>
</object> </object>

@ -328,4 +328,13 @@ button {
.unsensitiveblock:disabled { .unsensitiveblock:disabled {
opacity:1; opacity:1;
background:@theme_selected_bg_color; background:@theme_selected_bg_color;
} }
.install_slider_hover {
background-color:@theme_selected_bg_color;
}
.install_slider_hover * {
color:@theme_selected_fg_color;
opacity: 1;
}

@ -177,6 +177,12 @@
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="active">True</property> <property name="active">True</property>
</object> </object>
<object class="GtkImage" id="NextInstallationSliderImage">
<property name="can-focus">False</property>
<property name="halign">end</property>
<property name="valign">center</property>
<property name="icon-name">com.ublinux.libublsettingsui-gtk3.pan-right-symbolic</property>
</object>
<object class="GtkListStore" id="OSSoftwareList"> <object class="GtkListStore" id="OSSoftwareList">
<columns> <columns>
<!-- column-name Chosen --> <!-- column-name Chosen -->
@ -259,6 +265,12 @@
<column type="gchararray"/> <column type="gchararray"/>
</columns> </columns>
</object> </object>
<object class="GtkImage" id="PrevInstallationSliderImage">
<property name="can-focus">False</property>
<property name="halign">start</property>
<property name="valign">center</property>
<property name="icon-name">com.ublinux.libublsettingsui-gtk3.pan-left-symbolic</property>
</object>
<object class="GtkListStore" id="StartupList"> <object class="GtkListStore" id="StartupList">
<columns> <columns>
<!-- column-name Autostart --> <!-- column-name Autostart -->
@ -585,6 +597,7 @@
</child> </child>
<style> <style>
<class name="toggletabs"/> <class name="toggletabs"/>
<class name="thin"/>
</style> </style>
</object> </object>
<packing> <packing>
@ -610,6 +623,7 @@ agreement</property>
</child> </child>
<style> <style>
<class name="toggletabs"/> <class name="toggletabs"/>
<class name="thin"/>
</style> </style>
</object> </object>
<packing> <packing>
@ -634,6 +648,7 @@ agreement</property>
</child> </child>
<style> <style>
<class name="toggletabs"/> <class name="toggletabs"/>
<class name="thin"/>
</style> </style>
</object> </object>
<packing> <packing>
@ -658,6 +673,7 @@ agreement</property>
</child> </child>
<style> <style>
<class name="toggletabs"/> <class name="toggletabs"/>
<class name="thin"/>
</style> </style>
</object> </object>
<packing> <packing>
@ -682,6 +698,7 @@ agreement</property>
</child> </child>
<style> <style>
<class name="toggletabs"/> <class name="toggletabs"/>
<class name="thin"/>
</style> </style>
</object> </object>
<packing> <packing>
@ -706,6 +723,7 @@ agreement</property>
</child> </child>
<style> <style>
<class name="toggletabs"/> <class name="toggletabs"/>
<class name="thin"/>
</style> </style>
</object> </object>
<packing> <packing>
@ -730,6 +748,7 @@ agreement</property>
</child> </child>
<style> <style>
<class name="toggletabs"/> <class name="toggletabs"/>
<class name="thin"/>
</style> </style>
</object> </object>
<packing> <packing>
@ -754,6 +773,7 @@ agreement</property>
</child> </child>
<style> <style>
<class name="toggletabs"/> <class name="toggletabs"/>
<class name="thin"/>
</style> </style>
</object> </object>
<packing> <packing>
@ -778,6 +798,7 @@ agreement</property>
</child> </child>
<style> <style>
<class name="toggletabs"/> <class name="toggletabs"/>
<class name="thin"/>
</style> </style>
</object> </object>
<packing> <packing>
@ -822,6 +843,7 @@ agreement</property>
<property name="margin-top">5</property> <property name="margin-top">5</property>
<property name="margin-bottom">5</property> <property name="margin-bottom">5</property>
<property name="tab-pos">left</property> <property name="tab-pos">left</property>
<property name="show-tabs">False</property>
<child> <child>
<object class="GtkBox"> <object class="GtkBox">
<property name="visible">True</property> <property name="visible">True</property>
@ -6452,36 +6474,46 @@ agreement</property>
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
<property name="spacing">5</property> <property name="spacing">5</property>
<child> <child>
<object class="GtkBox"> <object class="GtkOverlay" id="InstallationSliderArrowsOverlay">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="spacing">5</property>
<child> <child>
<object class="GtkEventBox" id="ScrollLeftEventBox"> <object class="GtkBox">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="spacing">5</property>
<property name="homogeneous">True</property>
<child> <child>
<placeholder/> <object class="GtkEventBox" id="ScrollLeftEventBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child> </child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="ScrollRightEventBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child> <child>
<placeholder/> <object class="GtkEventBox" id="ScrollRightEventBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child> </child>
</object> </object>
<packing> <packing>
<property name="expand">True</property> <property name="index">-1</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing> </packing>
</child> </child>
</object> </object>
@ -6495,6 +6527,7 @@ agreement</property>
<object class="GtkBox" id="SliderProgressBox"> <object class="GtkBox" id="SliderProgressBox">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="halign">center</property>
<property name="spacing">5</property> <property name="spacing">5</property>
<child> <child>
<placeholder/> <placeholder/>

Loading…
Cancel
Save