controls.cpp Aggiunta set_caption ai TTagbutton_control

golem.cpp      Aggiunte potenzialita' di server a DDE
mask.cpp       Corretta setaption per pageine con tagbuttons
msksheet.cpp   Corretto colore bordo
sheet.cpp      Corretto colore bordo


git-svn-id: svn://10.65.10.50/trunk@2975 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 1996-06-07 15:59:22 +00:00
parent 68c0d1ddae
commit c3c4897010
7 changed files with 127 additions and 35 deletions

View File

@ -1398,6 +1398,19 @@ bool TTagbutton_control::event_handler(XI_OBJ* itf, XI_EVENT* xiev)
return ok; return ok;
} }
void TTagbutton_control::set_caption(const char* text)
{
TToken_string cap = text;
int num;
XI_OBJ** tag = xi_get_member_list(_obj, &num);
for (int i = 0; i < num; i++)
{
text = cap.get();
if (text == NULL)
text = cap.get(0);
xi_set_text(tag[i], (char*)text);
}
}
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
// TListbox_control // TListbox_control

View File

@ -246,6 +246,8 @@ protected: // TControl
virtual bool event_handler(XI_OBJ* itf, XI_EVENT* xiev); virtual bool event_handler(XI_OBJ* itf, XI_EVENT* xiev);
public: public:
virtual void set_caption(const char* text);
TTagbutton_control(WINDOW win, short cid, TTagbutton_control(WINDOW win, short cid,
short left, short top, short width, short height, short left, short top, short width, short height,
const char* flags, const char* text, int tag); const char* flags, const char* text, int tag);

View File

