Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

PageTrim Class Reference

This class controls the scene trimmer notebook page. More...

#include <page_trim.h>

Inheritance diagram for PageTrim:

Inheritance graph
[legend]
Collaboration diagram for PageTrim:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 PageTrim (KinoCommon *common)
virtual ~PageTrim ()
 Destructor for the trimmer page object.
FrameDisplayergetFrameDisplayer ()
int getInPoint ()
int getOutPoint ()
PlayListgetPlayList ()
int getTotalFrames ()
int getPosition ()
void setInPoint (int value)
void setOutPoint (int value)
void setPosition (int value)
gulong activate ()
 Activate the returned widgets.
void newFile ()
 New File action.
void start ()
 Start action.
void clean ()
 Clean action.
gboolean processKeyboard (GdkEventKey *event)
 Process a keyboard event.
gboolean processCommand (char *cmd)
 Internal method for handling a complete keyboard scene.
void selectScene (int)
 Load the selected scene.
void videoStartOfMovie ()
 Move to the start of the scene.
void videoPreviousScene ()
 Move to the in point of the scene.
void videoStartOfScene ()
 Move to the in point of the scene.
void videoRewind ()
 Rewind.
void videoBack (int step=-1)
 Move one frame back.
void videoPlay ()
 Play.
void videoForward (int step=1)
 Move one frame forward.
void videoFastForward ()
 Fast forward.
void videoShuttle (int)
 Shuttle.
void videoNextScene ()
 Move to the end of the current scene.
void videoEndOfScene ()
 Move to the end of the current scene.
void videoEndOfMovie ()
 Move to the end of the play list.
void videoPause ()
 Pause.
void videoStop ()
 Stop.
void startNavigator ()
 Starts the navigator thread.
void stopNavigator ()
 Stops the navigator thread.
void movedToFrame (int frame)
 Called when the current frame has changed through the common moveToFrame method and this page is the current page.
void showFrame (int, gboolean)
 Show the frame requested.
void showFrame (int, Frame &)
void windowMoved ()
void showFrameInfo (int)
void resetInPoint ()
void resetOutPoint ()
int getSceneIndex ()
bool loadFile (const string &)
 Loads a clip into the trimmer.
void insertScene (TrimInsertMode)
 Inserts the clip currently in the trimmer into the movie.
void loadScene (int currentScene)
 Load a scene from the movie into the trimmer to edit it.
void saveScene ()
 Saves the scene currently being edited back to the movie.
void setMode (PageTrimMode)
void timeFormatChanged ()
std::string getHelpPage ()

Private Attributes

KinoCommoncommon
FrameDisplayerdisplayer
GtkDrawingArea * frameArea
GtkLabel * positionLabelCurrent
GtkLabel * positionLabelTotal
GtkWidget * trim
GtkButton * reset_in
GtkButton * reset_out
PlayList playlist
gint idleCommand
gboolean idleCommandActive
int start_orig
int update_start
int end_orig
int in_orig
int out_orig
int in
int out
int max
int pos
int currentScene
int lastPos
PageTrimMode mode
bool changed
PlayListg_copiedPlayList

Detailed Description

This class controls the scene trimmer notebook page.

Definition at line 51 of file page_trim.h.


Constructor & Destructor Documentation

PageTrim::PageTrim KinoCommon common  ) 
 

Definition at line 476 of file page_trim.cc.

References frameArea, g_copiedPlayList, KinoCommon::getWidget(), gtk_enhanced_scale_new(), link_toggle, lookup_widget(), loop_toggle, on_trim_button_press_event(), on_trim_button_release_event(), on_trim_value_changed_event(), positionLabelCurrent, positionLabelTotal, spin_in, spin_out, trim, trim_adj, TRIM_ADJ_IN, TRIM_ADJ_OUT, and TRIM_ADJ_POS.

00476                                        :
00477         start_orig( 0 ), update_start(0), end_orig( 0 ), in_orig( 0 ), out_orig( 0 ), in( 0 ), out( 0 ),
00478         max( 0 ), pos( -1 ), currentScene( 0 ), lastPos( -1 ), mode( PAGE_TRIM_MODE_UNKNOWN ),
00479         changed( false )
00480 {
00481     cerr << "> Creating page trim" << endl;
00482     this->common = common;
00483     this->frameArea = GTK_DRAWING_AREA( lookup_widget( common->getWidget(), "drawingarea_trim" ) );
00484     gtk_widget_set_double_buffered( GTK_WIDGET( frameArea ), FALSE );
00485     this->positionLabelCurrent = GTK_LABEL( lookup_widget( common->getWidget(), "position_label_current" ) );
00486     this->positionLabelTotal = GTK_LABEL( lookup_widget( common->getWidget(), "position_label_total" ) );
00487     spin_in = GTK_SPIN_BUTTON( lookup_widget( common->getWidget(), "spinbutton_trim_in" ) );
00488     spin_out = GTK_SPIN_BUTTON( lookup_widget( common->getWidget(), "spinbutton_trim_out" ) );
00489     link_toggle = GTK_TOGGLE_BUTTON( lookup_widget( common->getWidget(), "togglebutton_trim_link" ) );
00490     loop_toggle = GTK_TOGGLE_BUTTON( lookup_widget( common->getWidget(), "togglebutton_trim_loop" ) );
00491 
00492     this->g_copiedPlayList = new PlayList();
00493 
00494     // Attach the custom GTK+ Trim control
00495     trim_adj[ TRIM_ADJ_POS ] = GTK_ADJUSTMENT(
00496                                    gtk_adjustment_new( 0, 0, 0, 1, 10, 0 ) );
00497     trim_adj[ TRIM_ADJ_IN ] = GTK_ADJUSTMENT(
00498                                   gtk_adjustment_new( 0, 0, 0, 1, 10, 0 ) );
00499     trim_adj[ TRIM_ADJ_OUT ] = GTK_ADJUSTMENT(
00500                                    gtk_adjustment_new( 0, 0, 0, 1, 10, 0 ) );
00501     for ( int i = 0; i < 3; i++ )
00502         g_signal_connect ( G_OBJECT ( trim_adj[ i ] ), "value_changed",
00503                            G_CALLBACK( on_trim_value_changed_event ), ( gpointer ) i );
00504     trim = gtk_enhanced_scale_new( ( GtkObject** ) trim_adj, 3 );
00505     gtk_widget_set_name ( trim, "trim" );
00506     gtk_widget_ref( trim );
00507     gtk_object_set_data_full ( GTK_OBJECT( common->getWidget() ), "trim", trim,
00508                                ( GtkDestroyNotify ) gtk_widget_unref );
00509     GtkWidget *vbox_trim = lookup_widget( common->getWidget(), "vbox_trim_custom" );
00510     gtk_widget_show( trim );
00511     gtk_box_pack_start( GTK_BOX ( vbox_trim ), trim, FALSE, TRUE, 0 );
00512     g_signal_connect( G_OBJECT( trim ), "button_press_event",
00513                       G_CALLBACK( on_trim_button_press_event ), NULL );
00514     g_signal_connect( G_OBJECT( trim ), "button_release_event",
00515                       G_CALLBACK( on_trim_button_release_event ), NULL );
00516 }

PageTrim::~PageTrim  )  [virtual]
 

Destructor for the trimmer page object.

Definition at line 521 of file page_trim.cc.

References g_copiedPlayList.

00522 {
00523     cerr << "> Destroying page trim" << endl;
00524     delete this->g_copiedPlayList;
00525 }


Member Function Documentation

gulong PageTrim::activate  )  [virtual]
 

Activate the returned widgets.

Reimplemented from Page.

Definition at line 605 of file page_trim.cc.

References EDIT_MENU, INFO_FRAME, SCENE_LIST, VIDEO_BACK, VIDEO_END_OF_MOVIE, VIDEO_FAST_FORWARD, VIDEO_FORWARD, VIDEO_NEXT_SCENE, VIDEO_PAUSE, VIDEO_PLAY, VIDEO_REWIND, VIDEO_SHUTTLE, VIDEO_START_OF_MOVIE, VIDEO_START_OF_SCENE, and VIDEO_STOP.

00606 {
00607     return EDIT_MENU |
00608            SCENE_LIST |
00609            VIDEO_START_OF_MOVIE |
00610            VIDEO_START_OF_SCENE |
00611            VIDEO_REWIND |
00612            VIDEO_BACK |
00613            VIDEO_PLAY |
00614            VIDEO_PAUSE |
00615            VIDEO_STOP |
00616            VIDEO_FORWARD |
00617            VIDEO_FAST_FORWARD |
00618            VIDEO_NEXT_SCENE |
00619            VIDEO_END_OF_MOVIE |
00620            VIDEO_SHUTTLE |
00621            INFO_FRAME;
00622 }

void PageTrim::clean  )  [virtual]
 

Clean action.

Called when another page becomes current.

Reimplemented from Page.

Definition at line 627 of file page_trim.cc.

References displayer, frameContent, GetFramePool(), PLAYBACK_FRAMES, saveScene(), stopNavigator(), and writer1394.

00628 {
00629     cerr << ">> Leaving Trimmer" << endl;
00630     stopNavigator();
00631     delete displayer;
00632     displayer = 0;
00633     delete writer1394;
00634     writer1394 = NULL;
00635     saveScene();
00636     for ( int i = 0; i < PLAYBACK_FRAMES; i ++ )
00637         GetFramePool( ) ->DoneWithFrame( frameContent[ i ] );
00638 
00639     cerr << ">> Left Trimmer" << endl;
00640 }

FrameDisplayer* PageTrim::getFrameDisplayer  )  [inline]
 

Definition at line 90 of file page_trim.h.

References displayer.

Referenced by showFrame(), and stopNavigator().

00091     {
00092         return this->displayer;
00093     }

std::string PageTrim::getHelpPage  )  [inline, virtual]
 

Reimplemented from Page.

Definition at line 169 of file page_trim.h.

00170     {
00171         return "trim";
00172     }

int PageTrim::getInPoint  )  [inline]
 

Definition at line 94 of file page_trim.h.

References in.

00095     {
00096         return this->in;
00097     }

int PageTrim::getOutPoint  )  [inline]
 

Definition at line 98 of file page_trim.h.

References out.

00099     {
00100         return this->out;
00101     }

PlayList& PageTrim::getPlayList  )  [inline]
 

Definition at line 102 of file page_trim.h.

References playlist.

Referenced by processCommand().

