Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ and this project adheres to http://semver.org/spec/v2.0.0.html[Semantic Versioni
== https://github.com/robotframework/RIDE[Unreleased]

=== Added
- Added Tools->Library Finder... to install libraries and Help->Open Library Documentation... . They share the same dialog, and definitions are recorded in ``settings.cfg``.
- Added context menu to install libraries and to open documentation in Grid Editor Import section. Same as above description.
- Added keyboard shortcuts ``Ctrl-Shift-Up`` and ``Ctrl-Shift-Down`` as alternatives to ``Alt-Up`` and ``Alt-Down`` to move rows in Grid and Text Editors.
- Added Settings Editor button to Preferences dialog, to edit settings.cfg.
- Created backup of settings.cfg to allow recovering some settings when broken upgrades.
Expand Down
2 changes: 1 addition & 1 deletion README.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ Likewise, the current version of wxPython, is 4.2.3, but RIDE is known to work w

`pip install -U robotframework-ride`

(3.8 <= python <= 3.13) Install current development version (**2.2dev30**) with:
(3.8 <= python <= 3.13) Install current development version (**2.2dev31**) with:

`pip install -U https://github.com/robotframework/RIDE/archive/develop.zip`

Expand Down
4 changes: 4 additions & 0 deletions src/robotide/application/CHANGELOG.html
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Changelog</title><link rel="stylesheet" type="text/css" href="docbook-xsl.css" /><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /></head><body><div xml:lang="en" class="article" lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="id1337"></a>Changelog</h2></div></div><hr /></div><p>All notable changes to this project will be documented in this file.</p><p>The format is based on <a class="ulink" href="http://keepachangelog.com/en/1.0.0/" target="_top">Keep a Changelog</a>
and this project adheres to <a class="ulink" href="http://semver.org/spec/v2.0.0.html" target="_top">Semantic Versioning</a>.</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="_ulink_url_https_github_com_robotframework_ride_unreleased_ulink"></a>1. <a class="ulink" href="https://github.com/robotframework/RIDE" target="_top">Unreleased</a></h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="_added"></a>1.1. Added</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
Added Tools→Library Finder… to install libraries and Help→Open Library Documentation… . They share the same dialog, and definitions are recorded in ``settings.cfg``.
</li><li class="listitem">
Added context menu to install libraries and to open documentation in Grid Editor Import section. Same as above description.
</li><li class="listitem">
Added keyboard shortcuts ``Ctrl-Shift-Up`` and ``Ctrl-Shift-Down`` as alternatives to ``Alt-Up`` and ``Alt-Down`` to move rows in Grid and Text Editors.
</li><li class="listitem">
Added Settings Editor button to Preferences dialog, to edit settings.cfg.
Expand Down
8 changes: 6 additions & 2 deletions src/robotide/application/releasenotes.py
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ def set_content(self, html_win, content):

<p><a class="reference external" href="https://github.com/robotframework/RIDE/">RIDE (Robot Framework IDE)</a>
{VERSION} is a new release with some enhancements and bug fixes. The reference for valid arguments is
<a class="reference external" href="https://robotframework.org/">Robot Framework</a> current version, 7.3. However,
<a class="reference external" href="https://robotframework.org/">Robot Framework</a> current version, 7.3.1. However,
internal library code is originally based on version 3.1.2, but adapted for new versions.</p>
<ul class="simple">
<li>This version supports Python 3.8 up to 3.13 (and also tested on 3.14.a7 with wxPython 4.2.3).</li>
Expand All @@ -172,6 +172,10 @@ def set_content(self, html_win, content):
</ul>
<p><strong>New Features and Fixes Highlights</strong></p>
<ul class="simple">
<li>Added <b>Tools-&gt;Library Finder...</b> to install libraries and <b>Help-&gt;Open Library Documentation...</b> .
They share the same dialog, and definitions are recorded in ``settings.cfg``.</li>
<li>Added context menu to install libraries and to open documentation in Grid Editor Import section.
Same as above description.</li>
<li>Added keyboard shortcuts <b>Ctrl-Shift-Up</b> and <b>Ctrl-Shift-Down</b> as alternatives to <b>Alt-Up</b> and
<b>Alt-Down</b> to move rows in Grid and Text Editors.</li>
<li>Improved vertical scroll in Grid Editor, by having main scroll bars out of cells.</li>
Expand Down Expand Up @@ -243,7 +247,7 @@ def set_content(self, html_win, content):
<pre class="literal-block">python -m robotide.postinstall -install</pre>
<p>or</p>
<pre class="literal-block">ride_postinstall.py -install</pre>
<p>RIDE {VERSION} was released on 06/June/2025.</p>
<p>RIDE {VERSION} was released on 16/June/2025.</p>
<!-- <br/>
<h3>May The Fourth Be With You!</h3>
<h3>Celebrate the bank holiday, 10th June, Day of Portugal, Portuguese Communities and Camões!!</h3>
Expand Down
6 changes: 4 additions & 2 deletions src/robotide/context/coreplugins.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,9 @@ def get_core_plugins():
from ..parserlog import ParserLogPlugin
from ..searchtests.searchtests import TestSearchPlugin
from ..spec.specimporter import SpecImporterPlugin
from ..spec.libraryfinder import LibraryFinderPlugin
from ..postinstall.desktopshortcut import ShortcutPlugin

