1// 2// PRCConvolve55.m 3// PRICE 4// Convolve 5x5 Controller 5// 6// Created by Riccardo Mottola on Tue Jan 21 2003. 7// Copyright (c) 2003-2014 Carduus. All rights reserved. 8// 9// This application is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. 10// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. 11 12#import "PRCConvolve55.h" 13#import "MyDocument.h" 14#import "PRConvolve55.h" 15 16@implementation PRCConvolve55 17 18- (id)init 19{ 20 if ((self = [super init])) 21 { 22 filter = [[PRConvolve55 alloc] init]; 23 } 24 return self; 25} 26 27- (IBAction)showFilter:(id)sender 28{ 29 [super showFilter:sender]; 30 31 if (!filterWindow) 32 [NSBundle loadNibNamed:@"Convolve55" owner:self]; 33 [filterWindow makeKeyAndOrderFront:nil]; 34 convMatrix[0][0] = [matField11 intValue]; 35 convMatrix[0][1] = [matField12 intValue]; 36 convMatrix[0][2] = [matField13 intValue]; 37 convMatrix[0][3] = [matField14 intValue]; 38 convMatrix[0][4] = [matField15 intValue]; 39 convMatrix[1][0] = [matField21 intValue]; 40 convMatrix[1][1] = [matField22 intValue]; 41 convMatrix[1][2] = [matField23 intValue]; 42 convMatrix[1][3] = [matField24 intValue]; 43 convMatrix[1][4] = [matField25 intValue]; 44 convMatrix[2][0] = [matField31 intValue]; 45 convMatrix[2][1] = [matField32 intValue]; 46 convMatrix[2][2] = [matField33 intValue]; 47 convMatrix[2][3] = [matField34 intValue]; 48 convMatrix[2][4] = [matField35 intValue]; 49 convMatrix[3][0] = [matField41 intValue]; 50 convMatrix[3][1] = [matField42 intValue]; 51 convMatrix[3][2] = [matField43 intValue]; 52 convMatrix[3][3] = [matField44 intValue]; 53 convMatrix[3][4] = [matField45 intValue]; 54 convMatrix[4][0] = [matField51 intValue]; 55 convMatrix[4][1] = [matField52 intValue]; 56 convMatrix[4][2] = [matField53 intValue]; 57 convMatrix[4][3] = [matField54 intValue]; 58 convMatrix[4][4] = [matField55 intValue]; 59 if ([autoScaleCheck state] == NSOnState) 60 { 61 [scaleField setEnabled:NO]; 62 [offsetField setEnabled:NO]; 63 autoScale = YES; 64 } else 65 { 66 [scaleField setEnabled:YES]; 67 [offsetField setEnabled:YES]; 68 autoScale = NO; 69 } 70 offset = [offsetField intValue]; 71 scale = [scaleField floatValue]; 72 73 [self parametersChanged:self]; 74} 75 76- (IBAction)convMatrix11:(id)sender 77{ 78 convMatrix[0][0] = [sender intValue]; 79 [self parametersChanged:self]; 80} 81- (IBAction)convMatrix12:(id)sender 82{ 83 convMatrix[0][1] = [sender intValue]; 84 [self parametersChanged:self]; 85} 86- (IBAction)convMatrix13:(id)sender 87{ 88 convMatrix[0][2] = [sender intValue]; 89 [self parametersChanged:self]; 90} 91- (IBAction)convMatrix14:(id)sender 92{ 93 convMatrix[0][3] = [sender intValue]; 94 [self parametersChanged:self]; 95} 96- (IBAction)convMatrix15:(id)sender 97{ 98 convMatrix[0][4] = [sender intValue]; 99 [self parametersChanged:self]; 100} 101- (IBAction)convMatrix21:(id)sender 102{ 103 convMatrix[1][0] = [sender intValue]; 104 [self parametersChanged:self]; 105} 106- (IBAction)convMatrix22:(id)sender 107{ 108 convMatrix[1][1] = [sender intValue]; 109 [self parametersChanged:self]; 110} 111- (IBAction)convMatrix23:(id)sender 112{ 113 convMatrix[1][2] = [sender intValue]; 114 [self parametersChanged:self]; 115} 116- (IBAction)convMatrix24:(id)sender 117{ 118 convMatrix[1][3] = [sender intValue]; 119 [self parametersChanged:self]; 120} 121- (IBAction)convMatrix25:(id)sender 122{ 123 convMatrix[1][4] = [sender intValue]; 124 [self parametersChanged:self]; 125} 126- (IBAction)convMatrix31:(id)sender 127{ 128 convMatrix[2][0] = [sender intValue]; 129 [self parametersChanged:self]; 130} 131- (IBAction)convMatrix32:(id)sender 132{ 133 convMatrix[2][1] = [sender intValue]; 134 [self parametersChanged:self]; 135} 136- (IBAction)convMatrix33:(id)sender 137{ 138 convMatrix[2][2] = [sender intValue]; 139 [self parametersChanged:self]; 140} 141- (IBAction)convMatrix34:(id)sender 142{ 143 convMatrix[2][3] = [sender intValue]; 144 [self parametersChanged:self]; 145} 146- (IBAction)convMatrix35:(id)sender 147{ 148 convMatrix[2][4] = [sender intValue]; 149 [self parametersChanged:self]; 150} 151- (IBAction)convMatrix41:(id)sender 152{ 153 convMatrix[3][0] = [sender intValue]; 154 [self parametersChanged:self]; 155} 156- (IBAction)convMatrix42:(id)sender 157{ 158 convMatrix[3][1] = [sender intValue]; 159 [self parametersChanged:self]; 160} 161- (IBAction)convMatrix43:(id)sender 162{ 163 convMatrix[3][2] = [sender intValue]; 164 [self parametersChanged:self]; 165} 166- (IBAction)convMatrix44:(id)sender 167{ 168 convMatrix[3][3] = [sender intValue]; 169 [self parametersChanged:self]; 170} 171- (IBAction)convMatrix45:(id)sender 172{ 173 convMatrix[3][4] = [sender intValue]; 174 [self parametersChanged:self]; 175} 176- (IBAction)convMatrix51:(id)sender 177{ 178 convMatrix[4][0] = [sender intValue]; 179 [self parametersChanged:self]; 180} 181- (IBAction)convMatrix52:(id)sender 182{ 183 convMatrix[4][1] = [sender intValue]; 184 [self parametersChanged:self]; 185} 186- (IBAction)convMatrix53:(id)sender 187{ 188 convMatrix[4][2] = [sender intValue]; 189 [self parametersChanged:self]; 190} 191- (IBAction)convMatrix54:(id)sender 192{ 193 convMatrix[4][3] = [sender intValue]; 194 [self parametersChanged:self]; 195} 196- (IBAction)convMatrix55:(id)sender 197{ 198 convMatrix[4][4] = [sender intValue]; 199 [self parametersChanged:self]; 200} 201 202- (IBAction)autoRange:(id)sender 203{ 204 autoScale = !autoScale; 205 if (autoScale) 206 { 207 [scaleField setEnabled:NO]; 208 [offsetField setEnabled:NO]; 209 } else 210 { 211 [scaleField setEnabled:YES]; 212 [offsetField setEnabled:YES]; 213 } 214 [self parametersChanged:self]; 215} 216 217- (IBAction)scaleFactor:(id)sender 218{ 219 scale = [sender floatValue]; 220 [self parametersChanged:self]; 221} 222 223- (IBAction)offsetFactor:(id)sender 224{ 225 offset = [sender intValue]; 226 [self parametersChanged:self]; 227} 228 229- (void)closeFilterPanel 230{ 231 [filterWindow performClose:nil]; 232} 233 234- (NSArray *)encodeParameters 235{ 236 NSArray *parameters; 237 NSMutableArray *convArray; 238 int i, j; 239 240 /* encode the parameters */ 241 convArray = [NSMutableArray arrayWithCapacity:25]; 242 for (i = 0; i < 5; i++) 243 for (j = 0; j < 5; j++) 244 [convArray addObject: [NSNumber numberWithInt: convMatrix[i][j]]]; 245 246 247 parameters = [NSArray arrayWithObjects: 248 convArray, 249 [NSNumber numberWithInt: offset], 250 [NSNumber numberWithFloat: scale], 251 [NSNumber numberWithBool: autoScale], 252 nil]; 253 254 return parameters; 255} 256 257@end 258