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
28 28 * @author pav, peko 29 29 */ 30 30 public enum MediaLogic implements OperationDef { 31 31 32 32 /** 33 33 * Handles a user request to play/pauses the media. 34 34 * … … 43 43 } 44 44 45 45 public boolean handle(EventR3 event) { 46 PlayPauseMediaManipulationView mediaManView = 47 event.getSource(PlayPauseMediaManipulationView.class);46 PlayPauseMediaManipulationView mediaManView = event 47 .getSource(PlayPauseMediaManipulationView.class); 48 48 49 49 MediaFrameView view = mediaManView.parent().get(); 50 50 MediaFrameH model = view.model().get(); 51 51 52 52 final TimePos time = view.getTime(); 53 53 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); 56 58 57 59 new AutoAction("Play/Pause", true) { 58 60 59 61 @Override 60 62 public void performAuto() { 61 MediaStateChannel newChannel = oldChannel.setInterval(time, TimePos.MAX,62 newState);63 MediaStateChannel newChannel = oldChannel.setInterval(time, 64 TimePos.MAX, newState); 63 65 getChanger().setRaw(MediaFrameR4.KEY_STATE, newChannel); 64 66 } 65 67 }.register(view.getAccess()); 66 68 return true; 67 69 } 68 69 70 }, 70 71 71 72 /** … … 82 83 } 83 84 84 85 public boolean handle(EventR3 event) { 85 StopMediaManipulationView mediaManView = 86 event.getSource(StopMediaManipulationView.class);86 StopMediaManipulationView mediaManView = event 87 .getSource(StopMediaManipulationView.class); 87 88 88 89 MediaFrameView view = mediaManView.parent().get(); 89 90 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); 91 93 92 94 new AutoAction("Stop", true) { 93 95 94 96 @Override 95 97 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); 98 100 getChanger().setRaw(MediaFrameR4.KEY_STATE, newChannel); 99 101 } 100 102 }.register(view.getAccess()); … … 102 104 } 103 105 104 106 }, 105 107 106 108 /** 107 109 * Retries media that has had binary source problems. 108 110 * … … 117 119 } 118 120 119 121 public boolean handle(EventR3 event) { 120 MediaErrorManipulationView mediaManView = 121 event.getSource(MediaErrorManipulationView.class);122 MediaErrorManipulationView mediaManView = event 123 .getSource(MediaErrorManipulationView.class); 122 124 123 125 final MediaFrameView view = mediaManView.parent().get(); 124 126 assert view != null : "The manipulation view can not be unattached!"; 125 127 126 128 SwingUtilities.invokeLater(new Runnable() { 127 129 public void run() { 128 130 view.binSourceProblem().set(null); 129 131 } 130 132 }); 131 133 132 134 return true; 133 135 } 134 136 135 137 }, 136 138 137 139 /** 138 * Handles a user request to seek the media .140 * Handles a user request to seek the media (mouse pressed). 139 141 * 140 142 * @author stefan 141 143 */ 142 144 @SortKey("ffh-seek-media") 143 ON_SEEK_MEDIA {145 ON_SEEK_MEDIA_MOUSE_PRESSED { 144 146 145 147 public void defineFilter(EventFilterBuilder filter) { 146 148 filter.setSourceClass(SeekMediaManipulationView.class); … … 149 151 } 150 152 151 153 public boolean handle(EventR3 event) { 154 return handleMediaSeekEvent(event); 155 } 152 156 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 { 156 164 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); 159 168 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); 169 225 } 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()); 186 227 187 new AutoAction("Seek", true) {228 return true; 188 229 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 201 232 }