#406 keyboard shortcut to show/hide sidebar

This commit is contained in:
Jan Prochazka
2022-11-10 11:36:31 +01:00
parent 4fa043b7e5
commit ed71ef312d
10 changed files with 60 additions and 18 deletions

View File

@@ -69,6 +69,7 @@ module.exports = ({ editMenu }) => [
{ command: 'app.toggleDevTools', hideDisabled: true }, { command: 'app.toggleDevTools', hideDisabled: true },
{ command: 'app.toggleFullScreen', hideDisabled: true }, { command: 'app.toggleFullScreen', hideDisabled: true },
{ command: 'app.minimize', hideDisabled: true }, { command: 'app.minimize', hideDisabled: true },
{ command: 'toggle.sidebar' },
{ divider: true }, { divider: true },
{ command: 'theme.changeTheme', hideDisabled: true }, { command: 'theme.changeTheme', hideDisabled: true },
{ command: 'settings.show' }, { command: 'settings.show' },

View File

@@ -8,6 +8,7 @@
leftPanelWidth, leftPanelWidth,
openedSnackbars, openedSnackbars,
selectedWidget, selectedWidget,
visibleWidgetSideBar,
visibleCommandPalette, visibleCommandPalette,
visibleTitleBar, visibleTitleBar,
visibleToolbar, visibleToolbar,
@@ -63,7 +64,7 @@
<div class="statusbar"> <div class="statusbar">
<StatusBar /> <StatusBar />
</div> </div>
{#if $selectedWidget} {#if $selectedWidget && $visibleWidgetSideBar}
<div class="leftpanel"> <div class="leftpanel">
<WidgetContainer /> <WidgetContainer />
</div> </div>
@@ -74,7 +75,7 @@
<div class="content"> <div class="content">
<TabRegister /> <TabRegister />
</div> </div>
{#if $selectedWidget} {#if $selectedWidget && $visibleWidgetSideBar}
<div <div
class="horizontal-split-handle splitter" class="horizontal-split-handle splitter"
use:splitterDrag={'clientX'} use:splitterDrag={'clientX'}

View File

@@ -180,6 +180,7 @@
}); });
currentArchive.set(resp.archiveFolder); currentArchive.set(resp.archiveFolder);
selectedWidget.set('archive'); selectedWidget.set('archive');
visibleWidgetSideBar.set(true);
showSnackbarSuccess(`Saved to archive ${resp.archiveFolder}`); showSnackbarSuccess(`Saved to archive ${resp.archiveFolder}`);
}; };
@@ -338,6 +339,7 @@
openedSingleDatabaseConnections, openedSingleDatabaseConnections,
pinnedDatabases, pinnedDatabases,
selectedWidget, selectedWidget,
visibleWidgetSideBar,
} from '../stores'; } from '../stores';
import getElectron from '../utility/getElectron'; import getElectron from '../utility/getElectron';
import openNewTab from '../utility/openNewTab'; import openNewTab from '../utility/openNewTab';

View File

@@ -6,6 +6,7 @@ import {
getExtensions, getExtensions,
getVisibleToolbar, getVisibleToolbar,
visibleToolbar, visibleToolbar,
visibleWidgetSideBar,
} from '../stores'; } from '../stores';
import registerCommand from './registerCommand'; import registerCommand from './registerCommand';
import { get } from 'svelte/store'; import { get } from 'svelte/store';
@@ -83,6 +84,15 @@ registerCommand({
onClick: () => showModal(AboutModal), onClick: () => showModal(AboutModal),
}); });
registerCommand({
id: 'toggle.sidebar',
category: 'Sidebar',
name: 'Show',
toolbarName: 'Toggle sidebar',
keyText: 'CtrlOrCommand+B',
onClick: () => visibleWidgetSideBar.update(x => !x),
});
registerCommand({ registerCommand({
id: 'new.connection', id: 'new.connection',
toolbar: true, toolbar: true,

View File

@@ -16,7 +16,7 @@
import { getDefaultFileFormat } from '../plugins/fileformats'; import { getDefaultFileFormat } from '../plugins/fileformats';
import RunnerOutputFiles from '../query/RunnerOutputFiles.svelte'; import RunnerOutputFiles from '../query/RunnerOutputFiles.svelte';
import SocketMessageView from '../query/SocketMessageView.svelte'; import SocketMessageView from '../query/SocketMessageView.svelte';
import { currentArchive, currentDatabase, extensions, getCurrentConfig, selectedWidget } from '../stores'; import { currentArchive, currentDatabase, extensions, visibleWidgetSideBar, selectedWidget } from '../stores';
import { apiCall, apiOff, apiOn } from '../utility/api'; import { apiCall, apiOff, apiOn } from '../utility/api';
import createRef from '../utility/createRef'; import createRef from '../utility/createRef';
import openNewTab from '../utility/openNewTab'; import openNewTab from '../utility/openNewTab';
@@ -85,6 +85,7 @@
apiCall('archive/refresh-files', { folder: refreshArchiveFolderRef.get() }); apiCall('archive/refresh-files', { folder: refreshArchiveFolderRef.get() });
$currentArchive = refreshArchiveFolderRef.get(); $currentArchive = refreshArchiveFolderRef.get();
$selectedWidget = 'archive'; $selectedWidget = 'archive';
$visibleWidgetSideBar = true;
} }
}; };

