From 763f630d53060d0b6e2a325bb396c38c5f6252c9 Mon Sep 17 00:00:00 2001 From: MUedsa <7676275+MUedsa@users.noreply.github.com> Date: Fri, 26 Nov 2021 15:25:40 +0800 Subject: [PATCH] update: hidden line reader --- .../textReader/action/NextLineAction.java | 21 ++++++ .../textReader/composes/ReaderWindow.form | 37 +++++++++- .../textReader/composes/ReaderWindow.java | 68 +++++++++++++++---- .../composes/ReaderWindowHolder.java | 17 +++++ .../textReader/notify/Notification.java | 6 ++ src/main/resources/META-INF/plugin.xml | 16 ++++- 6 files changed, 146 insertions(+), 19 deletions(-) create mode 100644 src/main/java/com/muedsa/intellij/textReader/action/NextLineAction.java create mode 100644 src/main/java/com/muedsa/intellij/textReader/composes/ReaderWindowHolder.java diff --git a/src/main/java/com/muedsa/intellij/textReader/action/NextLineAction.java b/src/main/java/com/muedsa/intellij/textReader/action/NextLineAction.java new file mode 100644 index 0000000..4704e50 --- /dev/null +++ b/src/main/java/com/muedsa/intellij/textReader/action/NextLineAction.java @@ -0,0 +1,21 @@ +package com.muedsa.intellij.textReader.action; + +import com.intellij.notification.NotificationType; +import com.intellij.openapi.actionSystem.AnAction; +import com.intellij.openapi.actionSystem.AnActionEvent; +import com.muedsa.intellij.textReader.composes.ReaderWindow; +import com.muedsa.intellij.textReader.composes.ReaderWindowHolder; +import com.muedsa.intellij.textReader.notify.Notification; + +public class NextLineAction extends AnAction { + + @Override + public void actionPerformed(AnActionEvent e) { + ReaderWindow readerWindow = ReaderWindowHolder.get(e.getProject()); + if(readerWindow == null){ + Notification.sendHiddenNotify(e.getProject(), "未初始化ToolWindow, 请点击工具栏打开一次窗口", NotificationType.INFORMATION); + }else{ + Notification.sendHiddenNotify(e.getProject(), readerWindow.nextLine(), NotificationType.INFORMATION); + } + } +} diff --git a/src/main/java/com/muedsa/intellij/textReader/composes/ReaderWindow.form b/src/main/java/com/muedsa/intellij/textReader/composes/ReaderWindow.form index 90c34b9..342011c 100644 --- a/src/main/java/com/muedsa/intellij/textReader/composes/ReaderWindow.form +++ b/src/main/java/com/muedsa/intellij/textReader/composes/ReaderWindow.form @@ -3,9 +3,11 @@ - + - + + + @@ -150,7 +152,7 @@ - + @@ -424,6 +426,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/com/muedsa/intellij/textReader/composes/ReaderWindow.java b/src/main/java/com/muedsa/intellij/textReader/composes/ReaderWindow.java index 398db34..115b679 100644 --- a/src/main/java/com/muedsa/intellij/textReader/composes/ReaderWindow.java +++ b/src/main/java/com/muedsa/intellij/textReader/composes/ReaderWindow.java @@ -31,6 +31,9 @@ import java.util.stream.Collectors; public class ReaderWindow { + private final Project project; + private final ToolWindow toolWindow; + private JPanel readerPanel; private JBList titleList; private JButton fileButton; @@ -51,9 +54,7 @@ public class ReaderWindow { private JButton clearButton; private JSpinner paragraphSpaceSpinner; private JTextField searchTextField; - - private Project project; - private ToolWindow toolWindow; + private JSpinner lineSizeSpinner; private TextFile textFile; @@ -61,6 +62,9 @@ public class ReaderWindow { private static Vector CHAPTER_LIST = new Vector<>(0); + private Integer positionInChapter = 0; + private String noBlankChapterText; + public ReaderWindow(Project project, ToolWindow toolWindow) { this.project = project; this.toolWindow = toolWindow; @@ -68,6 +72,11 @@ public ReaderWindow(Project project, ToolWindow toolWindow) { createUIComponents(); init(); updateRegex(); + ReaderWindowHolder.put(project, this); + } + + public JPanel getContent(){ + return readerPanel; } private void createUIComponents(){ @@ -233,14 +242,8 @@ public void mouseClicked(MouseEvent e) { nextButton.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { - int count = titleList.getItemsCount(); - int index = titleList.getSelectedIndex() + 1; - if(index + 1 <= count){ - titleList.setSelectedIndex(index); - setTextContent(); - } + nextChapter(); } - }); //上一章 @@ -254,6 +257,10 @@ public void mouseClicked(MouseEvent e) { } } }); + + //每行字数 + SpinnerModel lineSizeSpinnerModel = new SpinnerNumberModel(15, 0, 100, 1); + lineSizeSpinner.setModel(lineSizeSpinnerModel); } private void init(){ @@ -337,10 +344,6 @@ private void updateParagraphSpace(){ setTextContent(); } - public JPanel getContent(){ - return readerPanel; - } - private void setTextContent(){ Chapter chapter = titleList.getSelectedValue(); if(chapter != null){ @@ -353,6 +356,7 @@ private void setTextContent(){ sendNotify("文件读取错误", e.getLocalizedMessage(), NotificationType.ERROR); } textContent.setText(text); + noBlankChapterText = text.replaceAll("\\s*", ""); textContent.setCaretPosition(0); } } @@ -361,4 +365,40 @@ private void sendNotify(String title, String content, NotificationType type){ Notification.sendNotify(project, title, content, type); } + public String nextLine(){ + if(toolWindow.isAvailable()){ + int lineSize = (int)lineSizeSpinner.getValue(); + if(lineSize > 0){ + if(StringUtils.isEmpty(noBlankChapterText) || positionInChapter > noBlankChapterText.length()){ + if(nextChapter()){ + positionInChapter = 0; + noBlankChapterText = textContent.getText(); + }else{ + return "end!"; + } + } + String line = StringUtils.mid(noBlankChapterText, positionInChapter, lineSize); + positionInChapter += lineSize; + if(StringUtils.isAllBlank(line)){ + line = nextLine(); + } + return line; + } + return ">.< 0?"; + }else{ + return "正在初始化~~"; + } + } + + private boolean nextChapter(){ + int count = titleList.getItemsCount(); + int index = titleList.getSelectedIndex() + 1; + if(index + 1 <= count){ + titleList.setSelectedIndex(index); + setTextContent(); + return true; + }else{ + return false; + } + } } diff --git a/src/main/java/com/muedsa/intellij/textReader/composes/ReaderWindowHolder.java b/src/main/java/com/muedsa/intellij/textReader/composes/ReaderWindowHolder.java new file mode 100644 index 0000000..34c970f --- /dev/null +++ b/src/main/java/com/muedsa/intellij/textReader/composes/ReaderWindowHolder.java @@ -0,0 +1,17 @@ +package com.muedsa.intellij.textReader.composes; + +import com.intellij.openapi.project.Project; + +import java.util.concurrent.ConcurrentHashMap; + +public class ReaderWindowHolder { + public static final ConcurrentHashMap holder = new ConcurrentHashMap<>(); + + public static void put(Project project, ReaderWindow readerWindow){ + holder.put(project, readerWindow); + } + + public static ReaderWindow get(Project project){ + return holder.get(project); + } +} diff --git a/src/main/java/com/muedsa/intellij/textReader/notify/Notification.java b/src/main/java/com/muedsa/intellij/textReader/notify/Notification.java index 0fa72fe..4df035f 100644 --- a/src/main/java/com/muedsa/intellij/textReader/notify/Notification.java +++ b/src/main/java/com/muedsa/intellij/textReader/notify/Notification.java @@ -12,4 +12,10 @@ public static void sendNotify(Project project, String title, String content, Not .setTitle(title) .notify(project); } + + public static void sendHiddenNotify(Project project, String content, NotificationType type){ + NotificationGroupManager.getInstance().getNotificationGroup("com.muedsa.intellij.textReader.hiddenNotify") + .createNotification(content, type) + .notify(project); + } } diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index 4f399c5..1c7067c 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -1,7 +1,7 @@ com.muedsa.intellij.textReader TextReaderSidebarTool - 2021.11.19 + 2021.11.26 MUEDSA 2021.11.26 +
    +
  • hidden line reader
  • +
+
+ +

2021.11.19

  • update name: TextReaderSidebarTool
  • @@ -103,10 +110,15 @@ factoryClass="com.muedsa.intellij.textReader.factory.ToolWindowFactoryImpl" icon="TextReaderSidebarToolIcons.BOOK_DEAD"/> + - + + + + \ No newline at end of file