Patch level : 10.0
Files correlati : ba0 ba1 Ricompilazione Demo : [ ] Commento : Aggiunto supporto per nuovo stile di menu: un applauso per il nuovo Outlook Fashion Style! git-svn-id: svn://10.65.10.50/trunk@16067 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
566d5e5efc
commit
7be186e709
300
ba/ba0100.cpp
300
ba/ba0100.cpp
@ -10,7 +10,6 @@
|
|||||||
#include <relation.h>
|
#include <relation.h>
|
||||||
#include <msksheet.h>
|
#include <msksheet.h>
|
||||||
#include <progind.h>
|
#include <progind.h>
|
||||||
|
|
||||||
#include <sheet.h>
|
#include <sheet.h>
|
||||||
#include <utility.h>
|
#include <utility.h>
|
||||||
#include <urldefid.h>
|
#include <urldefid.h>
|
||||||
@ -21,6 +20,7 @@
|
|||||||
#include "ba0.h"
|
#include "ba0.h"
|
||||||
#include "ba0101.h"
|
#include "ba0101.h"
|
||||||
#include "ba0102.h"
|
#include "ba0102.h"
|
||||||
|
#include "ba0103.h"
|
||||||
#include "ba0100.h"
|
#include "ba0100.h"
|
||||||
|
|
||||||
#include "ba0100a.h"
|
#include "ba0100a.h"
|
||||||
@ -65,6 +65,7 @@ protected:
|
|||||||
int do_level();
|
int do_level();
|
||||||
int do_tree();
|
int do_tree();
|
||||||
int do_explore();
|
int do_explore();
|
||||||
|
int do_outlook();
|
||||||
|
|
||||||
bool check_user();
|
bool check_user();
|
||||||
|
|
||||||
@ -279,273 +280,6 @@ TPicture_mask::~TPicture_mask()
|
|||||||
delete _logo;
|
delete _logo;
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
|
||||||
// Explorer 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 on_firm_change();
|
|
||||||
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:
|
|
||||||
TExplorer_mask(TMenu& menu);
|
|
||||||
~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);
|
|
||||||
}
|
|
||||||
|
|
||||||
void TExplorer_mask::on_firm_change()
|
|
||||||
{
|
|
||||||
force_update();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool TExplorer_mask::stop_run(KEY k)
|
|
||||||
{
|
|
||||||
if (k == K_CTRL+'R')
|
|
||||||
return TWindow::stop_run(k);
|
|
||||||
|
|
||||||
if (k == K_QUIT)
|
|
||||||
{
|
|
||||||
if (ADVANCED_GRAPHICS)
|
|
||||||
{
|
|
||||||
const int divider = 8;
|
|
||||||
WINDOW window[3] = {
|
|
||||||
win(),
|
|
||||||
((TWindowed_field&)field(DLG_TREE)).win().win(),
|
|
||||||
((TWindowed_field&)field(DLG_LIST)).win().win()
|
|
||||||
};
|
|
||||||
|
|
||||||
XVT_IMAGE image[3];
|
|
||||||
int i;
|
|
||||||
for (i = 0; i < 3; i++)
|
|
||||||
{
|
|
||||||
WINDOW& w = window[i];
|
|
||||||
RCT rct; xvt_vobj_get_client_rect(w, &rct);
|
|
||||||
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);
|
|
||||||
xvt_image_destroy(cap);
|
|
||||||
|
|
||||||
for (int y = 0; y < irct.bottom; y++)
|
|
||||||
{
|
|
||||||
for (int x = 0; x < irct.right; x++)
|
|
||||||
{
|
|
||||||
COLOR rgb = xvt_image_get_pixel(img, x, y);
|
|
||||||
const unsigned int r = XVT_COLOR_GET_RED(rgb) / 2;
|
|
||||||
const unsigned int g = XVT_COLOR_GET_GREEN(rgb) / 2;
|
|
||||||
const unsigned int b = XVT_COLOR_GET_BLUE(rgb) / 2;
|
|
||||||
xvt_image_set_pixel(img, x, y, MAKE_COLOR(r, g, b));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
image[i] = img;
|
|
||||||
}
|
|
||||||
for (i = 2; i >= 0; i--)
|
|
||||||
{
|
|
||||||
RCT rct; xvt_vobj_get_client_rect(window[i], &rct);
|
|
||||||
RCT irct = rct; irct.right /= divider; irct.bottom /= divider;
|
|
||||||
xvt_dwin_draw_image(window[i], image[i], &rct, &irct);
|
|
||||||
}
|
|
||||||
// Butto via le immagini dopo averle disegnate tutte
|
|
||||||
for (i = 2; i >= 0; i--)
|
|
||||||
xvt_image_destroy(image[i]);
|
|
||||||
|
|
||||||
if (installing()) //se e' stata lanciata la installazione moduli...
|
|
||||||
{
|
|
||||||
xvt_sys_sleep(1); //..aspetta un attimo poi forza l'uscita
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (!yesno_box(TR("Si desidera uscire?"))) //..altrimenti chiede educatamente se si desidera uscire
|
|
||||||
{
|
|
||||||
for (i = 0; i < 3; i++)
|
|
||||||
xvt_dwin_invalidate_rect(window[i], NULL);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return TMask::stop_run(k);
|
|
||||||
}
|
|
||||||
|
|
||||||
void TExplorer_mask::on_idle()
|
|
||||||
{
|
|
||||||
if (ADVANCED_GRAPHICS)
|
|
||||||
{
|
|
||||||
TWindowed_field& lf = (TWindowed_field&)field(DLG_LIST);
|
|
||||||
lf.win().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 il mouse e' vicino
|
|
||||||
const int dx = mouse.h-p0.h, dy = mouse.v-p0.v;
|
|
||||||
const bool vicino = dx*dx+dy*dy < 65536;
|
|
||||||
xvt_dwin_set_std_cbrush(w, vicino ? 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);
|
|
||||||
|
|
||||||
// Il puntatore del mouse diventa una mosca vicino al ragno
|
|
||||||
xvt_win_set_cursor(w, vicino ? 8883 : CURSOR_ARROW);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void TExplorer_mask::update()
|
|
||||||
{
|
|
||||||
TMask::update();
|
|
||||||
|
|
||||||
WINDOW w = win();
|
|
||||||
RCT client; xvt_vobj_get_client_rect(w, &client);
|
|
||||||
const TString& ragsoc = prefix().firm().ragione_sociale();
|
|
||||||
const int len = xvt_dwin_get_text_width(w, ragsoc, -1);
|
|
||||||
xvt_dwin_draw_text(w, (client.right-len)/2, CHARY, ragsoc, -1);
|
|
||||||
|
|
||||||
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)
|
|
||||||
{
|
|
||||||
set(DLG_USER, app().main_menu().last_search_string(), true);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (k == K_FORCE_CLOSE || k == K_QUIT)
|
|
||||||
return stop_run(k);
|
|
||||||
|
|
||||||
return TMask::on_key(k);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool TExplorer_mask::explore_handler(TMask_field& f, KEY k)
|
|
||||||
{
|
|
||||||
if (k == K_CTRL + K_SPACE)
|
|
||||||
{
|
|
||||||
TTree_field& tf = (TTree_field&)f;
|
|
||||||
TMenu_tree& mt = *(TMenu_tree*)tf.tree();
|
|
||||||
const TMenuitem& mi = mt.curr_item();
|
|
||||||
|
|
||||||
if (mi.perform() && mt.goto_firstson())
|
|
||||||
{
|
|
||||||
TMenulist_field& mf = (TMenulist_field&)f.mask().field(DLG_LIST);
|
|
||||||
mf.set_menu(mt);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
TTree_field& tree_fld = add_tree(DLG_TREE, 0, 0, 0, tree_width, -5);
|
|
||||||
tree_fld.set_tree(&_tree);
|
|
||||||
tree_fld.set_handler(explore_handler);
|
|
||||||
tree_fld.hide_leaves(true);
|
|
||||||
|
|
||||||
TMenulist_field* mf = new TMenulist_field(this);
|
|
||||||
mf->create(DLG_LIST, tree_width-margin+3, 0, -3, -5);
|
|
||||||
mf->set_menu(_tree);
|
|
||||||
add_field(mf);
|
|
||||||
|
|
||||||
TEdit_field& ef = add_string(DLG_USER, 0, PR("Cerca "), 11, -4, 50);
|
|
||||||
ef.set_handler(app().tree_find_handler);
|
|
||||||
|
|
||||||
add_button(DLG_QUIT, 0, "", -12, -2, 18, 2);
|
|
||||||
|
|
||||||
TButton_field& mp = add_button(201, 0, PR("Menu Principale"), -22, -2, 18, 2);
|
|
||||||
mp.set_handler(app().tree_shrink_handler);
|
|
||||||
|
|
||||||
first_focus(DLG_LIST);
|
|
||||||
}
|
|
||||||
|
|
||||||
TExplorer_mask::~TExplorer_mask()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
// Color Mask
|
// Color Mask
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
@ -1438,6 +1172,7 @@ void TMenu_application::main_loop()
|
|||||||
{
|
{
|
||||||
case 1: m = do_tree(); break;
|
case 1: m = do_tree(); break;
|
||||||
case 2: m = do_explore(); break;
|
case 2: m = do_explore(); break;
|
||||||
|
case 3: m = do_outlook(); break;
|
||||||
default: m = do_level(); break;
|
default: m = do_level(); break;
|
||||||
}
|
}
|
||||||
if (m > 0)
|
if (m > 0)
|
||||||
@ -1705,20 +1440,8 @@ bool TMenu_application::tree_handler(TMask_field& f, KEY k)
|
|||||||
void TMenu_application::select_tree_current()
|
void TMenu_application::select_tree_current()
|
||||||
{
|
{
|
||||||
TTree_field& tf = _mask->tfield(DLG_TREE);
|
TTree_field& tf = _mask->tfield(DLG_TREE);
|
||||||
if (_tree_view == 2)
|
|
||||||
{
|
|
||||||
TMenulist_field& mf = (TMenulist_field&)tf.mask().field(DLG_LIST);
|
|
||||||
TMenu_tree& mt = (TMenu_tree&)*tf.tree();
|
|
||||||
mf.set_menu(mt);
|
|
||||||
synchronize_tree_field(tf);
|
|
||||||
mf.set_focus();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
synchronize_tree_field(tf);
|
synchronize_tree_field(tf);
|
||||||
tf.set_focus();
|
tf.set_focus();
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TMenu_application::tree_find_handler(TMask_field&f, KEY k)
|
bool TMenu_application::tree_find_handler(TMask_field&f, KEY k)
|
||||||
@ -1726,10 +1449,7 @@ bool TMenu_application::tree_find_handler(TMask_field&f, KEY k)
|
|||||||
if (k == K_TAB && f.focusdirty() && !f.empty())
|
if (k == K_TAB && f.focusdirty() && !f.empty())
|
||||||
{
|
{
|
||||||
const TString& v = f.get();
|
const TString& v = f.get();
|
||||||
|
TTree_field& tf = f.mask().tfield(DLG_TREE);
|
||||||
TPicture_mask& m = (TPicture_mask&)f.mask();
|
|
||||||
|
|
||||||
TTree_field& tf = (TTree_field&)m.field(DLG_TREE);
|
|
||||||
TMenu_tree& mt = *(TMenu_tree*)tf.tree();
|
TMenu_tree& mt = *(TMenu_tree*)tf.tree();
|
||||||
if (mt.find_string(v))
|
if (mt.find_string(v))
|
||||||
app().select_tree_current();
|
app().select_tree_current();
|
||||||
@ -2060,6 +1780,18 @@ int TMenu_application::do_explore()
|
|||||||
return key == K_QUIT ? -2 : 0;
|
return key == K_QUIT ? -2 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int TMenu_application::do_outlook()
|
||||||
|
{
|
||||||
|
CHECK(_mask == NULL, "Two masks are better than one?");
|
||||||
|
TOutlook_mask mask(_menu);
|
||||||
|
_mask = &mask;
|
||||||
|
|
||||||
|
KEY key = mask.run();
|
||||||
|
_mask = NULL;
|
||||||
|
|
||||||
|
return key == K_QUIT ? -2 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
void TMenu_application::on_firm_change()
|
void TMenu_application::on_firm_change()
|
||||||
{
|
{
|
||||||
TConfig cfgs(CONFIG_STUDIO, "Main"); // Forza creazione STUDIO.INI copiandolo eventulamente da PRASSIS.INI
|
TConfig cfgs(CONFIG_STUDIO, "Main"); // Forza creazione STUDIO.INI copiandolo eventulamente da PRASSIS.INI
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
#include <applicat.h>
|
#include <applicat.h>
|
||||||
#include <dongle.h>
|
#include <dongle.h>
|
||||||
#include <execp.h>
|
|
||||||
#include <mask.h>
|
#include <mask.h>
|
||||||
#include <modaut.h>
|
#include <modaut.h>
|
||||||
#include <nditte.h>
|
#include <nditte.h>
|
||||||
@ -9,22 +8,13 @@
|
|||||||
#include <utility.h>
|
#include <utility.h>
|
||||||
|
|
||||||
#include "ba0100a.h"
|
#include "ba0100a.h"
|
||||||
#include "ba0101.h"
|
#include "ba0103.h"
|
||||||
#include "ba0100.h"
|
#include "ba0100.h"
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
// Utility
|
// Utility
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
bool sys_dll_changed()
|
|
||||||
{
|
|
||||||
TString_array list;
|
|
||||||
int k = list_files("*.dl_", list);
|
|
||||||
if (k == 0)
|
|
||||||
k = list_files("*.ex_", list);
|
|
||||||
return k > 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool _installing = false;
|
static bool _installing = false;
|
||||||
|
|
||||||
void set_installing_flag()
|
void set_installing_flag()
|
||||||
@ -284,10 +274,12 @@ bool TMenuitem::perform_program() const
|
|||||||
if (mask.run() == K_ENTER)
|
if (mask.run() == K_ENTER)
|
||||||
{
|
{
|
||||||
const TDate oggi(TODAY);
|
const TDate oggi(TODAY);
|
||||||
TString16 pwd; pwd << dongle().administrator() << (oggi.month() + oggi.day());
|
TString pwd;
|
||||||
|
pwd << dongle().administrator() << (oggi.month() + oggi.day());
|
||||||
ok = pwd == mask.get(F_PASSWORD);
|
ok = pwd == mask.get(F_PASSWORD);
|
||||||
}
|
}
|
||||||
if (!ok) error_box("Password di servizio errata!\nAccesso negato.");
|
if (!ok)
|
||||||
|
error_box("Password di servizio errata!\nAccesso negato.");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_firm && main_app().get_firm() == 0)
|
if (_firm && main_app().get_firm() == 0)
|
||||||
@ -311,7 +303,12 @@ bool TMenuitem::perform_program() const
|
|||||||
set_installing_flag();
|
set_installing_flag();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
a.run(false,3); //e' un programma normale->sincrono
|
{
|
||||||
|
if (submenu().menu().mask_mode() == 3)
|
||||||
|
a.run(true, 3, false); //e' un programma asincrono
|
||||||
|
else
|
||||||
|
a.run(false, 3); //e' un programma sincrono
|
||||||
|
}
|
||||||
|
|
||||||
prefix().set("DEF"); // Aggiorna prefix
|
prefix().set("DEF"); // Aggiorna prefix
|
||||||
|
|
||||||
@ -643,30 +640,15 @@ bool TMenu::perform()
|
|||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
//setta la trasparenza alle immagini con i 4 corner-pixel di colore uguale
|
|
||||||
bool TMenu::can_be_transparent(const TImage& i) const
|
|
||||||
{
|
|
||||||
const int w = i.width()-1;
|
|
||||||
const int h = i.height()-1;
|
|
||||||
const COLOR col = i.get_pixel(0,0);
|
|
||||||
if (i.get_pixel(w,0) != col)
|
|
||||||
return false;
|
|
||||||
if (i.get_pixel(w,h) != col)
|
|
||||||
return false;
|
|
||||||
if (i.get_pixel(0,h) != col)
|
|
||||||
return false;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
TImage& TMenu::image(const char* name)
|
TImage& TMenu::image(const char* name)
|
||||||
{
|
{
|
||||||
TTimed_image* img = (TTimed_image*)_images.objptr(name);
|
TTimed_image* img = (TTimed_image*)_images.objptr(name);
|
||||||
if (img == NULL)
|
if (img == NULL)
|
||||||
{
|
{
|
||||||
TFilename realname;
|
TFilename realname;
|
||||||
const char* ext[4] = { "jpg", "gif", "bmp", "png" };
|
const char* ext[] = { "jpg", "gif", "bmp", "png", NULL };
|
||||||
bool bFound = false;
|
bool bFound = false;
|
||||||
for (int i = 0; i < 4 && !bFound; i++)
|
for (int i = 0; ext[i] && !bFound; i++)
|
||||||
{
|
{
|
||||||
realname = name;
|
realname = name;
|
||||||
realname.ext(ext[i]);
|
realname.ext(ext[i]);
|
||||||
@ -726,12 +708,11 @@ bool TMenu::has_module(const char* mod)
|
|||||||
|
|
||||||
bool TMenu::is_dangerous(const char* mod)
|
bool TMenu::is_dangerous(const char* mod)
|
||||||
{
|
{
|
||||||
TString code(mod);
|
const char code[4] = { mod[0], mod[1], '\0', '\0' };
|
||||||
code.cut(2);
|
|
||||||
return _dangerous.get_pos(code) >= 0;
|
return _dangerous.get_pos(code) >= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
TMenu::TMenu() : _current(NULL), _item(0)
|
TMenu::TMenu() : _current(NULL), _item(0), _mask_mode(0)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
TMenu::~TMenu()
|
TMenu::~TMenu()
|
||||||
|
@ -121,9 +121,7 @@ class TMenu : public TAssoc_array
|
|||||||
|
|
||||||
TString _last_search;
|
TString _last_search;
|
||||||
TAssoc_array _ignore_list;
|
TAssoc_array _ignore_list;
|
||||||
|
int _mask_mode;
|
||||||
protected:
|
|
||||||
bool can_be_transparent(const TImage& i) const;
|
|
||||||
|
|
||||||
public: // TObject
|
public: // TObject
|
||||||
virtual bool ok() const { return _current != NULL; }
|
virtual bool ok() const { return _current != NULL; }
|
||||||
@ -160,12 +158,13 @@ public:
|
|||||||
void set_dangerous_modules(const TToken_string& mod)
|
void set_dangerous_modules(const TToken_string& mod)
|
||||||
{ _dangerous = mod; }
|
{ _dangerous = mod; }
|
||||||
|
|
||||||
|
void set_mask_mode(int mm) { _mask_mode = mm; }
|
||||||
|
int mask_mode() const { return _mask_mode; }
|
||||||
|
|
||||||
TMenu();
|
TMenu();
|
||||||
virtual ~TMenu();
|
virtual ~TMenu();
|
||||||
};
|
};
|
||||||
|
|
||||||
bool sys_dll_changed();
|
|
||||||
|
|
||||||
void set_installing_flag();
|
void set_installing_flag();
|
||||||
bool installing();
|
bool installing();
|
||||||
|
|
||||||
|
381
ba/ba0102.cpp
381
ba/ba0102.cpp
@ -1,7 +1,10 @@
|
|||||||
#include <controls.h>
|
#include <controls.h>
|
||||||
|
#include <diction.h>
|
||||||
#include <mask.h>
|
#include <mask.h>
|
||||||
|
#include <prefix.h>
|
||||||
#include <statbar.h>
|
#include <statbar.h>
|
||||||
#include <urldefid.h>
|
#include <urldefid.h>
|
||||||
|
#include <utility.h>
|
||||||
|
|
||||||
#include "ba0102.h"
|
#include "ba0102.h"
|
||||||
|
|
||||||
@ -167,6 +170,8 @@ bool TMenu_tree::goto_rbrother()
|
|||||||
|
|
||||||
bool TMenu_tree::goto_node(const TString &id)
|
bool TMenu_tree::goto_node(const TString &id)
|
||||||
{
|
{
|
||||||
|
if (_curr_id != id)
|
||||||
|
{
|
||||||
const int dot = id.rfind('.');
|
const int dot = id.rfind('.');
|
||||||
CHECKS(dot > 0, "Invalid tree node ", (const char*)id);
|
CHECKS(dot > 0, "Invalid tree node ", (const char*)id);
|
||||||
_menuitem = atoi(id.mid(dot+1));
|
_menuitem = atoi(id.mid(dot+1));
|
||||||
@ -176,7 +181,7 @@ bool TMenu_tree::goto_node(const TString &id)
|
|||||||
_curr_id = _curr_id.mid(slash+1);
|
_curr_id = _curr_id.mid(slash+1);
|
||||||
_submenu = _menu->find(_curr_id);
|
_submenu = _menu->find(_curr_id);
|
||||||
_curr_id = id;
|
_curr_id = id;
|
||||||
|
}
|
||||||
return _submenu != NULL;
|
return _submenu != NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -283,7 +288,6 @@ void synchronize_tree_field(TTree_field& tf)
|
|||||||
mt.goto_node(id); // Torna al nodo corrente
|
mt.goto_node(id); // Torna al nodo corrente
|
||||||
|
|
||||||
tf.win().force_update(); // Provoca la rigenerazione dell'albero espanso come sopra
|
tf.win().force_update(); // Provoca la rigenerazione dell'albero espanso come sopra
|
||||||
tf.select_current(); // Riporta la selezione a posto
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool can_be_transparent(const TImage& i)
|
bool can_be_transparent(const TImage& i)
|
||||||
@ -301,7 +305,7 @@ bool can_be_transparent(const TImage& i)
|
|||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
// TMenulist_field
|
// TMenulist_images
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
class TMenulist_images : public TCache
|
class TMenulist_images : public TCache
|
||||||
@ -332,6 +336,9 @@ inline int fast_hypot(int x, int y)
|
|||||||
|
|
||||||
void TMenulist_images::set_owner_info(WINDOW win, int max_side)
|
void TMenulist_images::set_owner_info(WINDOW win, int max_side)
|
||||||
{
|
{
|
||||||
|
if (max_side != _max_side)
|
||||||
|
destroy();
|
||||||
|
|
||||||
_win = win;
|
_win = win;
|
||||||
_max_side = max_side;
|
_max_side = max_side;
|
||||||
}
|
}
|
||||||
@ -341,8 +348,8 @@ TObject* TMenulist_images::key2obj(const char* key)
|
|||||||
TImage* img = NULL;
|
TImage* img = NULL;
|
||||||
|
|
||||||
TFilename name;
|
TFilename name;
|
||||||
const char* ext[3] = { "jpg", "gif", "bmp" };
|
const char* ext[] = { "jpg", "gif", "bmp", "png", NULL };
|
||||||
for (int i = 0; i < 3; i++)
|
for (int i = 0; ext[i] != NULL; i++)
|
||||||
{
|
{
|
||||||
name = key;
|
name = key;
|
||||||
name << '.' << ext[i];
|
name << '.' << ext[i];
|
||||||
@ -418,6 +425,10 @@ TImage* TMenulist_images::image(const char* name)
|
|||||||
return (TImage*)obj;
|
return (TImage*)obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// TMenulist_field
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
class TMenulist_window : public TField_window
|
class TMenulist_window : public TField_window
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
@ -650,9 +661,7 @@ void TMenulist_window::click_on(int index)
|
|||||||
if (ti.action() == mi.action())
|
if (ti.action() == mi.action())
|
||||||
{
|
{
|
||||||
_tree->goto_firstson();
|
_tree->goto_firstson();
|
||||||
TString cazzo1; _tree->curr_id(cazzo1);
|
|
||||||
set_menu(*_tree);
|
set_menu(*_tree);
|
||||||
TString cazzo2; _tree->curr_id(cazzo2);
|
|
||||||
synchronize_buddy_tree();
|
synchronize_buddy_tree();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -711,6 +720,21 @@ void TMenulist_window::handler(WINDOW w, EVENT* ep)
|
|||||||
xvt_vobj_translate_points(w, parent(), &e.v.mouse.where, 1);
|
xvt_vobj_translate_points(w, parent(), &e.v.mouse.where, 1);
|
||||||
xvt_win_dispatch_event(parent(), &e);
|
xvt_win_dispatch_event(parent(), &e);
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
case E_SIZE:
|
||||||
|
{
|
||||||
|
const int h = ep->v.size.height; // Client height
|
||||||
|
const int w = ep->v.size.width; // Client width
|
||||||
|
|
||||||
|
const size_t rh = 32 + 3 * CHARY; // Row height
|
||||||
|
MENU_ROWS = max(1, h / rh);
|
||||||
|
|
||||||
|
const size_t cw = 16*CHARX; // Column width
|
||||||
|
MENU_COLS = max(1, w / cw);
|
||||||
|
|
||||||
|
const int ms = h - 3 * rh; // Max. image size
|
||||||
|
_images.set_owner_info(win(), ms);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@ -865,9 +889,7 @@ void TMenulist_window::set_menu(TMenu_tree& tree)
|
|||||||
if (sm.enabled() && sm.action() == sel_act)
|
if (sm.enabled() && sm.action() == sel_act)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
_image_name = mnu.picture();
|
_image_name = mnu.picture();
|
||||||
|
|
||||||
force_update();
|
force_update();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -875,30 +897,18 @@ TMenulist_window::TMenulist_window(int x, int y, int dx, int dy, WINDOW parent,
|
|||||||
: TField_window(x, y, dx, dy, parent, owner), _tree(NULL), MENU_COLS(4), MENU_ROWS(5)
|
: TField_window(x, y, dx, dy, parent, owner), _tree(NULL), MENU_COLS(4), MENU_ROWS(5)
|
||||||
{
|
{
|
||||||
set_scroll_max(0, 0); // Get rid of that useless scrollbars
|
set_scroll_max(0, 0); // Get rid of that useless scrollbars
|
||||||
|
|
||||||
RCT rct; xvt_vobj_get_client_rect(win(), &rct);
|
|
||||||
const size_t rh = 32 + 3 * CHARY;
|
|
||||||
const size_t mr = rct.bottom / rh;
|
|
||||||
if (mr > MENU_ROWS)
|
|
||||||
MENU_ROWS = mr;
|
|
||||||
|
|
||||||
int ms = rct.bottom - 3 * rh;
|
|
||||||
_images.set_owner_info(win(), ms);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TMenulist_window::~TMenulist_window()
|
TMenulist_window::~TMenulist_window()
|
||||||
{
|
{ }
|
||||||
}
|
|
||||||
|
|
||||||
TField_window* TMenulist_field::create_window(int x, int y, int dx, int dy, WINDOW parent)
|
TField_window* TMenulist_field::create_window(int x, int y, int dx, int dy, WINDOW parent)
|
||||||
{
|
{ return new TMenulist_window(x, y, dx, dy, parent, this); }
|
||||||
return new TMenulist_window(x, y, dx, dy, parent, this);
|
|
||||||
}
|
|
||||||
|
|
||||||
void TMenulist_field::create(short dlg, int x, int y, int dx, int dy)
|
void TMenulist_field::create(short dlg, int x, int y, int dx, int dy, WINDOW parent)
|
||||||
{
|
{
|
||||||
_dlg = dlg;
|
_dlg = dlg;
|
||||||
_win = create_window(x, y, dx, dy, mask().win());
|
_win = create_window(x, y, dx, dy, parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TMenulist_field::set_menu(TMenu_tree& mt)
|
void TMenulist_field::set_menu(TMenu_tree& mt)
|
||||||
@ -912,3 +922,324 @@ void TMenulist_field::curr_item(TToken_string& id) const
|
|||||||
TMenulist_window& w = (TMenulist_window&)win();
|
TMenulist_window& w = (TMenulist_window&)win();
|
||||||
w.curr_item(id);
|
w.curr_item(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// TSpidey_mask
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
void draw_spider(WINDOW w, int mode, const PNT& mouse)
|
||||||
|
{
|
||||||
|
static int _spider = -1;
|
||||||
|
if (_spider < 0)
|
||||||
|
_spider = ADVANCED_GRAPHICS && is_power_station(); // Attiva eventuale ragno
|
||||||
|
|
||||||
|
if (_spider && w != NULL_WIN)
|
||||||
|
{
|
||||||
|
RCT client; xvt_vobj_get_client_rect(w, &client);
|
||||||
|
|
||||||
|
if (client.right > 128 && client.bottom > 64)
|
||||||
|
{
|
||||||
|
const PNT p0 = { client.top+64, client.right-64 }; // Centro del ragno
|
||||||
|
if (mode & 0x1)
|
||||||
|
{
|
||||||
|
// Disegno il filo
|
||||||
|
const PNT p1 = { client.top, 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 il mouse e' vicino
|
||||||
|
const int dx = mouse.h-p0.h, dy = mouse.v-p0.v;
|
||||||
|
const bool vicino = dx*dx+dy*dy < 65536;
|
||||||
|
xvt_dwin_set_std_cbrush(w, vicino ? 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);
|
||||||
|
|
||||||
|
// Il puntatore del mouse diventa una mosca vicino al ragno
|
||||||
|
xvt_win_set_cursor(w, vicino ? 8883 : CURSOR_ARROW);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void TSpidey_mask::on_firm_change()
|
||||||
|
{
|
||||||
|
force_update();
|
||||||
|
}
|
||||||
|
|
||||||
|
WINDOW TSpidey_mask::dlg2win(short id) const
|
||||||
|
{
|
||||||
|
WINDOW w = NULL_WIN;
|
||||||
|
const int pos = id2pos(id);
|
||||||
|
if (pos >= 0)
|
||||||
|
{
|
||||||
|
TMask_field& f = fld(pos);
|
||||||
|
CHECKD(f.is_kind_of(CLASS_WINDOWED_FIELD), "Not a windowed field ", id);
|
||||||
|
w = ((TWindowed_field&)f).win().win();
|
||||||
|
}
|
||||||
|
return w;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TSpidey_mask::stop_run(KEY k)
|
||||||
|
{
|
||||||
|
if (k == K_CTRL+'R')
|
||||||
|
return TWindow::stop_run(k);
|
||||||
|
|
||||||
|
if (k == K_QUIT)
|
||||||
|
{
|
||||||
|
if (ADVANCED_GRAPHICS)
|
||||||
|
{
|
||||||
|
const int divider = 8;
|
||||||
|
const WINDOW window[4] = { win(), dlg2win(101),
|
||||||
|
dlg2win(102), dlg2win(103) };
|
||||||
|
XVT_IMAGE image[4]; memset(image, 0, sizeof(image));
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < 4; i++)
|
||||||
|
{
|
||||||
|
const WINDOW& w = window[i];
|
||||||
|
if (w != NULL_WIN)
|
||||||
|
{
|
||||||
|
RCT rct; xvt_vobj_get_client_rect(w, &rct);
|
||||||
|
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);
|
||||||
|
xvt_image_destroy(cap);
|
||||||
|
|
||||||
|
for (int y = 0; y < irct.bottom; y++)
|
||||||
|
{
|
||||||
|
for (int x = 0; x < irct.right; x++)
|
||||||
|
{
|
||||||
|
COLOR rgb = xvt_image_get_pixel(img, x, y);
|
||||||
|
const unsigned int r = XVT_COLOR_GET_RED(rgb) / 2;
|
||||||
|
const unsigned int g = XVT_COLOR_GET_GREEN(rgb) / 2;
|
||||||
|
const unsigned int b = XVT_COLOR_GET_BLUE(rgb) / 2;
|
||||||
|
xvt_image_set_pixel(img, x, y, MAKE_COLOR(r, g, b));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
image[i] = img;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (i = 3; i >= 0; i--) if (image[i] != NULL)
|
||||||
|
{
|
||||||
|
const WINDOW& w = window[i];
|
||||||
|
if (w != NULL_WIN)
|
||||||
|
{
|
||||||
|
RCT rct; xvt_vobj_get_client_rect(w, &rct);
|
||||||
|
RCT irct = rct; irct.right /= divider; irct.bottom /= divider;
|
||||||
|
xvt_dwin_draw_image(w, image[i], &rct, &irct);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Butto via le immagini dopo averle disegnate tutte
|
||||||
|
for (i = 2; i >= 0; i--)
|
||||||
|
xvt_image_destroy(image[i]);
|
||||||
|
|
||||||
|
if (installing()) //se e' stata lanciata la installazione moduli...
|
||||||
|
{
|
||||||
|
xvt_sys_sleep(1); //..aspetta un attimo poi forza l'uscita
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!yesno_box(TR("Si desidera uscire?"))) //..altrimenti chiede educatamente se si desidera uscire
|
||||||
|
{
|
||||||
|
for (i = 0; i < 3; i++)
|
||||||
|
xvt_dwin_invalidate_rect(window[i], NULL);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return TMask::stop_run(k);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TSpidey_mask::on_key(KEY k)
|
||||||
|
{
|
||||||
|
if (k == K_FORCE_CLOSE || k == K_QUIT)
|
||||||
|
return stop_run(k);
|
||||||
|
|
||||||
|
return TMask::on_key(k);
|
||||||
|
}
|
||||||
|
|
||||||
|
TSpidey_mask::TSpidey_mask() : TAutomask ("", 1, 0, 0, 0, 0)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// TExplorer_mask
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#define DLG_TREE 301
|
||||||
|
#define DLG_LIST 302
|
||||||
|
#define DLG_LOOK 303
|
||||||
|
|
||||||
|
void TExplorer_mask::update()
|
||||||
|
{
|
||||||
|
TMask::update();
|
||||||
|
|
||||||
|
if (ADVANCED_GRAPHICS)
|
||||||
|
{
|
||||||
|
WINDOW w = toolwin();
|
||||||
|
RCT client; xvt_vobj_get_client_rect(w, &client);
|
||||||
|
const TString& ragsoc = prefix().firm().ragione_sociale();
|
||||||
|
const int len = xvt_dwin_get_text_width(w, ragsoc, -1);
|
||||||
|
xvt_dwin_draw_text(w, (client.right-len)/2, client.bottom-2, ragsoc, -1);
|
||||||
|
|
||||||
|
const PNT pnt = { 0, 0 };
|
||||||
|
draw_spider(w, 0x3, pnt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void TExplorer_mask::handler(WINDOW win, EVENT* ep)
|
||||||
|
{
|
||||||
|
if (ep->type == E_MOUSE_MOVE)
|
||||||
|
draw_spider(toolwin(), 0x3, ep->v.mouse.where);
|
||||||
|
TSpidey_mask::handler(win, ep);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TExplorer_mask::on_idle()
|
||||||
|
{
|
||||||
|
if (ADVANCED_GRAPHICS)
|
||||||
|
{
|
||||||
|
TWindowed_field& lf = (TWindowed_field&)field(DLG_LIST);
|
||||||
|
lf.win().on_idle();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void TExplorer_mask::select_tree_current()
|
||||||
|
{
|
||||||
|
TTree_field& tf = tfield(DLG_TREE);
|
||||||
|
TMenulist_field& mf = (TMenulist_field&)field(DLG_LIST);
|
||||||
|
TMenu_tree& mt = (TMenu_tree&)*tf.tree();
|
||||||
|
mf.set_menu(mt);
|
||||||
|
synchronize_tree_field(tf);
|
||||||
|
mf.set_focus();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TExplorer_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||||
|
{
|
||||||
|
switch(o.dlg())
|
||||||
|
{
|
||||||
|
case DLG_TREE:
|
||||||
|
if (e == fe_modify)
|
||||||
|
{
|
||||||
|
TTree_field& tf = (TTree_field&)o;
|
||||||
|
TMenu_tree& mt = *(TMenu_tree*)tf.tree();
|
||||||
|
const TMenuitem& mi = mt.curr_item();
|
||||||
|
if (mi.perform() && mt.goto_firstson())
|
||||||
|
{
|
||||||
|
TMenulist_field& mf = (TMenulist_field&)field(DLG_LIST);
|
||||||
|
mf.set_menu(mt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case DLG_SHRINK:
|
||||||
|
if (e == fe_button)
|
||||||
|
{
|
||||||
|
TTree_field& tf = tfield(DLG_TREE);
|
||||||
|
TTree& mt = *tf.tree();
|
||||||
|
mt.shrink_all();
|
||||||
|
mt.goto_root();
|
||||||
|
select_tree_current();
|
||||||
|
}
|
||||||
|
case DLG_USER:
|
||||||
|
if (e == fe_modify && !o.empty())
|
||||||
|
{
|
||||||
|
const TString& v = o.get();
|
||||||
|
TTree_field& tf = tfield(DLG_TREE);
|
||||||
|
TMenu_tree& mt = *(TMenu_tree*)tf.tree();
|
||||||
|
if (mt.find_string(v))
|
||||||
|
{
|
||||||
|
select_tree_current();
|
||||||
|
_last_search_string = v;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
beep();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TExplorer_mask::on_key(KEY k)
|
||||||
|
{
|
||||||
|
if (k == K_F3 || k == K_F8)
|
||||||
|
{
|
||||||
|
set(DLG_USER, _last_search_string, true);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return TSpidey_mask::on_key(k);
|
||||||
|
}
|
||||||
|
|
||||||
|
TExplorer_mask::TExplorer_mask(TMenu& menu) : _tree(menu)
|
||||||
|
{
|
||||||
|
// Bottom Toolbar
|
||||||
|
insert_page("4", -1); // Crea toolbar di "4" righe
|
||||||
|
|
||||||
|
add_button(DLG_QUIT, -1, "", -12, -2, 18, 2);
|
||||||
|
add_button(DLG_SHRINK, -1, PR("Menu Principale"), -22, -2, 18, 2);
|
||||||
|
add_string(DLG_USER, -1, PR("Cerca "), 11, -4, 50);
|
||||||
|
|
||||||
|
// Tree view
|
||||||
|
TTree_field& trifola = add_tree(DLG_TREE, 0, 0, 0, 32, 0);
|
||||||
|
trifola.set_tree(&_tree);
|
||||||
|
trifola.hide_leaves(true); // Nascondo le foglie che vengono gestite dal TMenulist_field
|
||||||
|
|
||||||
|
// List view
|
||||||
|
TMenulist_field* mf = new TMenulist_field(this);
|
||||||
|
mf->create(DLG_LIST, 21, 0, 0, 0, win());
|
||||||
|
mf->set_menu(*(TMenu_tree*)trifola.tree());
|
||||||
|
add_field(mf);
|
||||||
|
|
||||||
|
xvt_win_add_pane(win(), dlg2win(DLG_LIST), "Main", 0, 0); // Main pane
|
||||||
|
xvt_win_add_pane(win(), dlg2win(DLG_TREE), "Menu", 1, 0); // Left pane
|
||||||
|
|
||||||
|
first_focus(DLG_LIST);
|
||||||
|
set_handlers();
|
||||||
|
}
|
||||||
|
57
ba/ba0102.h
57
ba/ba0102.h
@ -1,8 +1,12 @@
|
|||||||
#ifndef __BA0102_H
|
#ifndef __BA0102_H
|
||||||
#define __BA0102_H
|
#define __BA0102_H
|
||||||
|
|
||||||
#ifndef __MASKFLD_H
|
#ifndef __AUTOMASK_H
|
||||||
#include <maskfld.h>
|
#include <automask.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __TREECTRL_H
|
||||||
|
#include <treectrl.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef __TREE_H
|
#ifndef __TREE_H
|
||||||
@ -55,6 +59,28 @@ public:
|
|||||||
virtual ~TMenu_tree() { }
|
virtual ~TMenu_tree() { }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// TSpidey_mask Intended for internal use only :-)
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
class TSpidey_mask : public TAutomask
|
||||||
|
{
|
||||||
|
protected: // TMask
|
||||||
|
virtual void on_firm_change();
|
||||||
|
virtual bool stop_run(KEY k);
|
||||||
|
virtual bool on_key(KEY k);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
WINDOW dlg2win(short id) const;
|
||||||
|
|
||||||
|
public:
|
||||||
|
TSpidey_mask();
|
||||||
|
};
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// TMenulist_field
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
class TMenulist_field : public TWindowed_field
|
class TMenulist_field : public TWindowed_field
|
||||||
{
|
{
|
||||||
protected: // TWindowed_field
|
protected: // TWindowed_field
|
||||||
@ -62,15 +88,40 @@ protected: // TWindowed_field
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
void set_menu(TMenu_tree& mt);
|
void set_menu(TMenu_tree& mt);
|
||||||
void create(short dlg, int x, int y, int dx, int dy);
|
void create(short dlg, int x, int y, int dx, int dy, WINDOW parent);
|
||||||
void curr_item(TToken_string& id) const;
|
void curr_item(TToken_string& id) const;
|
||||||
|
|
||||||
TMenulist_field(TMask* m) : TWindowed_field(m) { }
|
TMenulist_field(TMask* m) : TWindowed_field(m) { }
|
||||||
virtual ~TMenulist_field() { }
|
virtual ~TMenulist_field() { }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// TExplorer_mask
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
class TExplorer_mask : public TSpidey_mask
|
||||||
|
{
|
||||||
|
TMenu_tree _tree;
|
||||||
|
TString _last_search_string;
|
||||||
|
|
||||||
|
protected: // TMask
|
||||||
|
virtual void update();
|
||||||
|
virtual void handler(WINDOW win, EVENT* ep);
|
||||||
|
virtual void on_idle();
|
||||||
|
virtual bool on_key(KEY k);
|
||||||
|
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void select_tree_current();
|
||||||
|
enum { DLG_TREE = 101, DLG_LIST = 102, DLG_SHRINK = 201 };
|
||||||
|
|
||||||
|
public:
|
||||||
|
TExplorer_mask(TMenu& menu);
|
||||||
|
};
|
||||||
|
|
||||||
// Utilities
|
// Utilities
|
||||||
void synchronize_tree_field(TTree_field& tf);
|
void synchronize_tree_field(TTree_field& tf);
|
||||||
bool can_be_transparent(const TImage& i);
|
bool can_be_transparent(const TImage& i);
|
||||||
|
void draw_spider(WINDOW win, int mode, const PNT& mouse);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
169
ba/ba0103.cpp
Executable file
169
ba/ba0103.cpp
Executable file
@ -0,0 +1,169 @@
|
|||||||
|
#include "ba0103.h"
|
||||||
|
|
||||||
|
#include <defmask.h>
|
||||||
|
#include <xvtility.h>
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// TCampo_window
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
class TCampo_window : public TField_window
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
virtual void update();
|
||||||
|
virtual void handler(WINDOW win, EVENT* ep);
|
||||||
|
|
||||||
|
public:
|
||||||
|
TCampo_window(int x, int y, int dx, int dy,
|
||||||
|
WINDOW parent, TWindowed_field* owner);
|
||||||
|
};
|
||||||
|
|
||||||
|
void TCampo_window::update()
|
||||||
|
{
|
||||||
|
TField_window::update();
|
||||||
|
|
||||||
|
RCT rctw; xvt_vobj_get_client_rect(win(), &rctw);
|
||||||
|
if (rctw.right >= 32)
|
||||||
|
{
|
||||||
|
TImage image("logo.gif");
|
||||||
|
|
||||||
|
RCT rcti = image.rect();
|
||||||
|
if (rcti.right > rctw.right)
|
||||||
|
{
|
||||||
|
const double ratio = double(rctw.right) / double(rcti.right);
|
||||||
|
rcti.right = int(rcti.right * ratio);
|
||||||
|
rcti.bottom = int(rcti.bottom * ratio);
|
||||||
|
}
|
||||||
|
xvt_rect_offset(&rcti, rctw.right - rcti.right, rctw.bottom - rcti.bottom);
|
||||||
|
image.draw(win(), rcti);
|
||||||
|
|
||||||
|
PNT pnt = { 0, 0 };
|
||||||
|
draw_spider(win(), 0x3, pnt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void TCampo_window::handler(WINDOW win, EVENT* ep)
|
||||||
|
{
|
||||||
|
if (ep->type == E_MOUSE_MOVE)
|
||||||
|
draw_spider(win, 0x3, ep->v.mouse.where);
|
||||||
|
TField_window::handler(win, ep);
|
||||||
|
}
|
||||||
|
|
||||||
|
TCampo_window::TCampo_window(int x, int y, int dx, int dy,
|
||||||
|
WINDOW parent, TWindowed_field* owner)
|
||||||
|
: TField_window(x, y, dx, dy, parent, owner)
|
||||||
|
{
|
||||||
|
set_caption("__CAMPO_MENU__");
|
||||||
|
set_scroll_max(0, 0); // Get rid of that useless scrollbars
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// TCampo_field
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
class TCampo_field : public TWindowed_field
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
virtual TField_window* create_window(int x, int y, int dx, int dy, WINDOW parent);
|
||||||
|
|
||||||
|
public:
|
||||||
|
void create(short dlg, int x, int y, int dx, int dy, WINDOW parent);
|
||||||
|
TCampo_field(TMask* m) : TWindowed_field(m) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
TField_window* TCampo_field::create_window(int x, int y, int dx, int dy, WINDOW parent)
|
||||||
|
{
|
||||||
|
return new TCampo_window(x, y, dx, dy, parent, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TCampo_field::create(short dlg, int x, int y, int dx, int dy, WINDOW parent)
|
||||||
|
{
|
||||||
|
_dlg = dlg;
|
||||||
|
_win = create_window(x, y, dx, dy, parent);
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// TOutlook_mask
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
bool TOutlook_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||||
|
{
|
||||||
|
switch (o.dlg())
|
||||||
|
{
|
||||||
|
case DLG_TREE:
|
||||||
|
if (e == fe_modify)
|
||||||
|
{
|
||||||
|
const TMenuitem& mi = _tree.curr_item();
|
||||||
|
if (mi.enabled())
|
||||||
|
{
|
||||||
|
if (mi.is_submenu())
|
||||||
|
{
|
||||||
|
if (!_tree.expanded())
|
||||||
|
mi.perform();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mi.perform();
|
||||||
|
if (installing())
|
||||||
|
stop_run(K_FORCE_CLOSE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case DLG_LOOK:
|
||||||
|
if (e == fe_modify)
|
||||||
|
{
|
||||||
|
const int sel = atoi(o.get());
|
||||||
|
_tree.goto_root();
|
||||||
|
for (int i = 0; i < sel; i++)
|
||||||
|
_tree.goto_rbrother();
|
||||||
|
synchronize_tree_field(tfield(DLG_TREE));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
TOutlook_mask::TOutlook_mask(TMenu& menu) : _tree(menu)
|
||||||
|
{
|
||||||
|
xvtil_statbar_destroy(); // Ammazza status bar inutile
|
||||||
|
RCT rct; xvt_vobj_get_client_rect(TASK_WIN, &rct);
|
||||||
|
xvt_vobj_move(win(), &rct); // Resiza la maschera in modo da occupare lo spazio liberato
|
||||||
|
|
||||||
|
menu.set_mask_mode(3); // Outlook mode
|
||||||
|
|
||||||
|
TTree_field& trifola = add_tree(DLG_TREE, 0, 0, 0, 28, 0);
|
||||||
|
trifola.set_tree(&_tree);
|
||||||
|
|
||||||
|
const int w = trifola.win().columns();
|
||||||
|
const int h = trifola.win().rows() / 2;
|
||||||
|
TOutlook_field* of = new TOutlook_field(this);
|
||||||
|
of->create(DLG_LOOK, 0, h, w, h, win());
|
||||||
|
add_field(of);
|
||||||
|
|
||||||
|
TCampo_field* cf = new TCampo_field(this);
|
||||||
|
cf->create(DLG_MAIN, w, 0, 0, 0, win());
|
||||||
|
add_field(cf);
|
||||||
|
|
||||||
|
TString caption;
|
||||||
|
for (bool ok = _tree.goto_root(); ok; ok = _tree.goto_rbrother())
|
||||||
|
{
|
||||||
|
_tree.get_description(caption);
|
||||||
|
const TMenuitem& mi = _tree.curr_item();
|
||||||
|
const int ico = mi.enabled() ? mi.icon() : 10203;
|
||||||
|
of->add_item(ico, caption, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
xvt_win_add_pane(win(), dlg2win(DLG_TREE), "Menu", 1, 0); // Left upper pane
|
||||||
|
xvt_win_add_pane(win(), dlg2win(DLG_LOOK), "Bar", 1, 0); // Left lower pane
|
||||||
|
xvt_win_add_pane(win(), dlg2win(DLG_MAIN), "Main", 0, 0); // Main pane
|
||||||
|
|
||||||
|
set_handlers();
|
||||||
|
}
|
||||||
|
|
||||||
|
TOutlook_mask::~TOutlook_mask()
|
||||||
|
{
|
||||||
|
// Ricostruisci status bar tornata utile
|
||||||
|
xvtil_create_statbar();
|
||||||
|
}
|
29
ba/ba0103.h
Executable file
29
ba/ba0103.h
Executable file
@ -0,0 +1,29 @@
|
|||||||
|
#ifndef __BA0103_H
|
||||||
|
#define __BA0103_H
|
||||||
|
|
||||||
|
#ifndef TMenu_tree
|
||||||
|
#include "ba0102.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __EXECP_H
|
||||||
|
#include <execp.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// TOutlook_mask
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
class TOutlook_mask : public TSpidey_mask
|
||||||
|
{
|
||||||
|
TMenu_tree _tree;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
||||||
|
enum { DLG_TREE = 101, DLG_LOOK = 102, DLG_MAIN = 103 };
|
||||||
|
|
||||||
|
public:
|
||||||
|
TOutlook_mask(TMenu& menu);
|
||||||
|
~TOutlook_mask();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
@ -8,6 +8,7 @@ BEGIN
|
|||||||
ITEM " |Normale"
|
ITEM " |Normale"
|
||||||
ITEM "1|Albero"
|
ITEM "1|Albero"
|
||||||
ITEM "2|Explorer"
|
ITEM "2|Explorer"
|
||||||
|
ITEM "3|Outlook"
|
||||||
END
|
END
|
||||||
|
|
||||||
SPREADSHEET F_PREF_SHEET 63 -3
|
SPREADSHEET F_PREF_SHEET 63 -3
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
#include <relapp.h>
|
#include <relapp.h>
|
||||||
#include <utility.h>
|
#include <utility.h>
|
||||||
#include <tree.h>
|
#include <tree.h>
|
||||||
|
#include <treectrl.h>
|
||||||
#include <urldefid.h>
|
#include <urldefid.h>
|
||||||
|
|
||||||
#include "ba1.h"
|
#include "ba1.h"
|
||||||
|
@ -1608,7 +1608,7 @@ bool TCreadischi_mask::import_export_handler(TMask_field& f, KEY k)
|
|||||||
fm.build_export_path(path);
|
fm.build_export_path(path);
|
||||||
|
|
||||||
FILE_SPEC fs;
|
FILE_SPEC fs;
|
||||||
xvt_fsys_convert_str_to_dir(path.get_buffer(), &fs.dir);
|
xvt_fsys_convert_str_to_dir(path, &fs.dir);
|
||||||
path.add(module); path << "inst.ini"; path.lower();
|
path.add(module); path << "inst.ini"; path.lower();
|
||||||
strcpy(fs.type, "ini");
|
strcpy(fs.type, "ini");
|
||||||
strcpy(fs.name, path.name());
|
strcpy(fs.name, path.name());
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
#include <prefix.h>
|
#include <prefix.h>
|
||||||
#include <relation.h>
|
#include <relation.h>
|
||||||
#include <sheet.h>
|
#include <sheet.h>
|
||||||
#include <tree.h>
|
#include <treectrl.h>
|
||||||
#include <utility.h>
|
#include <utility.h>
|
||||||
#include <xml.h>
|
#include <xml.h>
|
||||||
|
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
#include <prefix.h>
|
#include <prefix.h>
|
||||||
#include <printer.h>
|
#include <printer.h>
|
||||||
#include <reprint.h>
|
#include <reprint.h>
|
||||||
|
#include <treectrl.h>
|
||||||
#include <utility.h>
|
#include <utility.h>
|
||||||
|
|
||||||
#include "ba8300.h"
|
#include "ba8300.h"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user