1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-19 07:35:07 +00:00
Commit graph

1186 commits

Author SHA1 Message Date
thankyouverycool
a5fefbf840 LibGUI: Resize TextEditor ruler based on needed space
Ruler width is now calculated according to the number of digits
in the line count.
2020-08-16 19:39:46 +02:00
Andreas Kling
d396766058 LibGUI: Require a model pointer for ModelIndex::is_valid()
This was not an issue anywhere in practice, but let's make it part of
the definition of a valid model index.
2020-08-16 16:44:09 +02:00
Andreas Kling
a66e55ec64 LibGUI: Make SortingProxyModel clear view selections aggressively
When invalidating all indexes, tell all attached views to just wipe
their selections. This is the best we can do for now.
2020-08-16 16:44:09 +02:00
Andreas Kling
9102b624ac LibGUI+DevTools+Applications: Use ModelIndex::data() in many places
This way you don't have to keep track of which model it came from.
2020-08-16 16:44:09 +02:00
Andreas Kling
96f98b1fc9 LibGUI: Simplify TableCellPaintingDelegate API slightly
No need to pass the Model *and* a ModelIndex, the index knows which
model it belongs to anyway.
2020-08-16 16:44:09 +02:00
Andreas Kling
f882424869 LibGUI: Add ModelIndex::data(ModelRole)
This is a convenience API that makes accessing model data easier.
2020-08-16 16:44:09 +02:00
Andreas Kling
a1e381a0f8 LibGUI: Move GUI::Model::Role to GUI::ModelRole
This is preparation for using ModelRole in the ModelIndex API.
2020-08-16 16:44:09 +02:00
Andreas Kling
f6d7204689 LibGUI: Enable switching FilePicker into columns view mode :^) 2020-08-16 16:44:09 +02:00
Andreas Kling
4c23e75d2f LibGUI: Enable using a ColumnsView inside MultiView :^)
Now that SortingProxyModel has greatly improved support for hierarchies
we can enable this without crashing.
2020-08-16 16:44:09 +02:00
Andreas Kling
17992fbab7 LibGUI: Resort SortingProxyModel when source invalidates if possible
If the source model invalidates with indexes still good, we can simply
resort the proxy's mappings.
2020-08-16 16:44:09 +02:00
Andreas Kling
6715b696fa LibGUI: Maintain selections across SortingProxyModel resorts
Now that we sort models imperatively, it's easy to preserve any
view selection across a local (same-parent) resort.
2020-08-16 16:44:09 +02:00
Andreas Kling
e1ed71ef9e LibGUI: Make model sorting imperative and move order to AbstractView
Instead of SortingProxyModel having a column+order, we move that state
to AbstractView. When you click on a column header, the view tells the
model to resort the relevant column with the new order.

This is implemented in SortingProxyModel by simply walking all the
reified source/proxy mappings and resorting their row indexes.
2020-08-16 16:44:09 +02:00
Andreas Kling
8c8281de4e LibGUI: Make SortingProxyModel support hierarchical models
We now create multiple levels of internal mappings between source
and proxy indexes, to support tree models.

This breaks selection update after resort, which we'll have to
deal with somehow.
2020-08-16 16:44:09 +02:00
Andreas Kling
05dd9e5bfb LibGUI: Virtualize SortingProxyModel comparator
This patch adds SortingProxyModel::less_than(ModelIndex, ModelIndex)
which is now used to implement the sort order. This allows you to
subclass SortingProxyModel if you want to tweak how sorting works.

Get rid of the awkward case sensitivity logic in SortingProxyModel
since that can now be done outside. Turns out nobody was actually
using it anyway, but it seems like something we will want to do
in the future someday.
2020-08-16 16:44:09 +02:00
Linus Groh
55bd54f91f LibGUI: Don't center dialog within parent if window is not visible
Windows have an initial off-screen rect, so when a dialog is created and
shown before its parent window, in which it is centered, it would be
invisible to the user.

