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 }