提交 8e62248c 编写于 作者: S serge-rider

#350 Remember dialog output folder in preferences.

Dialog utils refactoring.


Former-commit-id: ecd853e5
上级 ee06a3bd
......@@ -27,6 +27,7 @@ import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.dialogs.ActiveWizardPage;
import org.jkiss.dbeaver.ui.dialogs.DialogUtils;
class CompareObjectsPageOutput extends ActiveWizardPage<CompareObjectsWizard> {
......@@ -98,7 +99,7 @@ class CompareObjectsPageOutput extends ActiveWizardPage<CompareObjectsWizard> {
}
});
outputFolderText = UIUtils.createOutputFolderChooser(outputSettings, null, null);
outputFolderText = DialogUtils.createOutputFolderChooser(outputSettings, null, null);
outputFolderText.setText(settings.getOutputFolder());
UIUtils.enableWithChildren(outputFolderText.getParent(), settings.getOutputType() == CompareObjectsSettings.OutputType.FILE);
outputFolderText.addModifyListener(new ModifyListener() {
......
......@@ -29,6 +29,7 @@ import org.jkiss.dbeaver.core.CoreMessages;
import org.jkiss.dbeaver.tools.transfer.wizard.DataTransferWizard;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.dialogs.ActiveWizardPage;
import org.jkiss.dbeaver.ui.dialogs.DialogUtils;
import org.jkiss.dbeaver.utils.GeneralUtils;
import org.jkiss.utils.CommonUtils;
......@@ -75,7 +76,7 @@ public class StreamConsumerPageOutput extends ActiveWizardPage<DataTransferWizar
updatePageCompletion();
}
});
directoryText = UIUtils.createOutputFolderChooser(generalSettings, null, new ModifyListener() {
directoryText = DialogUtils.createOutputFolderChooser(generalSettings, null, new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
settings.setOutputFolder(directoryText.getText());
......
......@@ -55,7 +55,6 @@ import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.DBeaverPreferences;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.core.CoreMessages;
import org.jkiss.dbeaver.core.DBeaverActivator;
import org.jkiss.dbeaver.core.DBeaverCore;
import org.jkiss.dbeaver.core.DBeaverUI;
......@@ -880,36 +879,6 @@ public class UIUtils {
setHelp(control, DBeaverCore.PLUGIN_ID, helpContextID);
}
@NotNull
public static Text createOutputFolderChooser(final Composite parent, @Nullable String label,
@Nullable ModifyListener changeListener)
{
final String message = label != null ? label : CoreMessages.data_transfer_wizard_output_label_directory;
UIUtils.createControlLabel(parent, message);
final TextWithOpen directoryText = new TextWithOpen(parent) {
@Override
protected void openBrowser() {
DirectoryDialog dialog = new DirectoryDialog(parent.getShell(), SWT.NONE);
dialog.setMessage("Choose target directory");
dialog.setText(message);
String directory = getText();
if (!CommonUtils.isEmpty(directory)) {
dialog.setFilterPath(directory);
}
directory = dialog.open();
if (directory != null) {
setText(directory);
}
}
};
directoryText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
if (changeListener != null) {
directoryText.getTextControl().addModifyListener(changeListener);
}
return directoryText.getTextControl();
}
public static String makeAnchor(String text)
{
return "<a>" + text + "</a>"; //$NON-NLS-1$ //$NON-NLS-2$
......
......@@ -18,10 +18,11 @@
package org.jkiss.dbeaver.ui.dialogs;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.*;
import org.eclipse.ui.PlatformUI;
import org.jkiss.code.NotNull;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.core.CoreMessages;
import org.jkiss.dbeaver.core.DBeaverCore;
......@@ -33,9 +34,11 @@ import org.jkiss.dbeaver.model.impl.ExternalContentStorage;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.runtime.DBRRunnableWithProgress;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.controls.TextWithOpen;
import org.jkiss.dbeaver.ui.data.IValueController;
import org.jkiss.dbeaver.utils.ContentUtils;
import org.jkiss.dbeaver.utils.GeneralUtils;
import org.jkiss.dbeaver.utils.RuntimeUtils;
import org.jkiss.utils.CommonUtils;
import java.io.File;
......@@ -50,7 +53,16 @@ public class DialogUtils {
static final Log log = Log.getLog(DialogUtils.class);
public static String curDialogFolder = System.getProperty("user.home");
private static final String DIALOG_FOLDER_PROPERTY = "dialog.default.folder";
public static String curDialogFolder;
static {
curDialogFolder = DBeaverCore.getGlobalPreferenceStore().getString(DIALOG_FOLDER_PROPERTY);
if (CommonUtils.isEmpty(curDialogFolder)) {
curDialogFolder = RuntimeUtils.getUserHomeDir().getAbsolutePath();
}
}
public static File selectFileForSave(Shell parentShell, String valueName)
{
......@@ -110,12 +122,12 @@ public class DialogUtils {
public static String openFileDialog(FileDialog fileDialog)
{
if (curDialogFolder == null) {
if (curDialogFolder != null) {
fileDialog.setFilterPath(curDialogFolder);
}
String fileName = fileDialog.open();
if (!CommonUtils.isEmpty(fileName)) {
curDialogFolder = fileDialog.getFilterPath();
setCurDialogFolder(fileDialog.getFilterPath());
}
return fileName;
}
......@@ -213,6 +225,41 @@ public class DialogUtils {
public static void setCurDialogFolder(String curDialogFolder)
{
DBeaverCore.getGlobalPreferenceStore().setValue(DIALOG_FOLDER_PROPERTY, curDialogFolder);
DialogUtils.curDialogFolder = curDialogFolder;
}
@NotNull
public static Text createOutputFolderChooser(final Composite parent, @Nullable String label,
@Nullable ModifyListener changeListener)
{
final String message = label != null ? label : CoreMessages.data_transfer_wizard_output_label_directory;
UIUtils.createControlLabel(parent, message);
final TextWithOpen directoryText = new TextWithOpen(parent) {
@Override
protected void openBrowser() {
DirectoryDialog dialog = new DirectoryDialog(parent.getShell(), SWT.NONE);
dialog.setMessage("Choose target directory");
dialog.setText(message);
String directory = getText();
if (CommonUtils.isEmpty(directory)) {
directory = curDialogFolder;
}
if (!CommonUtils.isEmpty(directory)) {
dialog.setFilterPath(directory);
}
directory = dialog.open();
if (directory != null) {
setText(directory);
setCurDialogFolder(directory);
}
}
};
directoryText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
if (changeListener != null) {
directoryText.getTextControl().addModifyListener(changeListener);
}
return directoryText.getTextControl();
}
}
......@@ -39,6 +39,7 @@ import org.jkiss.dbeaver.registry.encode.SecuredPasswordEncrypter;
import org.jkiss.dbeaver.registry.maven.MavenRegistry;
import org.jkiss.dbeaver.registry.maven.MavenRepository;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.dialogs.DialogUtils;
import org.jkiss.dbeaver.ui.dialogs.EnterNameDialog;
import org.jkiss.dbeaver.utils.PrefUtils;
import org.jkiss.utils.CommonUtils;
......@@ -187,7 +188,7 @@ public class PrefPageDrivers extends PreferencePage implements IWorkbenchPrefere
{
Group drivers = UIUtils.createControlGroup(composite, CoreMessages.pref_page_drivers_group_location, 2, GridData.FILL_HORIZONTAL, 300);
customDriversHome = UIUtils.createOutputFolderChooser(drivers, "Local folder", null);
customDriversHome = DialogUtils.createOutputFolderChooser(drivers, "Local folder", null);
}
......
......@@ -35,6 +35,7 @@ import org.jkiss.dbeaver.model.exec.DBCExecutionPurpose;
import org.jkiss.dbeaver.model.qm.QMConstants;
import org.jkiss.dbeaver.model.qm.QMObjectType;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.dialogs.DialogUtils;
import org.jkiss.dbeaver.utils.PrefUtils;
import org.jkiss.utils.CommonUtils;
......@@ -108,7 +109,7 @@ public class PrefPageQueryManager extends PreferencePage implements IWorkbenchPr
UIUtils.enableWithChildren(textOutputFolder.getParent(), checkStoreLog.getSelection());
}
});
textOutputFolder = UIUtils.createOutputFolderChooser(storageSettings, CoreMessages.pref_page_query_manager_logs_folder, null);
textOutputFolder = DialogUtils.createOutputFolderChooser(storageSettings, CoreMessages.pref_page_query_manager_logs_folder, null);
textHistoryDays = UIUtils.createLabelText(storageSettings, CoreMessages.pref_page_query_manager_label_days_to_store_log, "", SWT.BORDER, new GridData(50, SWT.DEFAULT)); //$NON-NLS-2$
textHistoryDays.setEnabled(false);
}
......
......@@ -32,6 +32,7 @@ import org.jkiss.dbeaver.ext.db2.DB2Constants;
import org.jkiss.dbeaver.model.DBPDataSourceContainer;
import org.jkiss.dbeaver.model.connection.DBPConnectionConfiguration;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.dialogs.DialogUtils;
import org.jkiss.dbeaver.ui.dialogs.connection.ConnectionPageAbstract;
import org.jkiss.utils.CommonUtils;
......@@ -105,7 +106,7 @@ public class DB2ConnectionTracePage extends ConnectionPageAbstract
traceGroup.setLayout(new GridLayout(2, false));
traceGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
folderText = UIUtils.createOutputFolderChooser(traceGroup, "Folder", null);
folderText = DialogUtils.createOutputFolderChooser(traceGroup, "Folder", null);
fileNameText = UIUtils.createLabelText(traceGroup, "File name", "trace");
traceAppendCheck = UIUtils.createLabelCheckbox(traceGroup, "Append", false);
......
......@@ -86,8 +86,8 @@ class MySQLExportWizard extends AbstractToolWizard<DBSObject, MySQLDatabaseExpor
public void setOutputFolder(File outputFolder)
{
if (outputFolder != null && outputFolder.getParentFile() != null) {
DialogUtils.setCurDialogFolder(outputFolder.getParentFile().getAbsolutePath());
if (outputFolder != null) {
DialogUtils.setCurDialogFolder(outputFolder.getAbsolutePath());
}
this.outputFolder = outputFolder;
}
......
......@@ -23,8 +23,6 @@ import org.eclipse.swt.events.*;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.*;
import org.jkiss.dbeaver.ext.mysql.MySQLMessages;
import org.jkiss.dbeaver.model.DBIcon;
import org.jkiss.dbeaver.ui.DBeaverIcons;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.dialogs.DialogUtils;
import org.jkiss.utils.CommonUtils;
......@@ -35,7 +33,7 @@ import java.io.File;
class MySQLExportWizardPageSettings extends MySQLWizardPageSettings<MySQLExportWizard>
{
private Text outputFileText;
private Text outputFolderText;
private Combo methodCombo;
private Button noCreateStatementsCheck;
private Button addDropStatementsCheck;
......@@ -94,30 +92,16 @@ class MySQLExportWizardPageSettings extends MySQLWizardPageSettings<MySQLExportW
removeDefiner = UIUtils.createCheckbox(settingsGroup, MySQLMessages.tools_db_export_wizard_page_settings_checkbox_remove_definer, wizard.comments);
removeDefiner.addSelectionListener(changeListener);
Group outputGroup = UIUtils.createControlGroup(composite, MySQLMessages.tools_db_export_wizard_page_settings_group_output, 3, GridData.FILL_HORIZONTAL, 0);
outputFileText = UIUtils.createLabelText(outputGroup, MySQLMessages.tools_db_export_wizard_page_settings_label_out_text, null);
if (wizard.getOutputFolder() != null) {
outputFileText.setText(wizard.getOutputFolder().getAbsolutePath());
}
outputFileText.addModifyListener(new ModifyListener() {
Group outputGroup = UIUtils.createControlGroup(composite, MySQLMessages.tools_db_export_wizard_page_settings_group_output, 2, GridData.FILL_HORIZONTAL, 0);
outputFolderText = DialogUtils.createOutputFolderChooser(outputGroup, MySQLMessages.tools_db_export_wizard_page_settings_label_out_text, new ModifyListener() {
@Override
public void modifyText(ModifyEvent e)
{
public void modifyText(ModifyEvent e) {
updateState();
}
});
Button browseButton = new Button(outputGroup, SWT.PUSH);
browseButton.setImage(DBeaverIcons.getImage(DBIcon.TREE_FOLDER));
browseButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
File file = DialogUtils.selectFileForSave(getShell(), MySQLMessages.tools_db_export_wizard_page_settings_file_selector_title, new String[]{"*.sql", "*.txt", "*.*"}, outputFileText.getText()); //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
if (file != null) {
outputFileText.setText(file.getAbsolutePath());
updateState();
}
}
});
if (wizard.getOutputFolder() != null) {
outputFolderText.setText(wizard.getOutputFolder().getAbsolutePath());
}
createSecurityGroup(composite);
......@@ -126,7 +110,7 @@ class MySQLExportWizardPageSettings extends MySQLWizardPageSettings<MySQLExportW
private void updateState()
{
String fileName = outputFileText.getText();
String fileName = outputFolderText.getText();
wizard.setOutputFolder(CommonUtils.isEmpty(fileName) ? null : new File(fileName));
switch (methodCombo.getSelectionIndex()) {
case 0: wizard.method = MySQLExportWizard.DumpMethod.ONLINE; break;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册