+
+ tabbedPane = new JTabbedPane(JTabbedPane.TOP);
+ tabbedPane.addChangeListener(e -> {
+ CompletableFuture.runAsync(() -> {
+ labelToolProgress.setText(Messages.MSGAPIWaitAPIFetch.toString());
+ String currentTabName = tabbedPane.getTitleAt(tabbedPane.getSelectedIndex());
+ 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<String, String> fetchMap = new HashMap<>();
+ for(Map<String, String> tmpMap : listToolMapData) {
+ String normalizeApiName = Normalizer.normalize(tmpMap.get("songname").toString(), Normalizer.Form.NFKD);
+ String normalizeLocalName = Normalizer.normalize(firstSong.getName(), Normalizer.Form.NFKD);
+ if(normalizeApiName.equals(normalizeLocalName)) {
+ fetchMap = tmpMap;
+ break;
+ }
+ }
+ labelSongNameToolTip.setText(firstSong.getName());
+ labelAttributeToolTip.setText(firstSong.getAttribute());
+ labelDifficultyToolTip.setText(firstSong.getDifficulty());
+ labelLevelToolTip.setText(String.valueOf(firstSong.getLevel()));
+ labelNotesToolTip.setText(String.valueOf(firstSong.getNotes()));
+ labelCurrentSongOrderTool.setText("1");
+ labelLyricToolTip.setText(fetchMap.get("lyric"));
+ labelComposerToolTip.setText(fetchMap.get("composer"));
+ labelArrangeToolTip.setText(fetchMap.get("arrange"));
+ labelMemberToolTip.setText("<html><body>" + fetchMap.get("member") + "</html></body>");
+ }
+ }, 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");
+
+ panelInfo = new JPanel();
+ tabbedPane.addTab("SongInfo", null, panelInfo, null);
+ panelInfo.setLayout(new BorderLayout(0, 0));
+
+ panelNorthTool = new JPanel();
+ panelInfo.add(panelNorthTool, BorderLayout.NORTH);
+ panelNorthTool.setLayout(new FormLayout(new ColumnSpec[] {
+ ColumnSpec.decode("center:max(524dlu;default)"),
+ FormSpecs.RELATED_GAP_COLSPEC,
+ ColumnSpec.decode("max(30dlu;default)"),},
+ new RowSpec[] {
+ RowSpec.decode("max(16dlu;default)"),}));
+
+ labelSubToolTitle = new JLabel("楽曲情報");
+ labelSubToolTitle.setFont(new Font("UD デジタル 教科書体 NP-B", Font.PLAIN, 16));
+ panelNorthTool.add(labelSubToolTitle, "1, 1");
+
+ labelVersionTool = new JLabel(CheckVersion.getVersion());
+ labelVersionTool.setFont(new Font("SansSerif", Font.BOLD, 12));
+ panelNorthTool.add(labelVersionTool, "3, 1");
+
+ panelCenterTool = new JPanel();
+ panelInfo.add(panelCenterTool, BorderLayout.CENTER);
+ panelCenterTool.setLayout(new FormLayout(new ColumnSpec[] {
+ FormSpecs.RELATED_GAP_COLSPEC,
+ ColumnSpec.decode("max(40dlu;default)"),
+ FormSpecs.RELATED_GAP_COLSPEC,
+ ColumnSpec.decode("10dlu"),
+ FormSpecs.RELATED_GAP_COLSPEC,
+ ColumnSpec.decode("10dlu"),
+ FormSpecs.RELATED_GAP_COLSPEC,
+ ColumnSpec.decode("max(12dlu;default)"),
+ FormSpecs.RELATED_GAP_COLSPEC,
+ ColumnSpec.decode("max(90dlu;default)"),
+ FormSpecs.RELATED_GAP_COLSPEC,
+ ColumnSpec.decode("max(14dlu;default)"),
+ FormSpecs.RELATED_GAP_COLSPEC,
+ FormSpecs.RELATED_GAP_COLSPEC,
+ ColumnSpec.decode("max(14dlu;default)"),
+ FormSpecs.RELATED_GAP_COLSPEC,
+ ColumnSpec.decode("max(90dlu;default)"),
+ FormSpecs.RELATED_GAP_COLSPEC,
+ FormSpecs.DEFAULT_COLSPEC,
+ FormSpecs.RELATED_GAP_COLSPEC,
+ FormSpecs.DEFAULT_COLSPEC,
+ FormSpecs.RELATED_GAP_COLSPEC,
+ FormSpecs.DEFAULT_COLSPEC,
+ FormSpecs.RELATED_GAP_COLSPEC,
+ ColumnSpec.decode("max(90dlu;default)"),},
+ new 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,
+ 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,
+ 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,
+ 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,
+ FormSpecs.RELATED_GAP_ROWSPEC,
+ FormSpecs.DEFAULT_ROWSPEC,
+ FormSpecs.RELATED_GAP_ROWSPEC,
+ FormSpecs.DEFAULT_ROWSPEC,}));
+
+ 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(Messages.MSGInfoSongName.toString());
+ labelSongNameToolTitle.setFont(new Font("UD デジタル 教科書体 NP-B", Font.PLAIN, 12));
+ panelCenterTool.add(labelSongNameToolTitle, "2, 6, center, default");
+
+ labelSongNameToolTip = new JLabel(Messages.MSGInfoWait.toString());
+ labelSongNameToolTip.setFont(new Font("UD デジタル 教科書体 NP-B", Font.PLAIN, 12));
+ panelCenterTool.add(labelSongNameToolTip, "10, 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");
+
+ 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(Messages.MSGInfoSongAttribute.toString());
+ labelAttributeToolTitle.setFont(new Font("UD デジタル 教科書体 NP-B", Font.PLAIN, 12));
+ panelCenterTool.add(labelAttributeToolTitle, "2, 10, center, default");
+
+ labelAttributeToolTip = new JLabel(Messages.MSGInfoWait.toString());
+ labelAttributeToolTip.setFont(new Font("UD デジタル 教科書体 NP-B", Font.PLAIN, 12));
+ panelCenterTool.add(labelAttributeToolTip, "10, 10, center, default");
+
+ 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(Messages.MSGInfoWait.toString());
+ labelDifficultyToolTip.setFont(new Font("UD デジタル 教科書体 NP-B", Font.PLAIN, 12));
+ panelCenterTool.add(labelDifficultyToolTip, "10, 14, center, default");
+
+ 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(Messages.MSGInfoWait.toString());
+ labelLevelToolTip.setFont(new Font("UD デジタル 教科書体 NP-B", Font.PLAIN, 12));
+ panelCenterTool.add(labelLevelToolTip, "10, 18, center, default");
+
+ 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(Messages.MSGInfoWait.toString());
+ labelNotesToolTip.setFont(new Font("UD デジタル 教科書体 NP-B", Font.PLAIN, 12));
+ panelCenterTool.add(labelNotesToolTip, "10, 22, center, default");
+
+ btnNextSongTool = new JButton("next");
+ btnNextSongTool.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);
+ Map<String, String> fetchMap = new HashMap<>();
+ for(Map<String, String> tmpMap : listToolMapData) {
+ String normalizeApiName = Normalizer.normalize(tmpMap.get("songname").toString(), Normalizer.Form.NFKD);
+ String normalizeLocalName = Normalizer.normalize(nextSong.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));
+ labelLyricToolTip.setText(fetchMap.get("lyric"));
+ labelComposerToolTip.setText(fetchMap.get("composer"));
+ labelArrangeToolTip.setText(fetchMap.get("arrange"));
+ labelMemberToolTip.setText("<html><body>" + fetchMap.get("member") + "</html></body>");
+ }
+ }, es).whenCompleteAsync((ret, ex) -> {
+ if(ex != null) {
+ logger.error("Exception was thrown during concurrent process", ex);
+ }
+ }, es);
+ });
+
+ btnPrevSongTool = new JButton("prev");
+ btnPrevSongTool.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);
+ Map<String, String> fetchMap = new HashMap<>();
+ for(Map<String, String> tmpMap : listToolMapData) {
+ String normalizeApiName = Normalizer.normalize(tmpMap.get("songname").toString(), Normalizer.Form.NFKD);
+ String normalizeLocalName = Normalizer.normalize(prevSong.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));
+ labelLyricToolTip.setText(fetchMap.get("lyric"));
+ labelComposerToolTip.setText(fetchMap.get("composer"));
+ labelArrangeToolTip.setText(fetchMap.get("arrange"));
+ labelMemberToolTip.setText("<html><body>" + fetchMap.get("member") + "</html></body>");
+ }
+ }, 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, "12, 28");
+
+ labelSlashTool = new JLabel("/");
+ panelCenterTool.add(labelSlashTool, "14, 28");
+
+ labelSongLimitTool = new JLabel(String.valueOf(this.property.getSongLimit()));
+ panelCenterTool.add(labelSongLimitTool, "15, 28");
+ btnNextSongTool.setFont(new Font("UD デジタル 教科書体 NP-B", Font.PLAIN, 12));
+ panelCenterTool.add(btnNextSongTool, "17, 28");
+
+ btnMoreInfoTool = new JButton(Messages.MSGInfoOpenBrowser.toString());
+ btnMoreInfoTool.addActionListener(e -> {
+ CompletableFuture.runAsync(() -> {
+ int currentIndex = Integer.parseInt(labelCurrentSongOrderTool.getText()) - 1;
+ Song currentSong = toolIntegrateList.get(currentIndex);
+ Map<String, String> fetchMap = new HashMap<>();
+ for(Map<String, String> tmpMap : listToolMapData) {
+ String normalizeApiName = Normalizer.normalize(tmpMap.get("songname").toString(), Normalizer.Form.NFKD);
+ String normalizeLocalName = Normalizer.normalize(currentSong.getName(), Normalizer.Form.NFKD);
+ if(normalizeApiName.equals(normalizeLocalName)) {
+ fetchMap = tmpMap;
+ break;
+ }
+ }
+ Desktop desk = Desktop.getDesktop();
+ String api = fetchMap.get("link");
+ URI uri;
+ try {
+ uri = new URI(api);
+ logger.info("Opening default browser with : {}", uri);
+ desk.browse(uri);
+ } catch (URISyntaxException | IOException e1) {
+ JOptionPane.showMessageDialog(null, "このメッセージは仮です。Exception : " + e1.getClass().getSimpleName());
+ logger.error("Exception while opening default browser.", e1);
+ }
+ }, es).whenCompleteAsync((ret, ex) -> {
+ if(ex != null) {
+ logger.warn("Exception was thrown during action events.", ex);
+ }
+ }, es);
+ });
+ btnMoreInfoTool.setFont(new Font("UD デジタル 教科書体 NP-B", Font.PLAIN, 12));
+ 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);