View File

@@ -18,7 +18,13 @@
import { closeCurrentModal } from '../modals/modalTools'; import { closeCurrentModal } from '../modals/modalTools';
import { EDITOR_THEMES, FONT_SIZES } from '../query/AceEditor.svelte'; import { EDITOR_THEMES, FONT_SIZES } from '../query/AceEditor.svelte';
import SqlEditor from '../query/SqlEditor.svelte'; import SqlEditor from '../query/SqlEditor.svelte';
import { currentEditorFontSize, currentEditorTheme, extensions, selectedWidget } from '../stores'; import {
currentEditorFontSize,
currentEditorTheme,
extensions,
selectedWidget,
visibleWidgetSideBar,
} from '../stores';
import { isMac } from '../utility/common'; import { isMac } from '../utility/common';
import getElectron from '../utility/getElectron'; import getElectron from '../utility/getElectron';
import ThemeSkeleton from './ThemeSkeleton.svelte'; import ThemeSkeleton from './ThemeSkeleton.svelte';
@@ -47,6 +53,7 @@ ORDER BY
function openThemePlugins() { function openThemePlugins() {
closeCurrentModal(); closeCurrentModal();
$selectedWidget = 'plugins'; $selectedWidget = 'plugins';
$visibleWidgetSideBar = true;
} }
</script> </script>
@@ -123,7 +130,6 @@ ORDER BY
{ value: 'lowerCase', label: 'lower case' }, { value: 'lowerCase', label: 'lower case' },
]} ]}
/> />
</svelte:fragment> </svelte:fragment>
<svelte:fragment slot="2"> <svelte:fragment slot="2">
<div class="heading">Application theme</div> <div class="heading">Application theme</div>

View File

@@ -50,6 +50,11 @@ function subscribeCssVariable(store, transform, cssVariable) {
} }
export const selectedWidget = writableWithStorage('database', 'selectedWidget'); export const selectedWidget = writableWithStorage('database', 'selectedWidget');
export const visibleWidgetSideBar = writableWithStorage(true, 'visibleWidgetSideBar');
export const visibleSelectedWidget = derived(
[selectedWidget, visibleWidgetSideBar],
([$selectedWidget, $visibleWidgetSideBar]) => ($visibleWidgetSideBar ? $selectedWidget : null)
);
export const emptyConnectionGroupNames = writableWithStorage([], 'emptyConnectionGroupNames'); export const emptyConnectionGroupNames = writableWithStorage([], 'emptyConnectionGroupNames');
export const openedConnections = writable([]); export const openedConnections = writable([]);
export const openedSingleDatabaseConnections = writable([]); export const openedSingleDatabaseConnections = writable([]);
@@ -128,7 +133,7 @@ export const visibleHamburgerMenuWidget = derived(useSettings(), $settings => {
return !!$settings['app.fullscreen']; return !!$settings['app.fullscreen'];
}); });
subscribeCssVariable(selectedWidget, x => (x ? 1 : 0), '--dim-visible-left-panel'); subscribeCssVariable(visibleSelectedWidget, x => (x ? 1 : 0), '--dim-visible-left-panel');
// subscribeCssVariable(visibleToolbar, x => (x ? 1 : 0), '--dim-visible-toolbar'); // subscribeCssVariable(visibleToolbar, x => (x ? 1 : 0), '--dim-visible-toolbar');
subscribeCssVariable(leftPanelWidth, x => `${x}px`, '--dim-left-panel-width'); subscribeCssVariable(leftPanelWidth, x => `${x}px`, '--dim-left-panel-width');
subscribeCssVariable(visibleTitleBar, x => (x ? 1 : 0), '--dim-visible-titlebar'); subscribeCssVariable(visibleTitleBar, x => (x ? 1 : 0), '--dim-visible-titlebar');

View File

