10. Migrer de la 2.0 à la 3.0 #
← Migrer de la 1.0 à la 2.0 · Sommaire · Migrer de la 3.0 à la 4.0 →
La 3.0 ne retire aucune signature des vingt et un composants de la 2.0 et n'en change aucune : votre code compile tel quel. Ce qui change, ce sont quelques comportements, et un seul demande de relire votre code — les positions, qui comptent désormais à partir de 1, comme tout ce que PowerBuilder compte. Cette page donne ce changement d'abord, avec la recette, puis les autres comportements qu'un client peut voir, puis ce qui a été ajouté.
10.1 Les positions comptent à partir de 1 #
En 2.0, une position passée à une méthode (of_move_page(key, ai_index)…) commençait à 0, alors que la position rendue par un event de réordonnancement (ue_tab_reordered(key, ai_index)…) commençait à 1 : un index reçu ne pouvait pas être redonné tel quel. En 3.0, tout commence à 1 — 1 est la première place. Les events n'ont pas changé ; ce sont les méthodes et les propriétés qui les ont rejoints.
| Quoi | 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 = dernier | 1, 0 ou moins = dernier |
| ribbon | of_insert_tab : 0 | 1 |
Les events ue_tab_reordered, ue_item_reordered et ue_bar_reordered rendaient déjà une position à partir de 1 : ils sont inchangés. Pour une insertion de la statusbar ou de la stepbar, une position de 0 ou moins ajoute à la fin (comme un index négatif en 2.0) ; pour un déplacement, elle vaut la première place.
Avant / aprè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 recette #
Cherchez dans votre code of_insert_, of_move_, of_add_bar(, .ii_band et .ii_index : ajoutez 1 à chaque position que vous écrivez en littéral. Une position qui vient d'un event de réordonnancement ou d'une boucle for li = 1 to … est déjà juste — c'est tout l'intérêt du changement. Une position calculée à partir de 0 (li - 1) perd son - 1.
10.2 Les entrées en cascade rendent leur adresse complète #
Une entrée placée dans un sous-menu est désormais nommée par toute son adresse, celle que vous avez donnée pour l'ajouter. En 2.0, l'event perdait le niveau du sous-menu, et deux sous-menus qui portaient une entrée de même nom se confondaient.
| Quoi | 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 choisi) | "print/pdf" |
radialmenu of_item("csv"), of_add_item("import/csv/x") | le premier csv trouvé | l'adresse décide |
Une entrée de premier niveau d'un menu n'a qu'un niveau et ne change pas. Et of_add_menu_item de la toolbar accepte enfin l'adresse à quatre niveaux ("bar/dropdown/entry/sub") que la documentation montrait : elle était refusée par -5.
10.3 Autres comportements que vous pouvez voir #
| Quoi | 2.0 | 3.0 |
|---|---|---|
Texte riche ([b], [accent]…) | un [mot] inconnu disparaissait avec la suite du texte : report[final].pdf → report.pdf | affiché tel quel ; seules les vraies balises sont interprétées |
ue_panel_rclicked(al_x, al_y) de la statusbar | pixels dans le composant | pixels écran, comme promis : à passer tels quels à un menu contextuel |
Relire une couleur (il_text_color, il_accent…) | rendait 0 (noir), posée ou non | la couleur posée ; -1 quand aucune (celle du thème). Une couleur de badge non posée rend toujours 0 |
ii_doc_line du code editor, relu | l'index interne (ligne − 1, -1 = aucune) | la ligne posée ; 0 = aucune |
ue_error de picture et shell explorer | jamais levé (intercepté par le socle) | levé ; les erreurs de script restent sur ue_script_error |
Le composant button reste livré et supporté, mais il est déprécié au profit de buttonbar : une barre de boutons tient en un seul composant, là où dix button en font dix.
10.4 Ce qui a été ajouté #
Rien de ce qui suit ne demande de modifier votre code. Les nouveaux composants de la 3.0 sont présentés dans les notes de version.
| Objet | Ajouté |
|---|---|
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 livrait comme outil interne sans le documenter, devient le composant json de la 3.0 et change de noms : 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 ; tous rendent désormais un long. Si votre code s'en servait, ce sont les seuls noms à changer.
← Migrer de la 1.0 à la 2.0 · Sommaire · Migrer de la 3.0 à la 4.0 →