00103     {
00104         return this->playlist;
00105     }

int PageTrim::getPosition  )  [inline]
 

Definition at line 110 of file page_trim.h.

References pos.

00111     {
00112         return this->pos;
00113     }

int PageTrim::getSceneIndex  ) 
 

Definition at line 1330 of file page_trim.cc.

References common, currentScene, KinoCommon::getPageEditor(), and KinoCommon::getPlayList().

Referenced by insertScene(), and processCommand().

01331 {
01332     int i = 0;
01333     if ( common->getPlayList()->GetNumFrames() > 0 )
01334     {
01335         vector <int> scene = common->getPageEditor() ->GetScene();
01336         for ( i = 0; i < (int) scene.size() - 1; i++ )
01337             if ( currentScene < scene[ i ] )
01338                 break;
01339     }
01340     else
01341     {
01342         i = -1;
01343     }
01344     return i;
01345 }

int PageTrim::getTotalFrames  )  [inline]
 

Definition at line 106 of file page_trim.h.

References max.

00107     {
00108         return this->max + 1;
00109     }

void PageTrim::insertScene TrimInsertMode  insertMode  ) 
 

Inserts the clip currently in the trimmer into the movie.

Parameters:
insertMode Indicates whether to insert before or after the current position.

Definition at line 834 of file page_trim.cc.

References common, PlayList::Delete(), end_orig, navigate_control::escaped, KinoCommon::g_currentFrame, g_nav_ctl, GetEditorBackup(), GetFileMap(), PlayList::GetNumFrames(), KinoCommon::getPageEditor(), KinoCommon::getPlayList(), getSceneIndex(), KinoCommon::getWidget(), KinoCommon::hasListChanged, in, lookup_widget(), max, out, playlist, selectScene(), KinoCommon::setCurrentScene(), KinoCommon::setWindowTitle(), start_orig, TRIM_INSERT_MODE_AFTER, and TRIM_INSERT_MODE_BEFORE.

Referenced by processCommand().

00835 {
00836     if ( playlist.GetNumFrames() > 0 )
00837     {
00838         int i = getSceneIndex();
00839 
00840         if ( insertMode == TRIM_INSERT_MODE_BEFORE )
00841         {
00842             PlayList tmp;
00843             tmp = playlist;
00844             tmp.Delete( out + 1, max );
00845             tmp.Delete( 0, in - 1 );
00846             common->getPlayList()->InsertPlayList( tmp, start_orig );
00847         }
00848         else if ( insertMode == TRIM_INSERT_MODE_AFTER )
00849         {
00850             PlayList tmp;
00851             tmp = playlist;
00852             tmp.Delete( out + 1, max );
00853             tmp.Delete( 0, in - 1 );
00854             common->getPlayList()->InsertPlayList( tmp, end_orig + 1 );
00855             i++;
00856         }
00857         GetEditorBackup()->Store( common->getPlayList() );
00858         common->hasListChanged = TRUE;
00859         common->setWindowTitle( );
00860         common->getPageEditor()->DrawBar( common->g_currentFrame );
00861         selectScene( i );
00862         common->setCurrentScene( start_orig );
00863 
00864         // Refresh the combo menu
00865         GList *items = NULL;
00866         const char *filename = gtk_entry_get_text( GTK_ENTRY( lookup_widget( GTK_WIDGET( common->getWidget() ), "entry_trim_clip" ) ) );
00867         map<string, FileHandler*>::iterator n;
00868         items = g_list_append( items, ( void* ) filename );
00869         for ( n = GetFileMap()->GetMap().begin(); n != GetFileMap()->GetMap().end(); ++n )
00870             if ( strcmp( n->first.c_str(), filename ) )
00871                 items = g_list_append( items, ( void* ) n->first.c_str() );
00872         g_nav_ctl.escaped = TRUE;
00873         gtk_combo_set_popdown_strings( GTK_COMBO( lookup_widget( common->getWidget(), "combo_trim_clip" ) ), items);
00874         g_nav_ctl.escaped = FALSE;
00875     }
00876 }

bool PageTrim::loadFile const string &  filename  ) 
 

Loads a clip into the trimmer.

Parameters:
filename The name of the clip to load.
Returns:
true if the clip loaded successfully.

Definition at line 770 of file page_trim.cc.

References changed, common, currentScene, end_orig, PlayList::GetNumFrames(), KinoCommon::getPlayList(), in, in_orig, lastPos, PlayList::LoadMediaObject(), max, out, out_orig, playlist, pos, spin_in, spin_out, start_orig, timeFormatChanged(), trim_adj, TRIM_ADJ_IN, TRIM_ADJ_OUT, and TRIM_ADJ_POS.

Referenced by movedToFrame().

00771 {
00772     PlayList newList;
00773     bool result = true;
00774 
00775     try
00776     {
00777         if ( newList.LoadMediaObject( const_cast< char* >( filename.c_str() ) ) )
00778         {
00779             playlist = newList;
00780             start_orig = common->getPlayList()->FindStartOfScene( currentScene );
00781             end_orig = common->getPlayList()->FindEndOfScene( currentScene );
00782             in = in_orig = lastPos = pos = 0;
00783             out = out_orig = max = playlist.GetNumFrames() - 1;
00784             changed = true;
00785 
00786             trim_adj[ TRIM_ADJ_IN ] ->upper = max;
00787             trim_adj[ TRIM_ADJ_IN ] ->value = in;
00788             g_signal_emit_by_name( trim_adj[ TRIM_ADJ_IN ], "changed" );
00789             trim_adj[ TRIM_ADJ_OUT ] ->upper = max;
00790             trim_adj[ TRIM_ADJ_OUT ] ->value = out;
00791             g_signal_emit_by_name( trim_adj[ TRIM_ADJ_OUT ], "changed" );
00792             trim_adj[ TRIM_ADJ_POS ] ->upper = max;
00793             g_signal_emit_by_name( trim_adj[ TRIM_ADJ_POS ], "changed" );
00794 
00795             GtkAdjustment *adjust = gtk_spin_button_get_adjustment( spin_in );
00796             adjust->lower = 0;
00797             adjust->upper = max;
00798             adjust->value = in;
00799             g_signal_emit_by_name( adjust, "changed" );
00800             gtk_spin_button_set_value( spin_in, ( gfloat ) in );
00801 
00802             adjust = gtk_spin_button_get_adjustment( spin_out );
00803             adjust->lower = 0;
00804             adjust->upper = max;
00805             adjust->value = out;
00806             g_signal_emit_by_name( adjust, "changed" );
00807             gtk_spin_button_set_value( spin_out, ( gfloat ) out );
00808             
00809             timeFormatChanged();
00810         }
00811         else
00812         {
00813             // XXX: the following is making gtk abort
00814             // modal_message( _( "Failed to load media file." ) );
00815             result = false;
00816         }
00817     }
00818     catch ( string s )
00819     {
00820         cerr << "Could not load file " << filename << ", because an exception has occurred: " << endl;
00821         cerr << s << endl;
00822         result = false;
00823     }
00824 
00825     return result;
00826 }

void PageTrim::loadScene int  newScene  ) 
 

Load a scene from the movie into the trimmer to edit it.

Parameters:
newScene The index of the scene to load.

Definition at line 647 of file page_trim.cc.

References common, currentScene, end_orig, navigate_control::escaped, PlayList::FindEndOfScene(), PlayList::FindStartOfScene(), g_nav_ctl, PlayList::GetClipBegin(), PlayList::GetClipEnd(), PlayList::GetMediaObject(), PlayList::GetNumFrames(), PlayList::GetPlayList(), KinoCommon::getPlayList(), FileHandler::GetTotalFrames(), KinoCommon::getWidget(), in, in_orig, lastPos, lookup_widget(), max, out, out_orig, playlist, pos, PlayList::SetClipBegin(), PlayList::SetClipEnd(), KinoCommon::setCurrentScene(), spin_in, spin_out, start_orig, timeFormatChanged(), trim_adj, TRIM_ADJ_IN, TRIM_ADJ_OUT, TRIM_ADJ_POS, and update_start.

Referenced by movedToFrame(), processCommand(), selectScene(), setMode(), and start().

00648 {
00649     char value[ 20 ];
00650     PlayList newPlayList;
00651     playlist = newPlayList;
00652     PlayList *pl = common->getPlayList();
00653     FileHandler *media;
00654 
00655     currentScene = newScene;
00656 
00657     // first, save begin and end time markers to region of the
00658     // the whole movie that this scene represents
00659     update_start = start_orig = pl->FindStartOfScene( currentScene );
00660     end_orig = pl->FindEndOfScene( currentScene );
00661 
00662     // get a local playlist representing just the scene
00663     // based on time markers in the movie
00664     pl->GetPlayList( start_orig, end_orig, playlist );
00665 
00666     // set the in point and current position to the in point
00667     // of the first clip in the scene
00668     in = in_orig = lastPos = pos = pl->GetClipBegin( currentScene );
00669 
00670     // unwind the clip at the beginning of the scene
00671     playlist.SetClipBegin( 0, "0" );
00672 
00673     // get the clip at the end of the scene
00674     playlist.GetMediaObject( playlist.FindEndOfScene( 0 ), &media );
00675 
00676     // unwind the clip at the end of the scene
00677     // XXX: what about frames deleted from the beginning or middle
00678     // of a multi-clip scene?
00679     int prevClipEnd = playlist.GetClipEnd( playlist.GetNumFrames() - 1 );
00680     int newClipEnd = media->GetTotalFrames() - 1;
00681     snprintf( value, 19, "%i", newClipEnd );
00682     playlist.SetClipEnd( playlist.GetNumFrames() - 1, value );
00683 
00684     // get the total number of frames now in the local playlist
00685     max = playlist.GetNumFrames() - 1;
00686 
00687     // set the out point to the difference between out point before
00688     // and after unwinding
00689     out = out_orig = max - ( newClipEnd - prevClipEnd );
00690 
00691     // inform controller of our scene change
00692     common->setCurrentScene( start_orig );
00693 
00694     // update the trim UI
00695     trim_adj[ TRIM_ADJ_IN ] ->upper = max;
00696     trim_adj[ TRIM_ADJ_IN ] ->value = in;
00697     g_signal_emit_by_name( trim_adj[ TRIM_ADJ_IN ], "changed" );
00698     trim_adj[ TRIM_ADJ_OUT ] ->upper = max;
00699     trim_adj[ TRIM_ADJ_OUT ] ->value = out;
00700     g_signal_emit_by_name( trim_adj[ TRIM_ADJ_OUT ], "changed" );
00701     trim_adj[ TRIM_ADJ_POS ] ->upper = max;
00702     g_signal_emit_by_name( trim_adj[ TRIM_ADJ_POS ], "changed" );
00703 
00704     // Recalibrate the spinners
00705     GtkAdjustment *adjust = gtk_spin_button_get_adjustment( spin_in );
00706     adjust->lower = 0;
00707     adjust->upper = max;
00708     adjust->value = in;
00709     g_signal_emit_by_name( adjust, "changed" );
00710     gtk_spin_button_set_value( spin_in, ( gfloat ) in );
00711 
00712     adjust = gtk_spin_button_get_adjustment( spin_out );
00713     adjust->lower = 0;
00714     adjust->upper = max;
00715     adjust->value = out;
00716     g_signal_emit_by_name( adjust, "changed" );
00717     gtk_spin_button_set_value( spin_out, ( gfloat ) out );
00718 
00719     g_nav_ctl.escaped = TRUE;
00720     gtk_entry_set_text( GTK_ENTRY( lookup_widget( common->getWidget(), "entry_trim_clip" ) ), "" );
00721     g_nav_ctl.escaped = FALSE;
00722 
00723     timeFormatChanged();
00724 }

