Subversion Repositories eFlore/Archives.cel-v1

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

/*
 * Copyright 2006 Google Inc.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */
package org.tela_botanica.client;

import java.util.Date;

import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.ChangeListener;
import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.KeyboardListener;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.UIObject;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;

/**
 * Composite permet de wrapper des Widget pour creer un nouveau Widget cf methode initWidget()
 */

public class EntryPanel extends Composite  implements ClickListener {
        
  private NameAssistant nameAssistant = null;
  private LocationAssistant locationAssistant = null;
  TextBox date = new TextBox();
  TextBox complementLocation = new TextBox();
  TextBox comment = new TextBox();
  Button dateSelector = new Button("...");
  boolean visible=false;
  Mediator mediator=null;

  final CalendarWidget calendar = new CalendarWidget();
  
  private PopupPanel choicesPopup = new PopupPanel(true);

  public EntryPanel(final Mediator med) {
         
          
   mediator=med;

   
   
   mediator.registerEntryPanel(this);
   
   mediator.registerDate(date);
   mediator.registerComment(comment);
   mediator.registerComplementLocation(complementLocation);
   
   
   
   VerticalPanel outer = new VerticalPanel();
   

        outer.add(new HTML("<b>Nouvelle observation:</b>"));

   
   
   Grid inner = new Grid(3,4);

   for (int i=0; i<3;i++) {
        inner.getCellFormatter().setWidth(i, 0, "3%");
        inner.getCellFormatter().setWidth(i, 1, "47%");
        inner.getCellFormatter().setWidth(i, 2, "3%");
        inner.getCellFormatter().setWidth(i, 3, "47%");
   }


        nameAssistant = new NameAssistant(mediator);
        locationAssistant = new LocationAssistant(mediator);
        

        // Saisie Nom
        
     HTML labelNameAssistant = new HTML("Esp&egrave;ce:&nbsp;");
     inner.setWidget(0,0,labelNameAssistant);
     inner.setWidget(0,1,nameAssistant);
    
     nameAssistant.setWidth("100%");

         // Saisie lieu
         
     HTML labelLocationAssistant= new HTML("Commune:&nbsp;");
     inner.setWidget(1,0,labelLocationAssistant);
     inner.setWidget(1,1,locationAssistant);

     locationAssistant.setWidth("100%");
   
     // Saisie Date 
         
     choicesPopup.add(calendar);
     
     dateSelector.addClickListener(new ClickListener () {
    
       public void onClick(Widget w) {
          
           if (visible) {
                  visible=false; 
                  choicesPopup.hide();
           }
           else {
                visible=true; 
            choicesPopup.show();
                choicesPopup.setPopupPosition(dateSelector.getAbsoluteLeft(),
                dateSelector.getAbsoluteTop()  + dateSelector.getOffsetHeight());
                choicesPopup.setWidth(dateSelector.getOffsetWidth() + "px");
           }
       }
     
     });
     
     calendar.addChangeListener(new ChangeListener() {

     public void onChange(Widget sender) {
         
       Date dateSelected=calendar.getDate();
       date.setText(dateSelected.getDate()+"/"+(dateSelected.getMonth()+1)+"/"+(dateSelected.getYear()+1900));
       
       visible=false; 
       choicesPopup.hide();
     }
     });
     
    HTML labelDate= new HTML("Date:&nbsp;");
    inner.setWidget(2,0,labelDate);
    
    HorizontalPanel datePanel = new HorizontalPanel();
    datePanel.add(date);
    datePanel.add(dateSelector);
    inner.setWidget(2,1,datePanel);
    

    
    
    date.addKeyboardListener( new KeyboardListener() {

                  public void onKeyDown(Widget arg0, char arg1, int arg2) {
                          
                          
                          if(arg1 == KEY_ENTER)
                            {
                             mediator.onAddInventoryItem(); 
                             date.setText("");
                            }

                  }
                  
                  public void onKeyUp(Widget arg0, char arg1, int arg2) {
                  }

                  public void onKeyPress(Widget arg0, char arg1, int arg2) {
                  }
                  
                  }
    );
    
  

         // Saisie Complement lieu 
         
    HTML labelComplementLocation= new HTML("Station:&nbsp;");
    inner.setWidget(1,2,labelComplementLocation);
    inner.setWidget(1,3,complementLocation);

    complementLocation.setWidth("100%");

    
    complementLocation.addKeyboardListener( new KeyboardListener() {

                  public void onKeyDown(Widget arg0, char arg1, int arg2) {
                          
                          
                          if(arg1 == KEY_ENTER)
                            {
                             mediator.onAddInventoryItem(); 
                             complementLocation.setText("");
                            }

                  }
                  
                  public void onKeyUp(Widget arg0, char arg1, int arg2) {
                  }

                  public void onKeyPress(Widget arg0, char arg1, int arg2) {
                  }
                  
                  }
    );

    
         // Saisie Commentaire
         
    HTML labelComment= new HTML("Notes:&nbsp;");
    inner.setWidget(2,2,labelComment);
    inner.setWidget(2,3,comment);

    comment.setWidth("100%");

   
    comment.addKeyboardListener( new KeyboardListener() {

                  public void onKeyDown(Widget arg0, char arg1, int arg2) {
                          
                          
                          if(arg1 == KEY_ENTER)
                            {
                             mediator.onAddInventoryItem(); 
                             comment.setText("");
                            }

                  }
                  
                  public void onKeyUp(Widget arg0, char arg1, int arg2) {
                  }

                  public void onKeyPress(Widget arg0, char arg1, int arg2) {
                  }
                  
                  }
  );

    
        

         inner.setWidth("100%");

         outer.add(inner);
         outer.setCellWidth(inner, "100%");
         


                Button close = new Button("Cacher");
                close.addClickListener(this);

                outer.setHorizontalAlignment(HorizontalPanel.ALIGN_CENTER);


                outer.add(close);

         
    initWidget(outer);
   
   setPixelSize(1000,200);

    
  }
  
        public void onClick(Widget sender) {
                hide();
        }
  
  
        public void show() {
                
            DOM.setStyleAttribute(getElement(), "backgroundColor", "white");
            this.setOpacity(this,85);
                RootPanel.get().remove(this);
                RootPanel.get().add(this,200,200);
        }
        
        public void hide() {
            this.setOpacity(RootPanel.get(),100);
                RootPanel.get().remove(this);
        }

        
        private void setOpacity(UIObject e, int percentage) {
                if ( percentage > 100 ) percentage = 100;
                if ( percentage < 0 ) percentage = 0;
                
                String opac;
                if ( percentage == 100 ) opac = "1";
                else if ( percentage == 0 ) opac = "0";
                else if ( percentage < 10 ) opac = ".0" + percentage;
                else opac = "." + percentage;
                
                Element h = e.getElement();
                DOM.setStyleAttribute(h, "filter", "alpha(opacity=" + percentage + ")");
                DOM.setStyleAttribute(h, "opacity", opac);
        }
        
}