void setMonthLabelText() { String str = getFormattedDate("MMMM", cdt.getCalendarTime()); // $NON-NLS-1$ GC gc = new GC(getDisplay()); int width = monthButton.getClientArea().width; if (width > 0 && gc.stringExtent(str).x >= width) { str = getFormattedDate("MMM", cdt.getCalendarTime()); // $NON-NLS-1$ } gc.dispose(); monthButton.setText(str); }
public void setFields(int[] calendarFields) { cdt.builder.setFields(calendarFields); fields = 0; int[] fa = getFields(); for (int i = 0; i < calendarFields.length; i++) { for (int j = 0; j < fa.length; j++) { if (calendarFields[i] == fa[j]) fields |= (1 << j); } } createContents(); updateLabels(); if (monthButton != null) { monthButton.addListener( SWT.Resize, new Listener() { public void handleEvent(Event event) { if (SWT.Resize == event.type) { setMonthLabelText(); } } }); } if (timePanel != null) { timePanel.setFields(calendarFields); } }
/** * 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; } } }
private void createYears(Body b) { VPanel bodyPanel = bodyPanels[bodyPanels.length - 1]; yearPanel = new VPanel(bodyPanel, SWT.NONE); yearPanel.setData(CDT.PickerPart, PickerPart.DayOfWeekPanel); yearPanel.setPainter(cdt.getPainter()); cdt.getPainter().update(yearPanel); VGridLayout layout = new VGridLayout(3, true); layout.marginHeight = 0; layout.marginWidth = 0; layout.horizontalSpacing = b.spacing; layout.verticalSpacing = b.spacing; yearPanel.setLayout(layout); bodyPanel.getLayout(VStackLayout.class).setDefault(yearPanel, false); yearButtons = new VButton[15]; for (int year = 0; year < yearButtons.length; year++) { yearButtons[year] = new VButton(yearPanel, (cdt.field.length > 1) ? (SWT.PUSH | SWT.NO_FOCUS) : SWT.TOGGLE); yearButtons[year].setSquare(true); yearButtons[year].setData(CDT.PickerPart, PickerPart.DayOfWeekLabel); yearButtons[year].setData(CDT.Key.Index, year); yearButtons[year].setPainter(cdt.getPainter()); cdt.getPainter().update(yearButtons[year]); yearButtons[year].setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); yearButtons[year].addListener( SWT.Selection, new Listener() { public void handleEvent(Event event) { if (event.widget == null) { VButton button = (VButton) event.data; if (button.hasStyle(SWT.TOGGLE)) { for (VButton b : yearButtons) { if (b != button) { b.setSelection(false); } } } Calendar tmpcal = cdt.getCalendarInstance(); tmpcal.set(Calendar.YEAR, Integer.parseInt(button.getText())); cdt.setSelection(tmpcal.getTime()); if (cdt.field.length == 1 && cdt.getCalendarField(cdt.field[0]) == Calendar.YEAR) { cdt.fireSelectionChanged(true); } else { handleHeaderSelection(null); } } } }); } if (yearButton != null) { yearButton.setData(Key.Panel, yearPanel); } }
private void handleHeaderSelection(VButton button) { if (monthButton != null && monthButton != button) { monthButton.setSelection(false); } if (yearButton != null && yearButton != button) { yearButton.setSelection(false); } if (timeButton != null && timeButton != button) { timeButton.setSelection(false); } if (button != null && button.getSelection()) { VPanel panel = button.getData(Key.Panel, VPanel.class); panel.getParent().getLayout(VStackLayout.class).setTopControl(panel, 500); } else { for (VPanel panel : bodyPanels) { panel.getLayout(VStackLayout.class).setTopControl(null, 500); } } }
private void createTime(Body b) { VPanel bodyPanel = bodyPanels[bodyPanels.length - 1]; timePanel = new AnalogTimePicker(cdt, this); timePanel.setParent(bodyPanel); bodyPanel.getLayout(VStackLayout.class).setDefault(timePanel, false); if (timeButton != null) { timeButton.setData(Key.Panel, timePanel); } }
/** set / update the text of the <code>footerButton</code>. */ private void updateFooter() { if (footer != null) { Locale locale = cdt.getLocale(); if (today != null) { if (cdt.builder.hasFooter(Footer.VERBOSE_TODAY)) { Calendar cal = cdt.getCalendarInstance(System.currentTimeMillis()); Object[] margs = { cal.getTime(), Resources.getString("date_ordinal_" + cal.get(Calendar.DATE), locale) // $NON-NLS-1$ }; MessageFormat formatter = new MessageFormat( Resources.getString("today_verbose.text", locale), locale); // $NON-NLS-1$ today.setText(formatter.format(margs)); } else { today.setText(Resources.getString("today.text", locale)); // $NON-NLS-1$ } } if (clear != null) { clear.setText(Resources.getString("clear.text", locale)); // $NON-NLS-1$ } footer.layout(); } }
/** * set / update the text of the header - <code>monthLabel</code>, <code>yearLabel</code>, and the * <code>monthLabel</code> context menu. */ private void updateHeader() { if (header != null) { Calendar selected = cdt.getCalendarInstance(); if (monthButton != null) { setMonthLabelText(); } if (monthItems != null) { Calendar tmpcal = cdt.getCalendarInstance(); for (int i = 0; i < 12; i++) { tmpcal.set(Calendar.MONTH, i); monthItems[i].setText(getFormattedDate("MMMM", tmpcal.getTime())); // $NON-NLS-1$ monthItems[i].setData("Month", new Integer(tmpcal.get(Calendar.MONTH))); // $NON-NLS-1$ if (selected.get(Calendar.MONDAY) == tmpcal.get(Calendar.MONTH)) { monthItems[i].setImage(Resources.getIconBullet()); } else { monthItems[i].setImage(null); } } } if (yearButton != null) { yearButton.setText(getFormattedDate("yyyy", cdt.getCalendarTime())); // $NON-NLS-1$ } if (yearItems != null) { Calendar tmpcal = cdt.getCalendarInstance(); tmpcal.add(Calendar.YEAR, -5); for (int i = 0; i < 11; i++) { yearItems[i].setText(getFormattedDate("yyyy", tmpcal.getTime())); // $NON-NLS-1$ if (selected.get(Calendar.YEAR) == tmpcal.get(Calendar.YEAR)) { yearItems[i].setImage(Resources.getIconBullet()); } else { yearItems[i].setImage(null); } tmpcal.add(Calendar.YEAR, 1); } } header.layout(); } }
private void setSelectionFromButton(VButton button, int stateMask) { Date date = (Date) button.getData(CDT.Key.Date.name()); if (cdt.isSingleSelection()) { if ((stateMask & SWT.CTRL) != 0 && cdt.isSelected(date)) { cdt.setSelection(null); } else { cdt.setSelection(date); } } else { // if((stateMask & SWT.CTRL) != 0) { // if(cdt.isSelected(date)) { // cdt.deselect(date); // } else { // cdt.select(date); // } // } else if((stateMask & SWT.SHIFT) != 0 && cdt.hasSelection()) { // cdt.select(cdt.getSelection(), date, Calendar.DATE, 1); // } else { cdt.setSelection(date); // } } setFocus(true); }
/** * set / update, or calls methods to set / update, all components affected by the <code>locale * </code> * * @see #updateHeader * @see #updateDayLabels * @see #updateDays * @see #updateFooter */ private void updateLocale() { Locale locale = cdt.getLocale(); if (monthPrev != null) monthPrev.setToolTipText(Resources.getString("nav_prev_month", locale)); // $NON-NLS-1$ if (monthNext != null) monthNext.setToolTipText(Resources.getString("nav_next_month", locale)); // $NON-NLS-1$ if (dateNow != null) dateNow.setToolTipText(Resources.getString("nav_current_day", locale)); // $NON-NLS-1$ if (yearPrev != null) yearPrev.setToolTipText(Resources.getString("nav_prev_year", locale)); // $NON-NLS-1$ if (yearNext != null) yearNext.setToolTipText(Resources.getString("nav_next_year", locale)); // $NON-NLS-1$ if (today != null) today.setToolTipText(Resources.getString("nav_current_day", locale)); // $NON-NLS-1$ if (todayMenuItem != null) todayMenuItem.setText(Resources.getString("nav_current_day", locale)); // $NON-NLS-1$ if (showSelMenuItem != null) showSelMenuItem.setText(Resources.getString("show_selection", locale)); // $NON-NLS-1$ }
private void setButtonFocus(int index) { if (index >= 0 && index < dayButtons.length) { VButton button = dayButtons[index]; button.setFocus(); } }
private void createMonths(Body b) { VPanel bodyPanel = bodyPanels[bodyPanels.length - 1]; monthPanel = new VPanel(bodyPanel, SWT.NONE); monthPanel.setData(CDT.PickerPart, PickerPart.DayOfWeekPanel); monthPanel.setPainter(cdt.getPainter()); cdt.getPainter().update(monthPanel); VGridLayout layout = new VGridLayout(3, true); layout.marginHeight = 0; layout.marginWidth = 0; layout.horizontalSpacing = b.spacing; layout.verticalSpacing = b.spacing; monthPanel.setLayout(layout); bodyPanel.getLayout(VStackLayout.class).setDefault(monthPanel, false); monthButtons = new VButton[12]; for (int month = 0; month < monthButtons.length; month++) { monthButtons[month] = new VButton(monthPanel, (cdt.field.length > 1) ? (SWT.PUSH | SWT.NO_FOCUS) : SWT.TOGGLE); monthButtons[month].setSquare(true); monthButtons[month].setData("month", month); // $NON-NLS-1$ monthButtons[month].setData(CDT.PickerPart, PickerPart.DayOfWeekLabel); monthButtons[month].setData(CDT.Key.Index, month); monthButtons[month].setPainter(cdt.getPainter()); cdt.getPainter().update(monthButtons[month]); monthButtons[month].setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); monthButtons[month].addListener( SWT.Selection, new Listener() { public void handleEvent(Event event) { if (event.widget == null) { VButton button = (VButton) event.data; if (button.hasStyle(SWT.TOGGLE)) { for (VButton b : monthButtons) { if (b != button) { b.setSelection(false); } } } Calendar tmpcal = cdt.getCalendarInstance(); tmpcal.set(Calendar.MONTH, (Integer) button.getData("Month")); // $NON-NLS-1$ cdt.setSelection(tmpcal.getTime()); if (cdt.field.length == 1 && cdt.getCalendarField(cdt.field[0]) == Calendar.MONTH) { cdt.fireSelectionChanged(true); } else { handleHeaderSelection(null); } } } }); } updateMonths(); if (monthButton != null) { monthButton.setData(Key.Panel, monthPanel); } }
/** * 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; } } }