1
0
mirror of https://github.com/arduino/Arduino.git synced 2025-01-20 09:52:13 +01:00

72 Commits

Author SHA1 Message Date
Martino Facchin
4c8ac04727 Preferences: allow smaller window since checkboxes take less space
Fixes #8238
2019-04-02 16:20:58 +02:00
Martino Facchin
b1253e2f0a Preferences: arrange checkboxes into two columns 2019-04-02 16:20:58 +02:00
Georges A
8309fb2428 typo: renamed showPrerefencesData to showPreferencesData 2018-11-21 12:04:58 +01:00
Mumfrey
794ef806f1 Support selectable, user-defined themes contained in zip files 2018-05-08 16:53:55 +02:00
Martino Facchin
1f9d99b699 Add copy/paste contextual menu to Firnd/replace text fields
Fixes #4883
2018-05-02 16:17:06 +02:00
Corey Knapp
9891a6ba21 Improve accessibility in the Preferences dialog
This commit makes the Preferences dialog more usable by accessibility devices like screen readers.

Previously, a screen reader would only read the content of the text boxes. By using JLabel's setLabelFor() feature (and in some extreme cases, setAccessibleName()), a screen reader will know that a label is assigned to a text field. For example, instead of just reading "12", it will now read "Editor font size: 12".
2017-11-10 07:57:38 -05:00
Martino Facchin
2191315123 [Pref panel] Remove gaps on confirmation button to fit 600px height
Should solve #4753
2017-07-05 11:19:46 +02:00
Cristian Maglie
626a00a9bf Show the dialog just once when there are many unsaved sketches 2017-05-16 14:53:27 +02:00
Cristian Maglie
e500c7c41f Enabling "external editor" now requires to save all sketches.
Fix #6196
2017-05-16 14:53:27 +02:00
Martino Facchin
5b6adec95f add preference checkbox for core cache 2017-03-20 17:31:38 +01:00
Cristian Maglie
cf54cce660 SplashScreenHelper output progress in console for text-only mode
This commit makes this changes:

- SplashScreenHelper is now local in Base constructor
- if SplashScreenHelper is instantiated with a null SplashScreen
  instance then it outputs progress in console and avoid to make
  calls to Swing toolkit
- The parsing of command line arguments is anticipated so we can
  determine if we are in command line or GUI mode early and setup
  objects that produces output to not use graphics toolkits.
- In this case the SplashScreenHelper is initialized with a real
  splashscreen only if we are in GUI mode
2016-11-25 15:04:24 +01:00
Cristian Maglie
bd7e76533a Removed redundant type specifiers for generics 2016-09-29 20:15:56 +02:00
Cristian Maglie
1efa07f010 Enable visibility of selection on find
Fix #5380
2016-09-20 15:31:17 +02:00
Cristian Maglie
c5a6a44b55 Simplify FindReplace.find() logic (part 2)
The snippet:

    boolean wrapNeeded = false;
    if (wrap && nextIndex == -1) {
      // if wrapping, a second chance is ok, start from the end
      wrapNeeded = true;
    }

Can be moved inside the `if (nextIndex == -1)` that follows, this way:

    if (nextIndex == -1) {
      boolean wrapNeeded = false;
      if (wrap) {
        // if wrapping, a second chance is ok, start from the end
        wrapNeeded = true;
      }

      [...CUT...]

      if (wrapNeeded) {
        nextIndex = backwards ? text.lastIndexOf(search) : text.indexOf(search, 0);
      }
    }

but since `wrapNeeded` is used only at the very end of the `if` statement
we can move it forward:

    if (nextIndex == -1) {
      [...CUT...]

      boolean wrapNeeded = false;
      if (wrap) {
        // if wrapping, a second chance is ok, start from the end
        wrapNeeded = true;
      }
      if (wrapNeeded) {
        nextIndex = backwards ? text.lastIndexOf(search) : text.indexOf(search, 0);
      }
    }

and finally simplify it by removing `wrapNeeded` altogether:

    if (nextIndex == -1) {
      [...CUT...]

      if (wrap) {
        nextIndex = backwards ? text.lastIndexOf(search) : text.indexOf(search, 0);
      }
    }
2016-09-20 13:58:36 +02:00
Cristian Maglie
47fcff77d5 Simplify FindReplace.find() logic (part 1)
The snippet:

    boolean wrapNeeded = false;
    if (wrap && nextIndex == -1) {
      // if wrapping, a second chance is ok, start from the end
      wrapNeeded = true;
    }

