git-svn-id: svn://10.65.10.50/branches/R_10_00@23195 c028cbd2-c16b-5b4b-a496-9718f37d4682

This commit is contained in:
guy 2016-04-15 08:19:07 +00:00
parent d85676355c
commit 1a83d268cb
14 changed files with 463 additions and 700 deletions

View File

@ -10,7 +10,7 @@
#endif
#ifndef __CONFIG_H
class TConfig;
#include <config.h>;
#endif
class TCond_vendita : public TObject

View File

@ -9,6 +9,10 @@
#include <recset.h>
#endif
#ifndef __CONFIG_H
#include <config.h>
#endif
#ifndef __VISWIN_H
class TViswin;
#endif
@ -692,7 +696,7 @@ public:
real& sconto_imp () { return _sconto_imp; }
const real& sconto_imp () const { return _sconto_imp; }
const TCodiceIVA & cod_iva() const { return _codiva; }
byte tipo(){ return _tipo; }// Tipo (Vedi opzioni per la selzione di filtro nella validate())
byte tipo() const { return _tipo; }// Tipo (Vedi opzioni per la selzione di filtro nella validate())
TRiepilogo_iva& operator = (const TRiepilogo_iva & a) { return copy(a); }
TRiepilogo_iva(const TCodiceIVA & codiva);
TRiepilogo_iva(const TRiepilogo_iva & a) { copy(a); }

View File

@ -2,6 +2,7 @@
#include "vepriv.h"
#include "../ca/commesse.h"
#include <config.h>
#include <recset.h>
#include <utility.h>

View File

@ -1,5 +1,5 @@
#include "velib05.h"
#include <config.h>
#include <diction.h>
#include <utility.h>
@ -49,6 +49,14 @@ void TDocumentoEsteso::compile_summary()
}
}
static int riep_sort(const TSortable& o1, const TSortable& o2, void*)
{
const TRiepilogo_iva& r1 = (const TRiepilogo_iva&)o1;
const TRiepilogo_iva& r2 = (const TRiepilogo_iva&)o2;
const real delta = r1.imposta() - r2.imposta();
return delta.sign();
}
void TDocumentoEsteso::summary_filter(byte selector)
{
if (_sum_filter == -1)
@ -63,15 +71,16 @@ void TDocumentoEsteso::summary_filter(byte selector)
// Memorizza in un TString_array tante TToken_string quanti sono i filtri possibili
// (al massimo 31 [1+2+4+8+16]). Ogni TToken_string contiene i codici IVA
// delle righe di TRiepilogo_iva che soddisfano la condizione di filtro
_sum_selected = TRUE;
_sum_selected = true;
_sum_filter = selector;
CHECKD(_sum_filter > 0 && _sum_filter <= 32, "Bad selector ", _sum_filter);
TToken_string& codici = _order_array.row(_sum_filter-1);
if (codici.items() == 0) // Se non c'e' nemmeno un codice IVA allora deve effettuare il filtro
if (codici.blank()) // Se non c'e' nemmeno un codice IVA allora deve effettuare il filtro
{ // ovvero mette in <<codici>> tutti i codici IVA che soddisfano tale filtro
// sara' poi la summary_set_next() a selezionare sequenzialmente il giusto codice a seconda del filtro corrente
// Scorre sequenzialmente la tabella _summary_table e compone la TToken_string con i codici IVA
/*
const int items = summary_items();
TRiepilogo_iva* curr = (TRiepilogo_iva *) _summary_table.first_item();
for (int i = 0; i < items && curr != NULL; i++)
@ -80,6 +89,24 @@ void TDocumentoEsteso::summary_filter(byte selector)
codici.add(curr->cod_iva().codice());
curr = (TRiepilogo_iva*) _summary_table.succ_item();
}
*/
// Ordina i riepiloghi in ordine descrescente di imposta (Da marzo 2016)
TPointer_array ri;
FOR_EACH_ASSOC_OBJECT(_summary_table, obj, key, itm)
{
TRiepilogo_iva* curr = (TRiepilogo_iva*)itm;
if (curr->tipo() & _sum_filter) // se fa parte del filtro selezionato schiaffa il codice nella lista
ri.add(curr);
}
ri.sort(riep_sort, NULL);
FOR_EACH_ARRAY_ITEM(ri, r, obj)
{
const TRiepilogo_iva* curr = (const TRiepilogo_iva*)obj;
codici.add(curr->cod_iva().codice());
}
// Fine ordinamento
codici.restart();
summary_set_next(); // setta l'elemento corrente
}
@ -98,7 +125,7 @@ void TDocumentoEsteso::summary_reset(bool force)
void TDocumentoEsteso::summary_set_next()
{
_sum_selected = FALSE;
_sum_selected = false;
TToken_string& codici = _order_array.row(_sum_filter-1);
const TString4 codiva(codici.get()); // Reperisce il prossimo codice nella lista. (son gia' ordinati per codice)

View File

@ -908,21 +908,18 @@ bool TDocumento_mask::on_key(KEY key)
enable(DLG_SAVEREC);
enable(DLG_DELREC);
xvtil_statbar_set(TR("Modifica"));
/*
TSmart_card * s = smartcard();
if (s != NULL && s->card_connected())
s->enable_prot_fields(*this);
*/
}
else
warning_box("L'utente %s non puo' modificare questo documento",
(const char*)user());
return TRUE;
}
else
if (key == K_F7)
{
const TSheet_field & sf = sfield(F_SHEET);
} else
if (key == K_F7)
{
const TSheet_field & sf = sfield(F_SHEET);
const int sel = sf.selected();
if (sel >= 0 && sel < sf.items())
{
TDocumento & d = doc();
TRiga_documento & riga = d[sf.selected() + 1];
TOriginal_row_mask sm;
@ -952,6 +949,7 @@ bool TDocumento_mask::on_key(KEY key)
else
riga.set_original_rdoc_key(or_row_mod);
}
}
return true;
}
@ -1199,10 +1197,24 @@ void TDocumento_mask::cli2mask(bool force_load)
const bool split_payment = datadoc.year() >= 2015 && c.get_bool(CLI_SPLITPAY);
const bool ivadiff = !split_payment && ven_rec.get_bool(CFV_FATTSOSP);
set(F_LIQDIFF, ivadiff ? "X" : "");
if (ivadiff)
{
TMask_field* ld = find_by_id(F_LIQDIFF);
if (ld)
{
const bool gld = ini_get_bool(CONFIG_DITTA, "cg", "GesLiqDiff");
if (gld != ld->active())
ld->enable(gld);
ld->set(gld ? "X" : "");
}
}
const bool IVAxCassa = !split_payment && !ivadiff && alleg < 5 && gestione_IVAxCassa(datadoc);
set(F_IVAXCASSA, IVAxCassa ? "X" : "");
TMask_field* ixc = find_by_id(F_IVAXCASSA);
if (ixc && ixc->active())
{
const bool IVAxCassa = !split_payment && !ivadiff && alleg < 5 && gestione_IVAxCassa(datadoc);
ixc->set(IVAxCassa ? "X" : "");
}
pos = id2pos(F_CODLIST);