return [LogPlugin, RunAnything, RecentFilesPlugin, SpecImporterPlugin, EditorPlugin, TextEditorPlugin,
KeywordSearch, TestSearchPlugin, ShortcutPlugin, ParserLogPlugin, TreePlugin, FileExplorerPlugin]
return [LogPlugin, RunAnything, RecentFilesPlugin, SpecImporterPlugin, LibraryFinderPlugin, EditorPlugin,
TextEditorPlugin, KeywordSearch, TestSearchPlugin, ShortcutPlugin, ParserLogPlugin, TreePlugin,
FileExplorerPlugin]
3 changes: 3 additions & 0 deletions src/robotide/editor/dialoghelps.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,9 @@ def get_help(title):
_("Individual items must be in format `key=value`"), '', "Library",
_("Give name, optional arguments and optional alias of the library to import."),
_("Separate multiple arguments with a pipe character like 'arg 1 | arg 2'."), "%(ALIAS)s", '',
"Library Finder", _("Give library name, library documentation URL and command to install."),
_("In the command, you can use `%%executable` as a placeholder to be replaced by the actual path"),
_(" to Python executable."), '',
"Variables", _("Give path and optional arguments of the variable file to import."),
_("Separate multiple arguments with a pipe character like 'arg 1 | arg 2'."), PH_ESCAPE, '',
"Resource", _("Give path to the resource file to import."),
Expand Down
43 changes: 43 additions & 0 deletions src/robotide/editor/editordialogs.py
Original file line number Diff line number Diff line change
Expand Up @@ -215,6 +215,49 @@ def _execute(self):
pass



class LibraryFinderDialog(_Dialog):

_history_suggester = HistorySuggester()

def __init__(self, controller, item=None, plugin=None, title=None, title_nt='Library Finder'):
if title:
self._title = title
else:
self._title = _('Library')
self._title_nt = title_nt
self._library_suggester = LibrariesSuggester(controller, self._history_suggester)
_Dialog.__init__(self, controller, item=item, plugin=plugin, title=self._title)

def _get_editors(self, item):
name = item and item.name or ''
doc_url = item and item.documentation or ''
command = item and item.command or ''
str_command = ''
if isinstance(command, list):
str_command = " | ".join(command).strip(" |")
else:
str_command = command
self._suggester = LibrariesSuggester(self._controller, self._library_suggester)
return [FileNameEditor(self, name, _('Name'), self._controller,
suggestion_source=self._suggester),
ValueEditor(self, doc_url, _('Documentation')),
ValueEditor(self, str_command, _('Command'))]

def _add_comment_editor(self, item):
_ = item # No comments :)
pass

def get_value(self):
values = _Dialog.get_value(self)
self._history_suggester.store(values[0])
return values

def _execute(self):
""" Just ignore it """
pass


class VariablesDialog(LibraryDialog):
_title_nt = 'Variables'

Expand Down
22 changes: 17 additions & 5 deletions src/robotide/editor/settingeditors.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,9 @@
from .. import utils
from ..controller import ctrlcommands
from ..publish import PUBLISHER
from ..publish.messages import (RideImportSetting, RideOpenVariableDialog, RideExecuteSpecXmlImport, RideSaving,
RideVariableAdded, RideVariableUpdated, RideVariableRemoved)
from ..publish.messages import (RideImportSetting, RideOpenVariableDialog, RideExecuteSpecXmlImport,
RideOpenLibraryDocumentation, RideSaving, RideVariableAdded,
RideVariableUpdated, RideVariableRemoved, RideExecuteLibraryInstall)
from ..utils.highlightmatcher import highlight_matcher
from ..widgets import ButtonWithHandler, Label, HtmlWindow, PopupMenu, PopupMenuItems, HtmlDialog

Expand Down Expand Up @@ -626,16 +627,27 @@ def _create_item_menu(self):
menu = self._menu
menu_nt = self._menu_nt
item = self._controller[self._selection]
if item.has_error() and item.type == 'Library':
menu = menu[:] + [_('Import Library Spec XML')]
menu_nt = menu_nt[:] + ['Import Library Spec XML']
if item.type == 'Library':
menu = menu[:] + [_('Open Library Documentation')]
menu_nt = menu_nt[:] + ['Open Library Documentation']
if item.has_error() and item.name != "Remote":
menu = menu[:] + [_('Import Library Spec XML'), _('Install Library')]
menu_nt = menu_nt[:] + ['Import Library Spec XML', 'Install Library']
return menu, menu_nt

@staticmethod
def on_import_library_spec_xml(event):
__ = event
RideExecuteSpecXmlImport().publish()

def on_open_library_documentation(self, event):
item = self._controller[self._selection]
RideOpenLibraryDocumentation(item=item.name).publish()

def on_install_library(self, event):
item = self._controller[self._selection]
RideExecuteLibraryInstall(item=item.name).publish()

def on_edit(self, event):
setting = self._get_setting()
self._show_import_editor_dialog(
Expand Down
Loading