Operating system requirements: iOS 5.0 or later.
Mobile device: iPad.
This example describes some methods of working with a bubble tree data view. After starting the example the following operations are executed:
A bubble tree data view controller is created.
Bubble tree size and color legends are hidden.
A path to folder with the express report is determined, which data is used to create a bubble tree.
Executing the example requires to place the following code instead of the executeExample method of the ViewController class (see the Displaying of Express Report section):
-(void)executeExample { // Remove all window subviews NSArray *subviews = [self.view subviews]; for(UIView *subView in subviews) { [subView removeFromSuperview]; } // Get mobile device window size CGRect windowFrame = [[self view] frame]; // Create a bubble tree controller MABubbleTreeDataViewController *bubbleTreeController = [self createBubbleTreeDataViewController]; // Set bubble tree size UIView *bubbleTreeView = [bubbleTreeController view]; [bubbleTreeView setFrame: windowFrame]; // Display bubble tree [self.view addSubview: [bubbleTreeController view]]; } -(MABubbleTreeDataViewController *)createBubbleTreeDataViewController { // Get express report controller MAExpressAnalysisReportViewController *contr = (MAExpressAnalysisReportViewController *)m_controller; // Get express report delegate EAReportDelegateImpl *delegate = [contr delegate]; // Create a bubble tree data source SPPLPivot bubbleTreePivot = PPLPivot::pivot(m_olapReport); SPPLPivotTable bubbleTreePivotTable = PPLPivotTable::pivotTable(bubbleTreePivot); BubbleTreeDataViewDataSource *bubbleTreeDatasource = [[BubbleTreeDataViewDataSource alloc] initWithPivotTable:bubbleTreePivotTable]; // Create a bubble tree controller 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(@"Path to report folder: %@", correctPath); } // Get report settings SNDictionary sett = m_olapReport->settings(); SNDictionary treeMapSett = NULL; // Bubble tree settings SNDictionary selectDict = m_olapReport->selectionDictionary(); if (sett) { SNID treeMap = sett->objectForKey(NStr("treemap")); // Get bubble tree settings treeMapSett = (treeMap?treeMap->qClass<NDictionary>():NULL); if (treeMapSett) { // Load and apply bubble tree settings [bubbleTreeDatasource loadSettings:treeMapSett withSelection:selectDict]; [bubbleTreeController setXmlNameSettingFromDic:(NSDictionary *)treeMapSett->nsObject()]; } else { // Determine tree settings [bubbleTreeController setXmlNameSetting]; } } // Hide size legend [bubbleTreeController setIsSetSizeIndicator: NO];
[bubbleTreeController setIsSizeIndicator: [bubbleTreeController isSetSizeIndicator]]; // Hide color legend [bubbleTreeController setIsSetColorIndicator: NO]; MADataViewType oldMode = kViewModeTable; MADataViewType newMode = (MADataViewType)[bubbleTreeController tag]; // Synchronize dimensions between old and new data views bool isNeedRefresh = [self syncDimensionsOldMode:oldMode newMode:newMode]; if (isNeedRefresh) { // Update tree data [delegate controllerViewDidLoaded]; } return bubbleTreeController; } // Synchronizes dimensins between old and new data views - (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 { // Get express report controller MAExpressAnalysisReportViewController *contr = (MAExpressAnalysisReportViewController *)m_controller; // Get express report delegate 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; } }
After executing the example the bubble tree data view is displayed: Color and size legends are hidden:
The development environment console displays the path to the express report folder, which data is used to create the bubble tree:
Report folder path: /Users/sea/Library/Application Support/iPhone Simulator/7.1/Applications/AC4804D8-C173-4008-B14D-4A2401B0B49D/Documents/repositories/910419CE79EA52E95F2F8FE76E7C24DE/OBJ21110
See also: