Intro
Contents
In un vecchio post avevamo descritto l’interfaccia OPERATION_CALL; in questo articolo descriviamo un insieme di macro usate per semplificare la comunicazione fra oggetti dotati di questa interfaccia;
Le nuove funzionalità, introdotte dalla versione 7 di Colibri, permettono di trasferire messaggi e dati fra oggetti usando la nuova classe test_request (che in questa esposizione non è necessario discutere).
Per procedere nell’esposizione ricordiamo che nel framework Colibri sono definibili due tipi di oggetti/widget: oggetti a visibilità globale e oggetti accessibili attraverso il pointer.
Oggetti visibili globalmente
Una istanza di una classe di interfaccia OPERATION_CALL (in genere WIDGET, ma non necessariamente) può essere accessibile globalmente nell’applicazione attraverso una registrazione, in genere definita nel costruttore; In questo caso l’istanza dovrà essere unica, cioè registrata una sola volta, definendo un identificatore; ad esempio la classe DOCK_edit_layout, che deve essere visibile alle classi LAYOUT_printing_page, viene costruita in fase di inizializzazione del programma in un’unica istanza, assegnandogli l’identificatore _$dock_edit_layout (definita in CLB_language.h); il codice che segue ne mostra le modalità di registrazione:
DOCK_edit_layout::DOCK_edit_layout(void) { $_init __register_global_object(_$dock_edit_layout) __on_signal_create(__on_create_window) __on_signal_end_create(__on_end__create_window) __on_signal_paint(__on_paint_wnd) __on_signal_resize(__on_resize_window) }
La macro __register_global_object garantisce la visibilità globale dell’istanza, rendendola accessibile mediante l’identificatore dock_edit_layout; si ribadisce che la classe deve avere un’unica istanza allocata;
Accesso ad istanze registrate globalmente: Un oggetto registrato globalmente può essere individuato mediante la macro __get_global_object definita in CLB_language.h:
#define __get_global_object(_obj_id,opcl_obj) OPERATION_CALL *opcl_obj = OPERATION_CALL::Get_global_object(obj_id);
Gli oggetti visibili globalmente sono in genere utilizzati per ricevere e trasmettere messaggi ed altre informazioni associate;
Oggetti visibili localmente
Sono tutti gli oggetti di interfaccia OPERATION_CALL che il programmatore può accedere attraverso il pointer dell’istanza, ad esempio un WIDGET definito localmente o ricevuto come puntatore da una funzione.