提交 63f79bc8 编写于 作者: S Serge Rider

#6447 SQL editor: confirm results tabs close

上级 dfce1d0b
......@@ -101,24 +101,25 @@ public class PrefPageConfirmations extends AbstractPrefPage implements IWorkbenc
}
};
createConfirmCheckbox(CoreMessages.pref_page_confirmations_group_general_actions, coreBundle, DBeaverPreferences.CONFIRM_EXIT);
createConfirmCheckbox(CoreMessages.pref_page_confirmations_group_general_actions, rsvBundle, ResultSetPreferences.CONFIRM_ORDER_RESULTSET);
//createConfirmCheckbox(CoreMessages.pref_page_confirmations_group_general_actions, rsvBundle, ResultSetPreferences.CONFIRM_RS_EDIT_CLOSE);
createConfirmCheckbox(CoreMessages.pref_page_confirmations_group_general_actions, rsvBundle, ResultSetPreferences.CONFIRM_RS_FETCH_ALL);
createConfirmCheckbox(CoreMessages.pref_page_confirmations_group_general_actions, coreBundle, DBeaverPreferences.CONFIRM_TXN_DISCONNECT);
createConfirmCheckbox(CoreMessages.pref_page_confirmations_group_general_actions, coreBundle, DBeaverPreferences.CONFIRM_DRIVER_DOWNLOAD);
createConfirmCheckbox(CoreMessages.pref_page_confirmations_group_general_actions, coreBundle, DBeaverPreferences.CONFIRM_VERSION_CHECK);
//createConfirmCheckbox(CoreMessages.pref_page_confirmations_group_object_editor, navigatorBundle, NavigatorPreferences.CONFIRM_ENTITY_EDIT_CLOSE);
createConfirmCheckbox(CoreMessages.pref_page_confirmations_group_object_editor, navigatorBundle, NavigatorPreferences.CONFIRM_ENTITY_DELETE);
createConfirmCheckbox(CoreMessages.pref_page_confirmations_group_object_editor, navigatorBundle, NavigatorPreferences.CONFIRM_ENTITY_REJECT);
createConfirmCheckbox(CoreMessages.pref_page_confirmations_group_object_editor, navigatorBundle, NavigatorPreferences.CONFIRM_ENTITY_REVERT);
createConfirmCheckbox(CoreMessages.pref_page_confirmations_group_object_editor, rsvBundle, ResultSetPreferences.CONFIRM_KEEP_STATEMENT_OPEN);
createConfirmCheckbox(CoreMessages.pref_page_confirmations_group_object_editor, sqlBundle, SQLPreferenceConstants.CONFIRM_DANGER_SQL);
createConfirmCheckbox(CoreMessages.pref_page_confirmations_group_object_editor, sqlBundle, SQLPreferenceConstants.CONFIRM_MASS_PARALLEL_SQL);
createConfirmCheckbox(CoreMessages.pref_page_confirmations_group_object_editor, sqlBundle, SQLPreferenceConstants.CONFIRM_RUNNING_QUERY_CLOSE);
//createConfirmCheckbox(CoreMessages.pref_page_confirmations_group_object_editor, navigatorBundle, NavigatorPreferences.CONFIRM_EDITOR_CLOSE);
createConfirmItem(CoreMessages.pref_page_confirmations_group_general_actions, coreBundle, DBeaverPreferences.CONFIRM_EXIT);
createConfirmItem(CoreMessages.pref_page_confirmations_group_general_actions, rsvBundle, ResultSetPreferences.CONFIRM_ORDER_RESULTSET);
//createConfirmItem(CoreMessages.pref_page_confirmations_group_general_actions, rsvBundle, ResultSetPreferences.CONFIRM_RS_EDIT_CLOSE);
createConfirmItem(CoreMessages.pref_page_confirmations_group_general_actions, rsvBundle, ResultSetPreferences.CONFIRM_RS_FETCH_ALL);
createConfirmItem(CoreMessages.pref_page_confirmations_group_general_actions, coreBundle, DBeaverPreferences.CONFIRM_TXN_DISCONNECT);
createConfirmItem(CoreMessages.pref_page_confirmations_group_general_actions, coreBundle, DBeaverPreferences.CONFIRM_DRIVER_DOWNLOAD);
createConfirmItem(CoreMessages.pref_page_confirmations_group_general_actions, coreBundle, DBeaverPreferences.CONFIRM_VERSION_CHECK);
//createConfirmItem(CoreMessages.pref_page_confirmations_group_object_editor, navigatorBundle, NavigatorPreferences.CONFIRM_ENTITY_EDIT_CLOSE);
createConfirmItem(CoreMessages.pref_page_confirmations_group_object_editor, navigatorBundle, NavigatorPreferences.CONFIRM_ENTITY_DELETE);
createConfirmItem(CoreMessages.pref_page_confirmations_group_object_editor, navigatorBundle, NavigatorPreferences.CONFIRM_ENTITY_REJECT);
createConfirmItem(CoreMessages.pref_page_confirmations_group_object_editor, navigatorBundle, NavigatorPreferences.CONFIRM_ENTITY_REVERT);
createConfirmItem(CoreMessages.pref_page_confirmations_group_object_editor, rsvBundle, ResultSetPreferences.CONFIRM_KEEP_STATEMENT_OPEN);
createConfirmItem(CoreMessages.pref_page_confirmations_group_object_editor, sqlBundle, SQLPreferenceConstants.CONFIRM_DANGER_SQL);
createConfirmItem(CoreMessages.pref_page_confirmations_group_object_editor, sqlBundle, SQLPreferenceConstants.CONFIRM_MASS_PARALLEL_SQL);
createConfirmItem(CoreMessages.pref_page_confirmations_group_object_editor, sqlBundle, SQLPreferenceConstants.CONFIRM_RUNNING_QUERY_CLOSE);
createConfirmItem(CoreMessages.pref_page_confirmations_group_object_editor, sqlBundle, SQLPreferenceConstants.CONFIRM_RESULT_TABS_CLOSE);
//createConfirmItem(CoreMessages.pref_page_confirmations_group_object_editor, navigatorBundle, NavigatorPreferences.CONFIRM_EDITOR_CLOSE);
UIUtils.asyncExec(() -> UIUtils.packColumns(confirmTable, true));
......@@ -127,7 +128,7 @@ public class PrefPageConfirmations extends AbstractPrefPage implements IWorkbenc
return composite;
}
private void createConfirmCheckbox(String group, ResourceBundle bundle, String id)
private void createConfirmItem(String group, ResourceBundle bundle, String id)
{
String labelKey = ConfirmationDialog.getResourceKey(id, ConfirmationDialog.RES_KEY_TITLE);
String title = bundle.getString(labelKey);
......
......@@ -106,6 +106,7 @@ import org.jkiss.dbeaver.ui.editors.EditorUtils;
import org.jkiss.dbeaver.ui.editors.INonPersistentEditorInput;
import org.jkiss.dbeaver.ui.editors.StringEditorInput;
import org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob;
import org.jkiss.dbeaver.ui.editors.sql.internal.SQLEditorActivator;
import org.jkiss.dbeaver.ui.editors.sql.internal.SQLEditorMessages;
import org.jkiss.dbeaver.ui.editors.sql.log.SQLLogPanel;
import org.jkiss.dbeaver.ui.editors.sql.plan.ExplainPlanViewer;
......@@ -113,7 +114,9 @@ import org.jkiss.dbeaver.ui.editors.sql.registry.SQLPresentationDescriptor;
import org.jkiss.dbeaver.ui.editors.sql.registry.SQLPresentationPanelDescriptor;
import org.jkiss.dbeaver.ui.editors.sql.registry.SQLPresentationRegistry;
import org.jkiss.dbeaver.ui.editors.text.ScriptPositionColumn;
import org.jkiss.dbeaver.ui.internal.UINavigatorMessages;
import org.jkiss.dbeaver.ui.navigator.INavigatorModelView;
import org.jkiss.dbeaver.ui.navigator.NavigatorPreferences;
import org.jkiss.dbeaver.utils.GeneralUtils;
import org.jkiss.dbeaver.utils.PrefUtils;
import org.jkiss.dbeaver.utils.RuntimeUtils;
......@@ -964,7 +967,7 @@ public class SQLEditor extends SQLEditorBase implements
@Override
public void run()
{
closeExtraResultTabs(null);
closeExtraResultTabs(null, false);
}
});
int pinnedTabsCount = 0;
......@@ -1806,6 +1809,7 @@ public class SQLEditor extends SQLEditorBase implements
if (getActivePreferenceStore().getBoolean(SQLPreferenceConstants.AUTO_SAVE_ON_EXECUTE) && isDirty()) {
doSave(new NullProgressMonitor());
}
boolean extraTabsClosed = false;
if (!export) {
if (getActivePreferenceStore().getBoolean(SQLPreferenceConstants.CLEAR_OUTPUT_BEFORE_EXECUTE)) {
outputViewer.clearOutput();
......@@ -1813,7 +1817,10 @@ public class SQLEditor extends SQLEditorBase implements
if (!newTab || !isSingleQuery) {
// We don't need new tab or we are executing a script - so close all extra tabs
closeExtraResultTabs(null);
if (!closeExtraResultTabs(null, true)) {
return;
}
extraTabsClosed = true;
}
}
......@@ -1852,7 +1859,11 @@ public class SQLEditor extends SQLEditorBase implements
}
}
}
closeExtraResultTabs(curQueryProcessor);
if (!extraTabsClosed) {
if (!closeExtraResultTabs(curQueryProcessor, true)) {
return;
}
}
if (firstResults.tabItem != null) {
// Do not switch tab if Output tab is active
CTabItem selectedTab = resultTabs.getSelection();
......@@ -1873,9 +1884,10 @@ public class SQLEditor extends SQLEditorBase implements
}
}
private void closeExtraResultTabs(@Nullable QueryProcessor queryProcessor)
private boolean closeExtraResultTabs(@Nullable QueryProcessor queryProcessor, boolean confirmClose)
{
// Close all tabs except first one
List<CTabItem> tabsToClose = new ArrayList<>();
for (int i = resultTabs.getItemCount() - 1; i > 0; i--) {
CTabItem item = resultTabs.getItem(i);
if (item.getData() instanceof QueryResultsContainer && item.getShowClose()) {
......@@ -1887,11 +1899,32 @@ public class SQLEditor extends SQLEditorBase implements
// Do not remove first tab for this processor
continue;
}
item.dispose();
tabsToClose.add(item);
} else if (item.getData() instanceof ExplainPlanViewer) {
item.dispose();
tabsToClose.add(item);
}
}
if (!tabsToClose.isEmpty()) {
int confirmResult = IDialogConstants.YES_ID;
if (confirmClose) {
confirmResult = ConfirmationDialog.showConfirmDialog(
ResourceBundle.getBundle(SQLEditorMessages.BUNDLE_NAME),
getSite().getShell(),
SQLPreferenceConstants.CONFIRM_RESULT_TABS_CLOSE,
ConfirmationDialog.QUESTION_WITH_CANCEL,
tabsToClose.size());
if (confirmResult == IDialogConstants.CANCEL_ID) {
return false;
}
}
if (confirmResult == IDialogConstants.YES_ID) {
for (CTabItem item : tabsToClose) {
item.dispose();
}
}
}
return true;
}
private boolean checkSession(DBRProgressListener onFinish)
......
......@@ -134,6 +134,7 @@ public class SQLPreferenceConstants
public static final String CONFIRM_DANGER_SQL = "dangerous_sql"; //$NON-NLS-1$
public static final String CONFIRM_MASS_PARALLEL_SQL = "mass_parallel_sql"; //$NON-NLS-1$
public static final String CONFIRM_RUNNING_QUERY_CLOSE = "close_running_query"; //$NON-NLS-1$
public static final String CONFIRM_RESULT_TABS_CLOSE = "close_result_tabs"; //$NON-NLS-1$
}
......@@ -3,6 +3,10 @@ confirm_close_running_query_title=Cancel running queries
confirm_close_running_query_message=There are "{0}" running SQL queries in this editor. Are you sure you want to cancel them and close the editor?
confirm_close_running_query_toggleMessage = Don't ask again
confirm_close_result_tabs_title=Close result tabs
confirm_close_result_tabs_message=There are "{0}" unpinned result tabs. Do you want to close these tabs before executing new query?
confirm_close_result_tabs_toggleMessage = Don't ask again
confirm_dangerous_sql_message = You are about to execute {0} statement without a WHERE clause on "{1}".\nPossible data loss. Are you sure?
confirm_dangerous_sql_title = Confirm dangerous query execution
confirm_dangerous_sql_toggleMessage = Remember choice
......
......@@ -3,6 +3,10 @@ confirm_close_running_query_title=\u041E\u0442\u043C\u0435\u043D\u0438\u0442\u04
confirm_close_running_query_message=\u0412 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0435 \u0437\u0430\u043F\u0443\u0449\u0435\u043D\u043E "{0}" SQL \u0437\u0430\u043F\u0440\u043E\u0441\u043E\u0432. \u0412\u0441\u0451 \u0440\u0430\u0432\u043D\u043E \u0437\u0430\u043A\u0440\u044B\u0442\u044C \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440?
confirm_close_running_query_toggleMessage=\u0411\u043E\u043B\u044C\u0448\u0435 \u043D\u0435 \u0441\u043F\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044C
confirm_close_result_tabs_title=\u0417\u0430\u043A\u0440\u044B\u0442\u044C \u0432\u043A\u043B\u0430\u0434\u043A\u0438 \u0441 \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u0430\u043C\u0438
confirm_close_result_tabs_message=\u041E\u0442\u043A\u0440\u044B\u0442\u043E "{0}" \u0432\u043A\u043B\u0430\u0434\u043E\u043A \u0441 \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u0430\u043C\u0438 \u0437\u0430\u043F\u0440\u043E\u0441\u043E\u0432. \u0417\u0430\u043A\u0440\u044B\u0442\u044C \u0438\u0445 \u043F\u0435\u0440\u0435\u0434 \u0432\u044B\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0435 \u043D\u043E\u0432\u043E\u0433\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0430?
confirm_close_result_tabs_toggleMessage = \u0411\u043E\u043B\u044C\u0448\u0435 \u043D\u0435 \u0441\u043F\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044C
confirm_dangerous_sql_message = \u0412\u044B \u0441\u043E\u0431\u0438\u0440\u0430\u0435\u0442\u0435\u0441\u044C \u0432\u044B\u043F\u043E\u043B\u043D\u0438\u0442\u044C \u0437\u0430\u043F\u0440\u043E\u0441 {0} \u0431\u0435\u0437 \u0443\u0441\u043B\u043E\u0432\u0438\u044F WHERE \u0434\u043B\u044F "{1}".\n\u0412\u043E\u0437\u043C\u043E\u0436\u043D\u0430 \u043F\u043E\u0442\u0435\u0440\u044F \u0434\u0430\u043D\u043D\u044B\u0445. \u0412\u044B \u0443\u0432\u0435\u0440\u0435\u043D\u044B?
confirm_dangerous_sql_title = \u041F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043D\u0438\u0435 \u0432\u044B\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u044F \u043E\u043F\u0430\u0441\u043D\u043E\u0433\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0430
confirm_dangerous_sql_toggleMessage = \u0417\u0430\u043F\u043E\u043C\u043D\u0438\u0442\u044C \u0432\u044B\u0431\u043E\u0440
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册