@ -216,7 +216,7 @@ bool TGolem::import()
// DDE // DDE
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
static TDDE* DDEWIN = NULL; static TDDE* CUR_DDE = NULL;
HIDDEN BOOLEAN hook(HWND hwnd, HIDDEN BOOLEAN hook(HWND hwnd,
UINT msg, UINT msg,
@ -224,33 +224,96 @@ HIDDEN BOOLEAN hook(HWND hwnd,
ULONG lparam, ULONG lparam,
long* ret) long* ret)
{ {
switch (msg) CHECK(CUR_DDE, "No DDE available");
bool normal_process = TRUE;
if (CUR_DDE->hwnd() == (word)hwnd) switch (msg)
{ {
case WM_DDE_INITIATE:
if (wparam != CUR_DDE->hwnd()) // Non initiarti da solo!
{
ATOM app = LOWORD(lparam);
ATOM topic = HIWORD(lparam);
TString a(256), t(256);
if (app)
GlobalGetAtomName(app, (char*)(const char*)a, a.size());
if (topic)
GlobalGetAtomName(topic, (char*)(const char*)t, t.size());
bool ok = FALSE;
const char* an = CUR_DDE->get_app_name();
if (an && *an)
ok = a.empty() || a == an;
if (ok)
{
ok = CUR_DDE->do_initiate(wparam, t);
if (ok)
{
TToken_string topics(t);
if (topics.empty_items())
topics = CUR_DDE->get_topics();
for (t = topics.get(0); t.not_empty(); t = topics.get())
{ // E' obbligatorio crearne dei nuovi! Non spostare fuori dal ciclo!
app = GlobalAddAtom(CUR_DDE->get_app_name());
topic = GlobalAddAtom(t);
SendMessage((HWND)wparam, WM_DDE_ACK, (WPARAM)hwnd, MAKELPARAM(app,topic));
}
}
}
normal_process = FALSE;
}
break;
case WM_DDE_ACK: case WM_DDE_ACK:
DDEWIN->set_server(wparam); {
GlobalDeleteAtom(LOWORD(lparam)); ATOM a = LOWORD(lparam); if (a) GlobalDeleteAtom(a);
GlobalDeleteAtom(HIWORD(lparam)); ATOM t = HIWORD(lparam); if (t) GlobalDeleteAtom(t);
*ret = TRUE; CUR_DDE->do_ack(wparam);
normal_process = FALSE;
}
break;
case WM_DDE_EXECUTE:
{
TString cmd(256);
cmd = (const char*)GlobalLock((HGLOBAL)lparam);
GlobalUnlock((HGLOBAL)lparam);
DDEACK ack; memset(&ack, 0, sizeof(ack));
ack.fAck = CUR_DDE->do_execute(wparam, cmd);
// Ritorna indietro l'handle globale che verra' distrutto dal chiamante
PostMessage((HWND)wparam, WM_DDE_ACK, (WPARAM)hwnd, lparam);
normal_process = FALSE;
}
break;
case WM_DDE_TERMINATE:
CUR_DDE->do_terminate(wparam);
normal_process = FALSE;
break; break;
default: default:
if (msg > (UINT)WM_USER && msg < 0x7FFF)
{
if (CUR_DDE->do_custom_message(msg, wparam, lparam))
normal_process = FALSE;
}
break; break;
} }
return TRUE;
*ret = !normal_process;
return normal_process;
} }
TDDE::TDDE() TDDE::TDDE()
: _old_hook(NULL), _server(0) : _server(0), _old_hook(NULL)
{ {
CHECK(DDEWIN == NULL, "Non puoi lanciare due DDE, bestia!"); CHECK(CUR_DDE == NULL, "Non puoi lanciare due DDE, bestia!");
create(0, 0, 0, 0, "DDE", WSF_INVISIBLE, W_PLAIN, NULL_WIN); _hwnd = (word)xvt_vobj_get_attr(TASK_WIN, ATTR_NATIVE_WINDOW);
_hwnd = (word)xvt_vobj_get_attr(win(), ATTR_NATIVE_WINDOW); CUR_DDE = this;
DDEWIN = this;
} }
TDDE::~TDDE() TDDE::~TDDE()
{ {
terminate(); terminate();
DDEWIN = NULL; _hwnd = 0;
CUR_DDE = NULL;
} }
bool TDDE::initiate(const char* app, const char* topic) bool TDDE::initiate(const char* app, const char* topic)
@ -262,7 +325,7 @@ bool TDDE::initiate(const char* app, const char* topic)
_server = 0; _server = 0;
ATOM a_app = GlobalAddAtom(app); ATOM a_app = GlobalAddAtom(app);
ATOM a_topic = GlobalAddAtom(topic); ATOM a_topic = GlobalAddAtom(topic);
SendMessage(HWND_BROADCAST, WM_DDE_INITIATE, (WORD)_hwnd, MAKELPARAM(a_app, a_topic)); SendMessage(HWND_BROADCAST, WM_DDE_INITIATE, (WPARAM)_hwnd, MAKELPARAM(a_app, a_topic));
GlobalDeleteAtom(a_app); GlobalDeleteAtom(a_app);
GlobalDeleteAtom(a_topic); GlobalDeleteAtom(a_topic);
return _server != 0; return _server != 0;
@ -274,7 +337,7 @@ bool TDDE::execute(const char* cmd) const
char* c = (char*)GlobalLock(hg); char* c = (char*)GlobalLock(hg);
strcpy(c, cmd); strcpy(c, cmd);
GlobalUnlock(hg); GlobalUnlock(hg);
return PostMessage((HWND)_server, WM_DDE_EXECUTE, (WORD)_hwnd, MAKELPARAM(0, hg)); return PostMessage((HWND)_server, WM_DDE_EXECUTE, (WPARAM)_hwnd, MAKELPARAM(0, hg));
} }
@ -284,7 +347,8 @@ void TDDE::terminate()
{ {
xvt_vobj_set_attr(NULL_WIN, ATTR_EVENT_HOOK, _old_hook); xvt_vobj_set_attr(NULL_WIN, ATTR_EVENT_HOOK, _old_hook);
_old_hook = NULL; _old_hook = NULL;
PostMessage((HWND)_server, (WORD)_hwnd, WM_DDE_TERMINATE, 0L); PostMessage((HWND)_server, (WPARAM)_hwnd, WM_DDE_TERMINATE, (LPARAM)0);
_server = 0;
} }
} }

View File

