1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 11:38:11 +00:00
Commit graph

427 commits

Author SHA1 Message Date
Andreas Kling
233a9554a5 HackStudio: Tweak Files/Classes tab views
Put a bit of padding around the views, and retitle the "ClassView" tab
to simply "Classes".
2021-05-10 13:45:49 +02:00
Andreas Kling
563d3bdcc9 HackStudio: Use is<GitWidget>() instead of comparing class_name() 2021-05-10 13:45:49 +02:00
Andreas Kling
0126c81a7f HackStudio: Remove the visual form editor
Okay we've tried this twice now, and nobody ends up working on it.
Meanwhile, more and more people are using GML, and I think it's safe
to say that GML is the future of GUI development here.

So let's get rid of the old form editor from HackStudio and pave the
way for integrating GML editing into the IDE instead. :^)
2021-05-10 12:43:34 +02:00
Itamar
5c19a48b95 CppLanguageServer: Cache declarations from headers in every document
Previously, to get the globally available declarations in a document
(including declarations from headers), we would have to recursively
walk the #include tree and get the declarations of each included
document.

To improve upon this, we now store a HashTable of globally available
declaration from included header files in each document, and populate
it when we first process the document.

Before this, invoking simple autocomplete actions in code documents
that had a very large #include tree (e.g when <LibGUI/Widget.h> was
included) hang the CppLanguageServer process and used 100% CPU until
the process ran out of memory.

Now, the autocomplete request in that situation returns immediately :^)
2021-05-09 20:58:27 +02:00
Itamar
c85775d9f5 CppLanguageServer: Call Parser::parse() inside create_document_data() 2021-05-09 20:58:27 +02:00
Itamar
5c42dc854d LibCpp: Rename m_definitions=>m_preprocessor_definitions 2021-05-09 20:58:27 +02:00
Itamar
de9be7cd70 LanguageServers: Fix incorrect use of adopt_ref in FileDB::get()
This fixes a bug introduced in c13d763 that caused the LanguageServer
process to crash whenever a file was edited in HackStudio.
2021-05-09 20:58:27 +02:00
Brendan Coles
57c96ce501 UserspaceEmulator: Allow running executables not in PATH 2021-05-09 09:39:40 +02:00
Andreas Kling
244665d99c LibGUI: Some tweaks for TextEditor's will-execute-command virtual
Renamed the virtual from "on_edit_action" to "will_execute" so it
doesn't clash with our convention for Function hook names.

Also tighten the parameter type to GUI::TextDocumentUndoCommand
since that's the only kind of command it will receive.
2021-05-08 22:17:50 +02:00
Itamar
8a01167c7d AK: Add missing GenericTraits<NonnullRefPtr>
This enables us to use keys of type NonnullRefPtr in HashMaps and
HashTables.

This commit also includes fixes in various places that used
HashMap<T, NonnullRefPtr<U>>::get() and expected to get an
Optional<NonnullRefPtr<U>> and now get an Optional<U*>.
2021-05-08 18:10:56 +02:00
Itamar
77d462426b HackStudio: Remove redundant insertion to m_open_files
previous_open_project_file already exists in m_open_files under the
active_file() key.
2021-05-08 18:10:56 +02:00
Andreas Kling
ee19f7c0aa LibGUI: Use UndoStack::on_state_change inside TextDocument/TextEditor
Have TextDocument listen for state changes on the internal undo stack,
and forward those to all clients via a new virtual function.

