Sun, 07 Dec 2025 14:39:03 +0100
implement dynamic table models (GTK)
|
925
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
1 | /* |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
2 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
3 | * |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
4 | * Copyright 2025 Olaf Wintermann. All rights reserved. |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
5 | * |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
6 | * Redistribution and use in source and binary forms, with or without |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
7 | * modification, are permitted provided that the following conditions are met: |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
8 | * |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
9 | * 1. Redistributions of source code must retain the above copyright |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
10 | * notice, this list of conditions and the following disclaimer. |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
11 | * |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
12 | * 2. Redistributions in binary form must reproduce the above copyright |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
13 | * notice, this list of conditions and the following disclaimer in the |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
14 | * documentation and/or other materials provided with the distribution. |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
15 | * |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
16 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
17 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
18 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
19 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
20 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
21 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
22 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
23 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
24 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
|
df27741d02b5
implement ui_openfiledialog (Motif)
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 |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
26 | * POSSIBILITY OF SUCH DAMAGE. |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
27 | */ |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
28 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
29 | #include "pathbar.h" |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
30 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
31 | #include <unistd.h> |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
32 | #include <cx/string.h> |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
33 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
34 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
35 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
36 | void pathbar_resize(Widget w, PathBar *p, XtPointer d) |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
37 | { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
38 | Dimension width, height; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
39 | XtVaGetValues(w, XmNwidth, &width, XmNheight, &height, NULL); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
40 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
41 | Dimension *segW = (void*)XtCalloc(p->numSegments, sizeof(Dimension)); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
42 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
43 | Dimension maxHeight = 0; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
44 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
45 | /* get width/height from all widgets */ |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
46 | Dimension pathWidth = 0; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
47 | for(int i=0;i<p->numSegments;i++) { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
48 | Dimension segWidth; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
49 | Dimension segHeight; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
50 | XtVaGetValues(p->pathSegments[i], XmNwidth, &segWidth, XmNheight, &segHeight, NULL); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
51 | segW[i] = segWidth; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
52 | pathWidth += segWidth; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
53 | if(segHeight > maxHeight) { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
54 | maxHeight = segHeight; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
55 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
56 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
57 | Dimension tfHeight; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
58 | XtVaGetValues(p->textfield, XmNheight, &tfHeight, NULL); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
59 | if(tfHeight > maxHeight) { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
60 | maxHeight = tfHeight; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
61 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
62 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
63 | Boolean arrows = False; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
64 | if(pathWidth + 10 > width) { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
65 | arrows = True; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
66 | pathWidth += p->lw + p->rw; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
67 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
68 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
69 | /* calc max visible widgets */ |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
70 | int start = 0; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
71 | if(arrows) { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
72 | Dimension vis = p->lw+p->rw; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
73 | for(int i=p->numSegments;i>0;i--) { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
74 | Dimension segWidth = segW[i-1]; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
75 | if(vis + segWidth + 10 > width) { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
76 | start = i; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
77 | arrows = True; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
78 | break; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
79 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
80 | vis += segWidth; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
81 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
82 | } else { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
83 | p->shift = 0; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
84 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
85 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
86 | int leftShift = 0; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
87 | if(p->shift < 0) { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
88 | if(start + p->shift < 0) { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
89 | leftShift = start; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
90 | start = 0; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
91 | p->shift = -leftShift; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
92 | } else { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
93 | leftShift = -p->shift; /* negative shift */ |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
94 | start += p->shift; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
95 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
96 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
97 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
98 | int x = 0; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
99 | if(arrows) { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
100 | XtManageChild(p->left); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
101 | XtManageChild(p->right); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
102 | x = p->lw; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
103 | } else { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
104 | XtUnmanageChild(p->left); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
105 | XtUnmanageChild(p->right); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
106 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
107 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
108 | for(int i=0;i<p->numSegments;i++) { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
109 | if(i >= start && i < p->numSegments - leftShift && !p->input) { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
110 | XtVaSetValues(p->pathSegments[i], XmNx, x, XmNy, 0, XmNheight, maxHeight, NULL); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
111 | x += segW[i]; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
112 | XtManageChild(p->pathSegments[i]); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
113 | } else { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
114 | XtUnmanageChild(p->pathSegments[i]); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
115 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
116 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
117 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
118 | if(arrows) { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
119 | XtVaSetValues(p->left, XmNx, 0, XmNy, 0, XmNheight, maxHeight, NULL); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
120 | XtVaSetValues(p->right, XmNx, x, XmNy, 0, XmNheight, maxHeight, NULL); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
121 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
122 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
123 | free(segW); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
124 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
125 | Dimension rw, rh; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
126 | XtMakeResizeRequest(w, width, maxHeight, &rw, &rh); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
127 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
128 | XtVaSetValues(p->textfield, XmNwidth, rw, XmNheight, rh, NULL); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
129 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
130 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
131 | static void pathbarActivateTF(PathBar *p) |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
132 | { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
133 | XtUnmanageChild(p->left); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
134 | XtUnmanageChild(p->right); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
135 | XNETextSetSelection(p->textfield, 0, XNETextGetLastPosition(p->textfield), 0); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
136 | XtManageChild(p->textfield); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
137 | p->input = 1; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
138 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
139 | XmProcessTraversal(p->textfield, XmTRAVERSE_CURRENT); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
140 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
141 | pathbar_resize(p->widget, p, NULL); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
142 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
143 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
144 | void PathBarActivateTextfield(PathBar *p) |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
145 | { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
146 | p->focus = 1; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
147 | pathbarActivateTF(p); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
148 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
149 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
150 | void pathbar_input(Widget w, PathBar *p, XtPointer c) |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
151 | { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
152 | XmDrawingAreaCallbackStruct *cbs = (XmDrawingAreaCallbackStruct*)c; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
153 | XEvent *xevent = cbs->event; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
154 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
155 | if (cbs->reason == XmCR_INPUT) { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
156 | if (xevent->xany.type == ButtonPress) { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
157 | p->focus = 0; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
158 | pathbarActivateTF(p); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
159 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
160 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
161 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
162 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
163 | void pathbar_losingfocus(Widget w, PathBar *p, XtPointer c) |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
164 | { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
165 | if(--p->focus < 0) { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
166 | p->input = False; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
167 | XtUnmanageChild(p->textfield); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
168 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
169 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
170 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
171 | static cxmutstr concat_path_s(cxstring base, cxstring path) { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
172 | if(!path.ptr) { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
173 | path = CX_STR(""); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
174 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
175 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
176 | int add_separator = 0; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
177 | if(base.length != 0 && base.ptr[base.length-1] == '/') { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
178 | if(path.ptr[0] == '/') { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
179 | base.length--; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
180 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
181 | } else { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
182 | if(path.length == 0 || path.ptr[0] != '/') { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
183 | add_separator = 1; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
184 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
185 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
186 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
187 | cxmutstr url; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
188 | if(add_separator) { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
189 | url = cx_strcat(3, base, CX_STR("/"), path); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
190 | } else { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
191 | url = cx_strcat(2, base, path); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
192 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
193 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
194 | return url; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
195 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
196 | |
|
926
32b16cbca280
implement ui_savefiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
925
diff
changeset
|
197 | char* pathbar_concat_path(const char *path1, const char *path2) { |
|
925
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
198 | return concat_path_s(cx_str(path1), cx_str(path2)).ptr; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
199 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
200 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
201 | void pathbar_pathinput(Widget w, PathBar *p, XtPointer d) |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
202 | { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
203 | char *newpath = XNETextGetString(p->textfield); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
204 | if(newpath) { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
205 | if(newpath[0] == '~') { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
206 | char *p = newpath+1; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
207 | char *home = getenv("HOME"); |
|
926
32b16cbca280
implement ui_savefiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
925
diff
changeset
|
208 | char *cp = pathbar_concat_path(home, p); |
|
925
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
209 | XtFree(newpath); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
210 | newpath = cp; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
211 | } else if(newpath[0] != '/') { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
212 | char curdir[2048]; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
213 | curdir[0] = 0; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
214 | getcwd(curdir, 2048); |
|
926
32b16cbca280
implement ui_savefiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
925
diff
changeset
|
215 | char *cp = pathbar_concat_path(curdir, newpath); |
|
925
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
216 | XtFree(newpath); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
217 | newpath = cp; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
218 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
219 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
220 | /* update path */ |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
221 | PathBarSetPath(p, newpath); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
222 | if(p->updateDir) { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
223 | p->updateDir(p->updateDirData, newpath, -1); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
224 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
225 | XtFree(newpath); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
226 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
227 | /* hide textfield and show path as buttons */ |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
228 | XtUnmanageChild(p->textfield); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
229 | pathbar_resize(p->widget, p, NULL); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
230 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
231 | if(p->focus_widget) { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
232 | XmProcessTraversal(p->focus_widget, XmTRAVERSE_CURRENT); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
233 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
234 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
235 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
236 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
237 | void pathbar_shift_left(Widget w, PathBar *p, XtPointer d) |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
238 | { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
239 | p->shift--; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
240 | pathbar_resize(p->widget, p, NULL); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
241 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
242 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
243 | void pathbar_shift_right(Widget w, PathBar *p, XtPointer d) |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
244 | { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
245 | if(p->shift < 0) { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
246 | p->shift++; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
247 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
248 | pathbar_resize(p->widget, p, NULL); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
249 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
250 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
251 | static void pathTextEH(Widget widget, XtPointer data, XEvent *event, Boolean *dispatch) { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
252 | PathBar *pb = data; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
253 | if(event->type == KeyReleaseMask) { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
254 | if(event->xkey.keycode == 9) { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
255 | XtUnmanageChild(pb->textfield); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
256 | pathbar_resize(pb->widget, pb, NULL); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
257 | *dispatch = False; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
258 | } else if(event->xkey.keycode == 36) { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
259 | pathbar_pathinput(pb->textfield, pb, NULL); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
260 | *dispatch = False; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
261 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
262 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
263 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
264 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
265 | PathBar* CreatePathBar(Widget parent, ArgList args, int n) |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
266 | { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
267 | PathBar *bar = (PathBar*)XtMalloc(sizeof(PathBar)); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
268 | bar->path = NULL; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
269 | bar->updateDir = NULL; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
270 | bar->updateDirData = NULL; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
271 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
272 | bar->focus_widget = NULL; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
273 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
274 | bar->getpathelm = NULL; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
275 | bar->getpathelmdata = NULL; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
276 | bar->current_pathelms = NULL; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
277 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
278 | bar->shift = 0; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
279 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
280 | XtSetArg(args[n], XmNmarginWidth, 0); n++; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
281 | XtSetArg(args[n], XmNmarginHeight, 0); n++; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
282 | bar->widget = XmCreateDrawingArea(parent, "pathbar", args, n); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
283 | XtAddCallback( |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
284 | bar->widget, |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
285 | XmNresizeCallback, |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
286 | (XtCallbackProc)pathbar_resize, |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
287 | bar); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
288 | XtAddCallback( |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
289 | bar->widget, |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
290 | XmNinputCallback, |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
291 | (XtCallbackProc)pathbar_input, |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
292 | bar); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
293 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
294 | Arg a[4]; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
295 | XtSetArg(a[0], XmNshadowThickness, 0); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
296 | XtSetArg(a[1], XmNx, 0); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
297 | XtSetArg(a[2], XmNy, 0); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
298 | bar->textfield = XNECreateText(bar->widget, "pbtext", a, 3); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
299 | bar->input = 0; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
300 | XtAddCallback( |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
301 | bar->textfield, |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
302 | XmNlosingFocusCallback, |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
303 | (XtCallbackProc)pathbar_losingfocus, |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
304 | bar); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
305 | XtAddCallback(bar->textfield, XmNactivateCallback, |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
306 | (XtCallbackProc)pathbar_pathinput, bar); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
307 | XtAddEventHandler(bar->textfield, KeyPressMask | KeyReleaseMask, FALSE, pathTextEH, bar); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
308 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
309 | XtSetArg(a[0], XmNarrowDirection, XmARROW_LEFT); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
310 | bar->left = XmCreateArrowButton(bar->widget, "pbbutton", a, 1); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
311 | XtSetArg(a[0], XmNarrowDirection, XmARROW_RIGHT); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
312 | bar->right = XmCreateArrowButton(bar->widget, "pbbutton", a, 1); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
313 | XtAddCallback( |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
314 | bar->left, |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
315 | XmNactivateCallback, |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
316 | (XtCallbackProc)pathbar_shift_left, |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
317 | bar); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
318 | XtAddCallback( |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
319 | bar->right, |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
320 | XmNactivateCallback, |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
321 | (XtCallbackProc)pathbar_shift_right, |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
322 | bar); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
323 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
324 | Pixel bg; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
325 | XtVaGetValues(bar->textfield, XmNbackground, &bg, NULL); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
326 | XtVaSetValues(bar->widget, XmNbackground, bg, NULL); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
327 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
328 | XtManageChild(bar->left); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
329 | XtManageChild(bar->right); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
330 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
331 | XtVaGetValues(bar->left, XmNwidth, &bar->lw, NULL); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
332 | XtVaGetValues(bar->right, XmNwidth, &bar->rw, NULL); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
333 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
334 | bar->segmentAlloc = 16; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
335 | bar->numSegments = 0; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
336 | bar->pathSegments = (Widget*)XtCalloc(16, sizeof(Widget)); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
337 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
338 | bar->selection = 0; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
339 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
340 | return bar; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
341 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
342 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
343 | void PathBarChangeDir(Widget w, PathBar *bar, XtPointer c) |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
344 | { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
345 | XmToggleButtonSetState(bar->pathSegments[bar->selection], False, False); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
346 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
347 | int i; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
348 | for(i=0;i<bar->numSegments;i++) { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
349 | if(bar->pathSegments[i] == w) { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
350 | bar->selection = i; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
351 | XmToggleButtonSetState(w, True, False); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
352 | break; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
353 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
354 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
355 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
356 | UiPathElm elm = bar->current_pathelms[i]; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
357 | cxmutstr path = cx_strdup(cx_strn(elm.path, elm.path_len)); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
358 | if(bar->updateDir) { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
359 | XNETextSetString(bar->textfield, path.ptr); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
360 | bar->updateDir(bar->updateDirData, path.ptr, i); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
361 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
362 | free(path.ptr); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
363 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
364 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
365 | static void ui_pathelm_destroy(UiPathElm *elms, size_t nelm) { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
366 | for(int i=0;i<nelm;i++) { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
367 | free(elms[i].name); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
368 | free(elms[i].path); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
369 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
370 | free(elms); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
371 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
372 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
373 | void PathBarSetPath(PathBar *bar, const char *path) |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
374 | { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
375 | if(bar->path) { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
376 | free(bar->path); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
377 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
378 | bar->path = strdup(path); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
379 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
380 | for(int i=0;i<bar->numSegments;i++) { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
381 | XtDestroyWidget(bar->pathSegments[i]); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
382 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
383 | XtUnmanageChild(bar->textfield); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
384 | XtManageChild(bar->left); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
385 | XtManageChild(bar->right); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
386 | bar->input = False; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
387 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
388 | Arg args[4]; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
389 | XmString str; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
390 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
391 | bar->numSegments = 0; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
392 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
393 | ui_pathelm_destroy(bar->current_pathelms, bar->numSegments); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
394 | size_t nelm = 0; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
395 | UiPathElm* path_elm = bar->getpathelm(bar->path, strlen(bar->path), &nelm, bar->getpathelmdata); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
396 | if (!path_elm) { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
397 | return; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
398 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
399 | bar->current_pathelms = path_elm; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
400 | bar->numSegments = nelm; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
401 | bar->pathSegments = realloc(bar->pathSegments, nelm * sizeof(Widget*)); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
402 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
403 | for(int i=0;i<nelm;i++) { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
404 | UiPathElm elm = path_elm[i]; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
405 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
406 | cxmutstr name = cx_strdup(cx_strn(elm.name, elm.name_len)); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
407 | str = XmStringCreateLocalized(elm.name); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
408 | free(name.ptr); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
409 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
410 | XtSetArg(args[0], XmNlabelString, str); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
411 | XtSetArg(args[1], XmNfillOnSelect, True); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
412 | XtSetArg(args[2], XmNindicatorOn, False); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
413 | Widget button = XmCreateToggleButton(bar->widget, "pbbutton", args, 3); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
414 | XtAddCallback( |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
415 | button, |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
416 | XmNvalueChangedCallback, |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
417 | (XtCallbackProc)PathBarChangeDir, |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
418 | bar); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
419 | XmStringFree(str); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
420 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
421 | bar->pathSegments[i] = button; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
422 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
423 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
424 | bar->selection = bar->numSegments-1; |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
425 | XmToggleButtonSetState(bar->pathSegments[bar->selection], True, False); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
426 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
427 | XNETextSetString(bar->textfield, (char*)path); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
428 | XNETextSetInsertionPosition(bar->textfield, XNETextGetLastPosition(bar->textfield)); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
429 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
430 | pathbar_resize(bar->widget, bar, NULL); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
431 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
432 | |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
433 | void PathBarDestroy(PathBar *pathbar) { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
434 | if(pathbar->path) { |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
435 | XtFree(pathbar->path); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
436 | } |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
437 | XtFree((void*)pathbar->pathSegments); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
438 | XtFree((void*)pathbar); |
|
df27741d02b5
implement ui_openfiledialog (Motif)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
439 | } |