Skip to content

Commit 2dc8b9a

Browse files
mondalacicursoragentert78gb
authored
feat: add always enable advanced settings Agent setting (#2972)
Expose a persisted checkbox in Settings that keeps the Advanced settings menu visible across restarts once enabled. Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: Kiss Róbert <ert78gb@gmail.com>
1 parent 7414d18 commit 2dc8b9a

7 files changed

Lines changed: 66 additions & 1 deletion

File tree

packages/uhk-common/src/models/application-settings.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,8 @@ export interface ApplicationSettings {
3030
* Smart Macro panel width in percent;
3131
*/
3232
smartMacroPanelWidth?: number;
33+
/**
34+
* If true, the Advanced settings menu is shown on Agent startup.
35+
*/
36+
alwaysEnableAdvancedMode?: boolean;
3337
}

packages/uhk-web/src/app/components/agent/settings/settings.component.html

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,17 @@ <h1>
3333
</div>
3434
</div>
3535

36+
<div class="col-12 mt-1" *ngIf="alwaysEnableAdvancedModeSettingVisible$ | async">
37+
<div class="checkbox d-inline-block mb-0 mt-0">
38+
<label>
39+
<input type="checkbox"
40+
[checked]="alwaysEnableAdvancedMode$ | async"
41+
(change)="toggleAlwaysEnableAdvancedMode($event.target.checked)"
42+
> Always enable advanced settings
43+
</label>
44+
</div>
45+
</div>
46+
3647

3748
<div class="col-12 col-md-6 mb-0 mt-0">
3849
<div class="d-flex align-items-center mt-2">

packages/uhk-web/src/app/components/agent/settings/settings.component.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@ import { AppTheme, AppThemeSelect } from 'uhk-common';
88
import {
99
AppState,
1010
appUpdateSettingsState,
11+
getAlwaysEnableAdvancedMode,
1112
getAnimationEnabled,
1213
getAppTheme,
14+
getIsAdvancedSettingsMenuVisible,
1315
getOperatingSystem,
1416
getSupportedThemes,
1517
keyboardHalvesAlwaysJoined
@@ -20,6 +22,7 @@ import {
2022
ToggleCheckForUpdateOnStartupAction
2123
} from '../../../store/actions/auto-update-settings';
2224
import { OpenConfigFolderAction, SetAppThemeAction, ToggleAnimationEnabledAction, ToggleKeyboardHalvesAlwaysJoinedAction } from '../../../store/actions/app';
25+
import { ToggleAlwaysEnableAdvancedModeAction } from '../../../store/actions/advance-settings.action';
2326
import { OperatingSystem } from '../../../models/operating-system';
2427

2528
@Component({
@@ -39,6 +42,8 @@ export class SettingsComponent {
3942
isLinux$: Observable<boolean>;
4043
faCog = faCog;
4144
keyboardHalvesAlwaysJoined$: Observable<boolean>;
45+
alwaysEnableAdvancedMode$: Observable<boolean>;
46+
alwaysEnableAdvancedModeSettingVisible$: Observable<boolean>;
4247

4348
constructor(private store: Store<AppState>) {
4449
this.updateSettingsState$ = store.select(appUpdateSettingsState);
@@ -47,6 +52,8 @@ export class SettingsComponent {
4752
this.themes$ = store.select(getSupportedThemes);
4853
this.isLinux$ = store.select(getOperatingSystem).pipe(map(os => os === OperatingSystem.Linux));
4954
this.keyboardHalvesAlwaysJoined$ = store.select(keyboardHalvesAlwaysJoined);
55+
this.alwaysEnableAdvancedMode$ = store.select(getAlwaysEnableAdvancedMode);
56+
this.alwaysEnableAdvancedModeSettingVisible$ = store.select(getIsAdvancedSettingsMenuVisible);
5057
}
5158

5259
openConfigFolder(): void {
@@ -73,4 +80,8 @@ export class SettingsComponent {
7380
this.store.dispatch(new ToggleKeyboardHalvesAlwaysJoinedAction(enabled));
7481
}
7582

83+
toggleAlwaysEnableAdvancedMode(enabled: boolean): void {
84+
this.store.dispatch(new ToggleAlwaysEnableAdvancedModeAction(enabled));
85+
}
86+
7687
}

packages/uhk-web/src/app/store/actions/advance-settings.action.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ export enum ActionTypes {
1919
toggleRightHalfZephyrLogging = '[advanceSettings] toggle right half zephyr logging',
2020
toggleZephyrLogging = '[advanceSettings] toggle zephyr logging',
2121
showAdvancedSettingsMenu = '[advanceSettings] show menu',
22+
toggleAlwaysEnableAdvancedMode = '[advanceSettings] toggle always enable advanced mode',
2223
zephyrLog = '[advanceSettings] zephyr log',
2324
}
2425

@@ -103,6 +104,12 @@ export class ShowAdvancedSettingsMenuAction implements Action {
103104
type = ActionTypes.showAdvancedSettingsMenu;
104105
}
105106

107+
export class ToggleAlwaysEnableAdvancedModeAction implements Action {
108+
type = ActionTypes.toggleAlwaysEnableAdvancedMode;
109+
110+
constructor(public payload: boolean) {}
111+
}
112+
106113
export class ZephyrLogAction implements Action {
107114
type = ActionTypes.zephyrLog;
108115

@@ -124,6 +131,7 @@ export type Actions =
124131
| ToggleRightHalfZephyrLoggingAction
125132
| ToggleZephyrLoggingAction
126133
| ShowAdvancedSettingsMenuAction
134+
| ToggleAlwaysEnableAdvancedModeAction
127135
| StartLeftHalfPairingAction
128136
| LeftHalfPairingSuccessAction
129137
| LeftHalfPairingFailedAction

packages/uhk-web/src/app/store/effects/app.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import {
2929
UndoLastAction
3030
} from '../actions/app';
3131
import { ActionTypes as UpdateActionTypes } from '../actions/auto-update-settings';
32+
import { ActionTypes as AdvanceSettingsActionTypes } from '../actions/advance-settings.action';
3233
import { AppRendererService } from '../../services/app-renderer.service';
3334
import { AppUpdateRendererService } from '../../services/app-update-renderer.service';
3435
import { ActionTypes as DeviceActionTypes, StartConnectionPollerAction } from '../actions/device';
@@ -145,6 +146,7 @@ export class ApplicationEffects {
145146
ActionTypes.SetAppTheme,
146147
ActionTypes.ToggleAnimationEnabled,
147148
ActionTypes.ToggleKeyboardHalvesAlwaysJoined,
149+
AdvanceSettingsActionTypes.toggleAlwaysEnableAdvancedMode,
148150
UpdateActionTypes.ToggleCheckForUpdateOnStartup,
149151
DeviceActionTypes.SaveConfiguration,
150152
SmartMacroDocActionTypes.PanelSizeChanged,

packages/uhk-web/src/app/store/index.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ export const metaReducers: MetaReducer<AppState>[] = environment.production
116116

117117
export const advanceSettingsState = (state: AppState) => state.advanceSettings;
118118
export const getIsAdvancedSettingsMenuVisible = createSelector(advanceSettingsState, fromAdvancedSettings.isAdvancedSettingsMenuVisible);
119+
export const getAlwaysEnableAdvancedMode = createSelector(advanceSettingsState, fromAdvancedSettings.isAlwaysEnableAdvancedMode);
119120
export const isLeftHalfPairing = createSelector(advanceSettingsState, fromAdvancedSettings.isLeftHalfPairing);
120121
export const getIsI2cDebuggingEnabled = createSelector(advanceSettingsState, fromAdvancedSettings.isI2cDebuggingEnabled);
121122
export const isI2cDebuggingRingBellEnabled = createSelector(advanceSettingsState, fromAdvancedSettings.isI2cDebuggingRingBellEnabled);
@@ -829,11 +830,13 @@ export const getApplicationSettings = createSelector(
829830
getSmartMacroPanelWidth,
830831
backlightingColorPalette,
831832
keyboardHalvesAlwaysJoined,
833+
getAlwaysEnableAdvancedMode,
832834
(updateSettingsState,
833835
app,
834836
smartMacroPanelWidth,
835837
backlightingColorPalette,
836838
keyboardHalvesAlwaysJoined,
839+
alwaysEnableAdvancedMode,
837840
): ApplicationSettings => {
838841
return {
839842
errorPanelHeight: app.errorPanelHeight,
@@ -843,6 +846,7 @@ export const getApplicationSettings = createSelector(
843846
appTheme: app.appTheme,
844847
backlightingColorPalette,
845848
keyboardHalvesAlwaysJoined,
849+
alwaysEnableAdvancedMode,
846850
smartMacroPanelWidth
847851
};
848852
});

packages/uhk-web/src/app/store/reducers/advanced-settings.reducer.ts

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {
99
IsDongleZephyrLoggingEnabledReplyAction,
1010
IsLeftHalfZephyrLoggingEnabledReplyAction,
1111
IsRightHalfZephyrLoggingEnabledReplyAction,
12+
ToggleAlwaysEnableAdvancedModeAction,
1213
ZephyrLogAction,
1314
} from '../actions/advance-settings.action';
1415
import * as App from '../actions/app';
@@ -23,6 +24,7 @@ export enum ActiveButton {
2324

2425
export interface State {
2526
activeButton: ActiveButton;
27+
alwaysEnableAdvancedMode: boolean;
2628
i2cDebuggingRingBellEnabled: boolean,
2729
i2cLogs: Array<XtermLog>;
2830
isLeftHalfPairing: boolean;
@@ -36,6 +38,7 @@ export interface State {
3638

3739
export const initialState = (): State => ({
3840
activeButton: ActiveButton.None,
41+
alwaysEnableAdvancedMode: false,
3942
i2cDebuggingRingBellEnabled: false,
4043
i2cLogs: [],
4144
isDongleZephyrLoggingEnabled: false,
@@ -49,6 +52,17 @@ export const initialState = (): State => ({
4952
export function reducer(state = initialState(), action: Actions | App.Actions | Device.Actions) {
5053
switch (action.type) {
5154

55+
case App.ActionTypes.LoadApplicationSettingsSuccess: {
56+
const settings = (action as App.LoadApplicationSettingsSuccessAction).payload;
57+
const alwaysEnableAdvancedMode = !!settings.alwaysEnableAdvancedMode;
58+
59+
return {
60+
...state,
61+
alwaysEnableAdvancedMode,
62+
menuVisible: alwaysEnableAdvancedMode || state.menuVisible,
63+
};
64+
}
65+
5266
case App.ActionTypes.ElectronMainLogReceived: {
5367
if (!state.isLeftHalfPairing) {
5468
return state;
@@ -212,7 +226,17 @@ export function reducer(state = initialState(), action: Actions | App.Actions |
212226
case ActionTypes.showAdvancedSettingsMenu: {
213227
return {
214228
...state,
215-
menuVisible: true
229+
menuVisible: true,
230+
};
231+
}
232+
233+
case ActionTypes.toggleAlwaysEnableAdvancedMode: {
234+
const alwaysEnableAdvancedMode = (action as ToggleAlwaysEnableAdvancedModeAction).payload;
235+
236+
return {
237+
...state,
238+
alwaysEnableAdvancedMode,
239+
menuVisible: alwaysEnableAdvancedMode || state.menuVisible,
216240
};
217241
}
218242

@@ -240,6 +264,7 @@ export function reducer(state = initialState(), action: Actions | App.Actions |
240264
}
241265

242266
export const isAdvancedSettingsMenuVisible = (state: State): boolean => state.menuVisible;
267+
export const isAlwaysEnableAdvancedMode = (state: State): boolean => state.alwaysEnableAdvancedMode;
243268
export const isLeftHalfPairing = (state: State): boolean => state.isLeftHalfPairing;
244269
export const isI2cDebuggingEnabled = (state: State): boolean => state.activeButton === ActiveButton.I2CRecoveryDebugging;
245270
export const isI2cDebuggingRingBellEnabled = (state: State): boolean => state.i2cDebuggingRingBellEnabled;

0 commit comments

Comments
 (0)