001 package org.kuali.student.common.ui.client.widgets.headers;
002
003 import java.util.ArrayList;
004 import java.util.List;
005
006 import org.kuali.student.common.ui.client.configurable.mvc.LayoutController;
007 import org.kuali.student.common.ui.client.mvc.Callback;
008 import org.kuali.student.common.ui.client.mvc.Controller;
009 import org.kuali.student.common.ui.client.util.ExportUtils;
010 import org.kuali.student.common.ui.client.util.PrintUtils;
011 import org.kuali.student.common.ui.client.widgets.ApplicationPanel;
012 import org.kuali.student.common.ui.client.widgets.dialog.ReportExportDialog;
013 import org.kuali.student.common.ui.client.widgets.field.layout.element.SpanPanel;
014
015 import com.google.gwt.core.client.GWT;
016 import com.google.gwt.event.dom.client.ClickEvent;
017 import com.google.gwt.event.dom.client.ClickHandler;
018 import com.google.gwt.event.dom.client.MouseOutEvent;
019 import com.google.gwt.event.dom.client.MouseOutHandler;
020 import com.google.gwt.event.dom.client.MouseOverEvent;
021 import com.google.gwt.event.dom.client.MouseOverHandler;
022 import com.google.gwt.uibinder.client.UiBinder;
023 import com.google.gwt.uibinder.client.UiField;
024 import com.google.gwt.user.client.ui.Composite;
025 import com.google.gwt.user.client.ui.HTML;
026 import com.google.gwt.user.client.ui.HTMLPanel;
027 import com.google.gwt.user.client.ui.Image;
028 import com.google.gwt.user.client.ui.PopupPanel;
029 import com.google.gwt.user.client.ui.Widget;
030
031 @Deprecated
032 public class KSDocumentHeader extends Composite {
033
034 protected static KSDocumentHeaderUiBinder uiBinder = GWT.create(KSDocumentHeaderUiBinder.class);
035
036 protected ReportExportDialog exportDialog = null;
037
038 protected PopupPanel hoverPopup = new PopupPanel();
039
040 protected PopupPanel hoverPopup1 = new PopupPanel();
041
042 interface KSDocumentHeaderUiBinder extends UiBinder<Widget, KSDocumentHeader> {}
043
044 @UiField
045 protected HTML headerHTML;
046
047 @UiField
048 protected HTML infoLabel;
049
050 @UiField
051 protected SpanPanel widgetPanel;
052
053 @UiField
054 protected Image printImage;
055
056 @UiField
057 protected Image exportImage;
058
059 protected Widget printContent = null; // Widget to be printed.
060
061 protected boolean hasSeparator = true;
062
063 List<String> exportTypes = new ArrayList<String>();
064
065 public KSDocumentHeader() {
066 initWidget(uiBinder.createAndBindUi(this));
067 setupPrint();
068 setupExportPrint();
069 }
070
071 public KSDocumentHeader(boolean hasContentWidgetSeparator) {
072 this.hasSeparator = hasContentWidgetSeparator;
073 initWidget(uiBinder.createAndBindUi(this));
074 setupPrint();
075 setupExportPrint();
076 }
077
078 public KSDocumentHeader(List<String> fileTypes) {
079 initWidget(uiBinder.createAndBindUi(this));
080 setExportTypes(fileTypes);
081 setupPrint();
082 setupExportPrint();
083 }
084
085 public void setExportTypes(List<String> fileTypes) {
086 exportTypes=fileTypes;
087 }
088
089 /**
090 * returns the widget that will be printed
091 *
092 * @return
093 */
094 public Widget getPrintContent(){
095 return this.printContent;
096 }
097
098
099 /**
100 * Takes a widget to be printed. This is useful when you want to
101 * print only a certain section of a page
102 *
103 * @param pContent
104 */
105 public void setPrintContent(Widget pContent){
106 this.printContent = pContent;
107 }
108
109 protected void setupPrint() {
110
111 // Default to the old way of printing the entire page
112 if(this.printContent == null){
113 this.setPrintContent(ApplicationPanel.get().getWidget(0));
114 }
115 hoverPopup.add(new HTMLPanel("Print Page"));
116 hoverPopup.setStyleName("ks-help-popup");
117
118 printImage.addMouseOverHandler(new MouseOverHandler(){
119 @Override
120 public void onMouseOver(MouseOverEvent event) {
121 hoverPopup.setPopupPosition(printImage.getAbsoluteLeft()-10 ,
122 printImage.getAbsoluteTop()-exportImage.getOffsetWidth()-15);
123 hoverPopup.show();
124 }
125 });
126 printImage.addMouseOutHandler(new MouseOutHandler(){
127
128 @Override
129 public void onMouseOut(MouseOutEvent event) {
130 hoverPopup.hide();
131 }
132 });
133 printImage.setVisible(false);
134 printImage.addClickHandler(new ClickHandler() {
135
136 @Override
137 public void onClick(ClickEvent event) {
138 PrintUtils.print(getPrintContent());
139 }
140 });
141 }
142
143 protected void setupExportPrint() {
144 if(exportTypes==null||exportTypes.isEmpty()){
145 exportDialog = new ReportExportDialog();
146 }
147 else{
148 exportDialog = new ReportExportDialog(exportTypes);
149 }
150 exportImage.setVisible(false);
151 hoverPopup1.add(new HTMLPanel("Export Summary to File"));
152 hoverPopup1.setStyleName("ks-help-popup");
153 exportImage.addMouseOverHandler(new MouseOverHandler(){
154 @Override
155 public void onMouseOver(MouseOverEvent event) {
156 hoverPopup1.setPopupPosition(exportImage.getAbsoluteLeft()-55,
157 exportImage.getAbsoluteTop()-exportImage.getOffsetWidth()-15);
158 hoverPopup1.show();
159 }
160 });
161 exportImage.addMouseOutHandler(new MouseOutHandler(){
162
163 @Override
164 public void onMouseOut(MouseOutEvent event) {
165 hoverPopup1.hide();
166 }
167 });
168
169 exportImage.addClickHandler(new ClickHandler() {
170
171 @Override
172 public void onClick(ClickEvent event) {
173 if (exportDialog != null) {
174 //for firefox the roll over message was not being hidden when
175 //export was clicked
176 hoverPopup1.hide();
177 exportDialog.show();
178 }
179
180 }
181 });
182
183 exportDialog.addSelectCompleteCallback(new Callback<String>() {
184 @Override
185 public void exec(String format) {
186 Controller currController = ExportUtils.getController(KSDocumentHeader.this);
187 String title = null;
188 if (currController instanceof LayoutController) {
189 title = ((LayoutController) currController).getName();
190 }
191 ExportUtils.handleExportClickEvent(currController, format, title);
192 }
193 });
194 }
195
196 public void setTitle(String header) {
197 headerHTML.setHTML("<h2>" + header + "</h2>");
198 }
199
200 public void addWidget(Widget w) {
201 if (w != null) {
202 if (hasSeparator) {
203 if (widgetPanel.getElement().hasChildNodes()) {
204 HTML separatorWrapper = new HTML("<span style='float: left; margin-left: .7em; margin-right: .7em'>|</span>");
205 separatorWrapper.addStyleName("ks-documentHeader-widgetPanel");
206 widgetPanel.add(separatorWrapper);
207 }
208 }
209 w.addStyleName("ks-documentHeader-widgetPanel");
210 widgetPanel.add(w);
211 }
212 }
213
214 public HTML getInfoLabel() {
215 return infoLabel;
216 }
217
218 public void showPrint(boolean show) {
219 printImage.setVisible(true);
220 }
221
222 /**
223 * This method set the visibility of the export button to the value of the parameter
224 *
225 * @param show
226 */
227 public void showExport(boolean show) {
228 exportImage.setVisible(show);
229
230 }
231
232 public Image getExportImage() {
233 return exportImage;
234 }
235 }