Пример #1
0
  /**
   * create the footer (footerButton) for the Calendar part of this CDateTime<br>
   * there is currently no footer for the Clock part - should there be? or should this footer span
   * both parts?
   */
  private void createFooter() {
    footer = new VPanel(this, SWT.NONE);
    footer.setData(CDT.PickerPart, PickerPart.FooterPanel);
    footer.setPainter(cdt.getPainter());
    cdt.getPainter().update(footer);
    VGridLayout layout = new VGridLayout();
    layout.makeColumnsEqualWidth = cdt.builder.getFooterEqualColumns();
    layout.horizontalSpacing = 0;
    layout.verticalSpacing = 0;
    layout.marginHeight = 1;
    layout.marginWidth = 1;
    footer.setLayout(layout);
    footer.setLayoutData(new GridData(cdt.builder.getFooterAlignment(), SWT.FILL, true, false));

    for (Iterator<Footer> iter = cdt.builder.getFooters().iterator(); iter.hasNext(); ) {
      ((VGridLayout) footer.getLayout()).numColumns++;
      Footer f = iter.next();
      switch (f.type) {
        case Footer.CLEAR:
          clear = new VButton(footer, SWT.PUSH | SWT.NO_FOCUS);
          clear.setData(CDT.PickerPart, PickerPart.ClearButton);
          clear.setPainter(cdt.getPainter());
          cdt.getPainter().update(clear);
          clear.setLayoutData(new GridData(f.alignment, SWT.FILL, f.grab, false));
          clear.addListener(
              SWT.Selection,
              new Listener() {
                public void handleEvent(Event event) {
                  cdt.setSelection(null);
                  if (event.widget == null) {
                    cdt.fireSelectionChanged();
                  }
                }
              });
          break;
        case Footer.TODAY:
        case Footer.VERBOSE_TODAY:
          today = new VButton(footer, SWT.PUSH | SWT.NO_FOCUS);
          today.setData(CDT.PickerPart, PickerPart.TodayButton);
          today.setPainter(cdt.getPainter());
          cdt.getPainter().update(today);
          today.setLayoutData(new GridData(f.alignment, SWT.FILL, f.grab, false));
          today.addListener(
              SWT.Selection,
              new Listener() {
                public void handleEvent(Event event) {
                  cdt.setSelection(new Date());
                  if (event.widget == null) {
                    cdt.fireSelectionChanged();
                  }
                }
              });
          break;
      }
    }
  }
Пример #2
0
  private void addBodyPanel() {
    if (bodyPanels == null) {
      bodyPanels = new VPanel[1];
    } else {
      VPanel[] pa = new VPanel[bodyPanels.length + 1];
      System.arraycopy(bodyPanels, 0, pa, 0, bodyPanels.length);
      bodyPanels = pa;
      body.getLayout(VGridLayout.class).numColumns++;
    }

    VPanel picker = new VPanel(body, SWT.NONE);
    picker.setData(CDT.PickerPart, PickerPart.BodyPanel);
    picker.setPainter(cdt.getPainter());
    cdt.getPainter().update(picker);
    picker.setLayout(new VStackLayout());
    picker.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    bodyPanels[bodyPanels.length - 1] = picker;
  }
Пример #3
0
  /** create the Calendar's body, which contains the dayLabels and dayButtons */
  private void createBody() {
    body = new VPanel(this, SWT.NONE);
    body.setData(CDT.PickerPart, PickerPart.BodyPanel);
    body.setPainter(cdt.getPainter());
    cdt.getPainter().update(body);
    VGridLayout layout = new VGridLayout(1, false);
    layout.marginWidth = 0;
    layout.marginHeight = 0;
    layout.horizontalSpacing = 0;
    body.setLayout(layout);
    body.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    addBodyPanel();

    for (Iterator<Body> iter = cdt.builder.getBodies().iterator(); iter.hasNext(); ) {
      Body b = iter.next();
      if (b.newColumn) {
        VLabel sep = new VLabel(body, SWT.SEPARATOR | SWT.VERTICAL);
        sep.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));
        body.getLayout(VGridLayout.class).numColumns++;
        addBodyPanel();
      }
      switch (b.type) {
        case Body.DAYS:
          createDays(b);
          break;
        case Body.MONTHS:
          createMonths(b);
          break;
        case Body.TIME:
          createTime(b);
          break;
        case Body.YEARS:
          createYears(b);
          break;
      }
    }

    for (VPanel bodyPanel : bodyPanels) {
      bodyPanel.getLayout(VStackLayout.class).setTopControl(null);
    }
  }
