Skip to content

Commit 892a83e

Browse files
committed
New config for object filters
1 parent 8ae2a3f commit 892a83e

4 files changed

Lines changed: 37 additions & 10 deletions

File tree

package.json

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -514,6 +514,21 @@
514514
"default": true,
515515
"description": "If enabled, objects will be sorted by object name. If disabled, objects will be sorted by object type (MI object type)."
516516
},
517+
"code-for-ibmi.ObjectBrowser.filterDetails": {
518+
"type": "string",
519+
"default": "both",
520+
"enum": [
521+
"both",
522+
"tooltip",
523+
"description"
524+
],
525+
"enumDescriptions": [
526+
"Show the details next to the filter name and in its hover",
527+
"Only show the details in the filter's hover",
528+
"Only show the details next to the filter name"
529+
],
530+
"description": "Where the details of an object filter (libraries, objects, members, etc.) are shown in the Object Browser."
531+
},
517532
"code-for-ibmi.IfsBrowser.DragAndDropDefaultBehavior": {
518533
"type": "string",
519534
"default": "ask",
@@ -3448,4 +3463,4 @@
34483463
"halcyontechltd.vscode-ibmi-walkthroughs",
34493464
"vscode.git"
34503465
]
3451-
}
3466+
}

src/api/configuration/config/types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { Action, ConnectionData, DeploymentMethod } from "../../types";
33

44
export type DefaultOpenMode = "browse" | "edit";
55
export type ReconnectMode = "always" | "never" | "ask";
6+
export type FilterDetails = "tooltip" | "description" | "both";
67

78
export interface ConnectionConfig extends ConnectionProfile {
89
host: string;
@@ -69,6 +70,7 @@ export interface GlobalConfiguration {
6970
safeDeleteMode: boolean;
7071
'ObjectBrowser.showNamesInLowercase': boolean;
7172
'ObjectBrowser.sortObjectsByName': boolean;
73+
'ObjectBrowser.filterDetails': FilterDetails;
7274
autoOpenFile: boolean;
7375
'terminals.5250.openInEditorArea': boolean;
7476
'terminals.pase.openInEditorArea': boolean;

src/ui/Tools.ts

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -221,12 +221,15 @@ export namespace VscodeTools {
221221
}
222222

223223
export function filterToToolTip(filter: ObjectFilters) {
224-
const tooltip = new MarkdownString(generateTooltipHtmlTable(filter.name, {
225-
"Object": filter.object,
226-
"Library": filter.library,
227-
"Member": filter.member,
228-
"Type": filter.memberType || `*`,
229-
"Text": filter.memberText || `*`
224+
const tooltip = new MarkdownString(generateTooltipHtmlTable(escapeHtml(filter.name), {
225+
"Filtering type": filter.filterType === `regex` ? vscode.l10n.t(`Regex`) : vscode.l10n.t(`Simple`),
226+
"Libraries": escapeHtml(filter.library),
227+
"Objects": escapeHtml(filter.object),
228+
"Object types": escapeHtml(filter.types.join(`, `)),
229+
"Members": escapeHtml(filter.member),
230+
"Member type": escapeHtml(filter.memberType || `*`),
231+
"Member text": escapeHtml(filter.memberText || `*`),
232+
"Protected": filter.protected ? vscode.l10n.t(`Yes`) : undefined
230233
}));
231234
tooltip.supportHtml = true;
232235
return tooltip;

src/ui/views/objectBrowser.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import IBMi, { MemberParts } from "../../api/IBMi";
77
import { SortOptions, SortOrder } from "../../api/IBMiContent";
88
import { SearchTools } from "../../api/SearchTools";
99
import { Tools } from "../../api/Tools";
10+
import { onCodeForIBMiConfigurationChange } from "../../config/Configuration";
1011
import { getMemberUri } from "../../filesystems/qsys/QSysFs";
1112
import { instance } from "../../instantiate";
1213
import { CommandResult, DefaultOpenMode, FilteredItem, FocusOptions, IBMiMember, IBMiObject, MemberItem, OBJECT_BROWSER_MIMETYPE, ObjectFilters, ObjectItem, WithLibrary } from "../../typings";
@@ -16,6 +17,7 @@ import { BrowserItem, BrowserItemParameters } from "../types";
1617

1718
const objectNamesLower = () => IBMi.connectionManager.get<boolean>(`ObjectBrowser.showNamesInLowercase`);
1819
const objectSortOrder = () => IBMi.connectionManager.get<SortOrder>(`ObjectBrowser.sortObjectsByName`) ? `name` : `type`;
20+
const filterDetails = () => IBMi.connectionManager.get(`ObjectBrowser.filterDetails`) || `both`;
1921

2022
const correctCase = (value: string) => {
2123
;
@@ -176,9 +178,12 @@ class ObjectBrowserFilterItem extends ObjectBrowserItem implements WithLibrary {
176178
super(filter, filter.name, { icon: filter.protected ? `lock-small` : '', state: vscode.TreeItemCollapsibleState.Collapsed });
177179
this.library = parseFilter(filter.library, filter.filterType).noFilter ? filter.library : '';
178180
this.contextValue = `filter${this.library ? "_library" : ''}${this.isProtected() ? `_readonly` : ``}`;
179-
const memberTextSuffix = filter.memberText && !/^\*(?:ALL)?$/.test(filter.memberText.trim()) ? ` [${filter.memberText}]` : ``;
180-
this.description = `${filter.library}/${filter.object}/${filter.member}.${filter.memberType || `*`} (${filter.types.join(`, `)})${memberTextSuffix}`;
181-
this.tooltip = VscodeTools.filterToToolTip(filter);
181+
const details = filterDetails();
182+
if (details !== `tooltip`) {
183+
const memberTextSuffix = filter.memberText && !/^\*(?:ALL)?$/.test(filter.memberText.trim()) ? ` [${filter.memberText}]` : ``;
184+
this.description = `${filter.library}/${filter.object}/${filter.member}.${filter.memberType || `*`} (${filter.types.join(`, `)})${memberTextSuffix}`;
185+
}
186+
this.tooltip = details !== `description` ? VscodeTools.filterToToolTip(filter) : ``;
182187

183188
if (this.library) {
184189
this.resourceUri = vscode.Uri.from({
@@ -561,6 +566,8 @@ export function initializeObjectBrowser(context: vscode.ExtensionContext) {
561566
context.subscriptions.push(
562567
objectTreeViewer,
563568

569+
onCodeForIBMiConfigurationChange(`ObjectBrowser.filterDetails`, () => objectBrowser.refresh()),
570+
564571
vscode.commands.registerCommand(`code-for-ibmi.sortMembersByName`, (item: ObjectBrowserSourcePhysicalFileItem | ObjectBrowserMemberItem) => {
565572
item.sortBy({ order: "name" });
566573
}),

0 commit comments

Comments
 (0)