application/demo_bindings.c

Tue, 18 Nov 2025 17:26:15 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Tue, 18 Nov 2025 17:26:15 +0100
changeset 914
4d5aa85bc5ed
parent 912
06c37c12d149
child 915
ddbbceb8c3a5
permissions
-rw-r--r--

fix wrong arg count in frame creation (Motif)

872
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1 /*
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
3 *
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
4 * Copyright 2017 Olaf Wintermann. All rights reserved.
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
5 *
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
6 * Redistribution and use in source and binary forms, with or without
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
7 * modification, are permitted provided that the following conditions are met:
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
8 *
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
9 * 1. Redistributions of source code must retain the above copyright
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
10 * notice, this list of conditions and the following disclaimer.
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
11 *
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
12 * 2. Redistributions in binary form must reproduce the above copyright
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
13 * notice, this list of conditions and the following disclaimer in the
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
14 * documentation and/or other materials provided with the distribution.
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
15 *
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
26 * POSSIBILITY OF SUCH DAMAGE.
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
27 */
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
28
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
29 #include "demo_bindings.h"
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
30
873
78853bfc47cf add textfield (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 872
diff changeset
31 #include <stdio.h>
78853bfc47cf add textfield (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 872
diff changeset
32 #include <stdlib.h>
78853bfc47cf add textfield (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 872
diff changeset
33 #include <string.h>
872
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
34
873
78853bfc47cf add textfield (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 872
diff changeset
35 #ifndef UI_WIN32
872
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
36
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
37 Document* document_create(int id) {
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
38 Document* doc = ui_document_new(sizeof(Document));
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
39 UiContext *ctx = ui_document_context(doc);
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
40
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
41 char buf[32];
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
42 snprintf(buf, 32, "%d", id);
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
43
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
44 doc->id = ui_string_new(ctx, "id");
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
45 doc->name = ui_string_new(ctx, "name");
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
46
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
47 doc->input_name = ui_string_new(ctx, "input_name");
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
48
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
49 ui_set(doc->id, buf);
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
50
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
51 return doc;
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
52 }
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
53
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
54 void update_name(UiEvent *event, void *userdata) {
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
55 Document *doc = event->document;
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
56 if(!doc) {
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
57 return;
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
58 }
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
59 char *s = ui_get(doc->input_name);
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
60 ui_set(doc->name, s);
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
61 }
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
62
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
63 void switch_document(UiEvent *event, void *userdata) {
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
64 MainWindow *wdata = event->window;
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
65 if(event->document) {
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
66 ui_detach_document(event->obj->ctx, event->document);
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
67 }
882
75de79b155e3 add ui_motif_get_app()
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 873
diff changeset
68 printf("selection: %d\n", event->intval);
872
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
69 Document *doc = ui_list_get(wdata->doclist, event->intval);
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
70 if(doc) {
882
75de79b155e3 add ui_motif_get_app()
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 873
diff changeset
71 char *s1 = ui_get(doc->id);
75de79b155e3 add ui_motif_get_app()
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 873
diff changeset
72 char *s2 = ui_get(doc->name);
75de79b155e3 add ui_motif_get_app()
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 873
diff changeset
73 printf("doc %s - %s\n", s1, s2);
872
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
74 ui_attach_document(event->obj->ctx, doc);
882
75de79b155e3 add ui_motif_get_app()
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 873
diff changeset
75
872
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
76 }
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
77 }
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
78
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
79 void* doclist_get_value(void *elm, int col) {
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
80 Document *doc = elm;
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
81 return ui_get(doc->id);
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
82 }
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
83
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
84 void application_startup(UiEvent *event, void *data) {
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
85 UiObject *obj = ui_simple_window("Bindings Demo", NULL);
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
86 MainWindow *wdata = ui_malloc(obj->ctx, sizeof(MainWindow));
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
87 obj->window = wdata;
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
88
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
89 wdata->doclist = ui_list_new(obj->ctx, "doclist");
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
90
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
91 ui_grid(obj, .margin = 10, .columnspacing = 10, .rowspacing = 10, .fill = TRUE) {
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
92 ui_rlabel(obj, .label = "Document:");
914
4d5aa85bc5ed fix wrong arg count in frame creation (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 912
diff changeset
93 ui_llabel(obj, .varname = "id", .hfill = TRUE, .hexpand = TRUE, .vfill = TRUE);
872
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
94 ui_newline(obj);
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
95
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
96 ui_rlabel(obj, .label = "Name:");
914
4d5aa85bc5ed fix wrong arg count in frame creation (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 912
diff changeset
97 ui_llabel(obj, .varname = "name", .hfill = TRUE, .hexpand = TRUE, .vfill = TRUE);
872
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
98 ui_newline(obj);
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
99
911
c8e1d40eeab6 fix combobox get/set selection functions (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 909
diff changeset
100 ui_combobox(obj, .varname = "doclist", .colspan = 2, .onactivate = switch_document, .getvalue = doclist_get_value, .colspan = 2, .hfill = TRUE);
872
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
101 ui_newline(obj);
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
102
914
4d5aa85bc5ed fix wrong arg count in frame creation (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 912
diff changeset
103 ui_frame(obj, .label = "Document", .colspan = 2, .fill = TRUE, .subcontainer = UI_CONTAINER_GRID, .columnspacing = 10, .rowspacing = 10, .padding = 10) {
4d5aa85bc5ed fix wrong arg count in frame creation (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 912
diff changeset
104 ui_rlabel(obj, .label = "Name:", .vfill = TRUE);
4d5aa85bc5ed fix wrong arg count in frame creation (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 912
diff changeset
105 ui_textfield(obj, .varname = "input_name", .onchange = update_name);
872
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
106 }
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
107 }
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
108
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
109 for(int i=0;i<10;i++) {
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
110 Document *doc = document_create(i);
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
111 ui_list_append(wdata->doclist, doc);
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
112 }
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
113 ui_list_update(wdata->doclist);
882
75de79b155e3 add ui_motif_get_app()
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 873
diff changeset
114 ui_list_setselection(wdata->doclist, 0);
872
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
115 Document *doc = ui_list_get(wdata->doclist, 0);
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
116 ui_attach_document(obj->ctx, doc);
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
117
911
c8e1d40eeab6 fix combobox get/set selection functions (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 909
diff changeset
118 ui_list_setselection(wdata->doclist, 0);
872
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
119
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
120 ui_show(obj);
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
121 }
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
122
873
78853bfc47cf add textfield (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 872
diff changeset
123 #endif
872
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
124
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
125 #ifndef UI_WIN32
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
126
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
127 int main(int argc, char **argv) {
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
128 ui_init(NULL, argc, argv);
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
129 ui_onstartup(application_startup, NULL);
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
130 ui_main();
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
131 return 0;
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
132 }
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
133
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
134 #else
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
135
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
136 int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) {
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
137 return 0;
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
138 }
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
139
1e34a27e016d add first code for binding demo
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
140 #endif

mercurial