void PageTrim::movedToFrame int  frame  )  [virtual]
 

Called when the current frame has changed through the common moveToFrame method and this page is the current page.

Parameters:
frame frame moved to

Reimplemented from Page.

Definition at line 944 of file page_trim.cc.

References navigate_control::active, common, g_nav_ctl, Preferences::getInstance(), KinoCommon::getPageEditor(), KinoCommon::getPlayList(), KinoCommon::getWidget(), KinoCommon::hasListChanged, in, lastFrame, lastPos, loadFile(), loadScene(), lookup_widget(), loop_toggle, max, mode, newFrame, out, PAGE_TRIM_MODE_INSERT, PAGE_TRIM_MODE_UPDATE, pos, showFrame(), skipPosUpdate, and startNavigator().

Referenced by processCommand(), selectScene(), start(), videoEndOfMovie(), videoEndOfScene(), videoNextScene(), videoPreviousScene(), videoStartOfMovie(), and videoStartOfScene().

00945 {
00946     if ( common->hasListChanged == TRUE )
00947     {
00948         common->getPageEditor()->ResetBar();
00949         common->hasListChanged = FALSE;
00950 
00951         if ( mode == PAGE_TRIM_MODE_UPDATE &&
00952             common->getPlayList() ->GetNumFrames() > 0 )
00953         {
00954             loadScene( frame );
00955             frame = in;
00956         }
00957         else if ( mode == PAGE_TRIM_MODE_INSERT )
00958         {
00959             const char *file = gtk_entry_get_text( GTK_ENTRY( lookup_widget( GTK_WIDGET( common->getWidget() ), "entry_trim_clip" ) ) );
00960             if ( file && strcmp( file, "" ) )
00961             {
00962                 loadFile( file );
00963                 frame = pos;
00964             }
00965         }
00966     }
00967     if ( max > 0 )
00968     {
00969         if ( frame > out && gtk_toggle_button_get_active( loop_toggle ) == TRUE )
00970             pos = in;
00971         else if ( frame < in && gtk_toggle_button_get_active( loop_toggle ) == TRUE )
00972             pos = out;
00973         else if ( frame >= 0 && frame <= max )
00974             pos = frame;
00975         else if ( frame >= max )
00976             pos = max;
00977         else if ( frame < 0 && max > 0 )
00978             pos = 0;
00979         else
00980             pos = -1;
00981 
00982         if ( g_nav_ctl.active == FALSE )
00983         {
00984             skipPosUpdate = FALSE;
00985             showFrame( pos, ( pos == lastPos ) || ( Preferences::getInstance().audioScrub == FALSE ) );
00986         }
00987         else
00988         {
00989             lastFrame = newFrame = pos;
00990             startNavigator();
00991         }
00992     }
00993 }

void PageTrim::newFile  )  [virtual]
 

New File action.

Reimplemented from Page.

Definition at line 530 of file page_trim.cc.

References stopNavigator().

00531 {
00532     this->stopNavigator();
00533 }

gboolean PageTrim::processCommand char *  command  )  [virtual]
 

Internal method for handling a complete keyboard scene.

Parameters:
cmd command to be processed;

Reimplemented from Page.

Definition at line 1483 of file page_trim.cc.

References _getOneSecond(), navigate_control::active, CAPTURE_FRAME_APPEND, CAPTURE_MOVIE_APPEND, KinoCommon::changePageRequest(), cmd, common, count, currentScene, end_orig, KinoCommon::g_currentFrame, g_nav_ctl, GetEditorBackup(), FileTracker::GetInstance(), KinoCommon::getPageEditor(), KinoCommon::getPageTrim(), KinoCommon::getPlayList(), getPlayList(), getSceneIndex(), KinoCommon::hasListChanged, in, insertScene(), KinoCommon::keyboardFeedback(), kinoDeactivate(), lastcmd, link_toggle, loadScene(), loop_toggle, mode, movedToFrame(), KinoCommon::moveToFrame(), moveToFrame(), out, PAGE_CAPTURE, PAGE_EDITOR, PAGE_EXPORT, PAGE_MAGICK, PAGE_TIMELINE, PAGE_TRIM_MODE_INSERT, PAGE_TRIM_MODE_UPDATE, pos, resetInPoint(), resetOutPoint(), KinoCommon::savePlayList(), saveScene(), selectScene(), setMode(), KinoCommon::setStatusBar(), start_orig, trim_adj, TRIM_ADJ_IN, TRIM_ADJ_OUT, TRIM_ADJ_POS, TRIM_INSERT_MODE_AFTER, TRIM_INSERT_MODE_BEFORE, KinoCommon::videoEndOfMovie(), KinoCommon::videoEndOfScene(), KinoCommon::videoPause(), KinoCommon::videoPlay(), KinoCommon::videoStartOfMovie(), KinoCommon::videoStartOfScene(), and KinoCommon::videoStop().

Referenced by processKeyboard().

