O3de updates restricted download (#229)
* fix project centric set current * Adding newline to project.json template * Adding newline to engine.json * Changed register -this-engine to be data driven * adding build server support * fix log dir * fix add remove * fix template creation for restricted * fix typos and descriptions * Add newline to the end of template.json * Adding newline to the end of assets_scan_folders.seteg * current_project in global project that creates/edits the .o3de/Registry/bootstrap.setreg * fix the build server flags * fix the o3de manifest server portion * disable project manager tests for now. Its changed too much and lytestools is not working at the moment. I will get back to this later. * fix the Mac build config * disable project_test, this is the project manager. It has changed too much for these tests to work at the moment. I'll get back to them Co-authored-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com>
This commit is contained in:
+750
-386
File diff suppressed because it is too large
Load Diff
@@ -9,54 +9,67 @@
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
#
|
||||
|
||||
|
||||
import pytest
|
||||
'''
|
||||
import os
|
||||
import sys
|
||||
import tempfile
|
||||
import logging
|
||||
import pathlib
|
||||
from unittest.mock import MagicMock
|
||||
|
||||
logger = logging.getLogger()
|
||||
|
||||
# Code lives one folder above
|
||||
projects_path = os.path.realpath(os.path.join(os.path.dirname(__file__), '..'))
|
||||
sys.path.append(projects_path)
|
||||
project_manager_path = os.path.realpath(os.path.join(os.path.dirname(__file__), '..'))
|
||||
sys.path.append(project_manager_path)
|
||||
|
||||
from pyside import add_pyside_environment, is_configuration_valid
|
||||
from ly_test_tools import WINDOWS
|
||||
|
||||
project_marker_file = "project.json"
|
||||
sys.path.append(os.path.realpath(os.path.join(os.path.dirname(__file__), '..', '..', '..')))
|
||||
executable_path = ''
|
||||
from cmake.Tools import registration
|
||||
from cmake.Tools import engine_template
|
||||
|
||||
|
||||
class ProjectHelper:
|
||||
def __init__(self):
|
||||
self._temp_directory = tempfile.TemporaryDirectory()
|
||||
self.temp_project_root = self._temp_directory.name
|
||||
self.temp_file_dir = os.path.join(self.temp_project_root, "o3de")
|
||||
self._temp_directory = pathlib.Path(tempfile.TemporaryDirectory().name).resolve()
|
||||
self._temp_directory.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
self.home_path = self._temp_directory
|
||||
registration.override_home_folder = self.home_path
|
||||
self.engine_path = registration.get_this_engine_path()
|
||||
if registration.register(engine_path=self.engine_path):
|
||||
assert True, f"Failed to register the engine."
|
||||
|
||||
if registration.register_shipped_engine_o3de_objects():
|
||||
assert True, f"Failed to register shipped engine objects."
|
||||
|
||||
self.projects_folder = registration.get_o3de_projects_folder()
|
||||
if not self.projects_folder.is_dir():
|
||||
assert True
|
||||
|
||||
self.application = None
|
||||
self.dialog = None
|
||||
|
||||
if not os.path.exists(self.temp_file_dir):
|
||||
os.makedirs(self.temp_file_dir)
|
||||
|
||||
def create_empty_projects(self):
|
||||
self.project_1_dir = os.path.join(self.temp_project_root, "Project1")
|
||||
if not os.path.exists(self.project_1_dir):
|
||||
os.makedirs(self.project_1_dir)
|
||||
with open(os.path.join(self.project_1_dir,project_marker_file), 'w') as marker_file:
|
||||
marker_file.write("{}")
|
||||
self.project_2_dir = os.path.join(self.temp_project_root, "Project2")
|
||||
if not os.path.exists(self.project_2_dir):
|
||||
os.makedirs(self.project_2_dir)
|
||||
with open(os.path.join(self.project_2_dir, project_marker_file), 'w') as marker_file:
|
||||
marker_file.write("{}")
|
||||
self.project_3_dir = os.path.join(self.temp_project_root, "Project3")
|
||||
if not os.path.exists(self.project_3_dir):
|
||||
os.makedirs(self.project_3_dir)
|
||||
with open(os.path.join(self.project_3_dir, project_marker_file), 'w') as marker_file:
|
||||
marker_file.write("{}")
|
||||
self.invalid_project_dir = os.path.join(self.temp_project_root, "InvalidProject")
|
||||
self.project_1_dir = self.projects_folder / "Project1"
|
||||
if engine_template.create_project(project_manager_path=self.project_1_dir):
|
||||
assert True, f"Failed to create Project1."
|
||||
|
||||
self.project_2_dir = self.projects_folder / "Project2"
|
||||
if engine_template.create_project(project_manager_path=self.project_2_dir):
|
||||
assert True, f"Failed to create Project2."
|
||||
|
||||
self.project_3_dir = self.projects_folder / "Project3"
|
||||
if engine_template.create_project(project_manager_path=self.project_3_dir):
|
||||
assert True, f"Failed to create Project3."
|
||||
|
||||
self.invalid_project_dir = self.projects_folder / "InvalidProject"
|
||||
self.invalid_project_dir.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
def setup_dialog_test(self, workspace):
|
||||
add_pyside_environment(workspace.paths.build_directory())
|
||||
@@ -66,6 +79,7 @@ class ProjectHelper:
|
||||
# need to use the profile version of PySide which works with the profile QT libs which aren't in the debug
|
||||
# folder we've built.
|
||||
return None
|
||||
|
||||
from PySide2.QtWidgets import QApplication, QMessageBox
|
||||
|
||||
if QApplication.instance():
|
||||
@@ -74,13 +88,13 @@ class ProjectHelper:
|
||||
self.application = QApplication(sys.argv)
|
||||
assert self.application
|
||||
|
||||
from projects import ProjectDialog
|
||||
from projects import ProjectManagerDialog
|
||||
|
||||
try:
|
||||
self.dialog = ProjectDialog(settings_folder=self.temp_file_dir)
|
||||
self.dialog = ProjectManagerDialog(settings_folder=self.home_path)
|
||||
return self.dialog
|
||||
except Exception as e:
|
||||
logger.error(f'Failed to create ProjectDialog with error {e}')
|
||||
logger.error(f'Failed to create ProjectManagerDialog with error {e}')
|
||||
return None
|
||||
|
||||
def create_project_from_template(self, project_name) -> bool:
|
||||
@@ -90,21 +104,24 @@ class ProjectHelper:
|
||||
:return: True for Success, False for failure
|
||||
"""
|
||||
from PySide2.QtWidgets import QWidget, QFileDialog
|
||||
from projects import ProjectDialog
|
||||
from projects import ProjectManagerDialog
|
||||
|
||||
QWidget.exec = MagicMock()
|
||||
self.dialog.create_project_handler()
|
||||
QWidget.exec.assert_called_once()
|
||||
|
||||
assert len(self.dialog.project_templates), 'Failed to find any project templates'
|
||||
ProjectDialog.get_selected_project_template = MagicMock(return_value=self.dialog.project_templates[0])
|
||||
ProjectManagerDialog.get_selected_project_template = MagicMock(return_value=self.dialog.project_templates[0])
|
||||
|
||||
QFileDialog.exec = MagicMock()
|
||||
create_project_dir = os.path.join(self.temp_project_root, project_name)
|
||||
QFileDialog.selectedFiles = MagicMock(return_value=[create_project_dir])
|
||||
create_project_path = self.projects_folder / project_name
|
||||
QFileDialog.selectedFiles = MagicMock(return_value=[create_project_path])
|
||||
self.dialog.create_project_accepted_handler()
|
||||
assert os.path.isdir(create_project_dir), f"Expected project folder not found at {create_project_dir}"
|
||||
assert QWidget.exec.call_count == 2, "Message box confirming project creation failed to show"
|
||||
if create_project_path.is_dir():
|
||||
assert True, f"Expected project creation folder not found at {create_project_path}"
|
||||
|
||||
if QWidget.exec.call_count == 2:
|
||||
assert True, "Message box confirming project creation failed to show"
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
@@ -113,7 +130,7 @@ def project_helper():
|
||||
|
||||
|
||||
@pytest.mark.skipif(not WINDOWS, reason="PySide2 only works on windows currently")
|
||||
@pytest.mark.parametrize('project', ['']) # Workspace wants a project, but this test is not project dependent
|
||||
@pytest.mark.parametrize('project', ['']) # Workspace wants a project, but this test is not project dependent
|
||||
def test_logger_handler(workspace, project_helper):
|
||||
my_dialog = project_helper.setup_dialog_test(workspace)
|
||||
if not my_dialog:
|
||||
@@ -126,7 +143,7 @@ def test_logger_handler(workspace, project_helper):
|
||||
|
||||
|
||||
@pytest.mark.skipif(not WINDOWS, reason="PySide2 only works on windows currently")
|
||||
@pytest.mark.parametrize('project', ['']) # Workspace wants a project, but this test is not project dependent
|
||||
@pytest.mark.parametrize('project', ['']) # Workspace wants a project, but this test is not project dependent
|
||||
def test_mru_list(workspace, project_helper):
|
||||
my_dialog = project_helper.setup_dialog_test(workspace)
|
||||
if not my_dialog:
|
||||
@@ -140,16 +157,16 @@ def test_mru_list(workspace, project_helper):
|
||||
assert len(mru_list) == 0, f'MRU list unexpectedly had entries: {mru_list}'
|
||||
|
||||
QMessageBox.warning = MagicMock()
|
||||
my_dialog.add_new_project('TestProjectInvalid')
|
||||
my_dialog.add_project(project_helper.invalid_project_dir)
|
||||
mru_list = my_dialog.get_mru_list()
|
||||
assert len(mru_list) == 0, f'MRU list unexpectedly added an invalid project : {mru_list}'
|
||||
QMessageBox.warning.assert_called_once()
|
||||
|
||||
my_dialog.add_new_project(project_helper.project_1_dir)
|
||||
my_dialog.add_project(project_helper.project_1_dir)
|
||||
mru_list = my_dialog.get_mru_list()
|
||||
assert len(mru_list) == 1, f'MRU list failed to add project at {project_helper.project_1_dir}'
|
||||
|
||||
my_dialog.add_new_project(project_helper.project_1_dir)
|
||||
my_dialog.add_project(project_helper.project_1_dir)
|
||||
mru_list = my_dialog.get_mru_list()
|
||||
assert len(mru_list) == 1, f'MRU list added project at {project_helper.project_1_dir} a second time : {mru_list}'
|
||||
|
||||
@@ -157,7 +174,7 @@ def test_mru_list(workspace, project_helper):
|
||||
mru_list = my_dialog.get_mru_list()
|
||||
assert len(mru_list) == 1, f'MRU list added project at {project_helper.project_1_dir} a second time : {mru_list}'
|
||||
|
||||
my_dialog.add_new_project(project_helper.project_2_dir)
|
||||
my_dialog.add_project(project_helper.project_2_dir)
|
||||
mru_list = my_dialog.get_mru_list()
|
||||
assert len(mru_list) == 2, f'MRU list failed to add project at {project_helper.project_2_dir}'
|
||||
|
||||
@@ -170,13 +187,13 @@ def test_mru_list(workspace, project_helper):
|
||||
assert mru_list[0] == project_helper.project_1_dir, f"{project_helper.project_1_dir} wasn't first item"
|
||||
assert mru_list[1] == project_helper.project_2_dir, f"{project_helper.project_2_dir} wasn't second item"
|
||||
|
||||
my_dialog.add_new_project(project_helper.invalid_project_dir)
|
||||
my_dialog.add_project(project_helper.invalid_project_dir)
|
||||
mru_list = my_dialog.get_mru_list()
|
||||
assert len(mru_list) == 2, f'MRU list added invalid item {mru_list}'
|
||||
assert mru_list[0] == project_helper.project_1_dir, f"{project_helper.project_1_dir} wasn't first item"
|
||||
assert mru_list[1] == project_helper.project_2_dir, f"{project_helper.project_2_dir} wasn't second item"
|
||||
|
||||
my_dialog.add_new_project(project_helper.project_3_dir)
|
||||
my_dialog.add_project(project_helper.project_3_dir)
|
||||
mru_list = my_dialog.get_mru_list()
|
||||
assert len(mru_list) == 3, f'MRU list failed to add {project_helper.project_3_dir} : {mru_list}'
|
||||
assert mru_list[0] == project_helper.project_3_dir, f"{project_helper.project_3_dir} wasn't first item"
|
||||
@@ -185,7 +202,7 @@ def test_mru_list(workspace, project_helper):
|
||||
|
||||
|
||||
@pytest.mark.skipif(not WINDOWS, reason="PySide2 only works on windows currently")
|
||||
@pytest.mark.parametrize('project', ['']) # Workspace wants a project, but this test is not project dependent
|
||||
@pytest.mark.parametrize('project', ['']) # Workspace wants a project, but this test is not project dependent
|
||||
def test_create_project(workspace, project_helper):
|
||||
my_dialog = project_helper.setup_dialog_test(workspace)
|
||||
if not my_dialog:
|
||||
@@ -195,7 +212,7 @@ def test_create_project(workspace, project_helper):
|
||||
|
||||
|
||||
@pytest.mark.skipif(not WINDOWS, reason="PySide2 only works on windows currently")
|
||||
@pytest.mark.parametrize('project', ['']) # Workspace wants a project, but this test is not project dependent
|
||||
@pytest.mark.parametrize('project', ['']) # Workspace wants a project, but this test is not project dependent
|
||||
def test_add_remove_gems(workspace, project_helper):
|
||||
my_dialog = project_helper.setup_dialog_test(workspace)
|
||||
if not my_dialog:
|
||||
@@ -203,32 +220,36 @@ def test_add_remove_gems(workspace, project_helper):
|
||||
|
||||
my_project_name = "TestAddRemoveGems"
|
||||
|
||||
project_helper.create_project_from_template(my_project_name)
|
||||
my_project_path = os.path.join(project_helper.temp_project_root, my_project_name)
|
||||
project_helper.create_project_from_template(project_manager_path=my_project_name)
|
||||
my_project_path = project_helper.projects_folder / my_project_name
|
||||
|
||||
from PySide2.QtWidgets import QWidget, QFileDialog
|
||||
from projects import ProjectDialog
|
||||
from projects import ProjectManagerDialog
|
||||
|
||||
assert my_dialog.path_for_selection() == my_project_path, "Gems project not selected"
|
||||
assert my_dialog.get_selected_project_path() == my_project_path, "TestAddRemoveGems project not selected"
|
||||
QWidget.exec = MagicMock()
|
||||
my_dialog.manage_gems_handler()
|
||||
assert my_dialog.manage_gems_dialog, "No gem management dialog created"
|
||||
assert my_dialog.manage_gem_targets_dialog, "No gem management dialog created"
|
||||
QWidget.exec.assert_called_once()
|
||||
|
||||
assert len(my_dialog.gems_list), 'Failed to find any gems'
|
||||
my_test_gem = my_dialog.gems_list[0]
|
||||
my_test_gem_name = my_test_gem.get("Name")
|
||||
my_test_gem_path = my_test_gem.get("Path")
|
||||
my_test_gem_selection = (my_test_gem_name, my_test_gem_path)
|
||||
ProjectDialog.get_selected_add_gems = MagicMock(return_value=[my_test_gem_selection])
|
||||
if not len(my_dialog.all_gems_list):
|
||||
assert True, 'Failed to find any gems'
|
||||
|
||||
my_test_gem_path = my_dialog.all_gems_list[0]
|
||||
gem_data = registration.get_gem_data(my_test_gem_path)
|
||||
my_test_gem_selection = (my_test_gem_name, my_test_gem_path)
|
||||
ProjectManagerDialog.get_selected_add_gems = MagicMock(return_value=[my_test_gem_selection])
|
||||
|
||||
assert my_test_gem_name, "No Name set in test gem"
|
||||
assert my_test_gem_name not in my_dialog.project_gem_list, f'Gem {my_test_gem_name} already in project gem list'
|
||||
|
||||
my_dialog.add_gems_handler()
|
||||
assert my_test_gem_name in my_dialog.project_gem_list, f'Gem {my_test_gem_name} failed to add to gem list'
|
||||
ProjectDialog.get_selected_project_gems = MagicMock(return_value=[my_test_gem_name])
|
||||
|
||||
ProjectManagerDialog.get_selected_project_gems = MagicMock(return_value=[my_test_gem_name])
|
||||
my_dialog.remove_gems_handler()
|
||||
assert my_test_gem_name not in my_dialog.project_gem_list, f'Gem {my_test_gem_name} still in project gem list'
|
||||
'''
|
||||
|
||||
|
||||
def test_project_place_holder():
|
||||
pass
|
||||
@@ -0,0 +1,94 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>createFromTemplateDialog</class>
|
||||
<widget class="QDialog" name="createFromTemplateDialog">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>467</width>
|
||||
<height>288</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Create From Template</string>
|
||||
</property>
|
||||
<widget class="QDialogButtonBox" name="okCancel">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>50</x>
|
||||
<y>250</y>
|
||||
<width>400</width>
|
||||
<height>32</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QListView" name="genericTemplates">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>20</y>
|
||||
<width>449</width>
|
||||
<height>221</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="selectionMode">
|
||||
<enum>QAbstractItemView::SingleSelection</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>0</y>
|
||||
<width>300</width>
|
||||
<height>16</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Available Templates</string>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>okCancel</sender>
|
||||
<signal>accepted()</signal>
|
||||
<receiver>createFromTemplateDialog</receiver>
|
||||
<slot>accept()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>248</x>
|
||||
<y>254</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>157</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>okCancel</sender>
|
||||
<signal>rejected()</signal>
|
||||
<receiver>createFromTemplateDialog</receiver>
|
||||
<slot>reject()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>316</x>
|
||||
<y>260</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>286</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
</ui>
|
||||
@@ -0,0 +1,94 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>createGemDialog</class>
|
||||
<widget class="QDialog" name="createGemDialog">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>467</width>
|
||||
<height>288</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Create Gem</string>
|
||||
</property>
|
||||
<widget class="QDialogButtonBox" name="okCancel">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>50</x>
|
||||
<y>250</y>
|
||||
<width>400</width>
|
||||
<height>32</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QListView" name="gemTemplates">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>20</y>
|
||||
<width>449</width>
|
||||
<height>221</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="selectionMode">
|
||||
<enum>QAbstractItemView::SingleSelection</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>0</y>
|
||||
<width>300</width>
|
||||
<height>16</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Available Templates</string>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>okCancel</sender>
|
||||
<signal>accepted()</signal>
|
||||
<receiver>createGemDialog</receiver>
|
||||
<slot>accept()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>248</x>
|
||||
<y>254</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>157</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>okCancel</sender>
|
||||
<signal>rejected()</signal>
|
||||
<receiver>createGemDialog</receiver>
|
||||
<slot>reject()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>316</x>
|
||||
<y>260</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>286</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
</ui>
|
||||
@@ -6,7 +6,7 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>226</width>
|
||||
<width>467</width>
|
||||
<height>288</height>
|
||||
</rect>
|
||||
</property>
|
||||
@@ -18,7 +18,7 @@
|
||||
<rect>
|
||||
<x>50</x>
|
||||
<y>250</y>
|
||||
<width>171</width>
|
||||
<width>400</width>
|
||||
<height>32</height>
|
||||
</rect>
|
||||
</property>
|
||||
@@ -34,7 +34,7 @@
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>20</y>
|
||||
<width>211</width>
|
||||
<width>449</width>
|
||||
<height>221</height>
|
||||
</rect>
|
||||
</property>
|
||||
@@ -47,7 +47,7 @@
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>0</y>
|
||||
<width>101</width>
|
||||
<width>300</width>
|
||||
<height>16</height>
|
||||
</rect>
|
||||
</property>
|
||||
|
||||
+29
-29
@@ -1,24 +1,24 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>addGemsDialog</class>
|
||||
<widget class="QDialog" name="addGemsDialog">
|
||||
<class>manageGemTargetsDialog</class>
|
||||
<widget class="QDialog" name="manageGemTargetsDialog">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>635</width>
|
||||
<height>327</height>
|
||||
<width>702</width>
|
||||
<height>297</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Manage Gems</string>
|
||||
<string>Manage Gem Targets</string>
|
||||
</property>
|
||||
<widget class="QDialogButtonBox" name="close">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>460</x>
|
||||
<y>290</y>
|
||||
<width>171</width>
|
||||
<x>310</x>
|
||||
<y>260</y>
|
||||
<width>71</width>
|
||||
<height>32</height>
|
||||
</rect>
|
||||
</property>
|
||||
@@ -29,10 +29,10 @@
|
||||
<set>QDialogButtonBox::Close</set>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QListView" name="addGemsList">
|
||||
<widget class="QListView" name="availableGemTargetsList">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>380</x>
|
||||
<x>440</x>
|
||||
<y>50</y>
|
||||
<width>250</width>
|
||||
<height>221</height>
|
||||
@@ -48,7 +48,7 @@
|
||||
<enum>QAbstractItemView::ExtendedSelection</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QListView" name="projectGems">
|
||||
<widget class="QListView" name="enabledGemTargetsList">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
@@ -64,14 +64,14 @@
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>380</x>
|
||||
<x>440</x>
|
||||
<y>30</y>
|
||||
<width>91</width>
|
||||
<width>251</width>
|
||||
<height>16</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Available Gems</string>
|
||||
<string>Available Gem Targets</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label_4">
|
||||
@@ -79,38 +79,38 @@
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>30</y>
|
||||
<width>71</width>
|
||||
<width>251</width>
|
||||
<height>16</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Enabled Gems</string>
|
||||
<string>Enabled Gem Targets</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="removeGemsButton">
|
||||
<widget class="QPushButton" name="removeGemTargetsButton">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>267</x>
|
||||
<x>264</x>
|
||||
<y>130</y>
|
||||
<width>105</width>
|
||||
<width>171</width>
|
||||
<height>23</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Remove Gems >></string>
|
||||
<string>Remove Gem Targets >></string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="addGemsButton">
|
||||
<widget class="QPushButton" name="addGemTargetsButton">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>267</x>
|
||||
<x>264</x>
|
||||
<y>100</y>
|
||||
<width>105</width>
|
||||
<width>171</width>
|
||||
<height>23</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string><< Add Gems</string>
|
||||
<string><< Add Gem Targets</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label">
|
||||
@@ -118,12 +118,12 @@
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>5</y>
|
||||
<width>241</width>
|
||||
<height>16</height>
|
||||
<width>400</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Adding new Gems may require rebuilding</string>
|
||||
<string>Adding new Gem Targets may require rebuilding</string>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
@@ -132,7 +132,7 @@
|
||||
<connection>
|
||||
<sender>close</sender>
|
||||
<signal>accepted()</signal>
|
||||
<receiver>addGemsDialog</receiver>
|
||||
<receiver>manageGemTargetsDialog</receiver>
|
||||
<slot>accept()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
@@ -148,7 +148,7 @@
|
||||
<connection>
|
||||
<sender>close</sender>
|
||||
<signal>rejected()</signal>
|
||||
<receiver>addGemsDialog</receiver>
|
||||
<receiver>manageGemTargetsDialog</receiver>
|
||||
<slot>reject()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
@@ -0,0 +1,407 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>Dialog</class>
|
||||
<widget class="QDialog" name="Dialog">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>712</width>
|
||||
<height>395</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>1</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>O3DE</string>
|
||||
</property>
|
||||
<property name="whatsThis">
|
||||
<string>Select and manage your projects for O3DE</string>
|
||||
</property>
|
||||
<widget class="QDialogButtonBox" name="okCancel">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>540</x>
|
||||
<y>360</y>
|
||||
<width>161</width>
|
||||
<height>31</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QComboBox" name="projectListBox">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>30</y>
|
||||
<width>691</width>
|
||||
<height>31</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="whatsThis">
|
||||
<string>Current project to launch or manage gems for.</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>10</y>
|
||||
<width>47</width>
|
||||
<height>13</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Project</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="logDisplay">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>270</x>
|
||||
<y>220</y>
|
||||
<width>431</width>
|
||||
<height>141</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Panel</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Sunken</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QGroupBox" name="createGroupBox">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>70</y>
|
||||
<width>241</width>
|
||||
<height>151</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Create</string>
|
||||
</property>
|
||||
<widget class="QPushButton" name="createFromTemplateButton">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>110</y>
|
||||
<width>221</width>
|
||||
<height>31</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="whatsThis">
|
||||
<string>Create a new O3DE object from a pre configured template.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Create From Template</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="createProjectButton">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>20</y>
|
||||
<width>221</width>
|
||||
<height>31</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="whatsThis">
|
||||
<string>Create a new O3DE object from a pre configured template.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Create Project</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="createGemButton">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>11</x>
|
||||
<y>50</y>
|
||||
<width>221</width>
|
||||
<height>31</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="whatsThis">
|
||||
<string>Create a new O3DE object from a pre configured template.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Create Gem</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="createTemplateButton">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>11</x>
|
||||
<y>80</y>
|
||||
<width>221</width>
|
||||
<height>31</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="whatsThis">
|
||||
<string>Create a new O3DE object from a pre configured template.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Create Template</string>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
<widget class="QGroupBox" name="addRemoveGroupBox">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>260</x>
|
||||
<y>70</y>
|
||||
<width>451</width>
|
||||
<height>141</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Registration</string>
|
||||
</property>
|
||||
<widget class="QPushButton" name="addTemplateButton">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>80</y>
|
||||
<width>211</width>
|
||||
<height>31</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="whatsThis">
|
||||
<string>Browse for an existing O3DE project.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Add Template</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="addProjectButton">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>20</y>
|
||||
<width>211</width>
|
||||
<height>31</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="whatsThis">
|
||||
<string>Browse for an existing O3DE project.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Add Project</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="addGemButton">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>50</y>
|
||||
<width>211</width>
|
||||
<height>31</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="whatsThis">
|
||||
<string>Browse for an existing O3DE project.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Add Gem</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="addRestrictedButton">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>110</y>
|
||||
<width>211</width>
|
||||
<height>31</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="whatsThis">
|
||||
<string>Browse for an existing O3DE project.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Add Restricted</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="removeRestrictedButton">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>230</x>
|
||||
<y>110</y>
|
||||
<width>211</width>
|
||||
<height>31</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="whatsThis">
|
||||
<string>Browse for an existing O3DE project.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Remove Restricted</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="removeProjectButton">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>230</x>
|
||||
<y>20</y>
|
||||
<width>211</width>
|
||||
<height>31</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="whatsThis">
|
||||
<string>Browse for an existing O3DE project.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Remove Project</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="removeGemButton">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>230</x>
|
||||
<y>50</y>
|
||||
<width>211</width>
|
||||
<height>31</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="whatsThis">
|
||||
<string>Browse for an existing O3DE project.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Remove Gem</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="removeTemplateButton">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>230</x>
|
||||
<y>80</y>
|
||||
<width>211</width>
|
||||
<height>31</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="whatsThis">
|
||||
<string>Browse for an existing O3DE project.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Remove Template</string>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
<widget class="QGroupBox" name="manageProjectGroupBox">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>230</y>
|
||||
<width>241</width>
|
||||
<height>121</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Manage Project</string>
|
||||
</property>
|
||||
<widget class="QPushButton" name="manageServerGemTargetsButton">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>80</y>
|
||||
<width>221</width>
|
||||
<height>31</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="whatsThis">
|
||||
<string>Add or remove gems from your selected project. Gems add and remove additional assets and features to projects.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Manage Server Gem Targets</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="manageToolGemTargetsButton">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>50</y>
|
||||
<width>221</width>
|
||||
<height>31</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="whatsThis">
|
||||
<string>Add or remove gems from your selected project. Gems add and remove additional assets and features to projects.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Manage Tool Gem Targets</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="manageRuntimeGemTargetsButton">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>20</y>
|
||||
<width>221</width>
|
||||
<height>31</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="whatsThis">
|
||||
<string>Add or remove gems from your selected project. Gems add and remove additional assets and features to projects.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Manage Runtime Gem Targets</string>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>okCancel</sender>
|
||||
<signal>accepted()</signal>
|
||||
<receiver>Dialog</receiver>
|
||||
<slot>accept()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>248</x>
|
||||
<y>254</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>157</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>okCancel</sender>
|
||||
<signal>rejected()</signal>
|
||||
<receiver>Dialog</receiver>
|
||||
<slot>reject()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>316</x>
|
||||
<y>260</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>286</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
</ui>
|
||||
@@ -1,167 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>Dialog</class>
|
||||
<widget class="QDialog" name="Dialog">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>464</width>
|
||||
<height>136</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>1</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>O3DE</string>
|
||||
</property>
|
||||
<property name="whatsThis">
|
||||
<string>Select and manage your projects for O3DE</string>
|
||||
</property>
|
||||
<widget class="QDialogButtonBox" name="okCancel">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>290</x>
|
||||
<y>100</y>
|
||||
<width>171</width>
|
||||
<height>31</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QComboBox" name="projectListBox">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>30</y>
|
||||
<width>451</width>
|
||||
<height>31</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="whatsThis">
|
||||
<string>Current project to launch or manage gems for.</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="createProjectButton">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>70</y>
|
||||
<width>91</width>
|
||||
<height>23</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="whatsThis">
|
||||
<string>Create a new O3DE project from a pre configured template.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Create New</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>10</y>
|
||||
<width>47</width>
|
||||
<height>13</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Project</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="browseProjectsButton">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>110</x>
|
||||
<y>70</y>
|
||||
<width>91</width>
|
||||
<height>23</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="whatsThis">
|
||||
<string>Browse for an existing O3DE project.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Browse</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="manageGemsButton">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>350</x>
|
||||
<y>70</y>
|
||||
<width>91</width>
|
||||
<height>23</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="whatsThis">
|
||||
<string>Add or remove gems from your selected project. Gems add and remove additional assets and features to projects.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Manage Gems</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="logDisplay">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>5</x>
|
||||
<y>110</y>
|
||||
<width>275</width>
|
||||
<height>16</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>okCancel</sender>
|
||||
<signal>accepted()</signal>
|
||||
<receiver>Dialog</receiver>
|
||||
<slot>accept()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>248</x>
|
||||
<y>254</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>157</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>okCancel</sender>
|
||||
<signal>rejected()</signal>
|
||||
<receiver>Dialog</receiver>
|
||||
<slot>reject()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>316</x>
|
||||
<y>260</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>286</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
</ui>
|
||||
Reference in New Issue
Block a user