/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright 2025 Olaf Wintermann. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#import "ListDelegate.h"
@implementation ListDelegate
- (id)init:(NSTableView*) tableview obj:(UiObject*)obj {
_tableview = tableview;
_obj = obj;
return self;
}
- (void)activateEvent:(id)sender {
NSTableView *table = sender;
if(_onactivate) {
int row = (int)table.clickedRow;
UiListSelection sel;
sel.count = 1;
sel.rows = &row;
UiEvent event;
event.obj = _obj;
event.window = event.obj->window;
event.document = event.obj->ctx->document;
event.eventdata = &sel;
event.eventdatatype = UI_EVENT_DATA_LIST_SELECTION;
event.intval = row;
event.set = ui_get_setop();
_onactivate(&event, _onactivatedata);
}
}
- (void) tableViewSelectionDidChange:(NSNotification *) notification {
if(_onselection) {
UiListSelection sel = ui_tableview_selection(_tableview);
UiEvent event;
event.obj = _obj;
event.window = event.obj->window;
event.document = event.obj->ctx->document;
event.eventdata = &sel;
event.eventdatatype = UI_EVENT_DATA_LIST_SELECTION;
event.intval = 0;
event.set = ui_get_setop();
_onselection(&event, _onselectiondata);
}
}
@end
UiListSelection ui_tableview_selection(NSTableView *tableview) {
NSIndexSet *indexSet = tableview.selectedRowIndexes;
NSUInteger count = [indexSet count];
if(count == 0) {
return (UiListSelection){0, NULL};
}
int *rows = calloc(count, sizeof(int));
__block NSUInteger i = 0;
[indexSet enumerateIndexesUsingBlock:^(NSUInteger index, BOOL *stop) {
rows[i++] = (int)index;
}];
UiListSelection sel;
sel.count = (int)count;
sel.rows = rows;
return sel;
}