Patch level : 10.0
Files correlati : tutti Ricompilazione Demo : [ ] Commento : Aggiunto bottone di ricerca con icona diversa dal normale bottone dei listbox git-svn-id: svn://10.65.10.50/trunk@17319 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
bf9410aed9
commit
30776a4132
@ -58,7 +58,7 @@ void TInfo_mask::add_row(const char* prompt, unsigned long value, int err)
|
||||
}
|
||||
|
||||
TInfo_mask::TInfo_mask()
|
||||
: TArray_sheet(-1, -1, 78, 18, "Informazioni", "@16|@60")
|
||||
: TArray_sheet(-1, -1, 78, 20, "Informazioni", "@16|@60")
|
||||
{
|
||||
const word ser_no = dongle().number();
|
||||
|
||||
|
@ -384,7 +384,7 @@ void init_controls()
|
||||
xi_set_pref(XI_PREF_3D_LOOK, CAMPI_SCAVATI);
|
||||
xi_set_pref(XI_PREF_CARET_WIDTH, 2);
|
||||
xi_set_pref(XI_PREF_COMBO_ICON, ICO_COMBO);
|
||||
xi_set_pref(XI_PREF_OPTIMIZE_CELL_REQUESTS, true);
|
||||
xi_set_pref(XI_PREF_OPTIMIZE_CELL_REQUESTS, TRUE);
|
||||
|
||||
xi_init();
|
||||
|
||||
@ -1275,7 +1275,7 @@ TText_control::TText_control(WINDOW win, short cid,
|
||||
if (big)
|
||||
{
|
||||
rct.right += (rct.right - rct.left);
|
||||
rct.bottom += (rct.bottom - rct.top);
|
||||
rct.bottom += short(xvt_font_get_size(BIG_FONT) - xvt_font_get_size(DEF_FONT));
|
||||
}
|
||||
|
||||
const unsigned long attrib = flags2attr(flags);
|
||||
@ -1387,16 +1387,16 @@ TField_control::TField_control(WINDOW win, short cid,
|
||||
const char* flags, const char* text)
|
||||
{
|
||||
const bool button = strchr(flags, 'B') != NULL;
|
||||
create(win, cid, left, top, width, 1, maxlen, flags, text, button);
|
||||
create(win, cid, left, top, width, 1, maxlen, flags, text, button ? 2 : 0);
|
||||
}
|
||||
|
||||
void TField_control::create(WINDOW win, short cid,
|
||||
short left, short top, short width, short height, short maxlen,
|
||||
const char* flags, const char* text, bool button)
|
||||
const char* flags, const char* text, int button)
|
||||
{
|
||||
CHECK(!in_create, "Nested control creation");
|
||||
in_create = true;
|
||||
bool big = false;
|
||||
bool big = false;
|
||||
bool bold = false;
|
||||
const short fcid = cid > 0 ? cid + 2000 : cid - 2000;
|
||||
XI_OBJ_DEF* frm_def = xi_add_form_def(NULL, fcid, fcid);
|
||||
@ -1404,14 +1404,12 @@ void TField_control::create(WINDOW win, short cid,
|
||||
|
||||
for (const char* s = flags; *s; s++)
|
||||
{
|
||||
if (toupper(*s) == '{')
|
||||
big = true;
|
||||
else
|
||||
if (toupper(*s) == '}')
|
||||
bold = true;
|
||||
if (*s == '{')
|
||||
big = true; else
|
||||
if (*s == '}')
|
||||
bold = true;
|
||||
}
|
||||
|
||||
|
||||
RCT rct; coord2rct(win, left, top, width, height, rct);
|
||||
|
||||
rct.right += bold ? (width*XI_FU_MULTIPLE/4) : XI_FU_MULTIPLE/4;
|
||||
@ -1419,10 +1417,7 @@ void TField_control::create(WINDOW win, short cid,
|
||||
if (big)
|
||||
{
|
||||
rct.right += (rct.right - rct.left);
|
||||
|
||||
const int dy = (rct.bottom - rct.top) / 2;
|
||||
|
||||
rct.bottom += dy;
|
||||
rct.bottom += short(xvt_font_get_size(BIG_FONT) - xvt_font_get_size(DEF_FONT));
|
||||
}
|
||||
|
||||
unsigned long attrib = flags2attr(flags) | XI_ATR_EDITMENU;
|
||||
@ -1450,32 +1445,29 @@ void TField_control::create(WINDOW win, short cid,
|
||||
f->well = CAMPI_SCAVATI;
|
||||
f->active_back_color = FOCUS_BACK_COLOR;
|
||||
|
||||
if (big)
|
||||
{
|
||||
f->xi_rct.top = rct.top;
|
||||
f->xi_rct.bottom = rct.bottom;
|
||||
f->xi_rct.right = rct.right;
|
||||
f->xi_rct.left = rct.left;
|
||||
if (height == 1)
|
||||
{
|
||||
f->auto_tab = true;
|
||||
if (button != 0)
|
||||
{
|
||||
f->button = true;
|
||||
switch (button)
|
||||
{
|
||||
case 2: f->icon_rid = ICO_SEARCH; break; // Bottone per ricerche
|
||||
default: break; // Bottone standard ICO_COMBO
|
||||
}
|
||||
f->pixel_button_distance = 1;
|
||||
}
|
||||
}
|
||||
else // E' un multiline, quindi setto il rettangolo
|
||||
{
|
||||
f->xi_rct.top = rct.top;
|
||||
f->xi_rct.bottom = rct.bottom;
|
||||
f->xi_rct.right = rct.right;
|
||||
f->xi_rct.left = rct.left;
|
||||
f->cr_ok = true;
|
||||
f->var_len_text = true;
|
||||
}
|
||||
else
|
||||
if (height == 1)
|
||||
{
|
||||
f->auto_tab = true;
|
||||
if (button)
|
||||
{
|
||||
f->button = true;
|
||||
f->pixel_button_distance = 1;
|
||||
}
|
||||
}
|
||||
else // E' un multiline, quindi setto il rettangolo
|
||||
{
|
||||
f->xi_rct.top = rct.top;
|
||||
f->xi_rct.bottom = rct.bottom;
|
||||
f->xi_rct.right = rct.right;
|
||||
f->xi_rct.left = rct.left;
|
||||
f->cr_ok = true;
|
||||
f->var_len_text = true;
|
||||
}
|
||||
|
||||
XI_OBJ* itf = get_interface(win);
|
||||
XI_OBJ* form = xi_create(itf, frm_def);
|
||||
@ -1485,7 +1477,7 @@ void TField_control::create(WINDOW win, short cid,
|
||||
STX_DATA* stx = (STX_DATA*)_obj->v.field->stx;
|
||||
CHECKD(stx, "NULL stx for field ", cid);
|
||||
|
||||
if (button)
|
||||
if (_obj->v.field->button)
|
||||
{
|
||||
// Aggiusta il rettangolo del bottone in modo da allinearlo al testo
|
||||
XinRect& br = (XinRect&)_obj->v.field->btn_rct;
|
||||
|
@ -159,7 +159,7 @@ protected:
|
||||
void create(WINDOW win, short cid,
|
||||
short left, short top,
|
||||
short width, short height, short maxlen,
|
||||
const char* flags, const char* text, bool button);
|
||||
const char* flags, const char* text, int button);
|
||||
|
||||
TField_control() {}
|
||||
|
||||
|
@ -2,6 +2,7 @@
|
||||
#include <xinclude.h>
|
||||
|
||||
#include <colors.h>
|
||||
#include <controls.h>
|
||||
#include <image.h>
|
||||
#include <mask.h>
|
||||
#include <tree.h>
|
||||
@ -1116,80 +1117,77 @@ void TTree_window::handler(WINDOW win, EVENT* ep)
|
||||
|
||||
bool TTree_window::select_current()
|
||||
{
|
||||
XVT_TREEVIEW_NODE selected = NULL; // Nodo da selezionare (se mai lo trovero')
|
||||
XVT_TREEVIEW_NODE nextsel = NULL; // Nodo da selezionare (se mai lo trovero')
|
||||
|
||||
if (_tree != NULL)
|
||||
{
|
||||
xvt_treeview_suspend(_ctrl); // Sospendo le notifiche degli eventi
|
||||
|
||||
TString id; _tree->curr_id(id); // id del nodo corrente dell'albero
|
||||
|
||||
// Controllo se il tree control e' gia' posizionato bene
|
||||
XVT_TREEVIEW_NODE cursel = xvt_treeview_get_selected_node(_ctrl);
|
||||
if (cursel != NULL)
|
||||
nextsel = xvt_treeview_find_node_string(_ctrl, id);
|
||||
if (nextsel != NULL && cursel == nextsel)
|
||||
return true;
|
||||
|
||||
if (nextsel == NULL)
|
||||
{
|
||||
const char* curdata = xvt_treeview_get_node_data(_ctrl, cursel);
|
||||
if (id == curdata)
|
||||
xvt_treeview_suspend(_ctrl); // Sospendo le notifiche degli eventi
|
||||
TString_array a;
|
||||
a.add(id);
|
||||
// Creo la lista dei progenitori
|
||||
while (_tree->goto_father())
|
||||
{
|
||||
xvt_treeview_resume(_ctrl);
|
||||
return true;
|
||||
const int i = a.add(EMPTY_STRING);
|
||||
_tree->curr_id(a.row(i));
|
||||
_tree->expand(); // Nel caso non fosse gia' espanso
|
||||
}
|
||||
}
|
||||
|
||||
TString_array a;
|
||||
a.add(id);
|
||||
// Creo la lista dei progenitori
|
||||
while (_tree->goto_father())
|
||||
{
|
||||
const int i = a.add(EMPTY_STRING);
|
||||
_tree->curr_id(a.row(i));
|
||||
_tree->expand(); // Nel caso non fosse gia' espanso
|
||||
}
|
||||
|
||||
// Scandisco i progenitori partendo dalla radice
|
||||
XVT_TREEVIEW_NODE parent = NULL; // was xvt_treeview_get_root_node(_ctrl);
|
||||
bool killed = false; // Ho interrotto "bruscamente" la ricerca?
|
||||
FOR_EACH_ARRAY_ROW_BACK(a, r, row)
|
||||
{
|
||||
if (killed)
|
||||
break;
|
||||
for (int i = 0; ; i++)
|
||||
// Scandisco i progenitori partendo dalla radice
|
||||
XVT_TREEVIEW_NODE parent = NULL; // was xvt_treeview_get_root_node(_ctrl);
|
||||
bool killed = false; // Ho interrotto "bruscamente" la ricerca?
|
||||
FOR_EACH_ARRAY_ROW_BACK(a, r, row)
|
||||
{
|
||||
XVT_TREEVIEW_NODE child = xvt_treeview_get_child_node(_ctrl, parent, i);
|
||||
if (child == NULL && i == 0) // Forse non c'e' nessun figlio ...
|
||||
{
|
||||
create_children(parent); // ... sara' vero?
|
||||
child = xvt_treeview_get_child_node(_ctrl, parent, i);
|
||||
}
|
||||
if (child == NULL) // Certamente non ci sono piu' figli
|
||||
{
|
||||
//killed = true; // Non ho trovato quello che cercavo: esco subito
|
||||
if (killed)
|
||||
break;
|
||||
}
|
||||
const char* data = xvt_treeview_get_node_data(_ctrl, child);
|
||||
if (*row == data)
|
||||
for (int i = 0; ; i++)
|
||||
{
|
||||
selected = child;
|
||||
if (*row == id) // Ho finito
|
||||
killed = true;
|
||||
else
|
||||
XVT_TREEVIEW_NODE child = xvt_treeview_get_child_node(_ctrl, parent, i);
|
||||
if (child == NULL && i == 0) // Forse non c'e' nessun figlio ...
|
||||
{
|
||||
parent = child;
|
||||
xvt_treeview_expand_node(_ctrl, child, FALSE);
|
||||
create_children(parent); // ... sara' vero?
|
||||
child = xvt_treeview_get_child_node(_ctrl, parent, i);
|
||||
}
|
||||
if (child == NULL) // Certamente non ci sono piu' figli
|
||||
{
|
||||
//killed = true; // Non ho trovato quello che cercavo: esco subito
|
||||
break;
|
||||
}
|
||||
const char* data = xvt_treeview_get_node_data(_ctrl, child);
|
||||
if (*row == data)
|
||||
{
|
||||
nextsel = child;
|
||||
if (*row == id) // Ho finito
|
||||
killed = true;
|
||||
else
|
||||
{
|
||||
parent = child;
|
||||
xvt_treeview_expand_node(_ctrl, child, FALSE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
xvt_treeview_resume(_ctrl); // Riattivo le notifiche degli eventi
|
||||
_tree->goto_node(id); // Riposiziono l'albero
|
||||
}
|
||||
if (nextsel != NULL)
|
||||
{
|
||||
xvt_treeview_select_node(_ctrl, nextsel, TRUE);
|
||||
if (_tree->expanded())
|
||||
xvt_treeview_expand_node(_ctrl, nextsel, FALSE);
|
||||
}
|
||||
if (selected != NULL)
|
||||
xvt_treeview_select_node(_ctrl, selected, TRUE);
|
||||
xvt_treeview_resume(_ctrl); // Riattivo le notifiche degli eventi
|
||||
|
||||
_tree->goto_node(id);
|
||||
if (selected != NULL && _tree->expanded())
|
||||
xvt_treeview_expand_node(_ctrl, selected, FALSE);
|
||||
}
|
||||
return selected != NULL;
|
||||
return nextsel != NULL;
|
||||
}
|
||||
|
||||
bool TTree_window::goto_selected()
|
||||
@ -1328,6 +1326,7 @@ TOutlook_window::TOutlook_window(int x, int y, int dx, int dy, WINDOW parent, TO
|
||||
WIN_DEF wd; memset(&wd, 0, sizeof(wd));
|
||||
wd.wtype = WC_OUTLOOKBAR;
|
||||
wd.v.ctl.ctrl_id = owner->dlg();
|
||||
wd.v.ctl.font_id = xvt_default_font(true); // Fat font
|
||||
wd.rct = resize_rect(x, y, dx, dy, wd.wtype, parent);
|
||||
_ctrl = xvt_ctl_create_def(&wd, win(), 0);
|
||||
}
|
||||
|
@ -103,6 +103,7 @@
|
||||
#define BMP_PDF 174
|
||||
#define BMP_ARCHIVE 175
|
||||
#define BMP_PROGRAM 176
|
||||
#define BMP_FONT 179
|
||||
#define BMP_CLOSETURN 206
|
||||
#define BMP_CLOSESCONTR 207
|
||||
#define BMP_SUSPSCONTR 208
|
||||
@ -136,6 +137,7 @@
|
||||
#define TOOL_HELP 163
|
||||
#define TOOL_SETPRINT 165
|
||||
#define TOOL_LENTE 166
|
||||
#define TOOL_FONT 179
|
||||
#define TOOL_PREF 204
|
||||
#define TOOL_ADDPREF 205
|
||||
#define TOOL_CLOSETURN 206
|
||||
|
Loading…
x
Reference in New Issue
Block a user