is present on both sides of the `if` statement so it can be factored out.
2016-09-20 13:52:24 +02:00
Cristian Maglie
9723726387 Call ensureOffsetNotInClosedFold only when a match is found 2016-09-20 13:45:11 +02:00
Matthijs Kooijman
c927237912 Fix tab order in FindReplace
When searching through all tabs, the order was accidentally reversed.
This was broken by commit d2bac86 (Remove tab switching logic from
Sketch).

This also fixes a problem where "replace all" would only work on the
first and last tab (since it would search backwards from the first tab
to the last tab and then conclude it was done).

This fixes a part of #5380.
2016-09-19 12:05:11 +02:00
Martino Facchin
b5223cc576 Ensure that the selected code is not folded during "Search and Replace"
Fixes #4845
2016-08-26 16:42:44 +02:00
Martino Facchin
f96f1d321a add overloaded method to NotificationPopup to tune autoclose 2016-08-26 16:42:44 +02:00
Matthijs Kooijman
d2bac8659e Remove tab switching logic from Sketch
This lets all code directly call `Editor.selectTab()`, or the newly
introduced `Editor.selectNextTab()` or `Editor.selectPrevTab()`. This
also adds a new `Editor.findTabIndex(String)` to look up a tab based on
the filename (what `Sketch.setCurrentCode(String)` used to do). At some
point, this method might need to be removed, but for now it allows other
code to keep working with minimal changes.
2016-08-26 16:42:44 +02:00
Matthijs Kooijman
6b31cffaec Add getTabs() and getCurrentTabIndex() to Editor and use them
Previously, some of the GUI code would use Editor.getSketch() to get the
current sketch, and Sketch.getCurrentCode() to find out the currently
selected tab. Since this code is really concerned with the currently
open tab in the GUI, it makes more sense to query the Editor tabs list
directly.

This removes all references the current sketch code, as tracked by
Sketch, external to Sketch itself. This prepares for removing the
current tab tracking from Sketch later.
2016-08-26 16:42:44 +02:00
Matthijs Kooijman
ca573351bb Do not store file contents in SketchCode
Now that each file in the sketch has its own text area in the GUI, it is
no longer needed to store the (possibly modified) contents of each file
inside SketchCode. Keeping the contents in the text area is sufficient.
Doing so allows removing the code that dealt with copying contents from
the text area into the SketchCode instance at the right time, which was
fragile and messy.

However, when compiling a sketch, the current (modified) file contents
still should be used. To allow this, the TextStorage interface is
introduced. This is a simple interface implemented by EditorTab, that
allows the SketchCode class to query the GUI for the current contents.
By using an interface, there is no direct dependency on the GUI code. If
no TextStorage instance is attached to a SketchCode, it will just assume
that the contents are always unmodified and the contents from the file
will be used during compilation.

When not using the GUI (e.g. just compiling something from the
commandline), there is no need to load the file contents from disk at
all, the filenames just have to be passed to arduino-builder and the
compiler. So, the SketchCode constructor no longer calls its `load()`
function, leaving this to the GUI code to call when appropriate. This
also modifies the `SketchCode.load()` function to return the loaded
text, instead of storing it internally.

To still support adding new files to a sketch (whose file does not
exist on disk yet), the EditorTab constructor now allows an initial
contents to be passed in, to be used instead of loading from disk. Only
the empty string is passed for new files now, but this could also be
used for the bare minimum contents of a new sketch later (which is now
down by creating a .ino file in a temporary directory).

Another side effect of this change is that all changes to the contents
now happen through the text area, which keeps track of modifications
already. This allows removing all manual calls to `Sketch.setModified()`
(even more, the entire function is removed, making `Sketch.isModified()`
always check the modification status of the contained files).
2016-08-26 16:42:44 +02:00
Matthijs Kooijman
982d4f3fbf Use a separate RSyntaxTextArea for each editor tab
RSyntaxTextArea appears to support using a single instance and replacing
the underlying text and document when switching between tabs, but in
practice this support is not complete and even though the
RSyntaxTextArea developers did some work to improve the situation, they
recommend to just use a seperate instance for each tab.

This commit implements exactly that. A new class EditorTab is introduce
to wrap the RSyntaxTextArea and containing scroll pane, and to
encapsulate the code related to handling the text area itself. Doing so
removes some quirks and prepares for some later additions. In
particular, error highlights are now no longer shared between all tabs,
which was previously the case.

This commit mostly moves code from Editor into EditorTab, and updates
the callers to use getCurrentTab() and call methods on the result
instead of calling them on Editor. Some code is added to take care of
creating multiple EditorTab objects and switching between them. Some
small changes have been made to make the flow of opening files work,
though these are mostly a bit hacky.

While moving code, changes to the rest of the code were kept minimal,
retaining existing interfaces as much as possible. This sometimes result
in less than ideal code, which should be cleaned up in subsequent
commits.

