| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You 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.apache.sling.ide.eclipse.ui.views; |
| |
| import java.util.Calendar; |
| import java.util.Date; |
| import java.util.GregorianCalendar; |
| |
| import org.apache.sling.ide.eclipse.ui.nav.model.JcrProperty; |
| import org.eclipse.jface.dialogs.Dialog; |
| import org.eclipse.jface.dialogs.IDialogConstants; |
| import org.eclipse.jface.viewers.TableViewer; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.events.SelectionAdapter; |
| import org.eclipse.swt.events.SelectionEvent; |
| import org.eclipse.swt.layout.GridData; |
| import org.eclipse.swt.layout.GridLayout; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Control; |
| import org.eclipse.swt.widgets.DateTime; |
| import org.eclipse.swt.widgets.Label; |
| import org.eclipse.swt.widgets.Shell; |
| |
| public class DateTimeEditor extends Dialog { |
| |
| private final JcrProperty property; |
| private TableViewer viewer; |
| private Label result; |
| private DateTime calendar; |
| private DateTime time; |
| private String dateAsString; |
| private Calendar c; |
| |
| protected DateTimeEditor(Shell parentShell, JcrProperty property) { |
| super(parentShell); |
| this.property = property; |
| } |
| |
| @Override |
| protected void configureShell(Shell newShell) { |
| super.configureShell(newShell); |
| newShell.setText("Modify date/time property"); |
| } |
| |
| @Override |
| protected Control createDialogArea(Composite parent) { |
| Composite composite = (Composite) super.createDialogArea(parent); |
| |
| GridData parentLayoutData = new GridData(GridData.FILL_BOTH); |
| parentLayoutData.widthHint = 280; |
| parentLayoutData.heightHint = 280; |
| composite.setLayoutData(parentLayoutData); |
| GridLayout parentLayout = (GridLayout) composite.getLayout(); |
| parentLayout.numColumns = 2; |
| |
| Label label = new Label(composite, SWT.WRAP); |
| label.setText("Modify property "+property.getName()+":"); |
| GridData data = new GridData(GridData.GRAB_HORIZONTAL |
| | GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_FILL |
| | GridData.VERTICAL_ALIGN_CENTER); |
| data.horizontalSpan = 2; |
| data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH); |
| label.setLayoutData(data); |
| label.setFont(parent.getFont()); |
| |
| Label hline = new Label(composite, SWT.SEPARATOR | SWT.HORIZONTAL); |
| GridData layoutData = new GridData(GridData.FILL_HORIZONTAL); |
| layoutData.horizontalSpan = 2; |
| hline.setLayoutData(layoutData); |
| |
| Label dateLabel = new Label(composite, SWT.WRAP); |
| dateLabel.setText("Date:"); |
| layoutData = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_BEGINNING); |
| layoutData.widthHint = 80; |
| dateLabel.setLayoutData(layoutData); |
| dateLabel.setFont(parent.getFont()); |
| |
| calendar = new DateTime(composite, SWT.CALENDAR); |
| layoutData = new GridData(GridData.FILL_VERTICAL | GridData.HORIZONTAL_ALIGN_BEGINNING); |
| layoutData.horizontalSpan = 1; |
| calendar.setLayoutData(layoutData); |
| calendar.addSelectionListener(new SelectionAdapter() { |
| @Override |
| public void widgetSelected(SelectionEvent e) { |
| updateSelection(); |
| } |
| }); |
| |
| Label timeLabel = new Label(composite, SWT.WRAP); |
| timeLabel.setText("Time:"); |
| layoutData = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_BEGINNING); |
| layoutData.widthHint = 80; |
| timeLabel.setLayoutData(layoutData); |
| timeLabel.setFont(parent.getFont()); |
| |
| time = new DateTime(composite, SWT.TIME); |
| layoutData = new GridData(GridData.FILL_VERTICAL | GridData.HORIZONTAL_ALIGN_BEGINNING); |
| layoutData.horizontalSpan = 1; |
| time.setLayoutData(layoutData); |
| time.addSelectionListener(new SelectionAdapter() { |
| @Override |
| public void widgetSelected(SelectionEvent e) { |
| updateSelection(); |
| } |
| }); |
| |
| hline = new Label(composite, SWT.SEPARATOR | SWT.HORIZONTAL); |
| layoutData = new GridData(GridData.FILL_HORIZONTAL); |
| layoutData.horizontalSpan = 2; |
| hline.setLayoutData(layoutData); |
| |
| result = new Label(composite, SWT.WRAP); |
| result.setText("Foo"); |
| data = new GridData(GridData.GRAB_HORIZONTAL |
| | GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_FILL |
| | GridData.VERTICAL_ALIGN_CENTER); |
| data.horizontalSpan = 2; |
| result.setLayoutData(data); |
| result.setFont(parent.getFont()); |
| |
| // initialize value |
| dateAsString = property.getValueAsString(); |
| c = DateTimeSupport.parseAsCalendar(dateAsString); |
| calendar.setDate(c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH)); |
| time.setTime(c.get(Calendar.HOUR_OF_DAY), c.get(Calendar.MINUTE), c.get(Calendar.SECOND)); |
| |
| updateSelection(); |
| return composite; |
| } |
| |
| protected void updateSelection() { |
| int day = calendar.getDay(); |
| int month = calendar.getMonth(); |
| int year = calendar.getYear(); |
| int hours = time.getHours(); |
| int minutes = time.getMinutes(); |
| int seconds = time.getSeconds(); |
| c = new GregorianCalendar(year, month, day, hours, minutes, seconds); |
| dateAsString = DateTimeSupport.print(c); |
| result.setText(dateAsString); |
| } |
| |
| @Override |
| protected void okPressed() { |
| super.okPressed(); |
| } |
| |
| public Date getDate() { |
| return c.getTime(); |
| } |
| } |