View File

@ -5,7 +5,6 @@
#include <progind.h>
#include <recset.h>
#include <sheet.h>
#include <smartcard.h>
#include <tabutil.h>
#include <toolfld.h>
#include <urldefid.h>
@ -99,61 +98,6 @@ bool totdoc_hndl( TMask_field& field, KEY key )
return true;
}
/* Cassato il macchinaro
bool smart_hndl( TMask_field& field, KEY key )
{
if (key == K_SPACE)
{
TDocumento_mask & m = (TDocumento_mask &) field.mask();
TSmart_card * s = m.smartcard();
if (s != NULL)
{
smartcard_error err = s->connect_card();
if (err == no_smarterror)
err = s->check_key(m);
if (err == no_smarterror)
{
s->card2mask(m);
if (s->with_card(m))
m.enable(DLG_SAVEREC);
m.disable(F_CODCF);
m.disable(F_RAGSOC);
}
else
{
s->display_error(err);
if (err == new_card)
if (m.get(F_CODCF).empty() && m.field(F_CODCF).on_key(K_F9) == false)
{
s->disconnect_card();
return false;
}
}
}
}
else
if (key == K_ENTER)
{
TDocumento_mask & m = (TDocumento_mask &) field.mask();
TSmart_card * s = m.smartcard();
if (s != NULL && s->card_connected())
{
s->mask2card(m);
smartcard_error err = s->write();
if (err != no_smarterror)
s->display_error(err);
if (m.insert_mode() && m.doc().codice_numerazione().save_and_new())
s->disconnect_card();
}
}
return true;
}
*/
bool fido_hndl(TMask_field& field, KEY key)
{
if (key == K_ENTER && !field.empty())
@ -464,11 +408,15 @@ bool data_hndl( TMask_field& field, KEY key )
}
// Abilita IVA per cassa su modifica o inizializzazione DATADOC
if (key == K_TAB && m.id2pos(F_IVAXCASSA) > 0)
TMask_field* ixc = m.find_by_id(F_IVAXCASSA);
if (key == K_TAB && ixc)
{
TDate d = field.get();
if (!d.ok()) d = TODAY;
m.enable(F_IVAXCASSA, gestione_IVAxCassa(d));
ixc->enable(gestione_IVAxCassa(d));
const bool gld = ini_get_bool(CONFIG_DITTA, "cg", "GesLiqDiff");
m.enable(F_LIQDIFF, gld);
}
if (key == K_ENTER || field.to_check(key))

View File

