root / src / gr / grnet / pithos / web / client / SortableHeader.java @ ed2b76a4
History | View | Annotate | Download (4.6 kB)
1 | a57faaf0 | Christos Stathis | /*
|
---|---|---|---|
2 | e6e9f6e6 | Christos KK Loverdos | * Copyright 2011-2013 GRNET S.A. All rights reserved.
|
3 | a57faaf0 | Christos Stathis | *
|
4 | 63366925 | Christos Stathis | * Redistribution and use in source and binary forms, with or
|
5 | 63366925 | Christos Stathis | * without modification, are permitted provided that the following
|
6 | 63366925 | Christos Stathis | * conditions are met:
|
7 | a57faaf0 | Christos Stathis | *
|
8 | 63366925 | Christos Stathis | * 1. Redistributions of source code must retain the above
|
9 | 63366925 | Christos Stathis | * copyright notice, this list of conditions and the following
|
10 | 63366925 | Christos Stathis | * disclaimer.
|
11 | a57faaf0 | Christos Stathis | *
|
12 | 63366925 | Christos Stathis | * 2. Redistributions in binary form must reproduce the above
|
13 | 63366925 | Christos Stathis | * copyright notice, this list of conditions and the following
|
14 | 63366925 | Christos Stathis | * disclaimer in the documentation and/or other materials
|
15 | 63366925 | Christos Stathis | * provided with the distribution.
|
16 | 63366925 | Christos Stathis | *
|
17 | 63366925 | Christos Stathis | * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
|
18 | 63366925 | Christos Stathis | * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
19 | 63366925 | Christos Stathis | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
20 | 63366925 | Christos Stathis | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
|
21 | 63366925 | Christos Stathis | * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
22 | 63366925 | Christos Stathis | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
23 | 63366925 | Christos Stathis | * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
24 | 63366925 | Christos Stathis | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
25 | 63366925 | Christos Stathis | * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
26 | 63366925 | Christos Stathis | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
27 | 63366925 | Christos Stathis | * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
28 | 63366925 | Christos Stathis | * POSSIBILITY OF SUCH DAMAGE.
|
29 | 63366925 | Christos Stathis | *
|
30 | 63366925 | Christos Stathis | * The views and conclusions contained in the software and
|
31 | 63366925 | Christos Stathis | * documentation are those of the authors and should not be
|
32 | 63366925 | Christos Stathis | * interpreted as representing official policies, either expressed
|
33 | 63366925 | Christos Stathis | * or implied, of GRNET S.A.
|
34 | a57faaf0 | Christos Stathis | */
|
35 | a57faaf0 | Christos Stathis | package gr.grnet.pithos.web.client; |
36 | a57faaf0 | Christos Stathis | |
37 | a57faaf0 | Christos Stathis | import com.google.gwt.cell.client.Cell.Context; |
38 | a57faaf0 | Christos Stathis | import com.google.gwt.cell.client.ClickableTextCell; |
39 | a57faaf0 | Christos Stathis | import com.google.gwt.core.client.GWT; |
40 | a57faaf0 | Christos Stathis | import com.google.gwt.resources.client.ClientBundle; |
41 | a57faaf0 | Christos Stathis | import com.google.gwt.resources.client.ImageResource; |
42 | a57faaf0 | Christos Stathis | import com.google.gwt.safehtml.client.SafeHtmlTemplates; |
43 | a57faaf0 | Christos Stathis | import com.google.gwt.safehtml.shared.SafeHtml; |
44 | a57faaf0 | Christos Stathis | import com.google.gwt.safehtml.shared.SafeHtmlBuilder; |
45 | a57faaf0 | Christos Stathis | import com.google.gwt.safehtml.shared.SafeHtmlUtils; |
46 | a57faaf0 | Christos Stathis | import com.google.gwt.user.cellview.client.Header; |
47 | a57faaf0 | Christos Stathis | import com.google.gwt.user.client.ui.AbstractImagePrototype; |
48 | a57faaf0 | Christos Stathis | |
49 | a57faaf0 | Christos Stathis | /**
|
50 | a57faaf0 | Christos Stathis | * A {@link Header} subclass that maintains sorting state and displays an icon
|
51 | a57faaf0 | Christos Stathis | * to indicate the sort direction.
|
52 | a57faaf0 | Christos Stathis | */
|
53 | a57faaf0 | Christos Stathis | public class SortableHeader extends Header<String> { |
54 | a57faaf0 | Christos Stathis | |
55 | a57faaf0 | Christos Stathis | interface Template extends SafeHtmlTemplates { |
56 | a57faaf0 | Christos Stathis | @Template("<div style=\"position:relative;cursor:hand;cursor:pointer;" |
57 | a57faaf0 | Christos Stathis | + "padding-right:{0}px;\">{1}<div>{2}</div></div>")
|
58 | a57faaf0 | Christos Stathis | SafeHtml sorted(int imageWidth, SafeHtml arrow, String text); |
59 | a57faaf0 | Christos Stathis | |
60 | a57faaf0 | Christos Stathis | @Template("<div style=\"position:relative;cursor:hand;cursor:pointer;" |
61 | a57faaf0 | Christos Stathis | + "padding-right:{0}px;\"><div style=\"position:absolute;display:none;"
|
62 | a57faaf0 | Christos Stathis | + "\"></div><div>{1}</div></div>")
|
63 | a57faaf0 | Christos Stathis | SafeHtml unsorted(int imageWidth, String text); |
64 | a57faaf0 | Christos Stathis | } |
65 | a57faaf0 | Christos Stathis | |
66 | a57faaf0 | Christos Stathis | private static Template template; |
67 | a57faaf0 | Christos Stathis | |
68 | a57faaf0 | Christos Stathis | /**
|
69 | a57faaf0 | Christos Stathis | * Image resources.
|
70 | a57faaf0 | Christos Stathis | */
|
71 | a57faaf0 | Christos Stathis | public static interface Resources extends ClientBundle { |
72 | a57faaf0 | Christos Stathis | |
73 | a57faaf0 | Christos Stathis | ImageResource downArrow(); |
74 | a57faaf0 | Christos Stathis | |
75 | a57faaf0 | Christos Stathis | ImageResource upArrow(); |
76 | a57faaf0 | Christos Stathis | } |
77 | a57faaf0 | Christos Stathis | |
78 | a57faaf0 | Christos Stathis | private static final Resources RESOURCES = GWT.create(Resources.class); |
79 | a57faaf0 | Christos Stathis | private static final int IMAGE_WIDTH = 16; |
80 | a57faaf0 | Christos Stathis | private static final SafeHtml DOWN_ARROW = makeImage(RESOURCES.downArrow()); |
81 | a57faaf0 | Christos Stathis | private static final SafeHtml UP_ARROW = makeImage(RESOURCES.upArrow()); |
82 | a57faaf0 | Christos Stathis | |
83 | a57faaf0 | Christos Stathis | private static SafeHtml makeImage(ImageResource resource) { |
84 | a57faaf0 | Christos Stathis | AbstractImagePrototype proto = AbstractImagePrototype.create(resource); |
85 | a57faaf0 | Christos Stathis | String html = proto.getHTML().replace("style='", |
86 | a57faaf0 | Christos Stathis | "style='position:absolute;right:0px;top:0px;");
|
87 | a57faaf0 | Christos Stathis | return SafeHtmlUtils.fromTrustedString(html);
|
88 | a57faaf0 | Christos Stathis | } |
89 | a57faaf0 | Christos Stathis | |
90 | a57faaf0 | Christos Stathis | private boolean reverseSort = false; |
91 | a57faaf0 | Christos Stathis | private boolean sorted = false; |
92 | a57faaf0 | Christos Stathis | private String text; |
93 | 7cca8bf1 | Christos Stathis | private String property; |
94 | a57faaf0 | Christos Stathis | |
95 | 7cca8bf1 | Christos Stathis | SortableHeader(String text, String property) { |
96 | a57faaf0 | Christos Stathis | super(new ClickableTextCell()); |
97 | a57faaf0 | Christos Stathis | if (template == null) { |
98 | a57faaf0 | Christos Stathis | template = GWT.create(Template.class); |
99 | a57faaf0 | Christos Stathis | } |
100 | a57faaf0 | Christos Stathis | this.text = text;
|
101 | 7cca8bf1 | Christos Stathis | this.property = property;
|
102 | a57faaf0 | Christos Stathis | } |
103 | a57faaf0 | Christos Stathis | |
104 | a57faaf0 | Christos Stathis | public boolean getReverseSort() { |
105 | a57faaf0 | Christos Stathis | return reverseSort;
|
106 | a57faaf0 | Christos Stathis | } |
107 | a57faaf0 | Christos Stathis | |
108 | a57faaf0 | Christos Stathis | @Override
|
109 | a57faaf0 | Christos Stathis | public String getValue() { |
110 | a57faaf0 | Christos Stathis | return text;
|
111 | a57faaf0 | Christos Stathis | } |
112 | a57faaf0 | Christos Stathis | |
113 | a57faaf0 | Christos Stathis | @Override
|
114 | ebead1b5 | Christos Stathis | public void render(Context context, SafeHtmlBuilder sb) { |
115 | a57faaf0 | Christos Stathis | if (sorted) {
|
116 | a57faaf0 | Christos Stathis | sb.append(template.sorted(IMAGE_WIDTH, reverseSort ? DOWN_ARROW : UP_ARROW, text)); |
117 | a57faaf0 | Christos Stathis | } else {
|
118 | a57faaf0 | Christos Stathis | sb.append(template.unsorted(IMAGE_WIDTH, text)); |
119 | a57faaf0 | Christos Stathis | } |
120 | a57faaf0 | Christos Stathis | } |
121 | a57faaf0 | Christos Stathis | |
122 | a57faaf0 | Christos Stathis | public void setReverseSort(boolean reverseSort) { |
123 | a57faaf0 | Christos Stathis | this.reverseSort = reverseSort;
|
124 | a57faaf0 | Christos Stathis | } |
125 | a57faaf0 | Christos Stathis | |
126 | 7cca8bf1 | Christos Stathis | public boolean isSorted() { |
127 | 7cca8bf1 | Christos Stathis | return sorted;
|
128 | 7cca8bf1 | Christos Stathis | } |
129 | 7cca8bf1 | Christos Stathis | |
130 | a57faaf0 | Christos Stathis | public void setSorted(boolean sorted) { |
131 | a57faaf0 | Christos Stathis | this.sorted = sorted;
|
132 | a57faaf0 | Christos Stathis | } |
133 | a57faaf0 | Christos Stathis | |
134 | a57faaf0 | Christos Stathis | public void toggleReverseSort() { |
135 | a57faaf0 | Christos Stathis | this.reverseSort = !this.reverseSort; |
136 | a57faaf0 | Christos Stathis | } |
137 | 7cca8bf1 | Christos Stathis | |
138 | 7cca8bf1 | Christos Stathis | public String getProperty() { |
139 | 7cca8bf1 | Christos Stathis | return property;
|
140 | 7cca8bf1 | Christos Stathis | } |
141 | a57faaf0 | Christos Stathis | } |