Fixes #3172.
2020-08-16 16:37:39 +02:00
Muhammad Zahalqa
a68650a7b4
AK: HashTable add a constructor that allows preallocation of capacity + Use in CppLexer. (#3147)
1. Add general utility to get array number of elements.
2. Add Needed API to AK::HashTable
3. Refactor CppLexer initialization
2020-08-16 11:04:00 +02:00
Nico Weber
19ee853cd0 LibGUI: Make ProcessChooser accept double clicks on rows as "Ok" click 2020-08-15 19:07:47 +02:00
Nico Weber
cd7b4e813f LibGUI: Remove reference captures of stack variables in ProcessChooser
Since all reference-captured variables where pointers to non-stack
objects whose owners outlive the lambdas, things were fine in practice,
but it's a bit brittle and it makes a change I want to make in this code
more difficult.
2020-08-15 19:07:47 +02:00
Linus Groh
0cab3bca2f LibGUI: Add and use Window::center_on_screen()
Various applications were using the same slightly verbose code to center
themselves on the screen/desktop:

Gfx::IntRect window_rect { 0, 0, width, height };
window_rect.center_within(GUI::Desktop::the().rect());
window->set_rect(window_rect);

Which now becomes:

window->resize(width, height);
window->center_on_screen();
2020-08-15 17:38:19 +02:00
Itamar
627f258c97 HackStudio: Use CodeDocument instead of TextDocument
This commit adds a new GUI widget type, called CodeDocument, which
is a TextDocument that can additionaly store data related to the
debugger.

This fixes various bugs and crashes that occured when we switched
between files in debug mode, because we previously held stale breakpoint
data for the previous file in the Editor object.
We now keep this data at the "document" level rather than the Editor
level, which fixes things.
2020-08-15 15:06:35 +02:00
Linus Groh
47d7faa998 LibGUI: Update active tooltip when source widget changes the label
Application::show_tooltip() now keeps track of the application's active
tooltip source widget so it can be updated while being shown when the
same widget updates its tooltip label.
Application::hide_tooltip() will unset the tooltip source widget,
respectively.

This is pretty useful for the ResourceGraph applet's tooltips!

Also re-use the Application::TooltipWindow's rect position in its
set_tooltip() method to avoid flickering from the window temporarily
being moved to 100, 100 and the position adjusted moments later.
2020-08-15 13:45:08 +02:00
Uma Sankar
d5a77de906 LibGUI: Add a timer in ProcessChooser to get processes for every 1000ms 2020-08-15 00:20:34 +02:00
Andreas Kling
c1e0047b48 LibGUI: When focusing a TextEditor via keyboard, select all contents
This feels very natural and allows you to start typing immediately
knowing it will replace whatever was in the text box before.
2020-08-15 00:05:45 +02:00
Andreas Kling
75b8f4e4e6 LibGUI: Make focus events more aware of why focus is changing
This patch adds GUI::FocusEvent which has a GUI::FocusSource.
The focus source is one of three things:

- Programmatic
- Mouse
- Keyboard

This allows receivers of focus events to implement different behaviors
depending on how they receive/lose focus.
2020-08-15 00:05:45 +02:00
Andreas Kling
110b3d89d3 LibGUI: Export GUI_FOCUS_DEBUG to visualize the focused widget
Using a command-line argument for this clashed with ArgsParser so let's
use an environment variable instead. I feel like Sergey told me to do
this at some point anyway. :^)
2020-08-15 00:05:45 +02:00
Andreas Kling
b97e42dcaa LibGUI: Make ModelSelection non-copyable and non-movable
These are meant to be attached to an AbstractView at all times.
2020-08-14 12:15:11 +02:00
Linus Groh
e77991e63a LibGUI: Fix Widget::screen_relative_rect() for WindowType::MenuApplet
This was using window()->position(), which is unset for windows with
WindowType::MenuApplet. Now it checks the window type and then uses
rect_in_menubar() for MenuApplet windows and rect() for everything else.