This simplifies updating the can_undo / can_redo states of TextEditor.
2021-05-08 13:49:34 +02:00
Gunnar Beutner
eed6ce8b8b Profiler: Fix scrolling behavior
When resizing the timeline view the timelines should scroll to the
bottom when the resize operation reveals space that is beyond the
view.
2021-05-08 09:55:24 +02:00
Gunnar Beutner
210d2d270d Profiler: Let the user select more than one process 2021-05-08 09:53:53 +02:00
Carlos César Neves Enumo
325d9445fd Profiler: Migrate mouse events to TimelineView
This change allows for continuous mouse events when hovering the
layout spaces between tracks.
2021-05-08 09:53:06 +02:00
Carlos César Neves Enumo
99f141522a Profiler: Fix timeline wrong initial horizontal position
Just after launching the app, when hovering the timeline, it would
start at Time: 2000ms. It fixes itself after scrolling.
2021-05-08 09:53:06 +02:00
Gunnar Beutner
b25eba10d2 Profiler: Make the timeline resizable
This just moves the timeline and the tab widget into
a horizontal splitter to make them resizable.
2021-05-08 00:30:38 +01:00
Brian Gianforcaro
e3ee539fea Profiler: Don't iterate all events when filtering timeline view
There is no need to iterate through all events in a profile when
loading the timeline view, as soon as we see one event we can
move on to the next process.
2021-05-07 15:35:23 +02:00
Gunnar Beutner
43b3fd748a Profiler: Make processes selectable in the timeline view 2021-05-07 15:26:51 +02:00
Gunnar Beutner
7b9cabb5a3 Profiler: Remove the old process selection widget 2021-05-07 15:26:51 +02:00
Gunnar Beutner
2d6091be10 Profiler: Move filter checks into their own function 2021-05-07 15:26:51 +02:00
Andreas Kling
fb6d236ba2 Profiler: Add fixed track headers to the timeline view
The architecture here is a little bit convoluted. I ended up making a
new container widget (TimelineContainer) that works similarly to
GUI::ScrollableContainerWidget but has two subwidgets (a fixed header
that only scrolls vertically, and the timeline view that scrolls on
both axes.)

It would be nice to generalize this mechanism eventually and move it
back into LibGUI, but for now let's go with a special widget for
Profiler so we can continue iterating on the GUI. :^)
2021-05-06 22:18:45 +02:00
Andreas Kling
59da118f2e Profiler: Add a statusbar and show the timeline selection info in it :^) 2021-05-06 22:18:45 +02:00
Andreas Kling
814200f8da Profiler: Rename ProfileTimelineWidget => TimelineTrack 2021-05-06 22:18:45 +02:00
Andreas Kling
abc3ad01b2 Profiler: Add TimelineView widget and make the timeline cursor global
There's no longer a cursor in each process timeline, instead the parent
widget keeps track of it (along with the selection) and it all moves
in sync.
2021-05-06 22:18:45 +02:00
Andreas Kling
84c4c2d884 Profiler: Tweak timeline widget appearance
Use a thinner frame, and ColorRole::Base for the background.
2021-05-06 22:18:45 +02:00
Andreas Kling
9273054b2b Profiler: Show one timeline per process :^)
Instead of smashing together all the samples into a single timeline,
make one per process and put them all in a ScrollableContainerWidget.

This makes it much easier to see which processes were active and when.
No timeline is displayed for processes with zero samples in the profile.
2021-05-06 22:18:45 +02:00
Tom
3aaffa2c47 LibGUI: Move widget registration to LibCore
This also moves Widget::load_from_json into Core::Object as a virtual
function in order to allow loading non-widget objects in GML (e.g.
BoxLayout).