The SketchCodeDocument class has been pretty much emptied out, since
it was mostly used to store things for tabs in the background, which are
now just stored in each RSyntaxTextArea separately. The last remaining
bits of this class can probably be moved or implemented differently
later, so it can be removed.

The entire flow of working with sketches and files needs to be cleaned
up next, so no thorough attempt at testing this commit was done. It is
likely that there are plenty of corner cases and race conditions, which
will be fixed once the reset of the code is cleaned up.

Fixes #3441
2016-08-26 16:42:44 +02:00
Cristian Maglie
8d7ee63c70 Autoclose notification popup after 10 seconds. 2016-04-04 13:30:42 +02:00
Cristian Maglie
1a7eaaf8b2 Fix always-on-top notification popup 2016-03-31 18:49:44 +02:00
Cristian Maglie
b02ce54387 Removed leftover stub for testing NotificationPopup dialog 2016-02-01 10:18:41 +01:00
Cristian Maglie
57c6d096f6 Notification pop-up is now correctly scaled 2016-01-26 16:48:14 +01:00
Cristian Maglie
2f0b0db5ba Set maximum scale to 400% 2016-01-26 12:09:57 +01:00
Cristian Maglie
409f3161c8 Added GUI scaling in preference panel. 2016-01-26 12:09:57 +01:00
Cristian Maglie
08ad60032f Fix for some font rendering problems on linux 2016-01-26 12:09:57 +01:00
Cristian Maglie
d920c06699 Now the IDE use vectorial images whenever possible
The caller of Theme.getThemeImage(...) now pass only the name of
the needed resource and the theme folder is searche in the following
order:

  - name.svg
  - name.png (if svg is not available)
  - name@2x.png (if none of the above are available or if 1x png is
    too low resolution for the current scaling factor)
2016-01-26 12:09:57 +01:00
Cristian Maglie
f239f5b5ab Moving getLibImage and getThemeImage into Theme class 2016-01-26 12:09:56 +01:00
Cristian Maglie
5637130818 Converted toolbar icons to png 2016-01-26 12:09:55 +01:00
Federico Fissore
1862827c25 Portable folder can now be set to any arbitrary path, not just subfolders
of "portable". Fixes #4103
2015-11-19 13:43:49 +01:00
Federico Fissore
2e80ee5bbd Testing translation for proper formatting. This test will fail when a
translation uses wrong syntax, thus avoiding any future issue similar to #4095
2015-11-06 17:24:26 +01:00
Federico Fissore
152aa595ec Updated splash screen 2015-11-03 13:09:30 +01:00
Federico Fissore
31e8706cf4 Update notification popup was not sticking to bottom left corner when windows was resized. Fixes #4068 2015-11-03 09:03:32 +01:00
Federico Fissore
320dcef67e FindReplace: setting default button each time the window is made visible, because Find button was let unselected with subsequent Edit>Find clicks on Windows. Fixes #3959 2015-11-02 12:44:35 +01:00
Federico Fissore
3d3fc08993 Made findreplace dialog NOT resizable 2015-10-28 11:19:13 +01:00
Cristian Maglie
869137469c Silence unused warning in I18N class 2015-10-20 18:37:59 +02:00
Federico Fissore
fd79bfe8c9 Implemented Go to Line menu and shortcut CTRL+L. Fixes #976 2015-09-25 16:13:42 +02:00
Federico Fissore
4f2621bd31 Updated translations. Some new languages graduated 2015-09-21 11:07:36 +02:00
Federico Fissore
57ed2b2416 Updating splashscreen text ONLY if visible. Fixes #3808 2015-09-17 13:18:35 +02:00
Federico Fissore
0c7e0d6bb4 CustomProxySelector: auto proxy (PAC) needs login info too 2015-08-21 08:41:50 +02:00
Federico Fissore
708da3bd86 Introducing CustomProxySelector 2015-08-21 08:41:50 +02:00
Federico Fissore
d884a2d14f Preferences: proxy settings are back again (GUI and key/value pairs storage only) 2015-08-21 08:41:50 +02:00
Federico Fissore
a43757d5c3 Update notification: UX feedback 2015-08-06 10:27:51 +02:00
Federico Fissore
0bb7fd7e8b Cancelling ContributionsSelfCheck will prevent indexes from being updated.
Opening boards/libs manager when NotificationPopup is shown will close it
2015-08-06 10:27:51 +02:00
Federico Fissore
f9612bcdbd Updatable boards support and libraries notification 2015-08-06 10:27:51 +02:00
Federico Fissore
cb292d6114 Got rid of Guava lib: java 8 has its features builtin 2015-08-05 12:09:24 +02:00