This makes tooltips show up for MenuApplet windows, previously they were
positioned off-screen :^)
2020-08-14 10:28:03 +02:00
Linus Groh
e58d3b8481 LibGUI: Add Window::window_type()
We already have Window::set_window_type(), so a getter for m_window_type
makes sense as well.
2020-08-14 10:28:03 +02:00
Andreas Kling
21bb269919 LibGUI: Add ModelIndex::model()
Let's expose this so we can use it in some assertions later.
2020-08-13 21:09:39 +02:00
Andreas Kling
5099e76ce6 LibGUI: Remove unused bool SortingProxyModel::m_sorting 2020-08-13 20:18:11 +02:00
Andreas Kling
686ee2bf04 LibGUI: Rename ModelClient::on_model_update() => model_did_update()
This follows the typical client callback naming scheme used elsewhere
and doesn't collide with the "on_foo" Function hook convention.
2020-08-13 20:18:11 +02:00
Andreas Kling
4088beb8eb LibGUI: Remove Model::sibling() since it's the same as index()
... I'm not sure what the idea was here, but since these functions do
the same thing, let's only have index().
2020-08-13 20:18:11 +02:00
Andreas Kling
fe19cf0ff2 LibGUI: Move Model::index() out of line 2020-08-13 20:18:11 +02:00
Andreas Kling
82e949aa7c LibGUI: Rename SortingProxyModel "target" to "source" instead 2020-08-13 20:18:11 +02:00
Linus Groh
675d8eec60 LibGUI: Fix ColorPicker custom color offset
Previously the ColorPicker would get the custom color directly from the
window, this was changed in d7d5788469 to
get the color from the underlying bitmap instead - without taking the
bitmap's scaling into effect though, so resulting colors were off by
quite a bit.

Fixes #3113.
2020-08-13 16:58:31 +02:00
Linus Groh
728d4649e4 LibGUI: Fix ComboBox desktop intersection rect
Subtracting 128 from the desktop rect's height was far to much and
and leading to weird rendering issues - now it's calculated exactly from
taskbar and menubar heights as well as a little additional offset to
make it fit perfectly.

Fixes #3115.
2020-08-13 16:06:02 +02:00
Linus Groh
852770687a LibGUI: Add Desktop::{taskbar,menubar}_height() 2020-08-13 16:06:02 +02:00
Andreas Kling
3dd15da7b1 LibGUI: Move file icon lookup into a separate FileIconProvider
Let's get it out of FileSystemModel so you can look up a nice icon for
a path without needing a model.
2020-08-12 20:41:13 +02:00
Ben Wiederhake
1396ce8a9b LibGUI: Mark compilation-unit-only functions as static
This enables a nice warning in case a function becomes dead code.
2020-08-12 20:40:59 +02:00
Nico Weber
cdf1282419 ScrollBar: Let clicking the gutter scroll by one page
Shift-clicking has the old behavior of jumping to the click position.

This matches scrollbar behavior in macOS and Windows, and in many Linux apps.
2020-08-12 11:02:30 +02:00
Nico Weber
326261094d ScrollBar: Simplify ScrollBar::scroll_to_position() 2020-08-12 11:02:30 +02:00
Nico Weber
8eee5312c5 GUI: Rename ScrollBar::scrubber_size() to ScrollBar::visibile_scrubber_size() 2020-08-12 11:02:30 +02:00
Nico Weber
cb2d56b909 GUI: Give MouseEvent shift() / ctrl() / alt() / logo() functions 2020-08-12 11:02:30 +02:00
Nico Weber
eab7712ab0 GUI: Extract a ScrollBar::scroll_to_position method 2020-08-12 11:02:30 +02:00
Nico Weber
ce95628b7f Unicode: Try s/codepoint/code_point/g again
This time, without trailing 's'. Ran:

    git grep -l 'codepoint' | xargs sed -ie 's/codepoint/code_point/g
2020-08-05 22:33:42 +02:00
Nico Weber
19ac1f6368 Revert "Unicode: s/codepoint/code_point/g"
This reverts commit ea9ac3155d.
It replaced "codepoint" with "code_points", not "code_point".
2020-08-05 22:33:42 +02:00
Linus Groh
9ef834384d LibGUI: Use set_cursor() in TextEditor::set_document()
Instead of setting m_cursor directly to reset the cursor position,
TextEditor::set_document() now uses set_cursor() which will call cursor
change callback functions, if any.

This fixes a bug in HackStudio where the cursor information text would
not update immediately after changing the active TextDocument, even
though the cursor is always visibly being reset to 0, 0.
2020-08-05 17:27:14 +02:00
Andreas Kling
ea9ac3155d Unicode: s/codepoint/code_point/g
Unicode calls them "code points" so let's follow their style.
2020-08-03 19:06:41 +02:00
Mathieu PATUREL
7d12e0c7f1 LibGUI: WidgetScrollable scrolls horizontally when shift is pressed 2020-08-03 18:16:49 +02:00
Nico Weber
18e8fd333c CppLexer: Actually give raw strings type RawString
This fixes a regrettable mistake in 9ee1edae2a.
No behavior change.
2020-08-03 15:54:33 +02:00