kolibrios/programs/cmm/drvinst/drvinst.c
Kirill Lipatov (Leency) 2cfdddd8c6 fix DefineAndDrawWindow(), rename vfc to diff
git-svn-id: svn://kolibrios.org@6746 a494cfbc-eb01-0410-851d-a64ba20cac60
2016-11-23 11:37:13 +00:00

220 lines
7.0 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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/textreader", #cur_readme_path);
}
void Event_RunInstall()
{
io.run(#cur_install_path, NULL);
}