01484 {
01485     int end;
01486     int count = 1;
01487     char real[ 256 ] = "";
01488 
01489     strcpy( cmd, command );
01490 
01491     switch ( sscanf( cmd, "%d%s", &count, real ) )
01492     {
01493     case 1:
01494         // Numeric value only - return immediately if the cmd is not "0"
01495         if ( strcmp( cmd, "0" ) )
01496         {
01497             common->keyboardFeedback( cmd, "" );
01498             return FALSE;
01499         }
01500         break;
01501     case 0:
01502         sscanf( cmd, "%s", real );
01503         count = 1;
01504         break;
01505     }
01506 
01507     if ( strcmp( cmd, "." ) )
01508         strcpy( lastcmd, cmd );
01509 
01510     /* Navigation */
01511 
01512     /* play, pause */
01513 
01514     if ( strcmp( cmd, " " ) == 0 )
01515     {
01516         if ( g_nav_ctl.active == TRUE )
01517         {
01518             common->keyboardFeedback( cmd, _( "Pause" ) );
01519             common->videoPause( );
01520         }
01521         else
01522         {
01523             common->keyboardFeedback( cmd, _( "Play" ) );
01524             common->videoPlay( );
01525         }
01526         cmd[ 0 ] = 0;
01527     }
01528 
01529     else if ( strcmp( real, "Esc" ) == 0 )
01530     {
01531         common->keyboardFeedback( cmd, _( "Stop" ) );
01532         common->videoStop( );
01533         cmd[ 0 ] = 0;
01534     }
01535 
01536     else if ( strcmp( real, "Enter" ) == 0 )
01537     {
01538         if ( mode == PAGE_TRIM_MODE_UPDATE )
01539         {
01540             int pos = common->getPageTrim()->getPosition();
01541             common->keyboardFeedback( cmd, _( "Overwrite" ) );
01542             saveScene();
01543             loadScene( currentScene );
01544             movedToFrame( pos );
01545         }
01546         else if ( mode == PAGE_TRIM_MODE_INSERT )
01547         {
01548             common->keyboardFeedback( cmd, _( "Insert After" ) );
01549             insertScene( TRIM_INSERT_MODE_AFTER );
01550             movedToFrame( in );
01551         }
01552         cmd[ 0 ] = 0;
01553     }
01554 
01555     else if ( strcmp( real, ":r" ) == 0 )
01556     {
01557         common->keyboardFeedback( cmd, _( "Insert Before" ) );
01558         insertScene( TRIM_INSERT_MODE_BEFORE );
01559         cmd[ 0 ] = 0;
01560     }
01561 
01562     else if ( strcmp( real, ":a" ) == 0 )
01563     {
01564         common->keyboardFeedback( cmd, _( "Insert After" ) );
01565         insertScene( TRIM_INSERT_MODE_AFTER );
01566         cmd[ 0 ] = 0;
01567     }
01568 
01569     else if ( strcmp( real, "Ins" ) == 0 )
01570     {
01571         common->keyboardFeedback( cmd, _( "Toggle Insert/Overwrite" ) );
01572         setMode( mode == PAGE_TRIM_MODE_UPDATE ? PAGE_TRIM_MODE_INSERT : PAGE_TRIM_MODE_UPDATE );
01573         cmd[ 0 ] = 0;
01574     }
01575 
01576     /* advance one frame */
01577 
01578     else if ( strcmp( real, "l" ) == 0 )
01579     {
01580         common->keyboardFeedback( cmd, _( "Move forward" ) );
01581         movedToFrame( pos + count );
01582         cmd[ 0 ] = 0;
01583     }
01584 
01585     /* backspace one frame */
01586 
01587     else if ( strcmp( real, "h" ) == 0 )
01588     {
01589         common->keyboardFeedback( cmd, _( "Move backward" ) );
01590         movedToFrame( pos - count );
01591         cmd[ 0 ] = 0;
01592     }
01593 
01594     /* advance one second */
01595 
01596     else if ( strcmp( real, "w" ) == 0 || strcmp( real, "W" ) == 0 ||
01597               strcmp( real, "e" ) == 0 || strcmp( real, "E" ) == 0 )
01598     {
01599         common->keyboardFeedback( cmd, _( "Move forward second" ) );
01600         movedToFrame( pos + count * _getOneSecond() );
01601         cmd[ 0 ] = 0;
01602     }
01603 
01604     /* backspace one second */
01605 
01606     else if ( ( strcmp( real, "b" ) == 0 ) || ( strcmp( real, "B" ) == 0 ) )
01607     {
01608         common->keyboardFeedback( cmd, _( "Move backwards one second" ) );
01609         moveToFrame( pos - count * _getOneSecond() );
01610         cmd[ 0 ] = 0;
01611     }
01612 
01613     /* start of scene */
01614 
01615     else if ( ( strcmp( cmd, "0" ) == 0 ) || ( strcmp( real, "^" ) == 0 ) )
01616     {
01617         common->videoStartOfScene( );
01618         common->keyboardFeedback( cmd, _( "Move to start of scene" ) );
01619         cmd[ 0 ] = 0;
01620     }
01621 
01622     /* end of scene */
01623 
01624     else if ( strcmp( real, "$" ) == 0 )
01625     {
01626         common->videoEndOfScene( );
01627         common->keyboardFeedback( cmd, _( "Move to end of scene" ) );
01628         cmd[ 0 ] = 0;
01629     }
01630 
01631     /* start of next scene */
01632 
01633     else if ( ( strcmp( real, "j" ) == 0 ) || strcmp( real, "+" ) == 0 )
01634     {
01635         selectScene( getSceneIndex() + 1 );
01636         common->keyboardFeedback( cmd, _( "Move to start of next scene" ) );
01637         cmd[ 0 ] = 0;
01638     }
01639 
01640     /* start of previous scene */
01641 
01642     else if ( ( strcmp( real, "k" ) == 0 ) || ( strcmp( real, "-" ) == 0 ) )
01643     {
01644         selectScene( getSceneIndex() - 1 );
01645         common->keyboardFeedback( cmd, _( "Move to start of previous scene" ) );
01646         cmd[ 0 ] = 0;
01647     }
01648 
01649     /* first frame */
01650 
01651     else if ( strcmp( cmd, "gg" ) == 0 )
01652     {
01653         common->videoStartOfMovie( );
01654         common->keyboardFeedback( cmd, _( "Move to first frame" ) );
01655         cmd[ 0 ] = 0;
01656     }
01657 
01658     /* last frame */
01659 
01660     else if ( strcmp( cmd, "G" ) == 0 )
01661     {
01662         common->videoEndOfMovie( );
01663         common->keyboardFeedback( cmd, _( "Move to last frame" ) );
01664         cmd[ 0 ] = 0;
01665     }
01666 
01667     /* delete current scene */
01668 
01669     else if ( strcmp( real, "dd" ) == 0 )
01670     {
01671         end_orig = start_orig;
01672         for ( ; count >= 1 && end_orig <= common->getPlayList() ->GetNumFrames() - 1; count -- )
01673         {
01674             end_orig = common->getPlayList() ->FindEndOfScene( end_orig );
01675             end_orig ++;
01676         }
01677         common->getPageEditor()->CopyFrames( start_orig, end_orig - 1 );
01678         common->getPageEditor()->DeleteFrames( start_orig, end_orig - 1 );
01679         if ( start_orig > common->getPlayList() ->GetNumFrames() - 1 )
01680             start_orig = common->getPlayList() ->GetNumFrames() - 1;
01681         common->moveToFrame( start_orig );
01682         common->keyboardFeedback( cmd, _( "Cut current scene" ) );
01683         common->getPageEditor()->DrawBar( common->g_currentFrame );
01684         cmd[ 0 ] = 0;
01685     }
01686 
01687     /* delete from current frame up to end of scene */
01688 
01689     else if ( ( strcmp( cmd, "o" ) == 0 ) || ( strcmp( cmd, "d$" ) == 0 ) )
01690     {
01691         out = pos;
01692         gtk_adjustment_set_value( trim_adj[ TRIM_ADJ_OUT ], ( gfloat ) out );
01693         common->keyboardFeedback( cmd, _( "Cut to end of scene" ) );
01694         cmd[ 0 ] = 0;
01695     }
01696 
01697     /* delete from start of scene just before current frame */
01698 
01699     else if ( ( strcmp( cmd, "i" ) == 0 ) || ( strcmp( cmd, "d0" ) == 0 ) || strcmp( cmd, "d^" ) == 0 )
01700     {
01701         in = pos;
01702         gtk_adjustment_set_value( trim_adj[ TRIM_ADJ_IN ], ( gfloat ) in );
01703         common->keyboardFeedback( cmd, _( "Cut from start of scene" ) );
01704         cmd[ 0 ] = 0;
01705     }
01706 
01707     /* copy current scene */
01708 
01709     else if ( ( strcmp( real, "yy" ) == 0 ) || ( strcmp( real, "Y" ) == 0 ) )
01710     {
01711         end_orig = start_orig;
01712         for ( ; count >= 1; count -- )
01713         {
01714             end_orig = common->getPlayList() ->FindEndOfScene( end_orig );
01715             end_orig ++;
01716         }
01717         common->getPageEditor()->CopyFrames( start_orig, end_orig - 1 );
01718         common->keyboardFeedback( cmd, _( "Copy current scene" ) );
01719         cmd[ 0 ] = 0;
01720     }
01721 
01722     /* paste after current frame */
01723 
01724     else if ( strcmp( real, "p" ) == 0 )
01725     {
01726         for ( ; count >= 1; count -- )
01727             common->getPageEditor()->PasteFrames( common->g_currentFrame + 1 );
01728         movedToFrame( pos );
01729         common->keyboardFeedback( cmd, _( "Paste after current frame" ) );
01730         common->getPageEditor()->DrawBar( common->g_currentFrame );
01731         cmd[ 0 ] = 0;
01732     }
01733 
01734     /* paste before current frame */
01735 
01736     else if ( strcmp( real, "P" ) == 0 )
01737     {
01738         for ( ; count >= 1; count -- )
01739             common->getPageEditor()->PasteFrames( common->g_currentFrame );
01740         end_orig = common->getPlayList() ->FindEndOfScene( common->g_currentFrame + 1 );
01741         movedToFrame( pos );
01742         common->keyboardFeedback( cmd, _( "Paste before current frame" ) );
01743         common->getPageEditor()->DrawBar( common->g_currentFrame );
01744         cmd[ 0 ] = 0;
01745     }
01746 
01747     /* Switch to capture mode */
01748 
01749     else if ( strcmp( cmd, "a" ) == 0 )
01750     {
01751         common->keyboardFeedback( cmd, _( "Capture, insert after frame" ) );
01752         end = common->getPlayList() ->FindEndOfScene( common->g_currentFrame );
01753         common->moveToFrame( end );
01754         FileTracker::GetInstance().SetMode( CAPTURE_FRAME_APPEND );
01755         common->changePageRequest( PAGE_CAPTURE );
01756         cmd[ 0 ] = 0;
01757     }
01758 
01759     else if ( strcmp( cmd, "A" ) == 0 )
01760     {
01761         common->keyboardFeedback( cmd, _( "Capture, append to movie" ) );
01762         end = common->getPlayList() ->GetNumFrames();
01763         common->moveToFrame( end );
01764         FileTracker::GetInstance().SetMode( CAPTURE_MOVIE_APPEND );
01765         common->changePageRequest( PAGE_CAPTURE );
01766         cmd[ 0 ] = 0;
01767     }
01768 
01769     else if ( strcmp( cmd, "v" ) == 0 )
01770     {
01771         common->keyboardFeedback( cmd, _( "Timeline" ) );
01772         common->changePageRequest( PAGE_TIMELINE );
01773         cmd[ 0 ] = 0;
01774     }
01775 
01776     else if ( strcmp( cmd, "C" ) == 0 )
01777     {
01778         common->keyboardFeedback( cmd, _( "FX" ) );
01779         common->changePageRequest( PAGE_MAGICK );
01780         cmd[ 0 ] = 0;
01781     }
01782 
01783     else if ( strcmp( cmd, "u" ) == 0 )
01784     {
01785         GetEditorBackup() ->Undo( common->getPlayList() );
01786         common->keyboardFeedback( cmd, _( "Undo" ) );
01787         common->hasListChanged = TRUE;
01788         movedToFrame( 0 );
01789         common->getPageEditor()->DrawBar( common->g_currentFrame );
01790         cmd[ 0 ] = 0;
01791     }
01792 
01793     else if ( strcmp( cmd, "Ctrl+R" ) == 0 )
01794     {
01795         GetEditorBackup() ->Redo( common->getPlayList() );
01796         common->keyboardFeedback( cmd, _( "Redo" ) );
01797         common->hasListChanged = TRUE;
01798         movedToFrame( 0 );
01799         common->getPageEditor()->DrawBar( common->g_currentFrame );
01800         cmd[ 0 ] = 0;
01801     }
01802 
01803     // the following are specific to Trim
01804     else if ( strcmp( cmd, "U" ) == 0 )
01805     {
01806         common->keyboardFeedback( cmd, _( "Undo" ) );
01807         resetInPoint();
01808         resetOutPoint();
01809         movedToFrame( pos );
01810         cmd[ 0 ] = 0;
01811     }
01812 
01813     else if ( strcmp( cmd, "\\" ) == 0 )
01814     {
01815         common->keyboardFeedback( cmd, _( "Toggle Looping" ) );
01816         gtk_toggle_button_set_active( loop_toggle, ! gtk_toggle_button_get_active( loop_toggle ) );
01817         cmd[ 0 ] = 0;
01818     }
01819 
01820     else if ( strcmp( cmd, "=" ) == 0 )
01821     {
01822         common->keyboardFeedback( cmd, _( "Toggle Link" ) );
01823         gtk_toggle_button_set_active( link_toggle, ! gtk_toggle_button_get_active( link_toggle ) );
01824         cmd[ 0 ] = 0;
01825     }
01826 
01827     /* switch to export mode */
01828 
01829     else if ( strcmp( cmd, ":W" ) == 0 )
01830     {
01831         common->keyboardFeedback( cmd, _( "Export" ) );
01832         common->changePageRequest( PAGE_EXPORT );
01833         cmd[ 0 ] = 0;
01834     }
01835 
01836     else if ( strcmp( cmd, "F2" ) == 0 )
01837     {
01838         common->keyboardFeedback( cmd, _( "Edit" ) );
01839         common->changePageRequest( PAGE_EDITOR );
01840         cmd[ 0 ] = 0;
01841     }
01842 
01843     /* write PlayList */
01844 
01845     else if ( strcmp( cmd, ":w" ) == 0 )
01846     {
01847         common->keyboardFeedback( cmd, _( "Write playlist" ) );
01848         common->savePlayList( );
01849         cmd[ 0 ] = 0;
01850     }
01851 
01852     /* quit */
01853 
01854     else if ( strcmp( cmd, ":q" ) == 0 )
01855     {
01856         common->keyboardFeedback( cmd, _( "quit" ) );
01857         kinoDeactivate();
01858         cmd[ 0 ] = 0;
01859     }
01860 
01861     else if ( strcmp( real, "J" ) == 0 )
01862     {
01863         common->keyboardFeedback( cmd, _( "Join scenes" ) );
01864         for ( ; count >= 1 && common->getPlayList() ->JoinScenesAt( common->g_currentFrame ); count -- )
01865             common->hasListChanged = TRUE;
01866         if ( common->hasListChanged == TRUE )
01867         {
01868             GetEditorBackup() ->Store( common->getPlayList() );
01869             movedToFrame( pos );
01870             g_signal_emit_by_name( trim_adj[ TRIM_ADJ_POS ], "value-changed" );
01871         }
01872         cmd[ 0 ] = 0;
01873     }
01874 
01875     /* split scene */
01876 
01877     else if ( strcmp( cmd, "Ctrl+J" ) == 0 && currentScene != -1 )
01878     {
01879         int newScene = getSceneIndex() + 1;
01880         common->keyboardFeedback( cmd, _( "Split scene before frame" ) );
01881         if ( pos >= in && pos <= out &&
01882             common->getPlayList() ->SplitSceneBefore( common->g_currentFrame ) )
01883         {
01884             GetEditorBackup() ->Store( common->getPlayList() );
01885             common->hasListChanged = TRUE;
01886             g_signal_emit_by_name( trim_adj[ TRIM_ADJ_POS ], "value-changed" );
01887             selectScene( newScene );
01888             common->videoStartOfScene( );
01889         }
01890         cmd[ 0 ] = 0;
01891     }
01892 
01893     /* goto a frame */
01894     else if ( strncmp( cmd, ":", 1 ) == 0 )
01895     {
01896         int val = 0;
01897         char t[ 132 ] = "";
01898         if ( sscanf( cmd + 1, "%d", &val ) == 1 )
01899         {
01900             common->moveToFrame( val );
01901             sprintf( t, "Move to frame %d", val );
01902             common->keyboardFeedback( cmd, t );
01903         }
01904         else
01905             common->setStatusBar( cmd );
01906     }
01907 
01908     else
01909     {
01910         // Check for invalid commands
01911         if ( strlen( real ) > 5 )
01912             cmd[ 0 ] = 0;
01913         else if ( strchr( "dgy ", real[ strlen( real ) - 1 ] ) == NULL )
01914             cmd[ 0 ] = 0;
01915 
01916         common->keyboardFeedback( cmd, "" );
01917 
01918     }
01919 
01920     return FALSE;
01921 }

