Package org.projectforge.plugins.skillmatrix

Source Code of org.projectforge.plugins.skillmatrix.SkillTreeForm$MyCheckBoxButton

/////////////////////////////////////////////////////////////////////////////
//
// Project ProjectForge Community Edition
//         www.projectforge.org
//
// Copyright (C) 2001-2014 Kai Reinhard (k.reinhard@micromata.de)
//
// ProjectForge is dual-licensed.
//
// This community edition is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License as published
// by the Free Software Foundation; version 3 of the License.
//
// This community edition is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
// Public License for more details.
//
// You should have received a copy of the GNU General Public License along
// with this program; if not, see http://www.gnu.org/licenses/.
//
/////////////////////////////////////////////////////////////////////////////

package org.projectforge.plugins.skillmatrix;

import org.apache.wicket.Component;
import org.apache.wicket.markup.html.form.Button;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;
import org.projectforge.web.wicket.AbstractForm;
import org.projectforge.web.wicket.WicketUtils;
import org.projectforge.web.wicket.bootstrap.GridBuilder;
import org.projectforge.web.wicket.bootstrap.GridSize;
import org.projectforge.web.wicket.components.SingleButtonPanel;
import org.projectforge.web.wicket.flowlayout.CheckBoxButton;
import org.projectforge.web.wicket.flowlayout.DivPanel;
import org.projectforge.web.wicket.flowlayout.FieldsetPanel;
import org.projectforge.web.wicket.flowlayout.InputPanel;
import org.projectforge.web.wicket.flowlayout.MyComponentsRepeater;

/**
* @author Billy Duong (b.duong@micromata.de)
*
*/
public class SkillTreeForm extends AbstractForm<SkillFilter, SkillTreePage>
{

  private static final long serialVersionUID = 1227686732149287124L;

  private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(SkillTreeForm.class);

  private MyComponentsRepeater<Component> actionButtons;

  protected GridBuilder gridBuilder;

  private SkillFilter searchFilter;

  private SingleButtonPanel cancelButtonPanel;

  private SingleButtonPanel searchButtonPanel;

  private SingleButtonPanel resetButtonPanel;

  /**
   * @param parentPage
   */
  public SkillTreeForm(final SkillTreePage parentPage)
  {
    super(parentPage);
  }

