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
1 |
__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”
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 |
#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).