Commit graph

29 commits

Author SHA1 Message Date
Andreas Kling
e39b1f11f9 HackStudio: Support multiple editors on screen
This patch adds Editor (subclass of GTextEditor) and EditorWrapper.
An EditorWrapper is a composite widget that adds a little statusbar
above an Editor widget. The statusbar is used for showing the filename
and the current cursor position. More things can definitely be added.

To get to the currently active editor, call current_editor().
You can also get to the current editor's wrapper by calling..
current_editor_wrapper(). Which editor is current is determined by
which was was last focused by the user.
2019-10-27 12:55:10 +01:00
Andreas Kling
90c81d5c16 HackStudio: Tweak style of C++ identifiers
On second thought, let's not have bold identifiers, as this ended up
making most of the code bold. :^)
2019-10-26 21:47:51 +02:00
Andreas Kling
dd74cb9c8f HackStudio: Focus the text editor after opening a file 2019-10-26 21:45:29 +02:00
Andreas Kling
cea6506998 HackStudio: Implement adding an existing file to project 2019-10-26 21:43:46 +02:00
Andreas Kling
9129dbe0b9 HackStudio: Implement adding a new file to the project
You can now press Ctrl+N to create and add a new file to the project!
2019-10-26 21:28:31 +02:00
Andreas Kling
bc2026d26d LibGUI: Make GTextEditor::Span have a range instead of two positions
A GTextRange is really just two GTextPositions (start and end) anyway.
This way we can say nice things like "if (range.contains(position))"
2019-10-26 15:33:19 +02:00
Andreas Kling
df7f3ca604 HackStudio: "Hide" the action tabs (find in files, console) by default
By "hide" I really mean collapse them down to 24px height. We grow them
to a normal size when they're needed. The user is also free to resize
them at will.

This keeps them out of the way when you just want to do editing. :^)
2019-10-26 12:30:49 +02:00
Andreas Kling
db353a06e5 HackStudio: Enable line wrapping and automatic indentation by default 2019-10-26 11:33:39 +02:00
Andreas Kling
ed242d538a HackStudio: Assorted improvements to C++ highlighting
Add a list of hard-coded standard types (including AK types) and show
them in a different style.

Rehighligt the file whenever it changes. (This is very inefficient but
makes it much easier to experiment.)

Also keep tweaking the colors. :^)
2019-10-26 10:33:50 +02:00
Andreas Kling
2b19badd74 HackStudio: Make C++ keywords bold :^)
Now that we can specify the font of a GTextEditor::Span, use this to
make C++ keywords show up in bold text. Also tweak colors a bit.
2019-10-26 00:19:36 +02:00
Andreas Kling
6afe27b914 HackStudio: Lex C++ files and apply some basic syntax highlighting
When we open a file whose name ends in ".cpp", we now pass the contents
through CppLexer, which produces a CppToken stream.

Those CppTokens are then converted into GTextEditor::Spans and handed
over to GTextEditor which then colorizes the source code accordingly.

This is pretty neat. :^)
2019-10-25 21:09:16 +02:00
Andreas Kling
f256c55e8d HackStudio: Unbreak jumping to a search result
I broke this when factoring out the find-in-files widget into its own
class. This patch adds a main_editor() global getter for grabbing at
the main GTextEditor from wherever you are.
2019-10-25 10:25:42 +02:00
Andreas Kling
deabc7e13b HackStudio: Bring up the console when doing a "build" or "run"
We most likely want to see what comes out on the console when starting
one of these actions.
2019-10-24 22:28:36 +02:00
Andreas Kling
84a2208b5c HackStudio: Add some toolbar icons to liven up the UI a bit :^) 2019-10-24 22:25:26 +02:00
Andreas Kling
2260190f39 HackStudio: Move "find in files" widget to its own file/class
Instead of clogging up main.cpp with find-in-files functionality,
put it in a FindInFilesWidget class in a separate file.
2019-10-23 21:13:08 +02:00
Andreas Kling
2d460b504f HackStudio: Make the "find in files" widget more keyboard-accessible
Have Ctrl+Shift+F open the find-in-files widget and focus the text box
so you can start entering text right away.

Also make it do a search when you press the return key.
2019-10-23 21:02:02 +02:00
Andreas Kling
d3e81d2ba8 HackStudio: Start adding a "find in files" function
Projects now contain a set of TextDocument objects. Each TextDocument
represents a member file in the project. TextDocuments may not have
their file contents loaded at all times, but they will be loaded on
demand when calling TextDocument::contents().

"Find in files" works by iterating over the documents in the project
and calling find(needle) on each one. The return value from find() is
a vector of line numbers where the needle was found.

This is obviously going to need a bunch more work. :^)
2019-10-23 20:54:41 +02:00
Andreas Kling
5f5f837ec5 HackStudio: Put the console terminal wrapper in a GTabWidget
This will make it straightforward to add more things at this level.
2019-10-23 19:52:34 +02:00
Andreas Kling
29669ba661 HackStudio: Add a simple "Save" action
Pressing Ctrl+S now saves the currently open file to disk.
2019-10-22 22:25:05 +02:00
Andreas Kling
708543c3d6 HackStudio: Add a simple "Run" action
Ctrl+R will now execute "make run" in the project directory. :^)
2019-10-22 22:18:46 +02:00
Andreas Kling
654ffdef91 HackStudio: Add a simple "Build" action
Pressing Ctrl+B now invokes "make" in the project directory and routes
the output from the make command to the little terminal widget.
2019-10-22 22:15:43 +02:00
Andreas Kling
a6b153abf1 HackStudio: Show the currently open file in bold (in the project list)
Also import a little default C++ project called "little" :^)
2019-10-22 21:38:58 +02:00
Andreas Kling
2638a94094 HackStudio: Add a simple app icon and some initial menus 2019-10-21 22:13:20 +02:00
Andreas Kling
3fa16dfae2 HackStudio: "Go to line" was mixed up about 0/1-based line numbers 2019-10-21 20:33:47 +02:00
Andreas Kling
d1916700ea HackStudio: Restrict the "Go to line" shortcut to the text editor
We don't want Ctrl+L presses to be snatched while we're in the embedded
terminal, for example. :^)
2019-10-21 20:31:32 +02:00
Andreas Kling
43ccb28852 HackStudio: Embed a Terminal widget below the text editor
This will be very useful for running (and interacting with) programs
after we build them. :^)
2019-10-21 20:17:32 +02:00
Andreas Kling
c1f72e0bbf HackStudio: Show line numbers in the text editor by default 2019-10-21 19:03:09 +02:00
Andreas Kling
7eed2e968c HackStudio: Show cursor line and column in the statusbar 2019-10-21 18:50:24 +02:00
Andreas Kling
0311e8d50a HackStudio: Start working on an IDE for SerenityOS
This will be fun. :^)
2019-10-21 18:46:55 +02:00