Intro

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.

Pages: 1 2 3 4 5 6 7
Skip to toolbar