9. Von 1.0 auf 2.0 migrieren #
← Lizenz und Demomodus · Inhalt · Von 2.0 auf 3.0 migrieren →
2.0 bringt fünf Komponenten und gestaltet die API der sechzehn aus 1.0 um. Die Umgestaltung lässt sich auf drei Regeln zurückführen; fast jeder Kompilierfehler, den Sie sehen werden, folgt daraus. Diese Seite nennt die Regeln, ein Vorher/Nachher und dann, Komponente für Komponente, jede entfernte oder geänderte Signatur. Die in den Tabellen fehlenden Komponenten — button, messagebox, picture, pdfviewer, progressbar, webbrowser — haben nichts verloren.
9.1 Die drei Regeln #
1. Ein Schlüssel, eine Adresse. Der Bezeichner eines Items heißt as_key — eine Ebene, eindeutig unter seinem Elternelement. Ein verschachteltes Item wird über eine Adresse as_keys erreicht, die Ebenen durch / verbunden: "home/clipboard/paste". Events geben diese Adresse in einem Argument zurück, wo 1.0 drei übergab (as_tab, as_group, as_id). Zum Zerlegen: n_pbt_utils.of_split_path (as_keys, ref as_out[]).
2. Alles geschieht von der Komponente aus. Ein Handle (n_pbt_ribbon_group, n_pbt_toolbar_bar, n_pbt_tilesbox_group, n_pbt_listbar_section…) fügt nichts mehr hinzu: Hinzufügen und Entfernen liegen auf der Komponente, mit der Adresse des Elternelements. Die Getter tragen den Namen der Ebene — of_tab, of_group, of_item, of_menu_item beim Menüband, of_panel beim Dock und der Statusleiste, of_page beim Tab, of_section bei der Listbar, of_bar bei der Symbolleiste, of_tile bei der Tiles-Box. Ein Handle dient nur noch dem Lesen und Setzen von Eigenschaften.
3. Ein Hinzufügen liefert einen Code, kein Handle. of_add_tab, of_add_group, of_add_bar, of_add_section… liefern ein long: 0 nach der Anwendung, -5 bei einer falschen Adresse (Elternelement fehlt oder ist von anderer Art, leerer Schlüssel), -2 wenn die Komponente nicht erzeugt ist. Ein Handle konnte nicht sagen, dass es abgelehnt hatte; ein Code kann das. Soll eine Eigenschaft gesetzt werden, gibt der Getter das Handle gleich danach.
9.2 Vorher / nachher #
// 1.0
n_pbt_ribbon_tab lnv_tab
n_pbt_ribbon_group lnv_group
lnv_tab = uo_ribbon.of_add_tab("home", "Home")
lnv_group = lnv_tab.of_add_group("clip", "Clipboard")
lnv_group.of_add_button("paste", "Paste", "img/paste.svg")
lnv_group.of_item("paste").ib_enabled = false
// 2.0
uo_ribbon.of_add_tab("home", "Home")
uo_ribbon.of_add_group("home/clip", "Clipboard")
uo_ribbon.of_add_button("home/clip/paste", "Paste", "img/paste.svg")
uo_ribbon.of_item("home/clip/paste").ib_enabled = false
Und das daraus folgende Event:
// 1.0
event ue_clicked (string as_tab, string as_group, string as_id)
if as_tab = "home" and as_group = "clip" and as_id = "paste" then ...
// 2.0
event ue_clicked (string as_keys)
if as_keys = "home/clip/paste" then ...
Die Eigenschaften der Handles (ib_enabled, is_text, is_image, ib_visible…) und die Eigenschaften-Engine sind unverändert: Was sich ändert, ist der Weg zum Handle, nicht, was man damit tut.
9.3 Das Rezept #
- Migrieren Sie eine Kopie Ihrer Bibliotheken, wie bei jedem PowerBuilder-Versionswechsel — siehe Erste Schritte. Ersetzen Sie
pbtoolboxai.pbldurch das der 2.0. - Starten Sie einen Full Build. Jeder zu korrigierende Aufruf erscheint als Kompilierfehler, mit Objekt und Skript: Die Liste ist beim ersten Durchlauf vollständig, nichts ist zu erraten.
- Korrigieren Sie die Aufrufe mit den Tabellen aus Abschnitt 9.4: Ein Handle, das hinzufügte, wird zur Komponente plus Adresse; ein
lnv_x = of_add_…wird zu einem bloßen Aufruf, und das Handle holt man danach über den Getter der Ebene. - In Ihren Event-Skripten haben sich Name und Anzahl der Argumente geändert — aus
as_tab, as_group, as_idwirdas_keys. PowerBuilder meldet jede Referenz auf ein verschwundenes Argument; ersetzen Sie den Dreifachvergleich durch einen Adressvergleich. - Die in
xx_umbenannten internen Funktionen (of_on_item_property,of_ensure_created,xx_of_send, dasof_initder Handles) betreffen Sie nur, wenn Sie eine Komponente oder ein Handle abgeleitet und eine davon überschrieben haben.
9.4 Komponente für Komponente #
In den Tabellen stehen lnv_tab, lnv_group, lnv_item, lnv_bar, lnv_section, lnv_tile für ein Handle der 1.0; uo für die Komponente. Eine Adresse in Anführungszeichen zeigt die erwarteten Ebenen. Unveränderte Parameter sind zu … gekürzt.
Gemeinsame Basis (jede Komponente) #
| 1.0 | 2.0 |
|---|---|
uo.of_icon (as_path) · uo.of_escape_markup (as_text) | n_pbt_utils lnv_utils → lnv_utils.of_icon (as_path) · lnv_utils.of_escape_markup (as_text) |
of_on_item_property (as_key[], as_name, as_value) | xx_on_item_property (as_key[], as_name, as_value) |
of_ensure_created ( ) | xx_ensure_created ( ) |
xx_of_send (as_name, as_payload_json) | xx_send (as_name, as_payload_json) |
n_pbt_item.of_init (auo_owner, as_key) | xx_init (auo_owner, as_key) |
| — | of_count ( ) · of_count (as_keys) · of_keys_at (ai_index) · of_keys_at (as_keys, ai_index) · of_has (as_keys) · event ue_script_error (as_message, as_stack) |
Ribbon #
| 1.0 | 2.0 |
|---|---|
lnv_tab = uo.of_add_tab (as_id, as_title) | uo.of_add_tab (as_key, as_title) → long; danach uo.of_tab (as_key) |
lnv_tab = uo.of_insert_tab (…) · of_add_contextual_tab (…) · of_add_qat (…) | long ; as_id → as_key, as_group_id → as_group_key |
lnv_ctx = uo.of_add_contextual_group (as_id, as_title { , al_color }) | uo.of_add_contextual_group (as_key, as_title { , al_color }) → long ; uo.of_ctx_group (as_key) |
lnv_ctx.of_add_tab (as_id, as_title) · lnv_ctx.of_tab (as_id) | uo.of_add_contextual_tab (as_key, as_title, as_group_key) · uo.of_tab (as_key) |
lnv_group = lnv_tab.of_add_group (as_id, as_title) | uo.of_add_group ("tab/group", as_title) → long |
lnv_tab.of_group (as_id) · lnv_tab.of_remove_group (as_id) | uo.of_group ("tab/group") · uo.of_remove_group ("tab/group") |
lnv_group.of_add_button (as_id, as_label, as_image) | uo.of_add_button ("tab/group/id", as_label, as_image) → long |
lnv_group.of_add_big_button · of_add_big_split · of_add_big_dropdown · of_add_toggle · of_add_dropdown · of_add_checkbox · of_add_combo · of_add_spinner · of_add_colorpicker · of_add_gallery | gleicher Name auf uo, erstes Argument "tab/group/id", liefert long |
lnv_group.of_add_separator ( ) | uo.of_add_separator ("tab/group") |
lnv_group.of_item (as_id) · lnv_group.of_remove_item (as_id) | uo.of_item ("tab/group/id") · uo.of_remove_item ("tab/group/id") |
lnv_item.of_add_menu_item (as_id, as_label, as_image) | uo.of_add_menu_item ("tab/group/item/id", as_label, as_image) |
lnv_item.of_add_menu_item (as_parent, as_id, as_label, as_image) | uo.of_add_menu_item ("tab/group/item/parent/id", as_label, as_image) |
lnv_item.of_add_menu_separator ( ) · of_add_menu_header (as_label) | uo.of_add_menu_separator ("tab/group/item") · uo.of_add_menu_header ("tab/group/item", as_label) |
lnv_item.of_add_menu_check (as_id, as_label { , as_image }) | uo.of_add_menu_check ("tab/group/item/id", as_label { , as_image }) |
lnv_item.of_add_combo_item (as_label) | uo.of_add_combo_item ("tab/group/combo", as_label) |
lnv_item.of_add_gallery_item (as_id, as_image, as_label) | uo.of_add_gallery_item ("tab/group/gallery/id", as_image, as_label) |
lnv_item.of_menu_item (as_id) | uo.of_menu_item ("tab/group/item/id") |
lnv_item.of_select_item (as_id) | uo.of_select_gallery_item ("tab/group/gallery/id") |
lnv_item.of_open ( ) | uo.of_open ("tab/group/item") |
uo.of_add_app_menu_item (as_parent, as_id, as_label, as_image) | uo.of_add_app_menu_item ("parent/id", as_label, as_image) |
uo.of_add_app_menu_separator (as_id) · of_select_tab (as_id) · of_remove_tab (as_id) | as_id → as_keys / as_key |
event ue_clicked (as_tab, as_group, as_id) | event ue_clicked (as_keys) |
event ue_toggled (as_tab, as_group, as_id, ab_checked) | event ue_toggled (as_keys, ab_checked) |
event ue_menu_selected (as_tab, as_group, as_dropdown, as_id, ab_checked) | event ue_menu_selected (as_keys, ab_checked) |
event ue_combo_changed (as_tab, as_group, as_id, as_text) | event ue_combo_changed (as_keys, as_text) |
event ue_value_changed (as_tab, as_group, as_id, ad_value) | event ue_value_changed (as_keys, ad_value) |
event ue_color_changed (as_tab, as_group, as_id, al_color) | event ue_color_changed (as_keys, al_color) |
event ue_launcher (as_tab, as_group) | event ue_launcher (as_keys) |
event ue_selection_changed (as_id) · ue_app_menu_selected (as_id) | (as_keys) |
event ue_gallery_selection_changed (as_tab, as_group, as_id, as_from_item, as_item) · ue_gallery_selection_changing (…) | (as_from_keys, as_keys) |
Toolbar #
| 1.0 | 2.0 |
|---|---|
lnv_bar = uo.of_add_bar (as_bar { , ai_band, ai_index }) | uo.of_add_bar (as_key { , ai_band, ai_index }) → long; danach uo.of_bar (as_key) |
lnv_bar.of_add_button (as_id, as_text, as_image, as_tooltip) | uo.of_add_button ("bar/id", as_text, as_image, as_tooltip) → long |
lnv_bar.of_add_toggle · of_add_dropdown · of_add_label · of_add_textbox · of_add_datepicker · of_insert_button | gleicher Name auf uo, erstes Argument "bar/id", liefert long |
lnv_bar.of_add_separator ( ) | uo.of_add_separator ("bar") |
lnv_bar.of_item (as_id) · of_move_item (as_id, ai_index) · of_remove_item (as_id) | uo.of_item ("bar/id") · uo.of_move_item ("bar/id", ai_index) · uo.of_remove_item ("bar/id") |
lnv_item.of_add_menu_item (as_id, as_label, as_image) | uo.of_add_menu_item ("bar/item/id", as_label, as_image) |
lnv_item.of_add_menu_item (as_parent, as_id, as_label, as_image) | uo.of_add_menu_item ("bar/item/parent/id", as_label, as_image) |
lnv_item.of_add_menu_separator (as_id) | uo.of_add_menu_separator ("bar/item") |
uo.of_bar (as_id) · uo.of_remove_bar (as_id) | as_id → as_key |
event ue_clicked (as_bar, as_id) | event ue_clicked (as_keys) |
event ue_toggled (as_bar, as_id, ab_checked) | event ue_toggled (as_keys, ab_checked) |
event ue_menu_selected (as_bar, as_dropdown, as_id) | event ue_menu_selected (as_keys) |
event ue_text_changed (as_bar, as_id, as_text) · ue_date_changed (as_bar, as_id, as_date) | (as_keys, as_text) · (as_keys, as_date) |
event ue_bar_reordered (as_id, ai_band, ai_index) | event ue_bar_reordered (as_key, ai_band, ai_index) |
Tiles box #
| 1.0 | 2.0 |
|---|---|
lnv_group = uo.of_add_group (as_group_id, as_title) | uo.of_add_group (as_key, as_title) → long; danach uo.of_group (as_key) |
lnv_group.of_add_tile (as_id, as_label, as_icon_file, as_size) | uo.of_add_tile ("group/id", as_text { , as_image, as_size }) → long |
lnv_group.of_tile (as_id) | uo.of_tile ("group/id") |
lnv_tile.of_add_live_item (as_text) · lnv_tile.of_clear_live_items ( ) | uo.of_add_live_item ("group/id", as_text) · uo.of_clear_live_items ("group/id") |
uo.of_remove_tile (as_group, as_id) · of_move_tile (as_group, as_id, ai_index) | uo.of_remove_tile ("group/id") · uo.of_move_tile ("group/id", ai_index) |
uo.of_insert_tile (as_group, as_id, as_text { , as_image, as_size }, ai_index) | uo.of_insert_tile ("group/id", as_text { , as_image, as_size }, ai_index) |
uo.of_group (as_id) · uo.of_remove_group (as_id) | as_id → as_key |
event ue_tile_clicked (as_group, as_id) · ue_tile_context (as_group, as_id) | (as_keys) |
event ue_tile_moved (as_group, as_id, as_to_group, al_index) | event ue_tile_moved (as_keys, as_to_keys, al_index) |
event ue_tile_resized (as_group, as_id, as_size) | event ue_tile_resized (as_keys, as_size) |
event ue_group_toggled (as_group, ab_collapsed) | event ue_group_toggled (as_key, ab_collapsed) |
Listbar #
| 1.0 | 2.0 |
|---|---|
lnv_section = uo.of_add_header (as_id, as_text) | uo.of_add_section (as_key, as_text) → long; danach uo.of_section (as_key) |
lnv_section.of_add_item (as_id, as_label, as_icon_file) | uo.of_add_item ("section/id", as_text { , as_image }) → long |
lnv_section.of_item (as_id) | uo.of_item ("section/id") |
uo.of_selected_section ( ) | uo.of_selected_key ( ) — die vollständige Adresse, "section/id" |
uo.of_remove_item (as_section, as_id) · of_select_item (as_section, as_id) · of_move_item (as_section, as_id, ai_index) | uo.of_remove_item ("section/id") · uo.of_select_item ("section/id") · uo.of_move_item ("section/id", ai_index) |
uo.of_insert_item (as_section, as_id, as_text { , as_image }, ai_index) | uo.of_insert_item ("section/id", as_text { , as_image }, ai_index) |
uo.of_section (as_id) | uo.of_section (as_key) |
| — | of_insert_section (as_key, as_text, ai_index) · of_remove_section (as_key) · of_move_section (as_key, ai_index) · of_item (…).of_is_selected ( ) |
event ue_selection_changed (as_from_section, as_from_id, as_section, as_id) · ue_selection_changing (…) | (as_from_keys, as_keys) |
event ue_item_reordered (as_section, as_id, ai_index) | event ue_item_reordered (as_keys, ai_index) |
event ue_section_toggled (as_section, ab_collapsed) | event ue_section_toggled (as_key, ab_collapsed) |
Statusbar #
| 1.0 | 2.0 |
|---|---|
uo.of_item (as_id) | uo.of_panel (as_key) |
uo.of_set_panel_menu (as_id, as_item_ids[], as_labels[]) | uo.of_add_menu_item ("panel/id", as_label { , as_image }), ein Eintrag pro Aufruf · of_insert_menu_item ("panel/id", as_label { , as_image }, ai_index) · of_add_menu_separator (as_key) |
uo.of_clear_panel_menu (as_id) | uo.of_clear_menu (as_key) · of_remove_menu_item ("panel/id") · of_move_menu_item ("panel/id", ai_index) |
| — | uo.of_menu_item ("panel/id") → n_pbt_statusbar_menu_item (ib_enabled, ib_checked, ib_visible) |
uo.of_add_panel (as_id, …) · of_insert_panel (as_id, …) · of_remove_panel (as_id) · of_move_panel (as_id, ai_index) · of_flash_panel (as_id, …) | as_id → as_key |
event ue_panel_menu_clicked (as_id, as_item_id) | event ue_panel_menu_clicked (as_keys) — "panel/id" |
event ue_panel_clicked (as_id) · ue_panel_double_clicked (as_id) · ue_panel_rclicked (as_id, al_x, al_y) | as_id → as_key |
Tab #
| 1.0 | 2.0 |
|---|---|
uo.of_item (as_id) | uo.of_page (as_key) |
uo.of_add_page (as_id, …) · of_insert_page (as_id, …) · of_select_page (as_id) · of_remove_page (as_id) · of_refresh_page (as_id) · of_move_page (as_id, ai_index) | as_id → as_key |
event ue_selection_changed (as_from_id, as_id) · ue_selection_changing (…) | (as_from_key, as_key) |
event ue_tab_closed (as_id) · ue_tab_closing (as_id) · ue_tab_reordered (as_id, ai_index) | as_id → as_key |
Dock container #
| 1.0 | 2.0 |
|---|---|
uo.of_item (as_id) | uo.of_panel (as_key) |
Toaster, Statictext, Code editor #
| 1.0 | 2.0 |
|---|---|
n_pbt_toaster : event ue_toast_clicked (as_id) · ue_toast_dismissed (as_id) · ue_toast_action (as_id, as_action) | as_id → as_key |
u_pbt_statictext : event ue_action (as_id) | event ue_action (as_key) |
u_pbt_codeeditor : event ue_changed (as_text) | event ue_changed ( ) — der Text wird mit of_get_text ( ) gelesen |
← Lizenz und Demomodus · Inhalt · Von 2.0 auf 3.0 migrieren →