gboolean PageTrim::processKeyboard GdkEventKey *  event  )  [virtual]
 

Process a keyboard event.

Parameters:
event keyboard event

Reimplemented from Page.

Definition at line 1367 of file page_trim.cc.

References KinoCommon::changePageRequest(), cmd, common, navigate_control::escaped, g_nav_ctl, KinoCommon::getComponentState(), lastcmd, PAGE_EDITOR, processCommand(), KinoCommon::setStatusBar(), and VIDEO_STOP.

01368 {
01369     gboolean ret = FALSE;
01370 
01371     // Only process while not escape mode
01372     if ( g_nav_ctl.escaped == FALSE )
01373     {
01374         if ( strcmp( lastcmd, "alt" ) == 0 )
01375         {
01376             strcpy( lastcmd, "" );
01377             return ret;
01378         }
01379 
01380         // Translate special keys to equivalent command
01381         switch ( event->keyval )
01382         {
01383         case GDK_Home:
01384             strcat( cmd, "gg");
01385             ret = TRUE;
01386             break;
01387         case GDK_End:
01388             strcat( cmd, "G");
01389             ret = TRUE;
01390             break;
01391         case GDK_BackSpace:
01392         case GDK_Left:
01393             strcat( cmd, "h" );
01394             ret = TRUE;
01395             break;
01396         case GDK_Up:
01397             strcat( cmd, "k" );
01398             ret = TRUE;
01399             break;
01400         case GDK_Right:
01401             strcat( cmd, "l" );
01402             ret = TRUE;
01403             break;
01404         case GDK_Return:
01405             if ( cmd[ 0 ] != 0 )
01406             {
01407                 // Last command is now
01408                 strcpy( lastcmd, cmd );
01409 
01410                 // end the command entry
01411                 cmd[ 0 ] = 0;
01412                 common->setStatusBar( "" );
01413                 break;
01414             }
01415             else
01416             {
01417                 strcat( cmd, "Enter" );
01418                 ret = TRUE;
01419                 break;
01420             }
01421         case GDK_Down:
01422             strcat( cmd, "j" );
01423             ret = TRUE;
01424             break;
01425         case GDK_Delete:
01426             strcat( cmd, "x" );
01427             ret = TRUE;
01428             break;
01429         case GDK_Escape:
01430             if ( common->getComponentState() & VIDEO_STOP )
01431             {
01432                 common->changePageRequest( PAGE_EDITOR );
01433                 return ret;
01434             }
01435             else
01436             {
01437                 strcat( cmd, "Esc" );
01438                 break;
01439             }
01440         case GDK_Alt_L:
01441         case GDK_Alt_R:
01442             strcpy( lastcmd, "alt" );
01443             return ret;
01444         case GDK_Insert:
01445         case GDK_KP_Insert:
01446             strcat( cmd, "Ins" );
01447             ret = TRUE;
01448             break;
01449         default:
01450             if ( strcmp( event->string, "." ) )
01451                 strcat( cmd, event->string );
01452             break;
01453         }
01454 
01455         if ( !strcmp( event->string, "." ) )
01456             strcpy( cmd, lastcmd );
01457         else if ( cmd[ 0 ] == 0x12 )
01458             strcpy( cmd, "Ctrl+R" );
01459 
01460 #if 0
01461         printf( "send_event: %2.2x\n", event->send_event );
01462         printf( "time  : %8.8x\n", event->time );
01463         printf( "state : %8.8x\n", event->state );
01464         printf( "keyval: %8.8x\n", event->keyval );
01465         printf( "length: %8.8x\n", event->length );
01466         printf( "string: %s\n", event->string );
01467         printf( "(hex) : %2.2x\n", event->string[ 0 ] );
01468         printf( "cmd   : %s\n", cmd );
01469         printf( "(hex) : %8.8x\n", cmd[ 0 ] );
01470         fflush( stdout );
01471 #endif
01472 
01473         processCommand( cmd );
01474     }
01475     return ret;
01476 }

void PageTrim::resetInPoint  ) 
 

Definition at line 1347 of file page_trim.cc.

References in, in_orig, spin_in, trim_adj, and TRIM_ADJ_IN.

Referenced by processCommand().

01348 {
01349     in = in_orig;
01350     gtk_adjustment_set_value( trim_adj[ TRIM_ADJ_IN ], ( gfloat ) in );
01351     gtk_spin_button_set_value( spin_in, ( gfloat ) in );
01352 }

void PageTrim::resetOutPoint  ) 
 

Definition at line 1355 of file page_trim.cc.

References out, out_orig, spin_out, trim_adj, and TRIM_ADJ_OUT.

Referenced by processCommand().

01356 {
01357     out = out_orig;
01358     gtk_adjustment_set_value( trim_adj[ TRIM_ADJ_OUT ], ( gfloat ) out );
01359     gtk_spin_button_set_value( spin_out, ( gfloat ) out );
01360 }

void PageTrim::saveScene  ) 
 

Saves the scene currently being edited back to the movie.

Definition at line 729 of file page_trim.cc.

References changed, common, PlayList::Delete(), end_orig, navigate_control::escaped, KinoCommon::g_currentFrame, g_nav_ctl, GetEditorBackup(), GetFileMap(), PlayList::GetNumFrames(), KinoCommon::getPageEditor(), KinoCommon::getPlayList(), KinoCommon::getWidget(), KinoCommon::hasListChanged, in, in_orig, lookup_widget(), max, out, out_orig, playlist, KinoCommon::setWindowTitle(), and start_orig.

Referenced by clean(), processCommand(), and selectScene().

00730 {
00731     if ( playlist.GetNumFrames() && ( in_orig != in || out_orig != out || changed ) )
00732     {
00733         // commit out point to local playlist
00734         playlist.Delete( out + 1, max );
00735         // commmit in point to local playlist
00736         playlist.Delete( 0, in - 1 );
00737         // delete the original scene from the movie
00738         common->getPlayList() ->Delete( start_orig, end_orig );
00739         // insert the revised scene (local playlist) into the movie
00740         // at the saved begin time marker
00741         common->getPlayList() ->InsertPlayList( playlist, start_orig );
00742 
00743         changed = false;
00744 
00745         // put into undo history
00746         GetEditorBackup() ->Store( common->getPlayList() );
00747 
00748         // update commons and other views (title bar and storyboard)
00749         common->hasListChanged = TRUE;
00750         common->setWindowTitle( );
00751         common->getPageEditor()->DrawBar( common->g_currentFrame );
00752 
00753         // Refresh the combo menu
00754         GList *items = NULL;
00755         map<string, FileHandler*>::iterator n;
00756         for ( n = GetFileMap()->GetMap().begin(); n != GetFileMap()->GetMap().end(); ++n )
00757             items = g_list_append( items, ( void* ) n->first.c_str() );
00758         g_nav_ctl.escaped = TRUE;
00759         gtk_combo_set_popdown_strings( GTK_COMBO( lookup_widget( common->getWidget(), "combo_trim_clip" ) ), items);
00760         g_nav_ctl.escaped = FALSE;
00761     }
00762 }

void PageTrim::selectScene int  i  )  [virtual]
 

Load the selected scene.

Parameters:
i scene to move to

Reimplemented from Page.

Definition at line 1295 of file page_trim.cc.

References navigate_control::active, common, currentScene, end_orig, KinoCommon::g_currentFrame, g_nav_ctl, KinoCommon::getPageEditor(), KinoCommon::getPlayList(), in, loadScene(), mode, movedToFrame(), PAGE_TRIM_MODE_INSERT, PAGE_TRIM_MODE_UPDATE, saveScene(), KinoCommon::setCurrentScene(), start_orig, startNavigator(), and stopNavigator().

