Требования к операционной системе: iOS 5.0 и выше.
Мобильное устройство: iPad.
В данном примере описываются некоторые приемы работы с представлением данных в виде пузырькового дерева. После запуска примера выполняются следующие операции:
создается контроллер представления данных в виде пузырькового дерева;
скрываются легенды цвета и размера пузырькового дерева;
определяется путь к папке с экспресс-отчётом, на основе данных которого создаётся пузырьковое дерево.
Для выполнения примера необходимо взамен метода executeExample класса ViewController (см. раздел «Отображение экспресс-отчёта») разместить следующий код:
-(void)executeExample {
// Удаляем все дочерние представления окна
NSArray *subviews = [self.view subviews];
for(UIView *subView in subviews) {
[subView removeFromSuperview];
}
// Получаем размеры окна мобильного устройства
CGRect windowFrame = [[self view] frame];
// Создаём контроллер для работы с пузырьковым деревом
MABubbleTreeDataViewController *bubbleTreeController = [self createBubbleTreeDataViewController];
// Устанавливаем размеры пузырькового дерева
UIView *bubbleTreeView = [bubbleTreeController view];
[bubbleTreeView setFrame: windowFrame];
// Отображаем пузырьковое дерево
[self.view addSubview: [bubbleTreeController view]];
}
-(MABubbleTreeDataViewController *)createBubbleTreeDataViewController {
// Получаем контроллер для работы с экспресс-отчётом
MAExpressAnalysisReportViewController *contr = (MAExpressAnalysisReportViewController *)m_controller;
// Получаем делегат для работы с экспресс-отчётом
EAReportDelegateImpl *delegate = [contr delegate];
// Создаём источник данных пузырькового дерева
SPPLPivot bubbleTreePivot = PPLPivot::pivot(m_olapReport);
SPPLPivotTable bubbleTreePivotTable = PPLPivotTable::pivotTable(bubbleTreePivot);
BubbleTreeDataViewDataSource *bubbleTreeDatasource = [[BubbleTreeDataViewDataSource alloc] initWithPivotTable:bubbleTreePivotTable];
// Создаём контроллер для работы с пузырьковым деревом
MABubbleTreeDataViewController *bubbleTreeController = [[MABubbleTreeDataViewController alloc] initWithDataSource: bubbleTreeDatasource];
[bubbleTreeController setDelegate: contr];
[bubbleTreeController setTag: kViewModeBubbleTree];
[bubbleTreeController setIsDataViewTitleVisible: YES];
SNString plistPath = PPLFileManager::getReportPlistPath(m_olapReport->descriptor());
NSString* correctPath = plistPath?plistPath->nsString():NULL;
if (correctPath) {
correctPath = [correctPath stringByDeletingLastPathComponent];
[bubbleTreeController setPathToDirReport:correctPath];
NSLog(@"Путь к папке с отчётом: %@", correctPath);
}
// Получаем настройки отчёта
SNDictionary sett = m_olapReport->settings();
SNDictionary treeMapSett = NULL; // Настройки пузырькового дерева
SNDictionary selectDict = m_olapReport->selectionDictionary();
if (sett) {
SNID treeMap = sett->objectForKey(NStr("treemap"));
// Получаем настройки пузырькового дерева
treeMapSett = (treeMap?treeMap->qClass<NDictionary>():NULL);
if (treeMapSett) {
// Загружаем и применяем настройки пузырькового дерева
[bubbleTreeDatasource loadSettings:treeMapSett withSelection:selectDict];
[bubbleTreeController setXmlNameSettingFromDic:(NSDictionary *)treeMapSett->nsObject()];
} else {
// Устанавливаем настройки дерева
[bubbleTreeController setXmlNameSetting];
}
}
// Скрываем легенду размера
[bubbleTreeController setIsSetSizeIndicator: NO];
[bubbleTreeController setIsSizeIndicator: [bubbleTreeController isSetSizeIndicator]];
// Скрываем легенду цвета
[bubbleTreeController setIsSetColorIndicator: NO];
MADataViewType oldMode = kViewModeTable;
MADataViewType newMode = (MADataViewType)[bubbleTreeController tag];
// Синхронизируем измерения между старым и новым представлениями данных
bool isNeedRefresh = [self syncDimensionsOldMode:oldMode newMode:newMode];
if (isNeedRefresh) {
// Обновляем данные дерева
[delegate controllerViewDidLoaded];
}
return bubbleTreeController;
}
// Синхронизирует измерения между старым и новым представлениями данных
- (BOOL)syncDimensionsOldMode:(MADataViewType)oldMode newMode:(MADataViewType)newMode
{
bool result = NO;
if (oldMode == newMode) {
return NO;
} else {
result = YES;
};
DataViewDatasource *src = [self datasourceByViewType: oldMode];
DataViewDatasource *dst = [self datasourceByViewType: newMode];
if ([src conformsToProtocol:@protocol(DataViewDatasourceSyncSelection)] && [dst conformsToProtocol:@protocol(DataViewDatasourceSyncSelection)]) {
id <DataViewDatasourceSyncSelection> source = (id<DataViewDatasourceSyncSelection>)src;
id <DataViewDatasourceSyncSelection> dest = (id<DataViewDatasourceSyncSelection>)dst;
DataViewDatasourceDimensionsInfo info;
[source copyDatasourceDimensionsInfo:&info];
result = [dest applyDatasourceDimensionsInfo:&info];
}
return result;
}
- (DataViewDatasource *)datasourceByViewType:(MADataViewType)type {
// Получаем контроллер для работы с экспресс-отчётом
MAExpressAnalysisReportViewController *contr = (MAExpressAnalysisReportViewController *)m_controller;
// Получаем делегат для работы с экспресс-отчётом
EAReportDelegateImpl *delegate = [contr delegate];
switch (type) {
case kViewModeTable: return delegate.gridDatasource;
case kViewModeChart: return delegate.chartDatasource;
case kViewModeMap: return [delegate mapDatasource];
case kViewModeBubble: return [delegate bubbleDatasource];
case kViewModeBubbleTree: return [delegate bubbleTreeDatasource];
case kViewModeTreeMap: return [delegate treeMapDatasource];
default: return nil;
}
}
В результате выполнения примера было отображено представление данных в виде пузырькового дерева. Легенды цвета и размера были скрыты:

В консоли среды разработки был выведен путь к папке с экспресс-отчётом, на основе данных которого было создано пузырьковое дерево:
Путь к папке с отчётом: /Users/sea/Library/Application Support/iPhone Simulator/7.1/Applications/AC4804D8-C173-4008-B14D-4A2401B0B49D/Documents/repositories/910419CE79EA52E95F2F8FE76E7C24DE/OBJ21110
См. также: