3 * Copyright (C) 2007 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
11 package eu
.etaxonomy
.taxeditor
.editor
.reference
;
13 import org
.eclipse
.swt
.SWT
;
14 import org
.eclipse
.swt
.events
.SelectionAdapter
;
15 import org
.eclipse
.swt
.events
.SelectionEvent
;
16 import org
.eclipse
.swt
.layout
.GridData
;
17 import org
.eclipse
.swt
.layout
.GridLayout
;
18 import org
.eclipse
.swt
.widgets
.Button
;
19 import org
.eclipse
.swt
.widgets
.Composite
;
20 import org
.eclipse
.swt
.widgets
.Dialog
;
21 import org
.eclipse
.swt
.widgets
.Label
;
22 import org
.eclipse
.swt
.widgets
.Text
;
24 import eu
.etaxonomy
.cdm
.common
.CdmUtils
;
25 import eu
.etaxonomy
.cdm
.model
.reference
.Generic
;
26 import eu
.etaxonomy
.cdm
.model
.reference
.ReferenceBase
;
27 import eu
.etaxonomy
.taxeditor
.store
.model
.Resources
;
34 public class ReferenceSelectComposite
extends Composite
{
35 private ReferenceBase
<?
> savedReference
;
36 private Text txtReference
;
37 private Button btnClearReference
;
38 private Text txtMicroRef
;
44 public ReferenceSelectComposite(Composite parent
) {
45 super(parent
, SWT
.NULL
);
46 createContent(parent
);
49 private void createContent(Composite xcontainer
) {
50 setLayoutData(new GridData(SWT
.FILL
, SWT
.TOP
, true, false));
51 GridLayout gridLayout
= new GridLayout();
52 gridLayout
.marginHeight
= 0;
53 gridLayout
.marginWidth
= 0;
54 setLayout(gridLayout
);
56 Label lblReference
= new Label(this, SWT
.NONE
);
57 lblReference
.setLayoutData(new GridData());
58 lblReference
.setText("Choose a reference either by searching or entering it as free text:");
60 // Create 3-columned composite for reference input
61 Composite refComposite
= new Composite(this, SWT
.NONE
);
62 GridLayout gridLayout2
= new GridLayout();
63 gridLayout2
.numColumns
= 3;
64 gridLayout2
.marginHeight
= 0;
65 gridLayout2
.marginWidth
= 0;
66 refComposite
.setLayout(gridLayout2
);
67 refComposite
.setLayoutData(new GridData(SWT
.FILL
, SWT
.CENTER
, true, false));
69 // Create reference input
70 txtReference
= new Text(refComposite
, SWT
.BORDER
);
71 txtReference
.setLayoutData(new GridData(SWT
.FILL
, SWT
.CENTER
, true, false));
73 // Create reference search button
74 Button btnSearchReference
= new Button(refComposite
, SWT
.NONE
);
75 btnSearchReference
.setEnabled(true);
76 btnSearchReference
.setLayoutData(new GridData());
77 btnSearchReference
.setText("Search ...");
78 btnSearchReference
.addSelectionListener(new SelectionAdapter() {
80 // Popup reference search
81 public void widgetSelected(SelectionEvent e
) {
86 // Create clear reference button
87 btnClearReference
= new Button(refComposite
, SWT
.NONE
);
88 btnClearReference
.setEnabled(false);
89 btnClearReference
.setText("Clear");
90 btnClearReference
.addSelectionListener(new SelectionAdapter() {
92 // Clear selected reference
93 public void widgetSelected(SelectionEvent e
) {
98 // Create message re: editing references
99 Label lblNewRefFeedback
= new Label(this, SWT
.NONE
);
100 lblNewRefFeedback
.setLayoutData(new GridData(SWT
.RIGHT
, SWT
.CENTER
, true, false));
101 lblNewRefFeedback
.setFont(
102 Resources
.italicizeFont(lblNewRefFeedback
.getFont()));
103 lblNewRefFeedback
.setText("Existing references can only be edited in property sheet.");
105 Label lblMicroref
= new Label(this, SWT
.NONE
);
106 lblMicroref
.setText("Enter reference detail (e.g., page no.):");
108 // Create microref input
109 txtMicroRef
= new Text(this, SWT
.BORDER
);
110 txtMicroRef
.setLayoutData(new GridData(SWT
.LEFT
, SWT
.CENTER
, true, false));
113 public void setReference(ReferenceBase
<?
> reference
) {
114 savedReference
= reference
;
115 txtReference
.setText(reference
.getTitleCache());
116 txtReference
.setEditable(false);
118 btnClearReference
.setEnabled(true);
121 public void setMicroReference(String microref
) {
122 txtMicroRef
.setText(CdmUtils
.Nz(microref
));
128 protected void popupSearch() {
129 Dialog dialog
= new ReferenceSearchDialog(getShell(),
130 IReferenceSearch
.BIBREF
);
131 Object value
= ((ReferenceSearchDialog
) dialog
).open();
133 if (value
instanceof ReferenceBase
) {
134 setSavedReference((ReferenceBase
<?
>) value
);
141 private void setSavedReference(ReferenceBase
<?
> reference
) {
143 savedReference
= reference
;
145 txtReference
.setText(reference
.getTitleCache());
146 txtReference
.setEditable(false);
148 btnClearReference
.setEnabled(true);
151 protected void clearReference() {
152 savedReference
= null;
154 txtReference
.setText("");
155 txtReference
.setEditable(true);
157 btnClearReference
.setEnabled(false);
161 * Returns reference object, if any. Otherwise, creates a new Generic
162 * reference object using text the user has input.
163 * If no text, returns null.
167 public ReferenceBase
<?
> getReference() {
168 ReferenceBase
<?
> reference
= null;
169 if (savedReference
!= null) {
170 reference
= savedReference
;
172 if (!txtReference
.getText().equals("")) {
173 reference
= Generic
.NewInstance();
174 reference
.setTitleCache(txtReference
.getText());
180 public String
getMicroReference() {
181 return txtMicroRef
.getText();