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