@@ -1,6 +1,6 @@
import { get } from 'svelte/store'; import { get } from 'svelte/store';
import getElectron from './getElectron'; import getElectron from './getElectron';
import { currentArchive, extensions, selectedWidget } from '../stores'; import { currentArchive, extensions, selectedWidget, visibleWidgetSideBar } from '../stores';
import { showSnackbarSuccess } from './snackbar'; import { showSnackbarSuccess } from './snackbar';
import { apiCall } from './api'; import { apiCall } from './api';
@@ -16,5 +16,6 @@ export async function openArchiveFolder() {
currentArchive.set(resp); currentArchive.set(resp);
selectedWidget.set('archive'); selectedWidget.set('archive');
visibleWidgetSideBar.set(true);
showSnackbarSuccess(`Created link ${resp}`); showSnackbarSuccess(`Created link ${resp}`);
} }

View File

@@ -1,5 +1,5 @@
<script lang="ts"> <script lang="ts">
import { selectedWidget } from '../stores'; import { visibleSelectedWidget } from '../stores';
import ArchiveWidget from './ArchiveWidget.svelte'; import ArchiveWidget from './ArchiveWidget.svelte';
import DatabaseWidget from './DatabaseWidget.svelte'; import DatabaseWidget from './DatabaseWidget.svelte';
import FilesWidget from './FilesWidget.svelte'; import FilesWidget from './FilesWidget.svelte';
@@ -9,23 +9,23 @@
import AppWidget from './AppWidget.svelte'; import AppWidget from './AppWidget.svelte';
</script> </script>
<DatabaseWidget hidden={$selectedWidget != 'database'} /> <DatabaseWidget hidden={$visibleSelectedWidget != 'database'} />
{#if $selectedWidget == 'file'} {#if $visibleSelectedWidget == 'file'}
<FilesWidget /> <FilesWidget />
{/if} {/if}
{#if $selectedWidget == 'history'} {#if $visibleSelectedWidget == 'history'}
<HistoryWidget /> <HistoryWidget />
{/if} {/if}
{#if $selectedWidget == 'archive'} {#if $visibleSelectedWidget == 'archive'}
<ArchiveWidget /> <ArchiveWidget />
{/if} {/if}
{#if $selectedWidget == 'plugins'} {#if $visibleSelectedWidget == 'plugins'}
<PluginsWidget /> <PluginsWidget />
{/if} {/if}
{#if $selectedWidget == 'cell-data'} {#if $visibleSelectedWidget == 'cell-data'}
<CellDataWidget /> <CellDataWidget />
{/if} {/if}
{#if $selectedWidget == 'app'} {#if $visibleSelectedWidget == 'app'}
<AppWidget /> <AppWidget />
{/if} {/if}

View File

@@ -1,7 +1,13 @@
<script lang="ts"> <script lang="ts">
import { onMount } from 'svelte'; import { onMount } from 'svelte';
import FontIcon from '../icons/FontIcon.svelte'; import FontIcon from '../icons/FontIcon.svelte';
import { currentDropDownMenu, selectedWidget, visibleCommandPalette, visibleHamburgerMenuWidget } from '../stores'; import {
currentDropDownMenu,
selectedWidget,
visibleSelectedWidget,
visibleWidgetSideBar,
visibleHamburgerMenuWidget,
} from '../stores';
import mainMenuDefinition from '../../../../app/src/mainMenuDefinition'; import mainMenuDefinition from '../../../../app/src/mainMenuDefinition';
import { useConfig } from '../utility/metadataLoaders'; import { useConfig } from '../utility/metadataLoaders';
import hasPermission from '../utility/hasPermission'; import hasPermission from '../utility/hasPermission';
@@ -60,7 +66,12 @@
]; ];
function handleChangeWidget(name) { function handleChangeWidget(name) {
$selectedWidget = name == $selectedWidget ? null : name; if ($visibleSelectedWidget == name) {
$visibleWidgetSideBar = false;
} else {
$selectedWidget = name;
$visibleWidgetSideBar = true;
}
} }
//const handleChangeWidget= e => (selectedWidget.set(item.name)) //const handleChangeWidget= e => (selectedWidget.set(item.name))
@@ -90,7 +101,11 @@
</div> </div>
{/if} {/if}
{#each widgets.filter(x => hasPermission(`widgets/${x.name}`)) as item} {#each widgets.filter(x => hasPermission(`widgets/${x.name}`)) as item}
<div class="wrapper" class:selected={item.name == $selectedWidget} on:click={() => handleChangeWidget(item.name)}> <div
class="wrapper"
class:selected={item.name == $visibleSelectedWidget}
on:click={() => handleChangeWidget(item.name)}
>
<FontIcon icon={item.icon} title={item.title} /> <FontIcon icon={item.icon} title={item.title} />
</div> </div>
{/each} {/each}