@ -1,337 +0,0 @@
#include "wxinc.h"
#include "wx/print.h"
#include "wx/printdlg.h"
#include "xvt.h"
#include "oslinux.h"
#include "xvt_menu.h"
#include "xvt_help.h"
#include "xvintern.h"
#include <wx/fontenum.h>
#include <wx/string.h>
#include <wx/snglinst.h>
#include <wx/utils.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <mntent.h>
#include <sys/vfs.h>
#include <unistd.h>
wxString OsLinux_File2App(const char* filename)
{
wxString app;
SORRY_BOX();
return app;
}
int OsLinux_EnumerateFamilies(char** families, int max_count)
{
wxFontEnumerator ef;
ef.EnumerateFacenames();
wxArrayString * fonts = ef.GetFacenames();
size_t items = fonts->GetCount();
size_t i;
for (i = 0; i < items; i++)
families[i] = xvt_str_duplicate((*fonts)[i].c_str());
return items;
}
int OsLinux_EnumerateSizes(const char* name, long* sizes, short* scalable, int max_count)
{
int i = 0;
*scalable = 1;
for (int size = 4; size < 80; size++)
sizes[i++] = size;
return i;
}
void OsLinux_PlaceProcessInWindow(unsigned int instance, const char* name, unsigned int parent)
{
SORRY_BOX();
}
void OsLinux_UpdateWindow(unsigned int handle)
{
// non deve fare nulla in Linux, sembra di si verificare SORRY_BOX();
}
///////////////////////////////////////////////////////////
// Hardlock Support
///////////////////////////////////////////////////////////
#include "hlapi_c.h"
bool OsLinux_HL_Login(unsigned short address, const unsigned char* label, const unsigned char* password)
{
int err = HL_LOGIN(address, LOCAL_DEVICE, (unsigned char*)label, (unsigned char*)password);
return err == STATUS_OK;
}
bool OsLinux_HL_Logout()
{
HL_LOGOUT();
return TRUE;
}
bool OsLinux_HL_Read(unsigned short reg, unsigned short* data)
{
int err = HL_READ(reg, data);
return err == STATUS_OK;
}
bool OsLinux_HL_ReadBlock(unsigned char* data)
{
int err = HL_READBL(data);
return err == STATUS_OK;
}
bool OsLinux_HL_Write(unsigned short reg, unsigned short data)
{
int err = HL_WRITE(reg, data);
return err == STATUS_OK;
}
bool OsLinux_HL_Crypt(unsigned short* data) // Array di 4 words (8 bytes)
{
int err = HL_CODE(data, 1);
return err == STATUS_OK;
}
///////////////////////////////////////////////////////////
// Eutron Smartlink Support
///////////////////////////////////////////////////////////
#include "skeylinux.h"
static SKEY_DATA skey;
bool OsLinux_SL_Crypt(unsigned short* data)
{
skey.command = SCRAMBLING_MODE;
memset(skey.data, 0, sizeof(skey.data));
memcpy(skey.data, data, 8);
clink(&skey);
const bool ok = (skey.status == ST_OK);
if (ok)
memcpy(data, skey.data, 8);
return ok;
}
bool OsLinux_SL_Login(const unsigned char* label, const unsigned char* password)
{
memset(&skey, 0, sizeof(SKEY_DATA));
skey.command = LOCATING_MODE;
skey.status = ST_HW_FAILURE; // Don't leave ST_OK = 0 here!
memcpy(skey.label, label, strlen((const char*)label));
memcpy(skey.password, password, strlen((const char*)password));
clink(&skey);
return skey.status == ST_OK;
}
bool OsLinux_SL_Logout()
{
skey.command = 0;
clink(&skey);
return true;
}
bool OsLinux_SL_ReadBlock(unsigned short reg, unsigned short size, unsigned short* data)
{
skey.command = BLOCK_READING_MODE;
unsigned short* pointer = (unsigned short*)(&skey.data[0]);
unsigned short* number = (unsigned short*)(&skey.data[2]);
*pointer = reg;
*number = size;
clink(&skey);
const bool ok = skey.status == ST_OK;
if (ok)
memcpy(data, &skey.data[4], size*sizeof(unsigned short));
return ok;
}
bool OsLinux_SL_WriteBlock(unsigned short reg, unsigned short size, const unsigned short* data)
{
skey.command = BLOCK_WRITING_MODE;
unsigned short* pointer = (unsigned short*)(&skey.data[0]);
unsigned short* number = (unsigned short*)(&skey.data[2]);
*pointer = reg;
*number = size;
memcpy(&skey.data[4], data, size*sizeof(unsigned short));
clink(&skey);
return skey.status == ST_OK;
}
void OsLinux_GetFileSys(const char* path, char * dev, char * dir, char * type)
{
struct mntent *m;
FILE *f = setmntent("/etc/mnttab", "r");
while ((m = getmntent(f)) && strncmp(path, m->mnt_dir, strlen(m->mnt_dir)) != 0);
if (m)
{
if (dev) strcpy(dev, m->mnt_fsname);
if (dir) strcpy(dir, m->mnt_dir);
if (type) strcpy(type, m->mnt_type);
}
else
{
if (dev) *dev = '\0';
if (dir) *dir = '\0';
if (type) *type = '\0';
}
endmntent(f);
}
bool OsLinux_IsNetworkDrive(const char * path)
{
struct statfs buf;
if (statfs(path, &buf) == -1)
return FALSE;
return (buf.f_type == 0x6969 /*NFS_SUPER_MAGIC */) ||
(buf.f_type == 0x517B /*SMB_SUPER_MAGIC)*/);
}
int64_t OsLinux_GetDiskFreeSpace(const char * path)
{
struct statfs buf;
int64_t nBytes = 0L;
if (statfs(path, &buf) != -1)
{
nBytes = buf.f_bsize;
nBytes *= buf.f_bavail;
nBytes *= 1024;
}
return nBytes;
}
#include "wx/settings.h"
#include "X11/Xutil.h"
#ifndef MWM_DECOR_BORDER
#define MWM_HINTS_FUNCTIONS (1L << 0)
#define MWM_HINTS_DECORATIONS (1L << 1)
#define MWM_HINTS_INPUT_MODE (1L << 2)
#define MWM_HINTS_STATUS (1L << 3)
#define MWM_DECOR_ALL (1L << 0)
#define MWM_DECOR_BORDER (1L << 1)
#define MWM_DECOR_RESIZEH (1L << 2)
#define MWM_DECOR_TITLE (1L << 3)
#define MWM_DECOR_MENU (1L << 4)
#define MWM_DECOR_MINIMIZE (1L << 5)
#define MWM_DECOR_MAXIMIZE (1L << 6)
#define MWM_FUNC_ALL (1L << 0)
#define MWM_FUNC_RESIZE (1L << 1)
#define MWM_FUNC_MOVE (1L << 2)
#define MWM_FUNC_MINIMIZE (1L << 3)
#define MWM_FUNC_MAXIMIZE (1L << 4)
#define MWM_FUNC_CLOSE (1L << 5)
#define MWM_INPUT_MODELESS 0
#define MWM_INPUT_PRIMARY_APPLICATION_MODAL 1
#define MWM_INPUT_SYSTEM_MODAL 2
#define MWM_INPUT_FULL_APPLICATION_MODAL 3
#define MWM_INPUT_APPLICATION_MODAL MWM_INPUT_PRIMARY_APPLICATION_MODAL
#define MWM_TEAROFF_WINDOW (1L<<0)
#endif
struct MwmHints {
long flags;
long functions;
long decorations;
long input_mode;
};
#define PROP_MOTIF_WM_HINTS_ELEMENTS 5
// Set the window manager decorations according to the
// given wxWindows style
bool wxSetWMDecorations(Window w, long style)
{
Atom mwm_wm_hints = XInternAtom((Display * )wxGetDisplay(),"_MOTIF_WM_HINTS", False);
if (mwm_wm_hints == 0)
return FALSE;
MwmHints hints;
hints.flags = MWM_HINTS_DECORATIONS | MWM_HINTS_FUNCTIONS;
hints.decorations = 0;
hints.functions = 0;
// if ((style & wxSIMPLE_BORDER) || (style & wxNO_BORDER))
if (style & wxNO_BORDER)
{
// leave zeros
}
else
{
hints.decorations = MWM_DECOR_BORDER;
hints.functions = MWM_FUNC_MOVE | MWM_FUNC_CLOSE;
if ((style & wxCAPTION) != 0)
hints.decorations |= MWM_DECOR_TITLE;
if ((style & wxSYSTEM_MENU) != 0)
{
hints.decorations |= MWM_DECOR_MENU;
}
if ((style & wxMINIMIZE_BOX) != 0)
{
hints.functions |= MWM_FUNC_MINIMIZE;
hints.decorations |= MWM_DECOR_MINIMIZE;
}
if ((style & wxMAXIMIZE_BOX) != 0)
{
hints.functions |= MWM_FUNC_MAXIMIZE;
hints.decorations |= MWM_DECOR_MAXIMIZE;
}
if ((style & wxRESIZE_BORDER) != 0)
{
hints.functions |= MWM_FUNC_RESIZE;
hints.decorations |= MWM_DECOR_RESIZEH;
}
}
XChangeProperty((Display *) wxGetDisplay(), w, mwm_wm_hints, mwm_wm_hints, 32, PropModeReplace,
(unsigned char *) &hints, PROP_MOTIF_WM_HINTS_ELEMENTS);
return TRUE;
}
#include <glib.h>
#include <gdk/gdk.h>
#include <gtk/gtk.h>
#include <gdk/gdkx.h>
void OsLinux_SetCaptionStyle(wxWindow * w, long style)
{
wxSetWMDecorations(GDK_WINDOW_XID(w->m_widget->window), style);
}
int OsLinux_GetSessionId()
{
char s[256];
wxStrncpy(s, wxGetEnv("DISPLAY"), sizeof(s));
char* p = strchr(s, ':');
if (p == NULL)
p = s;
else
p++;
char * e = strchr(p, '.');
if (e != NULL)
*e = '\0';
return atoi(p);
}

View File

@ -1,25 +0,0 @@
wxString OsLinux_File2App(const char* filename);
int OsLinux_EnumerateFamilies(char** families, int max_count);
int OsLinux_EnumerateSizes(const char* name, long* sizes, short* scalable, int max_count);
void OsLinux_PlaceProcessInWindow(unsigned int instance, const char* name, unsigned int parent);
void OsLinux_UpdateWindow(unsigned int handle);
bool OsLinux_HL_Crypt(unsigned short* data);
bool OsLinux_HL_Login(unsigned short address, const unsigned char* label, const unsigned char* password);
bool OsLinux_HL_Logout() ;
bool OsLinux_HL_Read(unsigned short reg, unsigned short* data);
bool OsLinux_HL_ReadBlock(unsigned char* data);
bool OsLinux_HL_Write(unsigned short reg, unsigned short data);
bool OsLinux_SL_Crypt(unsigned short* data);
bool OsLinux_SL_Login(const unsigned char* label, const unsigned char* password);
bool OsLinux_SL_Logout() ;
bool OsLinux_SL_ReadBlock(unsigned short reg, unsigned short size, unsigned short* data);
bool OsLinux_SL_WriteBlock(unsigned short reg, unsigned short size, const unsigned short* data);
void OsLinux_GetFileSys(const char* path, char * dev, char * dir, char * type);
bool OsLinux_IsNetworkDrive(const char * path);
int64_t OsLinux_GetDiskFreeSpace(const char * path);
void OsLinux_SetCaptionStyle(wxWindow * w, long style);
int OsLinux_GetSessionId();

