소스 검색

GTextEditor: Alt+Shift+S alphabetically sorts selected lines

ctfloyd 5 년 전
부모
커밋
a3520bfdfd
2개의 변경된 파일31개의 추가작업 그리고 1개의 파일을 삭제
  1. 30 1
      Libraries/LibGUI/GTextEditor.cpp
  2. 1 0
      Libraries/LibGUI/GTextEditor.h

+ 30 - 1
Libraries/LibGUI/GTextEditor.cpp

@@ -1,3 +1,4 @@
+#include <AK/QuickSort.h>
 #include <AK/StringBuilder.h>
 #include <Kernel/KeyCode.h>
 #include <LibGUI/GAction.h>
@@ -573,6 +574,31 @@ void GTextEditor::move_selected_lines_down()
     update();
 }
 
+void GTextEditor::sort_selected_lines()
+{
+    if (is_readonly())
+        return;
+
+    if (!has_selection())
+        return;
+        
+    int first_line;
+    int last_line;
+    get_selection_line_boundaries(first_line, last_line);
+
+    auto& lines = document().lines();
+
+    auto start = lines.begin() + first_line;
+    auto end = lines.begin() + last_line + 1;
+
+    quick_sort(start, end, [](auto& a, auto& b) {
+        return strcmp(a.characters(), b.characters()) < 0;
+    });
+
+    did_change();
+    update();
+}
+
 void GTextEditor::keydown_event(GKeyEvent& event)
 {
     if (is_single_line() && event.key() == KeyCode::Key_Tab)
@@ -732,7 +758,10 @@ void GTextEditor::keydown_event(GKeyEvent& event)
         select_all();
         return;
     }
-
+    if (event.alt() && event.shift() && event.key() == KeyCode::Key_S) {
+        sort_selected_lines();
+        return;
+    }
     if (event.key() == KeyCode::Key_Backspace) {
         if (is_readonly())
             return;

+ 1 - 0
Libraries/LibGUI/GTextEditor.h

@@ -167,6 +167,7 @@ private:
     void get_selection_line_boundaries(int& first_line, int& last_line);
     void move_selected_lines_up();
     void move_selected_lines_down();
+    void sort_selected_lines();
 
     class UndoCommand {