/[svn]/jsampler/trunk/src/org/jsampler/view/fantasia/Channel.java
ViewVC logotype

Diff of /jsampler/trunk/src/org/jsampler/view/fantasia/Channel.java

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1736 by iliev, Sun May 4 18:40:13 2008 UTC revision 1737 by iliev, Thu May 8 17:26:19 2008 UTC
# Line 68  import org.jsampler.event.SamplerChannel Line 68  import org.jsampler.event.SamplerChannel
68  import org.jsampler.event.SamplerChannelListener;  import org.jsampler.event.SamplerChannelListener;
69    
70  import org.jsampler.view.JSChannel;  import org.jsampler.view.JSChannel;
71    import org.jsampler.view.JSChannelsPane;
72    
73  import org.jsampler.view.std.JSChannelOutputRoutingDlg;  import org.jsampler.view.std.JSChannelOutputRoutingDlg;
74  import org.jsampler.view.std.JSFxSendsPane;  import org.jsampler.view.std.JSFxSendsPane;
# Line 88  import static org.jsampler.view.std.JSVo Line 89  import static org.jsampler.view.std.JSVo
89   */   */
90  public class Channel extends JSChannel {  public class Channel extends JSChannel {
91          private final JXCollapsiblePane mainPane;          private final JXCollapsiblePane mainPane;
         private ChannelOptionsView channelOptionsView;  
92          private final ChannelOptionsPane optionsPane = new ChannelOptionsPane();          private final ChannelOptionsPane optionsPane = new ChannelOptionsPane();
93                    
94          private final ViewTracker viewTracker;          private final ViewTracker viewTracker;
95                    
96          private InformationDialog fxSendsDlg = null;          private InformationDialog fxSendsDlg = null;
97                    
98          private final ContextMenu contextMenu = new ContextMenu();          private final ContextMenu contextMenu;
99                    
100          private boolean selected = false;          private boolean selected = false;
101                    
# Line 108  public class Channel extends JSChannel { Line 108  public class Channel extends JSChannel {
108                  }                  }
109          }          }
110                    
111            ////////////////////////////////
112            // ******* Mouse tracker *******
113            ////////////////////////////////
114            private static int mouseOverChannelId = -1;
115            private static boolean mousePressed = false;
116            
117            private static ActionListener guiListener = null;
118            
119            private static Channel oldMouseOverChannel = null;
120            private static Channel newMouseOverChannel = null;
121            
122            
123            private static void
124            mouseMoved() {
125                    //TODO: do this for all channels panes
126                    JSChannelsPane cp = CC.getMainFrame().getChannelsPane(0);
127                    for(int i = 0; i < cp.getChannelCount(); i++) {
128                            mouseMoved((Channel)cp.getChannel(i));
129                    }
130                    
131                    if(oldMouseOverChannel == newMouseOverChannel) return;
132                    
133                    if(oldMouseOverChannel != null) oldMouseOverChannel.mouseExited();
134                    
135                    if(newMouseOverChannel != null) {
136                            mouseOverChannelId = newMouseOverChannel.getChannelId();
137                            newMouseOverChannel.mouseEntered();
138                    }
139                    
140                    oldMouseOverChannel = newMouseOverChannel = null;
141            }
142            
143            private static void
144            mouseMoved(Channel c) {
145                    int id = c.getChannelId();
146                    if(c.mainPane.getMousePosition(true) != null) {
147                            newMouseOverChannel = c;
148                    } else if(id == mouseOverChannelId) {
149                            oldMouseOverChannel = c;
150                    }
151            }
152            
153            ////////////////////////////////
154            
155            
156          /**          /**
157           * Creates a new instance of <code>Channel</code> using the specified           * Creates a new instance of <code>Channel</code> using the specified
158           * non-<code>null</code> channel model.           * non-<code>null</code> channel model.
# Line 136  public class Channel extends JSChannel { Line 181  public class Channel extends JSChannel {
181                                    
182                  mainPane = new JXCollapsiblePane();                  mainPane = new JXCollapsiblePane();
183                  viewTracker = new ViewTracker();                  viewTracker = new ViewTracker();
184                    contextMenu = new ContextMenu();
185                                    
186                  mainPane.getContentPane().setLayout (                  mainPane.getContentPane().setLayout (
187                          new BoxLayout(mainPane.getContentPane(), BoxLayout.Y_AXIS)                          new BoxLayout(mainPane.getContentPane(), BoxLayout.Y_AXIS)
# Line 143  public class Channel extends JSChannel { Line 189  public class Channel extends JSChannel {
189                                    
190                  int viewIdx = preferences().getIntProperty(DEFAULT_CHANNEL_VIEW);                  int viewIdx = preferences().getIntProperty(DEFAULT_CHANNEL_VIEW);
191                  if(viewIdx == 0) {                  if(viewIdx == 0) {
192                          contextMenu.rbmiSmallView.doClick(0);                          viewTracker.setView(new SmallChannelView(Channel.this));
193                  } else if(viewIdx == 1) {                  } else if(viewIdx == 1) {
194                          contextMenu.rbmiNormalView.doClick(0);                          viewTracker.setView(new NormalChannelView(Channel.this));
195                  } else {                  } else {
196                          contextMenu.rbmiNormalView.doClick(0);                          viewTracker.setView(new NormalChannelView(Channel.this));
197                  }                  }
198                                    
199                  setOpaque(false);                  setOpaque(false);
# Line 191  public class Channel extends JSChannel { Line 237  public class Channel extends JSChannel {
237                  }                  }
238                                    
239                  CC.getSamplerModel().addSamplerChannelListListener(getHandler());                  CC.getSamplerModel().addSamplerChannelListListener(getHandler());
240                    
241                    installGuiListener();
242            }
243            
244            private static void
245            installGuiListener() {
246                    if(guiListener != null) return;
247                    
248                    guiListener = new ActionListener() {
249                            public void
250                            actionPerformed(ActionEvent e) {
251                                    mouseMoved();
252                            }
253                    };
254                    
255                    ((MainFrame)CC.getMainFrame()).getGuiTimer().addActionListener(guiListener);
256            }
257            
258            private void
259            mouseEntered() {
260                    viewTracker.mouseEntered();
261            }
262            
263            private void
264            mouseExited() {
265                    viewTracker.mouseExited();
266          }          }
267                    
268          private void          private void
# Line 247  public class Channel extends JSChannel { Line 319  public class Channel extends JSChannel {
319          private void          private void
320          updateChannelInfo() {          updateChannelInfo() {
321                  viewTracker.getCurrentView().updateChannelInfo();                  viewTracker.getCurrentView().updateChannelInfo();
                 viewTracker.getCurrentView().getChannelOptionsView().updateChannelInfo();  
322          }          }
323                    
324          public void          public void
# Line 373  public class Channel extends JSChannel { Line 444  public class Channel extends JSChannel {
444                  }                  }
445          }          }
446                    
447          private static boolean viewTrackerMousePressed = false;          
448                    
449          class ViewTracker extends MouseAdapter implements PropertyChangeListener {          class ViewTracker extends MouseAdapter implements PropertyChangeListener {
450                  private ChannelView originalView;                  private ChannelView originalView;
451                  private ChannelView mouseOverView;                  private ChannelView mouseOverView;
452                  private ChannelView currentView;                  private ChannelView currentView;
453                                    
454                                    private ChannelView.Type mouseOverViewType = null;
                 private boolean mouseOver = false;  
                   
                 private final ActionListener guiListener;  
455                                    
456                  ViewTracker() {                  ViewTracker() {
457                          guiListener = new ActionListener() {                          
                                 public void  
                                 actionPerformed(ActionEvent e) {  
                                         if(viewTrackerMousePressed) return;  
                                           
                                         if(mainPane.getMousePosition(true) != null) {  
                                                 mouseEntered(null);  
                                         } else {  
                                                 mouseExited(null);  
                                         }  
                                 }  
                         };  
458                                                    
459                          updateMouseOverViewType();                          updateMouseOverViewType();
460                                                    
# Line 415  public class Channel extends JSChannel { Line 472  public class Channel extends JSChannel {
472                                    
473                  private void                  private void
474                  installListeners() {                  installListeners() {
475                          ((MainFrame)CC.getMainFrame()).getGuiTimer().addActionListener(guiListener);                          
476                  }                  }
477                                    
478                  private void                  private void
479                  uninstallListeners() {                  uninstallListeners() {
480                          ((MainFrame)CC.getMainFrame()).getGuiTimer().removeActionListener(guiListener);                          
481                  }                  }
482                                    
483                  private void                  private void
# Line 429  public class Channel extends JSChannel { Line 486  public class Channel extends JSChannel {
486                                  mouseOverView.removeEnhancedMouseListener(this);                                  mouseOverView.removeEnhancedMouseListener(this);
487                          }                          }
488                                                    
489                            mouseOverView = null;
490                            
491                          boolean b;                          boolean b;
492                          b = preferences().getBoolProperty(DIFFERENT_CHANNEL_VIEW_ON_MOUSE_OVER);                          b = preferences().getBoolProperty(DIFFERENT_CHANNEL_VIEW_ON_MOUSE_OVER);
493                          if(!b) {                          if(!b) {
494                                  mouseOverView = null;                                  mouseOverViewType = null;
495                                  uninstallListeners();                                  uninstallListeners();
496                                  return;                                  return;
497                          }                          }
498                                                    
                         Channel channel = Channel.this;  
499                          int i = preferences().getIntProperty(CHANNEL_VIEW_ON_MOUSE_OVER);                          int i = preferences().getIntProperty(CHANNEL_VIEW_ON_MOUSE_OVER);
500                                                    
501                          switch(i) {                          switch(i) {
502                                  case 0: mouseOverView = new SmallChannelView(channel); break;                                  case 0: mouseOverViewType = ChannelView.Type.SMALL; break;
503                                  case 1: mouseOverView = new NormalChannelView(channel); break;                                  case 1: mouseOverViewType = ChannelView.Type.NORMAL; break;
504                                  default:mouseOverView = null;                                  default:mouseOverViewType = null;
505                          }                          }
506                                                    
507                          if(mouseOverView != null) {                          if(mouseOverViewType != null) {
508                                  installListeners();                                  installListeners();
509                            }
510                    }
511                    
512                    public ChannelView
513                    getMouseOverView() {
514                            if(mouseOverViewType == null) return null;
515                            
516                            if(mouseOverView == null) {
517                                    Channel channel = Channel.this;
518                                    
519                                    switch(mouseOverViewType) {
520                                    case SMALL: mouseOverView = new SmallChannelView(channel); break;
521                                    case NORMAL: mouseOverView = new NormalChannelView(channel); break;
522                                    default: mouseOverView = new NormalChannelView(channel);
523                                    }
524                                    
525                                  mouseOverView.addEnhancedMouseListener(this);                                  mouseOverView.addEnhancedMouseListener(this);
526                          }                          }
527                            
528                            return mouseOverView;
529                  }                  }
530                                    
531                  public ChannelView                  public ChannelView
532                  getCurrentView() { return currentView; }                  getCurrentView() { return currentView; }
533                                    
534                    public ChannelView
535                    getOriginalView() { return originalView; }
536                    
537                  public void                  public void
538                  setView(ChannelView view) {                  setView(ChannelView view) {
539                          setView(view, true);                          setView(view, true);
# Line 500  public class Channel extends JSChannel { Line 579  public class Channel extends JSChannel {
579                                    
580                  private void                  private void
581                  updateView() {                  updateView() {
582                          JComponent c = getCurrentView().getChannelOptionsView().getComponent();                          ChannelOptionsView view = getCurrentView().getChannelOptionsView();
583                          optionsPane.setContentPane(c);                          if(view != null) optionsPane.setContentPane(view.getComponent());
584                                                    
585                          updateChannelInfo();                          updateChannelInfo();
586                                    
# Line 553  public class Channel extends JSChannel { Line 632  public class Channel extends JSChannel {
632                          if(view == null) return;                          if(view == null) return;
633                                                    
634                          view.uninstallView();                          view.uninstallView();
                         view.getChannelOptionsView().uninstallView();  
635                                                    
636                          view = null;                          view = null;
637                  }                  }
638                                    
639                    public boolean
640                    isMouseOverEnabled() { return mouseOverViewType != null; }
641                    
642                  private void                  private void
643                  mouseEntered() {                  mouseEntered() {
644                          if(mouseOverView == null) return;                          if(!isMouseOverEnabled()) return;
645                          if(getCurrentView().getType() == mouseOverView.getType()) return;                          if(getCurrentView().getType() == getMouseOverView().getType()) return;
646                                                    
647                          JSChannel[] channels = CC.getMainFrame().getChannelsPane(0).getChannels();                          JSChannel[] channels = CC.getMainFrame().getChannelsPane(0).getChannels();
648                          for(JSChannel c : channels) {                          for(JSChannel c : channels) {
# Line 571  public class Channel extends JSChannel { Line 652  public class Channel extends JSChannel {
652                                  if(!(chn).isUsingOriginalView()) chn.fallbackToOriginalView();                                  if(!(chn).isUsingOriginalView()) chn.fallbackToOriginalView();
653                          }                          }
654                                                    
655                          setView(mouseOverView, false);                          setView(getMouseOverView(), false);
656                  }                  }
657                                    
658                  private void                  private void
659                  mouseExited() {                  mouseExited() {
660                          if(mouseOverView == null) return;                          if(!isMouseOverEnabled()) return;
661                          if(getCurrentView().getType() == originalView.getType()) return;                          if(getCurrentView().getType() == originalView.getType()) return;
662                                                    
663                          fallbackToOriginalView();                          fallbackToOriginalView();
# Line 584  public class Channel extends JSChannel { Line 665  public class Channel extends JSChannel {
665                                    
666                  public void                  public void
667                  mouseEntered(MouseEvent e) {                  mouseEntered(MouseEvent e) {
668                          if(viewTrackerMousePressed) return;                          guiListener.actionPerformed(null);
                           
                         if(mouseOver) return;  
                         mouseOver = true;  
                         mouseEntered();  
669                  }                  }
670                                    
671                  public void                  public void
672                  mouseExited(MouseEvent e) {                  mouseExited(MouseEvent e) {
673                          if(viewTrackerMousePressed) return;                          guiListener.actionPerformed(null);
                           
                         if(mainPane.getMousePosition(true) != null) return;  
                         if(!mouseOver) return;  
                         mouseOver = false;  
                         mouseExited();  
674                  }                  }
675                                    
676                  public void                  public void
677                  mousePressed(MouseEvent e) {                  mousePressed(MouseEvent e) {
678                          viewTrackerMousePressed = true;                          mousePressed = true;
679                  }                  }
680                                    
681                  public void                  public void
682                  mouseReleased(MouseEvent e) {                  mouseReleased(MouseEvent e) {
683                          viewTrackerMousePressed = false;                          mousePressed = false;
684                  }                  }
685                                    
686                  public void                  public void
# Line 727  public class Channel extends JSChannel { Line 799  public class Channel extends JSChannel {
799          getContextMenu() { return contextMenu; }          getContextMenu() { return contextMenu; }
800                    
801          class ContextMenu extends MouseAdapter {          class ContextMenu extends MouseAdapter {
802                  private final JPopupMenu menu = new JPopupMenu();                  private JPopupMenu menu = null;
803                                    
804                  protected final JRadioButtonMenuItem rbmiSmallView;                  protected JRadioButtonMenuItem rbmiSmallView;
805                  protected final JRadioButtonMenuItem rbmiNormalView;                  protected JRadioButtonMenuItem rbmiNormalView;
806                                    
807                  ContextMenu() {                  ContextMenu() {
808                            
809                    }
810                    
811                    private void
812                    createMenu() {
813                            menu = new JPopupMenu();
814                          menu.add(new JMenuItem(new EditInstrumentAction()));                          menu.add(new JMenuItem(new EditInstrumentAction()));
815                          menu.addSeparator();                          menu.addSeparator();
816                                                    
817                          rbmiSmallView = new JRadioButtonMenuItem(new SetSmallViewAction());                          rbmiSmallView = new JRadioButtonMenuItem(new SetSmallViewAction());
818                          rbmiNormalView = new JRadioButtonMenuItem(new SetNormalViewAction());                          rbmiNormalView = new JRadioButtonMenuItem(new SetNormalViewAction());
819                            if(viewTracker.getOriginalView() instanceof SmallChannelView) {
820                                    rbmiSmallView.setSelected(true);
821                            } else if(viewTracker.getOriginalView() instanceof NormalChannelView) {
822                                    rbmiNormalView.setSelected(true);
823                            }
824                                                    
825                          ButtonGroup group = new ButtonGroup();                          ButtonGroup group = new ButtonGroup();
826                          group.add(rbmiSmallView);                          group.add(rbmiSmallView);
# Line 751  public class Channel extends JSChannel { Line 834  public class Channel extends JSChannel {
834                          menu.add(new JMenuItem(new ChannelRoutingAction()));                          menu.add(new JMenuItem(new ChannelRoutingAction()));
835                  }                  }
836                                    
837                    private JPopupMenu
838                    getMenu() {
839                            if(menu == null) createMenu();
840                            return menu;
841                    }
842                    
843                  public void                  public void
844                  mousePressed(MouseEvent e) {                  mousePressed(MouseEvent e) {
845                          if(e.isPopupTrigger()) show(e);                          if(e.isPopupTrigger()) show(e);
# Line 763  public class Channel extends JSChannel { Line 852  public class Channel extends JSChannel {
852                    
853                  void                  void
854                  show(MouseEvent e) {                  show(MouseEvent e) {
855                          menu.show(e.getComponent(), e.getX(), e.getY());                          getMenu().show(e.getComponent(), e.getX(), e.getY());
856                  }                  }
857          }          }
858                    
# Line 939  public class Channel extends JSChannel { Line 1028  public class Channel extends JSChannel {
1028                  contains(int x, int y) { return (x - 11)*(x - 11) + (y - 11)*(y - 11) < 71; }                  contains(int x, int y) { return (x - 11)*(x - 11) + (y - 11)*(y - 11) < 71; }
1029          }          }
1030                    
1031          public static class OptionsButton extends PixmapToggleButton implements ActionListener {          public static class OptionsButton extends PixmapToggleButton
1032                                            implements ActionListener, PropertyChangeListener {
1033                    
1034                  private final Channel channel;                  private final Channel channel;
1035                                    
1036                  OptionsButton(Channel channel) {                  OptionsButton(Channel channel) {
# Line 955  public class Channel extends JSChannel { Line 1046  public class Channel extends JSChannel {
1046                                    
1047                  public void                  public void
1048                  actionPerformed(ActionEvent e) {                  actionPerformed(ActionEvent e) {
1049                            ChannelView view = channel.viewTracker.getCurrentView();
1050                            
1051                            if(isSelected() && view.getChannelOptionsView() == null) {
1052                                    view.installChannelOptionsView();
1053                                    JComponent c = view.getChannelOptionsView().getComponent();
1054                                    channel.optionsPane.setContentPane(c);
1055                            }
1056                            
1057                          channel.showOptionsPane(isSelected());                          channel.showOptionsPane(isSelected());
1058                                                    
1059                          String s;                          String s;
# Line 962  public class Channel extends JSChannel { Line 1061  public class Channel extends JSChannel {
1061                          else s = i18n.getButtonLabel("Channel.ttShowOptions");                          else s = i18n.getButtonLabel("Channel.ttShowOptions");
1062                                                    
1063                          setToolTipText(s);                          setToolTipText(s);
1064                            
1065                            s = JXCollapsiblePane.ANIMATION_STATE_KEY;
1066                            channel.optionsPane.addPropertyChangeListener(s, this);
1067                    }
1068                    
1069                    public void
1070                    propertyChange(PropertyChangeEvent e) {
1071                            if(e.getNewValue() == "collapsed") {
1072                                    ChannelView view = channel.viewTracker.getCurrentView();
1073                                    view.uninstallChannelOptionsView();
1074                                    channel.optionsPane.setContentPane(new JPanel());
1075                            }
1076                    }
1077                    
1078                    public void
1079                    onDestroy() {
1080                            String s = JXCollapsiblePane.ANIMATION_STATE_KEY;
1081                            channel.optionsPane.removePropertyChangeListener(s, this);
1082                  }                  }
1083                                    
1084                  public boolean                  public boolean

Legend:
Removed from v.1736  
changed lines
  Added in v.1737

  ViewVC Help
Powered by ViewVC