View File

@ -1,146 +0,0 @@
/*
* SmartKey Multilan Driver
* Copyright EUTRON 2003
*/
#ifndef __SKEYLINK_H
#define __SKEYLINK_H
#ifdef __cplusplus
extern "C" {
#endif
#define MAKE_KEY_CODE(low,high) (((unsigned short)(low)) | (((unsigned short)(high)) << 8))
/*
* Commands
*/
#define SCRAMBLING_MODE 's'
#define READING_MODE 'r'
#define WRITING_MODE 'w'
#define FIXING_MODE 'f'
#define LOCATING_MODE 'l'
#define COMPARING_MODE 'c'
#define PROGRAMMING_MODE 'p'
#define MODEL_READING_MODE 'm'
#define ENCRYPTING_MODE 'e'
#define BLOCK_READING_MODE MAKE_KEY_CODE('b','r')
#define BLOCK_WRITING_MODE MAKE_KEY_CODE('b','w')
#define SERIAL_NUMBER_READING_MODE 'n'
#define FIX_READING_MODE 'x'
#define EXT_MODEL_READING_MODE 'h'
#define FAIL_COUNTER_READING_MODE 'a'
#define AES_SET_MODE 'g'
#define AES_SCRAMBLE_MODE 'o'
/*
* Models
*/
#define SKEY_FX '1' /* Model FX */
#define SKEY_PR '2' /* Model PR */
#define SKEY_EP '3' /* Model EP */
#define SKEY_SP '9' /* Model SP */
#define SKEY_XM 'D' /* Model XM */
#define SKEY_NET 'A' /* Model NET */
/*
* Memory sizes
*/
#define SKEY_MEMORY_NONE '0' /* No memory */
#define SKEY_MEMORY_64 '1' /* 64 bytes of memory */
#define SKEY_MEMORY_128 '2' /* 128 bytes of memory */
#define SKEY_MEMORY_416 '3' /* 416 bytes of memory */
#define SKEY_MEMORY_896 '4' /* 896 bytes of memory */
#define SKEY_MEMORY_8192 '8' /* 8192 bytes of memory */
/*
* Return codes
*/
#define ST_OK 0 /* No errors */
#define ST_NONE_KEY -1 /* No Smartkey present */
#define ST_SYNT_ERR -2 /* Syntax error */
#define ST_LABEL_FAILED -3 /* Uncorrect label */
#define ST_PW_DATA_FAILED -4 /* Uncorrect password or data */
#define ST_EXEC_ERROR -16 /* Max executions reached */
#define ST_HW_FAILURE -20 /* Hardware error */
/*
* Field length
*/
#define LABEL_LENGTH 16
#define PASSWORD_LENGTH 16
#define DATA_LENGTH 64
#define EXTENDED_DATA_LENGTH 352
#define SCRAMBLE_LENGTH 8
/*
* Net modes
*/
#define NET_KEY_OPEN 'O'
#define NET_KEY_ACCESS 'A'
#define NET_KEY_CLOSE 'C'
/*
* Net commands
*/
#define USER_NUMBER_MODE 'U'
/*
* Net return codes
*/
#define ST_NET_ERROR -5 /* Lan error */
#define ST_CLOSE_ERROR -6 /* Attempting to CLOSE without OPENing */
#define ST_ACCESS_ERROR -7 /* Attempting to ACCESS without OPENing */
#define ST_USER_ERROR -8 /* Max user reached */
#define ST_NET_PWD_ERR -9 /* Net password wrong */
#define ST_INIT_ERROR -11 /* Initialization error */
#define ST_TOO_MANY_OPEN_KEY -14 /* Too many open SmartKey */
#define ST_NET_PASS_INVALID -15 /* Invalid net password */
#define ST_NET_CONF_ERROR -21 /* Configuration error in INI/Registry/Environment */
#define ST_NET_ANP_INIT_ERROR -22 /* Error inizializing the ANP protocol */
#define ST_NET_TCPIP_INIT_ERROR -23 /* Error inizializing the TCPIP protocol */
#define ST_NET_NOVELL_INIT_ERROR -24 /* Error inizializing the Novell protocol */
#define ST_NET_LOCAL_INIT_ERROR -25 /* Error inizializing the Local protocol */
#define ST_NET_KEY_NOT_MAP -26 /* Not MAP programmed key found when MAP is requested */
/*
* Code returned in data[0] after NET_OPEN
*/
#define NET_TYPE_LOCAL 0
#define NET_TYPE_IPX 1
#define NET_TYPE_ANP 2
#define NET_TYPE_TCPIP 3
/*
* Net command structure
*/
#pragma pack(push,1)
typedef struct __KEY_NET {
short net_command;
unsigned long net_password;
short lpt;
short command;
unsigned char label[LABEL_LENGTH];
unsigned char password[PASSWORD_LENGTH];
unsigned char data[DATA_LENGTH];
short fail_counter;
short status;
unsigned char ext_data[EXTENDED_DATA_LENGTH];
} KEY_NET;
#pragma pack(pop)
/*
* Command function.
* It executes the command and returns key->status code.
*
* short smartlink(KEY_NET* key)
*/
short __cdecl smartlink(KEY_NET*);
#ifdef __cplusplus
}
#endif
#endif

View File

@ -1,84 +0,0 @@
#ifndef __SKEYLINK_H
#define __SKEYLINK_H
#ifndef __SKEYDRV_H
#define __SKEYDRV_H
#ifdef __cplusplus
extern "C" {
#endif
/***************************************************************************/
/* Smartkey mode codes */
#define SCRAMBLING_MODE 's'
#define READING_MODE 'r'
#define WRITING_MODE 'w'
#define FIXING_MODE 'f'
#define LOCATING_MODE 'l'
#define COMPARING_MODE 'c'
#define PROGRAMMING_MODE 'p'
#define MODEL_READING_MODE 'm'
#define ENCRYPTING_MODE 'e'
#define SERIAL_NUMBER_READING_MODE 'n'
#define FIX_READING_MODE 'x'
#define EXT_MODEL_READING_MODE 'h'
#define FAIL_COUNTER_READING_MODE 'a'
#define BLOCK_READING_MODE ('b' | ((unsigned)'r' << 8))
#define BLOCK_WRITING_MODE ('b' | ((unsigned)'w' << 8))
/***************************************************************************/
/* Smartkey models */
#define SKEY_NONE '0' /* No Smartkey */
#define SKEY_FX '1' /* Smartkey mod. FX */
#define SKEY_PR '2' /* Smartkey mod. PR */
#define SKEY_EP '3' /* Smartkey mod. EP */
#define SKEY_SP '9' /* Smartkey mod. SP */
#define SKEY_NET 'A' /* Smartkey mod. NET */
/***************************************************************************/
/* Return codes */
#define ST_OK 0 /* No errors */
#define ST_NONE_KEY -1 /* No Smartkey present */
#define ST_SYNT_ERR -2 /* Syntax error */
#define ST_LABEL_FAILED -3 /* Uncorrect label */
#define ST_PW_DATA_FAILED -4 /* Uncorrect password or data */
#define ST_HW_FAILURE -20 /* Smartkey damaged */
/***************************************************************************/
/* Field length */
#define LABEL_LENGTH 16
#define PASSWORD_LENGTH 16
#define DATA_LENGTH 64
#define EXTENDED_DATA_LENGTH 352
#define SCRAMBLE_LENGTH 8
/***************************************************************************/
/* Communication structure definition */
typedef struct smartkey {
short lpt;
short command;
unsigned char label[LABEL_LENGTH];
unsigned char password[PASSWORD_LENGTH];
unsigned char data[DATA_LENGTH];
short fail_counter;
short status;
unsigned char ext_data[EXTENDED_DATA_LENGTH];
} SKEY_DATA;
/***************************************************************************/
/* Interface function prototype */
int clink(SKEY_DATA*);
#ifdef __cplusplus
}
#endif
#endif
#endif