Referenced by insertScene(), and processCommand().

01296 {
01297     bool restartNavigator = ( g_nav_ctl.active == TRUE );
01298     
01299     stopNavigator();
01300     
01301     if ( mode == PAGE_TRIM_MODE_UPDATE )
01302         // commit the changes and load a new scene
01303         saveScene();
01304 
01305     // figure out what scene I am in
01306     vector <int> scene = common->getPageEditor() ->GetScene();
01307     if ( i >= ( int ) scene.size() )
01308         i = scene.size() - 1;
01309     currentScene = ( i <= 0 ) ? 0 : scene[ i - 1 ];
01310     common->g_currentFrame = currentScene;
01311 
01312     if ( mode == PAGE_TRIM_MODE_UPDATE )
01313     {
01314         loadScene( currentScene );
01315         movedToFrame( in );
01316     }
01317     else if ( mode == PAGE_TRIM_MODE_INSERT )
01318     {
01319         // set the insertion points
01320         start_orig = common->getPlayList()->FindStartOfScene( currentScene );
01321         end_orig = common->getPlayList()->FindEndOfScene( currentScene );
01322 
01323         common->setCurrentScene( start_orig );
01324     }
01325     
01326     if ( restartNavigator )
01327         startNavigator();
01328 }

void PageTrim::setInPoint int  value  )  [inline]
 

Definition at line 114 of file page_trim.h.

References in.

00115     {
00116         this->in = value;
00117     }

void PageTrim::setMode PageTrimMode   ) 
 

Definition at line 879 of file page_trim.cc.

References common, KinoCommon::getPlayList(), KinoCommon::getWidget(), in, loadScene(), lookup_widget(), mode, out, PAGE_TRIM_MODE_INSERT, PAGE_TRIM_MODE_UPDATE, trim_adj, TRIM_ADJ_IN, TRIM_ADJ_OUT, and update_start.

Referenced by processCommand(), and start().

00880 {
00881     if ( newMode != mode )
00882     {
00883         if ( newMode == PAGE_TRIM_MODE_UPDATE && common->getPlayList()->GetNumFrames() > 0 )
00884         {
00885             mode = newMode;
00886             gtk_widget_show( lookup_widget( common->getWidget(), "hbox_trim_update" ) );
00887             gtk_widget_hide( lookup_widget( common->getWidget(), "hbox_trim_insert" ) );
00888 
00889             // Load the currently selected scene
00890             gfloat saved_in = in;
00891             gfloat saved_out = out;
00892             loadScene( update_start );
00893             gtk_adjustment_set_value( trim_adj[ TRIM_ADJ_IN ], saved_in );
00894             gtk_adjustment_set_value( trim_adj[ TRIM_ADJ_OUT ], saved_out );
00895         }
00896         else if ( newMode == PAGE_TRIM_MODE_INSERT )
00897         {
00898             mode = newMode;
00899             gtk_widget_hide( lookup_widget( common->getWidget(), "hbox_trim_update" ) );
00900             gtk_widget_show( lookup_widget( common->getWidget(), "hbox_trim_insert" ) );
00901         }
00902 
00903         // initialize insert mode controls for edit mode
00904         gtk_option_menu_set_history( GTK_OPTION_MENU( lookup_widget( common->getWidget(), "optionmenu_trim" ) ), static_cast< int >( mode ) );
00905     }
00906 }

void PageTrim::setOutPoint int  value  )  [inline]
 

Definition at line 118 of file page_trim.h.

References out.

00119     {
00120         this->out = value;
00121     }

void PageTrim::setPosition int  value  )  [inline]
 

Definition at line 122 of file page_trim.h.

References pos.

00123     {
00124         this->pos = value;
00125     }

void PageTrim::showFrame int  ,
Frame
 

Definition at line 1028 of file page_trim.cc.

References common, frameArea, getFrameDisplayer(), KinoCommon::loadSplash(), max, KinoCommon::showFrameInfo(), skipPosUpdate, trim_adj, and TRIM_ADJ_POS.

01029 {
01030     if ( max == 0 )
01031     {
01032         common->loadSplash( frameArea );
01033     }
01034     else
01035     {
01036         getFrameDisplayer() ->Put( frame, GTK_WIDGET( frameArea ), TRUE );
01037         common->showFrameInfo( position );
01038         skipPosUpdate = TRUE;
01039         gtk_adjustment_set_value( trim_adj[ TRIM_ADJ_POS ], ( gfloat ) position );
01040     }
01041 }

void PageTrim::showFrame int  i,
gboolean  no_audio
 

Show the frame requested.

Parameters:
i frame to be shown
no_audio indicate if audio is required or not

Definition at line 1001 of file page_trim.cc.

References common, frameArea, KinoCommon::g_currentFrame, PlayList::GetFrame(), getFrameDisplayer(), GetFramePool(), in_orig, lastPos, KinoCommon::loadSplash(), max, playlist, pos, IEEE1394Writer::SendFrame(), KinoCommon::showFrameInfo(), start_orig, trim_adj, TRIM_ADJ_POS, and writer1394.

Referenced by movedToFrame(), and windowMoved().

01002 {
01003     if ( max == 0 )
01004     {
01005         common->loadSplash( frameArea );
01006         common->showFrameInfo( -1 );
01007         return ;
01008     }
01009     else if ( i > -1 )
01010     {
01011         Frame & frame = *( GetFramePool( ) ->GetFrame( ) );
01012         if ( i > max )
01013             i = max;
01014         playlist.GetFrame( i, frame );
01015         common->showFrameInfo( i );
01016         if ( writer1394 != NULL )
01017             writer1394->SendFrame( frame, false );
01018         if ( getFrameDisplayer() )
01019             getFrameDisplayer() ->Put( frame, GTK_WIDGET( frameArea ), no_audio );
01020         lastPos = i;
01021         gtk_adjustment_set_value( trim_adj[ TRIM_ADJ_POS ], ( gfloat ) i );
01022         GetFramePool( ) ->DoneWithFrame( &frame );
01023         common->g_currentFrame = start_orig + (pos - in_orig);
01024     }
01025 }

void PageTrim::showFrameInfo int   )  [virtual]
 

Reimplemented from Page.

Definition at line 1936 of file page_trim.cc.

References common, PlayList::GetFrame(), GetFramePool(), PlayList::GetMediaObject(), KinoCommon::getTime(), KinoCommon::getTimeFormat(), in, out, playlist, positionLabelCurrent, positionLabelTotal, and KinoCommon::showFrameMoreInfo().

01937 {
01938     Frame & frame = *( GetFramePool( ) ->GetFrame( ) );
01939     FileHandler *media;
01940 
01941     playlist.GetFrame( i, frame );
01942     playlist.GetMediaObject( i, &media );
01943     common->showFrameMoreInfo( frame, media );
01944     GetFramePool( ) ->DoneWithFrame( &frame );
01945 
01946     if ( i < 0 )
01947     {
01948         gtk_label_set_text( positionLabelCurrent, "" );
01949         gtk_label_set_text( positionLabelTotal, "" );
01950     }
01951     else
01952     {
01953         common->getTime().setFramerate( frame.GetFrameRate() );
01954         string tc = "<span size=\"x-large\">" + common->getTime().parseFramesToString( i, common->getTimeFormat() ) + "</span>";
01955         gtk_label_set_markup( positionLabelCurrent, tc.c_str() );
01956         gtk_widget_set_redraw_on_allocate( GTK_WIDGET( positionLabelCurrent ), FALSE );
01957         tc = _("Duration: ") + common->getTime().parseFramesToString( out - in + 1, common->getTimeFormat() );
01958         gtk_label_set_markup( positionLabelTotal, tc.c_str() );
01959     }
01960 }

void PageTrim::start  )  [virtual]
 

Start action.

Called when the page becomes current.

Reimplemented from Page.

Definition at line 538 of file page_trim.cc.

References avc, common, displayer, end_orig, navigate_control::escaped, frameArea, frameContent, KinoCommon::g_currentFrame, g_nav_ctl, GetFileMap(), GetFramePool(), Preferences::getInstance(), AVC::getNodeId(), KinoCommon::getPlayList(), AVC::getPort(), KinoCommon::getWidget(), in, in_orig, AVC::isPhyIDValid(), lastPos, loadScene(), lookup_widget(), max, movedToFrame(), out, out_orig, KinoCommon::packIt(), PAGE_TRIM_MODE_INSERT, PAGE_TRIM_MODE_UPDATE, PLAYBACK_FRAMES, pos, setMode(), start_orig, update_start, and writer1394.

00539 {
00540     cerr << ">> Starting Trimmer" << endl;
00541 
00542     start_orig = update_start = end_orig = in = in_orig = out = out_orig = max = 0;
00543 
00544     for ( int i = 0; i < PLAYBACK_FRAMES; i ++ )
00545         frameContent[ i ] = GetFramePool( ) ->GetFrame( );
00546 
00547     this->displayer = new FrameDisplayer();
00548     if ( Preferences::getInstance().dv1394Preview )
00549     {
00550 #ifdef HAVE_IEC61883
00551         AVC avc;
00552         Preferences::getInstance( ).phyID = avc.getNodeId( Preferences::getInstance( ).avcGUID );
00553         Preferences::getInstance( ).phyID = avc.isPhyIDValid( Preferences::getInstance( ).phyID );
00554         if ( !writer1394 )
00555             writer1394 = new iec61883Writer(
00556                          ( avc.getPort() < 0 ) ? 0 : avc.getPort(),
00557                          Preferences::getInstance().channel,
00558                          2 );
00559 #endif
00560 #ifdef HAVE_DV1394
00561         if ( Preferences::getInstance().dvExportDevice > 0 && !writer1394 )
00562             writer1394 = new dv1394Writer(
00563                          Preferences::getInstance().dvExportDevice,
00564                          Preferences::getInstance().channel,
00565                          2,
00566                          Preferences::getInstance().cip_n,
00567                          Preferences::getInstance().cip_d,
00568                          Preferences::getInstance().syt_offset );
00569 #endif
00570     }
00571 
00572     if ( ! Preferences::getInstance().trimModeInsert && common->g_currentFrame > -1 )
00573         setMode( PAGE_TRIM_MODE_UPDATE );
00574     else
00575         setMode( PAGE_TRIM_MODE_INSERT );
00576 
00577     if ( common->getPlayList() ->GetNumFrames() > 0 )
00578     {
00579         // Load the current scene
00580         loadScene( common->g_currentFrame );
00581         lastPos = pos = in + common->g_currentFrame - start_orig;
00582         movedToFrame( pos );
00583 
00584         // Load the clip combo
00585         GList *items = NULL;
00586         map<string, FileHandler*>::iterator n;
00587         for ( n = GetFileMap()->GetMap().begin(); n != GetFileMap()->GetMap().end(); ++n )
00588             items = g_list_append( items, ( void* ) n->first.c_str() );
00589         g_nav_ctl.escaped = TRUE;
00590         gtk_combo_set_popdown_strings( GTK_COMBO( lookup_widget( common->getWidget(), "combo_trim_clip" ) ), items);
00591         gtk_entry_set_text( GTK_ENTRY( lookup_widget( common->getWidget(), "entry_trim_clip" ) ), "" );
00592         g_nav_ctl.escaped = FALSE;
00593     }
00594 
00595     gtk_widget_grab_focus( GTK_WIDGET( frameArea ) );
00596     common->packIt( "packer_trim", "packer_trim_outer" );
00597 
00598     gtk_notebook_set_page( GTK_NOTEBOOK( lookup_widget( common->getWidget(), "notebook_keyhelp" ) ), 2 );
00599     gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM( lookup_widget( common->getWidget(), "menuitem_trim" ) ), TRUE );
00600 }

