From a5b2b851c5d47a86e3ac5d994581fbfc6f4707a3 Mon Sep 17 00:00:00 2001 From: yanas Date: Wed, 15 May 2013 00:48:58 +0300 Subject: [PATCH] Improves videobridge interface to show participants with no video as thumbnails. Adds new security icons and improves conference color codes. --- lib/installer-exclude/libjitsi.jar | Bin 1370017 -> 1355069 bytes resources/colors/colors.properties | 6 +- resources/images/images.properties | 2 + .../images/impl/gui/buttons/secureOff.png | Bin 297 -> 1223 bytes .../impl/gui/buttons/secureOffConfCall.png | Bin 296 -> 1223 bytes .../images/impl/gui/buttons/secureOn.png | Bin 296 -> 1287 bytes .../images/impl/gui/buttons/securePending.png | Bin 0 -> 1293 bytes resources/images/impl/gui/buttons/tools.png | Bin 461 -> 908 bytes .../gui/common/conferenceVideoIndicator.png | Bin 0 -> 1895 bytes .../impl/gui/main/call/CallStatusPanel.java | 2 +- .../impl/gui/main/call/CallTitlePanel.java | 2 +- .../gui/main/call/OneToOneCallPeerPanel.java | 2 +- .../gui/main/call/SecurityStatusLabel.java | 71 +--------- .../conference/AudioConferenceCallPanel.java | 10 +- .../conference/BasicConferenceCallPanel.java | 5 +- .../BasicConferenceParticipantPanel.java | 121 +++++++++++++----- .../call/conference/ConferenceFocusPanel.java | 21 +++ .../ThumbnailConferenceCallPanel.java | 101 +++++++++++++++ .../conference/VideoConferenceCallPanel.java | 86 +++++++++++-- .../impl/gui/utils/ImageLoader.java | 44 +++++-- 20 files changed, 331 insertions(+), 142 deletions(-) mode change 100755 => 100644 lib/installer-exclude/libjitsi.jar create mode 100644 resources/images/impl/gui/buttons/securePending.png create mode 100644 resources/images/impl/gui/common/conferenceVideoIndicator.png create mode 100644 src/net/java/sip/communicator/impl/gui/main/call/conference/ThumbnailConferenceCallPanel.java diff --git a/lib/installer-exclude/libjitsi.jar b/lib/installer-exclude/libjitsi.jar old mode 100755 new mode 100644 index 65601299dc2392f603dfd1eef2d0e509314701e5..c49cccda9e874256a5455f6f5457a3e62ec867af GIT binary patch delta 63845 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�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⋙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 diff --git a/resources/images/impl/gui/buttons/secureOffConfCall.png b/resources/images/impl/gui/buttons/secureOffConfCall.png index 8478e47245b066d7cd836018635991111b3d3dd8..341af52279761242aa7401689d01078e567cfe67 100644 GIT binary patch literal 1223 zcmbVMO>Em#9CzE1p^+-#W75_!>B+qmvBaNo9IIK=#LgPAlq!u%kP50}zcg0s5A4^* z?ExiYuuW7j)C-e#KrnHd(6|nv!l;0uU643T<5G3prm6x21gU5|w@JsL+5yYS~36GUI#C|6LWcvjMEGp+_Yao=<>njnTpd`H#hAOcl5YglP=`-?Ra7m`<^{Pi%ReMB$WCzUoj+oTf}Oh-+8dLnZjgjRUp4@{$9o67=i^SHtzF4R*me zcaJv|C}MAVD#&RPe~IgcE{VxhR%UsHqgh%I8AhZb~7v)2Y8U@88J@_ zG{-%PTvi00%W?wE@F}u`)&Eb{DC`Usw8wwir7OZc7;N{OA0PI|2U>V$Ts#~<4wP9u zSbr4c(XxN9Is+m6>cT^gzT5X}7`)lHKGJHBMAt%_Co|9YOn#R+Kl)Uw9r=ksJH4O2 z_jZe>d#W{IYU(5~53f&U?)?4WukDSsaQNfQVmi7#_$@d(wAH)*XXehK)tPs0^tUP> z9DD2Tc=h4c>(|fL zZ=GniBZW}wpW8p&e0pr_@aCoOH&2Pr-RhwicRv4c_JS3Cwr{C<{59emMV!t=FFzpf z4e*hRYtc{I;lcYaPP;1`SKl3rTx$~3um6lAy2$_1dy~jCdx)1xuYS2oUJ-&{OF4nJNQiSKWDX)+l-&BNMrTc;B5cq@|p(SwuSOZ^F=2tkp5M6LE*ov+{w)v zZqsFZ0xJ`x5_`4tGQap%{8{0>Wci7O|MK>*sG9^Fc<{1DQo2iXK@i82m? n>e?|@SuC3op7HOV`cCG8(*~KhPJ7k>-OS+W>gTe~DWM4f3x{t6 diff --git a/resources/images/impl/gui/buttons/secureOn.png b/resources/images/impl/gui/buttons/secureOn.png index 8cae6a663c8e55c7ca3e1171cbcdbf632bdd320d..9d28e86c33a050d18dec3e72c1e6baa2746098e7 100644 GIT binary patch literal 1287 zcmbVMTWs4@7Fp z30zfzM87Xi#q(j9Q@h4Y*f-Xbl*a~TULo3_!rMv$BG8~E;U#TIF9@X|vB@i-y)7mQ zd{f053=&&TrQ*GK*f1gP^D-Wp0s!YYFJOHf2cE=f3eY5lZq5T(!N&=-AFo~nvSun7 zAt6Sqw$Ld^L&G;S zET}tp5M@CiN^um!+>Km}a4ZvII0~>lQN=3%Cu<~fhP2z`KkZTzp&qoi+s%&-+v5Xu zG&3d|4*jdMXi^=%nAn*t{ghT9gxKUw=7YaF9^XG5o|ru_{o}+&lWT7G>h3GnR*!3j_{IAdMbscqlM7!3$&((i-@xq@A%gb+7Jc}pN)ZdlUljqWhUS27e8@oF` z9m8+#S$gSP-}^62pPR3|=V(2FXPm3Q;=rA8y7BXSmiGU^nvWj5!&(lQ(+hXTKOebWS@vn;zJcbs`_xt^ zacN<_vHXNK{_*9r-Dljcfi(rY@(VlD{@gc@WtD&Ui5p+fUR|AdXP5HY11GQk{O+Cc zmM=`b@s;!QsiDq`GY_uS9Tx!GeFQXgz8TtJX)sgY(R^&*{Koa8C)fYjge{VegvYcoz{qW>C_YDTutOG&?2P7jH)E_YC1T)JWFul;{FjI1QSg4%yQ;k^ikjSij>%t{DEw+$ lZhhILRnz{Q`d#~o`^=x?_b(mwj|94z!PC{xWt~$(69AdknlM=6qRhNaFf+Y+vK4{(8d@$P_v z+Zf_ZF=pcUwDp5CF`A&!#C_1IamGcH8I3WT%oyV$8i?^jU5J_)CO!u(^8?ujFL(Dm z&;S0v-~at)dwU*jY-njf5Tr5H&1c~1h0hL;8@{g{ZmWaKE?daiefoesE}8)8lJz`5 zQ>r)!GC-6kp1KA)5yUm5WOH^deUOuMH6S`Vfr4s4G=g--3Wg{R0~^hQK}CyVZ6v^u(miQ{zR8}fG&w9qWGwaw+F9TrfeLI9EvO@!#TBC1Ixh$Jju^+# zbrpL!ifuTROZTD)-2`YTK>HFQG zP=`^>>!WrQgPv}Lpc?7)Cb4E!5(QI+7eoUm0|c(BPF(BSmYo52+}Kjv%1#&n&j3pw zH6>V&fjw0)%-!7$If~F5?vSa#qKG5BE{&={vr~K&gI@x&B6Dmw66dL)KobxNjuhXOEqtF}U0aK}T3cIPo>gv9_P&ZuvvtLZ>E;J+x{F`c-mGOx zCm(K}L${`6~UGR;W;;!FbUa0Y%LpVayQTiX5Wd;EVwTJvUcfu?1~osb4eNdE8Qr6 zd1!jX=f*z1e*e_e_V;(oi81E!mafyKne+E`r(L&7^`+VuS68;p-Rfv>;V$}Wjx5bQ zvGUQSa%|_%o;NSx`kpDi4D?4_fg&+q-@_4BjSwa7Oop3gPD{o~r- sXU}!_UvBU)a}s^e5A9v$;nRogp10#c!@?EnA( literal 0 HcmV?d00001 diff --git a/resources/images/impl/gui/buttons/tools.png b/resources/images/impl/gui/buttons/tools.png index d6c1b80af40f21e031b2466ea779e0c3e5cb9458..a5f5d8f291f20d8232bd223f5de36d1369a4f450 100644 GIT binary patch literal 908 zcmV;719SX|P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i*k@ z4lV=I+bE6z00Rt3L_t(2&ux=UNF!$ehM#Y~$xPBXS*ulIXi*ewS!;2n=CBY-!9q*x z$%}_ABBj_CuL?c%)he`R@9TO2t_DV;!hOKlEl?WmMs}w$AryfGV}GY z3zenM@r4)O!}AgZ0jH;@+(s!i7zDvDuIqlyD=aK505CT<_g`4A*WantYVk&+(dxSH zvgdiqah%5L>gtz;Lg9Vabw4kc%dY`UPfr6N04kNr2TG}*gCKB}QgtcieJLeD5a2kD zW142wFpQ4#^Yicf`ue^Dn3$MA2e56s%P@>yDJ7bwA*ICgJOC`qiq-4&nCrTv)9Fuv z-+}b}{QQgZ?Ck8;`1tsvmX?-YfOI-t-P+o^iN#`};o;%e6N!Z8c^>=w`xbByI21zE zWiFTN=;`VCCKL*NWEh6AySw{*a&q$V+S*!fV`Jmkw(VMfe}6m_3W<0;-jqtEnv==o z-sa}!6Yc8i>W5G$^lcCX(d+ALR#sN7E-o&zLWm9E*QKSUpAHWXPpZ`_ZEbBvGMW5P z)3h-lq?gNOVVWkUX`+A97Z=|K`sLBl(c@C7 z^j2$YYfmH+5td~|bX`9=J3CwVJg>68zW$k%@+-jH-rjyTGc%Jb7K9)Z z-*k0#g}b}E4JjpsLZO<;WGbDVoh_M6=2Sml+u5>>O#{rC4|t#E$5qo`@oxqVThrjp-(O^FW)^rK7Il` z1WsP+Tmp`PvUue*O;XAx-}eKc4;ThKUDy9?G#VM81}NY;(BS__rBb53z5R}9ns+r# idr#A}IJ{8#Hva-jn`g@T_}3T!00000009>0RmwEYybcN8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H10ZK_kK~xx(U6HX)!eAIh@BbHCnx+k?Z3BZTO|7BC1t!K$OuU27 z;9_EQF>!ElbT@9gIvW>WKoVBK#56GyX{Dqsw4W<@le?VU>0A&Iw(I-8Ua!~Ro6Y9) zHZK8y<2biPQNVTG>-l_s9t6ROuInkb!utKbF&qwOaU55w)#~?Ru{a&l|Mc?K43T z5XZ5;*=#DJDE@NWwjY8ZxB>vin7}#D0EC?L0svgsy_`%YgHn3&yF0I#VE{Y-n_y7Rb?RJkDWBXZ_)uz+weH2B9j4^1M7KLG`>AF7abUOBqL&Gp$ z0g&f;cfRkNmSsITj&nmq*csZk{b-uzsMqT`|Bv_sRZOg(Dws8k00000NkvXXu0mjf DSV6!x diff --git a/resources/images/impl/gui/common/conferenceVideoIndicator.png b/resources/images/impl/gui/common/conferenceVideoIndicator.png new file mode 100644 index 0000000000000000000000000000000000000000..b184d65aa00de70bc81502b544cc0bd6ec0f59f3 GIT binary patch literal 1895 zcmah~2~ZPP7*3@ihzA9#q@r#EEhvV~h9o3w0wpAn0HF|rP%m6I8wi^0x>-y>ZAXr_ zSX2;|!T@zR2CO1F7D~hmt5Q%$7{voCEtYDntrr4X54u4?JC*61-F?S=-}nFTKW1}d zqQj?5dT$bg!I+{{$kg=wuI+Vnpuf9jRPUfCCM8dx7UDX}jF1>3M2jb3fYN{@V`>c1 zrmt?p#0-YrExjgzN>D|?C~ojaY#4uwfuPw8hB(+lAm~br0+O&~y-~ut+kBJ-=(Q47 zJYU685usR$UXej!3p1iMXvRuZq-6yM0b&bG3m7m80W5}9MiXq2uts!YdTl!fS-=Q{ zS}9?@a4JC+1BBuv2Jrm@*eC~r0D-_C;_(FnXgP(Vo7zf`J&5HJVD>=pn9Y2VD4)SOomXHghj_cfX(64!Ph_#%nO7$LO)Ib z%;CI%s&K7dm;N6pM+8H3s<{7x(#h8%6!O1dEeh*!(tywz(A(-2B#g-;)>JB3X*5xY z5yg};35&j*zh19}`MiKYA&(a*<#Oc^BJ-%VgY;gE;H&iueojah8f4R8!$gm)@g`7`_pj7&*uzA z>-H|^b7tYq1?NmX{pI~f!WA{=eRa#0E%VuB4QrALLp$6iWP@+}^zsp_NBpC>Z71?B zOxDE3O=)Ostgu>{U0q$ZwYA3v2L+4blsjl|UWe2>`iAb116T4+oeJv+$#m12%`;k7 zxXj)%(b?JAF-Pk8gHQIyN7qL`IB}bcZ`)2BJTY^i&SR*CVaIs7SiMxZTqv>q`jql$ K*SecurityStatusLabel by specifying the @@ -82,48 +60,12 @@ public SecurityStatusLabel() setHorizontalTextPosition(JLabel.LEFT); } - /** - * Paints a custom background to better indicate security state. - * - * @param g the Graphics object - */ - public void paintComponent(Graphics g) - { - g = g.create(); - - try - { - AntialiasingManager.activateAntialiasing(g); - g.setColor(getBackground()); - - if (getIcon() != null) - { - if (isSecure) - g.fillRoundRect( - 0, 0, this.getWidth(), this.getHeight(), 20, 20); - else - g.fillRoundRect( - 0, 0, this.getWidth(), this.getHeight(), 20, 20); - } - - g.setColor(getForeground()); - - super.paintComponent(g); - } - finally - { - g.dispose(); - } - } - /** * Sets the audio security on or off. */ public void setSecurityOn() { - isSecure = true; setIcon(securityOnIcon); - setBackground(securityOnBackground); setToolTipText(GuiActivator.getResources().getI18NString( "service.gui.security.CALL_SECURED_TOOLTIP")); } @@ -133,9 +75,7 @@ public void setSecurityOn() */ public void setSecurityOff() { - isSecure = false; setIcon(securityOffIcon); - setBackground(securityOffBackground); this.setToolTipText(GuiActivator.getResources().getI18NString( "service.gui.security.CALL_NOT_SECURED_TOOLTIP")); } @@ -145,9 +85,7 @@ public void setSecurityOff() */ public void setSecurityPending() { - isSecure = false; - setIcon(securityOnIcon); - setBackground(goingSecureBackground); + setIcon(securityPendingIcon); this.setToolTipText(GuiActivator.getResources().getI18NString( "service.gui.security.CALL_SECURED_COMPARE_TOOLTIP")); } @@ -173,5 +111,8 @@ public void loadSkin() securityOnIcon = new ImageIcon(ImageLoader .getImage(ImageLoader.SECURE_BUTTON_ON)); + + securityPendingIcon = new ImageIcon(ImageLoader + .getImage(ImageLoader.SECURE_BUTTON_PENDING)); } } diff --git a/src/net/java/sip/communicator/impl/gui/main/call/conference/AudioConferenceCallPanel.java b/src/net/java/sip/communicator/impl/gui/main/call/conference/AudioConferenceCallPanel.java index 04e9c9cde..8148ada7e 100644 --- a/src/net/java/sip/communicator/impl/gui/main/call/conference/AudioConferenceCallPanel.java +++ b/src/net/java/sip/communicator/impl/gui/main/call/conference/AudioConferenceCallPanel.java @@ -115,15 +115,7 @@ public AudioConferenceCallPanel( * because the video may already be flowing between the CallPeers. * Otherwise, the videos of the remote CallPeers will not be shown. */ - GridBagConstraints scrollPaneGridBagConstraints - = new GridBagConstraints(); - - scrollPaneGridBagConstraints.fill = GridBagConstraints.BOTH; - scrollPaneGridBagConstraints.gridx = 1; - scrollPaneGridBagConstraints.gridy = 0; - scrollPaneGridBagConstraints.weightx = 1; - scrollPaneGridBagConstraints.weighty = 1; - add(scrollPane, scrollPaneGridBagConstraints); + add(scrollPane, BorderLayout.CENTER); constraints = new GridBagConstraints(); constraints.fill = GridBagConstraints.BOTH; diff --git a/src/net/java/sip/communicator/impl/gui/main/call/conference/BasicConferenceCallPanel.java b/src/net/java/sip/communicator/impl/gui/main/call/conference/BasicConferenceCallPanel.java index e729d7310..24ce74720 100644 --- a/src/net/java/sip/communicator/impl/gui/main/call/conference/BasicConferenceCallPanel.java +++ b/src/net/java/sip/communicator/impl/gui/main/call/conference/BasicConferenceCallPanel.java @@ -13,7 +13,6 @@ import javax.swing.*; import net.java.sip.communicator.impl.gui.main.call.*; -import net.java.sip.communicator.plugin.desktoputil.*; import net.java.sip.communicator.service.protocol.*; import net.java.sip.communicator.service.protocol.event.*; @@ -24,7 +23,7 @@ * @author Lyubomir Marinov */ public abstract class BasicConferenceCallPanel - extends TransparentPanel + extends JPanel implements SwingCallRenderer { /** @@ -101,7 +100,7 @@ protected BasicConferenceCallPanel( CallPanel callPanel, CallConference callConference) { - super(new GridBagLayout()); + super(new BorderLayout()); this.callPanel = callPanel; this.callConference = callConference; diff --git a/src/net/java/sip/communicator/impl/gui/main/call/conference/BasicConferenceParticipantPanel.java b/src/net/java/sip/communicator/impl/gui/main/call/conference/BasicConferenceParticipantPanel.java index 9b5de87a5..65f4ff0ab 100644 --- a/src/net/java/sip/communicator/impl/gui/main/call/conference/BasicConferenceParticipantPanel.java +++ b/src/net/java/sip/communicator/impl/gui/main/call/conference/BasicConferenceParticipantPanel.java @@ -46,7 +46,7 @@ public abstract class BasicConferenceParticipantPanel /** * Background color. */ - private static final Color bgColor = new Color(255, 255, 255); + private static final Color bgColor = new Color(110, 110, 110); /** * Serial version UID. @@ -139,6 +139,7 @@ public abstract class BasicConferenceParticipantPanel */ private SoundLevelIndicator soundIndicator; + /** * The status bar of the participant panel. */ @@ -156,6 +157,16 @@ public abstract class BasicConferenceParticipantPanel */ private final JPanel titleBar = new CallTitlePanel(new GridBagLayout()); + /** + * Indicates if video indicator is enabled for this participant. + */ + private boolean isVideoIndicatorEnabled = false; + + /** + * The image of the participant + */ + private Image participantImage; + /** * Initializes a new BasicConferenceParticipantPanel instance which * is to depict a specific conference participant. @@ -198,6 +209,8 @@ public void addToNameBar(Component component) { nameBarConstraints.gridx = nameBarConstraints.gridx + 1; nameBarConstraints.weightx = 0f; + nameBarConstraints.insets = new Insets(0, 5, 0, 0); + this.nameBar.add(component, nameBarConstraints); } @@ -266,11 +279,13 @@ private void initAudioConferencePanel() SoundLevelChangeEvent.MIN_LEVEL, SoundLevelChangeEvent.MAX_LEVEL); + soundIndicator.setPreferredSize(new Dimension(80, 30)); + securityStatusLabel = new SecurityStatusLabel(); securityStatusLabel.setSecurityOff(); this.setLayout(new GridBagLayout()); - this.setBorder(BorderFactory.createEmptyBorder(7, 7, 7, 7)); + this.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); this.initTitleBar(); @@ -298,26 +313,17 @@ private void initAudioConferencePanel() */ private void initPeerDetailsPanel() { - ImageIcon avatarIcon - = new ImageIcon( - ImageLoader - .getImage(ImageLoader.DEFAULT_USER_PHOTO) - .getScaledInstance( - AVATAR_WIDTH, - AVATAR_HEIGHT, - Image.SCALE_SMOOTH)); - peerDetailsPanel.setLayout(new GridBagLayout()); peerDetailsPanel.setBackground(new Color(255, 255, 255)); - imageLabel.setIcon(avatarIcon); + setParticipantIcon(null, false); constraints.fill = GridBagConstraints.NONE; constraints.gridx = 0; constraints.gridy = 0; constraints.weightx = 0; constraints.weighty = 0; - constraints.insets = new Insets(5, 10, 5, 0); + constraints.insets = new Insets(5, 8, 5, 0); peerDetailsPanel.add(imageLabel, constraints); @@ -326,7 +332,7 @@ private void initPeerDetailsPanel() constraints.gridy = 0; constraints.weightx = 1f; constraints.weighty = 0; - constraints.insets = new Insets(5, 20, 5, 20); + constraints.insets = new Insets(5, 10, 5, 10); rightDetailsPanel.add(soundIndicator); peerDetailsPanel.add(rightDetailsPanel, constraints); @@ -339,6 +345,7 @@ private void initTitleBar() { titleBar.setBorder(BorderFactory.createEmptyBorder(2, 8, 2, 8)); + nameLabel.setForeground(Color.WHITE); nameBar.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); nameBarConstraints.gridx = 0; nameBarConstraints.gridy = 0; @@ -346,6 +353,7 @@ private void initTitleBar() nameBar.add(nameLabel, nameBarConstraints); statusBar.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); + callStatusLabel.setForeground(Color.WHITE); statusBarConstraints.gridx = 0; statusBarConstraints.gridy = 0; statusBarConstraints.weightx = 1f; @@ -398,15 +406,7 @@ public void loadSkin() { if(!iconChanged) { - ImageIcon avatarIcon - = new ImageIcon( - ImageLoader.getImage(ImageLoader.DEFAULT_USER_PHOTO) - .getScaledInstance( - AVATAR_WIDTH, - AVATAR_HEIGHT, - Image.SCALE_SMOOTH)); - - imageLabel.setIcon(avatarIcon); + setParticipantIcon(null, false); } securityStatusLabel.setIcon( @@ -435,7 +435,7 @@ public void paintComponent(Graphics g) g.setColor(bgColor); g.fillRoundRect( - 5, 5, this.getWidth() - 10, this.getHeight() - 10, 20, 20); + 5, 5, this.getWidth() - 10, this.getHeight() - 10, 10, 10); } finally { @@ -555,15 +555,7 @@ public void run() */ public void setParticipantImage(byte[] image) { - ImageIcon icon = ImageUtils.getScaledRoundedIcon(image, - AVATAR_WIDTH, - AVATAR_HEIGHT); - - if (icon != null) - { - iconChanged = true; - imageLabel.setIcon(icon); - } + setParticipantIcon(image, true); } /** @@ -614,4 +606,67 @@ public void updateSoundBar(int soundLevel) if (soundIndicator != null) soundIndicator.updateSoundLevel(soundLevel); } + + /** + * Enables or disabled video indicator in this conference participant + * panel. + * + * @param enable true to enable video indicator, false - + * otherwise + */ + public void enableVideoIndicator(boolean enable) + { + isVideoIndicatorEnabled = enable; + + setParticipantIcon(null, true); + } + + /** + * Sets the participant icon. + * + * @param image the image to set as an icon. If null will use the last set + * image or the default one + * @param changed indicates if this is a change of the icon + */ + private void setParticipantIcon(byte[] image, boolean changed) + { + if (image != null && image.length > 0) + participantImage + = ImageUtils.getScaledRoundedIcon( image, + AVATAR_WIDTH, + AVATAR_HEIGHT).getImage(); + else if (participantImage == null) + participantImage + = ImageLoader.getImage(ImageLoader.DEFAULT_USER_PHOTO) + .getScaledInstance( + AVATAR_WIDTH, + AVATAR_HEIGHT, + Image.SCALE_SMOOTH); + + Image videoIndicatorImage = null; + + if (isVideoIndicatorEnabled) + videoIndicatorImage + = ImageLoader.getImage(ImageLoader.CONFERENCE_VIDEO_INDICATOR); + + Icon avatarIcon = null; + if (videoIndicatorImage != null && participantImage != null) + avatarIcon = new ImageIcon(ImageLoader.getImage( + participantImage, + videoIndicatorImage, + participantImage.getWidth(null) + - videoIndicatorImage.getWidth(null) + 5, + participantImage.getHeight(null) + - videoIndicatorImage.getHeight(null) + 5)); + else if (participantImage != null) + avatarIcon = new ImageIcon(participantImage); + + if (avatarIcon != null) + { + imageLabel.setIcon(avatarIcon); + + if (changed) + iconChanged = true; + } + } } diff --git a/src/net/java/sip/communicator/impl/gui/main/call/conference/ConferenceFocusPanel.java b/src/net/java/sip/communicator/impl/gui/main/call/conference/ConferenceFocusPanel.java index 6925b4bdd..d4c568c4d 100644 --- a/src/net/java/sip/communicator/impl/gui/main/call/conference/ConferenceFocusPanel.java +++ b/src/net/java/sip/communicator/impl/gui/main/call/conference/ConferenceFocusPanel.java @@ -556,6 +556,27 @@ public void setSecurityPanelVisible(boolean visible) { } + /** + * Enables or disabled video indicator in this conference participant + * panel. + * + * @param confMember the ConferenceMember, which video indicator + * we'd like to update + * @param enable true to enable video indicator, false - + * otherwise + */ + public void enableVideoIndicator( ConferenceMember confMember, + boolean enable) + { + if (!conferenceMemberPanels.containsKey(confMember)) + return; + + ConferenceMemberPanel confMemberPanel + = conferenceMemberPanels.get(confMember); + + confMemberPanel.enableVideoIndicator(enable); + } + /** * Implements the listeners which get notified about events related to the * CallPeer depicted by this ConferenceFocusPanel and diff --git a/src/net/java/sip/communicator/impl/gui/main/call/conference/ThumbnailConferenceCallPanel.java b/src/net/java/sip/communicator/impl/gui/main/call/conference/ThumbnailConferenceCallPanel.java new file mode 100644 index 000000000..43a8f4963 --- /dev/null +++ b/src/net/java/sip/communicator/impl/gui/main/call/conference/ThumbnailConferenceCallPanel.java @@ -0,0 +1,101 @@ +/* + * Jitsi, the OpenSource Java VoIP and Instant Messaging client. + * + * Distributable under LGPL license. + * See terms of license at gnu.org. + */ +package net.java.sip.communicator.impl.gui.main.call.conference; + +import java.awt.*; + +import net.java.sip.communicator.impl.gui.main.call.*; +import net.java.sip.communicator.service.gui.call.*; +import net.java.sip.communicator.service.protocol.*; + +/** + * The ThumbnailConferenceCallPanel is the panel containing all video + * conference participants as thumbnails. + * + * @author Yana Stamcheva + */ +public class ThumbnailConferenceCallPanel + extends AudioConferenceCallPanel +{ + /** + * Initializes a new ThumbnailConferenceCallPanel instance which is + * to be used by a specific CallPanel to depict a specific + * CallConference. The new instance will depict both the + * audio-related and the video-related information. + * + * @param callPanel the CallPanel which will use the new instance + * to depict the specified CallConference. + * @param callConference the CallConference to be depicted by the + * new instance + * @param uiVideoHandler the utility which is to aid the new instance in + * dealing with the video-related information + */ + public ThumbnailConferenceCallPanel(CallPanel callPanel, + CallConference callConference, + UIVideoHandler2 uiVideoHandler) + { + super(callPanel, callConference); + + setBackground(Color.DARK_GRAY); + } + + /** + * Updates the thumbnail of the given callPeer. + * + * @param callPeer the CallPeer, which thumbnail + * to update + * @param isVideo indicates if the video is enabled for the + * callPeer + */ + public void updateThumbnail(CallPeer callPeer, boolean isVideo) + { + CallPeerRenderer peerRenderer = getCallPeerRenderer(callPeer); + + if (peerRenderer instanceof ConferencePeerPanel) + { + ((ConferencePeerPanel) peerRenderer) + .enableVideoIndicator(isVideo); + } + } + + /** + * Updates the thumbnail of the given conferenceMember. + * + * @param conferenceMember the ConferenceMember, which thumbnail + * to update + * @param isVideo indicates if the video is enabled for the conference + * member + */ + public void updateThumbnail(ConferenceMember conferenceMember, + boolean isVideo) + { + CallPeerRenderer focusRenderer + = getCallPeerRenderer(conferenceMember.getConferenceFocusCallPeer()); + + if (focusRenderer instanceof ConferenceFocusPanel) + { + ((ConferenceFocusPanel) focusRenderer) + .enableVideoIndicator(conferenceMember, isVideo); + } + } + + /** + * Updates the local user thumbnail. + * + * @param isVideo indicates if the video is enabled for the local user + */ + public void updateThumbnail(boolean isVideo) + { + CallPeerRenderer peerRenderer = getCallPeerRenderer(null); + + if (peerRenderer instanceof ConferencePeerPanel) + { + ((ConferencePeerPanel) peerRenderer) + .enableVideoIndicator(isVideo); + } + } +} diff --git a/src/net/java/sip/communicator/impl/gui/main/call/conference/VideoConferenceCallPanel.java b/src/net/java/sip/communicator/impl/gui/main/call/conference/VideoConferenceCallPanel.java index 82c1751af..4ad3fb2c8 100644 --- a/src/net/java/sip/communicator/impl/gui/main/call/conference/VideoConferenceCallPanel.java +++ b/src/net/java/sip/communicator/impl/gui/main/call/conference/VideoConferenceCallPanel.java @@ -80,6 +80,11 @@ public void update(Observable o, Object arg) */ private final Set videos = new HashSet(); + /** + * The thumbnail container. + */ + private final ThumbnailConferenceCallPanel thumbnailContainer; + /** * Initializes a new VideoConferenceCallPanel instance which is to * be used by a specific CallPanel to depict a specific @@ -102,6 +107,11 @@ public VideoConferenceCallPanel( this.uiVideoHandler = uiVideoHandler; + thumbnailContainer + = new ThumbnailConferenceCallPanel( callPanel, + callConference, + uiVideoHandler); + videoContainer = createVideoContainer(); /* @@ -249,15 +259,13 @@ public void paintComponent(Graphics g) private VideoContainer createVideoContainer() { VideoContainer videoContainer = new VideoContainer(null, true); - GridBagConstraints videoContainerGridBagConstraints - = new GridBagConstraints(); - videoContainerGridBagConstraints.fill = GridBagConstraints.BOTH; - videoContainerGridBagConstraints.gridx = 0; - videoContainerGridBagConstraints.gridy = 0; - videoContainerGridBagConstraints.weightx = 1; - videoContainerGridBagConstraints.weighty = 1; - add(videoContainer, videoContainerGridBagConstraints); + JPanel thumbnailPanel = new JPanel(new BorderLayout()); + thumbnailPanel.setBackground(Color.DARK_GRAY); + thumbnailPanel.add(thumbnailContainer, BorderLayout.NORTH); + + add(thumbnailPanel, BorderLayout.EAST); + add(videoContainer, BorderLayout.CENTER); return videoContainer; } @@ -929,6 +937,24 @@ private class ConferenceParticipantContainer */ private final VideoContainer videoContainer; + /** + * The CallPeer associated with this container, if it has been + * created to represent a CallPeer. + */ + private CallPeer callPeer; + + /** + * The conferenceMember associated with this container, if it + * has been created to represent a conferenceMember. + */ + private ConferenceMember conferenceMember; + + /** + * Indicates that this container contains information for the local + * user. + */ + private boolean isLocalUser; + /** * Initializes a new ConferenceParticipantContainer instance * which is to depict the local peer/user. @@ -946,29 +972,37 @@ public ConferenceParticipantContainer(Call call, Component video) new ConferencePeerPanel( VideoConferenceCallPanel.this, call, - true)); + true), + null, null, true); } public ConferenceParticipantContainer( CallPeer callPeer, Component video) { - this( - createDefaultPhotoPanel(callPeer), + this( createDefaultPhotoPanel(callPeer), video, new ConferencePeerPanel( VideoConferenceCallPanel.this, callPeer, - true)); + true), + callPeer, null, false); } private ConferenceParticipantContainer( Component noVideo, Component video, - BasicConferenceParticipantPanel toolBar) + BasicConferenceParticipantPanel toolBar, + CallPeer callPeer, + ConferenceMember conferenceMember, + boolean isLocalUser) { super(new BorderLayout()); + this.callPeer = callPeer; + this.conferenceMember = conferenceMember; + this.isLocalUser = isLocalUser; + videoContainer = new VideoContainer(noVideo, false); add(videoContainer, BorderLayout.CENTER); @@ -977,7 +1011,11 @@ private ConferenceParticipantContainer( add(this.toolBar, BorderLayout.SOUTH); if (video != null) + { setVideo(video); + } + else + setVisible(false); } public ConferenceParticipantContainer( @@ -990,7 +1028,8 @@ public ConferenceParticipantContainer( new ConferenceMemberPanel( VideoConferenceCallPanel.this, conferenceMember, - true)); + true), + null, conferenceMember, false); } public void dispose() @@ -1319,7 +1358,26 @@ void setVideo(Component video) this.video = video; if (this.video != null) + { + setVisible(true); videoContainer.add(this.video, VideoLayout.CENTER_REMOTE); + } + else + setVisible(false); + + // Update thumbnails container according to video status. + if (thumbnailContainer != null) + { + if (conferenceMember != null) + thumbnailContainer + .updateThumbnail(conferenceMember, (video != null)); + else if (callPeer != null) + thumbnailContainer + .updateThumbnail(callPeer, (video != null)); + else if (isLocalUser) + thumbnailContainer + .updateThumbnail((video != null)); + } } } } diff --git a/src/net/java/sip/communicator/impl/gui/utils/ImageLoader.java b/src/net/java/sip/communicator/impl/gui/utils/ImageLoader.java index 87959525e..968da6027 100644 --- a/src/net/java/sip/communicator/impl/gui/utils/ImageLoader.java +++ b/src/net/java/sip/communicator/impl/gui/utils/ImageLoader.java @@ -757,32 +757,38 @@ public class ImageLoader /** * A call-transfer button icon. The icon shown in the CallPeer panel. */ - public static final ImageID TRANSFER_CALL_BUTTON = - new ImageID("service.gui.buttons.TRANSFER_CALL_BUTTON"); + public static final ImageID TRANSFER_CALL_BUTTON + = new ImageID("service.gui.buttons.TRANSFER_CALL_BUTTON"); /** * The secure button on icon. The icon shown in the CallPeer panel. */ - public static final ImageID SECURE_BUTTON_ON = - new ImageID("service.gui.buttons.SECURE_BUTTON_ON"); + public static final ImageID SECURE_BUTTON_ON + = new ImageID("service.gui.buttons.SECURE_BUTTON_ON"); /** * The secure button off icon. The icon shown in the CallPeer panel. */ - public static final ImageID SECURE_BUTTON_OFF = - new ImageID("service.gui.buttons.SECURE_BUTTON_OFF"); + public static final ImageID SECURE_BUTTON_OFF + = new ImageID("service.gui.buttons.SECURE_BUTTON_OFF"); + + /** + * The secure button pending icon. + */ + public static final ImageID SECURE_BUTTON_PENDING + = new ImageID("service.gui.buttons.SECURE_BUTTON_PENDING"); /** * The conference secure button off icon. */ - public static final ImageID SECURE_OFF_CONF_CALL = - new ImageID("service.gui.buttons.SECURE_OFF_CONF_CALL"); + public static final ImageID SECURE_OFF_CONF_CALL + = new ImageID("service.gui.buttons.SECURE_OFF_CONF_CALL"); /** * The secure button on icon. The icon shown in the CallPeer panel. */ - public static final ImageID SECURE_AUDIO_ON = - new ImageID("service.gui.buttons.SECURE_AUDIO_ON"); + public static final ImageID SECURE_AUDIO_ON + = new ImageID("service.gui.buttons.SECURE_AUDIO_ON"); /** * The secure button off icon. The icon shown in the CallPeer panel. @@ -1031,6 +1037,12 @@ public class ImageLoader public static final ImageID DIAL_PAD_CALL_BUTTON_BG = new ImageID("service.gui.buttons.DIAL_PAD_CALL_BUTTON_BG"); + /** + * The conference video indicator. + */ + public static final ImageID CONFERENCE_VIDEO_INDICATOR + = new ImageID("service.gui.icons.CONFERENCE_VIDEO_INDICATOR"); + /* * ======================================================================= * ------------------------ EDIT TOOLBAR ICONS --------------------------- @@ -1512,9 +1524,17 @@ public static Image getIndexedProtocolImage( */ public static Image getImage(Image bgImage, Image topImage, int x, int y) { + int width = (x + topImage.getWidth(null) > bgImage.getWidth(null)) + ? x + topImage.getWidth(null) + : bgImage.getWidth(null); + + int height = (y + topImage.getHeight(null) > bgImage.getHeight(null)) + ? y + topImage.getHeight(null) + : bgImage.getHeight(null); + BufferedImage buffImage - = new BufferedImage(bgImage.getWidth(null), - bgImage.getHeight(null), + = new BufferedImage(width, + height, BufferedImage.TYPE_INT_ARGB); Graphics2D g = (Graphics2D) buffImage.getGraphics();