OSDN Git Service

MacGui: Remove x264 option "No DCT-Decimate" value from option strings for any Built...
[handbrake-jp/handbrake-jp-git.git] / macosx / ScanController.mm
1 /*  $Id: ScanController.mm,v 1.10 2005/04/27 21:05:24 titer Exp $
2
3    This file is part of the HandBrake source code.
4    Homepage: <http://handbrake.m0k.org/>.
5    It may be used under the terms of the GNU General Public License. */
6 /* These are now called in DriveDetector.h
7 #include <paths.h>
8 #include <IOKit/IOKitLib.h>
9 #include <IOKit/IOBSD.h>
10 #include <IOKit/storage/IOMedia.h>
11 #include <IOKit/storage/IODVDMedia.h>
12 */
13
14 #include "ScanController.h"
15 #include "DriveDetector.h"
16
17 #define _(a) NSLocalizedString(a,nil)
18 #define INSERT_STRING @"Insert a DVD"
19
20 @implementation ScanController
21
22 - (void) TranslateStrings
23 {
24     [fSelectString setStringValue: _( @"Select a DVD:" )];
25     [fDetectedCell setTitle:       _( @"Detected volume" )];
26     [fFolderCell   setTitle:       _( @"DVD Folder / Image" )];
27     [fBrowseButton setTitle:       _( @"Browse" )];
28     [fCancelButton setTitle:       _( @"Cancel" )];
29     [fOpenButton   setTitle:       _( @"Open" )];
30 }
31
32 - (void) SetHandle: (hb_handle_t *) handle
33 {
34     fHandle    = handle;
35
36     [self TranslateStrings];
37
38     [fStatusField setStringValue: @""];
39 }
40
41 - (void) Show
42 {
43  
44
45         fDriveDetector = [[DriveDetector alloc] initWithCallback: self
46         selector: @selector( openUpdateDrives: )];
47     [fDriveDetector run];
48         
49         // Here down continue with existing HB
50     [NSApp beginSheet: fPanel modalForWindow: fWindow
51         modalDelegate: nil didEndSelector: nil contextInfo: nil];
52     [NSApp runModalForWindow: fPanel];
53     [NSApp endSheet: fPanel];
54     [fPanel orderOut: self];
55
56 }
57
58 - (void) openUpdateDrives: (NSDictionary *) drives
59 {
60     if( fDrives )
61     {
62         [fDrives release];
63     }
64     fDrives = [[NSDictionary alloc] initWithDictionary: drives];
65
66     NSString * device;
67     NSEnumerator * enumerator = [fDrives keyEnumerator];
68     [fDetectedPopUp removeAllItems];
69     while( ( device = [enumerator nextObject] ) )
70     {
71         [fDetectedPopUp addItemWithTitle: device];
72     }
73     
74         
75
76     if( ![fDetectedPopUp numberOfItems] )
77     {
78         [fDetectedPopUp addItemWithTitle: INSERT_STRING];
79         [fDetectedPopUp setEnabled: 0];
80     [fFolderField   setEnabled: 1];
81     [fBrowseButton  setEnabled: 1];
82         [fOpenButton    setEnabled: 0];
83         [fBrowseButton  setEnabled: 1];
84         [fMatrix selectCell: fFolderCell];
85
86
87     }
88         else
89         {
90         [fDetectedPopUp setEnabled: 1];
91     [fFolderField   setEnabled: 0];
92     [fBrowseButton  setEnabled: 0];
93         [fOpenButton    setEnabled: 1];
94         [fBrowseButton  setEnabled: 0];
95         }
96
97         [fDetectedPopUp selectItemAtIndex: 0];
98
99 }
100
101 - (void) EnableUI: (bool) b
102 {
103     [fMatrix        setEnabled: b];
104     [fDetectedCell  setEnabled: b];
105     [fDetectedPopUp setEnabled: b];
106     [fFolderCell    setEnabled: b];
107     [fFolderField   setEnabled: b];
108     [fBrowseButton  setEnabled: b];
109     [fOpenButton    setEnabled: b];
110
111     if( b )
112     {
113         [self MatrixChanged: nil];
114     }
115 }
116
117 - (void) UpdateUI: (hb_state_t *) s
118 {
119     switch( s->state )
120     {
121 #define p s->param.scanning
122         case HB_STATE_SCANNING:
123             [fStatusField setStringValue: [NSString stringWithFormat:
124                 _( @"Scanning title %d of %d..." ),
125                 p.title_cur, p.title_count]];
126             [fIndicator setDoubleValue: 100.0 * ( p.title_cur - 1 ) /
127                 p.title_count];
128             break;
129 #undef p
130
131         case HB_STATE_SCANDONE:
132             [self       EnableUI: YES];
133             [fIndicator setDoubleValue: 0.0];
134
135             if( hb_list_count( hb_get_titles( fHandle ) ) )
136             {
137                 /* Success */
138                 [fStatusField setStringValue: @""];
139                 [NSApp abortModal];
140             }
141             else
142             {
143                 [fStatusField setStringValue:
144                     _( @"No valid title found." )];
145             }
146             break;
147     }
148 }
149
150 - (IBAction) MatrixChanged: (id) sender
151 {
152     /* Do we have detected drives */
153
154     if( [fDetectedPopUp numberOfItems] > 0 )
155     {
156         [fDetectedCell setEnabled: YES];
157     }
158     else
159     {
160        [fMatrix selectCell: fFolderCell];
161         [fDetectedCell setEnabled: NO];
162                 [fMatrix selectCellAtRow:1 column:0];
163     }
164
165     /* Enable controls related to the current choice */
166     bool foo;
167     foo = ( [fMatrix selectedRow] == 0 );
168     [fDetectedPopUp setEnabled:  foo];
169     [fFolderField   setEnabled: !foo];
170     [fBrowseButton  setEnabled: !foo];
171
172 }
173
174 /* Browse:
175    Remove the current sheet (the scan panel) and show an OpenPanel.
176    Because we can't open the new sheet before the other one is
177    completely gone, we use performSelectorOnMainThread so it will be
178    done right afterwards */
179 - (IBAction) Browse: (id) sender
180 {
181     [NSApp stopModal];
182     [self performSelectorOnMainThread: @selector( Browse2: )
183         withObject: nil waitUntilDone: NO];
184 }
185 - (void) Browse2: (id) sender
186 {
187     NSOpenPanel * panel;
188
189     panel = [NSOpenPanel openPanel];
190     [panel setAllowsMultipleSelection: NO];
191     [panel setCanChooseFiles: YES];
192     [panel setCanChooseDirectories: YES ];
193     NSString * sourceDirectory;
194         if ([[NSUserDefaults standardUserDefaults] stringForKey:@"LastSourceDirectory"])
195         {
196         sourceDirectory = [[NSUserDefaults standardUserDefaults] stringForKey:@"LastSourceDirectory"];
197         }
198         else
199         {
200         sourceDirectory = @"~/Desktop";
201         sourceDirectory = [sourceDirectory stringByExpandingTildeInPath];
202         }
203     [panel beginSheetForDirectory: sourceDirectory file: nil types: nil
204         modalForWindow: [NSApp mainWindow] modalDelegate: self
205         didEndSelector: @selector( BrowseDone:returnCode:contextInfo: )
206         contextInfo: nil];
207 }
208
209 /* Get the folder and switch sheets again. Use the same trick as
210    above */
211 - (void) BrowseDone: (NSOpenPanel *) sheet
212     returnCode: (int) returnCode contextInfo: (void *) contextInfo
213 {
214     if( returnCode == NSOKButton )
215     {
216         [fFolderField setStringValue:
217             [[sheet filenames] objectAtIndex: 0]];
218         [self Open: nil];
219     }
220     
221     [self performSelectorOnMainThread: @selector( BrowseDone2: )
222         withObject: nil waitUntilDone: NO];
223 }
224 - (void) BrowseDone2: (id) sender
225 {
226     [NSApp beginSheet: fPanel modalForWindow: fWindow
227         modalDelegate: nil didEndSelector: nil contextInfo: nil];
228     [NSApp runModalForWindow: fWindow];
229     [NSApp endSheet: fPanel];
230     [fPanel orderOut: self];
231 }
232
233 - (IBAction) Open: (id) sender
234 {
235   //  NSString * path;
236     
237     [self         EnableUI: NO];
238     [fStatusField setStringValue: _( @"Opening..." )];
239
240         // From IHB
241         [fDriveDetector stop];
242
243     if( [fMatrix selectedRow] )
244     {
245         /* we set the last source directory in the prefs here */
246         NSString *sourceDirectory = [[fFolderField stringValue] stringByDeletingLastPathComponent];
247         [[NSUserDefaults standardUserDefaults] setObject:sourceDirectory forKey:@"LastSourceDirectory"];
248         hb_scan( fHandle, [[fFolderField stringValue] UTF8String], 0 );
249     }
250     else
251     {
252             hb_scan( fHandle, [[fDrives objectForKey: [fDetectedPopUp
253                  titleOfSelectedItem]] UTF8String], 0 );
254     }
255         
256         
257         
258 }
259
260 - (IBAction) Cancel: (id) sender
261 {
262     [NSApp stopModal];
263 }
264
265 @end