Intro
Contents
In un articolo precedente abbiamo presentato la classe OPERATION_CALL , un’interfaccia utilizzata nel framework di Colibrì per la comunicazione fra gli oggetti. La classe, ereditata da Gui_Interface, quindi da EXTENDED_WIDGET, è basata sul concetto di comando, inteso come una sequenza di stringhe che definiscono una frase, e di oggetti (puntatori ) trasferiti alla classe attraverso una macro (vedi questo articolo..).
Le istanze di questa classe possono ricevere un comando comando attraverso una macro, anche quando non direttamente accessibile attraverso il puntatore, esistendo una funzionalità di registrazione (visibilità globale) che ne permettono l’accesso attraverso un nomo univoco.
In origine il framework di Colibrì conteneva solo un modo di comunicazione fra gli oggetti basato sul criterio della funzione di ricezione di un messaggio, sul modello di Windows. Questa modalità è conservata ancora, permettendo un’interfacciamento semplice con la messaggistica di windows verso i controlli (o widgets) dell’interfaccia grafica di Colibrì. in seguito l’introduzione di OPERATION_CALL
ha permesso di semplificare la messaggistica interna al framework, permettendo comandi molto più complessi, non basati su id di comando come nelle API di Windows, ma su frasi di lunghezza qualunque, alle quali possono essere associati parametri. Questo permette, ad esempio, di mandare un comando del tipo
__exec_global_fn(_$dock_recipe, _$display, _$recipe, color->get_recipe());
La macro significa: manda il comando “visualizza la ricetta che segue” all’oggetto di nome _$dock_recipe . In questo caso la ricetta è definita dalla funzione color->get_recipe(), mentre le tre stringhe $dock_recipe, _$display, _$recipe sono definite in un vocabolario composto da una collezione di file di inclusione usati nel software. di seguito ne è data una parte presente in “CLB_keyword.h”
#pragma once #pragma region CLB_keyword standard keywords recognized from CLB_language //-------------------------------------------------------------------------------------------------------------------- #pragma region --------------------------------> A #define _$accept L"accept" // accettare (se successivo a _$query : accetti?) #define _$add L"add" // aggiungi alla lista dei selezionati un elemento #define _$all L"all" #define _$application L"app" // id dell'interfaccia APPLICATION #define _$area L"area" // collega un elemento con.. #define _$attach L"atch" // collega un elemento con.. #define _$average L"avg" #pragma endregion #pragma region --------------------------------> B #define _$background L"backgrd" #define _$bitmap L"btmap" #define _$book L"book" #define _$border L"bord" #define _$bottom L"bottom" #define _$brush L"brush" #pragma endregion #pragma region --------------------------------> C #define _$call_back L"callback" #define _$canvas L"canvas" // widget di visualizzazione/editin del documento #define _$captured L"captured" #define _$clear L"clr" #define _$color L"color" // oggetto colore #define _$color_table L"col_tbl" // tabella colori #define _$copy L"cpy" // verbo copiare #define _$connect L"connect" /// richiesta di attivare una connessione per trasmissione automatica di un oggetto #define _$container L"container" // #define _$create L"create" // verbo creare #define _$croma L"croma" // croma #define _$curve L"CURVE" // oggetto curva #define _$cut L"cut" // verbo taglia #pragma endregion #pragma region --------------------------------> D #define _$delta L"Δ" // delta colorimetrico #define _$deltaC L"deltaC" #define _$deltaE L"deltaE" #define _$deltaH L"deltaH" #define _$deltaL L"deltaL" #define _$destroy L"destroy" // verbo distruggere #define _$detach L"detach" #define _$display L"display" #define _$display_selected L"display_sel" // visualizza elementi selezionati #define _$distance L"dist" // distanza #define _$document L"document" // documento #define _$down L"down" // documento #define _$draw L"draw" // verbo disegnare #pragma endregion #pragma region --------------------------------> E #define _$end L"end" #define _$ended L"ended" #define _$edit L"edit" // visualizza elementi selezionati #define _$effect L"effect" // effetto (filtraggio) #define _$error L"error" #define _$exec L"exec" // esecuzione di un comando #define _$exist L"exist" #define _$export L"export" // esportazione di #pragma endregion #pragma region --------------------------------> F #define _$false L"0" #define _$fault L"fault" #define _$file L"file" #define _$file_name L"fname" #define _$fill L"fill" #define _$filter L"fltr" #define _$float L"float" #define _$focus L"focus" #define _$foreground L"foregrd" #define _$from L"from" // preposizioni da, dal, dai.. #define _$function L"function" #pragma endregion #pragma region --------------------------------> G #define _$gamut L"gamut" #define _$get L"get" #define _$get_preview L"get_preview" #define _$grid L"gride" #pragma endregion #pragma region --------------------------------> H #define _$hatch L"hatch" #define _$hide L"hide" // nascondere, contrario di _$show #define _$hlc L"hlc" // classe hlc #define _$hue L"hue" // hue #pragma endregion #pragma region --------------------------------> I #define _$illuminant L"illum" #define _$image L"image" #define _$int L"int" #define _$interval L"itv" // intervallo #pragma endregion #pragma region --------------------------------> J #define _$jump "jmp" // salta a #pragma endregion #pragma region --------------------------------> K #define _$keyword "kword" #pragma endregion #pragma region --------------------------------> L #define _$lab L"lab" // spazio colore Lab #define _$lab_a L"a" #define _$lab_b L"b" #define _$layer L"layer" #define _$layout L"LY" // id oggetti layout #define _$ly_img L"lay_image" // id sezione immagine #define _$ly_obj L"LY_OBJECT" // id sezione immagine #define _$ly_table L"LY_table" // id sezione tabella #define _$ly_prt_mode L"lay_prt_mode" // modi di tracciamento di un layout #define _$ly_title L"lay_tit" // sezione titolo #define _$line_size L"lnsize" // spessore linea #define _$lum L"lum" // luminanza #pragma endregion #pragma region --------------------------------> M #define _$mask L"msk" #define _$menu L"menu" #define _$modified L"modified" #define _$move L"move" #pragma endregion #pragma region --------------------------------> N #define _$name L"name" #define _$new L"new" // crea nuovo #define _$not _$false // contrario di _$yes #define _$null L"null" /// significato non definito, vuoto ecc; rimandato da __exec_global_fn e __exec_obj_fn se la richiesta non è soddisfatta #pragma endregion #pragma region --------------------------------> O #define _$object_3d L"obj3d" // oggetto 3d visualizzabile ed editabile in finestre 3d openGL #define _$object_db L"objdb" // oggetto derivato da DB_OBJECT #define _$obsserver L"cie_obs" // osservatore standard CIE #define _$offset L"offset" // offset #define _$only L"only" // solo.. #define _$open L"open" // apertura file,processo, finestra ecc.. #define _$organize L"organize" // modalità di organizzazione #pragma endregion #pragma region --------------------------------> P #define _$page L"page" #define _$paste L"paste" #define _$pixels L"pxl" #define _$plot_obj L"plot_obj" #define _$points L"points" // lista di punti #define _$point L"point" // punto #define _$pop L"pop" #define _$print L"print" #define _$profile L"profile" #define _$program L"program" #define _$push L"push" #pragma endregion #pragma region --------------------------------> Q #define _$query L"query:" // richiesta di informazioni, normalmente rispondere con _$yes o _$no #define _$queue L"queue" // coda generica, se necessario da specificare con successiva informazione #pragma endregion #pragma region --------------------------------> R #define _$random L"random" #define _$ready L"ready" #define _$receive L"receive" // ricezione di.. segue l'idi del tipo di oggetto #define _$redo L"redo" // comando annulla _$undo #define _$reflectance L"refl" // oggetto riflettanza #define _$remove L"remove" #define _$replace L"replace" #define _$resize L"resize" #define _$restore L"restore" #define _$return L"return" /// richiesta di ritorno di un oggetto #define _$rgb L"rgb" #pragma endregion #pragma region --------------------------------> S #define _$select L"select" // elimina lista e aggiungi l'elemento.. #define _$selected L"selected" #define _$selected_area L"selarea" // selezionata area #define _$selected_point L"selpoint" // selezionato un punto #define _$send L"send" // spedisci #define _$set L"set" #define _$size L"size" #define _$show L"show" //visualizza , contrario di _$hide #define _$solid L"solid" #define _$spectrophotometer L"sptf" // spettrofotometro #define _$started L"started" #define _$status L"status" #define _$string_empty L"" // stringa vuota #define _$style L"style" #define _$substrate L"substrate" // substrato in uso su.. #define _$suffix_lab L"imglab" // suffisso file lab di colibri #define _$suffix_layout L"LAYOUT_printing_page" // suffisso file di layout #define _$suffix_moro L"moro_doc" // suffisso documenti moro e MAGIC di oggetti Moro_document #define _$suffix_nuance L"nuanceo_doc" // suffisso documenti nuance e MAGIC di oggetti nuance_document #define _$suffix_psd L"psd" // suffisso file psd #define _$suffix_ref L"ref" // suffisso file ref #define _$suffix_sif L"sif" // suffisso file sif #define _$suffix_tif L"tif" // suffisso file sif #define _$supported L"suptd" // usato per richiedere se una classe di funzioni è supportata (classe o funzione o altra richiesta riconosciuta dall'elemento) #pragma endregion #pragma region --------------------------------> T #define _$text_object L"ctext" // tipo di oggetto testo (class TextObject) #define _$tiff L"tiff" #define _$tiling L"tiling" // modello di tiling / step&repeats #define _$thickness L"thickn" // spessore #define _$thumbnail L"thumbnail" #define _$to L"to" // preposizione #define _$tool L"tool" #define _$top L"top" // preposizione #define _$transmit L"transmit" // inizia trasmissione automatica #define _$true L"1" // vero, equivalente a _$yes #define _$type L"type" // tipo generico (interpretato dal contesto) #pragma endregion #pragma region --------------------------------> U #define _$undo L"undo" // comando undo, ripristina #define _$up L"up" #pragma endregion #pragma region --------------------------------> V #define _$view L"view" #pragma endregion #pragma region --------------------------------> W #define _$widget L"widget" // widget #define _$working L"working" #pragma endregion #pragma region --------------------------------> X #define _$xtract L"xtract" // verbo estrai #pragma endregion #pragma region --------------------------------> Y #define _$yes _$true // contrario di _$not #pragma endregion #pragma region --------------------------------> #define _$zoom L"zoom" #pragma endregion #pragma endregion
La nuova classe CLB_messenger non sostituisce la gestione precedente, ma la affianca come interfaccia più agevole da programmare. la OPERATION_CALL sarà in futuro non più supportata all’interno di Colibrì, poichè la nuova interfaccia CLB_messenger già fornisce tutte le caratteristiche necessarie alla comunicazione bidirezionale fra gli oggetti. Attualmente le due interfacce sono entrambe disponibili per le classi derivare da EXTENDED_WIDGET (praticamente tutti i controlli costruiti nel framework).