1 /*
2  * Copyright (C) 2022 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package androidx.constraintlayout.core.dsl;
18 
19 public class HChain extends Chain {
20     public class HAnchor extends Anchor {
HAnchor(Constraint.HSide side)21         HAnchor(Constraint.HSide side) {
22             super(Constraint.Side.valueOf(side.name()));
23         }
24     }
25 
26     private HAnchor mLeft = new HAnchor(Constraint.HSide.LEFT);
27     private HAnchor mRight = new HAnchor(Constraint.HSide.RIGHT);
28     private HAnchor mStart = new HAnchor(Constraint.HSide.START);
29     private HAnchor mEnd = new HAnchor(Constraint.HSide.END);
30 
HChain(String name)31     public HChain(String name) {
32         super(name);
33         type = new HelperType(typeMap.get(Type.HORIZONTAL_CHAIN));
34     }
35 
HChain(String name, String config)36     public HChain(String name, String config) {
37         super(name);
38         this.config = config;
39         type = new HelperType(typeMap.get(Type.HORIZONTAL_CHAIN));
40         configMap = convertConfigToMap();
41         if (configMap.containsKey("contains")) {
42             Ref.addStringToReferences(configMap.get("contains"), references);
43         }
44     }
45 
46     /**
47      * Get the left anchor
48      *
49      * @return the left anchor
50      */
getLeft()51     public HAnchor getLeft() {
52         return mLeft;
53     }
54 
55     /**
56      * Connect anchor to Left
57      *
58      * @param anchor anchor to be connected
59      */
linkToLeft(Constraint.HAnchor anchor)60     public void linkToLeft(Constraint.HAnchor anchor) {
61         linkToLeft(anchor, 0);
62     }
63 
64     /**
65      * Connect anchor to Left
66      *
67      * @param anchor anchor to be connected
68      * @param margin value of the margin
69      */
linkToLeft(Constraint.HAnchor anchor, int margin)70     public void linkToLeft(Constraint.HAnchor anchor, int margin) {
71         linkToLeft(anchor, margin, Integer.MIN_VALUE);
72     }
73 
74     /**
75      * Connect anchor to Left
76      *
77      * @param anchor anchor to be connected
78      * @param margin value of the margin
79      * @param goneMargin value of the goneMargin
80      */
linkToLeft(Constraint.HAnchor anchor, int margin, int goneMargin)81     public void linkToLeft(Constraint.HAnchor anchor, int margin, int goneMargin) {
82         mLeft.mConnection = anchor;
83         mLeft.mMargin = margin;
84         mLeft.mGoneMargin = goneMargin;
85         configMap.put("left", mLeft.toString());
86     }
87 
88     /**
89      * Get the right anchor
90      *
91      * @return the right anchor
92      */
getRight()93     public HAnchor getRight() {
94         return mRight;
95     }
96 
97     /**
98      * Connect anchor to Right
99      *
100      * @param anchor anchor to be connected
101      */
linkToRight(Constraint.HAnchor anchor)102     public void linkToRight(Constraint.HAnchor anchor) {
103         linkToRight(anchor, 0);
104     }
105 
106     /**
107      * Connect anchor to Right
108      *
109      * @param anchor anchor to be connected
110      * @param margin value of the margin
111      */
linkToRight(Constraint.HAnchor anchor, int margin)112     public void linkToRight(Constraint.HAnchor anchor, int margin) {
113         linkToRight(anchor, margin, Integer.MIN_VALUE);
114     }
115 
116     /**
117      * Connect anchor to Right
118      *
119      * @param anchor anchor to be connected
120      * @param margin value of the margin
121      * @param goneMargin value of the goneMargin
122      */
linkToRight(Constraint.HAnchor anchor, int margin, int goneMargin)123     public void linkToRight(Constraint.HAnchor anchor, int margin, int goneMargin) {
124         mRight.mConnection = anchor;
125         mRight.mMargin = margin;
126         mRight.mGoneMargin = goneMargin;
127         configMap.put("right", mRight.toString());
128     }
129 
130     /**
131      * Get the start anchor
132      *
133      * @return the start anchor
134      */
getStart()135     public HAnchor getStart() {
136         return mStart;
137     }
138 
139     /**
140      * Connect anchor to Start
141      *
142      * @param anchor anchor to be connected
143      */
linkToStart(Constraint.HAnchor anchor)144     public void linkToStart(Constraint.HAnchor anchor) {
145         linkToStart(anchor, 0);
146     }
147 
148     /**
149      * Connect anchor to Start
150      *
151      * @param anchor anchor to be connected
152      * @param margin value of the margin
153      */
linkToStart(Constraint.HAnchor anchor, int margin)154     public void linkToStart(Constraint.HAnchor anchor, int margin) {
155         linkToStart(anchor, margin, Integer.MIN_VALUE);
156     }
157 
158     /**
159      * Connect anchor to Start
160      *
161      * @param anchor anchor to be connected
162      * @param margin value of the margin
163      * @param goneMargin value of the goneMargin
164      */
linkToStart(Constraint.HAnchor anchor, int margin, int goneMargin)165     public void linkToStart(Constraint.HAnchor anchor, int margin, int goneMargin) {
166         mStart.mConnection = anchor;
167         mStart.mMargin = margin;
168         mStart.mGoneMargin = goneMargin;
169         configMap.put("start", mStart.toString());
170     }
171 
172     /**
173      * Get the end anchor
174      *
175      * @return the end anchor
176      */
getEnd()177     public HAnchor getEnd() {
178         return mEnd;
179     }
180 
181     /**
182      * Connect anchor to End
183      *
184      * @param anchor anchor to be connected
185      */
linkToEnd(Constraint.HAnchor anchor)186     public void linkToEnd(Constraint.HAnchor anchor) {
187         linkToEnd(anchor, 0);
188     }
189 
190     /**
191      * Connect anchor to End
192      *
193      * @param anchor anchor to be connected
194      * @param margin value of the margin
195      */
linkToEnd(Constraint.HAnchor anchor, int margin)196     public void linkToEnd(Constraint.HAnchor anchor, int margin) {
197         linkToEnd(anchor, margin, Integer.MIN_VALUE);
198     }
199 
200     /**
201      * Connect anchor to End
202      *
203      * @param anchor anchor to be connected
204      * @param margin value of the margin
205      * @param goneMargin value of the goneMargin
206      */
linkToEnd(Constraint.HAnchor anchor, int margin, int goneMargin)207     public void linkToEnd(Constraint.HAnchor anchor, int margin, int goneMargin) {
208         mEnd.mConnection = anchor;
209         mEnd.mMargin = margin;
210         mEnd.mGoneMargin = goneMargin;
211         configMap.put("end", mEnd.toString());
212     }
213 
214 }
215