Пример #4
0
  /**
   * create the header for the Calendar part of this CDateTime<br>
   * there is no equivalent for the Clock part
   */
  private void createHeader() {
    header = new VPanel(this, SWT.NONE);
    header.setData(CDT.PickerPart, PickerPart.HeaderPanel);
    header.setPainter(cdt.getPainter());
    cdt.getPainter().update(header);
    VGridLayout layout = new VGridLayout();
    layout.makeColumnsEqualWidth = cdt.builder.getHeaderEqualColumns();
    layout.horizontalSpacing = 0;
    layout.verticalSpacing = 0;
    layout.marginHeight = 2;
    layout.marginWidth = 2;
    header.setLayout(layout);
    header.setLayoutData(new GridData(cdt.builder.getHeaderAlignment(), SWT.FILL, true, false));

    GridData data;

    for (Iterator<Header> iter = cdt.builder.getHeaders().iterator(); iter.hasNext(); ) {
      ((VGridLayout) header.getLayout()).numColumns++;
      Header h = iter.next();
      data = new GridData(h.alignment, SWT.FILL, h.grab, false);
      switch (h.type) {
        case Header.DATE_NOW:
          dateNow = new VButton(header, SWT.PUSH | SWT.NO_FOCUS);
          dateNow.setData(CDT.PickerPart, PickerPart.DateNow);
          dateNow.setPainter(cdt.getPainter());
          cdt.getPainter().update(dateNow);
          dateNow.setMargins(4, 0);
          dateNow.setPolygon(new int[] {7, 7});
          dateNow.setLayoutData(data);
          dateNow.addListener(
              SWT.Selection,
              new Listener() {
                public void handleEvent(Event event) {
                  cdt.setSelection(new Date());
                  if (event.widget == null) {
                    cdt.fireSelectionChanged();
                  }
                }
              });
          break;
        case Header.MONTH:
          monthButton = new VButton(header, SWT.TOGGLE | SWT.NO_FOCUS);
          monthButton.setData(CDT.PickerPart, PickerPart.MonthLabel);
          monthButton.setPainter(cdt.getPainter());
          cdt.getPainter().update(monthButton);
          monthButton.setAlignment(h.textAlignment, SWT.CENTER);
          monthButton.setLayoutData(data);
          if (h.readOnly) {
            monthButton.setPaintNative(false);
          } else {
            if (CDT.gtk) {
              monthButton.addListener(
                  SWT.MouseWheel,
                  new Listener() {
                    public void handleEvent(Event event) {
                      if (SWT.MouseWheel == event.type) {
                        Calendar tmpcal = cdt.getCalendarInstance();
                        tmpcal.add(Calendar.MONTH, (event.count > 0) ? 1 : -1);
                        cdt.setSelection(tmpcal.getTime());
                      }
                    }
                  });
            }
            monthButton.addListener(
                SWT.Selection,
                new Listener() {
                  public void handleEvent(Event event) {
                    handleHeaderSelection((VButton) event.data);
                  }
                });

            Menu monthMenu = monthButton.createMenu();
            monthItems = new MenuItem[12];
            for (int i = 0; i < 12; i++) {
              Calendar tmpcal = cdt.getCalendarInstance();
              tmpcal.set(Calendar.MONTH, i);
              monthItems[i] = new MenuItem(monthMenu, SWT.NONE);
              monthItems[i].setData(
                  "Month", new Integer(tmpcal.get(Calendar.MONTH))); // $NON-NLS-1$
              monthItems[i].addSelectionListener(
                  new SelectionAdapter() {
                    public void widgetSelected(SelectionEvent e) {
                      MenuItem item = (MenuItem) e.widget;
                      Calendar tmpcal = cdt.getCalendarInstance();
                      tmpcal.set(
                          Calendar.MONTH,
                          ((Integer) item.getData("Month")).intValue()); // $NON-NLS-1$
                      cdt.setSelection(tmpcal.getTime());
                    }
                  });
            }
          }
          break;
        case Header.MONTH_NEXT:
          monthNext = new VButton(header, SWT.ARROW | SWT.RIGHT | SWT.NO_FOCUS);
          monthNext.setData(CDT.PickerPart, PickerPart.MonthNext);
          monthNext.setPainter(cdt.getPainter());
          cdt.getPainter().update(monthNext);
          monthNext.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));
          monthNext.addListener(
              SWT.Selection,
              new Listener() {
                public void handleEvent(Event event) {
                  Calendar tmpcal = cdt.getCalendarInstance();
                  if (yearNext == null && yearButton != null && yearButton.getSelection()) {
                    tmpcal.add(Calendar.YEAR, 10);
                  } else {
                    tmpcal.add(Calendar.MONTH, 1);
                  }
                  cdt.setSelection(tmpcal.getTime());
                }
              });
          break;
        case Header.MONTH_PREV:
          monthPrev = new VButton(header, SWT.ARROW | SWT.LEFT | SWT.NO_FOCUS);
          monthPrev.setData(CDT.PickerPart, PickerPart.MonthPrev);
          monthPrev.setPainter(cdt.getPainter());
          cdt.getPainter().update(monthPrev);
          monthPrev.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));
          monthPrev.addListener(
              SWT.Selection,
              new Listener() {
                public void handleEvent(Event event) {
                  Calendar tmpcal = cdt.getCalendarInstance();
                  if (yearPrev == null && yearButton != null && yearButton.getSelection()) {
                    tmpcal.add(Calendar.YEAR, -10);
                  } else {
                    tmpcal.add(Calendar.MONTH, -1);
                  }
                  cdt.setSelection(tmpcal.getTime());
                }
              });
          break;
        case Header.TIME:
          timeButton = new VButton(header, SWT.TOGGLE | SWT.NO_FOCUS);
          timeButton.setMargins(3, 5);
          timeButton.setImage(Resources.getIconClock());
          timeButton.setData(CDT.PickerPart, PickerPart.MonthPrev);
          timeButton.setPainter(cdt.getPainter());
          cdt.getPainter().update(timeButton);
          timeButton.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));
          timeButton.addListener(
              SWT.Selection,
              new Listener() {
                public void handleEvent(Event event) {
                  handleHeaderSelection((VButton) event.data);
                }
              });
          break;
        case Header.YEAR:
          yearButton = new VButton(header, SWT.TOGGLE | SWT.NO_FOCUS);
          yearButton.setData(CDT.PickerPart, PickerPart.YearLabel);
          yearButton.setPainter(cdt.getPainter());
          cdt.getPainter().update(yearButton);
          yearButton.setAlignment(h.textAlignment, SWT.CENTER);
          yearButton.setLayoutData(data);
          if (h.readOnly) {
            yearButton.setPaintNative(false);
          } else {
            if (CDT.gtk) {
              yearButton.addListener(
                  SWT.MouseWheel,
                  new Listener() {
                    public void handleEvent(Event event) {
                      if (SWT.MouseWheel == event.type) {
                        Calendar tmpcal = cdt.getCalendarInstance();
                        tmpcal.add(Calendar.YEAR, (event.count > 0) ? 1 : -1);
                        cdt.setSelection(tmpcal.getTime());
                      }
                    }
                  });
            }
            yearButton.addListener(
                SWT.Selection,
                new Listener() {
                  public void handleEvent(Event event) {
                    handleHeaderSelection((VButton) event.data);
                  }
                });

            Menu yearMenu = yearButton.createMenu();
            yearItems = new MenuItem[11];
            for (int i = 0; i < 11; i++) {
              yearItems[i] = new MenuItem(yearMenu, SWT.NONE);
              yearItems[i].setData("Year", new Integer(i)); // $NON-NLS-1$
              yearItems[i].addSelectionListener(
                  new SelectionAdapter() {
                    public void widgetSelected(SelectionEvent e) {
                      MenuItem item = (MenuItem) e.widget;
                      Calendar tmpcal = cdt.getCalendarInstance();
                      tmpcal.add(
                          Calendar.YEAR,
                          ((Integer) item.getData("Year")).intValue() - 5); // $NON-NLS-1$
                      cdt.setSelection(tmpcal.getTime());
                    }
                  });
            }
          }
          break;
        case Header.YEAR_NEXT:
          yearNext = new VButton(header, SWT.ARROW | SWT.RIGHT | SWT.NO_FOCUS);
          yearNext.setData(CDT.PickerPart, PickerPart.YearNext);
          yearNext.setPainter(cdt.getPainter());
          cdt.getPainter().update(yearNext);
          yearNext.setLayoutData(data);
          yearNext.addListener(
              SWT.Selection,
              new Listener() {
                public void handleEvent(Event event) {
                  Calendar tmpcal = cdt.getCalendarInstance();
                  if (yearButton != null && yearButton.getSelection()) {
                    tmpcal.add(Calendar.YEAR, 10);
                  } else if (cdt.field.length == 1
                      && cdt.getCalendarField(cdt.field[0]) == Calendar.YEAR) {
                    tmpcal.add(Calendar.YEAR, 10);
                  } else {
                    tmpcal.add(Calendar.YEAR, 1);
                  }
                  cdt.setSelection(tmpcal.getTime());
                }
              });
          break;
        case Header.YEAR_PREV:
          yearPrev = new VButton(header, SWT.ARROW | SWT.LEFT | SWT.NO_FOCUS);
          yearPrev.setData(CDT.PickerPart, PickerPart.YearPrev);
          yearPrev.setPainter(cdt.getPainter());
          cdt.getPainter().update(yearPrev);
          yearPrev.setLayoutData(data);
          yearPrev.addListener(
              SWT.Selection,
              new Listener() {
                public void handleEvent(Event event) {
                  Calendar tmpcal = cdt.getCalendarInstance();
                  if (yearButton != null && yearButton.getSelection()) {
                    tmpcal.add(Calendar.YEAR, -10);
                  } else if (cdt.field.length == 1
                      && cdt.getCalendarField(cdt.field[0]) == Calendar.YEAR) {
                    tmpcal.add(Calendar.YEAR, -10);
                  } else {
                    tmpcal.add(Calendar.YEAR, -1);
                  }
                  cdt.setSelection(tmpcal.getTime());
                }
              });
          break;
      }
    }
  }