Project

General

Profile

1
package eu.dnetlib.client.leftColumn;
2

    
3
import java.util.ArrayList;
4

    
5
import com.github.gwtbootstrap.client.ui.AccordionGroup;
6
import com.github.gwtbootstrap.client.ui.Button;
7
import com.github.gwtbootstrap.client.ui.CheckBox;
8
import com.github.gwtbootstrap.client.ui.Form;
9
import com.github.gwtbootstrap.client.ui.Image;
10
import com.github.gwtbootstrap.client.ui.ListBox;
11
import com.github.gwtbootstrap.client.ui.Tab;
12
import com.github.gwtbootstrap.client.ui.TabPanel;
13
import com.github.gwtbootstrap.client.ui.TextBox;
14
import com.github.gwtbootstrap.client.ui.constants.ButtonType;
15
import com.github.gwtbootstrap.client.ui.constants.IconType;
16
import com.github.gwtbootstrap.client.ui.event.HideEvent;
17
import com.github.gwtbootstrap.client.ui.event.HideHandler;
18
import com.github.gwtbootstrap.client.ui.event.ShowEvent;
19
import com.github.gwtbootstrap.client.ui.event.ShowHandler;
20
import com.google.gwt.event.dom.client.ChangeEvent;
21
import com.google.gwt.event.dom.client.ChangeHandler;
22
import com.google.gwt.event.dom.client.ClickEvent;
23
import com.google.gwt.event.dom.client.ClickHandler;
24
import com.google.gwt.event.dom.client.LoadEvent;
25
import com.google.gwt.event.dom.client.LoadHandler;
26
import com.google.gwt.user.client.ui.FlowPanel;
27
import com.google.gwt.user.client.ui.RootPanel;
28
import com.google.gwt.user.client.ui.Widget;
29

    
30
import eu.dnetlib.client.Generate;
31
import eu.dnetlib.client.leftColumn.DataserieWidget.DeleteListener;
32
import eu.dnetlib.client.widgets.DropdownListWidget;
33
import eu.dnetlib.client.widgets.FormFieldSet;
34
import eu.dnetlib.shared.SchemaAnswer;
35
import eu.dnetlib.shared.ValuesOfFields;
36

    
37
public class OptionsWidget extends Widget {
38

    
39
	private TabPanel mainTabPanel = new TabPanel();
40
	private Tab appearanceTab = new Tab();
41
	private Tab dataSeriesTab = new Tab();
42
	private Tab generalTab = new Tab();
43
	private Tab titlesTab = new Tab();
44
	private int totalColumns=0;
45
	private int specialColumnCounter=0;
46
	private SchemaAnswer schemaFromServer;
47
	private int optionSelected=0;
48
	private ArrayList<Image> deleteImageList = new ArrayList<Image>();
49
	private ArrayList<DropdownListWidget> listBoxes = new ArrayList<DropdownListWidget>();
50
	private boolean isFromLoad;
51
	private final ArrayList<DataserieWidget> overallList = new ArrayList<DataserieWidget>();
52
	private AppearancePanel apperancePanel = new AppearancePanel();
53
	
54
	private ArrayList<FiltersPanel> filtersPanels = new ArrayList<FiltersPanel>();
55
	private final Button applyChangesGeneral = new Button();
56
	private final Button applyChangesTitles = new Button();
57
	
58
	public interface AddingDataseriesListener{
59
		public void onEvent(int numberOfColumn);
60
	}
61

    
62
	public OptionsWidget(SchemaAnswer schemaFromServer,int optionSelected,boolean isFromLoad){
63
		
64
		this.schemaFromServer = schemaFromServer;
65
		this.optionSelected = optionSelected;
66
		this.isFromLoad = isFromLoad;
67
		
68
		ValuesOfFields.getInstance().setOptionSelected(optionSelected);
69
		
70
		designAppearanceTab();
71
		designGeneralTab();
72
		designTitlesTab();
73
		designMainTabPanel();
74

    
75
		//if(!isFromLoad)
76
			//loadPresets();
77
	}
78
	
79
	public void designMainTabPanel(){
80
		
81
		mainTabPanel.setTabPosition("left");
82
		
83
		
84
		appearanceTab.setHeading("Appearance");
85
		dataSeriesTab.setHeading("Add dataseries");
86
        dataSeriesTab.asWidget().addStyleName("folderTab");
87

    
88
		final Image addDataserie = new Image("https://live.amcharts.com/static/img/icons/circle_plus.png");
89
		addDataserie.addStyleName("add-serie-icon");
90
		
91
		dataSeriesTab.addDecorate(addDataserie);
92
		if(!isFromLoad)
93
			addDataserie.addStyleName("flashing-button");
94
		
95
		dataSeriesTab.addClickHandler(new ClickHandler() {
96
			
97
			@Override
98
			public void onClick(ClickEvent event) {
99
				// TODO Auto-generated method stub
100
				event.preventDefault();
101
				addDataserie.removeStyleName("flashing-button");
102
				DataserieWidget temp = new DataserieWidget(mainTabPanel,schemaFromServer,totalColumns,specialColumnCounter,deleteImageList,listBoxes,false,dataSeriesTab,true,apperancePanel,optionSelected,filtersPanels);
103
				overallList.add(temp);
104
				
105
				mainTabPanel.clear();
106
				
107
				mainTabPanel.add(dataSeriesTab);
108
				for(int i=0;i<overallList.size();i++){
109
					mainTabPanel.add(overallList.get(i).getSingleColumn());
110
					if(i==overallList.size()-1){
111
						appearanceTab.setActive(false);
112
						generalTab.setActive(false);
113
						titlesTab.setActive(false);
114
						mainTabPanel.selectTab(1+i);
115
						overallList.get(i).getRenameTextBox().setFocus(true);
116
					}
117
				}
118
				mainTabPanel.add(appearanceTab);
119
				mainTabPanel.add(generalTab);
120
				mainTabPanel.add(titlesTab);
121
				
122
				
123
				apperancePanel.addAppearanceForDataserie(totalColumns);
124
				
125
				DeleteListener deleteListener = new DeleteListener() {
126
					
127
					@Override
128
					public void onEvent(int numberOfDeletedColumn) {
129
						overallList.remove(numberOfDeletedColumn);
130
						mainTabPanel.clear();
131
						mainTabPanel.add(dataSeriesTab);
132
						for(int i=0;i<overallList.size();i++){
133
							mainTabPanel.add(overallList.get(i).getSingleColumn());
134
							if(i==overallList.size()-1){
135
								mainTabPanel.selectTab(1+i);
136
							}
137
						}
138
						mainTabPanel.add(appearanceTab);
139
						mainTabPanel.add(generalTab);
140
						mainTabPanel.add(titlesTab);
141
						
142
						apperancePanel.deleteAppearanceOfDataseries(numberOfDeletedColumn);
143
						for(int i=numberOfDeletedColumn;i<overallList.size();i++){
144
							overallList.get(i).setNumberOfCurrentColumn(overallList.get(i).getNumberOfCurrentColumn()-1);
145
						}
146
						specialColumnCounter--;
147
					}
148
				};
149
				overallList.get(specialColumnCounter).setDeleteListener(deleteListener);
150
				totalColumns++;
151
				specialColumnCounter++;
152
			}
153
		});
154
		
155

    
156
		dataSeriesTab.asTabLink().addClickHandler(new ClickHandler() {
157
			
158
			@Override
159
			public void onClick(ClickEvent event) {
160
				// TODO Auto-generated method stub
161
				event.preventDefault();
162

    
163
				dataSeriesTab.asTabLink().setActive(false);
164
				dataSeriesTab.setEnabled(false);
165
				dataSeriesTab.asTabLink().getElement().removeClassName("disabled");
166
			}
167
		});
168
		
169
		generalTab.setHeading("General options");
170
		
171
		mainTabPanel.add(dataSeriesTab);
172
		mainTabPanel.add(appearanceTab);
173
		mainTabPanel.add(generalTab);
174
		mainTabPanel.add(titlesTab);
175
		
176
		if(isFromLoad){
177
			totalColumns=0;
178
			specialColumnCounter=0;
179
			mainTabPanel.clear();
180
			mainTabPanel.add(dataSeriesTab);
181
			for(int i=0;i<ValuesOfFields.getInstance().getColumnsDataList().size();i++){
182

    
183
				specialColumnCounter = i;
184
				DataserieWidget temp = new DataserieWidget(mainTabPanel,schemaFromServer,totalColumns,specialColumnCounter,deleteImageList,listBoxes,true,dataSeriesTab,false,apperancePanel,optionSelected,filtersPanels);
185
				overallList.add(temp);
186
				apperancePanel.addAppearanceForDataserie(totalColumns);
187
				
188
				
189
				DeleteListener deleteListener = new DeleteListener() {
190
					
191
					@Override
192
					public void onEvent(int numberOfDeletedColumn) {
193
						overallList.remove(numberOfDeletedColumn);
194
						mainTabPanel.clear();
195
						mainTabPanel.add(dataSeriesTab);
196
						for(int i=0;i<overallList.size();i++){
197
							mainTabPanel.add(overallList.get(i).getSingleColumn());
198
							if(i==overallList.size()-1){
199
								mainTabPanel.selectTab(1+i);
200
							}
201
						}
202
						mainTabPanel.add(appearanceTab);
203
						mainTabPanel.add(generalTab);
204
						mainTabPanel.add(titlesTab);
205
						
206
						apperancePanel.deleteAppearanceOfDataseries(numberOfDeletedColumn);
207
						for(int i=numberOfDeletedColumn;i<overallList.size();i++){
208
							overallList.get(i).setNumberOfCurrentColumn(overallList.get(i).getNumberOfCurrentColumn()-1);
209
						}
210
						specialColumnCounter--;
211
					}
212
				};
213
				overallList.get(specialColumnCounter).setDeleteListener(deleteListener);
214
				totalColumns++;
215
				specialColumnCounter++;
216
				mainTabPanel.add(temp.getSingleColumn());
217
				temp.getSingleColumn().setHeading(ValuesOfFields.getInstance().getColumnsDataList().get(i).getDataserieNaming());
218
			}
219
			mainTabPanel.add(appearanceTab);
220
			mainTabPanel.add(generalTab);
221
			mainTabPanel.add(titlesTab);
222
			Generate.getInstance().generateURLs(ValuesOfFields.getInstance(),1);
223
		}
224
		mainTabPanel.addStyleName("main-navigation-bar");
225
		
226
		
227
		RootPanel.get("optionsColumn").add(mainTabPanel);
228
		
229
	}
230
	
231
	public void designAppearanceTab(){
232
		appearanceTab.add(apperancePanel.asWidget());
233
	}
234
	
235
	public void designTitlesTab(){
236
		TitlesPanel titlesPanel = new TitlesPanel(isFromLoad,titlesTab);
237
		titlesTab.setHeading("Titles");
238
		titlesTab.add(titlesPanel.asWidget());
239
	}
240
	
241
	public void designGeneralTab(){
242
		
243
		FlowPanel masterPanel = new FlowPanel();
244
		
245
		
246
		applyChangesGeneral.setText("Apply");
247
		applyChangesGeneral.addStyleName("applychanges");
248
		applyChangesGeneral.setType(ButtonType.PRIMARY);
249
		applyChangesGeneral.addClickHandler(new ClickHandler() {
250
			
251
			@Override
252
			public void onClick(ClickEvent event) {
253
				// TODO Auto-generated method stub
254
				applyChangesGeneral.setEnabled(false);
255
				applyChangesGeneral.removeStyleName("flashing-button-apply");
256
				Generate.getInstance().getTheme1().addLoadHandler(new LoadHandler() {
257
					
258
					@Override
259
					public void onLoad(LoadEvent event) {
260
						applyChangesGeneral.setEnabled(true);
261
					}
262
				});
263
				Generate.getInstance().generateURLs(ValuesOfFields.getInstance(),1);
264
			}
265
		});
266
		
267
		
268
		applyChangesTitles.setText("Apply");
269
		applyChangesTitles.addStyleName("applychanges");
270
		applyChangesTitles.setType(ButtonType.PRIMARY);
271
		applyChangesTitles.addClickHandler(new ClickHandler() {
272
			
273
			@Override
274
			public void onClick(ClickEvent event) {
275
				// TODO Auto-generated method stub
276
				applyChangesTitles.setEnabled(false);
277
				applyChangesTitles.removeStyleName("flashing-button-apply");
278
				Generate.getInstance().getTheme1().addLoadHandler(new LoadHandler() {
279
					
280
					@Override
281
					public void onLoad(LoadEvent event) {
282
						applyChangesTitles.setEnabled(true);
283
					}
284
				});
285
				Generate.getInstance().generateURLs(ValuesOfFields.getInstance(),1);
286
			}
287
		});
288
		
289
		
290
		Form generalOptionsForm = new Form();
291

    
292
        final TextBox numberOfResults = new TextBox();
293
        numberOfResults.getElement().setAttribute("type", "number");
294
        numberOfResults.setText("30");
295
        numberOfResults.addChangeHandler(new ChangeHandler() {
296
			
297
			@Override
298
			public void onChange(ChangeEvent event) {
299
				if(Integer.parseInt(numberOfResults.getText())>0)
300
					ValuesOfFields.getInstance().setNumberOfResults(Integer.parseInt(numberOfResults.getText()));
301
				else
302
					ValuesOfFields.getInstance().setNumberOfResults(30);
303
				
304
//				Generate.getInstance().generateURLs(ValuesOfFields.getInstance(), 1);
305
				applyChangesGeneral.addStyleName("flashing-button-apply");
306
			}
307
		});
308
       
309

    
310
        generalOptionsForm.add(new FormFieldSet("Number of datasets", numberOfResults));
311
        
312
        
313
        final CheckBox cumulativeCheckbox = new CheckBox();
314
        generalOptionsForm.add(new FormFieldSet("Cumulative chart", cumulativeCheckbox));
315
        cumulativeCheckbox.addClickHandler(new ClickHandler() {
316
			
317
			@Override
318
			public void onClick(ClickEvent event) {
319
				if(cumulativeCheckbox.isChecked()){
320
					ValuesOfFields.getInstance().setCumulative(true);
321
				}else{
322
					ValuesOfFields.getInstance().setCumulative(false);
323
				}
324
//				Generate.getInstance().generateURLs(ValuesOfFields.getInstance(), 1);
325
				applyChangesGeneral.addStyleName("flashing-button-apply");
326
			}
327
		});
328
        
329
        final TextBox rotateTextBox = new TextBox();
330
        rotateTextBox.setPlaceholder("Degrees..");
331
        generalOptionsForm.add(new FormFieldSet("Rotation of labels", rotateTextBox));
332
        rotateTextBox.getElement().setAttribute("type", "number");
333
        rotateTextBox.addChangeHandler(new ChangeHandler() {
334
			
335
			@Override
336
			public void onChange(ChangeEvent event) {
337
				ValuesOfFields.getInstance().setRotation(Integer.parseInt(rotateTextBox.getText()));
338
//				Generate.getInstance().generateURLs(ValuesOfFields.getInstance(), 1);
339

    
340
				applyChangesGeneral.addStyleName("flashing-button-apply");
341
			}
342
		});
343

    
344
        final TextBox useStepsTextBox = new TextBox();
345
        useStepsTextBox.getElement().setAttribute("type", "number");
346
        generalOptionsForm.add(new FormFieldSet("Use steps", useStepsTextBox));
347
        useStepsTextBox.addChangeHandler(new ChangeHandler() {
348
			
349
			@Override
350
			public void onChange(ChangeEvent event) {
351
				ValuesOfFields.getInstance().setUseSteps(Integer.parseInt(useStepsTextBox.getText()));
352
//				Generate.getInstance().generateURLs(ValuesOfFields.getInstance(), 1);
353
				applyChangesGeneral.addStyleName("flashing-button-apply");
354
			}
355
		});
356

    
357

    
358
        final ListBox fontFamily = new ListBox();
359
        fontFamily.addItem("Courier");
360
        fontFamily.addItem("Arial");
361
        fontFamily.addItem("Verdana");
362
        fontFamily.addItem("Georgia");
363
        fontFamily.addItem("Palatino Linotype");
364
        fontFamily.addItem("Times New Roman");
365
        fontFamily.addItem("Comic Sans MS");
366
        fontFamily.addItem("Impact");
367
        fontFamily.addItem("Lucida Sans Unicode");
368
        fontFamily.addItem("Tahoma");
369
        fontFamily.addItem("Lucida Console");
370
        fontFamily.addItem("Courier New");
371
        fontFamily.addItem("Monaco");
372
        
373
        fontFamily.addChangeHandler(new ChangeHandler() {
374
			
375
			@Override
376
			public void onChange(ChangeEvent event) {
377
				// TODO Auto-generated method stub
378
				ValuesOfFields.getInstance().setFontFamily(fontFamily.getSelectedItemText());
379
            	applyChangesGeneral.addStyleName("flashing-button-apply");
380
			}
381
		});
382
        ValuesOfFields.getInstance().setFontFamily("Courier");
383
        generalOptionsForm.add(new FormFieldSet("Font family", fontFamily));
384
        
385
        
386
        final AccordionGroup generalOptionsGroupPanel = new AccordionGroup();
387
        generalOptionsGroupPanel.addStyleName("accordionPanel");
388
        generalOptionsGroupPanel.setHeading("GENERAL OPTIONS");
389
        generalOptionsGroupPanel.getHeading().addStyleName("accordionHeading");
390
        generalOptionsGroupPanel.add(generalOptionsForm);
391
        generalOptionsGroupPanel.add(applyChangesGeneral);
392
        generalOptionsGroupPanel.setIcon(IconType.MINUS);
393
        generalOptionsGroupPanel.setDefaultOpen(true);
394
        generalOptionsGroupPanel.addShowHandler(new ShowHandler() {
395
            @Override
396
            public void onShow(ShowEvent showEvent) {
397
                generalOptionsGroupPanel.setIcon(IconType.MINUS);
398
            }
399
        });
400
        generalOptionsGroupPanel.addHideHandler(new HideHandler() {
401
            @Override
402
            public void onHide(HideEvent hideEvent) {
403
                generalOptionsGroupPanel.setIcon(IconType.PLUS);
404
            }
405
        });
406

    
407
		masterPanel.add(generalOptionsGroupPanel);
408

    
409
		generalTab.add(masterPanel);
410
				
411
	}
412

    
413
	public void loadPresets(){
414
		int size;
415
		
416
		if(optionSelected%10==3 || (optionSelected>=50))
417
			size=1;
418
		else
419
			size=2;
420
		
421
		for(int i=0;i<1;i++){
422
			DataserieWidget temp = new DataserieWidget(mainTabPanel,schemaFromServer,totalColumns,specialColumnCounter,deleteImageList,listBoxes,false,dataSeriesTab,true,apperancePanel,optionSelected,filtersPanels);
423

    
424
			overallList.add(temp);
425
			apperancePanel.addAppearanceForDataserie(totalColumns);
426
			DeleteListener deleteListener = new DeleteListener() {
427
				
428
				@Override
429
				public void onEvent(int numberOfDeletedColumn) {
430
					apperancePanel.deleteAppearanceOfDataseries(numberOfDeletedColumn);
431
					for(int i=numberOfDeletedColumn;i<overallList.size();i++){
432
						overallList.get(i).setNumberOfCurrentColumn(overallList.get(i).getNumberOfCurrentColumn()-1);
433
					}
434
					overallList.remove(numberOfDeletedColumn);
435
					specialColumnCounter--;
436
				}
437
			};
438
			
439
			overallList.get(specialColumnCounter).setDeleteListener(deleteListener);
440
			totalColumns++;
441
			specialColumnCounter++;
442
			Generate.getInstance().generateURLs(ValuesOfFields.getInstance(), 1);
443
		}
444
		mainTabPanel.selectTab(0);
445
		appearanceTab.setActive(true);
446
		appearanceTab.setEnabled(true);
447
	}
448
	
449
	public void SwitchTabs(Tab previous, Tab next){
450
			
451
		next.setEnabled(true);
452
		next.setActive(true);
453

    
454
	}
455
}
(6-6/8)