  /**
   * @see org.projectforge.web.wicket.AbstractForm#init()
   */
  @Override
  protected void init()
  {
    super.init();

    gridBuilder = newGridBuilder(this, "flowform");
    {
      gridBuilder.newSplitPanel(GridSize.COL50);
      final FieldsetPanel fs = gridBuilder.newFieldset(getString("searchFilter"));
      final TextField<String> searchField = new TextField<String>(InputPanel.WICKET_ID, new PropertyModel<String>(getSearchFilter(),
          "searchString"));
      searchField.add(WicketUtils.setFocus());
      fs.add(new InputPanel(fs.newChildId(), searchField));
      // fs.add(new IconPanel(fs.newIconChildId(), IconType.HELP, getString("tooltip.lucene.link")).setOnClickLocation(getRequestCycle(),
      // WebConstants.DOC_LINK_HANDBUCH_LUCENE, true), FieldSetIconPosition.TOP_RIGHT);
    }
    {
      gridBuilder.newSplitPanel(GridSize.COL50);
      final FieldsetPanel fs = gridBuilder.newFieldset(getString("label.options")).suppressLabelForWarning();
      final DivPanel checkBoxPanel = fs.addNewCheckBoxButtonDiv();
      checkBoxPanel.add(new MyCheckBoxButton(checkBoxPanel.newChildId(), new PropertyModel<Boolean>(getSearchFilter(), "deleted"),
          getString("deleted")).setWarning());
    }

    actionButtons = new MyComponentsRepeater<Component>("actionButtons");

    add(actionButtons.getRepeatingView());
    {
      @SuppressWarnings("serial")
      final Button cancelButton = new Button("button", new Model<String>("cancel")) {
        @Override
        public final void onSubmit()
        {
          getParentPage().onCancelSubmit();
        }
      };
      cancelButton.setDefaultFormProcessing(false);
      cancelButtonPanel = new SingleButtonPanel(actionButtons.newChildId(), cancelButton, getString("cancel"),
          SingleButtonPanel.CANCEL);
      actionButtons.add(cancelButtonPanel);
    }
    {
      @SuppressWarnings("serial")
      final Button resetButton = new Button("button", new Model<String>("reset")) {

        @Override
        public final void onSubmit()
        {
          getParentPage().onResetSubmit();
        }
      };
      resetButton.setDefaultFormProcessing(false);
      resetButtonPanel = new SingleButtonPanel(actionButtons.newChildId(), resetButton, getString("reset"),
          SingleButtonPanel.RESET);
      actionButtons.add(resetButtonPanel);
    }
    {
      @SuppressWarnings("serial")
      final Button skillListButton = new Button(SingleButtonPanel.WICKET_ID, new Model<String>("listView")) {

        @Override
        public void onSubmit()
        {
          getParentPage().onListViewSubmit();
        }
      };
      final SingleButtonPanel skillListButtonPanel = new SingleButtonPanel(actionButtons.newChildId(), skillListButton, "List View",
          SingleButtonPanel.NORMAL);
      actionButtons.add(skillListButtonPanel);
    }
    {
      @SuppressWarnings("serial")
      final Button searchButton = new Button("button", new Model<String>("search")) {

        @Override
        public final void onSubmit()
        {
          getParentPage().onSearchSubmit();
        }
      };
      searchButtonPanel = new SingleButtonPanel(actionButtons.newChildId(), searchButton, getString("search"),
          SingleButtonPanel.DEFAULT_SUBMIT);
      actionButtons.add(searchButtonPanel);
      setDefaultButton(searchButton);
    }

    setComponentsVisibility();
  }

  protected void setComponentsVisibility()
  {
    if (parentPage.isSelectMode() == false) {
      // Show cancel button only in select mode.
      cancelButtonPanel.setVisible(false);
    }
    searchButtonPanel.setVisible(true);
    resetButtonPanel.setVisible(true);
  }

  public SkillFilter getSearchFilter()
  {
    if (this.searchFilter == null) {
      final Object filter = getParentPage().getUserPrefEntry(SkillListForm.class.getName() + ":Filter");
      if (filter != null) {
        try {
          this.searchFilter = (SkillFilter) filter;
        } catch (final ClassCastException ex) {
          // Probably a new software release results in an incompability of old and new filter format.
          log.info("Could not restore filter from user prefs: (old) filter type "
              + filter.getClass().getName()
              + " is not assignable to (new) filter type SkillFilter (OK, probably new software release).");
        }
      }
    }
    if (this.searchFilter == null) {
      this.searchFilter = new SkillFilter();
      getParentPage().putUserPrefEntry(SkillListForm.class.getName() + ":Filter", this.searchFilter, true);
    }
    return this.searchFilter;
  }

  @Override
  protected void onSubmit()
  {
    super.onSubmit();
    parentPage.refresh();
  }

  @Override
  public void onBeforeRender()
  {
    super.onBeforeRender();
    actionButtons.render();
  }

  @SuppressWarnings("serial")
  private class MyCheckBoxButton extends CheckBoxButton
  {
    public MyCheckBoxButton(final String id, final IModel<Boolean> model, final String labelString)
    {
      super(id, model, labelString);
    }

    @Override
    protected boolean wantOnSelectionChangedNotifications()
    {
      return true;
    }

    @Override
    protected void onSelectionChanged(final Boolean newSelection)
    {
      parentPage.refresh();
    }
  }

}
TOP

Related Classes of org.projectforge.plugins.skillmatrix.SkillTreeForm$MyCheckBoxButton

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.