Co-authored-by: Gunnar Beutner <gbeutner@serenityos.org>
2021-05-06 08:50:39 +02:00
Andreas Kling
dbbc6096a9 Profiler: Move everything into the "Profiler" namespace 2021-05-04 20:59:32 +02:00
Andreas Kling
19bef3877a Profiler: Don't link against LibCoreDump 2021-05-04 14:38:43 +02:00
Brian Gianforcaro
cc94495a29 Profiler: Print addresses in debug log in hex. 2021-05-04 10:57:55 +02:00
Gunnar Beutner
8a6db55e79 Userland: Add try_* IPC handlers
This enables calling auto-generated IPC methods in a way that doesn't
crash the client if the peer disconnects.
2021-05-03 21:14:40 +02:00
Gunnar Beutner
34cf5cf07f IPCCompiler: Don't generate handlers for response messages
For some reason we had IPC handler methods for the return types. This
removes those handlers.
2021-05-03 21:14:40 +02:00
Gunnar Beutner
9e22e9ce88 Userland: Use snake case names in .ipc files
This updates all .ipc files to have snake case names for IPC methods.
2021-05-03 21:14:40 +02:00
Gunnar Beutner
eb21aa65d1 Userland: Make IPC results with one return value available directly
This changes client methods so that they return the IPC response's
return value directly - instead of the response struct - for IPC
methods which only have a single return value.
2021-05-03 21:14:40 +02:00
Gunnar Beutner
5bb79ea0a7 Userland: Update IPC calls to use proxies
This updates all existing code to use the auto-generated client
methods instead of post_message/send_sync.
2021-05-03 21:14:40 +02:00
Gunnar Beutner
78803ce384 Userland: Split IPC endpoints into proxies and stubs
This enables support for automatically generating client methods.
With this added the user gets code completion support for all
IPC methods which are available on a connection object.
2021-05-03 21:14:06 +02:00
Gunnar Beutner
065040872f Userland: Change IPC funcs to use plain arguments instead of a struct
Instead of having a single overloaded handle method each method gets
its own unique method name now.
2021-05-03 21:14:06 +02:00
Andreas Kling
d47f15ab8b LibGUI: Rename ScrollableWidget => AbstractScrollableWidget 2021-05-03 21:03:13 +02:00
Gunnar Beutner
e468bf08b1 UserspaceEmulator: Make sure TLS allocation behavior matches kernel 2021-05-03 08:25:44 +02:00
Gunnar Beutner
92cc8a47dd UserspaceEmulator: Add missing argument for sys$allocate_tls 2021-05-03 08:25:44 +02:00
Gunnar Beutner
ce0c76dcb5 UserspaceEmulator: Add stub for sys$futex 2021-05-03 08:25:44 +02:00
Itamar
329cb134d6 HackStudio: Show dialog on build and exit if there are unsaved changes
If the user tries to exit HackStudio, or build the project, when there
are unsaved changes in some of the editors, A Yes/No/Cancel dialog will
be shown.
2021-05-02 22:49:25 +02:00
Itamar
672b14b70d HackStudio: Add a "document dirty" indicator to the EditorWrapper 2021-05-02 22:49:25 +02:00
Itamar
7f2e1991cc HackStudio: Get rid of m_currently_open_file member
It had the following FIXME:
// FIXME: This doesn't seem compatible with multiple split editors

In practice this member was used to get the filename of the currently
active edtior. So we now get it directly from the currently active
EditorWrapper.
2021-05-02 22:49:25 +02:00
Andreas Kling
68a0e4f8d5 LibGUI+HackStudio: Remove editing specific hacks from GUI::Command
Use is<T> to check for specific types of command in HackStudio instead
of cluttering up GUI::Command with specialized getters.
2021-05-02 14:49:46 +02:00
Gunnar Beutner
889359b6f9 Userland: Make IPC handlers return void if they don't have any outputs 2021-05-02 08:11:38 +02:00
Gunnar Beutner
7cf2839a26 Userland: Get rid of the OwnPtr<...> boilerplate code for IPC handlers 2021-05-02 08:11:38 +02:00
Valtteri Koskivuori
1a015dc379 HackStudio: Use common copy functions in ProjectTemplate.cpp
This removes the duplicated copy logic and uses the ones from Core::File
instead.
2021-05-02 00:22:33 +02:00
Gunnar Beutner
6cf59b6ae9 Everywhere: Turn #if *_DEBUG into dbgln_if/if constexpr 2021-05-01 21:25:06 +02:00