From c3d2f61d28ca5c05d2bca58554c0be0393c761ce Mon Sep 17 00:00:00 2001 From: mdb Date: Wed, 18 Aug 2004 05:19:19 +0000 Subject: [PATCH] Added nay votes; any songs with nay votes are not added when the album containing those songs is added to the playlist. git-svn-id: https://samskivert.googlecode.com/svn/trunk@1491 6335cc39-0255-0410-8fd6-9bcaacd3b74c --- .../java/robodj/chooser/EntryController.java | 3 + .../java/robodj/chooser/ItemController.java | 21 +++--- .../src/java/robodj/chooser/SongItem.java | 41 +++++----- .../java/robodj/chooser/images/add_vote.png | Bin 792 -> 0 bytes .../java/robodj/chooser/images/clear_vote.png | Bin 797 -> 0 bytes .../java/robodj/chooser/images/nay_vote.png | Bin 0 -> 820 bytes .../java/robodj/chooser/images/no_vote.png | Bin 0 -> 336 bytes .../java/robodj/chooser/images/yea_vote.png | Bin 0 -> 681 bytes .../src/java/robodj/repository/Song.java | 71 ++++++++++++++---- 9 files changed, 90 insertions(+), 46 deletions(-) delete mode 100644 projects/robodj/src/java/robodj/chooser/images/add_vote.png delete mode 100644 projects/robodj/src/java/robodj/chooser/images/clear_vote.png create mode 100644 projects/robodj/src/java/robodj/chooser/images/nay_vote.png create mode 100644 projects/robodj/src/java/robodj/chooser/images/no_vote.png create mode 100644 projects/robodj/src/java/robodj/chooser/images/yea_vote.png diff --git a/projects/robodj/src/java/robodj/chooser/EntryController.java b/projects/robodj/src/java/robodj/chooser/EntryController.java index 2eeccfbd..c0bc6b08 100644 --- a/projects/robodj/src/java/robodj/chooser/EntryController.java +++ b/projects/robodj/src/java/robodj/chooser/EntryController.java @@ -169,6 +169,9 @@ public abstract class EntryController extends ItemController plist = new PlaylistEntry[0]; } for (int i = 0; i < songs.length; i++) { + if (songs[i].isHated()) { + continue; + } PlaylistEntry entry = new PlaylistEntry( songs[i].entryid, songs[i].songid, songs[i].title); plist = (PlaylistEntry[])ArrayUtil.append(plist, entry); diff --git a/projects/robodj/src/java/robodj/chooser/ItemController.java b/projects/robodj/src/java/robodj/chooser/ItemController.java index 990f4add..21bf7bca 100644 --- a/projects/robodj/src/java/robodj/chooser/ItemController.java +++ b/projects/robodj/src/java/robodj/chooser/ItemController.java @@ -32,23 +32,20 @@ public abstract class ItemController extends Controller public boolean handleAction (ActionEvent e) { String cmd = e.getActionCommand(); - if (cmd.equals(SongItem.ADD_VOTE)) { + if (cmd.equals(SongItem.TOGGLE_VOTE)) { JButton button = (JButton)e.getSource(); SongItem item = (SongItem)button.getParent(); _song = item.getSong(); - if (_song.addVote(Chooser.frame.getUser(true))) { - item.update(); - TaskMaster.invokeMethodTask("updateSong", this, this); - } - } else if (cmd.equals(SongItem.CLEAR_VOTE)) { - JButton button = (JButton)e.getSource(); - SongItem item = (SongItem)button.getParent(); - _song = item.getSong(); - if (_song.clearVote(Chooser.frame.getUser(true))) { - item.update(); - TaskMaster.invokeMethodTask("updateSong", this, this); + String who = Chooser.frame.getUser(true); + switch (_song.hasVoted(who)) { + case -1: _song.addVote(who, true); break; + case 1: _song.clearVote(who); break; + default: + case 0: _song.addVote(who, false); break; } + item.update(); + TaskMaster.invokeMethodTask("updateSong", this, this); } else { Log.warning("Unknown action event: " + cmd); diff --git a/projects/robodj/src/java/robodj/chooser/SongItem.java b/projects/robodj/src/java/robodj/chooser/SongItem.java index f3d2f619..4e91fc56 100644 --- a/projects/robodj/src/java/robodj/chooser/SongItem.java +++ b/projects/robodj/src/java/robodj/chooser/SongItem.java @@ -33,8 +33,7 @@ public class SongItem extends Item public static final String PLAY = "song:play"; // ubiquitous actions - public static final String ADD_VOTE = "song:add_vote"; - public static final String CLEAR_VOTE = "song:clear_vote"; + public static final String TOGGLE_VOTE = "song:toggle_vote"; /** Used depending on where this song is being displayed. */ public Object extra; @@ -85,7 +84,7 @@ public class SongItem extends Item // add a vote button _voteButton = ButtonUtil.createControlButton( - ADD_VOTE_TIP, ADD_VOTE, _addVoteIcon, true); + TOGGLE_VOTE_TIP, TOGGLE_VOTE, _noVoteIcon, true); _voteButton.putClientProperty(SONG_PROP, song); add(_voteButton, HGroupLayout.FIXED); @@ -106,22 +105,22 @@ public class SongItem extends Item { if (!StringUtil.blank(_song.votes)) { _trackLabel.setFont(_hasVotesFont); - _trackLabel.setToolTipText("" + _song.title + - "
Votes: " + _song.votes); + _trackLabel.setToolTipText( + "" + + "" + + "
" + _song.title + "
Votes: " + _song.votes + "
"); } else { _trackLabel.setFont(_nameFont); _trackLabel.setToolTipText(_song.title); } - if (_song.hasVoted(Chooser.frame.getUser(false))) { - _voteButton.setIcon(_clearVoteIcon); - _voteButton.setActionCommand(CLEAR_VOTE); - _voteButton.setToolTipText(CLEAR_VOTE_TIP); - } else { - _voteButton.setIcon(_addVoteIcon); - _voteButton.setActionCommand(ADD_VOTE); - _voteButton.setToolTipText(ADD_VOTE_TIP); + switch (_song.hasVoted(Chooser.frame.getUser(false))) { + case -1: _voteButton.setIcon(_nayVoteIcon); break; + case 1: _voteButton.setIcon(_yeaVoteIcon); break; + default: + case 0: _voteButton.setIcon(_noVoteIcon); break; } + repaint(); } @@ -149,18 +148,18 @@ public class SongItem extends Item protected static final String PLAY_SONG_TIP = "Append this song to the playlist"; - protected static final String ADD_VOTE_TIP = - "Add your vote for this song"; - protected static final String CLEAR_VOTE_TIP = - "Remove your vote for this song"; + protected static final String TOGGLE_VOTE_TIP = + "Toggle your vote for this song"; protected static ImageIcon _skipToIcon = ButtonUtil.getIcon(ICON_ROOT + "skip.png"); protected static ImageIcon _removeIcon = ButtonUtil.getIcon(ICON_ROOT + "remove_song.png"); - protected static ImageIcon _addVoteIcon = - ButtonUtil.getIcon(ICON_ROOT + "add_vote.png"); - protected static ImageIcon _clearVoteIcon = - ButtonUtil.getIcon(ICON_ROOT + "clear_vote.png"); + protected static ImageIcon _yeaVoteIcon = + ButtonUtil.getIcon(ICON_ROOT + "yea_vote.png"); + protected static ImageIcon _nayVoteIcon = + ButtonUtil.getIcon(ICON_ROOT + "nay_vote.png"); + protected static ImageIcon _noVoteIcon = + ButtonUtil.getIcon(ICON_ROOT + "no_vote.png"); } diff --git a/projects/robodj/src/java/robodj/chooser/images/add_vote.png b/projects/robodj/src/java/robodj/chooser/images/add_vote.png deleted file mode 100644 index 1f6d2b50f490fd2219c6b6f7106c6a254a902250..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 792 zcmV+z1LypSP)*A5}{g1!Zcfi&7tG3k|_Vg)WNN)`bul+n^w5!Kr zF_Fz?g|6$OQjk2r;NV~`$y#0+KrVK3%d$i~9v9JQv@8(MY9CG0T;Z8a2E#CDX=y>% z^)>fID&FLDI*s4&$F^-u(%c)YsQDGc!XZ5^=i) zq*W!Fot;HhRdR9_R+x)}!5{$V+B>P;8N|1_hVRKAe46}BmwwriyCj30MC0S*EH5u( znkE2>q5yF1`~$Xy6gF*=dH&)Vhr>tlR#npx=;q?B_O&I-#f^=P4%t*yf@2#&57fuIk5L23uczow}sMsP)e>s zps!z2)c9q7Wi33O4S((#iKRu0rFn~tIbYUvay>zkBq4<0(y4m{YkheBT$kA;!SbTT z+>d!W?w`!(mMR@i0B4R}McERdTCQRt^OM=+S8nPTDjKaTOw+V=ZbL}Zw0}$dxAq%) WIo6s39^&T!0000}5W(X)#$exe;N+g;cvJTG%3x zA_yUhphX0IKu`n~RJ6}k@Qi8^LIes91CfvmiPVa4=w(xyIn%Q*U-#Y?F~dB4>M)C- z0|(CgxaWWV|9kE`5B_)4=3T22)+}kh!sJp)yj%!DDwQIUNEBOyrzt6=%4V~ko=hf{ z<2cGRO;svL9-z0kHFH@YIy&g<>tk?mkaRkYWmyai3@qARewRi{ zp_IFzwzf6^8XFt)?=&|zGd4EH%a<=085t?MrDySjsbv_(iOM2x4RM+vh-rSEWrH5rfCw1L;#qWm;fLejWRwyPG@JQ*H=JW zQlhD;DRf;YCs$#Gxi}mS191C9i0#oZ8}uOWCNexqeB#!_tSk4T3~~|;4-YdpH-~N8 z00e_U0G?c}C$hPo6>HX`ghRu|09|_>c5WB!y*RtPM7cN?i@9Xeb)9QnwL~`8v#K`A zod<6?fAcA)4@Wt=CrqUNCua}*;_^L50h$Y7XlN*3X^ufpPY;!ql~h$#5eNhTXlV-L zU$KU=@|FBjfA4+y`WwyX$5*k6_%=V_Ed99_LNGZwxqww&T^+B?CWcZ04xV|oplfa% z3)8;!J59&G0cbvtbD2dK6&KX00000NkvXXu0mjfwWV9~ diff --git a/projects/robodj/src/java/robodj/chooser/images/nay_vote.png b/projects/robodj/src/java/robodj/chooser/images/nay_vote.png new file mode 100644 index 0000000000000000000000000000000000000000..667e10c945fd3db181b32962e1c9bec14852868e GIT binary patch literal 820 zcmV-41Izr0P))b=x)9=+5JHdRc$@#KbUHnMZ0NT5P`2MQ3}fMDeVV475JKct zRsCL7)sepn2L^hs7tg*NfAjRi@$tdl*f5M&{t4^4K6zJvZ}i0rr{eRI2VzZCegO~w z>4b`PWgXXccyTnxcqZ|xVHnSK;AAp+{Em!v;lszLBxz%n?Q#W;$N`W68bSEjqkVeT ztCR?Ai}B$sZO5Db(Tl68RO)iK%(ovuF)d$PTVb3V@E!EekC8v z-Mz$sSKr}ePlCI3^_*#%Kc7D}BVD_+#!7XUcYdmHp=M3QaeN6t>WrC6rCz#SQx@Jn zv>&grLkNTsgv0yUYd2XfUgyoLC4Vd6z90xLb~w2c_`bhn38lDMYt2sOvIMq;kf2+U zsBTv{oi9_c!!uzResJS)<_b+c*Zda+%9DC%*VceYxj%gwb81KulZii#0q-^-U z|J}bDD2g&Sph&0Rou8xe^)fCJaTFm-ph|G~mLwNj?yM=vE57d+|7IYBm_N9ud-46b zCzZz1XKXfYp4})F3RckbP;QXOvFH*KM|*U6x#`X{9B&iI%K(xjEu0)0c>RqN(@OoT z&ncKLi-n36B$7iVHz?(+jp>PfgG9DPmjt7|nXXUDtzby`-0YbQ y!&ta?Z=Zip|E+O4ou23aNS5UhA;c7*1N;GFJx4yn%Ds000000}1Cmi70BB8Ud?5dCTw>Lfh-)Y(+c=BYp{=M3xAHJMTZxesN-|)}R-~Ebb zqvtm^HagB}Y}&5gV59G>!zyzf4xKX zUwT5q5B=5889q1JU2L3YoyzYc%*=OoWk8|f8a9h%-xZ}7w5peFkWy+>>C}(?v%liI zs9&jpbI`>jUnlN;Hpy7@D1(|x>-q&3t)zWFw|1Au8yXlG{JCD}ePkxz2F6UFjq2j> z_a$k(i{}-uDSXXycxvqDhgFduBtFarIyLd!H}8U89v&Wpv$u}8trv?D`QNTqIjKQx f-VMc*0&9T5P?hF+x469y7(@)7u6{1-oD!M=$o)nfLI&C}~bZ|>b}?@_^VX%m3v{4&G# zf}Bi!?~8Y*<|l0~5P|<~K4xgRv}`gDi@Nr1q0P*ikksm0013zd)QNXGNh(=B-Q02^ z+v!`y{=Qo%;oxjsQLF$`^+nTSR^iScz5bnJscFfDr*(B zR(l4hFFsJMn1>vq>DDVzR8b`W3s97rmkcOMIP}ru^|tP-JR%qDHb@I|?uJ$0%*i{C zUuy=(+|0YCa18duW6_8am`waGl3NgfbH?_;JZhgpmQ&35@F5n#cIAy!0&AVx`9|KKu!TD8^4y^ z!S(f~+>&x48$pzC5YL!}Is4}o;0h2<0R9|FDgfwn*#?GJeNLj`5P>Bhv*Q+kuEgGz z)b!I{9Z;;#&hr`?+r*CYLjveeB(MH! 0) { @@ -116,19 +129,51 @@ public class Song } /** - * Returns true if the specified user has voted. + * Returns true if this song has at least one positive vote. */ - public boolean hasVoted (String voter) + public boolean isLoved () { String[] votes = getVotes(); for (int ii = 0; ii < votes.length; ii++) { - if (votes[ii].equalsIgnoreCase(voter)) { + if (!votes[ii].startsWith("-")) { return true; } } return false; } + /** + * Returns true if this song has at least one negative vote. + */ + public boolean isHated () + { + String[] votes = getVotes(); + for (int ii = 0; ii < votes.length; ii++) { + if (votes[ii].startsWith("-")) { + return true; + } + } + return false; + } + + /** + * Returns +1, -1, or 0 to indicate whether the specified user has + * voted positively, negatively or not at all. + */ + public int hasVoted (String voter) + { + String nvoter = "-" + voter; + String[] votes = getVotes(); + for (int ii = 0; ii < votes.length; ii++) { + if (votes[ii].equals(voter)) { + return 1; + } else if (votes[ii].equals(nvoter)) { + return -1; + } + } + return 0; + } + /** * Returns a string representation of this instance. */