Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 2nd, 2012  |  syntax: Java  |  size: 31.29 KB  |  hits: 30  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. package ru.omnicomm.pegasus.gadgets.movementsummaryreportgadget.client.ui.optionspanel;
  2.  
  3. import com.allen_sauer.gwt.log.client.Log;
  4. import com.extjs.gxt.ui.client.event.DNDEvent;
  5.  
  6. import com.google.gwt.event.dom.client.ClickEvent;
  7.  
  8. import com.extjs.gxt.ui.client.data.BaseModel;
  9. import com.extjs.gxt.ui.client.dnd.ListViewDragSource;
  10. import com.extjs.gxt.ui.client.dnd.ListViewDropTarget;
  11. import com.extjs.gxt.ui.client.store.ListStore;
  12. import com.extjs.gxt.ui.client.dnd.DND.Feedback;
  13. import com.extjs.gxt.ui.client.widget.LayoutContainer;
  14.  
  15. import com.google.gwt.core.client.GWT;
  16. import com.google.gwt.event.dom.client.ClickHandler;
  17. import com.google.gwt.user.client.ui.Button;
  18. import com.google.gwt.user.client.ui.FlowPanel;
  19. import com.google.gwt.user.client.ui.Label;
  20. import com.google.gwt.user.client.ui.VerticalPanel;
  21. import com.google.gwt.dom.client.InputElement;
  22. import com.google.gwt.dom.client.NodeList;
  23.  
  24.  
  25. import java.util.LinkedList;
  26. import java.util.Map;
  27. import java.util.TreeMap;
  28. import java.util.ArrayList;
  29. import java.util.List;
  30.  
  31.  
  32. import ru.omnicomm.pegasus.gadgets.ui.optionsPanel.client.OptionsPanel;
  33. import ru.omnicomm.pegasus.gadgets.movementsummaryreportgadget.client.constants.Constants;
  34. import ru.omnicomm.pegasus.gadgets.movementsummaryreportgadget.client.ServiceLocator;
  35. import ru.omnicomm.pegasus.gadgets.movementsummaryreportgadget.client.ui.reporttable.ReportTable;
  36. import ru.omnicomm.pegasus.gadgets.movementsummaryreportgadget.client.entity.response.SettingsParams;
  37.  
  38. import com.extjs.gxt.ui.client.core.XTemplate;
  39. import com.extjs.gxt.ui.client.data.ModelData;
  40. import com.extjs.gxt.ui.client.event.Events;
  41. import com.extjs.gxt.ui.client.event.ListViewEvent;
  42. import com.extjs.gxt.ui.client.event.Listener;
  43. import com.extjs.gxt.ui.client.widget.ListView;
  44.  
  45. import com.google.gwt.user.client.Element;
  46. import com.google.gwt.user.client.Window;
  47. import ru.omnicomm.pegasus.gadgets.movementsummaryreportgadget.client.ui.TimePanelWrapper;
  48.  
  49. /**
  50.  * Панель настроек колонок таблицы. Встраивается в {@link OptionsPanel}.
  51.  *
  52.  * @author Pomitova Ekaterina <ekaterina.pomitova@vistar.su>
  53.  */
  54. public final class SettingsPanel extends LayoutContainer {
  55.  
  56.     private final Constants constants = (Constants) GWT.create(Constants.class);
  57.     /** Настройки: колонки таблицы. */
  58.     private TableColumnOptions tcOptions;
  59.     /** Панель с настройками. */
  60.     private OptionsPanel optionsPanel = null;
  61.     /** Флаг, показывающий применены ли стили к ListBox. */
  62.     private boolean applyStyleToList = false;
  63.     /***/
  64.     private SettingsParams settingsParams;
  65.     //
  66.     private final static String CSS_CLASS_LABEL = "omni-settings-label";
  67.     private final static String CSS_CLASS_BOX = "omni-settings-box";
  68.     private final static String CSS_CLASS_COLUMN_BOX = "omni-settings-column-list-box";
  69.     /** Карта соответствий назаний заголовка колонок таблицы со списком колонок в настроках. */
  70.     public final Map<String, String> columnsName = new TreeMap<String, String>() {
  71.  
  72.         {
  73.             put(constants.numRow(), constants.settingsNumber());
  74.             put(constants.garageNumber(), constants.settingsGarageNumber());
  75.             put(constants.stateNumber(), constants.settingsStateNumber());
  76.             put(constants.driver(), constants.settingsDriver());
  77.             put(constants.run(), constants.settingsRun());
  78.             put(constants.averageSpeed(), constants.settingsAverageSpeed());
  79.             put(constants.maximumSpeed(), constants.settingsMaximumSpeed());
  80.             put(constants.movementTime(), constants.settingsMovementTime());
  81.             put(constants.downTime(), constants.settingsDownTime());
  82.             put(constants.absenceDate(), constants.settingsAbsenceDate());
  83.         }
  84.     };
  85.  
  86.     public SettingsPanel() {
  87.         super();
  88.        
  89. //        registrJSNI();
  90.  
  91.         tcOptions = new TableColumnOptions();
  92.         optionsPanel = new OptionsPanel(ServiceLocator.getResources(), constants.settingsPanel(), tcOptions);
  93.  
  94.         // кнопка "Сохранить"
  95.         Button btnSave = optionsPanel.getSaveButton();
  96.         btnSave.addClickHandler(new ClickHandler() {
  97.  
  98.             @Override
  99.             public void onClick(ClickEvent event) {
  100.                 settingsParams = getSettingsParams();
  101.  
  102.                 // прменение настроек к гаджету
  103.                 applySettings(settingsParams);
  104.  
  105.                 // отправка запроса с настройками
  106.                 SettingsParamsHandler.sendSettingsParams(settingsParams);
  107.  
  108.                 // скрытие паенели
  109.                 optionsPanel.hideSettingsPanel();
  110.             }
  111.         });
  112.  
  113.         btnSave.setText(constants.save());
  114.  
  115.         // кнопака "Отмена" (в настройках)
  116.         Button btnCancel = optionsPanel.getCancelButton();
  117.         btnCancel.addClickHandler(new ClickHandler() {
  118.  
  119.             @Override
  120.             public void onClick(ClickEvent event) {
  121.  
  122.                 tcOptions.checked(ServiceLocator.getReportTable().getVisibleColumns(), tcOptions.getColumnModels());
  123.                 optionsPanel.hideSettingsPanel();
  124.  
  125.                 applySettings(settingsParams);
  126.             }
  127.         });
  128.         btnCancel.setText(constants.cansel());
  129.  
  130.         installRepaint(this);
  131.         setOptionsPanelLocale();
  132.     }
  133.  
  134.     public OptionsPanel getOptionsPanel() {
  135.         return optionsPanel;
  136.     }
  137.  
  138.     private SettingsParams getSettingsParams() {
  139.         // видимые колонки таблицы
  140.         List<String> visibleColumnsId = new ArrayList<String>();
  141.         for (ModelData elem : tcOptions.columnView.getStore().getModels()) {
  142.             if (tcOptions.columnView.getChecked().contains(elem)) {
  143.                 visibleColumnsId.add((String) elem.get("columnId"));
  144.             }
  145.         }
  146.  
  147.         // отображаение панели с фильтрами
  148.         boolean criteriaShow = (optionsPanel.isShowFilterPanel());
  149.  
  150.         // формат файла для конвертации
  151.         String fileFormat = optionsPanel.getFormat();
  152.  
  153.         // e-mail
  154.         String email = optionsPanel.getEmail();
  155.  
  156.         // период по умолчанию
  157.         int period = optionsPanel.getPeriod();
  158.  
  159.         // единица времени
  160.         int periodUnitIndx = optionsPanel.getPeriodTypeUnitIndx();
  161.  
  162.         // значение единицы времени
  163.         int periodUnitValue = optionsPanel.getPeriodValueUnitIndx();
  164.  
  165.         // настройки
  166.         SettingsParams curSettingsParams = new SettingsParams(criteriaShow,
  167.                 fileFormat, email, visibleColumnsId, period, periodUnitIndx,
  168.                 periodUnitValue);
  169.  
  170.         return curSettingsParams;
  171.     }
  172.  
  173.     /**
  174.      * Применет настройки к гаджету.
  175.      *
  176.      * @param settingsParams Параметры настроек {@link SettingsParams}.
  177.      */
  178.     public void applySettings(SettingsParams settingsParams) {
  179.         this.settingsParams = settingsParams;
  180.  
  181.         Log.debug(settingsParams.toString());
  182.  
  183.         List<String> allColumns = new ArrayList<String>();
  184.         List<String> visibleColumns = new ArrayList<String>();
  185.         // список всех колонок
  186.         List<ColumnModelData> listModel = tcOptions.getColumnModels();
  187.         // Если нет данных для колонок, то устанавливаем значение по умолчанию (указываем все колонки)
  188.         if (settingsParams.getVisibleColumns().isEmpty()) {
  189.             for (ModelData elem : listModel) {
  190.                 String column = (String) elem.get("columnId");
  191.                 visibleColumns.add(column);
  192.             }
  193.             allColumns = visibleColumns;
  194.         } else {
  195.             // колонки, которые не должны отображаться
  196.             List<String> invisibleColumns = new ArrayList<String>();
  197.             for (ModelData elem : listModel) {
  198.                 if (elem instanceof ColumnModelData) {
  199.                     String column = (String) elem.get("columnId");
  200.                     if (!settingsParams.getVisibleColumns().contains(column)) {
  201.                         invisibleColumns.add(column);
  202.                     }
  203.                 }
  204.             }
  205.             visibleColumns = settingsParams.getVisibleColumns();
  206.             // формирование колонок таблицы в требуемом порядке
  207.             for (String column : visibleColumns) {
  208.                 allColumns.add(column);
  209.             }
  210.             for (String column : invisibleColumns) {
  211.                 allColumns.add(column);
  212.             }
  213.         }
  214.  
  215.         // применение настроек к панели настроек
  216.         applySettingsByOptionsPanel(settingsParams, allColumns, visibleColumns);
  217.  
  218.         // применине настроек к гаджету
  219.         applySettingsByGadget(settingsParams, allColumns, visibleColumns);
  220.     }
  221.  
  222.     /**
  223.      * Применине настроек к гаджету.
  224.      *
  225.      * @param settingsParams Параметры настроек {@link SettingsParams}.
  226.      * @param allColumns Список всех колонки таблицы.
  227.      * @param visibleColumns Список только отображаемых колонок таблицы.
  228.      */
  229.     private void applySettingsByGadget(SettingsParams settingsParams,
  230.             List<String> allColumns, List<String> visibleColumns) {
  231.  
  232.         Log.debug("applySettingsByGadget :: settingsParams : " + settingsParams + " allColumns.size() : " + allColumns.size() + " visibleColumns.size() : " + visibleColumns.size());
  233.  
  234.         // применение настроек колонок таблицы
  235.         ServiceLocator.getReportTable().setVisibleColumns(visibleColumns);
  236.         ServiceLocator.getReportTable().setColumnOrder(allColumns);
  237.  
  238.         // отображеать/не отображать фильтры
  239.         Boolean criteriaShow = settingsParams.getIsVisibleFilter();
  240.         if (criteriaShow != null && criteriaShow) {
  241.             ServiceLocator.getSelectionFilter().filtersShow();
  242.         } else {
  243.             ServiceLocator.getSelectionFilter().filtersHide();
  244.         }
  245.  
  246.         // период времени
  247.         long startDateOffset = new Double(TimePanelWrapper.getOffsetSecondOf_2011_01_01_ByTimestamp(
  248.                 optionsPanel.getStartDate().getTime())).longValue();
  249.         long finishDateOffset = new Double(TimePanelWrapper.getOffsetSecondOf_2011_01_01_ByTimestamp(
  250.                 optionsPanel.getFinishDate().getTime())).longValue();
  251.  
  252.         Log.debug("settings priod :: startDateOffset : " + startDateOffset + " --- finishDateOffset : " + finishDateOffset);
  253.  
  254.         ServiceLocator.getDateTimePanel().updateTime(startDateOffset, finishDateOffset);
  255.     }
  256.  
  257.     /**
  258.      * применение настроек к панели настроек.
  259.      *
  260.      * @param settingsParams Параметры настроек {@link SettingsParams}.
  261.      * @param allColumns Список всех колонки таблицы.
  262.      * @param visibleColumns Список только отображаемых колонок таблицы.
  263.      */
  264.     private void applySettingsByOptionsPanel(SettingsParams settingsParams,
  265.             List<String> allColumns, List<String> visibleColumns) {
  266.  
  267.         Log.debug("applySettingsByOptionsPanel :: settingsParams : " + settingsParams + " allColumns.size() : " + allColumns.size() + " visibleColumns.size() : " + visibleColumns.size());
  268.  
  269.         optionsPanel.setPeriod(settingsParams.getDefaulPeriod(), settingsParams.getDefaultPeriodUnit(),
  270.                 settingsParams.getDefaultPeriodUnitValue());
  271.         optionsPanel.setShowFilterPanel(settingsParams.getIsVisibleFilter());
  272.         optionsPanel.setEmail(settingsParams.getEmail());
  273.         optionsPanel.setFileFormat(settingsParams.getFileFormat());
  274.         optionsPanel.hideSettingsPanel();
  275.  
  276.         tcOptions.columnView.getStore().removeAll();
  277.  
  278.         List<ColumnModelData> listModel = tcOptions.getOrderColumns(allColumns);
  279.         tcOptions.columnView.getStore().add(listModel);
  280.         tcOptions.checked(visibleColumns, listModel);
  281.     }
  282.  
  283.     /** Устновка и применение настроек по умолчанию. */
  284.     public void applyDefaultSettingsParams() {
  285.         // TODO: e-mail  и format задавать как index в combobox
  286.         SettingsParams defaultSettings = new SettingsParams(
  287.                 true, "", "", getDefaultVisibleColumn(), OptionsPanel.DEFAULT_PERIOD_WEEK, 0, 0);
  288.  
  289.         setSettingsParams(defaultSettings);
  290.         applySettings(defaultSettings);
  291.     }
  292.  
  293.     /** Получает список видимых колонок таблицы. */
  294.     private List<String> getDefaultVisibleColumn() {
  295.         List<String> visibleColumns = new ArrayList<String>();
  296.         // список всех колонок
  297.         List<ColumnModelData> listModel = tcOptions.getColumnModels();
  298.         for (ColumnModelData model : listModel) {
  299.             String item = model.getColumnId();
  300.             if (!model.getColumnId().equals(ReportTable.ID_STATE_NUMBER)) {
  301.                 visibleColumns.add(item);
  302.             }
  303.         }
  304.  
  305.         return visibleColumns;
  306.     }
  307.  
  308.     public void setSettingsParams(SettingsParams settingsParams) {
  309.         this.settingsParams = settingsParams;
  310.     }
  311.  
  312.     private void setOptionsPanelLocale() {
  313.         optionsPanel.setPanelHeadCaption(constants.settingsPanel());
  314.         optionsPanel.setLblPeriodText(constants.defaultPeriod());
  315.         optionsPanel.setRBtnDayText(constants.currDay());
  316.         optionsPanel.setRBtnWeekText(constants.currWeek());
  317.         optionsPanel.setRBtnMonthText(constants.currMonth());
  318.         optionsPanel.setRBtnSomePeriodText(constants.forLast());
  319.  
  320.         Map<Integer, String> mapUnitText = new TreeMap<Integer, String>();
  321.         mapUnitText.put(OptionsPanel.PERIOD_UNIT_HOUR_ID, constants.forHours());
  322.         mapUnitText.put(OptionsPanel.PERIOD_UNIT_DAY_ID, constants.forDays());
  323.         mapUnitText.put(OptionsPanel.PERIOD_UNIT_WEEK_ID, constants.forWeeks());
  324.         mapUnitText.put(OptionsPanel.PERIOD_UNIT_MONTH_ID, constants.forMonth());
  325.         mapUnitText.put(OptionsPanel.PERIOD_UNIT_YEAR_ID, constants.forYears());
  326.         optionsPanel.setLBoxPeriodUnitText(mapUnitText);
  327.  
  328.         optionsPanel.setLblFilterText(constants.filterCriteria());
  329.         optionsPanel.setChBoxFilterText(constants.show());
  330.         optionsPanel.setLblFormatText(constants.saveFormat());
  331.  
  332.         optionsPanel.setLblEmailText(constants.defaultReceiver());
  333.  
  334.     }
  335.  
  336. //    @Override
  337. //    protected void onAttach() {
  338. //        super.onAttach();
  339. //
  340. //        // применение стилей к ListBox
  341. //        if (!applyStyleToList) {
  342. //            applyJSLists();
  343. //            applyStyleToList = true;
  344. //        }
  345. //
  346. //        // применение стилей к CheckBox
  347. //        applyCheckBoxStyle();
  348. //        applyJSCheckBoxes();
  349. //        tcOptions.setStyleChkeckBoxListViewSpan();
  350. //    }
  351.     // TODO: указывать ли порядок невидимых колонок ?
  352.     /** Класс с настройками столбцов таблицы. */
  353.     private final class TableColumnOptions extends VerticalPanel {
  354.  
  355.         private final Constants constants = (Constants) GWT.create(Constants.class);
  356.         /** Элемаенты, содержащий список столбцов таблицы. */
  357.         private StyleCheckBoxListView<ModelData> columnView;
  358.         private ListStore<ModelData> columnStore = new ListStore<ModelData>();
  359.         /** Список моделей колонок таблицы. */
  360.         private List<ColumnModelData> columnModels = new LinkedList<ColumnModelData>();
  361.  
  362.         public TableColumnOptions() {
  363.             super();
  364.  
  365.             //Колонки    
  366.             Label columnTxt = new Label(constants.tableColumns());
  367.             columnTxt.setStylePrimaryName(CSS_CLASS_LABEL);
  368.             add(columnTxt);
  369.  
  370.             columnModels = getListModels();
  371.             columnStore.add(getColumnModels());
  372.  
  373.             columnView = new StyleCheckBoxListView<ModelData>() {
  374.  
  375.                 @Override
  376.                 protected void onClick(ListViewEvent<ModelData> e) {
  377.                     super.onClick(e);
  378.                     boolean isCheck = this.applyDivStyle(e.getElement().getId());
  379.                     setChecked(e.getModel(), isCheck);
  380.                 }
  381.             };
  382.  
  383.             columnView.addListener(Events.OnChange, new Listener<ListViewEvent<ModelData>>() {
  384.  
  385.                 @Override
  386.                 public void handleEvent(ListViewEvent<ModelData> be) {
  387.                     setStyleChkeckBoxListViewSpan();
  388.                 }
  389.             });
  390.  
  391.             columnView.setStore(columnStore);
  392.             columnView.setDisplayProperty("columnName");
  393.             columnView.setWidth("100%");
  394.             columnView.setSelectOnOver(true);
  395.             columnView.setId("ColumnSettingsListView");
  396.             columnView.setBorders(false);
  397.  
  398.             FlowPanel columnsBox = new FlowPanel();
  399.             columnsBox.setStylePrimaryName(CSS_CLASS_COLUMN_BOX);
  400.             columnsBox.getElement().setId("ColumnListBox");
  401.             columnsBox.add(columnView);
  402.  
  403.             // TODO: при dnd слетают чекбоксы
  404.             new ListViewDragSource(columnView) {
  405.  
  406.                 @Override
  407.                 protected void onDragDrop(DNDEvent e) {
  408.                     super.onDragDrop(e);
  409.                     applyCheckBoxStyle();
  410.                 }
  411.             };
  412.  
  413.             ListViewDropTarget target = new ListViewDropTarget(columnView) {
  414.  
  415.                 @Override
  416.                 protected void onDragDrop(DNDEvent e) {
  417.                     super.onDragDrop(e);
  418.                     applyCheckBoxStyle();
  419.                 }
  420.             };
  421.  
  422.             target.setAllowSelfAsSource(true);
  423.             target.setFeedback(Feedback.INSERT);
  424.  
  425.             setStylePrimaryName(CSS_CLASS_BOX);
  426.             setStyleChkeckBoxListViewSpan();
  427.  
  428.             add(columnsBox);
  429.         }
  430.  
  431.         private void setStyleChkeckBoxListViewSpan() {
  432.             List<ModelData> checkedModels = columnView.getChecked();
  433.  
  434.             ListStore<ModelData> store = columnView.getStore();
  435.  
  436.             for (int i = 0; i < store.getCount(); i++) {
  437.                 ModelData model = store.getAt(i);
  438.                 if (model instanceof ColumnModelData) {
  439.  
  440.                     String columnId = ((ColumnModelData) model).getColumnId();
  441.  
  442.                     if (checkedModels.contains(model)) {
  443.                         applySpanStyle(columnId, "#333333");
  444.                     } else {
  445.                         applySpanStyle(columnId, "#999999");
  446.                     }
  447.                 }
  448.             }
  449.         }
  450.  
  451.         @Override
  452.         protected void onAttach() {
  453.             super.onAttach();
  454.  
  455.             // применение стилей к ListBox
  456.             if (!applyStyleToList) {
  457.                 applyJSLists();
  458.                 applyStyleToList = true;
  459.             }
  460.  
  461.             // применение стилей к CheckBox
  462.             applyCheckBoxStyle();
  463.             applyJSCheckBoxes();
  464.             setStyleChkeckBoxListViewSpan();
  465.  
  466.             applyJSCRadioButton();
  467.  
  468.             repaintColumnOptions();
  469.            
  470.             registrJSNI();
  471.         }
  472.  
  473.         public List<ColumnModelData> getColumnModels() {
  474.             return columnModels;
  475.         }
  476.  
  477.         public ListStore<ModelData> getColumnStore() {
  478.             return columnStore;
  479.         }
  480.  
  481.         public void setColumnStore(ListStore<ModelData> columnStore) {
  482.             this.columnStore = columnStore;
  483.         }
  484.  
  485.         /** Возвращает заполненный список названий колонок таблицы. */
  486.         private List<ColumnModelData> getListModels() {
  487.             List<ColumnModelData> models = new ArrayList<ColumnModelData>();
  488.  
  489.             models.add(new ColumnModelData(ReportTable.ID_NUM_ROW, columnsName.get(ReportTable.columnsById.get(ReportTable.ID_NUM_ROW))));
  490.             models.add(new ColumnModelData(ReportTable.ID_STATE_NUMBER, columnsName.get(ReportTable.columnsById.get(ReportTable.ID_STATE_NUMBER))));
  491.             models.add(new ColumnModelData(ReportTable.ID_GARAGE_NUMBER, columnsName.get(ReportTable.columnsById.get(ReportTable.ID_GARAGE_NUMBER))));
  492.             models.add(new ColumnModelData(ReportTable.ID_DRIVER, columnsName.get(ReportTable.columnsById.get(ReportTable.ID_DRIVER))));
  493.             models.add(new ColumnModelData(ReportTable.ID_RUN, columnsName.get(ReportTable.columnsById.get(ReportTable.ID_RUN))));
  494.             models.add(new ColumnModelData(ReportTable.ID_AVERAGE_SPEED, columnsName.get(ReportTable.columnsById.get(ReportTable.ID_AVERAGE_SPEED))));
  495.             models.add(new ColumnModelData(ReportTable.ID_MAX_SPEED, columnsName.get(ReportTable.columnsById.get(ReportTable.ID_MAX_SPEED))));
  496.             models.add(new ColumnModelData(ReportTable.ID_MOVE_TIME, columnsName.get(ReportTable.columnsById.get(ReportTable.ID_MOVE_TIME))));
  497.             models.add(new ColumnModelData(ReportTable.ID_DOWN_TIME, columnsName.get(ReportTable.columnsById.get(ReportTable.ID_DOWN_TIME))));
  498.             models.add(new ColumnModelData(ReportTable.ID_ABSENCE_DATE, columnsName.get(ReportTable.columnsById.get(ReportTable.ID_ABSENCE_DATE))));
  499.  
  500.             return models;
  501.         }
  502.  
  503.         /**
  504.          * Возвращает список колонок в требуемом порядке.
  505.          *
  506.          * @param columns Список колонок в требуемом порядке.
  507.          */
  508.         public List<ColumnModelData> getOrderColumns(List<String> columns) {
  509.             List<ColumnModelData> listModel = new ArrayList<ColumnModelData>();
  510.  
  511.             for (String column : columns) {
  512.                 ColumnModelData model = new ColumnModelData(column, columnsName.get(ReportTable.columnsById.get(column)));
  513.                 listModel.add(model);
  514.             }
  515.  
  516.             return listModel;
  517.         }
  518.  
  519.         /**
  520.          * Помечает те колонки таблицы, которые указаные в заданном списке.
  521.          *
  522.          * @param visibleColumns Список колонок, которые должны быть помечны как выделенные в настройках.
  523.          */
  524.         public void checked(List<String> visibleColumns, List<ColumnModelData> models) {
  525.             for (ModelData model : models) {
  526.                 if (model instanceof ColumnModelData) {
  527.                     String column = ((ColumnModelData) model).getColumnId();
  528.                     boolean isChecked = visibleColumns.contains(column) ? true : false;
  529.                     columnView.setChecked(model, isChecked);
  530.                 }
  531.             }
  532.         }
  533.     }
  534.  
  535.     ////////// Перерисовка компонентов для корректного тображения //////////////
  536.     //
  537.     /** Перерисовывает компоненты со списком колонок. */
  538.     public void repaintColumnOptions() {
  539.         tcOptions.columnView.recalculate();
  540.         tcOptions.setStyleChkeckBoxListViewSpan();
  541.     }
  542.  
  543.     private static native void installRepaint(Object target)/*-{
  544.     console.log("installRepaint columns options");
  545.     $wnd.repaintColumnOptions = function(){
  546.     target.@ru.omnicomm.pegasus.gadgets.movementsummaryreportgadget.client.ui.optionspanel.SettingsPanel::repaintColumnOptions()();
  547.     };
  548.     }-*/;
  549.  
  550.     /////////////////// JS функции для установки стиля компонентов /////////////
  551.     //
  552.     private native void applySpanStyle(String id, String color)/*-{
  553.     $wnd.jQuery('#'+'span-'+id).css("color", color);
  554.     }-*/;
  555.  
  556.     private native void applyJSCRadioButton()/*-{
  557.     $wnd.$('.dialogMiddle input[type=radio]').jqTransRadio({
  558.     cls:'jqTransformRadio',
  559.     empty: @ru.omnicomm.pegasus.gadgets.movementsummaryreportgadget.client.Util::getAppUrl()() + '/images/empty.png'
  560.     });
  561.     }-*/;
  562.  
  563.     private native void applyJSCheckBoxes()/*-{
  564.     $wnd.$('.dialogMiddle input[type=checkbox]').checkbox({
  565.     cls:'jquery-safari2-checkbox',
  566.     empty: @ru.omnicomm.pegasus.gadgets.movementsummaryreportgadget.client.Util::getAppUrl()() + '/images/empty.png'
  567.     });
  568.     }-*/;
  569.  
  570.     /** Применение стилей к CheckBox-ам в панели ностроек. */
  571.     public native void applyCheckBoxStyle()/*-{
  572.      $wnd.$('.dialogMiddle #ColumnSettingsListView .test').checkbox({
  573.     // $wnd.$('.dialogMiddle #ColumnSettingsListView .x-view-item-checkbox').checkbox({
  574.     cls:'jquery-safari2-checkbox',
  575.     empty: @ru.omnicomm.pegasus.gadgets.movementsummaryreportgadget.client.Util::getAppUrl()() + '/images/empty.png'
  576.     });
  577.     }-*/;
  578.    
  579.         public native void registrJSNI()/*-{        
  580.           alert('hkjjhjkhjkhjh');
  581.           window.checkedColumn = function(id) {
  582.                 alert('tttttttt');
  583.                 var current_color = $wnd.jQuery('#'+'span-'+id).css("color");
  584.                 var check_color = "rgb(51, 51, 51)";
  585.                 var uncheck_color = "rgb(153, 153, 153)";
  586.                 var div_id = '#' + id;
  587.                 if (current_color == check_color) {
  588.                         $wnd.$('div_id .test').attr('checked', false);
  589.                         $wnd.jQuery('#'+'span-'+id).css("color", uncheck_color);
  590.                         return;
  591.                 }
  592.                 if (current_color == uncheck_color) {
  593.                       $wnd.$('div_id .test').attr('checked', true);
  594.                       $wnd.jQuery('#'+'span-'+id).css("color", check_color);
  595.                      return;
  596.                 }
  597.            }
  598.         }-*/;
  599.  
  600.     /** Применение стилей к ListBox-ам в панели ностроек. */
  601.     public native void applyJSLists()/*-{
  602.     $wnd.jQuery("#show_interval_value").selectbox();
  603.     $wnd.jQuery("#show_interval_param").selectbox();
  604.     $wnd.jQuery("#file_save").selectbox();
  605.     $wnd.jQuery("#default_email").selectbox();
  606.    
  607.     }-*/;
  608.  
  609.     /** Модель данных списка, содержащего названия колонок таблицы. */
  610.     private class ColumnModelData extends BaseModel {
  611.  
  612.         public ColumnModelData() {
  613.         }
  614.  
  615.         public ColumnModelData(String columnId, String columnName) {
  616.             set("columnId", columnId);
  617.             set("columnName", columnName);
  618.         }
  619.  
  620.         public String getColumnId() {
  621.             return get("columnId");
  622.         }
  623.  
  624.         public void setColumnId(String columnId) {
  625.             set("columnId", columnId);
  626.         }
  627.  
  628.         public String getColumnName() {
  629.             return get("columnName");
  630.         }
  631.  
  632.         public void setColumnName(String columnName) {
  633.             set("columnName", columnName);
  634.         }
  635.     }
  636.  
  637.     public class StyleCheckBoxListView<M extends ModelData> extends ListView<M> {
  638.  
  639. //        private String checkBoxSelector = ".x-view-item-checkbox";
  640.         private String checkBoxSelector = ".test";
  641.         protected List<M> checkedPreRender;
  642.  
  643.         @Override
  644.         protected void onRender(Element target, int index) {
  645.             if (getTemplate() == null) {
  646. //                String spacing = GXT.isIE ? "0" : "3";
  647.                 String spacing = "0";
  648.                 setTemplate(XTemplate.create(
  649.                         "<tpl for=\".\">"
  650.                         + "<div onclick=\"checkedColumn({columnId})\" id = \"{columnId}\" class='x-view-item x-view-item-check'>"
  651.                         + "<table cellspacing='" + spacing + "' cellpadding=0 >"
  652.                         + "<tr>"
  653.                         + "<td id = \"check-{columnId}\" class = \"test\"></td>"
  654. //                          + "<td>" + "<input id = \"check-{columnId}\" class=\"x-view-item-checkbox\" type=\"checkbox\" /></td>"
  655.                         + "<td></td>"
  656.                         + "<td><span id = \"span-{columnId}\" >{" + getDisplayProperty() + "}</span></td>"
  657.                         + "</tr>"
  658.                         + "</table>"
  659.                         + "</div>"
  660.                         + "</tpl>"));
  661.             }
  662.             super.onRender(target, index);
  663.         }
  664.        
  665.         public String getCheckBoxSelector() {
  666.             return checkBoxSelector;
  667.         }
  668.  
  669.         public List<M> getChecked() {
  670.             if (rendered) {
  671.                 List<M> l = new ArrayList<M>();
  672.                 NodeList<Element> nodes = el().select(checkBoxSelector);
  673.                 for (int i = 0; i < nodes.getLength(); i++) {
  674.                     if (InputElement.is(nodes.getItem(i))) {
  675.                         InputElement e = InputElement.as(nodes.getItem(i));
  676.                         if (e.isChecked()) {
  677.                             l.add(getStore().getAt(i));
  678.                         }
  679.                     }
  680.                 }
  681.                 return l;
  682.             } else {
  683.                 return checkedPreRender != null ? new ArrayList<M>(checkedPreRender) : new ArrayList<M>();
  684.             }
  685.         }
  686.  
  687.         public void setCheckBoxSelector(String checkBoxSelector) {
  688.             this.checkBoxSelector = checkBoxSelector;
  689.         }
  690.  
  691.         public void setChecked(M m, boolean checked) {
  692.             if (rendered) {
  693.                 NodeList<Element> nodes = el().select(checkBoxSelector);
  694.                 int index = store.indexOf(m);
  695.                 if (index != -1) {
  696.                     Element e = nodes.getItem(index);
  697.                     if (e != null) {
  698.                         ((InputElement) e.cast()).setChecked(checked);
  699.                     }
  700.                 }
  701.             } else {
  702.                 if (checkedPreRender == null) {
  703.                     checkedPreRender = new ArrayList<M>();
  704.                 }
  705.                 if (checked) {
  706.                     if (!checkedPreRender.contains(m)) {
  707.                         checkedPreRender.add(m);
  708.                     }
  709.                 } else {
  710.                     checkedPreRender.remove(m);
  711.                 }
  712.             }
  713.         }
  714.  
  715.         public native boolean applyDivStyle(String id)/*-{
  716.         var current_color = $wnd.jQuery('#'+'span-'+id).css("color");
  717.         var check_color = "rgb(51, 51, 51)";
  718.         var uncheck_color = "rgb(153, 153, 153)";
  719.         var div_id = '#' + id;
  720.         if (current_color == check_color) {
  721.                 //   $wnd.$('div_id .test').attr('checked', false);
  722.         $wnd.jQuery('#'+'span-'+id).css("color", uncheck_color);
  723.         return false;
  724.         }
  725.         if (current_color == uncheck_color) {
  726.               //   $wnd.$('div_id .test').attr('checked', true);
  727.         $wnd.jQuery('#'+'span-'+id).css("color", check_color);
  728.           return true;
  729.        
  730.         }
  731.         }-*/;
  732.  
  733.         @Override
  734.         protected void afterRender() {
  735.             super.afterRender();
  736.             if (checkedPreRender != null) {
  737.                 for (M m : checkedPreRender) {
  738.                     setChecked(m, true);
  739.                 }
  740.                 checkedPreRender = null;
  741.             }
  742.         }
  743.     }
  744. }