kolibrios-fun/programs/cmm/drvinst/drvinst.c
Kirill Lipatov (Leency) 29387f168a DrvInst: keyboard navigation
git-svn-id: svn://kolibrios.org@7031 a494cfbc-eb01-0410-851d-a64ba20cac60
2017-09-28 09:59:41 +00:00

235 lines
7.5 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()
{
load_dll(libio, #libio_init,1);
load_dll(libini, #lib_init,1);
load_dll(boxlib, #box_lib_init,0);
GetIniData();
SetEventMask(EVM_REDRAW+EVM_KEY+EVM_BUTTON+EVM_MOUSE+EVM_MOUSE_FILTER);
loop() switch(WaitEvent())
{
case evMouse:
SelectList_ProcessMouse();
break;
case evButton:
Event_ProcessButtonId(GetButtonID());
break;
case evKey:
GetKeys();
if (key_scancode == SCAN_CODE_ENTER) Event_ProcessButtonId(active_button_id);
if (window_step == WINDOW_STEP_DRIVER_LIST)
{
if (select_list.ProcessKey(key_scancode)) SelectList_LineChanged();
if (key_scancode == SCAN_CODE_TAB)
{
ActiveButtonSwitch(11, 12);
Draw_DriverListWindow();
}
}
break;
case evReDraw:
Event_DrawWindow();
}
}
void Draw_IntroWindow()
{
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);
active_button_id = BUTTON_ID_ASSEPT_RISK;
DrawStandartCaptButton(30, y.inc(10), BUTTON_ID_ASSEPT_RISK, T_ASSEPT_RISK);
}
void Draw_DriverListWindow()
{
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_DriverListWindow();
}
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_ProcessButtonId(int id)
{
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();
}
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_IntroWindow();
if (window_step == WINDOW_STEP_DRIVER_LIST) Draw_DriverListWindow();
return;
}
void Event_AsseptRisk()
{
window_step = WINDOW_STEP_DRIVER_LIST;
active_button_id = BUTTON_ID_INSTALL;
Event_DrawWindow();
}
void Event_ShowReadme()
{
io.run("/sys/txtread", #cur_readme_path);
}
void Event_RunInstall()
{
int result;
result = io.run(#cur_install_path, NULL);
if (result) notify("'Driver installation started.\nPlease, open BOARD to check status.'I");
}