@@ -115,7 +115,7 @@ private void init() {
115115 initComponents ();
116116
117117 createLookAndFeelMenuItems ();
118- createCountryMenuItems ( );
118+ rebuildCountryMenuItems ( true );
119119
120120 createStockIndicatorEditor ();
121121 createIndicatorScannerJPanel ();
@@ -406,6 +406,7 @@ private void initComponents() {
406406 jMenuItem3 = new javax .swing .JMenuItem ();
407407 jMenuItem16 = new javax .swing .JMenuItem ();
408408 jMenuItem12 = new javax .swing .JMenuItem ();
409+ jMenuItem18 = new javax .swing .JMenuItem ();
409410 jSeparator6 = new javax .swing .JPopupMenu .Separator ();
410411 jMenuItem13 = new javax .swing .JMenuItem ();
411412 jMenuItem14 = new javax .swing .JMenuItem ();
@@ -738,6 +739,14 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
738739 }
739740 });
740741 jMenu2 .add (jMenuItem12 );
742+
743+ jMenuItem18 .setText (bundle .getString ("MainFrame_Export" )); // NOI18N
744+ jMenuItem18 .addActionListener (new java .awt .event .ActionListener () {
745+ public void actionPerformed (java .awt .event .ActionEvent evt ) {
746+ jMenuItem18ActionPerformed (evt );
747+ }
748+ });
749+ jMenu2 .add (jMenuItem18 );
741750 jMenu2 .add (jSeparator6 );
742751
743752 jMenuItem13 .setIcon (new javax .swing .ImageIcon (getClass ().getResource ("/images/16x16/smile2.png" ))); // NOI18N
@@ -1674,6 +1683,20 @@ private void jRadioButtonMenuItem6ActionPerformed(java.awt.event.ActionEvent evt
16741683 private void jMenu6MenuSelected (javax .swing .event .MenuEvent evt ) {//GEN-FIRST:event_jMenu6MenuSelected
16751684 initRecentCountryMenuItems ();
16761685 }//GEN-LAST:event_jMenu6MenuSelected
1686+
1687+ private void jMenuItem18ActionPerformed (java .awt .event .ActionEvent evt ) {//GEN-FIRST:event_jMenuItem18ActionPerformed
1688+ File file = Utils .promptSaveZippedJFileChooser ("jstock.zip" );
1689+
1690+ if (file == null ) {
1691+ return ;
1692+ }
1693+
1694+ file = SaveToCloudJDialog .getJStockZipFile (file .getAbsolutePath ());
1695+
1696+ if (file != null ) {
1697+ JOptionPane .showMessageDialog (null , MessagesBundle .getString ("info_message_export_successfully" ));
1698+ }
1699+ }//GEN-LAST:event_jMenuItem18ActionPerformed
16771700
16781701 /**
16791702 * Activate specified watchlist.
@@ -2166,7 +2189,13 @@ private void initRecentCountryMenuItems() {
21662189 buttonGroup4 = new ButtonGroup ();
21672190
21682191 int index = 0 ;
2192+
2193+ final Set <Country > countries = new HashSet <>(Utils .getSupportedStockMarketCountries ());
21692194 for (final Country country : jStockOptions .getRecentCountries ()) {
2195+ if (false == countries .contains (country )) {
2196+ continue ;
2197+ }
2198+
21702199 final JMenuItem mi = (JRadioButtonMenuItem ) jMenu6 .add (new JRadioButtonMenuItem (country .humanString , country .icon ), index ++);
21712200
21722201 buttonGroup4 .add (mi );
@@ -2187,9 +2216,15 @@ public void actionPerformed(ActionEvent e) {
21872216 }
21882217 }
21892218
2190- public void createCountryMenuItems () {
2191- final java .util .List <Country > countries = Utils .getSupportedStockMarketCountries ();
2219+ public void rebuildCountryMenuItems (boolean useCache ) {
2220+ final java .util .List <Country > countries = Utils .getSupportedStockMarketCountries (useCache );
2221+
2222+ jMenu6 .removeAll ();
21922223
2224+ for (Enumeration <AbstractButton > e = buttonGroup2 .getElements (); e .hasMoreElements ();) {
2225+ buttonGroup2 .remove (e .nextElement ());
2226+ }
2227+
21932228 Map <Continent , JMenu > menus = new EnumMap <>(Continent .class );
21942229 for (final Continent continent : Continent .values ()) {
21952230 JMenu jMenu = new JMenu (continent .name ());
@@ -2717,6 +2752,8 @@ public void reloadAfterDownloadFromCloud(JStockOptions newJStockOptions) {
27172752 Utils .updateFactoriesPriceSource ();
27182753
27192754 jStockOptions .setCountry (this .getBestCountryAfterDownloadFromCloud ());
2755+
2756+ rebuildCountryMenuItems (false );
27202757
27212758 /* These codes are very similar to clean up code during changing country.
27222759 */
@@ -5166,6 +5203,7 @@ public void refreshRealTimeIndexMonitor() {
51665203 private javax .swing .JMenuItem jMenuItem15 ;
51675204 private javax .swing .JMenuItem jMenuItem16 ;
51685205 private javax .swing .JMenuItem jMenuItem17 ;
5206+ private javax .swing .JMenuItem jMenuItem18 ;
51695207 private javax .swing .JMenuItem jMenuItem2 ;
51705208 private javax .swing .JMenuItem jMenuItem3 ;
51715209 private javax .swing .JMenuItem jMenuItem4 ;
0 commit comments