/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org)
* Copyright (C) 2011-2012 Eugene Fradkin (eugene.fradkin@gmail.com)
*
* Licensed 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.jkiss.dbeaver.ext.erd.editor;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.draw2d.PrintFigureOperation;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.*;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.eclipse.ui.IWorkbenchPropertyPage;
import org.jkiss.dbeaver.ext.erd.ERDActivator;
import org.jkiss.dbeaver.ext.erd.ERDConstants;
import org.jkiss.dbeaver.ext.erd.ERDMessages;
import org.jkiss.dbeaver.model.preferences.DBPPreferenceStore;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.preferences.AbstractPrefPage;
import org.jkiss.dbeaver.utils.PrefUtils;
import org.jkiss.utils.ArrayUtils;
import java.util.ArrayList;
import java.util.List;
/**
* ERDPreferencePage
*/
public class ERDPreferencePage extends AbstractPrefPage implements IWorkbenchPreferencePage, IWorkbenchPropertyPage {
public static final String PAGE_ID = "org.jkiss.dbeaver.preferences.erd.general"; //$NON-NLS-1$
private IAdaptable element;
private Button contentsShowViews;
private Combo modeCombo;
private Spinner spinnerMarginTop;
private Spinner spinnerMarginBottom;
private Spinner spinnerMarginLeft;
private Spinner spinnerMarginRight;
private Button gridCheck;
private Button snapCheck;
private Spinner spinnerGridWidth;
private Spinner spinnerGridHeight;
private List<Button> visibilityButtons = new ArrayList<>();
private List<Button> styleButtons = new ArrayList<>();
@Override
protected Control createContents(Composite parent)
{
IPreferenceStore store = ERDActivator.getDefault().getPreferenceStore();
Composite composite = UIUtils.createPlaceholder(parent, 2, 5);
createContentsGroup(store, composite);
createVisibilityGroup(store, composite);
createStyleGroup(store, composite);
createGridGroup(store, composite);
createPrintGroup(store, composite);
return composite;
}
private void createContentsGroup(IPreferenceStore store, Composite composite)
{
Group contentsGroup = UIUtils.createControlGroup(composite, "Diagram contents", 1, GridData.VERTICAL_ALIGN_BEGINNING | GridData.FILL_HORIZONTAL, 0);
((GridData)contentsGroup.getLayoutData()).horizontalSpan = 2;
contentsShowViews = UIUtils.createCheckbox(contentsGroup, "Show views", store.getBoolean(ERDConstants.PREF_DIAGRAM_SHOW_VIEWS));
}
private void createVisibilityGroup(IPreferenceStore store, Composite composite)
{
ERDAttributeVisibility defaultVisibility = ERDAttributeVisibility.getDefaultVisibility(store);
Group elemsGroup = UIUtils.createControlGroup(composite, "Attributes visibility", 1, GridData.VERTICAL_ALIGN_BEGINNING | GridData.FILL_HORIZONTAL, 0);
for (ERDAttributeVisibility visibility : ERDAttributeVisibility.values()) {
Button radio = new Button(elemsGroup, SWT.RADIO);
radio.setData(visibility);
radio.setText(visibility.getTitle());
if (visibility == defaultVisibility) {
radio.setSelection(true);
}
visibilityButtons.add(radio);
}
}
private void createStyleGroup(IPreferenceStore store, Composite composite)
{
ERDAttributeStyle[] enabledStyles = ERDAttributeStyle.getDefaultStyles(store);
Group elemsGroup = UIUtils.createControlGroup(composite, "Attribute styles", 1, GridData.VERTICAL_ALIGN_BEGINNING | GridData.FILL_HORIZONTAL, 0);
for (ERDAttributeStyle style : ERDAttributeStyle.values()) {
Button check = new Button(elemsGroup, SWT.CHECK);
check.setData(style);
check.setText(style.getTitle());
if (ArrayUtils.contains(enabledStyles, style)) {
check.setSelection(true);
}
styleButtons.add(check);
}
}
private void createGridGroup(IPreferenceStore store, Composite composite)
{
Group gridGroup = UIUtils.createControlGroup(composite, ERDMessages.pref_page_erd_group_grid, 2, GridData.VERTICAL_ALIGN_BEGINNING, 0);
gridCheck = UIUtils.createCheckbox(gridGroup, ERDMessages.pref_page_erd_checkbox_grid_enabled, null, store.getBoolean(ERDConstants.PREF_GRID_ENABLED), 2);
snapCheck = UIUtils.createCheckbox(gridGroup, ERDMessages.pref_page_erd_checkbox_snap_to_grid, null, store.getBoolean(ERDConstants.PREF_GRID_SNAP_ENABLED), 2);
spinnerGridWidth = UIUtils.createLabelSpinner(gridGroup, ERDMessages.pref_page_erd_spinner_grid_width, store.getInt(ERDConstants.PREF_GRID_WIDTH), 5, Short.MAX_VALUE);
spinnerGridHeight = UIUtils.createLabelSpinner(gridGroup, ERDMessages.pref_page_erd_spinner_grid_height, store.getInt(ERDConstants.PREF_GRID_HEIGHT), 5, Short.MAX_VALUE);
}
private void createPrintGroup(IPreferenceStore store, Composite composite)
{
Group printGroup = UIUtils.createControlGroup(composite, ERDMessages.pref_page_erd_group_print, 2, GridData.VERTICAL_ALIGN_BEGINNING, 0);
modeCombo = UIUtils.createLabelCombo(printGroup, ERDMessages.pref_page_erd_combo_page_mode, SWT.READ_ONLY | SWT.DROP_DOWN);
modeCombo.add(ERDMessages.pref_page_erd_item_tile);
modeCombo.add(ERDMessages.pref_page_erd_item_fit_page);
modeCombo.add(ERDMessages.pref_page_erd_item_fit_width);
modeCombo.add(ERDMessages.pref_page_erd_item_fit_height);
int modeIndex = 0;
switch (store.getInt(ERDConstants.PREF_PRINT_PAGE_MODE)) {
case PrintFigureOperation.FIT_PAGE: modeIndex = 1; break;
case PrintFigureOperation.FIT_WIDTH: modeIndex = 2; break;
case PrintFigureOperation.FIT_HEIGHT: modeIndex = 3; break;
}
modeCombo.select(modeIndex);
spinnerMarginTop = UIUtils.createLabelSpinner(printGroup, ERDMessages.pref_page_erd_spinner_margin_top, store.getInt(ERDConstants.PREF_PRINT_MARGIN_TOP), 0, Short.MAX_VALUE);
spinnerMarginBottom = UIUtils.createLabelSpinner(printGroup, ERDMessages.pref_page_erd_spinner_margin_bottom, store.getInt(ERDConstants.PREF_PRINT_MARGIN_BOTTOM), 0, Short.MAX_VALUE);
spinnerMarginLeft = UIUtils.createLabelSpinner(printGroup, ERDMessages.pref_page_erd_spinner_margin_left, store.getInt(ERDConstants.PREF_PRINT_MARGIN_LEFT), 0, Short.MAX_VALUE);
spinnerMarginRight = UIUtils.createLabelSpinner(printGroup, ERDMessages.pref_page_erd_spinner_margin_right, store.getInt(ERDConstants.PREF_PRINT_MARGIN_RIGHT), 0, Short.MAX_VALUE);
}
@Override
public void init(IWorkbench workbench)
{
}
@Override
protected void performDefaults()
{
super.performDefaults();
}
@Override
public boolean performOk()
{
DBPPreferenceStore store = ERDActivator.getDefault().getPreferences();
store.setValue(ERDConstants.PREF_DIAGRAM_SHOW_VIEWS, contentsShowViews.getSelection());
store.setValue(ERDConstants.PREF_GRID_ENABLED, gridCheck.getSelection());
store.setValue(ERDConstants.PREF_GRID_SNAP_ENABLED, snapCheck.getSelection());
store.setValue(ERDConstants.PREF_GRID_WIDTH, spinnerGridWidth.getSelection());
store.setValue(ERDConstants.PREF_GRID_HEIGHT, spinnerGridHeight.getSelection());
int pageMode;
switch (modeCombo.getSelectionIndex()) {
case 1: pageMode = PrintFigureOperation.FIT_PAGE; break;
case 2: pageMode = PrintFigureOperation.FIT_WIDTH; break;
case 3: pageMode = PrintFigureOperation.FIT_HEIGHT; break;
default: pageMode = PrintFigureOperation.TILE; break;
}
store.setValue(ERDConstants.PREF_PRINT_PAGE_MODE, pageMode);
store.setValue(ERDConstants.PREF_PRINT_MARGIN_TOP, spinnerMarginTop.getSelection());
store.setValue(ERDConstants.PREF_PRINT_MARGIN_BOTTOM, spinnerMarginBottom.getSelection());
store.setValue(ERDConstants.PREF_PRINT_MARGIN_LEFT, spinnerMarginLeft.getSelection());
store.setValue(ERDConstants.PREF_PRINT_MARGIN_RIGHT, spinnerMarginRight.getSelection());
for (Button radio : visibilityButtons) {
if (radio.getSelection()) {
ERDAttributeVisibility.setDefaultVisibility(store, (ERDAttributeVisibility) radio.getData());
}
}
List<ERDAttributeStyle> enabledStyles = new ArrayList<>();
for (Button check : styleButtons) {
if (check.getSelection()) {
enabledStyles.add((ERDAttributeStyle) check.getData());
}
}
ERDAttributeStyle.setDefaultStyles(store, enabledStyles.toArray(new ERDAttributeStyle[enabledStyles.size()]));
PrefUtils.savePreferenceStore(store);
return true;
}
@Override
public IAdaptable getElement()
{
return element;
}
@Override
public void setElement(IAdaptable element)
{
this.element = element;
}
}