X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fcom%2Franfa%2Fmain%2FDelesteRandomSelector.java;h=e9abfbffed26b7367e6569da246ba6f0592a5e03;hb=46fe9a4d3b03551102e4eb623ceb79c65b42fbdb;hp=f2eb248f2c898b6e7e5a1815cdc1312da96e452b;hpb=eced55a43dbe9d52f13b1090d5afa3d883ed012a;p=delesterandomselector%2FDelesteRandomSelector.git diff --git a/src/com/ranfa/main/DelesteRandomSelector.java b/src/com/ranfa/main/DelesteRandomSelector.java index f2eb248..e9abfbf 100644 --- a/src/com/ranfa/main/DelesteRandomSelector.java +++ b/src/com/ranfa/main/DelesteRandomSelector.java @@ -30,6 +30,7 @@ import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; +import javax.swing.JProgressBar; import javax.swing.JScrollPane; import javax.swing.JSpinner; import javax.swing.JTabbedPane; @@ -45,18 +46,20 @@ import com.jgoodies.forms.layout.FormSpecs; import com.jgoodies.forms.layout.RowSpec; import com.ranfa.lib.CheckVersion; import com.ranfa.lib.Easter; -import com.ranfa.lib.EstimateAlbumTypeCycle; import com.ranfa.lib.ManualUpdateThreadImpl; -import com.ranfa.lib.Scraping; import com.ranfa.lib.SettingJSONProperty; import com.ranfa.lib.Settings; -import com.ranfa.lib.Song; +import com.ranfa.lib.Suffix; import com.ranfa.lib.TwitterIntegration; import com.ranfa.lib.Version; import com.ranfa.lib.concurrent.CountedThreadFactory; +import com.ranfa.lib.database.EstimateAlbumTypeCycle; +import com.ranfa.lib.database.Scraping; +import com.ranfa.lib.database.Song; +import com.ranfa.lib.handler.CrashHandler; import com.ranfa.lib.songinfo.FetchFromAPI; -@Version(major = 3, minor = 1, patch = 0) +@Version(major = 4, minor = 0, patch = 1, suffix = Suffix.BETA) public class DelesteRandomSelector extends JFrame { private static ArrayList selectedSongsList = new ArrayList<>(); @@ -99,12 +102,12 @@ public class DelesteRandomSelector extends JFrame { private JScrollPane scrollPane; private JTextArea textArea; private JTabbedPane tabbedPane; - private JPanel panelTool; + private JPanel panelInfo; private JPanel panelNorthTool; private JLabel labelSubToolTitle; private JLabel labelVersionTool; private JPanel panelCenterTool; - private JLabel lblNewLabel; + private JLabel labelInfoPlaySongs; private JLabel labelSongNameToolTitle; private JLabel labelSongNameToolTip; private JLabel labelAttributeToolTitle; @@ -151,6 +154,14 @@ public class DelesteRandomSelector extends JFrame { this.btnImport.setEnabled(true); this.btnImport.setText(Messages.MSGNarrowingDownSongs.toString()); }; + private JLabel labelToolProgress; + public static JProgressBar progressTool; + public static JLabel labelInfoProgressSongName; + private JPanel panelScore; + private JPanel panelScoreNorth; + private JPanel panelScoreCenter; + private JLabel labelScoreTitle; + private JLabel labelScoreVersion; /** * Launch the application. @@ -176,8 +187,23 @@ public class DelesteRandomSelector extends JFrame { * Create the frame. */ public DelesteRandomSelector() { - ExecutorService es = Executors.newCachedThreadPool(new CountedThreadFactory(() -> "DRS", "AsyncEventInquerier")); + ExecutorService es = Executors.newCachedThreadPool(new CountedThreadFactory(() -> "DRS", "AsyncEventInquerier", false)); this.contentPane = new JPanel(); + // output system info phase + CompletableFuture.runAsync(() -> { + CrashHandler handle = new CrashHandler(); + handle.outSystemInfo(); + }, es).whenCompleteAsync((ret, ex) -> { + if(ex != null) { + logger.error("Exception was thrown during concurrent process", ex); + CrashHandler handle = new CrashHandler(ex); + if(ex instanceof NullPointerException) { + handle.execute(); + } + handle = new CrashHandler(new IllegalStateException(ex)); + handle.execute(); + } + }, es); boolean isFirst = !Scraping.databaseExists(); // database check phase CompletableFuture.runAsync(() -> { @@ -191,10 +217,12 @@ public class DelesteRandomSelector extends JFrame { }, es).whenCompleteAsync((ret, ex) -> { if(ex != null) { logger.error("Exception was thrown during concurrent process", ex); + CrashHandler handle = new CrashHandler(ex); if(ex instanceof NullPointerException) { - throw new RuntimeException(ex); + handle.execute(); } - throw new IllegalStateException(ex); + handle = new CrashHandler(new IllegalStateException(ex)); + handle.execute(); } }, es); CompletableFuture> getFromJsonFuture = CompletableFuture.supplyAsync(() -> Scraping.getFromJson(), es); @@ -202,16 +230,19 @@ public class DelesteRandomSelector extends JFrame { // setting check phase CompletableFuture.runAsync(() -> { if(!Settings.fileExists() && !Settings.writeDownJSON()) { - JOptionPane.showMessageDialog(this, "Exception:NullPointerException\nCannot Keep up! Please re-download this Application!"); - throw new NullPointerException("FATAL: cannot continue!"); + JOptionPane.showMessageDialog(this, "Exception:NullPointerException\nPlease see crash report for more detail."); + CrashHandler handle = new CrashHandler("Failed to generate setting file.", new NullPointerException("FATAL: cannot continue!")); + handle.execute(); } }, es).whenCompleteAsync((ret, ex) -> { if(ex != null) { logger.error("Exception was thrown during concurrent process", ex); + CrashHandler handle = new CrashHandler(ex); if(ex instanceof NullPointerException) { - throw new RuntimeException(ex); + handle.execute(); } - throw new IllegalStateException(ex); + handle = new CrashHandler(new IllegalStateException(ex)); + handle.execute(); } this.logger.debug("Loading settings..."); this.property.setCheckLibraryUpdates(Settings.needToCheckLibraryUpdates()); @@ -227,6 +258,7 @@ public class DelesteRandomSelector extends JFrame { this.logger.debug("Window Height: {}", this.property.getWindowHeight()); this.logger.debug("Song Limit: {}", this.property.getSongLimit()); this.logger.debug("SaveScoreLog: {}", this.property.isSaveScoreLog()); + this.setBounds(100, 100, this.property.getWindowWidth(), this.property.getWindowHeight()); if(this.property.isCheckVersion()) { this.softwareUpdateFuture = CompletableFuture.runAsync(() -> CheckVersion.needToBeUpdated(), es); } @@ -243,7 +275,8 @@ public class DelesteRandomSelector extends JFrame { }, es).whenCompleteAsync((ret, ex) -> { if(ex != null) { logger.error("Exception was thrown during concurrent process", ex); - throw new IllegalStateException(ex); + CrashHandler handle = new CrashHandler(new IllegalStateException(ex)); + handle.execute(); } }, es); getWholeDataFuture.thenAcceptAsync(list -> this.logger.info("Scraping data size:" + list.size()), es); @@ -255,8 +288,7 @@ public class DelesteRandomSelector extends JFrame { }, es); this.logger.debug("Version: {}", CheckVersion.getVersion()); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - // this.setBounds(100, 100, this.property.getWindowWidth(), this.property.getWindowHeight()); - this.setBounds(100, 100, 960, 540); + // this.setBounds(100, 100, 960, 643); this.contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); this.setContentPane(this.contentPane); contentPane.setLayout(new CardLayout(0, 0)); @@ -378,7 +410,8 @@ public class DelesteRandomSelector extends JFrame { }, es).whenCompleteAsync((ret, ex) -> { if(ex != null) { logger.error("Exception was thrown during concurrent process", ex); - throw new IllegalStateException(ex); + CrashHandler handle = new CrashHandler(new IllegalStateException(ex)); + handle.execute(); } }, es); }); @@ -393,14 +426,17 @@ public class DelesteRandomSelector extends JFrame { try { builder.start(); } catch (IOException e1) { - logger.error("Cannot start external jar file. maybe are you running this with mac or linux?", e); + logger.error("Exception was thrown during concurrent process", e1); + CrashHandler handle = new CrashHandler(new IllegalStateException(e1)); + handle.execute(); } - }).whenCompleteAsync((ret, ex) -> { + }, es).whenCompleteAsync((ret, ex) -> { if(ex != null) { logger.error("Exception was thrown during concurrent process", ex); - throw new RuntimeException(ex); + CrashHandler handle = new CrashHandler(new IllegalStateException(ex)); + handle.execute(); } - }); + }, es); }); panelEastMain.add(btnConfig, "2, 6, fill, fill"); @@ -437,6 +473,7 @@ public class DelesteRandomSelector extends JFrame { DelesteRandomSelector.this.integratorBool = true; DelesteRandomSelector.this.logger.info("show up completed."); labelCurrentSongOrderTool.setText("null"); + progressTool.setValue(0); listToolMapDataFuture = CompletableFuture.supplyAsync(() -> { List data = toolIntegrateList.stream() .map(s -> s.getName()) @@ -448,6 +485,8 @@ public class DelesteRandomSelector extends JFrame { }, es).whenCompleteAsync((ret, ex) -> { if(ex != null) { logger.error("Exception was thrown during concurrent process", ex); + CrashHandler handle = new CrashHandler(new IllegalStateException(ex)); + handle.execute(); } }, es); }); @@ -459,7 +498,9 @@ public class DelesteRandomSelector extends JFrame { impl = new ManualUpdateThreadImpl(); CompletableFuture.runAsync(impl, es).whenCompleteAsync((t, u) -> { if(u != null) { - logger.warn("Exception while processing update manually.", e); + logger.warn("Exception while processing update manually.", u); + CrashHandler handle = new CrashHandler(new IllegalStateException(u)); + handle.execute(); JOptionPane.showMessageDialog(null, "There was a problem during processing library update manually.\nIf this appears repeatedly, please contact developer with your app log."); } }, es); @@ -515,7 +556,9 @@ public class DelesteRandomSelector extends JFrame { } }, es).whenCompleteAsync((ret, ex) -> { if(ex != null) { - logger.error("Exception was thrown during concurrent process"); + logger.error("Exception was thrown during concurrent process", ex); + CrashHandler handle = new CrashHandler(new IllegalStateException(ex)); + handle.execute(); } }, es); }); @@ -551,10 +594,14 @@ public class DelesteRandomSelector extends JFrame { tabbedPane = new JTabbedPane(JTabbedPane.TOP); tabbedPane.addChangeListener(e -> { CompletableFuture.runAsync(() -> { + labelToolProgress.setText(Messages.MSGAPIWaitAPIFetch.toString()); String currentTabName = tabbedPane.getTitleAt(tabbedPane.getSelectedIndex()); - if(currentTabName.equals("SubTools") && labelCurrentSongOrderTool.getText().equals("null")) { + if(currentTabName.equals("SongInfo") && labelCurrentSongOrderTool.getText().equals("null")) { logger.info("Detected switching tool tab"); listToolMapData = listToolMapDataFuture.join(); + if(toolIntegrateList == null) { + return; + } Song firstSong = toolIntegrateList.get(0); Map fetchMap = new HashMap<>(); for(Map tmpMap : listToolMapData) { @@ -574,23 +621,26 @@ public class DelesteRandomSelector extends JFrame { labelLyricToolTip.setText(fetchMap.get("lyric")); labelComposerToolTip.setText(fetchMap.get("composer")); labelArrangeToolTip.setText(fetchMap.get("arrange")); - labelMemberToolTip.setText(fetchMap.get("member")); + labelMemberToolTip.setText("" + fetchMap.get("member") + ""); } }, es).whenCompleteAsync((ret, ex) -> { + labelToolProgress.setText("Information parse Complete."); if(ex != null) { logger.error("Exception was thrown during concurrent process", ex); + CrashHandler handle = new CrashHandler(new IllegalStateException(ex)); + handle.execute(); } }, es); }); tabbedPane.addTab("Main", null, panelMain, null); contentPane.add(tabbedPane, "name_307238585319500"); - panelTool = new JPanel(); - tabbedPane.addTab("SubTools", null, panelTool, null); - panelTool.setLayout(new BorderLayout(0, 0)); + panelInfo = new JPanel(); + tabbedPane.addTab("SongInfo", null, panelInfo, null); + panelInfo.setLayout(new BorderLayout(0, 0)); panelNorthTool = new JPanel(); - panelTool.add(panelNorthTool, BorderLayout.NORTH); + panelInfo.add(panelNorthTool, BorderLayout.NORTH); panelNorthTool.setLayout(new FormLayout(new ColumnSpec[] { ColumnSpec.decode("center:max(524dlu;default)"), FormSpecs.RELATED_GAP_COLSPEC, @@ -598,7 +648,7 @@ public class DelesteRandomSelector extends JFrame { new RowSpec[] { RowSpec.decode("max(16dlu;default)"),})); - labelSubToolTitle = new JLabel("補助ツール"); + labelSubToolTitle = new JLabel("楽曲情報"); labelSubToolTitle.setFont(new Font("UD デジタル 教科書体 NP-B", Font.PLAIN, 16)); panelNorthTool.add(labelSubToolTitle, "1, 1"); @@ -607,7 +657,7 @@ public class DelesteRandomSelector extends JFrame { panelNorthTool.add(labelVersionTool, "3, 1"); panelCenterTool = new JPanel(); - panelTool.add(panelCenterTool, BorderLayout.CENTER); + panelInfo.add(panelCenterTool, BorderLayout.CENTER); panelCenterTool.setLayout(new FormLayout(new ColumnSpec[] { FormSpecs.RELATED_GAP_COLSPEC, ColumnSpec.decode("max(40dlu;default)"), @@ -616,15 +666,14 @@ public class DelesteRandomSelector extends JFrame { FormSpecs.RELATED_GAP_COLSPEC, ColumnSpec.decode("10dlu"), FormSpecs.RELATED_GAP_COLSPEC, - ColumnSpec.decode("max(10dlu;default)"), + ColumnSpec.decode("max(12dlu;default)"), FormSpecs.RELATED_GAP_COLSPEC, ColumnSpec.decode("max(90dlu;default)"), FormSpecs.RELATED_GAP_COLSPEC, - FormSpecs.DEFAULT_COLSPEC, + ColumnSpec.decode("max(14dlu;default)"), FormSpecs.RELATED_GAP_COLSPEC, - FormSpecs.DEFAULT_COLSPEC, FormSpecs.RELATED_GAP_COLSPEC, - FormSpecs.DEFAULT_COLSPEC, + ColumnSpec.decode("max(14dlu;default)"), FormSpecs.RELATED_GAP_COLSPEC, ColumnSpec.decode("max(90dlu;default)"), FormSpecs.RELATED_GAP_COLSPEC, @@ -671,87 +720,117 @@ public class DelesteRandomSelector extends JFrame { FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC, FormSpecs.RELATED_GAP_ROWSPEC, + FormSpecs.DEFAULT_ROWSPEC, + FormSpecs.RELATED_GAP_ROWSPEC, + FormSpecs.DEFAULT_ROWSPEC, + FormSpecs.RELATED_GAP_ROWSPEC, + FormSpecs.DEFAULT_ROWSPEC, + FormSpecs.RELATED_GAP_ROWSPEC, FormSpecs.DEFAULT_ROWSPEC,})); - lblNewLabel = new JLabel("今回プレイした楽曲"); - lblNewLabel.setFont(new Font("UD デジタル 教科書体 NP-B", Font.PLAIN, 12)); - panelCenterTool.add(lblNewLabel, "2, 2, center, default"); + labelInfoPlaySongs = new JLabel(Messages.MSGInfoPlayedSongs.toString()); + labelInfoPlaySongs.setFont(new Font("UD デジタル 教科書体 NP-B", Font.PLAIN, 12)); + panelCenterTool.add(labelInfoPlaySongs, "2, 2, center, default"); - labelSongNameToolTitle = new JLabel("Song Name"); + labelSongNameToolTitle = new JLabel(Messages.MSGInfoSongName.toString()); labelSongNameToolTitle.setFont(new Font("UD デジタル 教科書体 NP-B", Font.PLAIN, 12)); panelCenterTool.add(labelSongNameToolTitle, "2, 6, center, default"); - labelSongNameToolTip = new JLabel("Please wait..."); + labelSongNameToolTip = new JLabel(Messages.MSGInfoWait.toString()); labelSongNameToolTip.setFont(new Font("UD デジタル 教科書体 NP-B", Font.PLAIN, 12)); panelCenterTool.add(labelSongNameToolTip, "10, 6, center, default"); - labelMemberToolTitle = new JLabel("Member"); - labelMemberToolTitle.setFont(new Font("UD デジタル 教科書体 NP-B", Font.PLAIN, 12)); - panelCenterTool.add(labelMemberToolTitle, "18, 6, center, default"); + labelLyricToolTitle = new JLabel(Messages.MSGInfoLyricsBy.toString()); + labelLyricToolTitle.setFont(new Font("UD デジタル 教科書体 NP-B", Font.PLAIN, 12)); + panelCenterTool.add(labelLyricToolTitle, "17, 6, center, default"); - labelMemberToolTip = new JLabel("Please wait..."); - labelMemberToolTip.setFont(new Font("UD デジタル 教科書体 NP-B", Font.PLAIN, 12)); - panelCenterTool.add(labelMemberToolTip, "26, 6, center, default"); + labelLyricToolTip = new JLabel(Messages.MSGInfoWait.toString()); + labelLyricToolTip.setFont(new Font("UD デジタル 教科書体 NP-B", Font.PLAIN, 12)); + panelCenterTool.add(labelLyricToolTip, "25, 6, center, default"); - labelAttributeToolTitle = new JLabel("Song Attribute"); + labelAttributeToolTitle = new JLabel(Messages.MSGInfoSongAttribute.toString()); labelAttributeToolTitle.setFont(new Font("UD デジタル 教科書体 NP-B", Font.PLAIN, 12)); panelCenterTool.add(labelAttributeToolTitle, "2, 10, center, default"); - labelAttributeToolTip = new JLabel("Please wait..."); + labelAttributeToolTip = new JLabel(Messages.MSGInfoWait.toString()); labelAttributeToolTip.setFont(new Font("UD デジタル 教科書体 NP-B", Font.PLAIN, 12)); panelCenterTool.add(labelAttributeToolTip, "10, 10, center, default"); - labelDifficultyToolTitle = new JLabel("Difficulty"); + labelComposerToolTitle = new JLabel(Messages.MSGInfoComposedBy.toString()); + labelComposerToolTitle.setFont(new Font("UD デジタル 教科書体 NP-B", Font.PLAIN, 12)); + panelCenterTool.add(labelComposerToolTitle, "17, 10, center, default"); + + labelComposerToolTip = new JLabel(Messages.MSGInfoWait.toString()); + labelComposerToolTip.setFont(new Font("UD デジタル 教科書体 NP-B", Font.PLAIN, 12)); + panelCenterTool.add(labelComposerToolTip, "25, 10, center, default"); + + labelDifficultyToolTitle = new JLabel(Messages.MSGInfoSongDifficulty.toString()); labelDifficultyToolTitle.setFont(new Font("UD デジタル 教科書体 NP-B", Font.PLAIN, 12)); panelCenterTool.add(labelDifficultyToolTitle, "2, 14, center, default"); - labelDifficultyToolTip = new JLabel("Please wait..."); + labelDifficultyToolTip = new JLabel(Messages.MSGInfoWait.toString()); labelDifficultyToolTip.setFont(new Font("UD デジタル 教科書体 NP-B", Font.PLAIN, 12)); panelCenterTool.add(labelDifficultyToolTip, "10, 14, center, default"); - labelLevelToolTitle = new JLabel("Song Level"); + labelArrangeToolTitle = new JLabel(Messages.MSGInfoArrangedBy.toString()); + labelArrangeToolTitle.setFont(new Font("UD デジタル 教科書体 NP-B", Font.PLAIN, 12)); + panelCenterTool.add(labelArrangeToolTitle, "17, 14, center, default"); + + labelArrangeToolTip = new JLabel(Messages.MSGInfoWait.toString()); + labelArrangeToolTip.setFont(new Font("UD デジタル 教科書体 NP-B", Font.PLAIN, 12)); + panelCenterTool.add(labelArrangeToolTip, "25, 14, center, default"); + + labelLevelToolTitle = new JLabel(Messages.MSGInfoSongLevel.toString()); labelLevelToolTitle.setFont(new Font("UD デジタル 教科書体 NP-B", Font.PLAIN, 12)); panelCenterTool.add(labelLevelToolTitle, "2, 18, center, default"); - labelLevelToolTip = new JLabel("Please wait..."); + labelLevelToolTip = new JLabel(Messages.MSGInfoWait.toString()); labelLevelToolTip.setFont(new Font("UD デジタル 教科書体 NP-B", Font.PLAIN, 12)); panelCenterTool.add(labelLevelToolTip, "10, 18, center, default"); - labelNotesToolTitle = new JLabel("Notes"); + labelMemberToolTitle = new JLabel(Messages.MSGInfoMember.toString()); + labelMemberToolTitle.setFont(new Font("UD デジタル 教科書体 NP-B", Font.PLAIN, 12)); + panelCenterTool.add(labelMemberToolTitle, "17, 18, center, default"); + + labelMemberToolTip = new JLabel(Messages.MSGInfoWait.toString()); + labelMemberToolTip.setFont(new Font("UD デジタル 教科書体 NP-B", Font.PLAIN, 12)); + panelCenterTool.add(labelMemberToolTip, "25, 18, center, default"); + + labelNotesToolTitle = new JLabel(Messages.MSGInfoSongNotes.toString()); labelNotesToolTitle.setFont(new Font("UD デジタル 教科書体 NP-B", Font.PLAIN, 12)); panelCenterTool.add(labelNotesToolTitle, "2, 22, center, default"); - labelNotesToolTip = new JLabel("Please wait..."); + labelNotesToolTip = new JLabel(Messages.MSGInfoWait.toString()); labelNotesToolTip.setFont(new Font("UD デジタル 教科書体 NP-B", Font.PLAIN, 12)); panelCenterTool.add(labelNotesToolTip, "10, 22, center, default"); - btnPrevSongTool = new JButton("prev"); - btnPrevSongTool.addActionListener(e -> { + btnNextSongTool = new JButton("next"); + btnNextSongTool.addActionListener(e -> { CompletableFuture.runAsync(() -> { int currentIndex = Integer.parseInt(labelCurrentSongOrderTool.getText()) - 1; - if(currentIndex != 0) { - Song prevSong = toolIntegrateList.get(currentIndex - 1); - logger.info("currently : {} Next: {}", currentIndex + 1, currentIndex); - logger.info("prevSong: {}", prevSong); + if(currentIndex != property.getSongLimit() - 1) { + Song nextSong = toolIntegrateList.get(currentIndex + 1); + logger.info("currently : {} Next: {}", currentIndex + 1, currentIndex + 2); + logger.info("nextSong: {}", nextSong); Map fetchMap = new HashMap<>(); for(Map tmpMap : listToolMapData) { String normalizeApiName = Normalizer.normalize(tmpMap.get("songname").toString(), Normalizer.Form.NFKD); - String normalizeLocalName = Normalizer.normalize(prevSong.getName(), Normalizer.Form.NFKD); + String normalizeLocalName = Normalizer.normalize(nextSong.getName(), Normalizer.Form.NFKD); if(normalizeApiName.equals(normalizeLocalName)) { fetchMap = tmpMap; break; } } - labelSongNameToolTip.setText(prevSong.getName()); - labelAttributeToolTip.setText(prevSong.getAttribute()); - labelDifficultyToolTip.setText(prevSong.getDifficulty()); - labelLevelToolTip.setText(String.valueOf(prevSong.getLevel())); - labelNotesToolTip.setText(String.valueOf(prevSong.getNotes())); - labelCurrentSongOrderTool.setText(String.valueOf(currentIndex)); + labelSongNameToolTip.setText(nextSong.getName()); + labelAttributeToolTip.setText(nextSong.getAttribute()); + labelDifficultyToolTip.setText(nextSong.getDifficulty()); + labelLevelToolTip.setText(String.valueOf(nextSong.getLevel())); + labelNotesToolTip.setText(String.valueOf(nextSong.getNotes())); + labelCurrentSongOrderTool.setText(String.valueOf(currentIndex + 2)); labelLyricToolTip.setText(fetchMap.get("lyric")); labelComposerToolTip.setText(fetchMap.get("composer")); labelArrangeToolTip.setText(fetchMap.get("arrange")); - labelMemberToolTip.setText(fetchMap.get("member")); + labelMemberToolTip.setText("" + fetchMap.get("member") + ""); } }, es).whenCompleteAsync((ret, ex) -> { if(ex != null) { @@ -760,79 +839,55 @@ public class DelesteRandomSelector extends JFrame { }, es); }); - labelLyricToolTitle = new JLabel("Lyrics By"); - labelLyricToolTitle.setFont(new Font("UD デジタル 教科書体 NP-B", Font.PLAIN, 12)); - panelCenterTool.add(labelLyricToolTitle, "2, 26, center, default"); - - labelLyricToolTip = new JLabel("Please wait..."); - labelLyricToolTip.setFont(new Font("UD デジタル 教科書体 NP-B", Font.PLAIN, 12)); - panelCenterTool.add(labelLyricToolTip, "10, 26, center, default"); - - labelComposerToolTitle = new JLabel("Composed By"); - labelComposerToolTitle.setFont(new Font("UD デジタル 教科書体 NP-B", Font.PLAIN, 12)); - panelCenterTool.add(labelComposerToolTitle, "2, 30, center, default"); - - labelComposerToolTip = new JLabel("Please wait..."); - labelComposerToolTip.setFont(new Font("UD デジタル 教科書体 NP-B", Font.PLAIN, 12)); - panelCenterTool.add(labelComposerToolTip, "10, 30, center, default"); - - labelArrangeToolTitle = new JLabel("Arranged By"); - labelArrangeToolTitle.setFont(new Font("UD デジタル 教科書体 NP-B", Font.PLAIN, 12)); - panelCenterTool.add(labelArrangeToolTitle, "2, 34, center, default"); - - labelArrangeToolTip = new JLabel("Please wait..."); - labelArrangeToolTip.setFont(new Font("UD デジタル 教科書体 NP-B", Font.PLAIN, 12)); - panelCenterTool.add(labelArrangeToolTip, "10, 34, center, default"); - btnPrevSongTool.setFont(new Font("UD デジタル 教科書体 NP-B", Font.PLAIN, 12)); - panelCenterTool.add(btnPrevSongTool, "2, 36"); - - btnNextSongTool = new JButton("next"); - btnNextSongTool.addActionListener(e -> { + btnPrevSongTool = new JButton("prev"); + btnPrevSongTool.addActionListener(e -> { CompletableFuture.runAsync(() -> { int currentIndex = Integer.parseInt(labelCurrentSongOrderTool.getText()) - 1; - if(currentIndex != property.getSongLimit() - 1) { - Song nextSong = toolIntegrateList.get(currentIndex + 1); - logger.info("currently : {} Next: {}", currentIndex + 1, currentIndex + 2); - logger.info("nextSong: {}", nextSong); + if(currentIndex != 0) { + Song prevSong = toolIntegrateList.get(currentIndex - 1); + logger.info("currently : {} Next: {}", currentIndex + 1, currentIndex); + logger.info("prevSong: {}", prevSong); Map fetchMap = new HashMap<>(); for(Map tmpMap : listToolMapData) { String normalizeApiName = Normalizer.normalize(tmpMap.get("songname").toString(), Normalizer.Form.NFKD); - String normalizeLocalName = Normalizer.normalize(nextSong.getName(), Normalizer.Form.NFKD); + String normalizeLocalName = Normalizer.normalize(prevSong.getName(), Normalizer.Form.NFKD); if(normalizeApiName.equals(normalizeLocalName)) { fetchMap = tmpMap; break; } } - labelSongNameToolTip.setText(nextSong.getName()); - labelAttributeToolTip.setText(nextSong.getAttribute()); - labelDifficultyToolTip.setText(nextSong.getDifficulty()); - labelLevelToolTip.setText(String.valueOf(nextSong.getLevel())); - labelNotesToolTip.setText(String.valueOf(nextSong.getNotes())); - labelCurrentSongOrderTool.setText(String.valueOf(currentIndex + 2)); + labelSongNameToolTip.setText(prevSong.getName()); + labelAttributeToolTip.setText(prevSong.getAttribute()); + labelDifficultyToolTip.setText(prevSong.getDifficulty()); + labelLevelToolTip.setText(String.valueOf(prevSong.getLevel())); + labelNotesToolTip.setText(String.valueOf(prevSong.getNotes())); + labelCurrentSongOrderTool.setText(String.valueOf(currentIndex)); labelLyricToolTip.setText(fetchMap.get("lyric")); labelComposerToolTip.setText(fetchMap.get("composer")); labelArrangeToolTip.setText(fetchMap.get("arrange")); - labelMemberToolTip.setText(fetchMap.get("member")); + labelMemberToolTip.setText("" + fetchMap.get("member") + ""); } }, es).whenCompleteAsync((ret, ex) -> { if(ex != null) { logger.error("Exception was thrown during concurrent process", ex); } - }); + }, es); }); + btnPrevSongTool.setFont(new Font("UD デジタル 教科書体 NP-B", Font.PLAIN, 12)); + panelCenterTool.add(btnPrevSongTool, "10, 28"); labelCurrentSongOrderTool = new JLabel("null"); - panelCenterTool.add(labelCurrentSongOrderTool, "4, 36"); + panelCenterTool.add(labelCurrentSongOrderTool, "12, 28"); labelSlashTool = new JLabel("/"); - panelCenterTool.add(labelSlashTool, "6, 36"); + panelCenterTool.add(labelSlashTool, "14, 28"); labelSongLimitTool = new JLabel(String.valueOf(this.property.getSongLimit())); - panelCenterTool.add(labelSongLimitTool, "8, 36"); + panelCenterTool.add(labelSongLimitTool, "15, 28"); btnNextSongTool.setFont(new Font("UD デジタル 教科書体 NP-B", Font.PLAIN, 12)); - panelCenterTool.add(btnNextSongTool, "10, 36"); + panelCenterTool.add(btnNextSongTool, "17, 28"); - btnMoreInfoTool = new JButton("More Information"); + btnMoreInfoTool = new JButton(Messages.MSGInfoOpenBrowser.toString()); btnMoreInfoTool.addActionListener(e -> { CompletableFuture.runAsync(() -> { int currentIndex = Integer.parseInt(labelCurrentSongOrderTool.getText()) - 1; @@ -864,7 +919,45 @@ public class DelesteRandomSelector extends JFrame { }, es); }); btnMoreInfoTool.setFont(new Font("UD デジタル 教科書体 NP-B", Font.PLAIN, 12)); - panelCenterTool.add(btnMoreInfoTool, "18, 36"); + panelCenterTool.add(btnMoreInfoTool, "25, 28"); + + labelToolProgress = new JLabel(Messages.MSGAPIWaitAPIFetch.toString()); + labelToolProgress.setFont(new Font("UD デジタル 教科書体 NP-B", Font.PLAIN, 12)); + panelCenterTool.add(labelToolProgress, "10, 32, center, default"); + + progressTool = new JProgressBar(); + progressTool.setStringPainted(true); + progressTool.setValue(0); + progressTool.setMaximum(property.getSongLimit()); + panelCenterTool.add(progressTool, "17, 32"); + + labelInfoProgressSongName = new JLabel("Processing:"); + labelInfoProgressSongName.setFont(new Font("UD デジタル 教科書体 NP-B", Font.PLAIN, 12)); + panelCenterTool.add(labelInfoProgressSongName, "10, 34"); + + panelScore = new JPanel(); + tabbedPane.addTab("Scores", null, panelScore, null); + panelScore.setLayout(new BorderLayout(0, 0)); + + panelScoreNorth = new JPanel(); + panelScore.add(panelScoreNorth, BorderLayout.NORTH); + panelScoreNorth.setLayout(new FormLayout(new ColumnSpec[] { + ColumnSpec.decode("828px"), + FormSpecs.RELATED_GAP_COLSPEC, + ColumnSpec.decode("max(53dlu;default)"),}, + new RowSpec[] { + RowSpec.decode("20px"),})); + + labelScoreTitle = new JLabel("スコア、ファン計算"); + labelScoreTitle.setFont(new Font("UD デジタル 教科書体 NP-B", Font.PLAIN, 16)); + panelScoreNorth.add(labelScoreTitle, "1, 1, center, center"); + + labelScoreVersion = new JLabel(CheckVersion.getVersion()); + labelScoreVersion.setFont(new Font("SansSerif", Font.BOLD, 12)); + panelScoreNorth.add(labelScoreVersion, "3, 1, center, default"); + + panelScoreCenter = new JPanel(); + panelScore.add(panelScoreCenter, BorderLayout.CENTER); if(isFirst || !this.property.isCheckLibraryUpdates()) { setEnabled.run(); }