Ticket #2199: media.patch

File media.patch, 7.4 KB (added by diana, 15 years ago)
  • src/main/java/org/sophie2/main/func/media/logic/MediaLogic.java

    ### Eclipse Workspace Patch 1.0
    #P org.sophie2.main.func.media
     
    2828 * @author pav, peko 
    2929 */ 
    3030public enum MediaLogic implements OperationDef { 
    31          
     31 
    3232        /** 
    3333         * Handles a user request to play/pauses the media. 
    3434         *  
     
    4343                } 
    4444 
    4545                public boolean handle(EventR3 event) { 
    46                         PlayPauseMediaManipulationView mediaManView =  
    47                                 event.getSource(PlayPauseMediaManipulationView.class); 
     46                        PlayPauseMediaManipulationView mediaManView = event 
     47                                        .getSource(PlayPauseMediaManipulationView.class); 
    4848 
    4949                        MediaFrameView view = mediaManView.parent().get(); 
    5050                        MediaFrameH model = view.model().get(); 
    5151 
    5252                        final TimePos time = view.getTime(); 
    5353                        final MediaState oldState = model.getMediaState(view.getTime()); 
    54                         final MediaState newState = oldState.setPlaying(!oldState.isPlaying()); 
    55                         final MediaStateChannel oldChannel = view.model().get().get(MediaFrameR4.KEY_STATE); 
     54                        final MediaState newState = oldState.setPlaying(!oldState 
     55                                        .isPlaying()); 
     56                        final MediaStateChannel oldChannel = view.model().get().get( 
     57                                        MediaFrameR4.KEY_STATE); 
    5658 
    5759                        new AutoAction("Play/Pause", true) { 
    5860 
    5961                                @Override 
    6062                                public void performAuto() { 
    61                                         MediaStateChannel newChannel = oldChannel.setInterval(time, TimePos.MAX, 
    62                                                         newState); 
     63                                        MediaStateChannel newChannel = oldChannel.setInterval(time, 
     64                                                        TimePos.MAX, newState); 
    6365                                        getChanger().setRaw(MediaFrameR4.KEY_STATE, newChannel); 
    6466                                } 
    6567                        }.register(view.getAccess()); 
    6668                        return true; 
    6769                } 
    68  
    6970        }, 
    7071 
    7172        /** 
     
    8283                } 
    8384 
    8485                public boolean handle(EventR3 event) { 
    85                         StopMediaManipulationView mediaManView =  
    86                                 event.getSource(StopMediaManipulationView.class); 
     86                        StopMediaManipulationView mediaManView = event 
     87                                        .getSource(StopMediaManipulationView.class); 
    8788 
    8889                        MediaFrameView view = mediaManView.parent().get(); 
    8990                        final TimePos time = view.getTime(); 
    90                         final MediaStateChannel oldChannel = view.model().get().get(MediaFrameR4.KEY_STATE); 
     91                        final MediaStateChannel oldChannel = view.model().get().get( 
     92                                        MediaFrameR4.KEY_STATE); 
    9193 
    9294                        new AutoAction("Stop", true) { 
    9395 
    9496                                @Override 
    9597                                public void performAuto() { 
    96                                         MediaStateChannel newChannel = oldChannel.setInterval(time, TimePos.MAX, 
    97                                                         MediaState.DEFAULT_STOPPED); 
     98                                        MediaStateChannel newChannel = oldChannel.setInterval(time, 
     99                                                        TimePos.MAX, MediaState.DEFAULT_STOPPED); 
    98100                                        getChanger().setRaw(MediaFrameR4.KEY_STATE, newChannel); 
    99101                                } 
    100102                        }.register(view.getAccess()); 
     
    102104                } 
    103105 
    104106        }, 
    105          
     107 
    106108        /** 
    107109         * Retries media that has had binary source problems. 
    108110         *  
     
    117119                } 
    118120 
    119121                public boolean handle(EventR3 event) { 
    120                         MediaErrorManipulationView mediaManView =  
    121                                 event.getSource(MediaErrorManipulationView.class); 
     122                        MediaErrorManipulationView mediaManView = event 
     123                                        .getSource(MediaErrorManipulationView.class); 
    122124 
    123125                        final MediaFrameView view = mediaManView.parent().get(); 
    124126                        assert view != null : "The manipulation view can not be unattached!"; 
    125                          
     127 
    126128                        SwingUtilities.invokeLater(new Runnable() { 
    127129                                public void run() { 
    128130                                        view.binSourceProblem().set(null); 
    129131                                } 
    130132                        }); 
    131                          
     133 
    132134                        return true; 
    133135                } 
    134                  
     136 
    135137        }, 
    136          
     138 
    137139        /** 
    138          * Handles a user request to seek the media. 
     140         * Handles a user request to seek the media (mouse pressed). 
    139141         *  
    140142         * @author stefan 
    141143         */ 
    142144        @SortKey("ffh-seek-media") 
    143         ON_SEEK_MEDIA { 
     145        ON_SEEK_MEDIA_MOUSE_PRESSED { 
    144146 
    145147                public void defineFilter(EventFilterBuilder filter) { 
    146148                        filter.setSourceClass(SeekMediaManipulationView.class); 
     
    149151                } 
    150152 
    151153                public boolean handle(EventR3 event) { 
     154                        return handleMediaSeekEvent(event); 
     155                } 
    152156 
    153                         SeekMediaManipulationView mediaManView =  
    154                                 event.getSource(SeekMediaManipulationView.class); 
    155                         MediaFrameView view = mediaManView.parent().get(); 
     157        }, 
     158        /** 
     159         * Handles a user request to seek the media (mouse dragged). 
     160         *  
     161         * @author diana 
     162         */ 
     163        ON_SEEK_MEDIA_MOUSE_DRAGGED { 
    156164 
    157                         int width = SeekMediaManipulationView.SLIDER_WIDTH; 
    158                         int border = SeekMediaManipulationView.SLIDER_BORDER; 
     165                public void defineFilter(EventFilterBuilder filter) { 
     166                        filter.setSourceClass(SeekMediaManipulationView.class); 
     167                        filter.setEventId(InputEventR3.MOUSE_DRAGGED); 
    159168 
    160                         ImmPoint point = event.getEventParam( 
    161                                         InputEventR3.POINT_PARAM_INDEX, ImmPoint.class); 
    162                         double x; 
    163                         if (point.getX() <= border) { 
    164                                 x = 0f; 
    165                         } else if (point.getX() >= width + border) { 
    166                                 x = width; 
    167                         } else { 
    168                                 x = point.getX() - border; 
     169                } 
     170                public boolean handle(EventR3 event) { 
     171                        return handleMediaSeekEvent(event); 
     172                } 
     173        }; 
     174 
     175        /** 
     176         * Handles the events coming from the SeekMediaManipulationView. 
     177         *  
     178         * @param event - The event to handle. 
     179         * @return - True if handled, false - otherwise. 
     180         */ 
     181        public boolean handleMediaSeekEvent(EventR3 event) { 
     182                SeekMediaManipulationView mediaManView = event 
     183                                .getSource(SeekMediaManipulationView.class); 
     184                MediaFrameView view = mediaManView.parent().get(); 
     185 
     186                int width = SeekMediaManipulationView.SLIDER_WIDTH; 
     187                int border = SeekMediaManipulationView.SLIDER_BORDER; 
     188 
     189                ImmPoint point = event.getEventParam(InputEventR3.POINT_PARAM_INDEX, 
     190                                ImmPoint.class); 
     191                double x; 
     192                if (point.getX() <= border) { 
     193                        x = 0f; 
     194                } else if (point.getX() >= width + border) { 
     195                        x = width; 
     196                } else { 
     197                        x = point.getX() - border; 
     198                } 
     199                long millis = (long) ((x / width) 
     200                                * view.handler().get().getInfo().getDuration() * 1000); 
     201 
     202                long mod = millis % 10; 
     203                millis = (mod < 5) ? millis -= mod : millis + 10 - mod; 
     204 
     205                SophieLog.debug("point = " + point); 
     206                SophieLog.debug("x = " + x); 
     207                SophieLog.debug("millis = " + millis); 
     208 
     209                final TimePos time = view.getTime(); 
     210                final MediaState oldState = view.model().get().getMediaState( 
     211                                view.getTime()); 
     212                final MediaState newState = new MediaState(oldState.getVolume(), 
     213                                millis, oldState.isPlaying()); 
     214 
     215                final MediaStateChannel oldChannel = view.model().get().get( 
     216                                MediaFrameR4.KEY_STATE); 
     217 
     218                new AutoAction("Seek", true) { 
     219 
     220                        @Override 
     221                        public void performAuto() { 
     222                                MediaStateChannel newChannel = oldChannel.setInterval(time, 
     223                                                TimePos.MAX, newState); 
     224                                getChanger().setRaw(MediaFrameR4.KEY_STATE, newChannel); 
    169225                        } 
    170                          
    171                         long millis = (long) ((x / width) *  
    172                                         view.handler().get().getInfo().getDuration() * 1000); 
    173                          
    174                         long mod = millis % 10; 
    175                         millis = (mod < 5) ? millis -= mod : millis + 10 - mod;  
    176                          
    177                         SophieLog.debug("point = " + point); 
    178                         SophieLog.debug("x = " + x); 
    179                         SophieLog.debug("millis = " + millis); 
    180                          
    181                         final TimePos time = view.getTime(); 
    182                         final MediaState oldState = view.model().get().getMediaState(view.getTime()); 
    183                         final MediaState newState = new MediaState(oldState.getVolume(), millis, oldState.isPlaying()); 
    184                          
    185                         final MediaStateChannel oldChannel = view.model().get().get(MediaFrameR4.KEY_STATE); 
     226                }.register(view.getAccess()); 
    186227 
    187                         new AutoAction("Seek", true) { 
     228                return true; 
    188229 
    189                                 @Override 
    190                                 public void performAuto() { 
    191                                         MediaStateChannel newChannel = oldChannel.setInterval(time, TimePos.MAX, 
    192                                                         newState); 
    193                                         getChanger().setRaw(MediaFrameR4.KEY_STATE, newChannel); 
    194                                 } 
    195                         }.register(view.getAccess()); 
    196                          
    197                         return true; 
    198                 } 
    199                  
    200         }; 
     230        } 
     231 
    201232}