10. Migrar de la 2.0 a la 3.0 #
← Migrar de la 1.0 a la 2.0 · Índice · Migrar de la 3.0 a la 4.0 →
La 3.0 no retira ninguna firma de los veintiún componentes de la 2.0 ni cambia ninguna: su código compila tal cual. Lo que cambia son algunos comportamientos, y solo uno pide releer su código — las posiciones, que ahora cuentan desde 1, como todo lo que cuenta PowerBuilder. Esta página da primero ese cambio, con la receta, luego los demás comportamientos que un cliente puede notar y, por último, lo que se ha añadido.
10.1 Las posiciones cuentan desde 1 #
En la 2.0, una posición pasada a un método (of_move_page(key, ai_index)…) empezaba en 0, mientras que la posición devuelta por un evento de reordenación (ue_tab_reordered(key, ai_index)…) empezaba en 1: un índice recibido no podía devolverse tal cual. En la 3.0 todo empieza en 1 — 1 es el primer lugar. Los eventos no han cambiado; son los métodos y las propiedades los que se han alineado con ellos.
| Qué | 2.0 | 3.0 |
|---|---|---|
| tab | of_insert_page, of_move_page : 0 | 1 |
| listbar | of_insert_section, of_move_section, of_insert_item, of_move_item : 0 | 1 |
| toolbar | of_add_bar(key, band, index), of_move_item, of_insert_button, ii_band, ii_index : 0 | 1 |
| statusbar | of_insert_panel, of_move_panel, of_insert_menu_item, of_move_menu_item : 0 | 1 |
| stepbar | of_insert_step, of_move_step : 0 | 1 |
| tilesbox | of_insert_tile, of_move_tile, event ue_tile_moved : 0 | 1 |
| dockcontainer | of_move_panel(key, target, position, index): 0, -1 = último | 1, 0 o menos = último |
| ribbon | of_insert_tab : 0 | 1 |
Los eventos ue_tab_reordered, ue_item_reordered y ue_bar_reordered ya devolvían una posición desde 1: no cambian. En una inserción de la statusbar o de la stepbar, una posición de 0 o menos añade al final (como un índice negativo en la 2.0); en un desplazamiento, vale el primer lugar.
Antes / después #
// 2.0 : the first place was 0
uo_tabs.of_move_page(/*key*/ "orders", /*index*/ 0)
uo_toolbar.of_add_bar(/*key*/ "format", /*band*/ 1, /*index*/ 0)
uo_toolbar.of_bar(/*key*/ "format").ii_band = 0
// 3.0 : the first place is 1
uo_tabs.of_move_page(/*key*/ "orders", /*index*/ 1)
uo_toolbar.of_add_bar(/*key*/ "format", /*band*/ 2, /*index*/ 1)
uo_toolbar.of_bar(/*key*/ "format").ii_band = 1
La receta #
Busque en su código of_insert_, of_move_, of_add_bar(, .ii_band y .ii_index: sume 1 a cada posición que escriba como literal. Una posición que viene de un evento de reordenación o de un bucle for li = 1 to … ya es correcta — de eso se trata el cambio. Una posición calculada desde 0 (li - 1) pierde su - 1.
10.2 Las entradas en cascada devuelven su dirección completa #
Una entrada colocada en un submenú se nombra ahora por toda su dirección, la que dio para añadirla. En la 2.0 el evento perdía el nivel del submenú, y dos submenús con una entrada del mismo nombre se confundían.
| Qué | 2.0 | 3.0 |
|---|---|---|
toolbar ue_menu_selected | "file/saveas/png8" | "file/saveas/fmt_other/png8" |
ribbon ue_menu_selected | "home/clip/paste/pdf" | "home/clip/paste/more/pdf" |
ribbon ue_app_menu_selected | "pdf" | "export/pdf" |
menubar ue_item_selected | "export/pdf" (print/pdf elegido) | "print/pdf" |
radialmenu of_item("csv"), of_add_item("import/csv/x") | el primer csv encontrado | decide la dirección |
Una entrada de primer nivel tiene un solo nivel y no cambia. Y of_add_menu_item de la toolbar acepta por fin la dirección de cuatro niveles ("bar/dropdown/entry/sub") que mostraba la documentación: se rechazaba con -5.
10.3 Otros comportamientos que puede notar #
| Qué | 2.0 | 3.0 |
|---|---|---|
Texto enriquecido ([b], [accent]…) | una [palabra] desconocida desaparecía con el texto siguiente: report[final].pdf → report.pdf | se muestra tal cual; solo se interpretan las etiquetas reales |
ue_panel_rclicked(al_x, al_y) de la statusbar | píxeles dentro del componente | píxeles de pantalla, como se prometía: páselos tal cual a un menú contextual |
Releer un color (il_text_color, il_accent…) | devolvía 0 (negro), puesto o no | el color puesto; -1 cuando no hay (el del tema). Un color de insignia no puesto sigue devolviendo 0 |
ii_doc_line del code editor, releído | el índice interno (línea − 1, -1 = ninguna) | la línea puesta; 0 = ninguna |
ue_error de picture y shell explorer | nunca se lanzaba (lo interceptaba la base) | se lanza; los errores de script siguen en ue_script_error |
El componente button se sigue entregando y soportando, pero queda obsoleto en favor de buttonbar: una fila de botones cabe en un solo componente, donde diez button hacen diez.
10.4 Lo que se ha añadido #
Nada de lo siguiente pide modificar su código. Los nuevos componentes de la 3.0 se presentan en las notas de la versión.
| Objeto | Añadido |
|---|---|
u_pbt_base (every visual component) | of_set_property (string as_name, string as_value) → long, of_get_property (string as_name) → string, of_component_name () → string |
n_pbt_messagebox | of_add_choice (string as_key, string as_title, string as_description) → long, of_choose (long al_hwnd) → string |
n_pbt_utils | of_dir_has_subfolders (string as_dir) → boolean, of_speech_languages (ref string as_tags[]) → integer, of_speech_voices (ref string as_names[], ref string as_langs[]) → integer, of_locale_name (string as_tag) → string |
n_pbt_json, que la 2.0 entregaba como herramienta interna sin documentar, pasa a ser el componente json de la 3.0 y cambia de nombres: of_str → of_add_string, of_bool → of_add_boolean, of_num → of_add_number, of_raw → of_add_raw, of_arr → of_set_array, of_members → of_set_members; todos devuelven ahora un long. Si su código lo usaba, son los únicos nombres que cambian.
← Migrar de la 1.0 a la 2.0 · Índice · Migrar de la 3.0 a la 4.0 →