void PageTrim::startNavigator  ) 
 

Starts the navigator thread.

See comments on g_nav_ctl.

Definition at line 911 of file page_trim.cc.

References navigate_control::active, audioThread, audiothreadTrim, g_nav_ctl, readThread(), readthreadTrim, resetThreads(), stopNavigator(), videoThread, and videothreadTrim.

Referenced by movedToFrame(), selectScene(), videoFastForward(), videoForward(), videoPlay(), videoRewind(), and videoShuttle().

00912 {
00913     stopNavigator( );
00914     g_nav_ctl.active = TRUE;
00915     resetThreads( );
00916     pthread_create( &readthreadTrim, NULL, readThread, &g_nav_ctl );
00917     pthread_create( &audiothreadTrim, NULL, audioThread, &g_nav_ctl );
00918     pthread_create( &videothreadTrim, NULL, videoThread, ( gpointer ) & g_nav_ctl );
00919 }

void PageTrim::stopNavigator  ) 
 

Stops the navigator thread.

See comments on g_nav_ctl.

Definition at line 924 of file page_trim.cc.

References navigate_control::active, audiothreadTrim, g_nav_ctl, getFrameDisplayer(), readthreadTrim, and videothreadTrim.

Referenced by clean(), newFile(), selectScene(), startNavigator(), videoBack(), videoEndOfMovie(), videoFastForward(), videoForward(), videoPause(), videoPlay(), videoRewind(), videoShuttle(), and videoStop().

00925 {
00926     if ( g_nav_ctl.active )
00927     {
00928         g_nav_ctl.active = FALSE;
00929         gdk_threads_leave();
00930         pthread_join( readthreadTrim, NULL );
00931         pthread_join( audiothreadTrim, NULL );
00932         pthread_join( videothreadTrim, NULL );
00933         gdk_threads_enter();
00934         getFrameDisplayer()->CloseSound();
00935     }
00936 }

void PageTrim::timeFormatChanged  )  [virtual]
 

Reimplemented from Page.

Definition at line 1962 of file page_trim.cc.

References common, KinoCommon::getWidget(), lookup_widget(), on_spinbutton_trim_in_value_changed(), and on_spinbutton_trim_out_value_changed().

Referenced by loadFile(), and loadScene().

01963 {
01964     on_spinbutton_trim_in_value_changed( GTK_SPIN_BUTTON( lookup_widget( common->getWidget(), "spinbutton_trim_in" ) ), NULL );
01965     on_spinbutton_trim_out_value_changed( GTK_SPIN_BUTTON( lookup_widget( common->getWidget(), "spinbutton_trim_out" ) ), NULL );
01966 }

void PageTrim::videoBack int  step = -1  )  [virtual]
 

Move one frame back.

If the navigator is active, then this action toggles between reverse and stop.

Reimplemented from Page.

Definition at line 1100 of file page_trim.cc.

References navigate_control::active, common, g_nav_ctl, KinoCommon::getComponentState(), KinoCommon::moveByFrames(), navigate_control::rate, navigate_control::step, stopNavigator(), KinoCommon::toggleComponents(), VIDEO_BACK, and VIDEO_STOP.

01101 {
01102     common->toggleComponents( common->getComponentState(), false );
01103     if ( g_nav_ctl.active )
01104     {
01105         if ( g_nav_ctl.step != -1 )
01106         {
01107             g_nav_ctl.step = -1;
01108             g_nav_ctl.rate = 1;
01109             common->toggleComponents( VIDEO_BACK, true );
01110         }
01111         else
01112         {
01113             stopNavigator();
01114             g_nav_ctl.step = 1;
01115             g_nav_ctl.rate = 0;
01116             common->toggleComponents( VIDEO_BACK, false );
01117             common->toggleComponents( VIDEO_STOP, true );
01118         }
01119     }
01120     else
01121     {
01122         common->moveByFrames( step );
01123         common->toggleComponents( VIDEO_BACK, false );
01124         common->toggleComponents( VIDEO_STOP, true );
01125     }
01126 }

void PageTrim::videoEndOfMovie  )  [virtual]
 

Move to the end of the play list.

Reimplemented from Page.

Definition at line 1280 of file page_trim.cc.

References common, KinoCommon::getComponentState(), max, movedToFrame(), stopNavigator(), KinoCommon::toggleComponents(), VIDEO_END_OF_MOVIE, and VIDEO_STOP.

01281 {
01282     common->toggleComponents( common->getComponentState(), false );
01283     common->toggleComponents( VIDEO_END_OF_MOVIE, true );
01284     stopNavigator();
01285     movedToFrame( max );
01286     common->toggleComponents( VIDEO_END_OF_MOVIE, false );
01287     common->toggleComponents( VIDEO_STOP, true );
01288 }

void PageTrim::videoEndOfScene  )  [virtual]
 

Move to the end of the current scene.

Reimplemented from Page.

Definition at line 1271 of file page_trim.cc.

References common, movedToFrame(), out, KinoCommon::toggleComponents(), and VIDEO_NEXT_SCENE.

01272 {
01273     movedToFrame( out );
01274     common->toggleComponents( VIDEO_NEXT_SCENE, false );
01275 }

void PageTrim::videoFastForward  )  [virtual]
 

Fast forward.

Reimplemented from Page.

Definition at line 1194 of file page_trim.cc.

References common, g_nav_ctl, KinoCommon::getComponentState(), navigate_control::rate, startNavigator(), navigate_control::step, stopNavigator(), KinoCommon::toggleComponents(), VIDEO_FAST_FORWARD, and VIDEO_STOP.

01195 {
01196     common->toggleComponents( common->getComponentState(), false );
01197 
01198     if ( g_nav_ctl.step != 10 )
01199     {
01200         common->toggleComponents( VIDEO_FAST_FORWARD, true );
01201         g_nav_ctl.step = 10;
01202         g_nav_ctl.rate = 0;
01203         startNavigator();
01204     }
01205     else
01206     {
01207         stopNavigator();
01208         g_nav_ctl.step = 1;
01209         g_nav_ctl.rate = 1;
01210         common->toggleComponents( VIDEO_FAST_FORWARD, false );
01211         common->toggleComponents( VIDEO_STOP, true );
01212     }
01213 }

void PageTrim::videoForward int  step = 1  )  [virtual]
 

Move one frame forward.

If the navigator is active, then this action puts the video into normal play.

Reimplemented from Page.

Definition at line 1172 of file page_trim.cc.

References navigate_control::active, common, g_nav_ctl, KinoCommon::getComponentState(), KinoCommon::moveByFrames(), navigate_control::rate, startNavigator(), navigate_control::step, stopNavigator(), KinoCommon::toggleComponents(), VIDEO_FORWARD, and VIDEO_STOP.

01173 {
01174     common->toggleComponents( common->getComponentState(), false );
01175     if ( g_nav_ctl.active && g_nav_ctl.step != 1 )
01176     {
01177         g_nav_ctl.step = 1;
01178         g_nav_ctl.rate = 1;
01179         common->toggleComponents( VIDEO_FORWARD, true );
01180         startNavigator();
01181     }
01182     else
01183     {
01184         stopNavigator();
01185         common->moveByFrames( step );
01186         common->toggleComponents( VIDEO_FORWARD, false );
01187         common->toggleComponents( VIDEO_STOP, true );
01188     }
01189 }

void PageTrim::videoNextScene  )  [virtual]
 

Move to the end of the current scene.

Reimplemented from Page.

Definition at line 1262 of file page_trim.cc.

References common, movedToFrame(), out, KinoCommon::toggleComponents(), and VIDEO_NEXT_SCENE.

01263 {
01264     movedToFrame( out );
01265     common->toggleComponents( VIDEO_NEXT_SCENE, false );
01266 }

void PageTrim::videoPause  )  [virtual]
 

Pause.

Reimplemented from Page.

Definition at line 1151 of file page_trim.cc.

References common, KinoCommon::getComponentState(), stopNavigator(), KinoCommon::toggleComponents(), and VIDEO_STOP.

01152 {
01153     common->toggleComponents( common->getComponentState(), false );
01154     common->toggleComponents( VIDEO_STOP, true );
01155     stopNavigator();
01156 }

void PageTrim::videoPlay  )  [virtual]
 

Play.

Reimplemented from Page.

Definition at line 1131 of file page_trim.cc.

References navigate_control::active, common, g_nav_ctl, KinoCommon::getComponentState(), startNavigator(), navigate_control::step, stopNavigator(), KinoCommon::toggleComponents(), VIDEO_PLAY, and VIDEO_STOP.

01132 {
01133     common->toggleComponents( common->getComponentState(), false );
01134     if ( g_nav_ctl.active == FALSE || g_nav_ctl.step != 1 )
01135     {
01136         common->toggleComponents( VIDEO_PLAY, true );
01137         g_nav_ctl.step = 1;
01138         startNavigator();
01139     }
01140     else
01141     {
01142         stopNavigator();
01143         common->toggleComponents( VIDEO_PLAY, false );
01144         common->toggleComponents( VIDEO_STOP, true );
01145     }
01146 }