View File

@ -46,6 +46,7 @@ XVTDLL WINDOW xvt_toolbar_create(int cid, int left, int top, int right, int bot
long style, WINDOW parent_win);
XVTDLL void xvt_toolbar_enable_control(WINDOW win, int cid, BOOLEAN on);
XVTDLL void xvt_toolbar_realize(WINDOW win);
XVTDLL BOOLEAN xvt_toolbar_remove_control(WINDOW win, int cid);
XVTDLL BOOLEAN xvt_toolbar_set_last_tool(WINDOW win, int cid);
XVTDLL void xvt_toolbar_show_control(WINDOW win, int cid, BOOLEAN on);

View File

@ -231,7 +231,7 @@ void xvt_app_destroy(void)
}
#ifdef __WXMSW__
// Evita noiosa finestra d'errore che succede solo a Press Color
// Evita noiosa finestra d'errore che succede solo a PressColor
::SetErrorMode(SEM_NOGPFAULTERRORBOX);
#endif
}
@ -798,7 +798,7 @@ void xvt_dwin_draw_icon_rect(WINDOW win, RCT* rct, int rid)
if (ico.IsOk())
{
CAST_DC(win, dc);
dc.DrawIcon(ico, rct->left+(w-s)/2, rct->top+(h-s)/2);
dc.DrawIcon(ico, rct->left+(w-ico.GetWidth())/2, rct->top+(h-ico.GetHeight())/2);
}
}
}
@ -1713,7 +1713,6 @@ long xvt_fsys_file_attr(const char* path, long attr)
if (count > 0)
{
SLIST_ELT e = xvt_slist_get_first(files);
ret = e->data;
}
else
@ -2620,6 +2619,8 @@ XVT_IMAGE xvt_res_get_icon(int rid)
wxBitmap bmp(w, h, icon.GetDepth());
{
wxMemoryDC dc(bmp);
dc.SetBackground(*wxWHITE_BRUSH);
dc.Clear();
dc.DrawIcon(icon, 0, 0);
}
XVT_IMAGE_FORMAT xif = bmp.GetDepth()>8 ? XVT_IMAGE_RGB : XVT_IMAGE_CL8;

View File

