OSDN Git Service

ca18537a5478c54c384ca804654e021c619ab446
[handbrake-jp/handbrake-jp-git.git] / beos / MainWindow.cpp
1 /* $Id: MainWindow.cpp,v 1.14 2003/10/05 14:56:38 titer Exp $
2
3    This file is part of the HandBrake source code.
4    Homepage: <http://beos.titer.org/handbrake/>.
5    It may be used under the terms of the GNU General Public License. */
6
7 #include <fs_info.h>
8 #include <sys/ioctl.h>
9 #include <Alert.h>
10 #include <Application.h>
11 #include <Box.h>
12 #include <Button.h>
13 #include <Directory.h>
14 #include <Drivers.h>
15 #include <MenuField.h>
16 #include <Path.h>
17 #include <Query.h>
18 #include <PopUpMenu.h>
19 #include <Screen.h>
20 #include <Slider.h>
21 #include <StatusBar.h>
22 #include <StringView.h>
23 #include <TextControl.h>
24 #include <VolumeRoster.h>
25
26 #include "MainWindow.h"
27 #include "Manager.h"
28 #include "PictureWin.h"
29
30 #define DEFAULT_FILE          "/boot/home/Desktop/Movie.avi"
31 #define WINDOW_RECT           BRect( 0,0,400,405 )
32
33 #define BUTTON_ADVANCED 'badv'
34 #define BUTTON_FILE     'bfil'
35 #define BUTTON_PICTURE  'bpic'
36 #define BUTTON_START    'bsta'
37 #define BUTTON_CANCEL   'bcan'
38 #define BUTTON_SUSPEND  'bsus'
39 #define BUTTON_RESUME   'bres'
40 #define POPUP_AUDIO     'paud'
41 #define POPUP_TITLE     'ptit'
42 #define POPUP_VOLUME    'pvol'
43 #define SLIDER_AUDIO    'saud'
44 #define SLIDER_VIDEO    'svid'
45
46 /* HBBox : almost a simple BBox, unless we draw a horizontal line
47    before the "Picture" and "Advanced" buttons. There must be a
48    cleaner way to do this, but I'm not a expert GUI programmer. */
49
50 /* Constructor */
51 HBBox::HBBox( BRect rect )
52     : BBox( rect, NULL )
53 {
54 }
55
56 /* Draw */
57 void HBBox::Draw( BRect rect )
58 {
59     /* Inherited method */
60         BBox::Draw( rect );
61
62     /* Draw the line */
63     SetHighColor( 120, 120, 120 );
64         SetLowColor( 255, 255, 255 );
65         StrokeLine( BPoint( 10, 265 ),
66                 BPoint( Bounds().Width() - 10, 265 ),
67                 B_SOLID_HIGH );
68         StrokeLine( BPoint( 11, 266 ),
69                     BPoint( Bounds().Width() - 10, 266 ),
70                     B_SOLID_LOW );
71 }
72
73 HBVolumeItem::HBVolumeItem( HBVolume * volume )
74     : BMenuItem( "", new BMessage( POPUP_VOLUME ) )
75 {
76     fVolume = volume;
77
78     SetLabel( fVolume->fName );
79 }
80
81 HBTitleItem::HBTitleItem( HBTitle * title )
82     : BMenuItem( "", new BMessage( POPUP_TITLE) )
83 {
84     fTitle = title;
85
86     char label[1024]; memset( label, 0, 1024 );
87     sprintf( label, "%d (%02lld:%02lld:%02lld)", fTitle->fIndex,
88              fTitle->fLength / 3600, ( fTitle->fLength % 3600 ) / 60,
89              fTitle->fLength % 60 );
90     SetLabel( label );
91 }
92
93 HBAudioItem::HBAudioItem( HBAudio * audio )
94     : BMenuItem( "", new BMessage( POPUP_AUDIO ) )
95 {
96     fAudio = audio;
97
98     SetLabel( fAudio ? fAudio->fDescription : "None" );
99 }
100
101 HBWindow::HBWindow( bool debug )
102     : BWindow( WINDOW_RECT, "HandBrake " VERSION, B_TITLED_WINDOW,
103                B_NOT_RESIZABLE | B_NOT_ZOOMABLE )
104 {
105     /* Center the window */
106     BScreen screen;
107     MoveTo( ( screen.Frame().Width() - Frame().Width() ) / 2,
108             ( screen.Frame().Height() - Frame().Height() ) / 2 );
109
110     /* -- GUI starts here -- */
111
112     BRect r;
113
114     /* Add a background view */
115     BView * view;
116     view = new BView( Bounds(), NULL, B_FOLLOW_ALL, B_WILL_DRAW );
117     view->SetViewColor( ui_color( B_PANEL_BACKGROUND_COLOR ) );
118
119     /* Add the settings box */
120     r = BRect( 10, 10, view->Bounds().Width() - 10,
121                view->Bounds().Height() - 85 );
122     fBox = new HBBox( r );
123     fBox->SetLabel( "Settings" );
124
125     /* Volume */
126     r = BRect( 10, 15, fBox->Bounds().Width() - 10, 35 );
127     fVolumePopUp = new BPopUpMenu( "" );
128     fVolumeField = new BMenuField( r, NULL, "Volume :",
129                                    fVolumePopUp, true );
130     fBox->AddChild( fVolumeField );
131
132     /* Title */
133     r = BRect( 10, 45, fBox->Bounds().Width() - 10, 65 );
134     fTitlePopUp = new BPopUpMenu( "" );
135     fTitleField = new BMenuField( r, NULL, "Title :",
136                                   fTitlePopUp, true );
137     fBox->AddChild( fTitleField );
138
139     /* Audio 1 */
140     r = BRect( 10, 75, fBox->Bounds().Width() - 10, 95 );
141     fAudio1PopUp = new BPopUpMenu( "" );
142     fAudio1Field = new BMenuField( r, NULL, "Audio 1 :",
143                                      fAudio1PopUp, true );
144     fBox->AddChild( fAudio1Field );
145
146     /* Audio 2 */
147     r = BRect( 10, 105, fBox->Bounds().Width() - 10, 125 );
148     fAudio2PopUp = new BPopUpMenu( "" );
149     fAudio2Field = new BMenuField( r, NULL, "Audio 2 :",
150                                      fAudio2PopUp, true );
151     fBox->AddChild( fAudio2Field );
152
153     /* Video bitrate */
154     r = BRect( 10, 135, fBox->Bounds().Width() - 10, 165 );
155     fVideoSlider = new BSlider( r, NULL, "Video bitrate : 1024 kbps",
156                                 new BMessage( SLIDER_VIDEO ),
157                                 128, 4096, B_TRIANGLE_THUMB );
158     fVideoSlider->SetValue( 1024 );
159     fBox->AddChild( fVideoSlider );
160
161     /* Audio bitrate */
162     r = BRect( 10, 175, fBox->Bounds().Width() - 10, 205 );
163     fAudioSlider = new BSlider( r, NULL, "Audio bitrate : 128 kbps",
164                                 new BMessage( SLIDER_AUDIO ),
165                                 64, 384, B_TRIANGLE_THUMB );
166     fAudioSlider->SetValue( 128 );
167     fBox->AddChild( fAudioSlider );
168
169     /* Destination file */
170     r = BRect( 10, 215, fBox->Bounds().Width() - 10, 230 );
171     fFileString = new BStringView( r, NULL, "Destination file :" );
172     fBox->AddChild( fFileString );
173     r = BRect( 10, 235, fBox->Bounds().Width() - 90, 255 );
174     fFileControl = new BTextControl( r, NULL, "", DEFAULT_FILE,
175                                      new BMessage() );
176     fFileControl->SetDivider( 0 );
177     fBox->AddChild( fFileControl );
178     r = BRect( fBox->Bounds().Width() - 80, 230,
179                fBox->Bounds().Width() - 10, 255 );
180     fFileButton = new BButton( r, NULL, "Browse...",
181                                new BMessage( BUTTON_FILE ) );
182     fBox->AddChild( fFileButton );
183
184     /* Settings buttons */
185     r = BRect( fBox->Bounds().Width() - 200, 275,
186                fBox->Bounds().Width() - 100, 300 );
187     fPictureButton = new BButton( r, NULL, "Picture settings...",
188                                   new BMessage( BUTTON_PICTURE ) );
189     fBox->AddChild( fPictureButton );
190
191     r = BRect( fBox->Bounds().Width() - 90, 275,
192                fBox->Bounds().Width() - 10, 300 );
193     fAdvancedButton = new BButton( r, NULL, "Advanced...",
194                                    new BMessage( BUTTON_ADVANCED ) );
195     fBox->AddChild( fAdvancedButton );
196
197     view->AddChild( fBox );
198
199     /* Status bar */
200     r = BRect( 10, view->Bounds().Height() - 75,
201                view->Bounds().Width() - 10, view->Bounds().Height() - 45 );
202     fStatusBar = new BStatusBar( r, NULL, NULL );
203     fStatusBar->SetMaxValue( 1.0 );
204     view->AddChild( fStatusBar );
205
206     /* Buttons */
207     r = BRect( view->Bounds().Width() - 240, view->Bounds().Height() - 35,
208                view->Bounds().Width() - 170, view->Bounds().Height() - 10 );
209     BButton * aboutButton;
210     aboutButton = new BButton( r, NULL, "About...",
211                                new BMessage( B_ABOUT_REQUESTED ) );
212     view->AddChild( aboutButton );
213
214     r = BRect( view->Bounds().Width() - 160, view->Bounds().Height() - 35,
215                view->Bounds().Width() - 90, view->Bounds().Height() - 10 );
216     fSuspendButton = new BButton( r, NULL, "Suspend",
217                                   new BMessage( BUTTON_SUSPEND ) );
218     view->AddChild( fSuspendButton );
219
220     r = BRect( view->Bounds().Width() - 80, view->Bounds().Height() - 35,
221                view->Bounds().Width() - 10, view->Bounds().Height() - 10 );
222     fStartButton = new BButton( r, NULL, "Start !",
223                                 new BMessage( BUTTON_START ) );
224     view->AddChild( fStartButton );
225
226     AddChild( view );
227
228     /* -- GUI ends here -- */
229
230     /* Init libhb & launch the manager thread */
231     fManager = new HBManager( debug );
232
233     /* Detects DVD drives & VOB folders, then tell libhb to scan it */
234     ScanVolumes();
235
236     /* Update the interface */
237     fUpdateThread = spawn_thread( (int32 (*)(void *)) UpdateInterface,
238                                   "interface", B_DISPLAY_PRIORITY, this );
239     resume_thread( fUpdateThread );
240 }
241
242 bool HBWindow::QuitRequested()
243 {
244     /* Clean up */
245     kill_thread( fUpdateThread );
246     delete fManager;
247
248     /* Stop the application */
249     be_app->PostMessage( B_QUIT_REQUESTED );
250     return true;
251 }
252
253 void HBWindow::MessageReceived( BMessage * message )
254 {
255     switch( message->what )
256     {
257         case B_ABOUT_REQUESTED:
258         {
259             BAlert * alert;
260             alert = new BAlert( "About HandBrake",
261                 "HandBrake " VERSION "\n\n"
262                 "by Eric Petit <titer@videolan.org>\n"
263                 "Homepage : <http://beos.titer.org/handbrake/>\n\n"
264                 "No, you don't want to know where this stupid app "
265                 "name comes from.\n\n"
266                 "Thanks to BGA for pointing out very cool bugs ;)",
267                 "Woot !" );
268             alert->Go( NULL );
269             break;
270         }
271
272         case BUTTON_ADVANCED:
273             break;
274
275         case BUTTON_FILE:
276             break;
277
278         case BUTTON_PICTURE:
279         {
280             HBTitle * title =
281                 ((HBTitleItem*) fTitlePopUp->FindMarked())->fTitle;
282             HBPictureWin * pictureWin = new HBPictureWin( fManager, title );
283             pictureWin->Show();
284             break;
285         }
286
287         case BUTTON_START:
288         {
289             HBTitle * title =
290                 ((HBTitleItem*) fTitlePopUp->FindMarked())->fTitle;
291             HBAudio * audio1 =
292                 ((HBAudioItem*) fAudio1PopUp->FindMarked())->fAudio;
293             HBAudio * audio2 =
294                 ((HBAudioItem*) fAudio2PopUp->FindMarked())->fAudio;
295
296             title->fBitrate = fVideoSlider->Value();
297             if( audio1 )
298             {
299                 audio1->fOutBitrate = fAudioSlider->Value();
300             }
301             if( audio2 )
302             {
303                 audio2->fOutBitrate = fAudioSlider->Value();
304             }
305
306             fManager->StartRip( title, audio1, audio2,
307                                 (char*) fFileControl->Text() );
308             break;
309         }
310
311         case BUTTON_CANCEL:
312             fManager->StopRip();
313             break;
314
315         case BUTTON_SUSPEND:
316             fManager->SuspendRip();
317             break;
318
319         case BUTTON_RESUME:
320             fManager->ResumeRip();
321             break;
322
323         case POPUP_AUDIO:
324             break;
325
326         case POPUP_TITLE:
327         {
328             HBTitle * title =
329                 ((HBTitleItem*) fTitlePopUp->FindMarked())->fTitle;
330
331             /* Empty audio popups */
332             HBAudioItem * audioItem;
333             while( ( audioItem = (HBAudioItem*) fAudio1PopUp->ItemAt( 0 ) ) )
334             {
335                 fAudio1PopUp->RemoveItem( audioItem );
336                 delete audioItem;
337             }
338             while( ( audioItem = (HBAudioItem*) fAudio2PopUp->ItemAt( 0 ) ) )
339             {
340                 fAudio2PopUp->RemoveItem( audioItem );
341                 delete audioItem;
342             }
343
344             HBAudio * audio;
345             for( uint32_t i = 0;
346                  i < title->fAudioList->CountItems();
347                  i++ )
348             {
349                 audio = (HBAudio*) title->fAudioList->ItemAt( i );
350                 fAudio1PopUp->AddItem( new HBAudioItem( audio ) );
351                 fAudio2PopUp->AddItem( new HBAudioItem( audio ) );
352             }
353             fAudio1PopUp->AddItem( new HBAudioItem( NULL ) );
354             fAudio2PopUp->AddItem( new HBAudioItem( NULL ) );
355             ((HBAudioItem*) fAudio1PopUp->ItemAt( 0 ))->SetMarked( true );
356             ((HBAudioItem*) fAudio2PopUp->ItemAt(
357                 fAudio2PopUp->CountItems() - 1 ))->SetMarked( true );
358
359             break;
360         }
361
362         case POPUP_VOLUME:
363             break;
364
365         case SLIDER_AUDIO:
366         {
367             char label[64]; memset( label, 0, 64 );
368             snprintf( label, 128, "Audio bitrate : %ld kbps",
369                       fAudioSlider->Value() );
370             fAudioSlider->SetLabel( label );
371             break;
372         }
373
374         case SLIDER_VIDEO:
375         {
376             char label[64]; memset( label, 0, 64 );
377             snprintf( label, 128, "Video bitrate : %ld kbps",
378                       fVideoSlider->Value() );
379             fVideoSlider->SetLabel( label );
380             break;
381         }
382
383         default:
384             BWindow::MessageReceived( message );
385             break;
386     }
387 }
388
389
390 void HBWindow::ScanVolumes()
391 {
392     BVolumeRoster   * roster  = new BVolumeRoster();
393     BVolume         * bVolume = new BVolume();
394     fs_info           info;
395     int               device;
396     device_geometry   geometry;
397
398     HBVolume * volume;
399     HBList   * volumeList = new HBList();
400
401     /* Parse mounted volumes */
402     while( roster->GetNextVolume( bVolume ) == B_NO_ERROR )
403     {
404         /* open() and ioctl() for more informations */
405         fs_stat_dev( bVolume->Device(), &info );
406         if( ( device = open( info.device_name, O_RDONLY ) ) < 0 )
407         {
408             continue;
409         }
410
411         if( ioctl( device, B_GET_GEOMETRY, &geometry,
412                    sizeof( geometry ) ) < 0 )
413
414         {
415             continue;
416         }
417
418         /* Get the volume name */
419         char volumeName[B_FILE_NAME_LENGTH];
420         bVolume->GetName( volumeName );
421
422         if( bVolume->IsReadOnly() && geometry.device_type == B_CD )
423         {
424             /* May be a DVD */
425             volume = new HBVolume( info.device_name, volumeName );
426             volumeList->AddItem( volume );
427         }
428         else if( geometry.device_type == B_DISK )
429         {
430             /* May be a hard drive. Look for VIDEO_TS folders on it */
431             BQuery * query = new BQuery();
432
433             if( query->SetVolume( bVolume ) != B_OK )
434             {
435                 delete query;
436                 continue;
437             }
438
439             if( query->SetPredicate( "name = VIDEO_TS.BUP" ) != B_OK )
440             {
441                 delete query;
442                 continue;
443             }
444
445             query->Fetch();
446
447             BEntry entry, parentEntry;
448             BPath  path;
449             while( query->GetNextEntry( &entry ) == B_OK )
450             {
451                 entry.GetParent( &parentEntry );
452                 parentEntry.GetPath( &path );
453
454                 volume = new HBVolume( (char*) path.Path() );
455                 volumeList->AddItem( volume );
456             }
457
458             delete query;
459         }
460     }
461
462     fManager->ScanVolumes( volumeList );
463 }
464
465 void HBWindow::UpdateInterface( HBWindow * _this )
466 {
467     for( ;; )
468     {
469         _this->_UpdateInterface();
470         snooze( 10000 );
471     }
472 }
473
474 void HBWindow::_UpdateInterface()
475 {
476     if( !fManager->NeedUpdate() )
477     {
478         return;
479     }
480
481     HBStatus status = fManager->GetStatus();
482
483     if( !Lock() )
484     {
485         fprintf( stderr, "Lock() failed\n" );
486         return;
487     }
488
489     EnableInterface( status.fMode );
490
491     switch( status.fMode )
492     {
493         case HB_MODE_UNDEF:
494             break;
495
496         case HB_MODE_SCANNING:
497         {
498             char text[1024]; memset( text, 0, 1024 );
499             sprintf( text, "Scanning %s, title %d...",
500                      status.fScannedVolume, status.fScannedTitle );
501             fStatusBar->Update( - fStatusBar->CurrentValue(), text );
502             break;
503         }
504
505         case HB_MODE_SCANDONE:
506         {
507             HBVolume * volume;
508             for( uint32_t i = 0;
509                  i < status.fVolumeList->CountItems();
510                  i++ )
511             {
512                 volume = (HBVolume*) status.fVolumeList->ItemAt( i );
513                 fVolumePopUp->AddItem( new HBVolumeItem( volume ) );
514             }
515             ((HBVolumeItem*) fVolumePopUp->ItemAt( 0 ))->SetMarked( true );
516
517             HBTitle * title;
518             volume = (HBVolume*) status.fVolumeList->ItemAt( 0 );
519             for( uint32_t i = 0;
520                  i < volume->fTitleList->CountItems();
521                  i++ )
522             {
523                 title = (HBTitle*) volume->fTitleList->ItemAt( i );
524                 fTitlePopUp->AddItem( new HBTitleItem( title ) );
525             }
526             ((HBTitleItem*) fTitlePopUp->ItemAt( 0 ))->SetMarked( true );
527
528             HBAudio * audio;
529             title = (HBTitle*) volume->fTitleList->ItemAt( 0 );
530             for( uint32_t i = 0;
531                  i < title->fAudioList->CountItems();
532                  i++ )
533             {
534                 audio = (HBAudio*) title->fAudioList->ItemAt( i );
535                 fAudio1PopUp->AddItem( new HBAudioItem( audio ) );
536                 fAudio2PopUp->AddItem( new HBAudioItem( audio ) );
537             }
538             fAudio1PopUp->AddItem( new HBAudioItem( NULL ) );
539             fAudio2PopUp->AddItem( new HBAudioItem( NULL ) );
540             ((HBAudioItem*) fAudio1PopUp->ItemAt( 0 ))->SetMarked( true );
541             ((HBAudioItem*) fAudio2PopUp->ItemAt(
542                 fAudio2PopUp->CountItems() - 1 ))->SetMarked( true );
543
544             fStatusBar->Update( - fStatusBar->CurrentValue(),
545                                 "Ready. Press 'Start' to rip." );
546             break;
547         }
548
549         case HB_MODE_ENCODING:
550         {
551             char text[1024]; memset( text, 0, 1024 );
552             sprintf( text,
553                      "Encoding : %.2f %%, %.2f fps (%02d:%02d:%02d remaining)",
554                      100 * status.fPosition, status.fFrameRate,
555                      status.fRemainingTime / 3600,
556                      ( status.fRemainingTime % 3600 ) / 60,
557                      status.fRemainingTime % 60 );
558             fStatusBar->Update( status.fPosition -
559                                 fStatusBar->CurrentValue(), text );
560             break;
561         }
562
563         case HB_MODE_SUSPENDED:
564         {
565             char text[1024]; memset( text, 0, 1024 );
566             sprintf( text, "Encoding : %.2f %%, %.2f fps (Paused)",
567                      100 * status.fPosition, status.fFrameRate );
568             fStatusBar->Update( status.fPosition -
569                                 fStatusBar->CurrentValue(), text );
570             break;
571         }
572
573         case HB_MODE_DONE:
574             break;
575
576         case HB_MODE_CANCELED:
577             break;
578
579         case HB_MODE_ERROR:
580             break;
581
582         default:
583             break;
584     }
585
586     Unlock();
587 }
588
589 void HBWindow::EnableInterface( HBMode mode )
590 {
591     if( mode == fOldMode && mode != HB_MODE_UNDEF )
592     {
593         return;
594     }
595
596     switch( mode )
597     {
598         case HB_MODE_UNDEF:
599         {
600             fAdvancedButton->SetEnabled( false );
601             fFileButton->SetEnabled( false );
602             fPictureButton->SetEnabled( false );
603             fStartButton->SetEnabled( false );
604             fSuspendButton->SetEnabled( false );
605             fAudio1Field->SetEnabled( false );
606             fAudio2Field->SetEnabled( false );
607             fTitleField->SetEnabled( false );
608             fVolumeField->SetEnabled( false );
609             fAudioSlider->SetEnabled( false );
610             fVideoSlider->SetEnabled( false );
611             fFileString->SetHighColor( 156, 156, 156 );
612             fFileString->Invalidate();
613             fFileControl->SetEnabled( false );
614             break;
615         }
616
617         case HB_MODE_SCANNING:
618         {
619             fAdvancedButton->SetEnabled( true );
620             fFileButton->SetEnabled( true );
621             fPictureButton->SetEnabled( false );
622             fStartButton->SetEnabled( false );
623             fSuspendButton->SetEnabled( false );
624             fAudio1Field->SetEnabled( false );
625             fAudio2Field->SetEnabled( false );
626             fTitleField->SetEnabled( false );
627             fVolumeField->SetEnabled( false );
628             fAudioSlider->SetEnabled( true );
629             fVideoSlider->SetEnabled( true );
630             fFileString->SetHighColor( 0, 0, 0 );
631             fFileString->Invalidate();
632             fFileControl->SetEnabled( true );
633             break;
634         }
635
636         case HB_MODE_SCANDONE:
637         {
638             fAdvancedButton->SetEnabled( true );
639             fFileButton->SetEnabled( true );
640             fPictureButton->SetEnabled( true );
641             fStartButton->SetLabel( "Start" );
642             fStartButton->SetMessage( new BMessage( BUTTON_START ) );
643             fStartButton->SetEnabled( true );
644             fSuspendButton->SetEnabled( false );
645             fAudio1Field->SetEnabled( true );
646             fAudio2Field->SetEnabled( true );
647             fTitleField->SetEnabled( true );
648             fVolumeField->SetEnabled( true );
649             fAudioSlider->SetEnabled( true );
650             fVideoSlider->SetEnabled( true );
651             fFileString->SetHighColor( 0, 0, 0 );
652             fFileString->Invalidate();
653             fFileControl->SetEnabled( true );
654             break;
655         }
656
657         case HB_MODE_ENCODING:
658         {
659             fFileButton->SetEnabled( false );
660             fPictureButton->SetEnabled( false );
661             fStartButton->SetLabel( "Cancel" );
662             fStartButton->SetMessage( new BMessage( BUTTON_CANCEL ) );
663             fStartButton->SetEnabled( true );
664             fSuspendButton->SetLabel( "Suspend" );
665             fSuspendButton->SetMessage( new BMessage( BUTTON_SUSPEND ) );
666             fSuspendButton->SetEnabled( true );
667             fAudio1Field->SetEnabled( false );
668             fAudio2Field->SetEnabled( false );
669             fTitleField->SetEnabled( false );
670             fVolumeField->SetEnabled( false );
671             fAudioSlider->SetEnabled( false );
672             fVideoSlider->SetEnabled( false );
673             fFileString->SetHighColor( 156, 156, 156 );
674             fFileString->Invalidate();
675             fFileControl->SetEnabled( false );
676             break;
677         }
678
679         case HB_MODE_SUSPENDED:
680         {
681             fFileButton->SetEnabled( false );
682             fPictureButton->SetEnabled( false );
683             fStartButton->SetLabel( "Cancel" );
684             fStartButton->SetMessage( new BMessage( BUTTON_CANCEL ) );
685             fStartButton->SetEnabled( true );
686             fSuspendButton->SetLabel( "Resume" );
687             fSuspendButton->SetMessage( new BMessage( BUTTON_RESUME ) );
688             fSuspendButton->SetEnabled( true );
689             fAudio1Field->SetEnabled( false );
690             fAudio2Field->SetEnabled( false );
691             fTitleField->SetEnabled( false );
692             fVolumeField->SetEnabled( false );
693             fAudioSlider->SetEnabled( false );
694             fVideoSlider->SetEnabled( false );
695             fFileString->SetHighColor( 156, 156, 156 );
696             fFileString->Invalidate();
697             fFileControl->SetEnabled( false );
698             break;
699         }
700
701         case HB_MODE_DONE:
702         {
703             fFileButton->SetEnabled( false );
704             fPictureButton->SetEnabled( false );
705             fStartButton->SetEnabled( true );
706             fSuspendButton->SetEnabled( true );
707             fAudio1Field->SetEnabled( false );
708             fAudio2Field->SetEnabled( false );
709             fTitleField->SetEnabled( false );
710             fVolumeField->SetEnabled( false );
711             fAudioSlider->SetEnabled( false );
712             fVideoSlider->SetEnabled( false );
713             fFileString->SetHighColor( 156, 156, 156 );
714             fFileString->Invalidate();
715             fFileControl->SetEnabled( false );
716             break;
717         }
718
719         case HB_MODE_CANCELED:
720         {
721             fFileButton->SetEnabled( false );
722             fPictureButton->SetEnabled( false );
723             fStartButton->SetEnabled( true );
724             fSuspendButton->SetEnabled( true );
725             fAudio1Field->SetEnabled( false );
726             fAudio2Field->SetEnabled( false );
727             fTitleField->SetEnabled( false );
728             fVolumeField->SetEnabled( false );
729             fAudioSlider->SetEnabled( false );
730             fVideoSlider->SetEnabled( false );
731             fFileString->SetHighColor( 156, 156, 156 );
732             fFileString->Invalidate();
733             fFileControl->SetEnabled( false );
734             break;
735         }
736
737         case HB_MODE_ERROR:
738         {
739             fFileButton->SetEnabled( false );
740             fPictureButton->SetEnabled( false );
741             fStartButton->SetEnabled( true );
742             fSuspendButton->SetEnabled( true );
743             fAudio1Field->SetEnabled( false );
744             fAudio2Field->SetEnabled( false );
745             fTitleField->SetEnabled( false );
746             fVolumeField->SetEnabled( false );
747             fAudioSlider->SetEnabled( false );
748             fVideoSlider->SetEnabled( false );
749             fFileString->SetHighColor( 156, 156, 156 );
750             fFileString->Invalidate();
751             fFileControl->SetEnabled( false );
752             break;
753         }
754
755         default:
756             break;
757     }
758 }
759