void PageTrim::videoPreviousScene  )  [virtual]
 

Move to the in point of the scene.

Reimplemented from Page.

Definition at line 1056 of file page_trim.cc.

References common, in, movedToFrame(), KinoCommon::toggleComponents(), and VIDEO_START_OF_SCENE.

01057 {
01058     movedToFrame( in );
01059     common->toggleComponents( VIDEO_START_OF_SCENE, false );
01060 }

void PageTrim::videoRewind  )  [virtual]
 

Rewind.

Reimplemented from Page.

Definition at line 1074 of file page_trim.cc.

References common, g_nav_ctl, KinoCommon::getComponentState(), navigate_control::rate, startNavigator(), navigate_control::step, stopNavigator(), KinoCommon::toggleComponents(), VIDEO_REWIND, and VIDEO_STOP.

01075 {
01076     common->toggleComponents( common->getComponentState(), false );
01077 
01078     // Toggle Rewind state
01079     if ( g_nav_ctl.step != -10 )
01080     {
01081         common->toggleComponents( VIDEO_REWIND, true );
01082         g_nav_ctl.step = -10;
01083         g_nav_ctl.rate = 0;
01084         startNavigator();
01085     }
01086     else
01087     {
01088         stopNavigator();
01089         g_nav_ctl.step = 1;
01090         g_nav_ctl.rate = 1;
01091         common->toggleComponents( VIDEO_REWIND, false );
01092         common->toggleComponents( VIDEO_STOP, true );
01093     }
01094 }

void PageTrim::videoShuttle int  angle  )  [virtual]
 

Shuttle.

Bi-directionaly variable-speed playback.

Parameters:
angle A number from -15 (fastest reverse) to 15 (fastest forward), 0=stop

Reimplemented from Page.

Definition at line 1222 of file page_trim.cc.

References _getOneSecond(), common, g_nav_ctl, KinoCommon::keyboardFeedback(), navigate_control::rate, startNavigator(), navigate_control::step, stopNavigator(), navigate_control::subframe, KinoCommon::toggleComponents(), and VIDEO_STOP.

01223 {
01224     int frames_sec = _getOneSecond();
01225     int speedTable[] = {
01226             0,
01227             8,  10, 15, 20, 33, 50, 75,
01228             100,
01229             200, 300, 400, 500, 800, 1200,
01230             ( frames_sec * 100 ) };
01231     char s[ 64 ];
01232 
01233     if ( angle < -15 )
01234         angle = -15;
01235     if ( angle > 15 )
01236         angle = 15;
01237 
01238     int speed = speedTable[ ( angle < 0 ) ? -angle : angle ] * ( ( angle < 0 ) ? -1 : 1 );
01239     if ( speed == 0 || g_nav_ctl.step != speed / 100 || g_nav_ctl.rate != 100 / speed )
01240     {
01241         stopNavigator( );
01242         if ( speed == 0 )
01243         {
01244             common->keyboardFeedback( "", "" );
01245             common->toggleComponents( VIDEO_STOP, true );
01246         }
01247         else
01248         {
01249             g_nav_ctl.step = speed / 100;
01250             g_nav_ctl.rate = 100 / speed;
01251             g_nav_ctl.subframe = 0;
01252             startNavigator();
01253             snprintf( s, 63, _( "Shuttle %+.1f fps" ), ( float ) speed / 100.0 * frames_sec );
01254             common->keyboardFeedback( "", s );
01255         }
01256     }
01257 }

void PageTrim::videoStartOfMovie  )  [virtual]
 

Move to the start of the scene.

Reimplemented from Page.

Definition at line 1047 of file page_trim.cc.

References common, movedToFrame(), KinoCommon::toggleComponents(), and VIDEO_START_OF_MOVIE.

01048 {
01049     movedToFrame( 0 );
01050     common->toggleComponents( VIDEO_START_OF_MOVIE, false );
01051 }

void PageTrim::videoStartOfScene  )  [virtual]
 

Move to the in point of the scene.

Reimplemented from Page.

Definition at line 1065 of file page_trim.cc.

References common, in, movedToFrame(), KinoCommon::toggleComponents(), and VIDEO_START_OF_SCENE.

01066 {
01067     movedToFrame( in );
01068     common->toggleComponents( VIDEO_START_OF_SCENE, false );
01069 }

void PageTrim::videoStop  )  [virtual]
 

Stop.

Reimplemented from Page.

Definition at line 1161 of file page_trim.cc.

References common, KinoCommon::getComponentState(), stopNavigator(), KinoCommon::toggleComponents(), and VIDEO_STOP.

01162 {
01163     common->toggleComponents( common->getComponentState(), false );
01164     common->toggleComponents( VIDEO_STOP, true );
01165     stopNavigator();
01166 }

void PageTrim::windowMoved  )  [virtual]
 

Reimplemented from Page.

Definition at line 1924 of file page_trim.cc.

References navigate_control::active, KinoCommon::clearPreview(), common, frameArea, g_nav_ctl, max, pos, and showFrame().

01925 {
01926     if ( g_nav_ctl.active == FALSE )
01927     {
01928         if ( max == 0 )
01929             common->clearPreview( frameArea );
01930         else
01931             showFrame( pos, TRUE );
01932     }
01933 }


Member Data Documentation

bool PageTrim::changed [private]
 

Definition at line 82 of file page_trim.h.

Referenced by loadFile(), and saveScene().

KinoCommon* PageTrim::common [private]
 

Definition at line 55 of file page_trim.h.

Referenced by getSceneIndex(), insertScene(), loadFile(), loadScene(), movedToFrame(), processCommand(), processKeyboard(), saveScene(), selectScene(), setMode(), showFrame(), showFrameInfo(), start(), timeFormatChanged(), videoBack(), videoEndOfMovie(), videoEndOfScene(), videoFastForward(), videoForward(), videoNextScene(), videoPause(), videoPlay(), videoPreviousScene(), videoRewind(), videoShuttle(), videoStartOfMovie(), videoStartOfScene(), videoStop(), and windowMoved().

int PageTrim::currentScene [private]
 

Definition at line 79 of file page_trim.h.

Referenced by getSceneIndex(), loadFile(), loadScene(), processCommand(), and selectScene().

FrameDisplayer* PageTrim::displayer [private]
 

Definition at line 58 of file page_trim.h.

Referenced by clean(), getFrameDisplayer(), and start().

int PageTrim::end_orig [private]
 

Definition at line 72 of file page_trim.h.

Referenced by insertScene(), loadFile(), loadScene(), processCommand(), saveScene(), selectScene(), and start().

GtkDrawingArea* PageTrim::frameArea [private]
 

Definition at line 59 of file page_trim.h.

Referenced by PageTrim(), showFrame(), start(), and windowMoved().

PlayList* PageTrim::g_copiedPlayList [private]
 

Definition at line 85 of file page_trim.h.

Referenced by PageTrim(), and ~PageTrim().

gint PageTrim::idleCommand [private]
 

Definition at line 68 of file page_trim.h.

gboolean PageTrim::idleCommandActive [private]
 

Definition at line 69 of file page_trim.h.

int PageTrim::in [private]
 

Definition at line 75 of file page_trim.h.

Referenced by getInPoint(), insertScene(), loadFile(), loadScene(), movedToFrame(), processCommand(), resetInPoint(), saveScene(), selectScene(), setInPoint(), setMode(), showFrameInfo(), start(), videoPreviousScene(), and videoStartOfScene().

int PageTrim::in_orig [private]
 

Definition at line 73 of file page_trim.h.

Referenced by loadFile(), loadScene(), resetInPoint(), saveScene(), showFrame(), and start().

int PageTrim::lastPos [private]
 

Definition at line 80 of file page_trim.h.

Referenced by loadFile(), loadScene(), movedToFrame(), showFrame(), and start().

int PageTrim::max [private]
 

Definition at line 77 of file page_trim.h.

Referenced by getTotalFrames(), insertScene(), loadFile(), loadScene(), movedToFrame(), saveScene(), showFrame(), start(), videoEndOfMovie(), and windowMoved().

PageTrimMode PageTrim::mode [private]
 

Definition at line 81 of file page_trim.h.

Referenced by movedToFrame(), processCommand(), selectScene(), and setMode().

int PageTrim::out [private]
 

Definition at line 76 of file page_trim.h.

Referenced by getOutPoint(), insertScene(), loadFile(), loadScene(), movedToFrame(), processCommand(), resetOutPoint(), saveScene(), setMode(), setOutPoint(), showFrameInfo(), start(), videoEndOfScene(), and videoNextScene().

int PageTrim::out_orig [private]
 

Definition at line 74 of file page_trim.h.

Referenced by loadFile(), loadScene(), resetOutPoint(), saveScene(), and start().

PlayList PageTrim::playlist [private]
 

Definition at line 67 of file page_trim.h.

Referenced by getPlayList(), insertScene(), loadFile(), loadScene(), saveScene(), showFrame(), and showFrameInfo().

int PageTrim::pos [private]
 

Definition at line 78 of file page_trim.h.

Referenced by getPosition(), loadFile(), loadScene(), movedToFrame(), processCommand(), setPosition(), showFrame(), start(), and windowMoved().

GtkLabel* PageTrim::positionLabelCurrent [private]
 

Definition at line 60 of file page_trim.h.

Referenced by PageTrim(), and showFrameInfo().

GtkLabel* PageTrim::positionLabelTotal [private]
 

Definition at line 61 of file page_trim.h.

Referenced by PageTrim(), and showFrameInfo().

GtkButton* PageTrim::reset_in [private]
 

Definition at line 63 of file page_trim.h.

GtkButton* PageTrim::reset_out [private]
 

Definition at line 64 of file page_trim.h.

int PageTrim::start_orig [private]
 

Definition at line 70 of file page_trim.h.

Referenced by insertScene(), loadFile(), loadScene(), processCommand(), saveScene(), selectScene(), showFrame(), and start().

GtkWidget* PageTrim::trim [private]
 

Definition at line 62 of file page_trim.h.

Referenced by PageTrim().

int PageTrim::update_start [private]
 

Definition at line 71 of file page_trim.h.

Referenced by loadScene(), setMode(), and start().


The documentation for this class was generated from the following files:
Generated on Sun Mar 11 22:13:21 2007 for Kino by  doxygen 1.4.2