@ -226,13 +226,14 @@ WC_VGAUGE, /* vertical progress bar */
WC_NOTEBK, /* notebook control */
WC_HTML, /* HTML control */
WC_TREE, /* tree view */
WC_OUTLOOKBAR, /* Barra di outlook */
WC_OUTLOOKBAR, /* Barra di Outlook */
WC_HSLIDER, /* horizontal slider control */
WC_VSLIDER, /* vertical slider control */
WC_POPUP, /* list of listedit control or popup menu */
WC_PROPGRID, /* property grid */
WC_MVC, /* model view controller */
WC_TREELIST, /* tree list */
WC_METROBAR, /* Barra di Metro */
} WIN_TYPE;
typedef enum {

View File

@ -48,9 +48,11 @@ static wxBitmap Image2Bitmap(XVT_IMAGE image, int maxx, int maxy, BOOLEAN trans)
static int RoundToIcon(int nSize)
{
nSize = ((nSize+3) / 8) * 8;
if (nSize < 16) nSize = 16;
if (nSize > 128) nSize = 128;
nSize = (nSize/16) * 16;
if (nSize < 16)
nSize = 16; else
if (nSize > 128)
nSize = 128;
return nSize;
}
@ -142,7 +144,7 @@ private:
protected:
DECLARE_EVENT_TABLE();
void OnExpanding(wxTreeEvent& e); // Called when node in about to be expanded
void OnExpanding(wxTreeEvent& e); // Called when node is about to be expanded
void OnCollapsed(wxTreeEvent& e); // Called when node is collapsed
void OnSelected(wxTreeEvent& e); // Calls OnClick(e, false)
void OnActivated(wxTreeEvent& e); // Calls OnClick(e, true)
@ -196,11 +198,14 @@ struct TwxOutlookItem
class TwxOutlookBar : public wxVListBox
{
DECLARE_DYNAMIC_CLASS(TwxOutlookBar);
enum { MAX_ITEMS = 32 };
TwxOutlookItem m_item[MAX_ITEMS];
int m_nHovering;
DECLARE_EVENT_TABLE()
TwxOutlookBar() {}
protected:
virtual void OnDrawBackground(wxDC& dc, const wxRect& rect, size_t n) const;
@ -217,6 +222,40 @@ public:
~TwxOutlookBar();
};
class TwxMetroBar : public wxWindow
{
DECLARE_DYNAMIC_CLASS(TwxMetroBar);
enum { MAX_ITEMS = 32 };
TwxOutlookItem m_item[MAX_ITEMS];
int m_nItems, m_nCurr, m_nHover;
int m_nRows, m_nCols, m_nWidth, m_nHeight;
wxColour m_rgbBorder, m_rgbSelectFore;
DECLARE_EVENT_TABLE()
TwxMetroBar() {}
protected:
void OnPaint(wxPaintEvent& e);
void OnMouseDown(wxMouseEvent& e);
void OnMouseMove(wxMouseEvent& e);
void OnMouseLeave(wxMouseEvent& e);
void OnResize(wxSizeEvent& e);
wxRect GetRect(int i) const;
void DrawCell(wxDC& dc, int i) const;
int HitTest(const wxPoint& pt) const;
public:
void Clear() { m_nItems = 0; }
void SetSelection(int i, bool sel) { if (sel) m_nCurr = (i >= 0 && i < m_nItems) ? i : 0; }
int GetSelection() const { return m_nCurr; }
int Add(short nIconId, const wxString strText, int nFlags);
int GetItemCount() const { return m_nItems; }
void SetSelectForeColor(const wxColour& rgb) { m_rgbSelectFore = rgb; }
void SetBorderColor(const wxColour& rgb) { m_rgbBorder = rgb; }
TwxMetroBar(wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style);
};
class TwxPopUp : public wxVListBox
{
DECLARE_DYNAMIC_CLASS(TwxPopUp);
@ -351,6 +390,13 @@ WINDOW xvt_ctl_create_def(WIN_DEF* win_def_p, WINDOW parent_win, long app_data)
win = (WINDOW)tob;
}
break;
case WC_METROBAR:
{
long style = 0;
TwxMetroBar* tmb = new TwxMetroBar(pParent, id, rct.GetPosition(), rct.GetSize(), style);
win = (WINDOW)tmb;
}
break;
case WC_POPUP:
{
TwxPopUp* tpu = new TwxPopUp(pParent, id, rct.GetPosition(), rct.GetSize());
@ -444,6 +490,12 @@ void xvt_ctl_set_colors(WINDOW win, const XVT_COLOR_COMPONENT* colors, XVT_COLOR
TwxPopUp* tpu = wxDynamicCast(w, TwxPopUp);
if (tpu != NULL)
tpu->SetSelectForeColor(rgb);
else
{
TwxMetroBar* tmb = wxDynamicCast(w, TwxMetroBar);
if (tmb != NULL)
tmb->SetSelectForeColor(rgb);
}
}
break;
case XVT_COLOR_SELECT:
@ -457,6 +509,13 @@ void xvt_ctl_set_colors(WINDOW win, const XVT_COLOR_COMPONENT* colors, XVT_COLOR
if (!w->IsKindOf(CLASSINFO(wxButton)))
w->SetOwnBackgroundColour(rgb);
break;
case XVT_COLOR_BORDER:
{
TwxMetroBar* tmb = wxDynamicCast(w, TwxMetroBar);
if (tmb != NULL)
tmb->SetBorderColor(rgb);
}
break;
default:
break;
}
@ -660,18 +719,34 @@ XVTDLL BOOLEAN xvt_pane_set_size_range(WINDOW win, int min_size, int best_size,
class TwxAuiDefaultTabArt : public wxAuiDefaultTabArt
{
wxColour m_fore_colour;
bool m_metro_style;
protected:
virtual void DrawTab(wxDC& dc, wxWindow* wnd, const wxAuiNotebookPage& pane,
const wxRect& in_rect, int close_button_state,
wxRect* out_tab_rect, wxRect* out_button_rect, int* x_extent);
virtual void DrawBackground(wxDC& dc, wxWindow* wnd, const wxRect& rect);
public:
void SetBackgroundColour(const wxColor& colour) { m_base_colour = colour; }
void SetForegroundColour(const wxColor& colour) { m_fore_colour = colour; }
void SetMetroStyle(bool ms) { m_metro_style = ms; }
virtual wxAuiTabArt* Clone();
};
void TwxAuiDefaultTabArt::DrawBackground(wxDC& dc, wxWindow* wnd, const wxRect& rect)
{
if (m_metro_style)
{
// dc.SetBackground(m_base_colour); dc.Clear();
dc.SetPen(*wxTRANSPARENT_PEN);
dc.SetBrush(m_base_colour);
dc.DrawRectangle(rect);
}
else
wxAuiDefaultTabArt::DrawBackground(dc, wnd, rect);
}
void TwxAuiDefaultTabArt::DrawTab(wxDC& dc, wxWindow* wnd, const wxAuiNotebookPage& pane,
const wxRect& in_rect, int close_button_state,
wxRect* out_tab_rect, wxRect* out_button_rect, int* x_extent)
@ -694,6 +769,7 @@ wxAuiTabArt* TwxAuiDefaultTabArt::Clone()
// My own addition
art->m_base_colour = m_base_colour;
art->m_fore_colour = m_fore_colour;
art->SetMetroStyle(m_metro_style);
return art;
}
@ -861,7 +937,9 @@ TwxNoteBook::TwxNoteBook(wxWindow *parent, wxWindowID id,
const wxPoint& pos, const wxSize& size, long flags)
: wxAuiNotebook(parent, id, pos, size, Flags2Style(flags)), m_bSuspended(false)
{
SetArtProvider(new TwxAuiDefaultTabArt);
TwxAuiDefaultTabArt* dta = new TwxAuiDefaultTabArt;
dta->SetMetroStyle((flags & WSF_NO_TASKBAR) != 0);
SetArtProvider(dta);
_nice_windows.Put((WINDOW)this, this); // Serve per poter fare la xvt_vobj_destroy
wxAuiTabCtrl* atc = GetActiveTabCtrl();
@ -1554,6 +1632,8 @@ XVT_TREEVIEW_NODE xvt_treeview_find_node_string(WINDOW win, const char* text)
// TwxOutlookBar
///////////////////////////////////////////////////////////
IMPLEMENT_DYNAMIC_CLASS(TwxOutlookBar, wxVListBox)
BEGIN_EVENT_TABLE(TwxOutlookBar, wxVListBox)
EVT_COMMAND(wxID_ANY, wxEVT_COMMAND_LISTBOX_SELECTED, TwxOutlookBar::OnSelected)
EVT_COMMAND(wxID_ANY, wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, TwxOutlookBar::OnSelected)
@ -1785,6 +1865,12 @@ int xvt_list_add_item(WINDOW win, short icon, const char* text, int flags)
TwxOutlookBar* olb = wxDynamicCast((wxObject*)win, TwxOutlookBar);
if (olb != NULL)
n = olb->Add(icon, text, flags);
else
{
TwxMetroBar* mb = wxDynamicCast((wxObject*)win, TwxMetroBar);
if (mb != NULL)
n = mb->Add(icon, text, flags);
}
}
return n;
}
@ -1802,6 +1888,12 @@ BOOLEAN xvt_list_clear(WINDOW win)
wxListBox* lb = wxDynamicCast((wxObject*)win, wxListBox);
if (lb != NULL)
lb->Clear();
else
{
TwxMetroBar* mb = wxDynamicCast((wxObject*)win, TwxMetroBar);
if (mb != NULL)
mb->Clear();
}
}
}
return ok;
@ -1820,6 +1912,12 @@ int xvt_list_get_sel_index(WINDOW win)
wxListBox* lb = wxDynamicCast((wxObject*)win, wxListBox);
if (lb != NULL)
sel = lb->GetSelection();
else
{
TwxMetroBar* mb = wxDynamicCast((wxObject*)win, TwxMetroBar);
if (mb != NULL)
sel = mb->GetSelection();
}
}
}
return sel;
@ -1841,6 +1939,12 @@ BOOLEAN xvt_list_set_sel(WINDOW win, int index, BOOLEAN select)
wxListBox* lb = wxDynamicCast((wxObject*)win, wxListBox);
if (lb != NULL)
lb->SetSelection(index, select != 0);
else
{
TwxMetroBar* mb = wxDynamicCast((wxObject*)win, TwxMetroBar);
if (mb != NULL)
mb->SetSelection(index, select!=0);
}
}
}
return ok;
@ -1859,11 +1963,232 @@ int xvt_list_count(WINDOW win)
wxListBox* lb = wxDynamicCast((wxObject*)win, wxListBox);
if (lb != NULL)
n = lb->GetCount();
else
{
TwxMetroBar* mb = wxDynamicCast((wxObject*)win, TwxMetroBar);
if (mb != NULL)
mb->GetItemCount();
}
}
}
return n;
}
///////////////////////////////////////////////////////////
// TwxMetroBar
///////////////////////////////////////////////////////////
IMPLEMENT_DYNAMIC_CLASS(TwxMetroBar, wxWindow)
BEGIN_EVENT_TABLE(TwxMetroBar, wxWindow)
EVT_SIZE(TwxMetroBar::OnResize)
EVT_PAINT(TwxMetroBar::OnPaint)
EVT_MOTION(TwxMetroBar::OnMouseMove)
EVT_LEAVE_WINDOW(TwxMetroBar::OnMouseLeave)
EVT_LEFT_DOWN(TwxMetroBar::OnMouseDown)
END_EVENT_TABLE()
void TwxMetroBar::OnResize(wxSizeEvent& e)
{
m_nWidth = e.m_size.x;
m_nHeight = e.m_size.y;
m_nRows = m_nCols = 0;
if (m_nItems > 0 && m_nWidth >= 32 && m_nHeight >= 32)
{
int nSide = int(sqrt(double(m_nWidth * m_nHeight) / m_nItems));
for ( ; nSide > 32 && m_nRows*m_nCols < m_nItems; nSide--)
{
m_nRows = m_nHeight / nSide;
m_nCols = m_nWidth / nSide;
}
}
}
wxRect TwxMetroBar::GetRect(int i) const
{
wxCoord x0=0, y0=0, x1=0, y1=0;
if (i >= 0 && i < m_nItems && m_nCols > 0)
{
const int r = i / m_nCols;
const int c = i % m_nCols;
x0 = c * m_nWidth / m_nCols;
y0 = r * m_nHeight / m_nRows;
x1 = (i == m_nItems-1)||(c%m_nCols==m_nCols-1) ? m_nWidth : (c+1) * m_nWidth / m_nCols;
y1 = r == m_nRows-1 ? m_nHeight : (r+1) * m_nHeight / m_nRows;
}
return wxRect(x0, y0, x1-x0, y1-y0);
}
void TwxMetroBar::DrawCell(wxDC& dc, int i) const
{
const bool bSelected = (i == m_nHover) || (i == m_nCurr);
dc.SetFont(GetFont()); // Imposta il font predefinito per questo controllo
dc.SetPen(*wxTRANSPARENT_PEN);
wxRect rct = GetRect(i);
dc.SetBrush(bSelected ? m_rgbSelectFore : m_rgbBorder);
dc.DrawRectangle(rct);
rct.Deflate(2, 2);
dc.SetBrush(GetBackgroundColour());
dc.DrawRectangle(rct);
const TwxOutlookItem& oi = m_item[i];
int nIco = 0;
if (oi.m_nIconId > 0 && rct.height > 32)
{
nIco = RoundToIcon(rct.height/2);
const wxIcon ico = xvtart_GetIconResource(oi.m_nIconId, wxART_TOOLBAR, nIco);
if (ico.IsOk())
{
const wxSize szIco(ico.GetWidth(), ico.GetHeight());
dc.DrawIcon(ico, rct.x + (rct.width-szIco.x)/2, rct.y+2);
}
else
nIco = 0;
}
wxString s = oi.m_strText;
const wxRect rctText(rct.x+2, rct.y + nIco, rct.width-4, rct.height - nIco-2);
const wxSize sz = dc.GetTextExtent(oi.m_strText);
if (sz.x > rctText.width)
{
if (sz.x > 3*rctText.width/2)
{
int nSplit1 = s.rfind(' ', s.Length()/3+1);
if (nSplit1 < 0)
nSplit1 = s.find(' ');
if (nSplit1 > 0)
s[nSplit1] = '\n';
int nSplit2 = s.find(' ', 2*s.Length()/3-1);
if (nSplit2 < 0)
nSplit2 = s.rfind(' ');
if (nSplit2 > nSplit1)
s[nSplit2] = '\n';
}
else
{
const int l2 = s.Length()/2;
int nSplit = s.rfind(' ', l2);
if (nSplit < 0)
{
nSplit = s.find(' ', l2);
if (nSplit < 0)
s.insert(l2, "\n");
}
if (nSplit > 0)
s[nSplit] = '\n';
}
}
dc.DrawLabel(s, rctText, wxALIGN_BOTTOM);
}
void TwxMetroBar::OnPaint(wxPaintEvent& evt)
{
wxPaintDC dc(this);
dc.SetBackground(wxBrush(m_rgbBorder));
dc.Clear();
if (m_nItems > 0)
{
if (m_nItems != m_nRows*m_nCols)
{
wxSizeEvent e;
e.m_size = GetClientRect().GetSize();
OnResize(e);
}
for (int i = 0; i < m_nItems; i++)
DrawCell(dc, i);
}
}
int TwxMetroBar::HitTest(const wxPoint& pt) const
{
int i = wxNOT_FOUND;
for (i = m_nItems-1; i >= 0; i--)
{
const wxRect r = GetRect(i);
if (r.Contains(pt))
break;
}
return i;
}
void TwxMetroBar::OnMouseMove(wxMouseEvent& evt)
{
const int nWasHovering = m_nHover;
m_nHover = HitTest(evt.GetPosition());
if (m_nHover != nWasHovering)
{
wxClientDC dc(this);
if (nWasHovering != wxNOT_FOUND)
DrawCell(dc, nWasHovering);
if (m_nHover != wxNOT_FOUND)
DrawCell(dc, m_nHover);
}
}
void TwxMetroBar::OnMouseLeave(wxMouseEvent& WXUNUSED(e))
{
if (m_nHover != wxNOT_FOUND)
{
wxClientDC dc(this);
const int nWasHovering = m_nHover;
m_nHover = wxNOT_FOUND;
DrawCell(dc, nWasHovering);
}
}
void TwxMetroBar::OnMouseDown(wxMouseEvent& e)
{
const int ht = HitTest(e.GetPosition());
if (ht != m_nCurr)
{
const int nPrev = m_nCurr;
m_nCurr = ht;
if (nPrev != wxNOT_FOUND)
{
wxClientDC dc(this);
DrawCell(dc, nPrev);
}
if (m_nCurr >= 0 && m_nCurr < m_nItems )
{
TwxWindow* win = wxDynamicCast(GetParent(), TwxWindow);
if (win != NULL)
{
XVT_EVENT e(E_CONTROL);
e.v.ctl.id = GetId();
e.v.ctl.ci.type = WC_METROBAR;
e.v.ctl.ci.win = WINDOW(this);
win->DoXvtEvent(e);
}
}
}
}
int TwxMetroBar::Add(short nIconId, const wxString strText, int nFlags)
{
if (m_nItems < MAX_ITEMS)
{
TwxOutlookItem& oi = m_item[m_nItems++];
oi.m_nFlags = nFlags;
oi.m_nIconId = nIconId;
oi.m_strText = strText;
}
return m_nItems;
}
TwxMetroBar::TwxMetroBar(wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style)
: wxWindow(parent, id, pos, size, style), m_nItems(0), m_nCurr(wxNOT_FOUND), m_nHover(wxNOT_FOUND),
m_rgbBorder(0x80,0x80,0x80), m_rgbSelectFore(*wxLIGHT_GREY)
{
}
///////////////////////////////////////////////////////////
// TwxPopUp
///////////////////////////////////////////////////////////
@ -1885,8 +2210,7 @@ void TwxPopUp::OnDrawBackground(wxDC& dc, const wxRect& rect, size_t u) const
const int n = u; // Anti warning
if (n == m_nHovering || (m_nHovering == wxNOT_FOUND && IsCurrent(u)))
{
wxBrush brush(m_clrBack);
dc.SetBrush(brush);
dc.SetBrush(m_clrBack);
dc.SetPen(*wxTRANSPARENT_PEN);
dc.DrawRectangle(rect);
}
@ -2127,6 +2451,7 @@ class TwxToolBar : public TwxToolBarBase
{
DECLARE_DYNAMIC_CLASS(TwxToolBar)
wxBitmap m_texture;
bool m_bMetroStyle;
protected:
DECLARE_EVENT_TABLE()
@ -2140,8 +2465,9 @@ protected:
public:
void ShowTool(int id, bool on);
void SetBackgroundTexture(XVT_IMAGE img);
TwxToolBar(wxWindow* parent, wxWindowID id, const wxPoint& pos,
const wxSize& size, long style);
void SetMetroStyle(bool ms);
TwxToolBar(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style);
};
IMPLEMENT_DYNAMIC_CLASS(TwxToolBar, TwxToolBarBase)
@ -2175,23 +2501,30 @@ void TwxToolBar::OnEraseBackground(wxEraseEvent& evt)
}
else
{
const wxColour b0 = GetBackgroundColour();
const wxColour b1 = ModulateColour(b0, -10);
const wxColour b2 = ModulateColour(b0, +70);
wxCoord cw, ch; dc.GetSize(&cw, &ch);
if (m_bMetroStyle)
{
evt.Skip();
}
else
{
const wxColour b0 = GetBackgroundColour();
const wxColour b1 = ModulateColour(b0, -10);
const wxColour b2 = ModulateColour(b0, +70);
wxCoord cw, ch; dc.GetSize(&cw, &ch);
#if wxCHECK_VERSION(2,8,12)
// Nuovo modo: effetto acqua in stile TwxOutlookBar
const wxColour b3 = ModulateColour(b1, +20);
const int delta = 2*ch/5;
wxRect r1(0,0,cw,ch), r2(0,0,cw,ch);
r1.height = delta;
r2.y += delta; r2.height -= delta;
dc.GradientFillLinear(r1, b3, b3, wxDOWN);
dc.GradientFillLinear(r2, b1, b2, wxDOWN);
#else
// Vecchio modo: gradiente classico
dc.GradientFillLinear(wxRect(0,0,cw,ch),b1,b2,wxSOUTH);
// Nuovo modo: effetto acqua in stile Outlook
const wxColour b3 = ModulateColour(b1, +20);
const int delta = 2*ch/5;
wxRect r1(0,0,cw,ch), r2(0,0,cw,ch);
r1.height = delta;
r2.y += delta; r2.height -= delta;
dc.GradientFillLinear(r1, b3, b3, wxDOWN);
dc.GradientFillLinear(r2, b1, b2, wxDOWN);
#else
// Vecchio modo: gradiente classico
dc.GradientFillLinear(wxRect(0,0,cw,ch),b1,b2,wxSOUTH);
#endif
}
}
}
@ -2219,7 +2552,6 @@ bool TwxToolBar::SetForegroundColour(const wxColour& colour)
return ok;
}
void TwxToolBar::SetBackgroundTexture(XVT_IMAGE xvt_img)
{
if (xvt_img != NULL)
@ -2230,13 +2562,17 @@ void TwxToolBar::SetBackgroundTexture(XVT_IMAGE xvt_img)
SetBackgroundColour(mean);
m_texture = wxBitmap(img);
m_bMetroStyle = false;
}
else
m_texture = wxNullBitmap;
}
void TwxToolBar::SetMetroStyle(bool ms)
{ m_bMetroStyle = ms; }
TwxToolBar::TwxToolBar(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style)
: TwxToolBarBase(parent, id, pos, size, style)
: TwxToolBarBase(parent, id, pos, size, style), m_bMetroStyle(false)
{ }
static TwxToolBar* Win2Bar(WINDOW win)
@ -2361,6 +2697,7 @@ WINDOW xvt_toolbar_create(int cid, int left, int top, int right, int bottom, lon
wxWindow* pParent = wxStaticCast((wxObject*)parent, wxWindow);
TwxToolBar* tb = new TwxToolBar(pParent, cid, ptPos, wxDefaultSize, nStyle);
tb->SetToolBitmapSize(wxSize(nIcoSize, nIcoSize));
tb->SetMetroStyle((nFlags & WSF_NO_TASKBAR) != 0);
return (WINDOW)tb;
}
@ -2437,6 +2774,26 @@ void xvt_toolbar_show_control(WINDOW win, int cid, BOOLEAN on)
}
}
BOOLEAN xvt_toolbar_remove_control(WINDOW win, int cid)
{
BOOLEAN ok = FALSE;
TwxToolBar* ptb = Win2Bar(win);
if (ptb != NULL)
{
TwxToolBar& tb = *ptb;
#ifdef wxAuiToolBar
tb.AddSeparator();
ok = idx < 0;
#else
wxToolBarToolBase* tool = tb.RemoveTool(cid);
ok = tool != NULL;
if (ok) delete tool;
#endif
}
return ok;
}
void xvt_dwin_draw_tool(WINDOW win, int x, int y, int rid, int size)
{
const wxBitmap bmp = xvtart_GetToolResource(rid, size);
@ -3288,7 +3645,7 @@ BOOLEAN xvt_html_set_url(WINDOW win, const char* url)
wxHtmlWindow* w = win ? wxDynamicCast((wxObject*)win, wxHtmlWindow) : NULL;
if (w)
{
wxString strLocation = url;
const wxString strLocation = url;
if (strLocation.IsEmpty() || strLocation.StartsWith("<"))
done = w->SetPage(strLocation);
else
@ -3330,6 +3687,9 @@ WIN_TYPE xvt_vobj_get_type(WINDOW win)
const wxPropertyGrid* pg = wxDynamicCast((wxObject*)win, wxPropertyGrid);
if (pg != NULL)
return WC_PROPGRID;
const TwxMetroBar* mb = wxDynamicCast((wxObject*)win, TwxMetroBar);
if (mb != NULL)
return WC_METROBAR;
}
return WO_TE; // Unknown custom control