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 VChain extends Chain {
20 
21     public class VAnchor extends Anchor {
VAnchor(Constraint.VSide side)22         VAnchor(Constraint.VSide side) {
23             super(Constraint.Side.valueOf(side.name()));
24         }
25     }
26 
27     private VAnchor mTop = new VAnchor(Constraint.VSide.TOP);
28     private VAnchor mBottom = new VAnchor(Constraint.VSide.BOTTOM);
29     private VAnchor mBaseline = new VAnchor(Constraint.VSide.BASELINE);
30 
VChain(String name)31     public VChain(String name) {
32         super(name);
33         type = new HelperType(typeMap.get(Type.VERTICAL_CHAIN));
34     }
35 
VChain(String name, String config)36     public VChain(String name, String config) {
37         super(name);
38         this.config = config;
39         type = new HelperType(typeMap.get(Type.VERTICAL_CHAIN));
40         configMap = convertConfigToMap();
41         if (configMap.containsKey("contains")) {
42             Ref.addStringToReferences(configMap.get("contains"), references);
43         }
44     }
45 
46     /**
47      * Get the top anchor
48      *
49      * @return the top anchor
50      */
getTop()51     public VAnchor getTop() {
52         return mTop;
53     }
54 
55     /**
56      * Connect anchor to Top
57      *
58      * @param anchor anchor to be connected
59      */
linkToTop(Constraint.VAnchor anchor)60     public void linkToTop(Constraint.VAnchor anchor) {
61         linkToTop(anchor, 0);
62     }
63 
64     /**
65      * Connect anchor to Top
66      *
67      * @param anchor anchor to be connected
68      * @param margin value of the margin
69      */
linkToTop(Constraint.VAnchor anchor, int margin)70     public void linkToTop(Constraint.VAnchor anchor, int margin) {
71         linkToTop(anchor, margin, Integer.MIN_VALUE);
72     }
73 
74     /**
75      * Connect anchor to Top
76      *
77      * @param anchor anchor to be connected
78      * @param margin value of the margin
79      * @param goneMargin value of the goneMargin
80      */
linkToTop(Constraint.VAnchor anchor, int margin, int goneMargin)81     public void linkToTop(Constraint.VAnchor anchor, int margin, int goneMargin) {
82         mTop.mConnection = anchor;
83         mTop.mMargin = margin;
84         mTop.mGoneMargin = goneMargin;
85         configMap.put("top", mTop.toString());
86     }
87 
88     /**
89      * Get the bottom anchor
90      *
91      * @return the bottom anchor
92      */
getBottom()93     public VAnchor getBottom() {
94         return mBottom;
95     }
96 
97     /**
98      * Connect anchor to Bottom
99      *
100      * @param anchor anchor to be connected
101      */
linkToBottom(Constraint.VAnchor anchor)102     public void linkToBottom(Constraint.VAnchor anchor) {
103         linkToBottom(anchor, 0);
104     }
105 
106     /**
107      * Connect anchor to Bottom
108      *
109      * @param anchor anchor to be connected
110      * @param margin value of the margin
111      */
linkToBottom(Constraint.VAnchor anchor, int margin)112     public void linkToBottom(Constraint.VAnchor anchor, int margin) {
113         linkToBottom(anchor, margin, Integer.MIN_VALUE);
114     }
115 
116     /**
117      * Connect anchor to Bottom
118      *
119      * @param anchor anchor to be connected
120      * @param margin value of the margin
121      * @param goneMargin value of the goneMargin
122      */
linkToBottom(Constraint.VAnchor anchor, int margin, int goneMargin)123     public void linkToBottom(Constraint.VAnchor anchor, int margin, int goneMargin) {
124         mBottom.mConnection = anchor;
125         mBottom.mMargin = margin;
126         mBottom.mGoneMargin = goneMargin;
127         configMap.put("bottom", mBottom.toString());
128     }
129 
130     /**
131      * Get the baseline anchor
132      *
133      * @return the baseline anchor
134      */
getBaseline()135     public VAnchor getBaseline() {
136         return mBaseline;
137     }
138 
139     /**
140      * Connect anchor to Baseline
141      *
142      * @param anchor anchor to be connected
143      */
linkToBaseline(Constraint.VAnchor anchor)144     public void linkToBaseline(Constraint.VAnchor anchor) {
145         linkToBaseline(anchor, 0);
146     }
147 
148     /**
149      * Connect anchor to Baseline
150      *
151      * @param anchor anchor to be connected
152      * @param margin value of the margin
153      */
linkToBaseline(Constraint.VAnchor anchor, int margin)154     public void linkToBaseline(Constraint.VAnchor anchor, int margin) {
155         linkToBaseline(anchor, margin, Integer.MIN_VALUE);
156     }
157 
158     /**
159      * Connect anchor to Baseline
160      *
161      * @param anchor anchor to be connected
162      * @param margin value of the margin
163      * @param goneMargin value of the goneMargin
164      */
linkToBaseline(Constraint.VAnchor anchor, int margin, int goneMargin)165     public void linkToBaseline(Constraint.VAnchor anchor, int margin, int goneMargin) {
166         mBaseline.mConnection = anchor;
167         mBaseline.mMargin = margin;
168         mBaseline.mGoneMargin = goneMargin;
169         configMap.put("baseline", mBaseline.toString());
170     }
171 
172 }
173