Patch level : 2.2

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :
Sfruttate nuove funzioni di xvaga


git-svn-id: svn://10.65.10.50/trunk@13371 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2005-09-23 16:07:40 +00:00
parent 308c49623d
commit 9a2a53a6d7
2 changed files with 130 additions and 36 deletions

View File

@ -2,7 +2,6 @@
#include <applicat.h>
#include <automask.h>
#include <config.h>
#include <colors.h>
#include <controls.h>
#include <dongle.h>
@ -10,7 +9,6 @@
#include <isam.h>
#include <msksheet.h>
#include <progind.h>
#include <recarray.h>
#include <sheet.h>
#include <utility.h>
#include <urldefid.h>
@ -57,7 +55,7 @@ class TMenu_application : public TSkeleton_application
static bool _find_button;
protected: // TApplication
virtual bool create();
virtual bool user_create();
virtual bool destroy();
virtual bool menu(MENU_TAG m);
virtual long handler(WINDOW win, EVENT* ep);
@ -295,11 +293,16 @@ TPicture_mask::~TPicture_mask()
class TExplorer_mask : public TMask
{
TMenu_tree _tree;
bool _spider;
protected:
virtual bool stop_run(KEY k);
virtual bool on_key(KEY k);
virtual void on_idle();
virtual void update();
virtual void handler(WINDOW win, EVENT* ep);
void draw_spider(int mode, const PNT& mouse) const;
static bool explore_handler(TMask_field& f, KEY k);
public:
@ -307,6 +310,12 @@ public:
~TExplorer_mask();
};
void TExplorer_mask::handler(WINDOW win, EVENT* ep)
{
if (ep->type == E_MOUSE_MOVE && _spider)
draw_spider(0x3, ep->v.mouse.where);
TMask::handler(win, ep);
}
bool TExplorer_mask::stop_run(KEY k)
{
@ -317,6 +326,7 @@ bool TExplorer_mask::stop_run(KEY k)
{
if (ADVANCED_GRAPHICS)
{
const int divider = 8;
WINDOW window[3];
XVT_IMAGE image[3];
int i;
@ -330,7 +340,7 @@ bool TExplorer_mask::stop_run(KEY k)
default: w = win(); break;
}
RCT rct; xvt_vobj_get_client_rect(w, &rct);
RCT irct = rct; irct.right /= 4; irct.bottom /= 4;
RCT irct = rct; irct.right /= divider; irct.bottom /= divider;
XVT_IMAGE cap = xvt_image_capture(w, &rct);
XVT_IMAGE img = xvt_image_create(XVT_IMAGE_RGB, irct.right, irct.bottom, 0);
xvt_image_transfer(img, cap, &irct, &rct);
@ -353,10 +363,12 @@ bool TExplorer_mask::stop_run(KEY k)
for (i = 2; i >= 0; i--)
{
RCT rct; xvt_vobj_get_client_rect(window[i], &rct);
RCT irct = rct; irct.right /= 4; irct.bottom /= 4;
RCT irct = rct; irct.right /= divider; irct.bottom /= divider;
xvt_dwin_draw_image(window[i], image[i], &rct, &irct);
xvt_image_destroy(image[i]);
}
// Butto via le immagini dopo averle disegnate tutte
for (i = 2; i >= 0; i--)
xvt_image_destroy(image[i]);
if (sys_dll_changed()) //se e' stato installato SY..
xvt_sys_sleep(1000); //..aspetta un secondo poi forza l'uscita
@ -384,6 +396,83 @@ void TExplorer_mask::on_idle()
}
}
void TExplorer_mask::draw_spider(int mode, const PNT& mouse) const
{
WINDOW w = win();
RCT client; xvt_vobj_get_client_rect(w, &client);
const PNT p0 = { client.bottom-20, client.right-60 }; // Centro del ragno
if (mode & 0x1)
{
// Disegno il filo
const PNT p1 = { p0.v-300, p0.h };
xvt_dwin_set_std_cpen(w, TL_PEN_LTGRAY);
xvt_dwin_draw_set_pos(w, p0); xvt_dwin_draw_line(w, p1);
// Disegno il corpicino
xvt_dwin_set_std_cpen(w, TL_PEN_BLACK);
xvt_dwin_set_std_cbrush(w, TL_BRUSH_BLACK);
RCT rct; xvt_rect_set(&rct, p0.h-20, p0.v-10, p0.h+20, p0.v+10);
xvt_dwin_draw_oval(w, &rct);
// Disegno le 4 paia di zampette
const int leg = 20;
const int foot = 10;
for (int i = 0; i < 4; i++)
{
PNT p[8];
p[0].h = rct.left-leg-3*i; p[0].v = rct.bottom-3*i; // Zampa sinistra
p[1].h = p[0].h+foot; p[1].v = p[0].v;
p[2].h = p[0].h; p[2].v = p[0].v-leg-3*i;
p[3] = p0; // Centro del corpo
p[4].h = 2*p0.h-p[2].h; p[4].v = p[2].v; // Zampa destra simmetrica
p[5].h = 2*p0.h-p[1].h; p[5].v = p[1].v;
p[6].h = 2*p0.h-p[0].h; p[6].v = p[0].v;
xvt_dwin_draw_polyline(w, p, 7);
}
}
if (mode & 0x2)
{
const int eye = 7;
const int pupil = 3;
RCT rct; // rettangolo jolly
// Disegno gli occhietti
xvt_dwin_set_std_cpen(w, TL_PEN_BLACK);
for (int i = 0; i < 2; i++)
{
// Calcolo il centro dell'occhietto
const PNT p1 = { p0.v-eye, i == 0 ? p0.h-(5*eye/4) : p0.h+(5*eye/4) };
// Disegno il bulbo
xvt_rect_set(&rct, p1.h-eye, p1.v-eye, p1.h+eye, p1.v+eye);
xvt_dwin_set_std_cbrush(w, TL_BRUSH_WHITE);
xvt_dwin_draw_oval(w, &rct);
// Disegno la pupilla
const int dx = mouse.h <= rct.left ? -pupil : (mouse.h >= rct.right ? +pupil : 0);
const int dy = mouse.v <= rct.top ? -pupil : (mouse.v >= rct.bottom ? +pupil : 0);
xvt_rect_set(&rct, p1.h-pupil+dx, p1.v-pupil+dy, p1.h+pupil+dx, p1.v+pupil+dy);
xvt_dwin_set_std_cbrush(w, TL_BRUSH_BLACK);
xvt_dwin_draw_oval(w, &rct);
}
// Disegno la boccuccia aperta se gli occhi sono incrociati
xvt_dwin_set_std_cbrush(w, abs(mouse.h-p0.h) <= 2 ? TL_BRUSH_WHITE : TL_BRUSH_BLACK);
xvt_rect_set(&rct, p0.h-eye, p0.v, p0.h+eye, p0.v+eye);
xvt_dwin_draw_oval(w, &rct);
}
}
void TExplorer_mask::update()
{
TMask::update();
if (_spider)
{
const PNT pnt = { 0, 0 };
draw_spider(0x3, pnt);
}
}
bool TExplorer_mask::on_key(KEY k)
{
if (k == K_F3 || k == K_F8)
@ -414,6 +503,8 @@ bool TExplorer_mask::explore_handler(TMask_field& f, KEY k)
TExplorer_mask::TExplorer_mask(TMenu& menu)
: TMask ("", 1, 0, 0, 0, 0), _tree(menu)
{
_spider = ADVANCED_GRAPHICS && is_power_station();
const int margin = (columns()-80) / 2;
const int tree_width = margin+21; // Usa la metà di sinistra
@ -588,7 +679,7 @@ void TColor_mask::update()
line(x+1, y+h-1, x+w-2, y+h-1);
line(x+w-2, y+h-1, x+w-2, y);
set_opaque_text(FALSE);
set_opaque_text(false);
set_pen(p = get_color_entry("Normal"));
set_brush(b = get_color_entry("NormalBack"));
frame(x+3, y+1, x+w-3, y+2, 0);
@ -688,7 +779,7 @@ COLOR TColor_mask::cid2color(short cid) const
///////////////////////////////////////////////////////////
int TMenu_application::_last_button = 0;
bool TMenu_application::_find_button = FALSE;
bool TMenu_application::_find_button = false;
bool TMenu_application::test_assistance_year() const
{
@ -700,7 +791,7 @@ bool TMenu_application::menu_item_handler(TMask_field&f, KEY k)
if (k == K_SPACE)
{
app()._menu.select(f.dlg()-101);
f.set_focusdirty(FALSE);
f.set_focusdirty(false);
return f.mask().stop_run(K_AUTO_ENTER);
}
return TRUE;
@ -716,13 +807,13 @@ bool TMenu_application::menu_find_handler(TMask_field&f, KEY k)
TPicture_mask& m = (TPicture_mask&)f.mask();
if (app()._menu.find_string(v))
{
f.set_focusdirty(FALSE);
f.set_focusdirty(false);
return m.stop_run(K_F9);
}
else
{
beep();
return FALSE;
return false;
}
}
}
@ -862,10 +953,7 @@ bool TMenu_application::check_user()
TMask m("ba0100a");
char hostname[256]; xvt_sys_get_host_name(hostname, sizeof(hostname));
if (strcmp(hostname, "BATMOBILE") == 0 || strcmp(hostname, "ARCHIMEDE") == 0 ||
strcmp(hostname, "KIRK") == 0 || strcmp(hostname, "SPOCK") == 0 ||
strcmp(hostname, "UHURA") == 0)
if (is_power_station())
{
m.set_handler(F_USER, pwd_handler);
m.set_handler(F_PASSWORD, pwd_handler);
@ -875,8 +963,8 @@ bool TMenu_application::check_user()
e.browse()->set_filter("ISGROUP!=\"X\"");
TString pwd;
bool ok = FALSE;
for (int i = 0 ; i < 3 && !ok; i++)
bool ok = false;
for (int i = 0; i < 3 && !ok; i++)
{
if (utente.not_empty() && utente != dongle().administrator())
{
@ -1018,7 +1106,7 @@ static int get_module_version(TConfig& cfg, void* jolly)
tok->add(cfg.get("Patch"));
map.add(p, tok);
}
return FALSE;
return false;
}
bool TMenu_application::test_network()
@ -1033,8 +1121,8 @@ bool TMenu_application::test_programs()
{
TToken_string dangerous;
bool test = FALSE;
bool more = FALSE;
bool test = false;
bool more = false;
{
TConfig prawin(CONFIG_INSTALL, "Main");
test = prawin.get_bool("TestPrograms");
@ -1048,7 +1136,7 @@ bool TMenu_application::test_programs()
if (remote_name.exist())
{
TProgind pi(3, TR("Controllo aggiornamento programmi"), FALSE, TRUE);
TProgind pi(3, TR("Controllo aggiornamento programmi"), false, TRUE);
TConfig remote_install(remote_name, "Main");
remote_install.write_protect();
@ -1122,10 +1210,10 @@ bool TMenu_application::test_programs()
return TRUE;
}
bool TMenu_application::create()
bool TMenu_application::user_create()
{
if (!test_network())
return FALSE;
return false;
disable_menu_item(M_FILE_PRINT); // Questa voce di menu non serve per ora
@ -1143,7 +1231,7 @@ bool TMenu_application::create()
#endif
if (!check_user())
return FALSE;
return false;
if (!TApplication::test_assistance_year())
{
@ -1155,7 +1243,7 @@ bool TMenu_application::create()
test_temp();
if (!test_programs())
return FALSE;
return false;
if (!_menu.ok())
{
@ -1164,8 +1252,6 @@ bool TMenu_application::create()
menu.ext("men");
_menu.read(menu);
update_preferred_tree();
TSkeleton_application::create();
}
return TRUE;
@ -1200,7 +1286,7 @@ bool TMenu_application::destroy()
void TMenu_application::main_loop()
{
bool run = TRUE;
bool run = user_create();
while (run)
{
int m = 0;
@ -1690,7 +1776,7 @@ bool TPreferred_mask::on_field_event(TOperable_field& o, TField_event e, long jo
switch (e)
{
case se_query_add:
return FALSE;
return false;
case se_enter:
enable(F_PREF_UP, jolly > 0);
enable(F_PREF_DN, jolly < ((TSheet_field&)o).items()-1);
@ -1732,7 +1818,7 @@ bool TPreferred_mask::on_field_event(TOperable_field& o, TField_event e, long jo
const int r = sf.selected();
if (r >= 0)
sf.destroy(r);
return FALSE;
return false;
}
break;
default:
@ -1834,7 +1920,7 @@ bool TMenu_application::menu(MENU_TAG mt)
bool ok = TRUE;
switch (mt)
{
case BAR_ITEM(1): main_loop(); ok = FALSE; break;
case BAR_ITEM(1): main_loop(); ok = false; break;
case MENU_ITEM(2): choose_colors(); break;
case MENU_ITEM(3): choose_editors(); break;
case MENU_ITEM(4): choose_study(); break;
@ -1843,7 +1929,7 @@ bool TMenu_application::menu(MENU_TAG mt)
default:
if (mt >= MENU_ITEM(50) && mt < MENU_ITEM(50+_preferred.items()))
{
bool ok = FALSE;
bool ok = false;
const int index = mt - MENU_ITEM(50);
TToken_string node(_preferred.row(index).get(1), '/');
if (_tree_view != 0)

View File

@ -472,7 +472,7 @@ void TMenulist_window::draw_item(int i)
const int width = rct.right - rct.left;
const int height = rct.bottom - rct.top;
xvt_set_font(win(), NULL, 0, 0); // Set default font
xvtil_set_font(win(), NULL, 0, 0); // Set default font
set_opaque_text(TRUE);
const TMenuitem& item = (const TMenuitem&)_sorted[i];
@ -673,13 +673,13 @@ void TMenulist_window::click_on(int index)
}
}
void TMenulist_window::handler(WINDOW win, EVENT* ep)
void TMenulist_window::handler(WINDOW w, EVENT* ep)
{
switch (ep->type)
{
case E_MOUSE_DOWN:
{
RCT rct; xvt_vobj_get_client_rect(win, &rct);
RCT rct; xvt_vobj_get_client_rect(w, &rct);
const int row = ep->v.mouse.where.v * MENU_ROWS / rct.bottom;
const int col = ep->v.mouse.where.h * MENU_COLS / rct.right;
const int index = row * MENU_COLS + col;
@ -702,11 +702,19 @@ void TMenulist_window::handler(WINDOW win, EVENT* ep)
}
}
break;
case E_MOUSE_MOVE:
if (ADVANCED_GRAPHICS)
{
EVENT e = *ep;
xvt_vobj_translate_points(w, parent(), &e.v.mouse.where, 1);
xvt_win_dispatch_event(parent(), &e);
}
break;
default:
break;
}
TField_window::handler(win, ep);
TField_window::handler(w, ep);
}
void TMenulist_window::select(int s, int direction)