1#import "OptionsViewController.h" 2#import "ModelViewController.h" 3#import "ParametersViewController.h" 4#import "PostProcessingViewController.h" 5#import "Utils.h" 6 7#include <gmsh/Context.h> 8#include <gmsh/GmshDefines.h> 9#include <gmsh/PView.h> 10#include <gmsh/PViewData.h> 11#include <gmsh/PViewOptions.h> 12 13@interface OptionsViewController () 14 15@end 16 17@implementation OptionsViewController 18 19- (id)initWithStyle:(UITableViewStyle)style 20{ 21 self = [super initWithStyle:style]; 22 if(self) { 23 // Custom initialization 24 } 25 return self; 26} 27 28- (void)viewDidLoad 29{ 30 [super viewDidLoad]; 31 32 [[NSNotificationCenter defaultCenter] addObserver:self 33 selector:@selector(refreshOptions:) 34 name:@"refreshParameters" 35 object:nil]; 36 [[NSNotificationCenter defaultCenter] addObserver:self 37 selector:@selector(refreshOptions:) 38 name:@"resetParameters" 39 object:nil]; 40 41 self.navigationItem.title = @"Display"; 42 43 [self.navigationController setToolbarHidden:NO]; 44 control = [[UISegmentedControl alloc] 45 initWithItems:[[NSArray alloc] initWithObjects:@"Model", @"Display", nil]]; 46 UIBarButtonItem *controlBtn = 47 [[UIBarButtonItem alloc] initWithCustomView:control]; 48 UIBarButtonItem *flexibleSpace = [[UIBarButtonItem alloc] 49 initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace 50 target:nil 51 action:nil]; 52 self.toolbarItems = [[NSArray alloc] 53 initWithObjects:flexibleSpace, controlBtn, flexibleSpace, nil]; 54 [control addTarget:self 55 action:@selector(indexDidChangeForSegmentedControl:) 56 forControlEvents:UIControlEventValueChanged]; 57 if(![[UIDevice currentDevice].model isEqualToString:@"iPad"] && 58 ![[UIDevice currentDevice].model isEqualToString:@"iPad Simulator"]) 59 self.navigationItem.leftBarButtonItem = 60 [[UIBarButtonItem alloc] initWithTitle:@"Back" 61 style:UIBarButtonItemStylePlain 62 target:self 63 action:@selector(backButtonPressed:)]; 64 else 65 self.navigationItem.hidesBackButton = true; 66} 67- (void)viewWillAppear:(BOOL)animated 68{ 69 control.selectedSegmentIndex = 1; 70 [super viewWillAppear:animated]; 71} 72 73- (void)backButtonPressed:(id)sender 74{ 75 for(UIViewController *v in [self.navigationController viewControllers]) 76 if([v isKindOfClass:[ModelViewController class]]) 77 [self.navigationController popToViewController:v animated:YES]; 78} 79 80- (void)indexDidChangeForSegmentedControl:(id)sender 81{ 82 [self.navigationController popViewControllerAnimated:YES]; 83} 84 85- (void)didReceiveMemoryWarning 86{ 87 [super didReceiveMemoryWarning]; 88 // Dispose of any resources that can be recreated. 89} 90 91- (void)refreshOptions:(id)sender 92{ 93 [self performSelectorOnMainThread:@selector(refreshOptions) 94 withObject:nil 95 waitUntilDone:NO]; 96} 97 98- (void)refreshOptions 99{ 100 [self.tableView reloadData]; 101} 102 103#pragma mark - Table view data source 104 105- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 106{ 107 return 2; 108 // Section 0: Display options 109 // Section 1: Result options 110} 111 112- (NSString *)tableView:(UITableView *)tableView 113 titleForHeaderInSection:(NSInteger)section 114{ 115 switch(section) { 116 case 0: return @"Display options"; 117 case 1: return @"Result options"; 118 default: return @"Other options"; 119 } 120} 121 122- (NSInteger)tableView:(UITableView *)tableView 123 numberOfRowsInSection:(NSInteger)section 124{ 125 switch(section) { 126 case 0: return 4; 127 case 1: return PView::list.size(); 128 default: return 0; 129 } 130} 131 132- (CGFloat)tableView:(UITableView *)tableView 133 heightForRowAtIndexPath:(NSIndexPath *)indexPath 134{ 135 return 45.0f; 136} 137 138- (UITableViewCell *)tableView:(UITableView *)tableView 139 cellForRowAtIndexPath:(NSIndexPath *)indexPath 140{ 141 UITableViewCell *cell = 142 [tableView dequeueReusableCellWithIdentifier:@"postproCell"]; 143 if(cell == nil) { 144 cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 145 reuseIdentifier:@"postproCell"]; 146 } 147 else { 148 cell = nil; 149 cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 150 reuseIdentifier:@"postproCell"]; 151 } 152 153 [cell setSelectionStyle:UITableViewCellSelectionStyleNone]; 154 [cell 155 setFrame:CGRectMake(cell.frame.origin.x, cell.frame.origin.x, 156 tableView.frame.size.width, cell.frame.size.height)]; 157 switch(indexPath.section) { 158 case 0: { 159 UISwitch *showHide = 160 [[UISwitch alloc] initWithFrame:CGRectMake(15, 6.5, 100, 30)]; 161 UILabel *label = [[UILabel alloc] 162 initWithFrame:CGRectMake(25 + (showHide.frame.size.width), 8, 163 (tableView.frame.size.width - 164 (showHide.frame.size.width) - 50), 165 30)]; 166 // set font size at 90% of default size 167 label.font = 168 [label.font fontWithSize:(0.9 * label.font.pointSize)]; 169 170 if(indexPath.row == 0) { 171 [label setText:@"Show geometry points"]; 172 [showHide setOn:(CTX::instance()->geom.points)]; 173 [showHide addTarget:self 174 action:@selector(setShowGeomPoints:) 175 forControlEvents:UIControlEventValueChanged]; 176 } 177 else if(indexPath.row == 1) { 178 [label setText:@"Show geometry curves"]; 179 [showHide setOn:(CTX::instance()->geom.curves)]; 180 [showHide addTarget:self 181 action:@selector(setShowGeomCurves:) 182 forControlEvents:UIControlEventValueChanged]; 183 } 184 else if(indexPath.row == 2) { 185 [label setText:@"Show mesh surface edges"]; 186 [showHide setOn:(CTX::instance()->mesh.surfaceEdges)]; 187 [showHide addTarget:self 188 action:@selector(setShowMeshSurfaceEdges:) 189 forControlEvents:UIControlEventValueChanged]; 190 } 191 else if(indexPath.row == 3) { 192 [label setText:@"Show mesh volume edges"]; 193 [showHide setOn:CTX::instance()->mesh.volumeEdges]; 194 [showHide addTarget:self 195 action:@selector(setShowMeshVolumeEdges:) 196 forControlEvents:UIControlEventValueChanged]; 197 } 198 [cell.contentView addSubview:showHide]; 199 [cell.contentView addSubview:label]; 200 } break; 201 case 1: { 202 int i = (int)(PView::list.size() - 1 - indexPath.row); 203 cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 204 UISwitch *showHide = 205 [[UISwitch alloc] initWithFrame:CGRectMake(15, 6.5, 100, 30)]; 206 UILabel *label = [[UILabel alloc] 207 initWithFrame:CGRectMake(25 + (showHide.frame.size.width), 8, 208 (tableView.frame.size.width - 209 showHide.frame.size.width - 50), 210 30)]; 211 // set font size at 90% of default size 212 label.font = [label.font fontWithSize:(0.9 * label.font.pointSize)]; 213 [showHide setOn:(PView::list[i]->getOptions()->visible == 1)]; 214 [showHide setTag:i]; 215 [showHide addTarget:self 216 action:@selector(PViewVisible:) 217 forControlEvents:UIControlEventValueChanged]; 218 [label setBackgroundColor:[UIColor clearColor]]; 219 [label setText:[Utils getStringFromCString:PView::list[i] 220 ->getData() 221 ->getName() 222 .c_str()]]; 223 [cell.contentView addSubview:showHide]; 224 [cell.contentView addSubview:label]; 225 } break; 226 } 227 return cell; 228} 229 230- (void)tableView:(UITableView *)tableView 231 didSelectRowAtIndexPath:(NSIndexPath *)indexPath 232{ 233 if(indexPath.section != 1) return; 234 UIStoryboard *storyboard; 235 if([[UIDevice currentDevice].model isEqualToString:@"iPad"] || 236 [[UIDevice currentDevice].model isEqualToString:@"iPad Simulator"]) 237 storyboard = [UIStoryboard storyboardWithName:@"iPadStoryboard" bundle:nil]; 238 else 239 storyboard = [UIStoryboard storyboardWithName:@"iPhoneiPodStoryboard" 240 bundle:nil]; 241 PostProcessingViewController *postPro = [storyboard 242 instantiateViewControllerWithIdentifier:@"PostProcessingViewController"]; 243 [postPro setPView:PView::list[[tableView numberOfRowsInSection:1] - 1 - 244 indexPath.row]]; 245 [self.navigationController pushViewController:postPro animated:YES]; 246} 247 248- (void)setShowGeomPoints:(UISwitch *)sender 249{ 250 CTX::instance()->geom.points = sender.on; 251 [[NSNotificationCenter defaultCenter] postNotificationName:@"requestRender" 252 object:nil]; 253} 254 255- (void)setShowGeomCurves:(UISwitch *)sender 256{ 257 CTX::instance()->geom.curves = sender.on; 258 [[NSNotificationCenter defaultCenter] postNotificationName:@"requestRender" 259 object:nil]; 260} 261 262- (void)setShowMeshVolumeEdges:(UISwitch *)sender 263{ 264 CTX::instance()->mesh.volumeEdges = sender.on; 265 CTX::instance()->mesh.changed = ENT_VOLUME; 266 [[NSNotificationCenter defaultCenter] postNotificationName:@"requestRender" 267 object:nil]; 268} 269 270- (void)setShowMeshSurfaceEdges:(UISwitch *)sender 271{ 272 CTX::instance()->mesh.surfaceEdges = sender.on; 273 CTX::instance()->mesh.changed = ENT_SURFACE; 274 [[NSNotificationCenter defaultCenter] postNotificationName:@"requestRender" 275 object:nil]; 276} 277 278- (IBAction)PViewVisible:(id)sender 279{ 280 PView::list[((UISwitch *)sender).tag]->getOptions()->visible = 281 (((UISwitch *)sender).on) ? 1 : 0; 282 [[NSNotificationCenter defaultCenter] postNotificationName:@"requestRender" 283 object:nil]; 284} 285 286#pragma mark - textfield 287 288- (BOOL)textFieldShouldEndEditing:(UITextField *)textField 289{ 290 int val = (int)[textField.text integerValue]; 291 val = (val > 0) ? val : 1; 292 val = (val < 1000) ? val : 1000; 293 [textField setText:[NSString stringWithFormat:@"%d", val]]; 294 PView::list[textField.tag]->getOptions()->nbIso = val; 295 PView::list[textField.tag]->setChanged(true); 296 [[NSNotificationCenter defaultCenter] postNotificationName:@"requestRender" 297 object:nil]; 298 return YES; 299} 300 301- (BOOL)textFieldShouldReturn:(UITextField *)textField 302{ 303 [textField endEditing:YES]; 304 return YES; 305} 306 307@end 308