forked from KolibriOS/kolibrios
ee50dee1e2
git-svn-id: svn://kolibrios.org@6918 a494cfbc-eb01-0410-851d-a64ba20cac60
220 lines
7.0 KiB
C
220 lines
7.0 KiB
C
#define MEMSIZE 4096*20
|
||
|
||
#ifndef AUTOBUILD
|
||
#include "lang.h--"
|
||
#endif
|
||
|
||
//===================================================//
|
||
// //
|
||
// LIB //
|
||
// //
|
||
//===================================================//
|
||
|
||
#include "../lib/gui.h"
|
||
#include "../lib/list_box.h"
|
||
#include "../lib/obj/box_lib.h"
|
||
#include "../lib/obj/libio_lib.h"
|
||
#include "../lib/obj/libini.h"
|
||
#include "../lib/collection.h"
|
||
#include "../lib/io.h"
|
||
#include "../lib/patterns/select_list.h"
|
||
|
||
//===================================================//
|
||
// //
|
||
// DATA //
|
||
// //
|
||
//===================================================//
|
||
|
||
proc_info Form;
|
||
|
||
#ifdef LANG_RUS
|
||
#define WINDOW_TITLE "“áâ ®¢é¨ª ¤à ©¢¥à®¢"
|
||
#define T_CAUTION_TITLE "<22><>…„“<E2809E><E2809C>…†„…<E2809E>ˆ…"
|
||
#define T_CAUTION_PARAGRAPH "“áâ ®¢ª ¤®¯®«¨â¥«ìëå ¤à ©¢¥à®¢ ¬®¦¥â ¥á⨠¢à¥¤ áâ ¡¨«ì®á⨠®¯¥à 樮®© á¨áâ¥¬ë ¨ ¯®â¥æ¨ «ì® ¯à¨¢¥á⨠ª ¯®àç¥ ®¡®à㤮¢ ¨ï."
|
||
#define T_ASSEPT_RISK "Ÿ ¯à¨¨¬ î à¨áª"
|
||
#define T_README "Readme"
|
||
#define T_INSTALL "“áâ ®¢¨âì"
|
||
#else
|
||
#define WINDOW_TITLE "Driver Installer"
|
||
#define T_CAUTION_TITLE "CAUTION"
|
||
#define T_CAUTION_PARAGRAPH "Installing additional drivers can be harmful to the stability of the operation system and potentionally can harm hardware."
|
||
#define T_ASSEPT_RISK "I accept the risk"
|
||
#define T_README "Readme"
|
||
#define T_INSTALL "Install"
|
||
#endif
|
||
|
||
#define BUTTON_ID_ASSEPT_RISK 10
|
||
#define BUTTON_ID_README 11
|
||
#define BUTTON_ID_INSTALL 12
|
||
|
||
//WINDOW STEPS
|
||
#define WINDOW_STEP_INTRO 1;
|
||
#define WINDOW_STEP_DRIVER_LIST 2;
|
||
char window_step = WINDOW_STEP_INTRO;
|
||
|
||
collection ini_sections;
|
||
|
||
char drvinf_path[4096] = "/kolibrios/drivers/drvinf.ini";
|
||
char cur_version[64];
|
||
char cur_description[1024];
|
||
char cur_readme_path[4096];
|
||
char cur_install_path[4096];
|
||
|
||
//===================================================//
|
||
// //
|
||
// CODE //
|
||
// //
|
||
//===================================================//
|
||
|
||
void GetIniData()
|
||
{
|
||
select_list.count = 0;
|
||
ini_enum_sections stdcall (#drvinf_path, #process_sections);
|
||
}
|
||
|
||
byte process_sections(dword sec_name, f_name)
|
||
{
|
||
select_list.count++;
|
||
ini_sections.add(sec_name);
|
||
return true;
|
||
}
|
||
|
||
void main()
|
||
{
|
||
int id;
|
||
load_dll(libio, #libio_init,1);
|
||
load_dll(libini, #lib_init,1);
|
||
load_dll(boxlib, #box_lib_init,0);
|
||
GetIniData();
|
||
SetEventMask(0x27);
|
||
loop() switch(WaitEvent())
|
||
{
|
||
case evMouse:
|
||
if (!CheckActiveProcess(Form.ID)) break;
|
||
SelectList_ProcessMouse();
|
||
break;
|
||
|
||
case evButton:
|
||
id=GetButtonID();
|
||
if (id==1) ExitProcess();
|
||
if (id==BUTTON_ID_ASSEPT_RISK) Event_AsseptRisk();
|
||
if (id==BUTTON_ID_README) Event_ShowReadme();
|
||
if (id==BUTTON_ID_INSTALL) Event_RunInstall();
|
||
break;
|
||
|
||
case evKey:
|
||
GetKeys();
|
||
if (select_list.ProcessKey(key_scancode)) SelectList_LineChanged();
|
||
break;
|
||
|
||
case evReDraw:
|
||
Event_DrawWindow();
|
||
}
|
||
}
|
||
|
||
|
||
void draw_intro_window()
|
||
{
|
||
incn y;
|
||
y.n = Form.cheight/2 - 80;
|
||
WriteTextB(30+2,y.n+2,0x81,MixColors(system.color.work, 0xB92234,220),T_CAUTION_TITLE);
|
||
WriteTextB(30,y.n,0x81,0xB92234,T_CAUTION_TITLE);
|
||
y.n = DrawTextViewArea(30, y.inc(30), Form.cwidth-60, Form.cheight-140,
|
||
T_CAUTION_PARAGRAPH, -1, system.color.work_text);
|
||
DrawStandartCaptButton(30, y.inc(10), BUTTON_ID_ASSEPT_RISK, T_ASSEPT_RISK);
|
||
}
|
||
|
||
|
||
void draw_driver_list_window()
|
||
{
|
||
int PADDING = 12;
|
||
int right_frame_x = Form.cwidth*46/100;
|
||
int readme_w = 0;
|
||
//LEFT FRAME
|
||
SelectList_Init(PADDING,
|
||
PADDING,
|
||
right_frame_x - PADDING - PADDING - 8 - scroll1.size_x,
|
||
Form.cheight - PADDING - PADDING,
|
||
false);
|
||
SelectList_Draw();
|
||
SelectList_DrawBorder();
|
||
//RIGHT FRAME
|
||
GetCurrentSectionData();
|
||
DrawBar(right_frame_x, PADDING+3, Form.cwidth - right_frame_x - PADDING, 80, system.color.work);
|
||
WriteTextB(right_frame_x, PADDING+3, 0x81, system.color.work_text, ini_sections.get(select_list.cur_y));
|
||
WriteText(right_frame_x, PADDING+23, 0x80, system.color.work_text, #cur_version);
|
||
if(cur_readme_path[0]) readme_w = DrawStandartCaptButton(right_frame_x, PADDING+45, BUTTON_ID_README, T_README);
|
||
DrawStandartCaptButton(right_frame_x + readme_w, PADDING+45, BUTTON_ID_INSTALL, T_INSTALL);
|
||
DrawTextViewArea(right_frame_x-2, PADDING+83, Form.cwidth - right_frame_x - PADDING, Form.cheight-PADDING-PADDING,
|
||
#cur_description, system.color.work, system.color.work_text);
|
||
}
|
||
|
||
void SelectList_DrawLine(dword i)
|
||
{
|
||
int yyy, list_last;
|
||
|
||
yyy = i*select_list.item_h+select_list.y;
|
||
|
||
if (select_list.cur_y-select_list.first==i)
|
||
{
|
||
DrawBar(select_list.x, yyy, select_list.w, select_list.item_h, system.color.work_button);
|
||
WriteText(select_list.x+12,yyy+select_list.text_y,select_list.font_type,system.color.work_button_text, ini_sections.get(i));
|
||
}
|
||
else
|
||
{
|
||
DrawBar(select_list.x,yyy,select_list.w, select_list.item_h, 0xFFFfff);
|
||
WriteText(select_list.x+12,yyy+select_list.text_y,select_list.font_type,0, ini_sections.get(i));
|
||
}
|
||
}
|
||
|
||
void SelectList_LineChanged()
|
||
{
|
||
draw_driver_list_window();
|
||
}
|
||
|
||
|
||
void GetCurrentSectionData()
|
||
{
|
||
dword section_name = ini_sections.get(select_list.cur_y);
|
||
dword description_name;
|
||
if (GetSystemLanguage() == SYS_LANG_RUS) description_name = "description_ru"; else description_name = "description_en";
|
||
ini_get_str stdcall (#drvinf_path, section_name, "ver", #cur_version, sizeof(cur_version), 0);
|
||
ini_get_str stdcall (#drvinf_path, section_name, description_name, #cur_description, sizeof(cur_description), 0);
|
||
ini_get_str stdcall (#drvinf_path, section_name, "readme", #cur_readme_path, sizeof(cur_readme_path), 0);
|
||
ini_get_str stdcall (#drvinf_path, section_name, "install", #cur_install_path, sizeof(cur_install_path), 0);
|
||
}
|
||
|
||
//===================================================//
|
||
// //
|
||
// EVENTS //
|
||
// //
|
||
//===================================================//
|
||
|
||
void Event_DrawWindow()
|
||
{
|
||
system.color.get();
|
||
DefineAndDrawWindow(215, 100, 600, 400, 0x33, system.color.work, WINDOW_TITLE,0);
|
||
GetProcessInfo(#Form, SelfInfo);
|
||
if (Form.status_window>2) return;
|
||
if (Form.width < 450) { MoveSize(OLD,OLD,450,OLD); return; }
|
||
if (Form.height < 250) { MoveSize(OLD,OLD,OLD,250); return; }
|
||
if (window_step == WINDOW_STEP_INTRO) draw_intro_window();
|
||
if (window_step == WINDOW_STEP_DRIVER_LIST) draw_driver_list_window();
|
||
return;
|
||
}
|
||
|
||
void Event_AsseptRisk()
|
||
{
|
||
window_step = WINDOW_STEP_DRIVER_LIST;
|
||
Event_DrawWindow();
|
||
}
|
||
|
||
void Event_ShowReadme()
|
||
{
|
||
io.run("/sys/txtread", #cur_readme_path);
|
||
}
|
||
|
||
void Event_RunInstall()
|
||
{
|
||
io.run(#cur_install_path, NULL);
|
||
} |