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    }