11package io .ipfs .nbs .helper ;
22
3+ import io .nbs .client .ui .components .adapters .MessageMouseListener ;
34import io .nbs .client .ui .panels .im .messages .MessageLeftTextViewHolder ;
45import io .nbs .client .ui .panels .im .messages .MessageRightTextViewHolder ;
56import io .nbs .client .ui .panels .im .messages .MessageSystemMessageViewHolder ;
67
8+ import javax .swing .*;
9+ import java .awt .event .MouseListener ;
710import java .util .ArrayList ;
811import java .util .List ;
912
@@ -23,8 +26,10 @@ public class MessageViewHolderCacheHelper {
2326 private final int CACHE_CAPACITY = 20 ;
2427 private List <MessageRightTextViewHolder > rightTextViewHolders = new ArrayList <>();
2528
29+
2630 private List <MessageLeftTextViewHolder > leftTextViewHolders = new ArrayList <>();
2731
32+
2833 private List <MessageSystemMessageViewHolder > systemMessageViewHolders = new ArrayList <>();
2934
3035 private int rightTextPosition = 0 ;
@@ -58,4 +63,93 @@ private void initLeftTextViewHolder(){
5863 leftTextViewHolders .add (new MessageLeftTextViewHolder ());
5964 }
6065 }
66+
67+ /**
68+ *
69+ * @return
70+ */
71+ public synchronized MessageRightTextViewHolder tryGetRightTextViewHolder (){
72+ MessageRightTextViewHolder holder =null ;
73+ if (rightTextPosition <CACHE_CAPACITY && rightTextViewHolders .size ()>0 ){
74+ holder = rightTextViewHolders .get (rightTextPosition );
75+ }
76+ return holder ;
77+ }
78+
79+ /**
80+ *
81+ * @return
82+ */
83+ public synchronized MessageLeftTextViewHolder tryGetLeftTextViewHolder ()
84+ {
85+ MessageLeftTextViewHolder holder = null ;
86+ if (leftTextPosition < CACHE_CAPACITY && leftTextViewHolders .size () > 0 )
87+ {
88+ holder = leftTextViewHolders .get (leftTextPosition );
89+ leftTextPosition ++;
90+ }
91+
92+ return holder ;
93+ }
94+
95+ /**
96+ * @Date : 2018/7/3 0:04
97+ * @Author : lanbery
98+ * @Decription :
99+ * <p></p>
100+ * @Param :
101+ * @return
102+ * @throws
103+ */
104+ public synchronized MessageSystemMessageViewHolder tryGetSystemMessageViewHolder ()
105+ {
106+ MessageSystemMessageViewHolder holder = null ;
107+ if (systemMessagePosition < CACHE_CAPACITY && systemMessageViewHolders .size () > 0 )
108+ {
109+ holder = systemMessageViewHolders .get (systemMessagePosition );
110+ systemMessagePosition ++;
111+ }
112+
113+ return holder ;
114+ }
115+
116+ public synchronized void reset (){
117+ for (int i = 0 ; i < rightTextPosition ; i ++)
118+ {
119+ MessageRightTextViewHolder viewHolder = rightTextViewHolders .get (i );
120+ clearMouseListener (viewHolder .messageBubble );
121+ clearMouseListener (viewHolder .resend );
122+ clearMouseListener (viewHolder .text );
123+ }
124+
125+ for (int i = 0 ; i < leftTextPosition ; i ++)
126+ {
127+ MessageLeftTextViewHolder viewHolder = leftTextViewHolders .get (i );
128+
129+ clearMouseListener (viewHolder .text );
130+ clearMouseListener (viewHolder .messageBubble );
131+ clearMouseListener (viewHolder .avatar );
132+ }
133+
134+ rightTextPosition = 0 ;
135+ rightImagePosition = 0 ;
136+ rightAttachmentPosition = 0 ;
137+
138+ leftTextPosition = 0 ;
139+ leftImagePosition = 0 ;
140+ leftAttachmentPosition = 0 ;
141+
142+ systemMessagePosition = 0 ;
143+ }
144+
145+ private void clearMouseListener (JComponent component )
146+ {
147+ for (MouseListener l : component .getMouseListeners ())
148+ {
149+ if (l instanceof MessageMouseListener )
150+ {
151+ component .removeMouseListener (l );
152+ }
153+ }
154+ }
61155}
0 commit comments