@ -84,8 +84,8 @@ public:
// @class TDDE | Classe per la gestione del DDE // @class TDDE | Classe per la gestione del DDE
// //
// @base public | TWindow // @base public | TObject
class TDDE : public TWindow class TDDE : public TObject
// @comm Attualmente utilizzato all'avvio di PRASSI per comunicare al Program Manager il nome // @comm Attualmente utilizzato all'avvio di PRASSI per comunicare al Program Manager il nome
// dell'utente in modo da comunicarlo a tutti i programmi PRASSI avviati in seguito. // dell'utente in modo da comunicarlo a tutti i programmi PRASSI avviati in seguito.
@ -103,8 +103,14 @@ class TDDE : public TWindow
// @access Public Member // @access Public Member
public: public:
void set_server(word s) virtual bool do_initiate(word id, const TString& topic) { return FALSE; }
{ _server = s; } virtual bool do_execute(word id, const TString& cmd) { return FALSE; }
virtual bool do_ack(word id) { _server = id; return TRUE; }
virtual bool do_terminate(word id) { return FALSE; }
virtual bool do_custom_message(word msg, word wparam, long lparam) { return FALSE; }
virtual const char* get_app_name() const { return NULL; }
virtual const char* get_topics() const { return NULL; }
// @cmember Stabilisce il collegamento dell'<p app> per i <p topic> indicati // @cmember Stabilisce il collegamento dell'<p app> per i <p topic> indicati
bool initiate(const char* app, const char* topic); bool initiate(const char* app, const char* topic);
// @cmember Esegue il comando <p cmd> // @cmember Esegue il comando <p cmd>
@ -112,6 +118,8 @@ public:
// @cmember Chiude la connessione // @cmember Chiude la connessione
void terminate(); void terminate();
word hwnd() const { return _hwnd; }
// @cmember Costruttore // @cmember Costruttore
TDDE(); TDDE();
// @cmember Distruttore // @cmember Distruttore

View File

@ -1651,8 +1651,15 @@ const char* TMask::get_caption() const
void TMask::set_caption(const char* c) void TMask::set_caption(const char* c)
{ {
TToken_string captions(c);
for (int p = 0; p < _pages; p++) for (int p = 0; p < _pages; p++)
xvt_vobj_set_title(_pagewin[p], (char*)c); {
const char* cap = captions.get();
if (cap == NULL) cap = captions.get(0);
xvt_vobj_set_title(_pagewin[p], (char*)cap);
TTagbutton_control* tag = (TTagbutton_control*)_pagetag.objptr(p);
if (tag) tag->set_caption(c);
}
} }
void TMask::post_error_message(const char* msg, int sev) void TMask::post_error_message(const char* msg, int sev)

View File

@ -325,7 +325,7 @@ TSpreadsheet::TSpreadsheet(
l->fixed_columns = fixed_columns; l->fixed_columns = fixed_columns;
l->active_back_color = FOCUS_BACK_COLOR; l->active_back_color = FOCUS_BACK_COLOR;
l->white_space_color = MASK_DARK_COLOR; l->white_space_color = MASK_DARK_COLOR;
l->rule_color = MASK_BACK_COLOR; l->rule_color = MASK_DARK_COLOR;
// Definizione della prima colonna (numero di riga) // Definizione della prima colonna (numero di riga)
word attr = XI_ATR_RJUST; word attr = XI_ATR_RJUST;
@ -957,11 +957,9 @@ bool TSpreadsheet::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
refused = TRUE; refused = TRUE;
} }
} }
if (!refused) if (!refused) // Notifica l'abbandono della riga
{ refused = !notify(_cur_rec, K_CTRL+K_TAB);
// Notifica l'abbandono della riga
notify(_cur_rec, K_CTRL+K_TAB);
}
_check_enabled = TRUE; _check_enabled = TRUE;
} }
break; break;

View File

@ -177,7 +177,7 @@ TSheet_control::TSheet_control(
l->scroll_bar = TRUE; l->scroll_bar = TRUE;
l->scroll_bar_button = TRUE; l->scroll_bar_button = TRUE;
l->white_space_color = MASK_DARK_COLOR; l->white_space_color = MASK_DARK_COLOR;
l->rule_color = MASK_BACK_COLOR; l->rule_color = MASK_DARK_COLOR;
// Definizione della prima colonna (numero di riga) // Definizione della prima colonna (numero di riga)
const long attr = XI_ATR_VISIBLE | XI_ATR_RJUST | XI_ATR_SELECTABLE; const long attr = XI_ATR_VISIBLE | XI_ATR_RJUST | XI_ATR_SELECTABLE;
XI_OBJ_DEF* coldef = xi_add_column_def(listdef, FIRST_FIELD-1, attr, FIRST_FIELD, XI_OBJ_DEF* coldef = xi_add_column_def(listdef, FIRST_FIELD-1, attr, FIRST_FIELD,