diff --git a/Native/Android/LunarConsole/lunarConsole/src/androidTest/java/spacemadness/com/lunarconsole/console/actions/ActionRegistryTest.java b/Native/Android/LunarConsole/lunarConsole/src/androidTest/java/spacemadness/com/lunarconsole/console/actions/ActionRegistryTest.java index 4f158dad..fae7ebb6 100644 --- a/Native/Android/LunarConsole/lunarConsole/src/androidTest/java/spacemadness/com/lunarconsole/console/actions/ActionRegistryTest.java +++ b/Native/Android/LunarConsole/lunarConsole/src/androidTest/java/spacemadness/com/lunarconsole/console/actions/ActionRegistryTest.java @@ -148,6 +148,11 @@ public void didDidChangeVariable(ActionRegistry registry, Variable variable, int fail("Implement me"); } + @Override + public void didRemoveVariable(ActionRegistry registry, Variable variable, int index) { + addResult(String.format("removed variable: %s (%d)", variable.getName(), index)); + } + //////////////////////////////////////////////////////////////////////////////////////////////// // Helpers diff --git a/Native/Android/LunarConsole/lunarConsole/src/full/java/spacemadness/com/lunarconsole/console/ActionRegistryFilter.java b/Native/Android/LunarConsole/lunarConsole/src/full/java/spacemadness/com/lunarconsole/console/ActionRegistryFilter.java index 855568a4..859619b7 100644 --- a/Native/Android/LunarConsole/lunarConsole/src/full/java/spacemadness/com/lunarconsole/console/ActionRegistryFilter.java +++ b/Native/Android/LunarConsole/lunarConsole/src/full/java/spacemadness/com/lunarconsole/console/ActionRegistryFilter.java @@ -197,6 +197,21 @@ public void didDidChangeVariable(ActionRegistry registry, Variable variable, int _delegate.actionRegistryFilterDidChangeVariable(this, variable, index); } + @Override + public void didRemoveVariable(ActionRegistry registry, Variable variable, int index) { + if (isFiltering()) { + index = filteredArrayIndexOfEntry(_filteredVariables, variable); + if (index == -1) { + return; + } + + variable = _filteredVariables.get(index); + _filteredVariables.remove(index); + } + + _delegate.actionRegistryFilterDidRemoveVariable(this, variable, index); + } + //////////////////////////////////////////////////////////////////////////////////////////////// // Properties @@ -243,5 +258,7 @@ public interface Delegate { void actionRegistryFilterDidRegisterVariable(ActionRegistryFilter registryFilter, Variable variable, int index); void actionRegistryFilterDidChangeVariable(ActionRegistryFilter registryFilter, Variable variable, int index); + + void actionRegistryFilterDidRemoveVariable(ActionRegistryFilter registryFilter, Variable variable, int index); } } diff --git a/Native/Android/LunarConsole/lunarConsole/src/full/java/spacemadness/com/lunarconsole/console/ConsoleActionView.java b/Native/Android/LunarConsole/lunarConsole/src/full/java/spacemadness/com/lunarconsole/console/ConsoleActionView.java index e82610b8..4ff918e8 100644 --- a/Native/Android/LunarConsole/lunarConsole/src/full/java/spacemadness/com/lunarconsole/console/ConsoleActionView.java +++ b/Native/Android/LunarConsole/lunarConsole/src/full/java/spacemadness/com/lunarconsole/console/ConsoleActionView.java @@ -235,6 +235,11 @@ public void actionRegistryFilterDidRegisterVariable(ActionRegistryFilter registr public void actionRegistryFilterDidChangeVariable(ActionRegistryFilter registryFilter, Variable variable, int index) { notifyDataChanged(); } + @Override + public void actionRegistryFilterDidRemoveVariable(ActionRegistryFilter registryFilter, Variable variable, int index) { + notifyDataChanged(); + updateNoActionWarningView(); + } //////////////////////////////////////////////////////////////////////////////////////////////// // Data Source diff --git a/Native/Android/LunarConsole/lunarConsole/src/main/java/spacemadness/com/lunarconsole/console/ActionRegistry.java b/Native/Android/LunarConsole/lunarConsole/src/main/java/spacemadness/com/lunarconsole/console/ActionRegistry.java index 9866ddef..3ba004e4 100644 --- a/Native/Android/LunarConsole/lunarConsole/src/main/java/spacemadness/com/lunarconsole/console/ActionRegistry.java +++ b/Native/Android/LunarConsole/lunarConsole/src/main/java/spacemadness/com/lunarconsole/console/ActionRegistry.java @@ -102,6 +102,19 @@ public void updateVariable(int variableId, String value) { } } + public boolean removeVariable(int variableId) { + int index = indexOfVariable(variableId); + if (index != -1) { + Variable var = variables.objectAtIndex(index); + variables.removeObjectAtIndex(index); + notifyVariableRemove(var, index); + return true; + } else { + Log.e("Can't server cvar value: variable id %d not found", variableId); + } + return false; + } + public Variable findVariable(int variableId) { int index = indexOfVariable(variableId); return index != -1 ? variables.objectAtIndex(index) : null; @@ -148,6 +161,12 @@ private void notifyVariableChange(Variable cvar, int index) { } } + private void notifyVariableRemove(Variable cvar, int index){ + if(delegate != null){ + delegate.didRemoveVariable(this, cvar, index); + } + } + //region Getters/Setters public List getActions() @@ -185,6 +204,8 @@ public interface Delegate // FIXME: rename void didRegisterVariable(ActionRegistry registry, Variable variable, int index); void didDidChangeVariable(ActionRegistry registry, Variable variable, int index); + + void didRemoveVariable(ActionRegistry registry, Variable variable, int index); } //endregion diff --git a/Native/Android/LunarConsole/lunarConsole/src/main/java/spacemadness/com/lunarconsole/console/ConsolePlugin.java b/Native/Android/LunarConsole/lunarConsole/src/main/java/spacemadness/com/lunarconsole/console/ConsolePlugin.java index 1704b46e..994fa114 100644 --- a/Native/Android/LunarConsole/lunarConsole/src/main/java/spacemadness/com/lunarconsole/console/ConsolePlugin.java +++ b/Native/Android/LunarConsole/lunarConsole/src/main/java/spacemadness/com/lunarconsole/console/ConsolePlugin.java @@ -254,6 +254,10 @@ public void updateVariable(int variableId, String value) { actionRegistry.updateVariable(variableId, value); } + public void removeVariable(int variableId){ + actionRegistry.removeVariable(variableId); + } + @Override public void destroy() { removeConsoleView(); diff --git a/Native/Android/LunarConsole/lunarConsole/src/main/java/spacemadness/com/lunarconsole/console/NativeBridge.java b/Native/Android/LunarConsole/lunarConsole/src/main/java/spacemadness/com/lunarconsole/console/NativeBridge.java index 0327b323..eafa3e56 100644 --- a/Native/Android/LunarConsole/lunarConsole/src/main/java/spacemadness/com/lunarconsole/console/NativeBridge.java +++ b/Native/Android/LunarConsole/lunarConsole/src/main/java/spacemadness/com/lunarconsole/console/NativeBridge.java @@ -169,6 +169,15 @@ protected void execute() { }); } + public static void removeVariable(final int variableId){ + dispatchQueue.dispatch(new DispatchTask() { + @Override + protected void execute() { + plugin.removeVariable(variableId); + } + }); + } + public static void destroy() { dispatchQueue.dispatch(new DispatchTask("destroy plugin") { @Override diff --git a/Native/iOS/LunarConsole/LunarConsole/Common/Console/Plugin/LUConsolePlugin.h b/Native/iOS/LunarConsole/LunarConsole/Common/Console/Plugin/LUConsolePlugin.h index 68c5802e..cf77a80d 100644 --- a/Native/iOS/LunarConsole/LunarConsole/Common/Console/Plugin/LUConsolePlugin.h +++ b/Native/iOS/LunarConsole/LunarConsole/Common/Console/Plugin/LUConsolePlugin.h @@ -87,6 +87,8 @@ extern NSString * const LUConsoleCheckFullVersionNotificationSource; - (LUCVar *)registerVariableWithId:(int)entryId name:(NSString *)name type:(NSString *)type value:(NSString *)value defaultValue:(NSString *)defaultValue values:(NSArray *)values; - (void)setValue:(NSString *)value forVariableWithId:(int)variableId; +- (void)removeVariableWithId:(int)variableId; + - (void)enableGestureRecognition; - (void)disableGestureRecognition; diff --git a/Native/iOS/LunarConsole/LunarConsole/Common/Console/Plugin/LUConsolePlugin.m b/Native/iOS/LunarConsole/LunarConsole/Common/Console/Plugin/LUConsolePlugin.m index a416319b..1b5f72ad 100644 --- a/Native/iOS/LunarConsole/LunarConsole/Common/Console/Plugin/LUConsolePlugin.m +++ b/Native/iOS/LunarConsole/LunarConsole/Common/Console/Plugin/LUConsolePlugin.m @@ -257,6 +257,11 @@ - (void)setValue:(NSString *)value forVariableWithId:(int)variableId [_actionRegistry setValue:value forVariableWithId:variableId]; } +- (void)removeVariableWithId:(int)actionId +{ + [_actionRegistry removeVariableWithId:actionId]; +} + #pragma mark - #pragma mark Warnings diff --git a/Native/iOS/LunarConsole/LunarConsole/Common/Console/Plugin/lunar_unity_native_interface.h b/Native/iOS/LunarConsole/LunarConsole/Common/Console/Plugin/lunar_unity_native_interface.h index ce90cb8a..ce5ab29d 100644 --- a/Native/iOS/LunarConsole/LunarConsole/Common/Console/Plugin/lunar_unity_native_interface.h +++ b/Native/iOS/LunarConsole/LunarConsole/Common/Console/Plugin/lunar_unity_native_interface.h @@ -44,5 +44,6 @@ OBJC_EXTERN void __lunar_console_action_unregister(int actionId); // variables OBJC_EXTERN void __lunar_console_cvar_register(int entryId, const char *name, const char *type, const char *value, const char *defaultValue, int flags, BOOL hasRange, float min, float max, const char *values); OBJC_EXTERN void __lunar_console_cvar_update(int entryId, const char *value); +OBJC_EXTERN void __lunar_console_cvar_remove(int variableId); #endif /* defined(__LunarConsole__unity_native_interface__) */ diff --git a/Native/iOS/LunarConsole/LunarConsole/Common/Console/Plugin/lunar_unity_native_interface.m b/Native/iOS/LunarConsole/LunarConsole/Common/Console/Plugin/lunar_unity_native_interface.m index 77cc89f0..57cc0a79 100644 --- a/Native/iOS/LunarConsole/LunarConsole/Common/Console/Plugin/lunar_unity_native_interface.m +++ b/Native/iOS/LunarConsole/LunarConsole/Common/Console/Plugin/lunar_unity_native_interface.m @@ -142,3 +142,14 @@ void __lunar_console_cvar_update(int entryId, const char *valueStr) [_lunarConsolePlugin setValue:value forVariableWithId:entryId]; }); } + +void __lunar_console_cvar_remove(int variableId) +{ + if ([NSThread isMainThread]) { + [_lunarConsolePlugin removeVariableWithId:variableId]; + } else { + dispatch_async(dispatch_get_main_queue(), ^{ + [_lunarConsolePlugin removeVariableWithId:variableId]; + }); + } +} diff --git a/Native/iOS/LunarConsole/LunarConsole/Common/Controllers/Actions/LUActionRegistry.h b/Native/iOS/LunarConsole/LunarConsole/Common/Controllers/Actions/LUActionRegistry.h index 824deb9f..d5a5a945 100644 --- a/Native/iOS/LunarConsole/LunarConsole/Common/Controllers/Actions/LUActionRegistry.h +++ b/Native/iOS/LunarConsole/LunarConsole/Common/Controllers/Actions/LUActionRegistry.h @@ -32,6 +32,7 @@ - (void)actionRegistry:(LUActionRegistry *)registry didRemoveAction:(LUAction *)action atIndex:(NSUInteger)index; - (void)actionRegistry:(LUActionRegistry *)registry didRegisterVariable:(LUCVar *)variable atIndex:(NSUInteger)index; - (void)actionRegistry:(LUActionRegistry *)registry didDidChangeVariable:(LUCVar *)variable atIndex:(NSUInteger)index; +- (void)actionRegistry:(LUActionRegistry *)registry didRemoveVariable:(LUCVar *)variable atIndex:(NSUInteger)index; @end @@ -54,5 +55,6 @@ - (LUCVar *)registerVariableWithId:(int)variableId name:(NSString *)name typeName:(NSString *)type value:(NSString *)value defaultValue:(NSString *)defaultValue values:(NSArray *)values; - (void)setValue:(NSString *)value forVariableWithId:(int)variableId; - (LUCVar *)variableWithId:(int)variableId; +- (BOOL)removeVariableWithId:(int)variableId; @end diff --git a/Native/iOS/LunarConsole/LunarConsole/Common/Lunar.h b/Native/iOS/LunarConsole/LunarConsole/Common/Lunar.h index c35a626b..31517582 100644 --- a/Native/iOS/LunarConsole/LunarConsole/Common/Lunar.h +++ b/Native/iOS/LunarConsole/LunarConsole/Common/Lunar.h @@ -35,6 +35,11 @@ #import "LUConsoleLogEntryLookupTable.h" #import "LUConsoleLogEntryTableViewCell.h" #import "LUConsoleLogMenuController.h" +#import "LULogMessage.h" +#import "LUUIHelper.h" +#import "LUEnumPickerViewController.h" +#import "LUPluginSettings.h" +#import "LUNotificationCenter.h" #import "LUConsoleLogTypeButton.h" #import "LUConsolePlugin.h" #import "LUConsolePopupController.h" @@ -43,19 +48,15 @@ #import "LUCVar.h" #import "LUEntry.h" #import "LUEntryTableViewCell.h" -#import "LUEnumPickerViewController.h" #import "LUExceptionWarningController.h" -#import "LULogMessage.h" #import "LUPanViewGestureRecognizer.h" #import "LUPassTouchView.h" -#import "LUPluginSettings.h" #import "LUSlider.h" #import "LUSwitch.h" #import "LUTableView.h" #import "LUTextField.h" #import "LUTheme.h" #import "LUToggleButton.h" -#import "LUUIHelper.h" #import "LUUnityScriptMessenger.h" #import "LUViewController.h" #import "LUWindow.h" diff --git a/Native/iOS/LunarConsole/LunarConsole/Full/Controllers/Actions/LUActionController.m b/Native/iOS/LunarConsole/LunarConsole/Full/Controllers/Actions/LUActionController.m index 700b43ae..90d07d01 100644 --- a/Native/iOS/LunarConsole/LunarConsole/Full/Controllers/Actions/LUActionController.m +++ b/Native/iOS/LunarConsole/LunarConsole/Full/Controllers/Actions/LUActionController.m @@ -265,6 +265,14 @@ - (void)actionRegistryFilter:(LUActionRegistryFilter *)registry didChangeVariabl [self.tableView reloadRowsAtIndexPaths:array withRowAnimation:UITableViewRowAnimationNone]; } +- (void)actionRegistryFilter:(LUActionRegistryFilter *)registry didRemoveVariable:(LUCVar *)variable atIndex:(NSUInteger)index; +{ + NSArray *array = [NSArray arrayWithObject:[NSIndexPath indexPathForRow:index inSection:kSectionIndexVariables]]; + [self.tableView deleteRowsAtIndexPaths:array withRowAnimation:UITableViewRowAnimationNone]; + + [self updateNoActionWarningView]; +} + #pragma mark - #pragma mark Actions diff --git a/Native/iOS/LunarConsole/LunarConsole/Full/Controllers/Actions/LUActionRegistry.m b/Native/iOS/LunarConsole/LunarConsole/Full/Controllers/Actions/LUActionRegistry.m index 9a36e6e7..8b7abf49 100644 --- a/Native/iOS/LunarConsole/LunarConsole/Full/Controllers/Actions/LUActionRegistry.m +++ b/Native/iOS/LunarConsole/LunarConsole/Full/Controllers/Actions/LUActionRegistry.m @@ -123,6 +123,24 @@ - (LUCVar *)registerVariableWithId:(int)variableId name:(NSString *)name typeNam return variable; } +- (BOOL)removeVariableWithId:(int)variableId +{ + NSUInteger index = [self indexOfVariableWithId:variableId]; + if (index != NSNotFound) + { + LUCVar *cvar = [_variables objectAtIndex:index]; + [_variables removeObjectAtIndex:index]; + [_delegate actionRegistry:self didRemoveVariable:cvar atIndex:index]; + return YES; + } + else + { + NSLog(@"Can't server cvar value: variable id %d not found", variableId); + } + + return NO; +} + - (void)setValue:(NSString *)value forVariableWithId:(int)variableId { NSUInteger index = [self indexOfVariableWithId:variableId]; diff --git a/Native/iOS/LunarConsole/LunarConsole/Full/Controllers/Actions/LUActionRegistryFilter.h b/Native/iOS/LunarConsole/LunarConsole/Full/Controllers/Actions/LUActionRegistryFilter.h index f18a7e59..3196d055 100644 --- a/Native/iOS/LunarConsole/LunarConsole/Full/Controllers/Actions/LUActionRegistryFilter.h +++ b/Native/iOS/LunarConsole/LunarConsole/Full/Controllers/Actions/LUActionRegistryFilter.h @@ -32,6 +32,7 @@ - (void)actionRegistryFilter:(LUActionRegistryFilter *)registryFilter didRemoveAction:(LUAction *)action atIndex:(NSUInteger)index; - (void)actionRegistryFilter:(LUActionRegistryFilter *)registry didRegisterVariable:(LUCVar *)variable atIndex:(NSUInteger)index; - (void)actionRegistryFilter:(LUActionRegistryFilter *)registry didChangeVariable:(LUCVar *)variable atIndex:(NSUInteger)index; +- (void)actionRegistryFilter:(LUActionRegistryFilter *)registry didRemoveVariable:(LUCVar *)variable atIndex:(NSUInteger)index; @end diff --git a/Native/iOS/LunarConsole/LunarConsole/Full/Controllers/Actions/LUActionRegistryFilter.m b/Native/iOS/LunarConsole/LunarConsole/Full/Controllers/Actions/LUActionRegistryFilter.m index dc43d802..f5d8f912 100644 --- a/Native/iOS/LunarConsole/LunarConsole/Full/Controllers/Actions/LUActionRegistryFilter.m +++ b/Native/iOS/LunarConsole/LunarConsole/Full/Controllers/Actions/LUActionRegistryFilter.m @@ -239,6 +239,23 @@ - (void)actionRegistry:(LUActionRegistry *)registry didDidChangeVariable:(LUCVar [_delegate actionRegistryFilter:self didChangeVariable:variable atIndex:index]; } +- (void)actionRegistry:(LUActionRegistry *)registry didRemoveVariable:(LUCVar *)variable atIndex:(NSUInteger)index +{ + if (self.isFiltering) + { + index = [self filteredArray:_filteredVariables indexOfEntry:variable]; + if (index == NSNotFound) + { + return; + } + + variable = [_filteredVariables objectAtIndex:index]; + [_filteredVariables removeObjectAtIndex:index]; + } + + [_delegate actionRegistryFilter:self didRemoveVariable:variable atIndex:index]; +} + #pragma mark - #pragma mark Properties diff --git a/Native/iOS/LunarConsole/LunarConsoleTests/LUActionRegistryFilterTest.swift b/Native/iOS/LunarConsole/LunarConsoleTests/LUActionRegistryFilterTest.swift index 5dd361c5..75b5bccf 100644 --- a/Native/iOS/LunarConsole/LunarConsoleTests/LUActionRegistryFilterTest.swift +++ b/Native/iOS/LunarConsole/LunarConsoleTests/LUActionRegistryFilterTest.swift @@ -416,6 +416,10 @@ class LUActionRegistryFilterTest: TestCase, LUActionRegistryFilterDelegate { XCTFail("Implement me") } + func actionRegistryFilter(_ registry: LUActionRegistryFilter!, didRemoveVariable variable: LUCVar!, at index: UInt) { + addResult("removed variable: \(variable.name!) (\(index))") + } + // MARK: - Helpers @discardableResult diff --git a/Native/iOS/LunarConsole/LunarConsoleTests/LUActionRegistryTest.m b/Native/iOS/LunarConsole/LunarConsoleTests/LUActionRegistryTest.m index a8151605..58e7e770 100644 --- a/Native/iOS/LunarConsole/LunarConsoleTests/LUActionRegistryTest.m +++ b/Native/iOS/LunarConsole/LunarConsoleTests/LUActionRegistryTest.m @@ -162,6 +162,11 @@ - (void)actionRegistry:(LUActionRegistry *)registry didDidChangeVariable:(LUCVar XCTFail(@"Implement me"); } +- (void)actionRegistry:(LUActionRegistry *)registry didRemoveVariable:(LUCVar *)variable atIndex:(NSUInteger)index +{ + [self addResult:[NSString stringWithFormat:@"removed variable %@ (%d)", variable.name, (int) index]]; +} + #pragma mark - #pragma mark Helpers @@ -190,6 +195,11 @@ - (void)unregisterActionWithId:(int)actionId [_actionRegistry unregisterActionWithId:actionId]; } +- (void)removeVariableWithId:(int)variableId +{ + [_actionRegistry removeVariableWithId:variableId]; +} + - (BOOL)unregisterActionWithName:(NSString *)name { for (LUAction* action in _actionRegistry.actions)